{"version":3,"file":"zyzgroup_core_web.umd.cjs","sources":["../../core-common/dist/zyzgroup_core_common.js","../../../node_modules/.pnpm/spark-md5@3.0.2/node_modules/spark-md5/spark-md5.js","../src/file.ts","../../../node_modules/.pnpm/hammerjs@2.0.8/node_modules/hammerjs/hammer.js","../../../node_modules/.pnpm/tslib@2.8.1/node_modules/tslib/tslib.es6.mjs","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/isFunction.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/createErrorClass.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/UnsubscriptionError.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/arrRemove.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/Subscription.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/config.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/scheduler/timeoutProvider.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/reportUnhandledError.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/noop.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/errorContext.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/Subscriber.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/symbol/observable.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/identity.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/pipe.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/Observable.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/lift.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/operators/OperatorSubscriber.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/ObjectUnsubscribedError.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/Subject.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/BehaviorSubject.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/scheduler/dateTimestampProvider.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/ReplaySubject.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/scheduler/Action.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/scheduler/intervalProvider.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/scheduler/AsyncAction.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/Scheduler.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/scheduler/AsyncScheduler.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/scheduler/async.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/observable/empty.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/isScheduler.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/args.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/isArrayLike.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/isPromise.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/isInteropObservable.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/isAsyncIterable.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/throwUnobservableError.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/symbol/iterator.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/isIterable.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/isReadableStreamLike.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/observable/innerFrom.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/executeSchedule.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/operators/observeOn.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/operators/subscribeOn.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/scheduled/scheduleObservable.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/scheduled/schedulePromise.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/scheduled/scheduleArray.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/scheduled/scheduleIterable.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/scheduled/scheduleAsyncIterable.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/scheduled/scheduleReadableStreamLike.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/scheduled/scheduled.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/observable/from.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/observable/of.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/EmptyError.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/firstValueFrom.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/isDate.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/operators/map.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/mapOneOrManyArgs.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/argsArgArrayOrObject.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/createObject.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/observable/combineLatest.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/operators/mergeInternals.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/operators/mergeMap.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/operators/mergeAll.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/operators/concatAll.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/observable/concat.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/observable/fromEvent.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/observable/fromEventPattern.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/observable/timer.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/observable/merge.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/util/argsOrArgArray.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/operators/filter.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/observable/race.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/operators/distinctUntilChanged.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/operators/exhaustMap.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/operators/share.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/operators/shareReplay.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/operators/startWith.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/operators/switchMap.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/operators/switchAll.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/operators/takeUntil.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/operators/tap.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/operators/throttle.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/operators/throttleTime.js","../../../node_modules/.pnpm/rxjs@7.8.2/node_modules/rxjs/dist/esm5/internal/operators/windowToggle.js","../src/hooks/useEventListener.ts","../src/animate/schedule.ts","../src/animate/tween/Sequence.ts","../src/animate/tween/Easing.ts","../src/animate/tween/BezierEasing.ts","../src/animate/tween/Interpolation.ts","../src/animate/tween/Group.ts","../src/animate/tween/mainGroup.ts","../src/animate/tween/Tween.ts","../src/animate/tween/index.ts","../src/animate/Clock.ts","../src/animate/Timeline.ts","../src/hooks/useVnode.ts","../src/image/image.ts","../src/image/image-gif.ts","../src/image/qrcode.ts","../src/math/math.ts","../src/math/Quaternion.ts","../src/math/Vector.ts","../src/canvas/CustomCanvasContext.ts","../src/canvas/YZCanvasContext.ts","../src/math/line/L.ts","../src/math/line/Arc.ts","../src/math/line/QuadraticBezier.ts","../src/math/line/CubicBezier.ts","../src/svg/line2c.ts","../src/svg/DOMSVGUtil.ts","../src/math/line/PathD.ts","../src/math/Shape.ts","../src/math/shapes/Point3D.ts","../src/math/Matrix.ts","../src/math/BufferAttribute.ts","../src/image/bitmap.ts","../src/hooks/useElement.ts","../src/ajax.ts","../src/hooks/useStyle.ts","../src/hooks/useAttribute.ts","../src/hooks/useElementEvents.ts","../src/hooks/useResize.ts","../src/hooks/useElementEventBus.ts","../src/hooks/useDraw/line/L.ts","../src/hooks/useDraw/line/Arc.ts","../src/hooks/useDraw/line/QuadraticBezier.ts","../src/hooks/useDraw/line/CubicBezier.ts","../src/hooks/useDraw/svg/line2c.ts","../src/hooks/useDraw/svg/SVGUtil.ts","../src/dom/DOMVideo.ts","../src/dom/DOMParse.ts","../src/dom/parseCSS.js","../src/hooks/useDraw/svg/SVGParse.ts","../src/hooks/useDraw/line/PathD.ts","../src/hooks/useDraw/canvas/CustomCanvasContext.ts","../src/hooks/useDraw/canvas/YZCanvasContext.ts","../src/hooks/useDraw/Shape.ts","../src/color.ts","../src/hooks/useDraw/DrawContext.ts","../src/hooks/useDraw/shapes/LineShape.ts","../src/hooks/useDraw/shapes/CurveShape.ts","../src/hooks/useDraw/shapes/PointsShape.ts","../src/hooks/useDraw/shapes/TreeShapeCombo.ts","../src/hooks/useDraw/shapes/BallShape.ts","../src/hooks/useDraw/shapes/ArrowShape.ts","../src/hooks/useDraw/shapes/RectShape.ts","../src/hooks/useDraw/shapes/HeartShape.ts","../src/hooks/useDraw/shapes/HeartVariantShape.ts","../src/hooks/useDraw/shapes/StarShape.ts","../src/hooks/useDraw/shapes/FoxShape.ts","../src/hooks/useDraw/shapes/RabbitShape.ts","../src/hooks/useDraw/shapes/CrossShape.ts","../src/hooks/useDraw/shapes/EllipseShape.ts","../src/hooks/useDraw/shapes/ShipShapeCombo.ts","../src/hooks/useDraw/shapes/SegmentShapeCombo.ts","../src/hooks/useDraw/shapes/SliderShapeCombo.ts","../src/hooks/useDraw/shapes/RingShape.ts","../src/hooks/useDraw/shapes/RingIndicatorShapeCombo.ts","../src/hooks/useDraw/shapes/TextShape.ts","../src/hooks/useDraw/shapes/ConfettiShapeCombo.ts","../src/hooks/useMutation.ts","../src/hooks/useIntersection.ts","../src/hooks/useVisible.ts","../src/hooks/useSafeArea.ts","../src/hooks/useCoords.ts","../src/hooks/useMatchMedia.ts","../src/hooks/useSessionStorage.ts","../src/hooks/useFeRouteChange.ts","../src/hooks/useDataset.ts","../src/hooks/useLocalStorage.ts","../src/hooks/useTheme.ts","../src/hooks/useCookie.ts","../src/hooks/useIndexDB.ts","../src/hooks/useFetch.ts","../src/hooks/useLocale/locales/zh-cn.ts","../src/hooks/useLocale/locales/en.ts","../src/hooks/useLocale/useLocale.ts","../src/vnode.ts","../src/MVVM.ts","../src/WebSocketClient.ts","../src/env.js","../src/rem.js","../src/svg/SVGParse.ts","../src/webrtc/index.ts","../src/webgl/index.ts","../src/wxJSSDK.ts","../src/aliJSSDK.ts","../src/mapTDTJSSDK.ts","../src/signature.ts","../src/Pagination.ts","../src/Context.ts","../src/WebMonitor.ts"],"sourcesContent":["const ns = Function(\"return this\")();\nfunction rs() {\n  const e = typeof globalThis == \"object\" && globalThis && globalThis.Object === Object && globalThis, t = typeof window == \"object\" && window && window.Object === Object && window, n = typeof global == \"object\" && global && global.Object === Object && global, r = typeof self == \"object\" && self && self.Object === Object && self;\n  return e || t || n || r || ns;\n}\nconst T = rs(), Bn = \"@YZ/\";\nfunction qn(e, t = Bn) {\n  return e.startsWith(t);\n}\nfunction Wn(e, t = Bn) {\n  return qn(e, t) ? e : `${t}${e}`;\n}\nfunction Ue(e) {\n  return typeof e == \"string\" && e.startsWith(\"Symbol(\") && e.endsWith(\")\");\n}\nfunction ze(e) {\n  return Ue(e) && (e = e.slice(7, -1)), e;\n}\nfunction Hn(e) {\n  return e = ze(e), e = Wn(e), typeof Symbol == \"function\" ? Symbol(e) : `Symbol(${e})`;\n}\nconst ht = Hn(\"META\");\nfunction Ma(e, t) {\n  const n = t.toString();\n  if (!Ue(n))\n    return !1;\n  if (e && typeof e == \"object\") {\n    if (!qn(ze(n)))\n      return t in e;\n    for (const r of Reflect.ownKeys(e))\n      if (r.toString() == n)\n        return !0;\n    return !1;\n  }\n  return !1;\n}\nfunction hn(e) {\n  if (!Ue(e))\n    return e;\n  switch (e = ze(e), e) {\n    case Wn(\"META\"):\n      return ht;\n    default:\n      return Hn(e);\n  }\n}\nfunction ve(e) {\n  if (Array.isArray(e))\n    return e.map(ve);\n  if (e && typeof e == \"object\") {\n    const t = {};\n    for (const n of Reflect.ownKeys(e)) {\n      const r = e[n];\n      t[typeof n == \"symbol\" ? n.toString() : n] = typeof r == \"symbol\" ? r.toString() : ve(r);\n    }\n    return t;\n  }\n  return typeof e == \"symbol\" ? e.toString() : e;\n}\nfunction Re(e) {\n  if (Array.isArray(e))\n    return e.map(Re);\n  if (e && typeof e == \"object\") {\n    const t = {};\n    for (const n of Object.keys(e))\n      t[hn(n)] = Re(e[n]);\n    return t;\n  }\n  return hn(e);\n}\nfunction ss(e) {\n  return JSON.stringify(ve(e));\n}\nconst je = ss;\nfunction is(e) {\n  return Re(JSON.parse(e));\n}\nconst La = is;\nclass os {\n}\nfunction le(e) {\n  e || (e = T), Object.prototype.hasOwnProperty.call(e, ht) === !1 && Object.defineProperty(e, ht, {\n    value: new os()\n  });\n  const t = {\n    set: (n, r) => e[ht][n] = r,\n    get: (n, r) => {\n      const s = e[ht][n];\n      return s === void 0 && r !== void 0 ? (t.set(n, r), r) : s;\n    },\n    delete: (n) => {\n      delete e[ht][n];\n    }\n  };\n  return t;\n}\nvar J = /* @__PURE__ */ ((e) => (e.UNKNOWN = \"\", e.TEXT = \"text/plain\", e.MD = \"text/plain\", e.HTML = \"text/html\", e.XML_TEXT = \"text/xml\", e.CSS = \"text/css\", e.JPEG = \"image/jpeg\", e.PNG = \"image/png\", e.GIF = \"image/gif\", e.BMP = \"image/bmp\", e.WEBP = \"image/webp\", e.SVG = \"image/svg+xml\", e.ICON = \"image/x-icon\", e.MICROSOFT_ICON = \"image/vnd.microsoft.icon\", e.MPEG = \"audio/mpeg\", e.MP3 = \"audio/mpeg\", e.MP4 = \"video/mp4\", e.OGG = \"audio/ogg\", e.WAV = \"audio/wav\", e.MIDI = \"audio/midi\", e.WEBM = \"video/webm\", e.VIDEO_OGG = \"video/ogg\", e.OCTET_STREAM = \"application/octet-stream\", e.JAVASCRIPT = \"application/javascript\", e.ECMASCRIPT = \"application/ecmascript\", e.JSON = \"application/json\", e.XML = \"application/xml\", e.XHTML = \"application/xhtml+xml\", e.XWWW = \"application/x-www-form-urlencoded\", e.DOC = \"application/msword\", e.CSV = \"application/x-csv\", e.EXCEL = \"application/vnb.ms-excel\", e.PPT = \"application/vnb.mspowerpoint\", e.PDF = \"application/pdf\", e.ZIP = \"application/zip\", e.TGZ = \"application/x-gtar\", e.TAR_GZ = \"application/x-gzip\", e.EOT = \"appliaction/vnd.ms-fontobject\", e.TTF = \"aplication/font-sfnt\", e.PKCS12 = \"aplication/pkcs12\", e))(J || {}), Zt = /* @__PURE__ */ ((e) => (e.ascii = \"ascii\", e.utf8 = \"utf8\", e.utf16le = \"utf16le\", e.ucs2 = \"ucs2\", e.base64 = \"base64\", e.base64url = \"base64url\", e.latin1 = \"latin1\", e.binary = \"binary\", e.hex = \"hex\", e))(Zt || {}), as = /* @__PURE__ */ ((e) => (e.text = \"text\", e.dataURL = \"dataURL\", e.binaryString = \"binaryString\", e.arraybuffer = \"arraybuffer\", e))(as || {}), cs = /* @__PURE__ */ ((e) => (e.md5 = \"md5\", e.sha1 = \"sha1\", e.sha256 = \"sha256\", e.SHA256 = \"SHA-256\", e.sha512 = \"sha512\", e.SHA512 = \"SHA-512\", e.AESGCM = \"AES-GCM\", e.ECDSA = \"ECDSA\", e))(cs || {}), us = /* @__PURE__ */ ((e) => (e.aes_128_cbc = \"aes-128-cbc\", e.aes_128_ecb = \"aes-128-ecb\", e.aes_192_cbc = \"aes-192-cbc\", e.ae_192_ecb = \"aes-192-ecb\", e.aes_256_cbc = \"aes-256-cbc\", e.aes_256_ecb = \"aes-256-ecb\", e.base64 = \"base64\", e))(us || {});\nconst Ia = [\n  \"jelly\",\n  \"bounce\",\n  \"flash\",\n  \"pulse\",\n  \"rubberBand\",\n  \"shakeX\",\n  \"shakeY\",\n  \"headShake\",\n  \"swing\",\n  \"tada\",\n  \"wobble\",\n  \"jello\",\n  \"heartBeat\",\n  \"backInLeft\",\n  \"backInRight\",\n  \"backInUp\",\n  \"backInDown\",\n  \"backOutLeft\",\n  \"backOutRight\",\n  \"backOutUp\",\n  \"backOutDown\",\n  \"bounceIn\",\n  \"bounceInLeft\",\n  \"bounceInRight\",\n  \"bounceInUp\",\n  \"bounceInDown\",\n  \"bounceOut\",\n  \"bounceOutLeft\",\n  \"bounceOutRight\",\n  \"bounceOutUp\",\n  \"bounceOutDown\",\n  \"fadeIn\",\n  \"fadeInLeft\",\n  \"fadeInLeftBig\",\n  \"fadeInRight\",\n  \"fadeInRightBig\",\n  \"fadeInUp\",\n  \"fadeInUpBig\",\n  \"fadeInDown\",\n  \"fadeInDownBig\",\n  \"fadeInTopLeft\",\n  \"fadeInTopRight\",\n  \"fadeInBottomLeft\",\n  \"fadeInBottomRight\",\n  \"fadeOut\",\n  \"fadeOutLeft\",\n  \"fadeOutLeftBig\",\n  \"fadeOutRight\",\n  \"fadeOutRightBig\",\n  \"fadeOutUp\",\n  \"fadeOutUpBig\",\n  \"fadeOutDown\",\n  \"fadeOutDownBig\",\n  \"fadeOutTopLeft\",\n  \"fadeOutTopRight\",\n  \"fadeOutBottomRight\",\n  \"fadeOutBottomLeft\",\n  \"flip\",\n  \"flipInX\",\n  \"flipInY\",\n  \"flipOutX\",\n  \"flipOutY\",\n  \"flipOutRight\",\n  \"flipInLeft\",\n  \"flipOutLeft\",\n  \"flipInRight\",\n  \"flipOutTop\",\n  \"flipInBottom\",\n  \"flipOutBottom\",\n  \"flipInTop\",\n  \"lightSpeedInLeft\",\n  \"lightSpeedInRight\",\n  \"lightSpeedOutLeft\",\n  \"lightSpeedOutRight\",\n  \"rotateIn\",\n  \"rotateInUpLeft\",\n  \"rotateInUpRight\",\n  \"rotateInDownLeft\",\n  \"rotateInDownRight\",\n  \"rotateOut\",\n  \"rotateOutUpLeft\",\n  \"rotateOutUpRight\",\n  \"rotateOutDownLeft\",\n  \"rotateOutDownRight\",\n  \"hinge\",\n  \"rotateFall\",\n  \"rotateOutNewspaper\",\n  \"rotateInNewspaper\",\n  \"jackInTheBox\",\n  \"rollIn\",\n  \"rollOut\",\n  \"zoomIn\",\n  \"zoomInLeft\",\n  \"zoomInRight\",\n  \"zoomInUp\",\n  \"zoomInDown\",\n  \"zoomOut\",\n  \"zoomOutLeft\",\n  \"zoomOutRight\",\n  \"zoomOutUp\",\n  \"zoomOutDown\",\n  \"fade\",\n  \"moveFromLeft\",\n  \"moveToLeft\",\n  \"moveFromRight\",\n  \"moveToRight\",\n  \"moveFromTop\",\n  \"moveToTop\",\n  \"moveFromBottom\",\n  \"moveToBottom\",\n  \"moveFromLeftFade\",\n  \"moveToLeftFade\",\n  \"moveFromRightFade\",\n  \"moveToRightFade\",\n  \"moveFromTopFade\",\n  \"moveToTopFade\",\n  \"moveFromBottomFade\",\n  \"moveToBottomFade\",\n  \"scaleFromSmall\",\n  \"scaleToSmall\",\n  \"scaleFromLarge\",\n  \"scaleToLarge\",\n  \"scaleFromSmallCenter\",\n  \"scaleToSmallCenter\",\n  \"slideInLeft\",\n  \"slideInRight\",\n  \"slideInUp\",\n  \"slideInDown\",\n  \"slideOutLeft\",\n  \"slideOutRight\",\n  \"slideOutUp\",\n  \"slideOutDown\",\n  \"rotateRightSideFirst\",\n  \"rotateLeftSideFirst\",\n  \"rotateTopSideFirst\",\n  \"rotateBottomSideFirst\",\n  \"rotatePushLeft\",\n  \"rotatePushRight\",\n  \"rotatePushTop\",\n  \"rotatePushBottom\",\n  \"rotatePullRight\",\n  \"rotatePullLeft\",\n  \"rotatePullTop\",\n  \"rotatePullBottom\",\n  \"rotateFoldRight\",\n  \"rotateFoldLeft\",\n  \"rotateFoldTop\",\n  \"rotateFoldBottom\",\n  \"rotateUnfoldLeft\",\n  \"rotateUnfoldRight\",\n  \"rotateUnfoldTop\",\n  \"rotateUnfoldBottom\",\n  \"rotateRoomLeftOut\",\n  \"rotateRoomLeftIn\",\n  \"rotateRoomRightOut\",\n  \"rotateRoomRightIn\",\n  \"rotateRoomTopOut\",\n  \"rotateRoomTopIn\",\n  \"rotateRoomBottomOut\",\n  \"rotateRoomBottomIn\",\n  \"rotateCubeLeftOut\",\n  \"rotateCubeLeftIn\",\n  \"rotateCubeRightOut\",\n  \"rotateCubeRightIn\",\n  \"rotateCubeTopOut\",\n  \"rotateCubeTopIn\",\n  \"rotateCubeBottomOut\",\n  \"rotateCubeBottomIn\",\n  \"rotateCarouselLeftOut\",\n  \"rotateCarouselLeftIn\",\n  \"rotateCarouselRightOut\",\n  \"rotateCarouselRightIn\",\n  \"rotateCarouselTopOut\",\n  \"rotateCarouselTopIn\",\n  \"rotateCarouselBottomOut\",\n  \"rotateCarouselBottomIn\",\n  \"rotateSidesOut\",\n  \"rotateSidesIn\",\n  \"rotateSlideOut\",\n  \"rotateSlideIn\",\n  \"superRainbow\",\n  \"statusProcessing\"\n], ct = (e) => {\n  let t = null;\n  switch (e) {\n    case \"any-character\":\n      t = /[^]/;\n      break;\n    case \"bin\":\n      t = /^(0b)?[0-1]+$/i;\n      break;\n    case \"oct\":\n      t = /^(0o)?[0-7]+$/i;\n      break;\n    case \"hex\":\n      t = /^(0x)?[0-9a-fA-F]+$/i;\n      break;\n    case \"ascii\":\n      t = /^[\\x00-\\xFF]+$/i;\n      break;\n    case \"int\":\n      t = /^[-+]?[0-9]+$/;\n      break;\n    case \"number\":\n      t = /[-+]?[0-9]*\\.?[0-9]+(?:e[-+]?\\d+)?/gi;\n      break;\n    case \"number-single\":\n      t = /[-+]?[0-9]*\\.?[0-9]+(?:e[-+]?\\d+)?/i;\n      break;\n    case \"split\":\n      t = /\\s*,\\s*/gi;\n      break;\n    case \"trim\":\n      t = /^\\s+|\\s+$/g;\n      break;\n    case \"regexp\":\n      t = /[\\\\^$.*+?()[\\]{}|]/g;\n      break;\n    case \"regexp-flags\":\n      t = /\\w*$/;\n      break;\n    case \"native-method\":\n      t = RegExp(\n        \"^\" + Function.prototype.toString.call(Object.prototype.hasOwnProperty).replace(ct(\"regexp\"), \"\\\\$&\").replace(\n          /hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\n          \"$1.*?\"\n        ) + \"$\"\n      );\n      break;\n    case \"svg-segment\":\n      t = /([mlhvzaqtcs])([^mlhvzaqtcs]*)/gi;\n      break;\n    case \"mobile-china\":\n      t = /^[1]{1}[0-9]{10}$/;\n      break;\n    case \"email\":\n      t = /^[A-Za-z0-9_!#$%&'*+/=?`{|}~^.-]+\\@[A-Za-z0-9._-]+\\.[A-Za-z0-9]+$/gm;\n      break;\n    case \"ip\":\n      t = /^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/;\n      break;\n    case \"url\":\n      t = /^http[s]?:\\/\\/([\\w-]+\\.)+[\\w-]+([\\w-./?%&=]*)?$/;\n      break;\n    case \"element-url\":\n      t = /^url\\(['\"]?(.+?)['\"]?\\)$/i;\n      break;\n    case \"date\":\n      t = /^\\d{4}(\\-|\\/|\\.)(\\d{1,2})(\\-|\\/|\\.)(\\d{1,2})$/;\n      break;\n    case \"time\":\n      t = /^(\\d{1,2}):(\\d{1,2}):(\\d{1,2})$/;\n      break;\n    case \"datetime\":\n      t = /^\\d{4}(\\-|\\/|\\.)(\\d{1,2})(\\-|\\/|\\.)(\\d{1,2})\\s+(\\d{1,2}):(\\d{1,2}):(\\d{1,2})$/;\n      break;\n    case \"base64-data\":\n      t = /^\\s*data:(?:[a-z]+\\/[a-z0-9-+.]+(?:;[a-z-]+=[a-z0-9-]+)?)?(?:;base64)?,([a-z0-9!$&',()*+;=\\-._~:@/?%\\s]*?)\\s*$/i;\n      break;\n    case \"hex-color\":\n      t = /^#([0-9A-F]{3}|[0-9A-F]{4}|[0-9A-F]{6}|[0-9A-F]{8})$/i;\n      break;\n    case \"color\":\n      t = /^\\s*((#[a-f\\d]{6})|(#[a-f\\d]{3})|rgba?\\(\\s*([\\d\\.]+%?\\s*,\\s*[\\d\\.]+%?\\s*,\\s*[\\d\\.]+%?(?:\\s*,\\s*[\\d\\.]+%?)?)\\s*\\)|hsba?\\(\\s*([\\d\\.]+(?:deg|\\xb0|%)?\\s*,\\s*[\\d\\.]+%?\\s*,\\s*[\\d\\.]+(?:%?\\s*,\\s*[\\d\\.]+)?)%?\\s*\\)|hsla?\\(\\s*([\\d\\.]+(?:deg|\\xb0|%)?\\s*,\\s*[\\d\\.]+%?\\s*,\\s*[\\d\\.]+(?:%?\\s*,\\s*[\\d\\.]+)?)%?\\s*\\))\\s*$/i;\n      break;\n    case \"whitespace\":\n      t = /[\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u2028\\u2029\\u202f\\u205f\\u3000]/g;\n      break;\n    case \"commaSpaces\":\n      t = /[\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029]*,[\\x09\\x0a\\x0b\\x0c\\x0d\\x20\\xa0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029]*/;\n      break;\n    case \"var-name\":\n      t = /^[a-zA-Z_$][a-zA-Z0-9_$]*$/;\n      break;\n    case \"bezier\":\n      t = /^(?:cubic-)?bezier\\(([^,]+),([^,]+),([^,]+),([^\\)]+)\\)/;\n      break;\n    case \"chinese-name\":\n      t = /^(?:[\\u4e00-\\u9fa5·]{2,16})$/;\n      break;\n    case \"chinese\":\n      t = new RegExp(\n        String.raw`\n          [\\u{FA0E}\\u{FA0F}\\u{FA11}\\u{FA13}\\u{FA14}\\u{FA1F}\\u{FA21}\\u{FA23}\\u{FA24}\\u{FA27}-\\u{FA29}]\n          |[\\u{4E00}-\\u{9FCC}]\n          |[\\u{3400}-\\u{4DB5}]\n          |[\\u{20000}-\\u{2A6D6}]\n          |[\\u{2A700}-\\u{2B734}]\n          |[\\u{2B740}-\\u{2B81D}]\n          |[\\u{2B820}-\\u{2CEAF}]\n          |[\\u{2CEB0}-\\u{2EBEF}]\n        `.replace(/\\s+/g, \"\"),\n        \"u\"\n      );\n      break;\n    case \"mime-image\":\n      t = /^image\\//;\n      break;\n    case \"mime-video\":\n      t = /^video\\//;\n      break;\n    case \"mime-audio\":\n      t = /^audio\\//;\n      break;\n    case \"mime-document-word\":\n      t = /^application\\/(?:vnd\\.openxmlformats-officedocument\\.wordprocessingml\\.document|msword|vnd\\.ms-word\\.document\\.macroenabled\\.12|vnd\\.openxmlformats-officedocument\\.wordprocessingml\\.template|vnd\\.ms-word\\.template\\.macroenabled\\.12)$/;\n      break;\n    case \"mime-document-excel\":\n      t = /^application\\/(?:vnd\\.openxmlformats-officedocument\\.spreadsheetml\\.sheet|vnd\\.ms-excel|vnd\\.ms-excel\\.sheet\\.macroenabled\\.12|vnd\\.openxmlformats-officedocument\\.spreadsheetml\\.template|vnd\\.ms-excel\\.template\\.macroenabled\\.12)$/;\n      break;\n    case \"mime-document-ppt\":\n      t = /^application\\/(?:vnd\\.ms-powerpoint|vnd\\.openxmlformats-officedocument\\.presentationml\\.presentation|vnd\\.ms-powerpoint\\.presentation\\.macroenabled\\.12|vnd\\.openxmlformats-officedocument\\.presentationml\\.template|vnd\\.ms-powerpoint\\.template\\.macroenabled\\.12)$/;\n      break;\n    case \"mime-document-json\":\n      t = /^application\\/json$/;\n      break;\n    case \"mime-document-xml\":\n      t = /^(?:application|text)\\/(?:xml|xhtml\\+xml)$/;\n      break;\n  }\n  return t;\n};\nfunction ls(e) {\n  if (e.flags)\n    return e.flags;\n  const t = [];\n  return e.global && t.push(\"g\"), e.ignoreCase && t.push(\"i\"), e.multiline && t.push(\"m\"), e.sticky && t.push(\"y\"), e.unicode && t.push(\"u\"), t.join(\"\");\n}\nfunction hs(e) {\n  const t = new RegExp(e.source, ls(e));\n  return t.lastIndex = e.lastIndex, t;\n}\nconst Rt = (e, t) => (typeof e == \"string\" && (e = ct(e) || new RegExp(e)), e.test(t)), $a = (e, t) => (typeof e == \"string\" && (e = ct(e) || new RegExp(e)), t.search(e)), Na = (e, t) => (typeof e == \"string\" && (e = ct(e) || new RegExp(e)), t.split(e)), Be = (e, t) => {\n  typeof e == \"string\" && (e = ct(e) || new RegExp(e));\n  const n = t.match(e);\n  return n ? e.flags.toLowerCase().indexOf(\"g\") >= 0 ? n.map(\n    (r) => ({\n      matchIndex: -1,\n      fullMatch: r,\n      groupMatchs: []\n    })\n  ) : {\n    matchIndex: typeof n.index == \"number\" ? n.index : -1,\n    fullMatch: n[0],\n    groupMatchs: n.slice(1)\n  } : null;\n}, Ua = (e, t) => {\n  typeof e == \"string\" && (e = ct(e) || new RegExp(e));\n  const n = [], r = t.matchAll(e);\n  for (const s of r)\n    n.push({\n      matchIndex: typeof s.index == \"number\" ? s.index : -1,\n      fullMatch: s[0],\n      groupMatchs: s.slice(1)\n    });\n  return n;\n}, za = (e, t) => {\n  if (typeof e == \"string\" && (e = ct(e) || new RegExp(e)), e.flags.toLowerCase().indexOf(\"g\") < 0)\n    return Be(e, t);\n  const n = [];\n  let r;\n  for (; r = e.exec(t); )\n    n.push({\n      matchIndex: typeof r.index == \"number\" ? r.index : -1,\n      fullMatch: r[0],\n      groupMatchs: r.slice(1)\n    });\n  return n;\n};\nfunction rt(e) {\n  const t = e.match(/[\\s\\S]/gu);\n  return t ? t.length : 0;\n}\nfunction ja(e) {\n  return [...e].length;\n}\nfunction Ba(e) {\n  return Array.from(e).length;\n}\nfunction qa(e) {\n  const t = e.length;\n  let n = 0, r = 0;\n  for (; n < t; ) {\n    const s = e.charCodeAt(n);\n    if (s >= 55296 && s <= 56319) {\n      const i = e.charCodeAt(n + 1);\n      i >= 56320 && i <= 57343 && n++;\n    }\n    r++, n++;\n  }\n  return r;\n}\nfunction Wa(e, t) {\n  return Array.from(e).slice(0, t).join(\"\");\n}\nfunction Ha(e, t) {\n  const n = e.codePointAt(t);\n  return n ? String.fromCodePoint(n) : void 0;\n}\nfunction Va(e) {\n  if (!/^\\s*[0-9A-Z]+\\s*$/i.test(e))\n    throw new Error(\"纳税人识别号只能由数字和大写字母组成\");\n  const t = e.trim().toUpperCase(), n = rt(t);\n  if (n !== 15 && n !== 17 && n !== 18 && n !== 20)\n    throw new Error(\"税号应为15/17/18/20位数字或大写字母组合，请检查。\");\n  return t;\n}\nfunction Ga(e) {\n  if (!/^\\s*[0-9A-Z（）\\u{FA0E}\\u{FA0F}\\u{FA11}\\u{FA13}\\u{FA14}\\u{FA1F}\\u{FA21}\\u{FA23}\\u{FA24}\\u{FA27}-\\u{FA29}\\u{4E00}-\\u{9FCC}\\u{3400}-\\u{4DB5}\\u{20000}-\\u{2A6D6}\\u{2A700}-\\u{2B734}\\u{2B740}-\\u{2B81D}\\u{2B820}-\\u{2CEAF}\\u{2CEB0}-\\u{2EBEF}]+\\s*$/iu.test(\n    e\n  ))\n    throw new Error(\"名称只能包含：中文+英文+数字+全角括号\");\n  const t = e.trim(), n = rt(t);\n  if (n == 0)\n    throw new Error(\"请输入名称\");\n  if (n > 100)\n    throw new Error(\"名称过长，请修改 (不超过100个字符)\");\n  return t;\n}\nfunction Xa(e) {\n  if (!/^\\s*([a-z0-9A-Z]+[-|_|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}\\s*$/i.test(\n    e\n  ))\n    throw new Error(\"请输入正确的邮箱\");\n  return e.trim();\n}\nfunction Za(e = 12, t = \"all\") {\n  let n = \"ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghijklmnopqrstuvwxyz0123456789\";\n  t == \"number\" && (n = \"0123456789\");\n  const r = n.length;\n  let s = \"\";\n  for (let i = 0; i < e; i++)\n    s += n[Math.floor(Math.random() * r)];\n  return s;\n}\nconst Vn = () => Math.random().toString(36).slice(2), Ja = () => String.fromCharCode(\n  Math.random() * (\"z\".charCodeAt(0) - \"a\".charCodeAt(0)) + \"a\".charCodeAt(0)\n);\nfunction Ya(e, t) {\n  const n = Object.keys(t);\n  for (let r = 0, s = n.length; r < s; r++)\n    e = e.replace(new RegExp(\"{\" + n[r] + \"}\", \"gi\"), t[n[r]]);\n  return e;\n}\nfunction Ka(e, ...t) {\n  let n = \"\", r;\n  for (r = 0; r < t.length; r++)\n    n += e.raw[r] + t[r];\n  return n += e.raw[r] || \"\", n;\n}\nfunction Qa(e) {\n  return e.charAt(0).toUpperCase() + e.slice(1);\n}\nfunction fs(e) {\n  return e.replace(/(^\\w)/g, (t) => t.toLowerCase());\n}\nconst tc = (e, t = \"-\") => {\n  let n = e.replace(new RegExp(\"[_-]?([A-Z])\", \"g\"), t + \"$1\").toLowerCase();\n  const r = new RegExp(`^${t}`);\n  return r.test(e) || (n = n.replace(r, \"\")), n;\n};\nfunction ds(e) {\n  return e.replace(/(^\\w|[_-]\\w)/g, (t) => t.slice(-1).toUpperCase());\n}\nfunction ec(e) {\n  return fs(ds(e));\n}\nfunction nc(e) {\n  return e ? e.replaceAll(/^\\s+|\\s+$/g, \"\").replaceAll(/\\r?\\n/g, \"\") : \"\";\n}\nfunction rc(e = \"\") {\n  const t = /[`~!@#$^\\-&*()=|{}':;',\\\\\\[\\]\\.<>\\/?~！@#￥……&*（）——|{}【】'；：\"\"'。，、？\\s]/g;\n  return e.replaceAll(t, \"\");\n}\nfunction sc(e, t = \"\", n = /\\[data-v-[0-9a-zA-Z]*\\]/g) {\n  return e = e.replaceAll(n, t), e;\n}\nfunction ic(e, t, n = \"0\", r = \"left\") {\n  const s = rt(e);\n  if (t > s) {\n    const i = t - s;\n    let o, a;\n    switch (r) {\n      case \"left\":\n        e = Array(i + 1).join(n) + e;\n        break;\n      case \"right\":\n        e = e + Array(i + 1).join(n);\n        break;\n      default:\n        o = Math.ceil(i / 2), a = i - o, e = Array(a + 1).join(n) + e + Array(o + 1).join(n);\n        break;\n    }\n  }\n  return e;\n}\nconst oc = (e, t) => e.repeat(t), ac = (e, t, n = \"...\") => rt(e) < t ? e : `${e.slice(0, t - 3)}${n}`, cc = (e, t, n, r = \"...\") => {\n  const s = rt(e);\n  return s < t || n - t >= s ? e : `${e.slice(0, t)}${r}${e.slice(s - n)}`;\n}, uc = (e) => e.split(\"\").reverse().join(\"\");\nfunction lc(e) {\n  const t = e.codePointAt(0);\n  return typeof t < \"u\" && t > 65535;\n}\nfunction hc(e) {\n  let t = \"\";\n  for (let n = 0, r = e.length; n < r; n++) {\n    const s = e.charCodeAt(n);\n    s >= 1 && s <= 127 ? t += e.charAt(n) : s > 2047 ? (t += String.fromCharCode(224 | s >> 12 & 15), t += String.fromCharCode(128 | s >> 6 & 63), t += String.fromCharCode(128 | s >> 0 & 63)) : (t += String.fromCharCode(192 | s >> 6 & 31), t += String.fromCharCode(128 | s >> 0 & 63));\n  }\n  return t;\n}\nfunction fc(e) {\n  const t = e.length;\n  let n = \"\", r = 0, s, i;\n  for (; r < t; ) {\n    const o = e.charCodeAt(r++);\n    switch (o >> 4) {\n      case 0:\n      case 1:\n      case 2:\n      case 3:\n      case 4:\n      case 5:\n      case 6:\n      case 7:\n        n += e.charAt(r - 1);\n        break;\n      case 12:\n      case 13:\n        s = e.charCodeAt(r++), n += String.fromCharCode((o & 31) << 6 | s & 63);\n        break;\n      case 14:\n        s = e.charCodeAt(r++), i = e.charCodeAt(r++), n += String.fromCharCode(\n          (o & 15) << 12 | (s & 63) << 6 | (i & 63) << 0\n        );\n        break;\n    }\n  }\n  return n;\n}\nfunction dc(e, t = \"utf-8\") {\n  t = t.toLowerCase();\n  let n = 0;\n  if (t === \"utf-16\" || t === \"utf16\")\n    for (let r = 0, s = e.length; r < s; r++)\n      e.charCodeAt(r) <= 65535 ? n += 2 : n += 4;\n  else\n    for (let r = 0, s = e.length; r < s; r++) {\n      const i = e.charCodeAt(r);\n      i <= 127 ? n += 1 : i <= 2047 ? n += 2 : i <= 65535 ? n += 3 : n += 4;\n    }\n  return n;\n}\nfunction he(e) {\n  const t = new ArrayBuffer(e.length), n = new Uint8Array(t);\n  for (let r = 0, s = e.length; r < s; r++)\n    n[r] = e[r];\n  return t;\n}\nfunction ps(e) {\n  return ArrayBuffer.isView(e);\n}\nfunction ms(e) {\n  return ps(e) && !(e instanceof DataView);\n}\nfunction pc(e) {\n  return ms(e) && e.constructor.name;\n}\nfunction mc(e) {\n  return new DataView(e);\n}\nfunction gc(e, t) {\n  return new e(t);\n}\nfunction yc(e, ...t) {\n  let n = 0;\n  for (const i of t)\n    n += i.length;\n  const r = new e(n);\n  let s = 0;\n  for (const i of t)\n    r.set(i, s), s += i.length;\n  return r;\n}\nfunction qe(e) {\n  return e.slice(0);\n}\nfunction wc(e, t = !0) {\n  const n = t ? qe(e.buffer) : e.buffer;\n  return new DataView(n, e.byteOffset, e.byteLength);\n}\nfunction bc(e, t = !0) {\n  const n = t ? qe(e.buffer) : e.buffer;\n  return new e.constructor(\n    n,\n    e.byteOffset,\n    e.length\n  );\n}\nclass xt {\n  value;\n  left;\n  right;\n  constructor(t, n) {\n    this.value = t, this.left = n?.left, this.right = n?.right;\n  }\n  clone() {\n    return new xt(this.value, {\n      left: this.left,\n      right: this.right\n    });\n  }\n}\nclass Sc {\n  root;\n  constructor() {\n  }\n  add(t) {\n    if (!this.root)\n      this.root = new xt(t);\n    else {\n      let n = this.root;\n      for (; n; )\n        if (t === n.value) {\n          console.log(\"Duplicates cannot be added\");\n          break;\n        } else if (t < n.value)\n          if (n.left)\n            n = n.left;\n          else {\n            n.left = new xt(t);\n            break;\n          }\n        else if (t > n.value)\n          if (n.right)\n            n = n.right;\n          else {\n            n.right = new xt(t);\n            break;\n          }\n    }\n  }\n  remove(t) {\n    let n = this.root, r, s;\n    for (; n; )\n      if (t < n.value)\n        r = n, n = n.left;\n      else if (t > n.value)\n        r = n, n = n.right;\n      else {\n        s = n;\n        break;\n      }\n    if (!s) {\n      console.log(\"The node was not found\");\n      return;\n    }\n    if (r) {\n      const i = r.left === s;\n      if (!s.left && !s.right)\n        i ? r.left = void 0 : r.right = void 0;\n      else if (s.left && !s.right)\n        i ? r.left = s.left : r.right = s.left;\n      else if (s.right && !s.left)\n        i ? r.left = s.right : r.right = s.right;\n      else {\n        const o = s.right, a = s.left;\n        i ? r.left = o : r.right = o;\n        let c = o, u;\n        for (; c; )\n          u = c, c = c.left;\n        u && (u.left = a), console.log(\"The node was successfully deleted\");\n      }\n    } else if (!s.left && !s.right)\n      this.root = void 0;\n    else if (s.left && !s.right)\n      this.root = s.left;\n    else if (s.right && !s.left)\n      this.root = s.right;\n    else {\n      const i = s.right, o = s.left;\n      this.root = i;\n      let a = i, c;\n      for (; a; )\n        c = a, a = a.left;\n      c && (c.left = o), console.log(\"The node was successfully deleted\");\n    }\n    return s;\n  }\n  // 树的高度\n  // 最大深度： root 到 叶子节点\n  maxDepth(t = this.root) {\n    let n = 0;\n    const r = (s, i = 1) => {\n      s && (!s.left && !s.right && (n = Math.max(n, i)), r(s.left, i + 1), r(s.right, i + 1));\n    };\n    return r(t), n;\n  }\n  // 最小深度： root 到 叶子节点\n  minDepth(t = this.root) {\n    if (!t)\n      return 0;\n    const n = [[t, 1]];\n    for (; n.length; ) {\n      const [r, s] = n.shift();\n      if (!r.left && !r.right)\n        return s;\n      r.left && n.push([r.left, s + 1]), r.right && n.push([r.right, s + 1]);\n    }\n  }\n  // 如果某二叉树中任意节点的左右子树的深度相差不超过 1，那么它就是一棵平衡二叉树\n  // 该方法最坏的情况是每个父节点都只有一个子节点，这样树的高度时间复杂度为 O(n)，即“链表”的长度。而第 d 层调用 height 函数的时间复杂度是 O(d)，所以整体的时间复杂度为 高度时间复杂度 * 调用height函数的时间复杂度，即 O(n^2)。\n  isBalance(t = this.root) {\n    return t ? Math.abs(this.maxDepth(t.left) - this.maxDepth(t.right)) <= 1 && this.isBalance(t.left) && this.isBalance(t.right) : !0;\n  }\n  // 广度优先遍历\n  bfs(t = this.root, n) {\n    if (!t)\n      return;\n    const r = [t];\n    for (; r.length; ) {\n      const s = r.shift();\n      if (!n?.(s))\n        break;\n      s.left && r.push(s.left), s.right && r.push(s.right);\n    }\n  }\n  // 深度优先遍历\n  dfs(t = this.root, n) {\n    t && n?.(t) && (this.dfs(t.left, n), this.dfs(t.right, n));\n  }\n  // 递归遍历 - 先序遍历 current, left, right\n  preOrderRecursive(t = this.root, n) {\n    t && n?.(t) && (this.preOrderRecursive(t.left, n), this.preOrderRecursive(t.right, n));\n  }\n  // 递归遍历 - 中序遍历 left, current, right\n  // 中序遍历：递增序列\n  // 中序遍历倒序：递减序列\n  inOrderRecursive(t = this.root, n) {\n    t && (this.inOrderRecursive(t.left, n), n?.(t) && this.inOrderRecursive(t.right, n));\n  }\n  // 递归遍历 - 后序遍历 left, right, current\n  postOrderRecursive(t = this.root, n) {\n    t && (this.postOrderRecursive(t.left, n), this.postOrderRecursive(t.right, n), n?.(t));\n  }\n  // 非递归遍历 - 先序遍历 current, left, right\n  preOrder(t = this.root, n) {\n    const r = [];\n    for (t && r.push(t); r.length && (t = r.pop(), !!n?.(t)); )\n      t.right && r.push(t.right), t.left && r.push(t.left);\n  }\n  // 中序遍历：递增序列\n  // 非递归遍历 - 中序遍历 left, current, right\n  inOrder(t = this.root, n) {\n    const r = [];\n    for (; r.length || t; ) {\n      for (; t; )\n        r.push(t), t = t.left;\n      if (t = r.pop(), !n?.(t))\n        break;\n      t = t.right;\n    }\n  }\n  // 中序遍历倒序：递减序列 right, current, left\n  inOrderReverse(t = this.root, n) {\n    const r = [];\n    for (; r.length || t; ) {\n      for (; t; )\n        r.push(t), t = t.right;\n      if (t = r.pop(), !n?.(t))\n        break;\n      t = t.left;\n    }\n  }\n  // 非递归遍历 - 后序遍历 left, right, current\n  postOrder(t = this.root, n) {\n    const r = [], s = [];\n    for (t && r.push(t); r.length; )\n      t = r.pop(), s.push(t), t.left && r.push(t.left), t.right && r.push(t.right);\n    n && s.reverse().map(n);\n  }\n  // 获得第K大的节点, K从1开始\n  kthLargest(t) {\n    let n = 0, r;\n    return this.inOrderReverse(this.root, (s) => (n++, n == t ? (r = s.value, !1) : !0)), r;\n  }\n  // 反转二叉树\n  // 寻找递归公式\n  // 解题要采用自上而下的思考方式，那我们取前面的 1， 2，3 结点来看，对于根节点 1 来说，假设 2, 3 结点下的节点都已经翻转，那么只要翻转 2， 3 节点即满足需求\n  // 对于 2， 3 结点来说，也是翻转其左右节点即可,依此类推,对每一个根节点，依次翻转其左右节点，\n  // 所以我们可知问题与子问题的关系是 翻转(根节点) = 翻转(根节点的左节点) + 翻转(根节点的右节点)\n  // 即 invert(root) = invert(root->left) + invert(root->right),\n  // 而显然递归的终止条件是当结点为叶子结点时终止（因为叶子节点没有左右结点）\n  // 时间复杂度分析: 由于会对每一个节点都去做翻转，所以时间复杂度是 O(n)\n  // 空间复杂度分析: 由于每次调用 invertTree 函数都相当于一次压栈操作，\n  //   那最多压了几次栈呢，从根节点出发不断对左结果调用翻转函数, 直到叶子节点，每调用一次都会压栈，左节点调用完后，出栈，再对右节点压栈 ...,\n  //   可知栈的大小为3， 即树的高度，如果是完全二叉树 ，则树的高度为logn, 即空间复杂度为O(logn)\n  //   最坏情况，如果此二叉树是只有左节点，没有右节点，则树的高度即结点的个数 n，此时空间复杂度为 O(n)\n  //   总的来看，空间复杂度为O(n)\n  invertTree(t = this.root) {\n    if (!t)\n      return;\n    const n = this.invertTree(t.left), r = this.invertTree(t.right);\n    return t.right = n, t.left = r, t;\n  }\n}\nclass We {\n  value;\n  toEdges;\n  constructor(t, n = []) {\n    this.value = t, this.toEdges = n;\n  }\n  clone() {\n    return new We(this.value, this.toEdges);\n  }\n}\nclass Jt {\n  fromNode;\n  toNode;\n  // 权重\n  weight;\n  constructor(t, n, r = 1) {\n    this.fromNode = t, this.toNode = n, this.weight = r;\n  }\n  clone() {\n    return new Jt(this.fromNode, this.toNode, this.weight);\n  }\n}\nclass Ac {\n  // 有无方向\n  isdirected;\n  nodes = [];\n  visitFn;\n  constructor(t = !1, n) {\n    this.isdirected = t, this.visitFn = n || ((r) => console.log(r.value + \",\"));\n  }\n  addNode(t) {\n    this.nodes.push(new We(t));\n  }\n  removeNode(t) {\n    this.nodes = this.nodes.filter((n) => n.value !== t), this.nodes.forEach((n) => {\n      n.toEdges = n.toEdges.filter((r) => r.toNode.value !== t);\n    });\n  }\n  findNode(t) {\n    return this.nodes.find((n) => n.value === t);\n  }\n  addEdge(t, n, r = 1) {\n    const s = this.findNode(t), i = this.findNode(n);\n    s && i && (s.toEdges.push(new Jt(s, i, r)), this.isdirected && i.toEdges.push(new Jt(i, s, r)));\n  }\n  // 邻接矩阵\n  toMatrixArray() {\n    const t = this.nodes.length, n = Array.from(\n      { length: t },\n      () => Array(t).fill(0)\n    );\n    return this.nodes.forEach((r, s) => {\n      r.toEdges.forEach((i) => {\n        const o = this.nodes.indexOf(i.toNode);\n        n[s][o] = 1;\n      });\n    }), n;\n  }\n  // 邻接表\n  toLinkedArrayObject() {\n    const t = this.nodes.length, n = {};\n    for (let r = 0; r < t; r++) {\n      const s = [];\n      this.nodes[r].toEdges.forEach((i) => {\n        s.push(this.nodes.indexOf(i.toNode));\n      }), n[String(this.nodes[r].value)] = s;\n    }\n    return n;\n  }\n  // 深度优先遍历\n  dfs(t, n = /* @__PURE__ */ new Set()) {\n    this.visitFn(t), n.add(t), t.toEdges.forEach((r) => {\n      n.has(r.toNode) || this.dfs(r.toNode, n);\n    });\n  }\n  // 广度优先遍历\n  wfs(t) {\n    const n = /* @__PURE__ */ new Set(), r = [t];\n    for (; r.length; ) {\n      const s = r.shift();\n      this.visitFn(s), n.add(s), s.toEdges.forEach((i) => {\n        n.has(i.toNode) || r.push(i.toNode);\n      });\n    }\n  }\n}\nclass fe {\n  heap = [];\n  compareFn;\n  constructor(t, n) {\n    if (this.compareFn = t, n) {\n      this.heap = n;\n      const r = this.size() - 1, s = this.getParentIndex(r);\n      for (let i = s; i >= 0; i--)\n        this.shiftDown(i);\n    }\n  }\n  size() {\n    return this.heap.length;\n  }\n  isEmpty() {\n    return this.size() === 0;\n  }\n  // 获取父元素坐标\n  getParentIndex(t) {\n    return t - 1 >> 1;\n  }\n  // 获取左子节点元素坐标\n  getLeftChildIndex(t) {\n    const n = t * 2 + 1;\n    return n < this.size() ? n : null;\n  }\n  // 获取右子节点元素坐标\n  getRightChildIndex(t) {\n    const n = t * 2 + 2;\n    return n < this.size() ? n : null;\n  }\n  // 交换元素\n  swap(t, n) {\n    t >= 0 && t < this.size() && n >= 0 && n < this.size() && ([this.heap[t], this.heap[n]] = [this.heap[n], this.heap[t]]);\n  }\n  // 查看堆顶元素\n  peek() {\n    return this.heap[0];\n  }\n  // 尾部插入元素\n  // 时间复杂度O(logN)\n  push(t) {\n    this.heap.push(t), this.shiftUp(this.size() - 1);\n  }\n  // 上移操作\n  shiftUp(t) {\n    if (t === 0)\n      return;\n    const n = this.getParentIndex(t);\n    this.compareFn(this.heap[n], this.heap[t]) || (this.swap(n, t), this.shiftUp(n));\n  }\n  // 堆顶删除元素\n  // 时间复杂度O(logN)\n  pop() {\n    if (this.isEmpty())\n      return null;\n    {\n      const t = this.heap[0], n = this.heap.pop();\n      return n !== void 0 && !this.isEmpty() && (this.heap[0] = n, this.shiftDown(0)), t;\n    }\n  }\n  // 下移操作\n  shiftDown(t) {\n    if (t >= this.size() - 1)\n      return;\n    const n = this.getLeftChildIndex(t), r = this.getRightChildIndex(t);\n    n && !this.compareFn(this.heap[t], this.heap[n]) && (this.swap(n, t), this.shiftDown(n)), r && !this.compareFn(this.heap[t], this.heap[r]) && (this.swap(r, t), this.shiftDown(r));\n  }\n}\nconst xc = fe;\nclass _c extends fe {\n  constructor(t, n) {\n    const r = (s, i) => s > i;\n    super(t ?? r, n);\n  }\n}\nclass Oc extends fe {\n  constructor(t, n) {\n    const r = (s, i) => s < i;\n    super(t ?? r, n);\n  }\n}\nclass He {\n  value;\n  next;\n  constructor(t, n) {\n    this.value = t, this.next = n;\n  }\n  clone() {\n    return new He(this.value, this.next);\n  }\n}\nclass gs {\n  head;\n  tail;\n  length = 0;\n  constructor() {\n  }\n  size() {\n    return this.length;\n  }\n  isEmpty() {\n    return this.size() === 0;\n  }\n  insert(t, n) {\n    const r = new He(n);\n    if (t == 0)\n      return r.next = this.head, this.head = r, this.isEmpty() && (this.tail = this.head), this.length++, !0;\n    {\n      let s = this.head, i = this.head?.next, o = 1;\n      for (; o++ < t; )\n        s = i, i = i?.next;\n      return s ? (s.next = r, r.next = i, i || (this.tail = r), this.length++, !0) : !1;\n    }\n  }\n  delete(t) {\n    if (!this.isEmpty())\n      if (t == 0) {\n        const n = this.head;\n        return this.size() == 1 ? this.head = this.tail = void 0 : this.head = this.head?.next, this.length--, n;\n      } else {\n        let n = this.head, r = this.head?.next, s = 1;\n        for (; s++ < t && r; )\n          n = r, r = r?.next;\n        return n ? (n.next = r?.next, (!r || !r.next) && (this.tail = n), r && this.length--, r) : void 0;\n      }\n  }\n  deleteNode(t) {\n    t.next ? (t.value = t.next.value, t.next = t.next.next, t.next || (this.tail = t), this.length--) : this.pop();\n  }\n  // 尾部加入\n  push(t) {\n    return this.insert(this.size(), t);\n  }\n  // 尾部删除\n  pop() {\n    return this.delete(this.size() - 1);\n  }\n  // 头部加入\n  unshift(t) {\n    return this.insert(0, t);\n  }\n  // 头部删除\n  shift() {\n    return this.delete(0);\n  }\n  // 遍历\n  // visitFn 返回 true 继续遍历， 返回 false 中断遍历\n  traverse(t) {\n    let n = this.head, r = 0;\n    for (; n && t?.(n, r++); )\n      n = n.next;\n  }\n  at(t) {\n    if (t < 0 || t >= this.size() || this.isEmpty())\n      return;\n    if (t === 0)\n      return this.head;\n    if (t === this.size() - 1)\n      return this.tail;\n    let n = this.head;\n    for (; --t >= 0 && n; )\n      n = n.next;\n    return n;\n  }\n  getIndex(t) {\n    let n = -1;\n    return this.traverse((r, s) => (r.value == t && (n = s), n == -1)), n;\n  }\n  toArray() {\n    const t = [];\n    return this.traverse((n) => (t.push(n.value), !0)), t;\n  }\n  // 列表反转\n  // 时间复杂度 O(N)\n  reverse() {\n    this.tail = this.head;\n    let t, n;\n    for (; this.head && this.head.next; )\n      t = n, n = this.head, this.head = this.head.next, n.next = t;\n    return this.head && (this.head.next = n), this;\n  }\n  // 快慢指针: 判断链表中是否有环\n  hasCycle(t = this.head) {\n    if (!t || !t.next)\n      return !1;\n    let n = t, r = t.next;\n    for (; n !== r; ) {\n      if (!n || !r || !r.next)\n        return !1;\n      n = n.next, r = r.next.next;\n    }\n    return !0;\n  }\n}\nconst V = {\n  THROW: 1,\n  DROP: 2,\n  SLIDE: 3,\n  EXPAND: 4\n};\nclass Et {\n  queue;\n  limit;\n  overflow;\n  constructor(t = 10, n = V.EXPAND) {\n    this.queue = [], this.limit = t, this.overflow = n;\n  }\n  length() {\n    return this.queue.length;\n  }\n  isEmpty() {\n    return this.length() === 0;\n  }\n  findIndex(t) {\n    return this.queue.findIndex(t);\n  }\n  deleteIndex(t) {\n    return !!this.queue.splice(t, 1).length;\n  }\n  delete(t) {\n    const n = this.findIndex(t);\n    return n > -1 ? this.deleteIndex(n) : !1;\n  }\n  // 入队\n  enqueue(t) {\n    if (this.length() < this.limit) {\n      this.queue.push(t);\n      return;\n    }\n    switch (this.overflow) {\n      case V.EXPAND:\n        this.limit *= 2, this.queue.push(t);\n        break;\n      case V.SLIDE:\n        this.deleteIndex(0), this.queue.push(t);\n        break;\n      case V.THROW:\n        throw new Error(`Queue limit(${this.limit}) overflow!`);\n      case V.DROP:\n    }\n  }\n  push(t) {\n    this.enqueue(t);\n  }\n  put(t) {\n    this.enqueue(t);\n  }\n  // 出队\n  dequeue() {\n    return this.queue.shift();\n  }\n  pop() {\n    return this.dequeue();\n  }\n  take() {\n    return this.dequeue();\n  }\n  // 获取队顶对象\n  peek() {\n    return this.queue[0];\n  }\n  // 获取对象\n  index(t) {\n    return this.queue[t];\n  }\n  // 全部出队\n  clear() {\n    this.queue = [];\n  }\n  // 全部出队\n  flush() {\n    const t = [];\n    let n;\n    for (; n = this.dequeue(); )\n      t.push(n);\n    return t;\n  }\n}\nconst Tc = () => new Et(0, V.DROP), vc = (e) => new Et(e, V.THROW), Rc = (e) => new Et(e, V.DROP), Ec = (e) => new Et(e, V.SLIDE), ys = (e) => new Et(e, V.EXPAND), Cc = 9007199254740991, Fc = -9007199254740991, kc = Math.pow(2, -52), ws = 2147483647;\nfunction Gn(e) {\n  return Number.isNaN(e);\n}\nfunction Pc(e) {\n  return typeof e == \"number\" && Gn(e);\n}\nconst Dc = (e) => e % 2 === 0, bs = (e) => e && e === Math.floor(e) && e > 0 && isFinite(e);\nfunction Ss(e) {\n  if (e <= 1)\n    return !1;\n  for (let t = 2; t <= Math.sqrt(e); t++)\n    if (e % t === 0)\n      return !1;\n  return !0;\n}\nfunction As(e) {\n  for (; !Ss(e); )\n    e++;\n  return e;\n}\nconst Mc = (...e) => e.reduce((t, n) => t + n) / e.length;\nfunction Y(e, t) {\n  const n = parseFloat(e);\n  return Number.isNaN(n) ? typeof t == \"number\" ? t : NaN : n;\n}\nfunction Lc(e, t, n) {\n  return typeof e == \"string\" ? (e = e.trim().toLowerCase(), e.indexOf(\"%\") > 0 ? Y(e, t) / 100 * n : e.indexOf(\"vw\") > 0 ? Y(e, t) / 100 * window.innerWidth : e.indexOf(\"vh\") > 0 ? Y(e, t) / 100 * window.innerHeight : e.indexOf(\"vm\") > 0 ? Y(e, t) / 100 * Math.min(window.innerWidth, window.innerHeight) : e == \"top\" || e == \"left\" ? 0 : e == \"center\" || e == \"middle\" ? n * 0.5 : e == \"bottom\" || e == \"right\" ? n : Y(e, t)) : Y(e, t);\n}\nfunction xs(e = 1e-6) {\n  return function(t, n) {\n    return Math.abs(t - n) < e;\n  };\n}\nfunction Ic(e, t) {\n  const n = (e.toString().split(\".\")[1] || \"\").length, r = (t.toString().split(\".\")[1] || \"\").length, s = Math.pow(10, Math.max(n, r));\n  return (e * s + t * s) / s;\n}\nfunction dt(e, t, n) {\n  const r = Math.min(t, n), s = Math.max(t, n);\n  return e < r ? r : e > s ? s : e;\n}\nfunction $c(e, t = 0) {\n  const n = Math.pow(10, t);\n  return Math.round(n * e) / n;\n}\nfunction Nc(e, t) {\n  return (e % t + t) % t;\n}\nfunction _s(e, t, n) {\n  return typeof e == \"number\" && typeof t == \"number\" ? (1 - n) * e + n * t : typeof e == \"number\" ? e : typeof t == \"number\" ? t : 0;\n}\nfunction Uc(e, t, n) {\n  const r = Math.max(e.length, t.length), s = new Array(r);\n  for (let i = 0; i < r; i++)\n    s[i] = _s(e[i], t[i], n);\n  return s;\n}\nfunction zc(e, t, n, r) {\n  return (s) => n + (r - n) * ((s - e) / (t - e));\n}\nfunction jc(e, t, n) {\n  return (r) => {\n    const s = dt(r, e, t);\n    return n == 0 ? s : t - s < n ? t : Math.round(s / n) * n;\n  };\n}\nfunction Bc(e, t = 12) {\n  return Y(e, 0).toPrecision(t);\n}\nfunction Xn(e, t = 12) {\n  return Y(e, 0).toFixed(t);\n}\nfunction et(e, t = 12) {\n  return +Xn(e, t);\n}\nfunction qc(e) {\n  return et(e, 0);\n}\nfunction Wc(e, t = 4, n = \",\") {\n  const r = new RegExp(`\\\\d{1,${t}}(?=(\\\\d{${t}})+$)`, \"g\");\n  return String(e).replace(r, `$&${n}`);\n}\nfunction Hc(e, t) {\n  const n = Be(\"number-single\", String(e));\n  return {\n    hasNumber: !!n,\n    number: n && !Array.isArray(n) && n.fullMatch ? parseFloat(n.fullMatch) : ai(t) ? t : NaN,\n    prefix: n && !Array.isArray(n) && n.fullMatch ? e.substring(0, n.matchIndex) : \"\",\n    suffix: n && !Array.isArray(n) && n.fullMatch ? e.substring(n.matchIndex + n.fullMatch.length) : \"\"\n  };\n}\nfunction Os(e) {\n  const t = Be(\"number\", e);\n  return t ? Array.isArray(t) ? t.map((n) => Number(n.fullMatch)) : [Number(t.fullMatch)] : [];\n}\nfunction Vc() {\n  return Math.random() > 0.5 ? 1 : -1;\n}\nfunction Ts(e = 0, t = 100) {\n  return Math.random() * (t - e) + e;\n}\nfunction Gc(e = 0, t = 100) {\n  return Math.floor(Ts(e, t));\n}\nfunction Xc(e = 0) {\n  return () => ++e;\n}\nfunction Zc(e, t) {\n  switch (t.constructor) {\n    case Float32Array:\n      return e;\n    case Uint32Array:\n      return Math.round(e * 4294967295);\n    case Uint16Array:\n      return Math.round(e * 65535);\n    case Uint8Array:\n      return Math.round(e * 255);\n    case Int32Array:\n      return Math.round(e * 2147483647);\n    case Int16Array:\n      return Math.round(e * 32767);\n    case Int8Array:\n      return Math.round(e * 127);\n    default:\n      throw new Error(\"Invalid component type.\");\n  }\n}\nfunction Jc(e, t) {\n  switch (t.constructor) {\n    case Float32Array:\n      return e;\n    case Uint32Array:\n      return e / 4294967295;\n    case Uint16Array:\n      return e / 65535;\n    case Uint8Array:\n      return e / 255;\n    case Int32Array:\n      return Math.max(e / 2147483647, -1);\n    case Int16Array:\n      return Math.max(e / 32767, -1);\n    case Int8Array:\n      return Math.max(e / 127, -1);\n    default:\n      throw new Error(\"Invalid component type.\");\n  }\n}\nconst fn = {\n  SLIDE: 1,\n  EXPAND: 2\n};\nclass Yc {\n  size;\n  table;\n  objectSignature;\n  overflow;\n  ttl;\n  constructor(t) {\n    this.table = new Array(t?.size || 137), this.size = this.table.length, this.objectSignature = t?.objectSignature || ((n) => String(n)), this.overflow = t?.overflow || fn.EXPAND, this.ttl = t?.ttl || 6e4;\n  }\n  // 散列函数，纯函数\n  hash(t) {\n    if (t == null || t == null)\n      throw new Error(\"HashTable can't put undefined or null\");\n    const n = this.objectSignature(t), r = 31;\n    let s = 0;\n    for (let i = 0, o = n.length; i < o; i++)\n      s += r * s + n.charCodeAt(i);\n    return s % this.size;\n  }\n  // 扩展散列表大小至一个更大的质数\n  resize() {\n    const t = this.size, n = As(this.size * 2), r = new Array(n), s = this.table;\n    this.table = r, this.size = n;\n    for (let i = 0, o = t; i < o; i++)\n      if (s[i] !== void 0 && !this.isOutdated(s[i])) {\n        let a = this.hash(s[i].value);\n        for (; r[a] !== void 0; )\n          a = (a + 1) % n;\n        r[a] = s[i];\n      }\n    s.length = 0;\n  }\n  put(t) {\n    this.size > 200 && Math.random() < 0.1 && this.clean();\n    let n = this.hash(t);\n    const r = n;\n    for (; this.table[n] !== void 0 && !this.isOutdated(this.table[n]); )\n      if (n = (n + 1) % this.size, r == n) {\n        if (this.overflow == fn.EXPAND)\n          return this.resize(), this.put(t);\n        break;\n      }\n    return this.table[n] = { value: t, timestamp: Date.now() }, n;\n  }\n  // 性能瓶颈\n  // visitFn : return false to break loop\n  traverse(t) {\n    for (let n = 0, r = this.size; n < r; n++)\n      if (this.table[n] !== void 0 && !t(this.table[n].value, n))\n        return n;\n    return -1;\n  }\n  // filter : return false 删除\n  update(t) {\n    this.traverse((n, r) => (t(n) === !1 && this.deleteIndex(r), !0));\n  }\n  getIndex(t) {\n    let n = this.hash(t);\n    const r = n;\n    for (; this.table[n]?.value !== t; )\n      if (this.table[n] === void 0 || (this.isOutdated(this.table[n]) && (this.table[n] = void 0), n = (n + 1) % this.size, r == n))\n        return -1;\n    return this.isOutdated(this.table[n]) ? (this.table[n] = void 0, -1) : n;\n  }\n  has(t) {\n    return this.getIndex(t) >= 0;\n  }\n  // 性能瓶颈\n  find(t) {\n    const n = this.traverse((r) => !t(r));\n    return n >= 0 ? this.table[n]?.value : void 0;\n  }\n  deleteIndex(t) {\n    return t >= 0 && t < this.size && this.table[t] !== void 0 ? (this.table[t] = void 0, !0) : !1;\n  }\n  delete(t) {\n    return this.deleteIndex(this.getIndex(t));\n  }\n  clear() {\n    this.table = [];\n  }\n  // 数据是否过期\n  isOutdated(t) {\n    return Date.now() - t.timestamp > this.ttl;\n  }\n  // 性能瓶颈\n  // 供外部使用：主动清理过期数据\n  clean() {\n    for (let t = 0, n = this.size; t < n; t++)\n      this.table[t] !== void 0 && this.isOutdated(this.table[t]) && (this.table[t] = void 0);\n  }\n}\nclass Kc {\n  obj = {};\n  constructor() {\n  }\n  put(t, n) {\n    this.obj[t] = this.obj[t] || [], this.obj[t].push(n);\n  }\n  get(t) {\n    return this.obj[t] || [];\n  }\n  has(t) {\n    let n = !1;\n    return this.traverse((r) => r == t ? (n = !0, !1) : !0), n;\n  }\n  keys() {\n    const t = [];\n    for (const n in this.obj)\n      t.push(n);\n    return t;\n  }\n  // visitFn : return false to break loop\n  traverse(t) {\n    for (const n in this.obj)\n      for (let r = 0, s = this.obj[n].length; r < s && t(this.obj[n][r]); r++)\n        ;\n  }\n}\nclass Ve {\n  maps = /* @__PURE__ */ new Map();\n  constructor() {\n  }\n  // Object.entries(...);\n  // Object.fromEntries(...);\n  entries() {\n    return [...this.maps.entries()];\n  }\n  // Object.keys(...);\n  keys() {\n    return [...this.maps.keys()];\n  }\n  // Object.values(...);\n  values() {\n    return [...this.maps.values()];\n  }\n  json() {\n    const t = {};\n    for (const n of this.maps)\n      t[n[0]] = n[1];\n    return t;\n  }\n  get length() {\n    return this.maps.size;\n  }\n  set(t, n) {\n    this.maps.set(t, n);\n  }\n  get(t) {\n    return this.maps.get(t);\n  }\n  has(t) {\n    return this.maps.has(t);\n  }\n  // Map 对象是按插入的顺序返回键值\n  getEntryFromIndex(t) {\n    let n = -1;\n    for (const r of this.maps)\n      if (++n == t)\n        return r;\n  }\n  // 性能瓶颈\n  getEntry(t) {\n    for (const n of this.maps)\n      if (t(n[0], n[1]))\n        return n;\n  }\n  firstEntry() {\n    return this.getEntryFromIndex(0);\n  }\n  // 从头部删除\n  shift() {\n    const t = this.firstEntry();\n    if (t) {\n      const [n] = t;\n      this.delete(n);\n    }\n    return t;\n  }\n  delete(t) {\n    return this.maps.delete(t);\n  }\n  clear() {\n    this.maps.clear();\n  }\n  // filter : return false 删除\n  update(t) {\n    const n = this.entries();\n    for (let r = 0, s = n.length; r < s; r++) {\n      const [i, o] = n[r];\n      t(i, o) === !1 && this.delete(i);\n    }\n  }\n}\nconst vs = \"__yz_hash_undefined__\";\nclass Dt {\n  __data__ = {};\n  size = 0;\n  constructor(t) {\n    t = t || [];\n    const n = t.length;\n    let r = -1;\n    for (; ++r < n; ) {\n      const s = t[r];\n      this.set(s[0], s[1]);\n    }\n  }\n  clear() {\n    this.__data__ = {}, this.size = 0;\n  }\n  has(t) {\n    const n = this.__data__;\n    return Object.prototype.hasOwnProperty.call(n, t);\n  }\n  set(t, n) {\n    const r = this.__data__;\n    return this.size += this.has(t) ? 0 : 1, r[t] = n, this;\n  }\n  get(t) {\n    const n = this.__data__;\n    return this.has(t) ? n[t] : void 0;\n  }\n  delete(t) {\n    const n = this.has(t) && delete this.__data__[t];\n    return this.size -= n ? 1 : 0, n;\n  }\n}\nconst Qc = (e) => new Array(e).fill(void 0), t1 = (e) => Array.isArray(e) && e.length > 0;\nfunction e1(e) {\n  const t = e.length, n = new e.constructor(t);\n  return t && typeof e[0] == \"string\" && Object.prototype.hasOwnProperty.call(e, \"index\") && (n.index = e.index, n.input = e.input), n;\n}\nfunction n1(e, t) {\n  const n = new Array(e);\n  let r = -1;\n  for (; ++r < e; )\n    n[r] = t(r);\n  return n;\n}\nfunction r1(e, t) {\n  return Array.from({ length: e }, (n, r) => t);\n}\nfunction Rs(e, t, n) {\n  return Array.from(\n    { length: e },\n    () => new Array(t).fill(n)\n  );\n}\nfunction s1(e, t) {\n  return e[0].length ? Rs(\n    e.map((n) => n.filter((r, s) => s === 0)[0]).length,\n    e[0].length,\n    t\n  ) : new Error(\"Illegal, Array must be any[][]!\");\n}\nfunction Es(e, t) {\n  return [...e[t]];\n}\nfunction Cs(e, t) {\n  return e.map((n) => n.filter((r, s) => s === t)[0]);\n}\nfunction i1(e, t, n) {\n  return {\n    row: Es(e, t),\n    column: Cs(e, n)\n  };\n}\nfunction o1(e, t) {\n  const n = e.length || 0;\n  let r = -1;\n  for (; ++r < n && t(e[r], r, e) !== !1; )\n    ;\n  return e;\n}\nfunction a1(e, t) {\n  const n = e.length || 0;\n  let r = -1;\n  for (; ++r < n; )\n    if (t(e[r], r, e) === !1)\n      return !1;\n  return !0;\n}\nfunction c1(e, t) {\n  let n = 0;\n  for (const r of e)\n    n += +!!t(r);\n  return n;\n}\nfunction u1(e, t) {\n  return e.flatMap((n, r) => r ? [t(r), n] : [n]);\n}\nfunction Fs(e, t, n) {\n  [e[t], e[n]] = [e[n], e[t]];\n}\nfunction l1(e, t) {\n  return Fs(e, 0, t);\n}\nfunction h1(e) {\n  e.sort((n, r) => n - r);\n  const t = Math.floor(e.length / 2);\n  return e[t];\n}\nfunction f1(e) {\n  if (e.length)\n    return e[0];\n}\nfunction d1(e) {\n  if (e.length)\n    return e[e.length - 1];\n}\nfunction ks(e, t) {\n  for (let n = 0, r = e.length; n < r; n++)\n    if (e[n] == t)\n      return !0;\n  return !1;\n}\nfunction Ps(e = [], t = []) {\n  const n = e.length, r = t.length;\n  for (let i = 0; i < r; i++)\n    e[i] = t[i];\n  let s = Math.max(0, n - r);\n  for (; s > 0; )\n    e.pop(), s--;\n  return e;\n}\nfunction p1(e) {\n  for (; e.length; )\n    e.pop();\n}\nfunction m1(e, t, n) {\n  return e.splice(dt(t, 0, e.length - 1), 0, n), e;\n}\nfunction g1(e, t) {\n  const n = e.findIndex((r) => r === t);\n  return n >= 0 && e.splice(n, 1), e;\n}\nconst y1 = (e) => j(e) && Object.keys(e).length > 0, w1 = (e, t) => e.length === t.length && e.every((n, r) => n === t[r]);\nfunction* Zn(e) {\n  for (const t of e)\n    j(t) ? yield* Zn(t) : yield t;\n}\nfunction b1(e) {\n  if (j(e))\n    return [...Zn(e)];\n}\nfunction Ds(e) {\n  let t = [];\n  return e.forEach((n) => {\n    j(n) ? t = t.concat(Ds(n)) : t.push(n);\n  }), t;\n}\nfunction Ms(e) {\n  return e.reduce((t, n) => t.concat(j(n) ? Ms(n) : n), []);\n}\nfunction S1(e) {\n  return e.flat(1 / 0);\n}\nfunction A1(e) {\n  let t = JSON.stringify(e);\n  return t = t.replace(/(\\[|\\])/g, \"\"), t = \"[\" + t + \"]\", JSON.parse(t);\n}\nconst x1 = (e) => e.sort(() => 0.5 - Math.random());\nfunction _1(e) {\n  return [...new Set(e)];\n}\nfunction O1(e, ...t) {\n  return t.forEach((n) => {\n    ks(e, n) || e.push(n);\n  }), e;\n}\nfunction T1(e, t) {\n  return [.../* @__PURE__ */ new Set([...e, ...t])];\n}\nfunction v1(e, t) {\n  return /* @__PURE__ */ new Set([...e, ...t]);\n}\nfunction R1(e, t) {\n  return [...new Set(e.filter((n) => t.includes(n)))];\n}\nfunction E1(e, t) {\n  return new Set([...e].filter((n) => t.has(n)));\n}\nfunction C1(e, t) {\n  const n = /* @__PURE__ */ new Map();\n  e.forEach((s) => {\n    n.set(s, !0);\n  });\n  const r = [];\n  return t.forEach((s) => {\n    n.has(s) && (r.push(s), n.delete(s));\n  }), r;\n}\nfunction F1(e, t) {\n  return [...new Set(e.filter((n) => !t.includes(n)))];\n}\nfunction k1(e, t) {\n  return new Set([...e].filter((n) => !t.has(n)));\n}\nfunction P1(e) {\n  for (let t = e.length - 1; t >= 0; --t)\n    if (e[t] >= 65535)\n      return !0;\n  return !1;\n}\nlet Ls = class extends Array {\n  constructor(t) {\n    super(t), this.fill(0);\n  }\n};\nconst M1 = (e) => bs(e) ? e <= Math.pow(2, 8) ? Uint8Array : e <= Math.pow(2, 16) ? Uint16Array : e <= Math.pow(2, 32) ? Uint32Array : e <= Number.MAX_SAFE_INTEGER ? Ls : null : null;\nfunction Mt(e, t) {\n  let n = e.length;\n  for (; n--; )\n    if (mi(e[n][0], t))\n      return n;\n  return -1;\n}\nfunction dn(e) {\n  const t = Array(e.size);\n  return e.forEach(function(n, r) {\n    t.push([r, n]);\n  }), t;\n}\nfunction Is(e, t) {\n  return e.set(t[0], t[1]), e;\n}\nfunction L1(e, t) {\n  return (t ? t(dn(e), !0) : dn(e)).reduce(Is, /* @__PURE__ */ new Map());\n}\nfunction pn(e) {\n  const t = Array(e.size);\n  return e.forEach((n, r) => {\n    t[r] = n;\n  }), t;\n}\nfunction $s(e, t) {\n  return e.add(t), e;\n}\nfunction I1(e, t) {\n  return (t ? t(pn(e), !0) : pn(e)).reduce($s, /* @__PURE__ */ new Set());\n}\nclass _t {\n  __data__ = [];\n  size = 0;\n  constructor(t) {\n    t = t || [];\n    const n = t.length;\n    let r = -1;\n    for (; ++r < n; ) {\n      const s = t[r];\n      this.set(s[0], s[1]);\n    }\n  }\n  clear() {\n    this.__data__ = [], this.size = 0;\n  }\n  delete(t) {\n    const n = this.__data__, r = Mt(n, t);\n    if (r < 0)\n      return !1;\n    const s = n.length - 1;\n    return r == s ? n.pop() : Array.prototype.splice.call(n, r, 1), --this.size, !0;\n  }\n  get(t) {\n    const n = this.__data__, r = Mt(n, t);\n    return r < 0 ? void 0 : n[r][1];\n  }\n  has(t) {\n    return Mt(this.__data__, t) > -1;\n  }\n  set(t, n) {\n    const r = this.__data__, s = Mt(r, t);\n    return s < 0 ? (++this.size, r.push([t, n])) : r[s][1] = n, this;\n  }\n}\nfunction Lt(e, t) {\n  const n = e.__data__;\n  return hi(t) ? n[typeof t == \"string\" ? \"string\" : \"hash\"] : n.map;\n}\nclass Ct {\n  __data__ = {\n    string: new Dt(),\n    // key = string\n    hash: new Dt(),\n    // key = number | boolean | symbol | null\n    map: new _t()\n    // key = undefined | array | object | function\n  };\n  size = 0;\n  constructor(t) {\n    t = t || [];\n    const n = t.length;\n    let r = -1;\n    for (; ++r < n; ) {\n      const s = t[r];\n      this.set(s[0], s[1]);\n    }\n  }\n  clear() {\n    this.size = 0, this.__data__ = {\n      string: new Dt(),\n      hash: new Dt(),\n      map: new _t()\n    };\n  }\n  delete(t) {\n    const n = Lt(this, t).delete(t);\n    return this.size -= n ? 1 : 0, n;\n  }\n  get(t) {\n    return Lt(this, t).get(t);\n  }\n  has(t) {\n    return Lt(this, t).has(t);\n  }\n  set(t, n) {\n    const r = Lt(this, t), s = r.size;\n    return r.set(t, n), this.size += r.size == s ? 0 : 1, this;\n  }\n}\nclass $1 {\n  __cache__;\n  constructor(t) {\n    const n = [];\n    for (const r in t)\n      this[r] = t[r].serverValue, n.push([t[r].serverValue, t[r]]);\n    this.__cache__ = new Ct(n);\n  }\n  // types(): readonly string[] {\n  //   const types = [...super.keys()] as const;\n  //   type Types = (typeof types)[number];\n  //   return types;\n  // }\n  isExist(t) {\n    return this.__cache__.has(t);\n  }\n  getName(t) {\n    const n = this.__cache__.get(t);\n    return n ? n.name || n.serverDescription : \"\";\n  }\n  setName(t, n) {\n    const r = this.__cache__.get(t);\n    r && (r.name = n);\n  }\n}\nconst Ns = 200;\nlet N1 = class {\n  __data__;\n  size;\n  constructor(t) {\n    const n = this.__data__ = new _t(t);\n    this.size = n.size;\n  }\n  clear() {\n    this.__data__ = new _t(), this.size = 0;\n  }\n  delete(t) {\n    const n = this.__data__, r = n.delete(t);\n    return this.size = n.size, r;\n  }\n  get(t) {\n    return this.__data__.get(t);\n  }\n  has(t) {\n    return this.__data__.has(t);\n  }\n  set(t, n) {\n    let r = this.__data__;\n    if (r instanceof _t) {\n      const s = r.__data__;\n      if (!jt || s.length < Ns - 1)\n        return s.push([t, n]), this.size = ++r.size, this;\n      r = this.__data__ = new Ct(s);\n    }\n    return r.set(t, n), this.size = r.size, this;\n  }\n};\nclass z1 {\n  __data__ = new Ct();\n  constructor(t) {\n    t = t || [];\n    const n = t.length;\n    let r = -1;\n    for (; ++r < n; )\n      this.add(t[r]);\n  }\n  add(t) {\n    return this.__data__.set(t, vs), this;\n  }\n  has(t) {\n    return this.__data__.has(t);\n  }\n}\nfunction j1(e, t = \"Asia/Shanghai\") {\n  const n = (/* @__PURE__ */ new Date()).getTimezoneOffset() * 60 * 1e3;\n  return new Date(e.getTime() - n);\n}\nfunction Yt() {\n  return (performance || Date).now();\n}\nfunction K(e = /* @__PURE__ */ new Date()) {\n  return e.getTime();\n}\nfunction B1(e = /* @__PURE__ */ new Date(), t = \"yyyy-mm-dd hh:ii:ss.SSS\") {\n  return Ft(e, t);\n}\nfunction N(e) {\n  return !Gn(e.valueOf());\n}\nconst Ge = 864e5;\nfunction Jn(e) {\n  return e > 1e12;\n}\nfunction q1(e) {\n  return e > 1e9 && !Jn(e);\n}\nfunction de(e) {\n  if (e == null)\n    return /* @__PURE__ */ new Date(NaN);\n  if (e instanceof Date)\n    return new Date(e);\n  if (typeof e == \"string\") {\n    const n = e.match(\n      /^(\\d{4})[-/.]?(\\d{1,2})?[-/.]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?[zZ]?$/\n    );\n    if (n && n[1] && n[2]) {\n      const r = parseInt(n[1]), s = n[2] ? Math.max(parseInt(n[2]) - 1, 0) : 0, i = n[3] ? parseInt(n[3]) : 1, o = n[4] ? parseInt(n[4]) : 0, a = n[5] ? parseInt(n[5]) : 0, c = n[6] ? parseInt(n[6]) : 0, u = n[7] ? parseInt(n[7].substring(0, 3)) : 0;\n      return /Z$/i.test(e) ? new Date(Date.UTC(r, s, i, o, a, c, u)) : new Date(r, s, i, o, a, c, u);\n    } else\n      return /* @__PURE__ */ new Date(NaN);\n  }\n  if (Array.isArray(e))\n    return new Date(\n      e[0],\n      Math.max(e[1] - 1, 0),\n      e[2] || 1,\n      e[3] || 0,\n      e[4] || 0,\n      e[5] || 0,\n      e[6] || 0\n    );\n  const t = Jn(e);\n  return new Date(t ? e : e * 1e3);\n}\nfunction W1(e, t = 3) {\n  const n = Math.max(e.length, 6);\n  let r = \"\";\n  for (let i = 0; i < n - 4; i++)\n    r += e[i] || \"0\";\n  const s = [\n    r,\n    \"\" + (e[n - 4] || \"0\") + (e[n - 3] || \"0\"),\n    \"\" + (e[n - 2] || \"0\") + (e[n - 1] || \"0\")\n  ];\n  switch (t) {\n    case 1:\n      return s[0];\n    case 2:\n      return s[0] + \":\" + s[1];\n    case 3:\n      return s[0] + \":\" + s[1] + \":\" + s[2];\n  }\n}\nfunction H1(e, t = 3) {\n  const n = Math.max(e.length, 6);\n  let r = 0;\n  for (let o = 0; o < n - 4; o++)\n    r = r * 10 + (e[o] || 0);\n  const s = [\n    Math.floor(r),\n    Math.floor((e[n - 4] || 0) * 10 + (e[n - 3] || 0)),\n    Math.floor((e[n - 2] || 0) * 10 + (e[n - 1] || 0))\n  ];\n  let i = \"\";\n  switch (t) {\n    case 1:\n      s[0] ? i += s[0] + \"小时\" : (s[1] || s[2]) && (i += \"1小时\");\n      break;\n    case 2:\n      s[0] && (i += s[0] + \"小时\"), s[1] ? i += s[1] + \"分钟\" : s[2] && (i += \"1分钟\");\n      break;\n    case 3:\n    default:\n      s[0] && (i += s[0] + \"小时\"), (s[1] || s[2]) && (i += s[1] + \"分钟\"), s[2] && (i += s[2] + \"秒\");\n      break;\n  }\n  return i || \"0秒\";\n}\nfunction Ut(e) {\n  const t = Math.max(e.length, 6);\n  let n = 0;\n  n += (e[t - 2] || 0) * 10 + (e[t - 1] || 0), n += ((e[t - 4] || 0) * 10 + (e[t - 3] || 0)) * 60;\n  let r = 0;\n  for (let s = 0; s < t - 4; s++)\n    r = r * 10 + (e[s] || 0);\n  return n += r * 60 * 60, Math.floor(Math.max(0, n));\n}\nfunction mt(e, t = !1) {\n  let n = 0;\n  typeof e == \"number\" ? n = e : n = Ut(e);\n  const r = [], s = n % 60;\n  r.unshift(s % 10), r.unshift(Math.floor(s / 10)), n = Math.floor(n / 60);\n  const i = n % 60;\n  if (r.unshift(i % 10), r.unshift(Math.floor(i / 10)), n = Math.floor(n / 60), t) {\n    const o = n % 100;\n    for (r.unshift(o % 10), r.unshift(Math.floor(o / 10)), n = Math.floor(n / 100); n; )\n      r.unshift(n % 10), n = Math.floor(n / 10);\n  } else {\n    const o = n % 24;\n    r.unshift(o % 10), r.unshift(Math.floor(o / 10));\n  }\n  return r;\n}\nfunction V1(e, t = !1) {\n  const n = Os(e);\n  let r = 0, s = 0, i = 0;\n  for (let o = 0, a = Math.max(n.length, 3); o < a; o++) {\n    const c = Math.floor(Math.abs(n[o] || 0));\n    o == 0 ? t ? r = c : r = c % 24 : o == 1 ? s = c : o == 2 && (i = c);\n  }\n  return mt(r * 60 * 60 + s * 60 + i, t);\n}\nfunction G1(e) {\n  const t = e.getHours(), n = e.getMinutes(), r = e.getSeconds();\n  return mt(t * 60 * 60 + n * 60 + r);\n}\nfunction X1(e, t = !1) {\n  const n = e[0] || 0, r = e[1] || 0, s = e[2] || 0;\n  return mt(n * 60 * 60 + r * 60 + s, t);\n}\nfunction Z1(e, t, n = !1) {\n  const r = (N(e) && N(t) ? Math.abs(t.getTime() - e.getTime()) : 0) / 1e3;\n  return mt(r, n);\n}\nfunction J1(e, t = 1, n = !1) {\n  return e[e.length - 1] += t, mt(e, n);\n}\nfunction Y1(e, t = 1, n = !1) {\n  return e[e.length - 1] -= t, mt(e, n);\n}\nfunction K1(e, t) {\n  Ps(t, e);\n}\nfunction Q1(e, t, n) {\n  const r = Ut(e), s = Ut(t), i = Ut(n);\n  return s >= r ? i >= r && i <= s : i >= r || i <= s;\n}\nfunction mn(e, t) {\n  if (!N(e))\n    throw new Error(`Date(${e}) is Invalid !`);\n  if (!N(t))\n    throw new Error(`Date(${t}) is Invalid !`);\n  return Math.ceil((t.getTime() - e.getTime()) / Ge);\n}\nfunction tu(e, t, n) {\n  return !(!N(e) || !N(t) || !N(n) || mn(e, n) < 0 || mn(n, t) < 0);\n}\nfunction Ft(e, t = \"yyyy-mm-dd hh:ii:ss\") {\n  if (!N(e))\n    return \"\";\n  const n = /(y+)/.exec(t);\n  if (n && n[1]) {\n    const s = n[1];\n    t = t.replace(\n      s,\n      // (date.getFullYear() + \"\").substring(Math.max(4 - year.length, 0))\n      (e.getFullYear() + \"\").substring(4 - s.length)\n    );\n  }\n  const r = {\n    \"m+\": e.getMonth() + 1,\n    //月份\n    \"d+\": e.getDate(),\n    //日\n    \"h+\": e.getHours(),\n    //小时\n    \"i+\": e.getMinutes(),\n    //分\n    \"s+\": e.getSeconds(),\n    //秒\n    \"q+\": Math.floor((e.getMonth() + 3) / 3),\n    // 季度\n    \"S+\": e.getMilliseconds()\n    //毫秒\n  };\n  for (const s in r) {\n    const i = new RegExp(\"(\" + s + \")\").exec(t);\n    if (i && i[1]) {\n      const o = i[1];\n      t = t.replace(\n        o,\n        // d.length == 1 ? \"\" + o[k] : (\"00\" + o[k]).substring((\"\" + o[k]).length)\n        // d.length == 1\n        //   ? \"\" + o[k]\n        //   : (\"00\" + o[k]).substring((\"\" + o[k]).length - d.length + 2)\n        o.length === 1 ? \"\" + r[s] : (\"00\" + r[s]).slice(-o.length)\n      );\n    }\n  }\n  return t;\n}\nfunction eu(e = \"yyyy-mm-dd hh:ii:ss\") {\n  return (t) => Ft(t, e);\n}\nfunction nu(e, t = \"-\") {\n  return Ft(e, `yyyy${t}mm${t}dd`);\n}\nfunction ru(e, t = \":\") {\n  return Ft(e, `hh${t}ii${t}ss`);\n}\nfunction su(e) {\n  return N(e) ? e.toTimeString().slice(0, 8) : \"\";\n}\nfunction iu(e, t = \"-\", n = \":\") {\n  return Ft(\n    e,\n    `yyyy${t}mm${t}dd hh${n}ii${n}ss`\n  );\n}\nfunction ou(e) {\n  return N(e) ? [0, 6].indexOf(e.getDay()) !== -1 : !1;\n}\nfunction au(e) {\n  return N(e) ? Math.floor(\n    (e.getTime() - new Date(e.getFullYear(), 0, 0).getTime()) / Ge\n  ) : -1;\n}\nfunction Us(e, t) {\n  return new Date(e, t, 0).getDate();\n}\nfunction zs(e, t) {\n  const n = new Date(e, t, 1);\n  return n.setHours(0, 0, 0, 0), n.getTime() - 1;\n}\nfunction cu(e, t) {\n  return zs(e, t) + 1;\n}\nfunction js(e, t) {\n  const n = new Date(e, t - 1, 1);\n  return n.setHours(0, 0, 0, 0), n.getTime();\n}\nfunction uu(e, t) {\n  return js(e, t) - 1;\n}\nfunction lu(e, t = 1) {\n  const n = typeof e == \"string\" ? de(e) : new Date(e);\n  n.setHours(0, 0, 0, 0);\n  const r = new Date(n);\n  return n.setMonth(n.getMonth() + t), n.getDate() < r.getDate() && n.setDate(0), new Date(n.getTime() - 1);\n}\nfunction hu(e, t = 1, n = !1) {\n  const r = typeof e == \"string\" ? de(e) : new Date(e);\n  r.setHours(0, 0, 0, 0);\n  const s = new Date(r);\n  return r.setMonth(r.getMonth() + t), r.getDate() < s.getDate() ? (r.setDate(0), r) : n ? r : new Date(r.getTime() - 1);\n}\nfunction It(e, t = 1) {\n  const n = typeof e == \"string\" ? de(e) : e;\n  return new Date(n.getTime() + t * Ge);\n}\nfunction St(e) {\n  const t = e.getFullYear(), n = e.getMonth() + 1, r = e.getDate();\n  let s = e.getDay();\n  return s == 0 && (s = 7), {\n    year: t,\n    month: n,\n    day: r,\n    weekday: s,\n    monthDays: Us(t, n),\n    date: new Date(e)\n  };\n}\nfunction fu(e = \"\") {\n  const t = [], n = St(\n    typeof e == \"string\" ? e != \"\" ? de(e) : /* @__PURE__ */ new Date() : e\n  );\n  function r(s, i) {\n    if (s.month !== n.month)\n      return;\n    const o = [];\n    i == \"forward\" ? t.unshift(o) : t.push(o), o.push(s);\n    let a = s;\n    for (let c = s.weekday - 1; c >= 1; c--)\n      a = St(It(a.date, -1)), o.unshift(a);\n    a = s;\n    for (let c = s.weekday + 1; c <= 7; c++)\n      a = St(It(a.date, 1)), o.push(a);\n    o[0].day > 1 && (i == \"both\" || i == \"forward\") && r(St(It(o[0].date, -1)), \"forward\"), o[6].day < n.monthDays && (i == \"both\" || i == \"backward\") && r(St(It(o[6].date, 1)), \"backward\");\n  }\n  return r(n, \"both\"), t;\n}\nfunction du() {\n  T.OPEN_LOG = !0;\n}\nfunction pu() {\n  T.OPEN_LOG = !1;\n}\nfunction mu(e) {\n  T.LOG_UPLOAD_FN = e;\n}\nfunction gt() {\n  return !!T.OPEN_LOG;\n}\nfunction Xe(e) {\n  T.LOG_UPLOAD_FN && T.LOG_UPLOAD_FN(e);\n}\nfunction E(e) {\n  Xe({ level: \"info\", msg: e }), gt() && (!console || typeof console != \"object\" || typeof console.log != \"function\" || console.log(e));\n}\nfunction Bs(e) {\n  Xe({ level: \"warn\", msg: e }), gt() && (!console || typeof console != \"object\" || typeof console.warn != \"function\" || console.warn(e));\n}\nfunction gu(e) {\n  Xe({ level: \"error\", msg: e }), gt() && (!console || typeof console != \"object\" || typeof console.error != \"function\" || console.error(e));\n}\nconst $t = {}, gn = {\n  start: (e) => {\n    gt() && (!console || typeof console != \"object\" || // typeof console.group !== \"function\"\n    typeof console.groupCollapsed != \"function\" || console.groupCollapsed(e));\n  },\n  end: () => {\n    !console || typeof console != \"object\" || typeof console.groupEnd != \"function\" || console.groupEnd();\n  }\n}, Kt = {\n  start: (e) => {\n    gt() && ($t[e] = Yt());\n  },\n  end: (e) => {\n    $t[e] && (E(`${e}: ${Yt() - $t[e]} ms`), delete $t[e]);\n  }\n}, yn = {\n  start: (e) => {\n    gt() && (!console || typeof console != \"object\" || typeof console.profile != \"function\" || console.profile(e));\n  },\n  end: (e) => {\n    !console || typeof console != \"object\" || typeof console.profileEnd != \"function\" || console.profileEnd(e);\n  }\n}, qs = () => {\n}, yu = (e) => e, Yn = (e) => () => e, wu = Yn(!0), bu = Yn(!1), Su = (e) => ({ value: e, done: !0 });\nfunction Ws(e, t, n) {\n  switch (n.length) {\n    case 0:\n      return e.call(t);\n    case 1:\n      return e.call(t, n[0]);\n    case 2:\n      return e.call(t, n[0], n[1]);\n    case 3:\n      return e.call(t, n[0], n[1], n[2]);\n  }\n  return e.apply(t, n);\n}\nfunction Au(e, t, n) {\n  return Object.assign({}, n, { [e]: t });\n}\nconst Kn = 300;\nfunction Hs(e, t = Kn, n) {\n  const r = typeof n?.leading == \"boolean\" ? n.leading : !0, s = typeof n?.trailing == \"boolean\" ? n.trailing : !1;\n  let i = !0, o;\n  return function(...c) {\n    if (!i) {\n      o = c;\n      return;\n    }\n    i = !1, r && e.apply(n?.thisArg || this, c), s && (o = c), setTimeout(() => {\n      s && e.apply(n?.thisArg || this, o), o = void 0, i = !0;\n    }, t);\n  };\n}\nfunction Vs(e, t = Kn, n) {\n  let r, s = 0;\n  return function(...o) {\n    let a = !!n?.immediate && !r;\n    !a && n?.throttle && (a = !!s && Yt() - s >= t), r && clearTimeout(r);\n    const c = () => {\n      e.apply(n?.thisArg || this, o), n?.throttle && (s = Yt());\n    };\n    r = setTimeout(() => {\n      a || c(), r = void 0;\n    }, t), a && c();\n  };\n}\nfunction Gs(e, ...t) {\n  const n = e.length;\n  return t = t || [], function(...r) {\n    const s = t.concat(Array.prototype.slice.call(r));\n    return s.length < n ? Gs.call(this, e, ...s) : e.apply(this, s);\n  };\n}\nfunction Xs(...e) {\n  return e.length === 0 ? (...t) => t : e.length === 1 ? e[0] : e.reduce(\n    (t, n) => (...r) => t(n(...r))\n  );\n}\nconst xu = (...e) => e.length === 0 ? (...t) => t : e.length === 1 ? e[0] : e.reduceRight(\n  (t, n) => (...r) => t(n(...r))\n), _u = (...e) => e.length === 0 ? (...t) => t : e.length === 1 ? e[0] : e.reduceRight(\n  (t, n) => (...r) => n(...r, t),\n  qs\n);\nfunction Ou(e) {\n  for (; e && e instanceof Function; )\n    e = e();\n  return e;\n}\nfunction Tu(e) {\n  let t, n = !1;\n  const r = [];\n  return function(...i) {\n    if (r.push(i), !n) {\n      for (n = !0; r.length; )\n        t = e.apply(this, r.shift());\n      return n = !1, t;\n    }\n  };\n}\nfunction vu(e, t) {\n  return function(...n) {\n    return e.apply(t || this, n.reverse());\n  };\n}\nfunction Ru(e, t) {\n  let n = !1, r;\n  return async function(...s) {\n    return n || (n = !0, r = await e.apply(t || this, s)), r;\n  };\n}\nfunction Zs(e = 0, t) {\n  const n = t?.min || 300, r = t?.max || 6e4, s = t?.exponent || 2, i = t?.factor || 0.5;\n  let o = n * Math.pow(s, e);\n  if (i) {\n    const a = Math.random(), c = Math.floor(a * i * o);\n    o = Math.floor(a * 10) & 1 ? o + c : o - c;\n  }\n  return Math.min(o, r) | 0;\n}\nfunction Qn(e, t = 3, n, r) {\n  return async function(...s) {\n    const i = `retry(${e.name})(${s.map((a) => I(a))})`;\n    let o;\n    for (let a = 0; a < t; a++)\n      try {\n        return await e.call(r || this, ...s);\n      } catch (c) {\n        E(`(${i}) 第 ${a + 1} 次尝试失败, retrying...`), o = c, await new Promise(\n          (u) => setTimeout(\n            u,\n            typeof n == \"number\" ? n : Zs(a)\n            // : 300 * Math.pow(2, attempt)\n          )\n        );\n      }\n    throw E(\n      `(${i}) 已 ${t} 次失败，不再重试。 Last error: ${I(\n        o\n      )}`\n    ), o;\n  };\n}\nfunction tr(e, t = 60, n = new Ve(), r) {\n  return async function(...s) {\n    const i = `cache(${e.name})(${s.map((u) => I(u))})`, o = Date.now();\n    t && n.update((u, l) => o - l.timestamp < t * 1e3);\n    const a = je(s), c = n.get(a);\n    if (c) {\n      if (!t || o - c.timestamp < t * 1e3)\n        return E(`${i} 击中缓存`), c.value;\n      n.delete(a);\n    }\n    try {\n      E(`${i} 没有缓存, 尝试立即执行...`);\n      const l = await e.call(r || this, ...s);\n      return E(`${i} 缓存设置成功`), n.set(a, {\n        value: l,\n        timestamp: Date.now()\n      }), l;\n    } catch (u) {\n      throw E(`${i} 执行失败 : ${I(u)}`), u;\n    }\n  };\n}\nfunction Js(e, t = new Ve(), n) {\n  return async function(...r) {\n    const s = je(r), i = `memorize(${e.name})(${r.map((a) => I(a))})`, o = await t.get(s);\n    if (o)\n      return E(`${i} memorize hit: ${I(o)}`), o;\n    try {\n      E(`${i} memorize miss, await fetching fresh data...`);\n      const a = await e.call(n || this, ...r);\n      return E(`${i} memorize settled`), await t.set(s, a), a;\n    } catch (a) {\n      throw E(`${i} returns error: ${I(a)}`), a;\n    }\n  };\n}\nfunction Ze(e, t) {\n  if (typeof e != \"function\" || t != null && typeof t != \"function\")\n    throw new TypeError(\"Expected a function\");\n  const n = function(...r) {\n    const s = t ? t.apply(this, r) : r[0], i = n.cache;\n    if (i.has(s))\n      return i.get(s);\n    const o = e.apply(this, r);\n    return n.cache = i.set(s, o) || i, o;\n  };\n  return n.cache = new (Ze.Cache || Ct)(), n;\n}\nZe.Cache = Ct;\nconst Ys = 500;\nfunction Eu(e) {\n  const t = Ze(e, function(r) {\n    return n.size === Ys && n.clear(), r;\n  }), n = t.cache;\n  return t;\n}\nfunction Cu(e, t) {\n  const { ignoreResult: n = () => !1 } = t || {};\n  return async (...r) => {\n    for (let s = 0, i = e.length; s < i; s++)\n      try {\n        const o = await e[s](...r);\n        if (!n(o))\n          return o;\n      } catch (o) {\n        t?.onError?.(o);\n      }\n    throw new Error(\"tryEach failed. No function returned a value\");\n  };\n}\nfunction Fu(e, t, n) {\n  return function(...r) {\n    return e.apply(this, r) ? t.apply(this, r) : n.apply(this, r);\n  };\n}\nfunction ku(e, t) {\n  return function(...n) {\n    try {\n      return e.apply(this, n);\n    } catch (r) {\n      return t.apply(this, r);\n    }\n  };\n}\nfunction Pu(e) {\n  return (t) => (E(e + \": \" + t), t);\n}\nfunction Du(e, t) {\n  return function(n) {\n    return e.call(this, t(n));\n  };\n}\nconst Mu = (e) => (t) => t.map(e), Lu = (e) => (t, n) => t.reduce(e, n);\nfunction Ks(e, t) {\n  return function(n) {\n    return e(t(n));\n  };\n}\nfunction Iu(e, t, n) {\n  return n = Math.max(n === void 0 ? e.length - 1 : n, 0), function(...r) {\n    const s = Math.max(r.length - n, 0), i = Array(s);\n    let o = -1;\n    for (; ++o < s; )\n      i[o] = r[n + o];\n    o = -1;\n    const a = Array(n + 1);\n    for (; ++o < n; )\n      a[o] = r[o];\n    return a[n] = t(i), Ws(e, this, a);\n  };\n}\nconst er = \"[object Undefined]\", nr = \"[object Null]\", rr = \"[object Boolean]\", Qs = \"[object Number]\", ti = \"[object BigInt]\", sr = \"[object String]\", ir = \"[object Symbol]\", ei = \"[object Function]\", ni = \"[object GeneratorFunction]\", ri = \"[object Array]\", si = \"[object Map]\", ii = \"[object Set]\", oi = \"[object Date]\";\nfunction $(e) {\n  return Object.prototype.toString.call(e);\n}\nfunction $u(e, t) {\n  return t != null && e instanceof t;\n}\nfunction Nu(e) {\n  const t = typeof e;\n  return t !== \"object\" ? t : $(e).replace(/^\\[object (\\S+)\\]$/, \"$1\").toLowerCase();\n}\nfunction Uu(e) {\n  return $(e) === er;\n}\nfunction zu(e) {\n  return $(e) === nr;\n}\nfunction ai(e) {\n  return e != null;\n}\nfunction ju(e) {\n  return $(e) === rr;\n}\nfunction ci(e) {\n  return $(e) === sr;\n}\nfunction Bu(e) {\n  return e === e + 0;\n}\nfunction qu(e) {\n  return !isNaN(parseFloat(e)) && isFinite(e);\n}\nfunction ui(e) {\n  return $(e) === ir;\n}\nfunction Wu(e) {\n  const t = e ? Symbol.prototype : void 0, n = t ? t.valueOf : void 0;\n  return n ? Object(n.call(e)) : {};\n}\nfunction Je(e) {\n  const t = $(e);\n  return t === er || t === nr || t === rr || t === Qs || t === sr || t === ir || t === ti;\n}\nfunction Q(e) {\n  const t = $(e);\n  return t == ei || t == ni;\n}\nfunction Hu(e) {\n  return Q(e) && Object.prototype.hasOwnProperty.call(e, \"toString\");\n}\nfunction Vu(e) {\n  return /^function\\s+\\w*\\s*\\(\\s*\\)\\s*{\\s+\\[native code\\]\\s+}$/i.exec(\n    ar(e)\n  ) != null;\n}\nfunction zt(e) {\n  if (!yt(e))\n    return !1;\n  const t = /[\\\\^$.*+?()[\\]{}|]/g, n = /^\\[object .+?Constructor\\]$/, r = RegExp(\n    \"^\" + Function.prototype.toString.call(Object.prototype.hasOwnProperty).replace(t, \"\\\\$&\").replace(\n      /hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\n      \"$1.*?\"\n    ) + \"$\"\n  );\n  return (Q(e) ? r : n).test(ar(e));\n}\nfunction li(e, t) {\n  return e?.[t];\n}\nfunction Ye(e, t) {\n  const n = li(e, t);\n  return zt(n) ? n : void 0;\n}\nfunction Gu() {\n  return Ye(Object, \"create\");\n}\nconst jt = Ye(T, \"Map\"), or = Ye(T, \"WeakMap\");\nfunction j(e) {\n  return $(e) === ri;\n}\nfunction Xu(e) {\n  return e != null && typeof e.length == \"number\" && e.length > -1 && e.length % 1 == 0 && e.length <= Number.MAX_SAFE_INTEGER && !Q(e);\n}\nfunction yt(e) {\n  const t = typeof e;\n  return !!e && (t == \"object\" || t == \"function\");\n}\nfunction U(e) {\n  return !!e && typeof e == \"object\";\n}\nfunction M(e) {\n  return U(e) && !j(e);\n}\nfunction Zu(e) {\n  return U(e) ? Object == e.constructor : !1;\n}\nfunction hi(e) {\n  const t = typeof e;\n  return t == \"string\" || t == \"number\" || t == \"symbol\" || t == \"boolean\" ? e !== \"__proto__\" : e === null;\n}\nfunction Ju(e) {\n  const t = e && e.constructor, n = typeof t == \"function\" && t.prototype || Object.prototype;\n  return e === n;\n}\nconst Yu = Ks(Object.getPrototypeOf, Object);\nfunction Ku(e) {\n  if (!e || !e.hasOwnProperty)\n    return !1;\n  const t = [\"value\", \"initializer\", \"get\", \"set\"];\n  for (let n = 0, r = t.length; n < r; n++)\n    if (Object.hasOwnProperty.call(e, t[n]))\n      return !0;\n  return !1;\n}\nconst Qu = (e) => {\n  for (const t in e)\n    if (Object.prototype.hasOwnProperty.call(e, t))\n      return !1;\n  return !0;\n};\nfunction t2(e) {\n  return typeof Promise < \"u\" && e instanceof Promise || yt(e) && typeof e.then == \"function\" && typeof e.catch == \"function\";\n}\nfunction fi(e) {\n  return yt(e) && typeof e.next == \"function\";\n}\nfunction e2(e) {\n  const t = e.constructor;\n  return t ? (t.name || t.displayName) === \"GeneratorFunction\" : !1;\n}\nfunction n2(e) {\n  return e && Q(Symbol) ? Q(e[Symbol.iterator]) : j(e);\n}\nfunction r2(e) {\n  return U(e) && $(e) == si;\n}\nfunction s2(e) {\n  return U(e) && $(e) == ii;\n}\nfunction i2(e) {\n  return U(e) && $(e) == oi;\n}\nfunction o2(e) {\n  return e === e && !yt(e);\n}\nfunction kt(e) {\n  const t = [];\n  for (const n in e)\n    Object.prototype.hasOwnProperty.call(e, n) && t.push(n);\n  return t;\n}\nfunction a2(e) {\n  const t = [];\n  for (const n in e)\n    Object.prototype.hasOwnProperty.call(e, n) && t.push(e[n]);\n  return t;\n}\nfunction c2(e) {\n  const t = [];\n  for (const n in e)\n    Object.prototype.hasOwnProperty.call(e, n) && t.push([n, e[n]]);\n  return t;\n}\nfunction u2(e) {\n  const t = {};\n  return kt(e).forEach(\n    (n) => t[n] = Object.getOwnPropertyDescriptor(e, n)\n  ), t;\n}\nfunction l2(e, t) {\n  if (ui(e)) {\n    do {\n      if (t === Object.prototype)\n        return typeof t[e] < \"u\";\n      if (Object.prototype.hasOwnProperty.call(t, e))\n        return !0;\n    } while (t = Object.getPrototypeOf(t));\n    return !1;\n  } else\n    return e in t;\n}\nfunction Bt(e, t, n = !0) {\n  if (M(e) && M(t))\n    for (const r of kt(t))\n      (n || typeof e[r] > \"u\") && (e[r] = t[r]);\n  return e;\n}\nfunction di(e, t, n = !0) {\n  if (M(e) && M(t))\n    for (const r of kt(t))\n      (n || typeof e[r] > \"u\") && (M(e[r]) && M(t[r]) ? di(e[r], t[r], n) : e[r] = t[r]);\n  return e;\n}\nfunction pi(e) {\n  Object.freeze(e), Object.keys(e).forEach((t) => {\n    yt(e[t]) && pi(e[t]);\n  });\n}\nfunction h2(e) {\n  const t = Object.entries(e).slice(0), n = t.length;\n  let r = -1;\n  const s = n - 1;\n  for (; ++r < n; ) {\n    const i = r + Math.floor(Math.random() * (s - r + 1)), o = t[i];\n    t[i] = t[r], t[r] = o;\n  }\n  return Object.fromEntries(t);\n}\nfunction f2(e, t = {}) {\n  const n = Symbol(\"isa\");\n  function r(s) {\n    for (const i of Reflect.ownKeys(e))\n      Object.defineProperty(s.prototype, i, {\n        value: e[i],\n        writable: !0\n      });\n    return Object.defineProperty(s.prototype, n, { value: !0 }), s;\n  }\n  for (const s of Reflect.ownKeys(t))\n    Object.defineProperty(r, s, {\n      value: t[s],\n      enumerable: Object.propertyIsEnumerable.call(t, s)\n    });\n  return Object.defineProperty(r, Symbol.hasInstance, {\n    value: (s) => !!s[n]\n  }), r;\n}\nfunction d2(...e) {\n  class t {\n    constructor() {\n      for (const r of e)\n        Bt(this, new r(), !0);\n    }\n  }\n  for (const n of e)\n    Bt(t, n, !0), Bt(t.prototype, n.prototype, !0);\n  return t;\n}\nfunction p2(e) {\n  try {\n    postMessage(e, \"*\");\n  } catch (t) {\n    if (t?.code === 25)\n      return !1;\n  }\n  return !0;\n}\nfunction m2(e, t) {\n  return Je(e) || Q(e) ? t = e : j(e) ? t = [...e] : t ? (Object.setPrototypeOf(t, e), Bt(t, e, !0)) : t = Object.create(\n    Object.getPrototypeOf(e),\n    Object.getOwnPropertyDescriptors(e)\n  ), t;\n}\nfunction g2(e, ...t) {\n  return new e.constructor(...t);\n}\nfunction it(e, t = new or()) {\n  if (!yt(e))\n    return e;\n  if (t.has(e))\n    return t.get(e);\n  let n;\n  const r = e.constructor;\n  if (Q(e) ? n = e : r === Array ? n = [] : r === jt ? n = new jt() : r === Set ? n = /* @__PURE__ */ new Set() : r === RegExp ? n = hs(e) : r === Date ? n = new Date(e.getTime()) : typeof ArrayBuffer < \"u\" && r === ArrayBuffer ? n = qe(e) : r === Promise ? n = new Promise((s, i) => {\n    e.then(\n      (o) => {\n        s(it(o, t));\n      },\n      (o) => {\n        i(it(o, t));\n      }\n    );\n  }) : r === Error ? n = Object.create(e) : n = Object.create(\n    Object.getPrototypeOf(e)\n    // Object.getOwnPropertyDescriptors(from)\n  ), e instanceof jt)\n    e.forEach((s, i) => {\n      n.set(it(i, t), it(s, t));\n    });\n  else if (e instanceof Set)\n    e.forEach((s) => {\n      n.add(it(s, t));\n    });\n  else\n    for (const s in e)\n      try {\n        Object.getOwnPropertyDescriptor(e, s) && (n[s] = it(e[s], t));\n      } catch (i) {\n        if (i instanceof TypeError)\n          continue;\n        if (i instanceof ReferenceError)\n          continue;\n      }\n  if (Object.getOwnPropertySymbols) {\n    const s = Object.getOwnPropertySymbols(e);\n    for (let i = 0, o = s.length; i < o; i++) {\n      const a = s[i], c = Object.getOwnPropertyDescriptor(e, a);\n      c && (n[a] = it(e[a], t), Object.defineProperty(n, a, c));\n    }\n  }\n  return t.set(e, n), n;\n}\nfunction y2(e) {\n  if (e === null)\n    return null;\n  class t {\n  }\n  return t.prototype = e, new t();\n}\nfunction w2(e, t) {\n  e.prototype = Object.create(t.prototype), e.prototype.constructor = e;\n}\nfunction b2(e, t) {\n  return e.__proto__ = t, e;\n}\nfunction mi(e, t) {\n  return e === t || e !== e && t !== t;\n}\nfunction gi(e, t) {\n  if (e === t)\n    return !0;\n  const n = Object.keys(e), r = Object.keys(t);\n  if (n.length !== r.length)\n    return !1;\n  for (const s of n) {\n    const i = e[s], o = t[s], a = M(i) && M(o);\n    if (a && !gi(i, o) || !a && i !== o)\n      return !1;\n  }\n  return !0;\n}\nfunction S2(e, t) {\n  return e.bind ? e.bind(t) : function(...r) {\n    return e.apply(t, r);\n  };\n}\nfunction A2(e) {\n  const t = new or();\n  return new Proxy(e, {\n    get(n, r) {\n      const s = Reflect.get(n, r);\n      return typeof s != \"function\" ? s : (t.has(s) || t.set(s, s.bind(n)), t.get(s));\n    }\n  });\n}\nfunction x2(e, t) {\n  if (!M(e))\n    return e;\n  for (const n in t)\n    Object.prototype.hasOwnProperty.call(t, n) && delete e[n];\n  return e;\n}\nfunction _2(e, t) {\n  if (!M(e))\n    return e;\n  for (const n in e)\n    Object.prototype.hasOwnProperty.call(e, n) && !t(n, e[n]) && delete e[n];\n  return e;\n}\nfunction O2(e, t) {\n  const n = {};\n  return M(e) && t.forEach((r) => {\n    Object.prototype.hasOwnProperty.call(e, r) && (n[r] = e[r]);\n  }), n;\n}\nfunction T2(e) {\n  return M(e) && kt(e).forEach((t) => {\n    delete e[t];\n  }), e;\n}\nfunction I(e, t = `\\r\n`, n = 6, r = 1) {\n  if (ci(e))\n    return `\"${e}\"`;\n  if (Je(e))\n    return \"\" + e;\n  if (Q(e))\n    return \"[Fn]\";\n  if (r > n)\n    return j(e) ? \"[...]\" : \"{...}\";\n  let s = \"\", i = \"\";\n  for (let o = 0; o < r; o++)\n    s += \"  \", o > 0 && (i += \"  \");\n  return j(e) ? `[${e.map(\n    (o) => t + s + I(o, t, n, r + 1)\n  ).join(\", \")}${t}${i}]` : `{${kt(e).map(\n    (o) => `${t}${s}${o}: ${I(\n      e[o],\n      t,\n      n,\n      r + 1\n    )}`\n  ).join(\", \")}${t}${i}}`;\n}\nfunction ar(e) {\n  if (e != null) {\n    try {\n      return Function.prototype.toString.call(e);\n    } catch {\n    }\n    try {\n      return \"\" + e;\n    } catch {\n    }\n  }\n  return \"\";\n}\nfunction v2(e, t = \"\", n = [\"\", \"sign\", \"key\"]) {\n  return M(e) ? Object.keys(e).filter((r) => {\n    for (let s = 0, i = n.length; s < i; s++)\n      if (e[r] == n[s])\n        return !1;\n    return !0;\n  }).sort().map((r) => `${r}=${e[r]}`).join(\"&\") + t : String(e);\n}\nfunction cr(e, t, n = \"\") {\n  let r = [];\n  return e === t ? r : typeof e != \"object\" || typeof t != \"object\" || !e || !t ? (r.push({\n    path: n,\n    newValue: t,\n    oldValue: e\n  }), r) : ((/* @__PURE__ */ new Set([...Object.keys(e), ...Object.keys(t)])).forEach((i) => {\n    const o = n ? `${n}.${i}` : i;\n    r = r.concat(cr(e[i], t[i], o));\n  }), r);\n}\nfunction R2(e, t) {\n  try {\n    return t.split(\".\").reduce((n, r) => n?.[r], e);\n  } catch {\n    return;\n  }\n}\nfunction E2(e, t, n) {\n  if (!e || !t)\n    return e;\n  const r = t.split(\".\");\n  let s = e;\n  for (let i = 0, o = r.length - 1; i < o; i++) {\n    const a = r[i];\n    (!(a in s) || typeof s[a] != \"object\" || s[a] === null) && (s[a] = {}), s = s[a];\n  }\n  return s[r[r.length - 1]] = n, e;\n}\nfunction C2(e, t) {\n  const n = typeof t?.aliveInSeconds == \"number\" ? Math.max(t.aliveInSeconds, 0) : -1, r = typeof t?.aliveUntilTimestamp == \"number\" ? Math.max(t.aliveUntilTimestamp, 0) : -1;\n  function s(c, u = !1) {\n    return Je(c) || j(c) || Q(c) ? { value: c, timestamp: K() } : u && Object.prototype.hasOwnProperty.call(c, \"timestamp\") ? c : {\n      ...c,\n      timestamp: K()\n    };\n  }\n  let i = s(e, !0);\n  return {\n    get: () => {\n      let c = !1;\n      return (n >= 0 && K() > i.timestamp + n * 1e3 || // 时间戳\n      r >= 0 && K() > r) && (c = !0), c && (i.value = void 0), i;\n    },\n    set: (c) => i = s(c, !1)\n  };\n}\nconst yi = () => typeof window == \"object\" && typeof document == \"object\", F2 = () => !yi(), k2 = () => typeof process < \"u\" && process.versions != null && process.versions.node != null, P2 = typeof BigInt < \"u\", D2 = typeof Symbol < \"u\", M2 = typeof document < \"u\", L2 = typeof window < \"u\", I2 = typeof history < \"u\";\nfunction $2(e, t) {\n  const n = e.split(\".\"), r = t.split(\".\");\n  for (let s = 0, i = n.length; s < i; s++) {\n    if (r.length == s)\n      return 1;\n    if (n[s] != r[s])\n      return n[s] > r[s] ? 1 : -1;\n  }\n  return n.length != r.length ? -1 : 0;\n}\nconst wi = (() => !!(T.Worker && T.Blob && T.Promise && T.OffscreenCanvas && T.OffscreenCanvasRenderingContext2D && T.HTMLCanvasElement && T.HTMLCanvasElement.prototype.transferControlToOffscreen && T.URL && T.URL.createObjectURL))(), N2 = (() => {\n  if (!T.OffscreenCanvas)\n    return !1;\n  const e = new OffscreenCanvas(1, 1), t = e.getContext(\"2d\");\n  if (!t)\n    return !1;\n  t.fillRect(0, 0, 1, 1);\n  const n = e.transferToImageBitmap();\n  try {\n    t.createPattern(n, \"no-repeat\");\n  } catch {\n    return !1;\n  }\n  return !0;\n})(), bi = (e, t = 16) => e.toString(t), Si = (e, t = 16) => {\n  let n = e.toLowerCase();\n  const r = n.indexOf(\"0b\") == 0, s = n.indexOf(\"0o\") == 0, i = n.indexOf(\"0x\") == 0;\n  (r || s || i) && (n = n.slice(2)), r && (t = 2), s && (t = 8), i && (t = 16);\n  const o = parseInt(n, t);\n  if (isNaN(o))\n    throw new Error(`radixStringToNumber(${e}, ${t}) 无法解析！`);\n  return o;\n};\nfunction Ai(e) {\n  return Array.from(new Uint8Array(e));\n}\nfunction xi(e) {\n  const t = [];\n  for (; e > 0; ) {\n    const n = e & 255;\n    t.unshift(n), e = (e - n) / 256;\n  }\n  return t;\n}\nfunction _i(e) {\n  e.toLowerCase().indexOf(\"0x\") == 0 && (e = e.slice(2));\n  const t = [];\n  for (let n = 0, r = e.length; n < r; n += 2)\n    t.push(Si(e.slice(n, n + 2), 16));\n  return t;\n}\nfunction Oi(e) {\n  const t = [];\n  for (let n = 0, r = e.length; n < r; n++) {\n    const s = e.charCodeAt(n);\n    s && t.push(s);\n  }\n  return t;\n}\nfunction U2(e) {\n  return new TextEncoder().encode(e);\n}\nfunction z2(e) {\n  const t = [];\n  for (const n of e) {\n    const r = n.codePointAt(0);\n    r && t.push(r);\n  }\n  return t;\n}\nfunction j2(e) {\n  return he(e);\n}\nfunction B2(e) {\n  return he(xi(e));\n}\nfunction q2(e) {\n  return he(_i(e));\n}\nfunction Ti(e) {\n  return he(Oi(e));\n}\nfunction vi(e) {\n  return Ci(encodeURIComponent(e)).replaceAll(\"+\", \"*\").replaceAll(\"/\", \"-\").replaceAll(\"=\", \"\");\n}\nfunction Ri(e) {\n  let t = e.replaceAll(\"*\", \"+\").replaceAll(\"-\", \"/\");\n  const n = t.length % 4;\n  return n && (t = t.padEnd(t.length + (4 - n), \"=\")), decodeURIComponent(hr(t));\n}\nfunction W2(e) {\n  return vi(Ei(Ai(e)));\n}\nfunction H2(e) {\n  return Ti(Ri(e));\n}\nfunction V2(e) {\n  let t = 0;\n  for (let n = 0, r = e.length; n < r; n++)\n    t = t * 256 + e[n];\n  return t;\n}\nfunction G2(e) {\n  let t = \"\";\n  for (let n = 0, r = e.length; n < r; n++)\n    t += bi(e[n], 16).padStart(2, \"0\");\n  return t;\n}\nfunction Ei(e) {\n  return String.fromCodePoint.apply(null, e);\n}\nfunction X2(e) {\n  return String.fromCharCode.apply(\n    null,\n    new Uint16Array(e)\n  );\n}\nfunction Z2(e, t = Zt.utf8) {\n  return new TextDecoder(t).decode(e);\n}\nfunction J2(e) {\n  return hr(e);\n}\nfunction Y2(e, t) {\n  const n = t?.mime, r = t?.encode, s = t?.type;\n  return s ? new Blob([e], {\n    type: s\n  }) : n ? r === Zt.base64 ? new Blob([e], { type: `${n};${r}` }) : r === Zt.utf8 ? new Blob([e], {\n    type: `${n};charset=${r}`\n  }) : new Blob([e], {\n    type: `${n}`\n  }) : new Blob([e]);\n}\nconst K2 = (e) => {\n  let t = J.UNKNOWN;\n  switch (new DataView(e).getUint32(0, Ke()).toString(16).toUpperCase()) {\n    case \"FFD8FFDB\":\n      t = J.JPEG;\n      break;\n    case \"FFD8FFE0\":\n    case \"FFD8FFE1\":\n    case \"FFD8FFE2\":\n    case \"FFD8FFE3\":\n      t = J.JPEG;\n      break;\n    case \"89504E47\":\n      t = J.PNG;\n      break;\n    case \"47494638\":\n      t = J.GIF;\n      break;\n    case \"52494646\":\n      t = J.WEBP;\n      break;\n    case \"25504446\":\n      t = J.PDF;\n      break;\n    case \"504B0304\":\n      t = J.ZIP;\n      break;\n  }\n  return t;\n};\nclass ur extends Error {\n  constructor(t) {\n    super(t);\n  }\n}\nconst lr = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\nfunction Ci(e) {\n  const t = String(e);\n  let n = \"\";\n  for (\n    let r = 0, s, i = 0, o = lr;\n    // if the next str index does not exist:\n    //   change the mapping table to \"=\"\n    //   check if d has no fractional digits\n    t.charAt(i | 0) || (o = \"=\", i % 1);\n    // \"8 - idx % 1 * 8\" generates the sequence 2, 4, 6, 8\n    n += o.charAt(63 & r >> 8 - i % 1 * 8)\n  ) {\n    if (s = t.charCodeAt(i += 3 / 4), s > 255)\n      throw new ur(\n        \"'btoa' failed: The string to be encoded contains characters outside of the Latin1 range.\"\n      );\n    r = r << 8 | s;\n  }\n  return n;\n}\nfunction hr(e) {\n  const t = String(e).replace(/[=]+$/, \"\");\n  if (t.length % 4 === 1)\n    throw new ur(\n      \"'atob' failed: The string to be decoded is not correctly encoded.\"\n    );\n  let n = \"\";\n  for (\n    let r = 0, s = 0, i, o = 0;\n    // get next character\n    i = t.charAt(o++);\n    // eslint-disable-line no-cond-assign\n    // character found in table? initialize bit storage and add its ascii value;\n    ~i && (s = r % 4 ? s * 64 + i : i, // and if not first of each 4 characters,\n    // convert the first 8 bits to one ascii character\n    r++ % 4) ? n += String.fromCharCode(255 & s >> (-2 * r & 6)) : 0\n  )\n    i = lr.indexOf(i);\n  return n;\n}\nfunction Ke() {\n  const e = Uint32Array.of(305419896), t = new Uint8Array(e.buffer);\n  switch (t[0] * 16777216 + t[1] * 65536 + t[2] * 256 + t[3]) {\n    case 305419896:\n      return !1;\n    case 2018915346:\n      return !0;\n  }\n}\nfunction Q2(e, t, n = Ke()) {\n  const r = e.getUint32(t, n), s = e.getUint32(t + 4, n), i = n ? r + 2 ** 32 * s : 2 ** 32 * r + s;\n  return Number.isSafeInteger(i) || console.warn(i, \"exceeds MAX_SAFE_INTEGER. Precision may be lost\"), i;\n}\nfunction tl(e, t, n = Ke()) {\n  const r = BigInt(32);\n  BigInt(0);\n  const s = BigInt(e.getUint32(t | 0, !!n) >>> 0), i = BigInt(\n    e.getUint32((t | 0) + 4 | 0, !!n) >>> 0\n  );\n  return n ? i << r | s : s << r | i;\n}\nfunction ut(e) {\n  let t = \"\";\n  return {\n    match: (n) => (t = `\"${String(n)}\"不能为空`, n != null && n !== \"\"),\n    error: e || t\n  };\n}\nfunction Fi(e, t) {\n  let n = \"\";\n  return {\n    match: (r) => (n = `\"${r}\"不能小于\"${e}\"`, r >= e),\n    error: t || n\n  };\n}\nfunction ki(e, t) {\n  let n = \"\";\n  return {\n    match: (r) => (n = `\"${r}\"不能大于\"${e}\"`, r <= e),\n    error: t || n\n  };\n}\nfunction el(e, t) {\n  let n = \"\";\n  return {\n    match: (r) => (n = `\"${r}\"的长度不能小于\"${e}\"`, rt(r) >= e),\n    error: t || n\n  };\n}\nfunction nl(e, t) {\n  let n = \"\";\n  return {\n    match: (r) => (n = `\"${r}\"的长度不能大于\"${e}\"`, rt(r) <= e),\n    error: t || n\n  };\n}\nfunction Pi(e, t) {\n  let n = \"\";\n  return {\n    match: (r) => (n = `\"${r}\"的长度必须为\"${e}\"`, rt(r) == e),\n    error: t || n\n  };\n}\nfunction Di(e) {\n  return {\n    match: (t) => Rt(\"email\", t),\n    error: e || \"邮箱格式不正确\"\n  };\n}\nfunction Mi(e) {\n  return {\n    match: (t) => Rt(\"mobile-china\", t),\n    error: e || \"手机格式不正确\"\n  };\n}\nfunction Li(e) {\n  return {\n    match: (t) => Rt(\"date\", t),\n    error: e || \"日期格式不正确\"\n  };\n}\nfunction Ii(e) {\n  return {\n    match: (t) => Rt(\"time\", t),\n    error: e || \"时间格式不正确\"\n  };\n}\nfunction $i(e) {\n  return {\n    match: (t) => Rt(\"datetime\", t),\n    error: e || \"时间格式不正确\"\n  };\n}\nfunction Ni(e, t) {\n  let n = \"\";\n  return {\n    match: (r) => (n = `\"${r}\" 不在 \"${e}\" 范围内`, e.some((s) => s === r)),\n    error: t || n\n  };\n}\nfunction tt(e, t) {\n  const n = t.reduce((r, s) => {\n    const { match: i, error: o } = s;\n    return i(e) || r.push(o), r;\n  }, []);\n  return {\n    valid: n.length === 0,\n    errors: n\n  };\n}\nclass rl {\n  criterias = [];\n  constructor(t = []) {\n    t.forEach((n) => this.add(n));\n  }\n  add(...t) {\n    this.criterias.push(...t);\n  }\n  clear() {\n    this.criterias = [];\n  }\n  get() {\n    return (t) => tt(t, this.criterias);\n  }\n  run(t) {\n    return this.get()(t);\n  }\n}\nfunction sl(e) {\n  return (t) => {\n    const n = tt(t, [\n      ut(e?.emptyError || \"邮箱不能为空\"),\n      Di(e?.error || \"邮箱格式不正确\")\n    ]);\n    if (!n.valid && e?.throw)\n      throw new Error(n.errors[0]);\n    return n;\n  };\n}\nfunction il(e) {\n  return (t) => {\n    const n = tt(t, [\n      ut(e?.emptyError || \"手机号不能为空\"),\n      Mi(e?.error || \"手机格式不正确\")\n    ]);\n    if (!n.valid && e?.throw)\n      throw new Error(n.errors[0]);\n    return n;\n  };\n}\nfunction ol(e) {\n  return (t) => {\n    const n = tt(t, [\n      ut(e?.emptyError || \"日期不能为空\"),\n      Li(e?.error || \"日期格式不正确\")\n    ]);\n    if (!n.valid && e?.throw)\n      throw new Error(n.errors[0]);\n    return n;\n  };\n}\nfunction al(e) {\n  return (t) => {\n    const n = tt(t, [\n      ut(e?.emptyError || \"时间不能为空\"),\n      Ii(e?.error || \"时间格式不正确\")\n    ]);\n    if (!n.valid && e?.throw)\n      throw new Error(n.errors[0]);\n    return n;\n  };\n}\nfunction cl(e) {\n  return (t) => {\n    const n = tt(t, [\n      ut(e?.emptyError || \"时间不能为空\"),\n      $i(e?.error || \"时间格式不正确\")\n    ]);\n    if (!n.valid && e?.throw)\n      throw new Error(n.errors[0]);\n    return n;\n  };\n}\nfunction ul(e) {\n  return (t) => {\n    const n = [ut(e?.emptyError)];\n    typeof e?.min == \"number\" && n.push(Fi(e.min, e?.minError)), typeof e?.max == \"number\" && n.push(ki(e.max, e?.maxError));\n    const r = tt(t, n);\n    if (!r.valid && e?.throw)\n      throw new Error(r.errors[0]);\n    return r;\n  };\n}\nfunction ll(e, t) {\n  return (n) => {\n    const r = [\n      ut(t?.emptyError || t?.error),\n      Pi(e, t?.error)\n    ], s = tt(n, r);\n    if (!s.valid && t?.throw)\n      throw new Error(s.errors[0]);\n    return s;\n  };\n}\nfunction hl(e, t) {\n  return (n) => {\n    const r = tt(n, [Ni(e, t?.error)]);\n    if (!r.valid && t?.throw)\n      throw new Error(r.errors[0]);\n    return r;\n  };\n}\nfunction fl(e) {\n  const t = String(e).toLowerCase();\n  if (t.indexOf(\"km\") >= 0 || t.indexOf(\"m\") >= 0)\n    return t;\n  const n = parseFloat(t);\n  return n < 0 ? \"\" : n >= 1e3 ? Math.ceil(n / 1e3 * 10) / 10 + \"km\" : Math.ceil(n) + \"m\";\n}\nfunction dl(e, t = 2) {\n  return Xn(e / 100, t);\n}\nfunction pl(e, t) {\n  const n = e.getReader();\n  n.read().then(function r({ done: s, value: i }) {\n    return t(i), s ? Promise.resolve(s) : n.read().then(r);\n  });\n}\nvar Ee = function(e, t) {\n  return Ee = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(n, r) {\n    n.__proto__ = r;\n  } || function(n, r) {\n    for (var s in r)\n      Object.prototype.hasOwnProperty.call(r, s) && (n[s] = r[s]);\n  }, Ee(e, t);\n};\nfunction Qe(e, t) {\n  if (typeof t != \"function\" && t !== null)\n    throw new TypeError(\"Class extends value \" + String(t) + \" is not a constructor or null\");\n  Ee(e, t);\n  function n() {\n    this.constructor = e;\n  }\n  e.prototype = t === null ? Object.create(t) : (n.prototype = t.prototype, new n());\n}\nfunction Ui(e, t, n, r) {\n  function s(i) {\n    return i instanceof n ? i : new n(function(o) {\n      o(i);\n    });\n  }\n  return new (n || (n = Promise))(function(i, o) {\n    function a(l) {\n      try {\n        u(r.next(l));\n      } catch (h) {\n        o(h);\n      }\n    }\n    function c(l) {\n      try {\n        u(r.throw(l));\n      } catch (h) {\n        o(h);\n      }\n    }\n    function u(l) {\n      l.done ? i(l.value) : s(l.value).then(a, c);\n    }\n    u((r = r.apply(e, t || [])).next());\n  });\n}\nfunction fr(e, t) {\n  var n = { label: 0, sent: function() {\n    if (i[0] & 1)\n      throw i[1];\n    return i[1];\n  }, trys: [], ops: [] }, r, s, i, o = Object.create((typeof Iterator == \"function\" ? Iterator : Object).prototype);\n  return o.next = a(0), o.throw = a(1), o.return = a(2), typeof Symbol == \"function\" && (o[Symbol.iterator] = function() {\n    return this;\n  }), o;\n  function a(u) {\n    return function(l) {\n      return c([u, l]);\n    };\n  }\n  function c(u) {\n    if (r)\n      throw new TypeError(\"Generator is already executing.\");\n    for (; o && (o = 0, u[0] && (n = 0)), n; )\n      try {\n        if (r = 1, s && (i = u[0] & 2 ? s.return : u[0] ? s.throw || ((i = s.return) && i.call(s), 0) : s.next) && !(i = i.call(s, u[1])).done)\n          return i;\n        switch (s = 0, i && (u = [u[0] & 2, i.value]), u[0]) {\n          case 0:\n          case 1:\n            i = u;\n            break;\n          case 4:\n            return n.label++, { value: u[1], done: !1 };\n          case 5:\n            n.label++, s = u[1], u = [0];\n            continue;\n          case 7:\n            u = n.ops.pop(), n.trys.pop();\n            continue;\n          default:\n            if (i = n.trys, !(i = i.length > 0 && i[i.length - 1]) && (u[0] === 6 || u[0] === 2)) {\n              n = 0;\n              continue;\n            }\n            if (u[0] === 3 && (!i || u[1] > i[0] && u[1] < i[3])) {\n              n.label = u[1];\n              break;\n            }\n            if (u[0] === 6 && n.label < i[1]) {\n              n.label = i[1], i = u;\n              break;\n            }\n            if (i && n.label < i[2]) {\n              n.label = i[2], n.ops.push(u);\n              break;\n            }\n            i[2] && n.ops.pop(), n.trys.pop();\n            continue;\n        }\n        u = t.call(e, n);\n      } catch (l) {\n        u = [6, l], s = 0;\n      } finally {\n        r = i = 0;\n      }\n    if (u[0] & 5)\n      throw u[1];\n    return { value: u[0] ? u[1] : void 0, done: !0 };\n  }\n}\nfunction Tt(e) {\n  var t = typeof Symbol == \"function\" && Symbol.iterator, n = t && e[t], r = 0;\n  if (n)\n    return n.call(e);\n  if (e && typeof e.length == \"number\")\n    return {\n      next: function() {\n        return e && r >= e.length && (e = void 0), { value: e && e[r++], done: !e };\n      }\n    };\n  throw new TypeError(t ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\nfunction Qt(e, t) {\n  var n = typeof Symbol == \"function\" && e[Symbol.iterator];\n  if (!n)\n    return e;\n  var r = n.call(e), s, i = [], o;\n  try {\n    for (; (t === void 0 || t-- > 0) && !(s = r.next()).done; )\n      i.push(s.value);\n  } catch (a) {\n    o = { error: a };\n  } finally {\n    try {\n      s && !s.done && (n = r.return) && n.call(r);\n    } finally {\n      if (o)\n        throw o.error;\n    }\n  }\n  return i;\n}\nfunction te(e, t, n) {\n  if (n || arguments.length === 2)\n    for (var r = 0, s = t.length, i; r < s; r++)\n      (i || !(r in t)) && (i || (i = Array.prototype.slice.call(t, 0, r)), i[r] = t[r]);\n  return e.concat(i || Array.prototype.slice.call(t));\n}\nfunction pt(e) {\n  return this instanceof pt ? (this.v = e, this) : new pt(e);\n}\nfunction zi(e, t, n) {\n  if (!Symbol.asyncIterator)\n    throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n  var r = n.apply(e, t || []), s, i = [];\n  return s = Object.create((typeof AsyncIterator == \"function\" ? AsyncIterator : Object).prototype), a(\"next\"), a(\"throw\"), a(\"return\", o), s[Symbol.asyncIterator] = function() {\n    return this;\n  }, s;\n  function o(d) {\n    return function(g) {\n      return Promise.resolve(g).then(d, h);\n    };\n  }\n  function a(d, g) {\n    r[d] && (s[d] = function(m) {\n      return new Promise(function(y, w) {\n        i.push([d, m, y, w]) > 1 || c(d, m);\n      });\n    }, g && (s[d] = g(s[d])));\n  }\n  function c(d, g) {\n    try {\n      u(r[d](g));\n    } catch (m) {\n      p(i[0][3], m);\n    }\n  }\n  function u(d) {\n    d.value instanceof pt ? Promise.resolve(d.value.v).then(l, h) : p(i[0][2], d);\n  }\n  function l(d) {\n    c(\"next\", d);\n  }\n  function h(d) {\n    c(\"throw\", d);\n  }\n  function p(d, g) {\n    d(g), i.shift(), i.length && c(i[0][0], i[0][1]);\n  }\n}\nfunction ji(e) {\n  if (!Symbol.asyncIterator)\n    throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n  var t = e[Symbol.asyncIterator], n;\n  return t ? t.call(e) : (e = typeof Tt == \"function\" ? Tt(e) : e[Symbol.iterator](), n = {}, r(\"next\"), r(\"throw\"), r(\"return\"), n[Symbol.asyncIterator] = function() {\n    return this;\n  }, n);\n  function r(i) {\n    n[i] = e[i] && function(o) {\n      return new Promise(function(a, c) {\n        o = e[i](o), s(a, c, o.done, o.value);\n      });\n    };\n  }\n  function s(i, o, a, c) {\n    Promise.resolve(c).then(function(u) {\n      i({ value: u, done: a });\n    }, o);\n  }\n}\nfunction P(e) {\n  return typeof e == \"function\";\n}\nfunction Bi(e) {\n  var t = function(r) {\n    Error.call(r), r.stack = new Error().stack;\n  }, n = e(t);\n  return n.prototype = Object.create(Error.prototype), n.prototype.constructor = n, n;\n}\nvar Ae = Bi(function(e) {\n  return function(n) {\n    e(this), this.message = n ? n.length + ` errors occurred during unsubscription:\n` + n.map(function(r, s) {\n      return s + 1 + \") \" + r.toString();\n    }).join(`\n  `) : \"\", this.name = \"UnsubscriptionError\", this.errors = n;\n  };\n});\nfunction wn(e, t) {\n  if (e) {\n    var n = e.indexOf(t);\n    0 <= n && e.splice(n, 1);\n  }\n}\nvar tn = function() {\n  function e(t) {\n    this.initialTeardown = t, this.closed = !1, this._parentage = null, this._finalizers = null;\n  }\n  return e.prototype.unsubscribe = function() {\n    var t, n, r, s, i;\n    if (!this.closed) {\n      this.closed = !0;\n      var o = this._parentage;\n      if (o)\n        if (this._parentage = null, Array.isArray(o))\n          try {\n            for (var a = Tt(o), c = a.next(); !c.done; c = a.next()) {\n              var u = c.value;\n              u.remove(this);\n            }\n          } catch (m) {\n            t = { error: m };\n          } finally {\n            try {\n              c && !c.done && (n = a.return) && n.call(a);\n            } finally {\n              if (t)\n                throw t.error;\n            }\n          }\n        else\n          o.remove(this);\n      var l = this.initialTeardown;\n      if (P(l))\n        try {\n          l();\n        } catch (m) {\n          i = m instanceof Ae ? m.errors : [m];\n        }\n      var h = this._finalizers;\n      if (h) {\n        this._finalizers = null;\n        try {\n          for (var p = Tt(h), d = p.next(); !d.done; d = p.next()) {\n            var g = d.value;\n            try {\n              bn(g);\n            } catch (m) {\n              i = i ?? [], m instanceof Ae ? i = te(te([], Qt(i)), Qt(m.errors)) : i.push(m);\n            }\n          }\n        } catch (m) {\n          r = { error: m };\n        } finally {\n          try {\n            d && !d.done && (s = p.return) && s.call(p);\n          } finally {\n            if (r)\n              throw r.error;\n          }\n        }\n      }\n      if (i)\n        throw new Ae(i);\n    }\n  }, e.prototype.add = function(t) {\n    var n;\n    if (t && t !== this)\n      if (this.closed)\n        bn(t);\n      else {\n        if (t instanceof e) {\n          if (t.closed || t._hasParent(this))\n            return;\n          t._addParent(this);\n        }\n        (this._finalizers = (n = this._finalizers) !== null && n !== void 0 ? n : []).push(t);\n      }\n  }, e.prototype._hasParent = function(t) {\n    var n = this._parentage;\n    return n === t || Array.isArray(n) && n.includes(t);\n  }, e.prototype._addParent = function(t) {\n    var n = this._parentage;\n    this._parentage = Array.isArray(n) ? (n.push(t), n) : n ? [n, t] : t;\n  }, e.prototype._removeParent = function(t) {\n    var n = this._parentage;\n    n === t ? this._parentage = null : Array.isArray(n) && wn(n, t);\n  }, e.prototype.remove = function(t) {\n    var n = this._finalizers;\n    n && wn(n, t), t instanceof e && t._removeParent(this);\n  }, e.EMPTY = function() {\n    var t = new e();\n    return t.closed = !0, t;\n  }(), e;\n}();\ntn.EMPTY;\nfunction dr(e) {\n  return e instanceof tn || e && \"closed\" in e && P(e.remove) && P(e.add) && P(e.unsubscribe);\n}\nfunction bn(e) {\n  P(e) ? e() : e.unsubscribe();\n}\nvar pr = {\n  onUnhandledError: null,\n  onStoppedNotification: null,\n  Promise: void 0,\n  useDeprecatedSynchronousErrorHandling: !1,\n  useDeprecatedNextContext: !1\n}, Ce = {\n  setTimeout: function(e, t) {\n    for (var n = [], r = 2; r < arguments.length; r++)\n      n[r - 2] = arguments[r];\n    var s = Ce.delegate;\n    return s?.setTimeout ? s.setTimeout.apply(s, te([e, t], Qt(n))) : setTimeout.apply(void 0, te([e, t], Qt(n)));\n  },\n  clearTimeout: function(e) {\n    var t = Ce.delegate;\n    return (t?.clearTimeout || clearTimeout)(e);\n  },\n  delegate: void 0\n};\nfunction mr(e) {\n  Ce.setTimeout(function() {\n    throw e;\n  });\n}\nfunction Fe() {\n}\nfunction qi(e) {\n  e();\n}\nvar en = function(e) {\n  Qe(t, e);\n  function t(n) {\n    var r = e.call(this) || this;\n    return r.isStopped = !1, n ? (r.destination = n, dr(n) && n.add(r)) : r.destination = Gi, r;\n  }\n  return t.create = function(n, r, s) {\n    return new ke(n, r, s);\n  }, t.prototype.next = function(n) {\n    this.isStopped || this._next(n);\n  }, t.prototype.error = function(n) {\n    this.isStopped || (this.isStopped = !0, this._error(n));\n  }, t.prototype.complete = function() {\n    this.isStopped || (this.isStopped = !0, this._complete());\n  }, t.prototype.unsubscribe = function() {\n    this.closed || (this.isStopped = !0, e.prototype.unsubscribe.call(this), this.destination = null);\n  }, t.prototype._next = function(n) {\n    this.destination.next(n);\n  }, t.prototype._error = function(n) {\n    try {\n      this.destination.error(n);\n    } finally {\n      this.unsubscribe();\n    }\n  }, t.prototype._complete = function() {\n    try {\n      this.destination.complete();\n    } finally {\n      this.unsubscribe();\n    }\n  }, t;\n}(tn), Wi = Function.prototype.bind;\nfunction xe(e, t) {\n  return Wi.call(e, t);\n}\nvar Hi = function() {\n  function e(t) {\n    this.partialObserver = t;\n  }\n  return e.prototype.next = function(t) {\n    var n = this.partialObserver;\n    if (n.next)\n      try {\n        n.next(t);\n      } catch (r) {\n        Nt(r);\n      }\n  }, e.prototype.error = function(t) {\n    var n = this.partialObserver;\n    if (n.error)\n      try {\n        n.error(t);\n      } catch (r) {\n        Nt(r);\n      }\n    else\n      Nt(t);\n  }, e.prototype.complete = function() {\n    var t = this.partialObserver;\n    if (t.complete)\n      try {\n        t.complete();\n      } catch (n) {\n        Nt(n);\n      }\n  }, e;\n}(), ke = function(e) {\n  Qe(t, e);\n  function t(n, r, s) {\n    var i = e.call(this) || this, o;\n    if (P(n) || !n)\n      o = {\n        next: n ?? void 0,\n        error: r ?? void 0,\n        complete: s ?? void 0\n      };\n    else {\n      var a;\n      i && pr.useDeprecatedNextContext ? (a = Object.create(n), a.unsubscribe = function() {\n        return i.unsubscribe();\n      }, o = {\n        next: n.next && xe(n.next, a),\n        error: n.error && xe(n.error, a),\n        complete: n.complete && xe(n.complete, a)\n      }) : o = n;\n    }\n    return i.destination = new Hi(o), i;\n  }\n  return t;\n}(en);\nfunction Nt(e) {\n  mr(e);\n}\nfunction Vi(e) {\n  throw e;\n}\nvar Gi = {\n  closed: !0,\n  next: Fe,\n  error: Vi,\n  complete: Fe\n}, nn = function() {\n  return typeof Symbol == \"function\" && Symbol.observable || \"@@observable\";\n}();\nfunction Xi(e) {\n  return e;\n}\nfunction Zi() {\n  for (var e = [], t = 0; t < arguments.length; t++)\n    e[t] = arguments[t];\n  return gr(e);\n}\nfunction gr(e) {\n  return e.length === 0 ? Xi : e.length === 1 ? e[0] : function(n) {\n    return e.reduce(function(r, s) {\n      return s(r);\n    }, n);\n  };\n}\nvar st = function() {\n  function e(t) {\n    t && (this._subscribe = t);\n  }\n  return e.prototype.lift = function(t) {\n    var n = new e();\n    return n.source = this, n.operator = t, n;\n  }, e.prototype.subscribe = function(t, n, r) {\n    var s = this, i = Yi(t) ? t : new ke(t, n, r);\n    return qi(function() {\n      var o = s, a = o.operator, c = o.source;\n      i.add(a ? a.call(i, c) : c ? s._subscribe(i) : s._trySubscribe(i));\n    }), i;\n  }, e.prototype._trySubscribe = function(t) {\n    try {\n      return this._subscribe(t);\n    } catch (n) {\n      t.error(n);\n    }\n  }, e.prototype.forEach = function(t, n) {\n    var r = this;\n    return n = Sn(n), new n(function(s, i) {\n      var o = new ke({\n        next: function(a) {\n          try {\n            t(a);\n          } catch (c) {\n            i(c), o.unsubscribe();\n          }\n        },\n        error: i,\n        complete: s\n      });\n      r.subscribe(o);\n    });\n  }, e.prototype._subscribe = function(t) {\n    var n;\n    return (n = this.source) === null || n === void 0 ? void 0 : n.subscribe(t);\n  }, e.prototype[nn] = function() {\n    return this;\n  }, e.prototype.pipe = function() {\n    for (var t = [], n = 0; n < arguments.length; n++)\n      t[n] = arguments[n];\n    return gr(t)(this);\n  }, e.prototype.toPromise = function(t) {\n    var n = this;\n    return t = Sn(t), new t(function(r, s) {\n      var i;\n      n.subscribe(function(o) {\n        return i = o;\n      }, function(o) {\n        return s(o);\n      }, function() {\n        return r(i);\n      });\n    });\n  }, e.create = function(t) {\n    return new e(t);\n  }, e;\n}();\nfunction Sn(e) {\n  var t;\n  return (t = e ?? pr.Promise) !== null && t !== void 0 ? t : Promise;\n}\nfunction Ji(e) {\n  return e && P(e.next) && P(e.error) && P(e.complete);\n}\nfunction Yi(e) {\n  return e && e instanceof en || Ji(e) && dr(e);\n}\nfunction Ki(e) {\n  return P(e?.lift);\n}\nfunction rn(e) {\n  return function(t) {\n    if (Ki(t))\n      return t.lift(function(n) {\n        try {\n          return e(n, this);\n        } catch (r) {\n          this.error(r);\n        }\n      });\n    throw new TypeError(\"Unable to lift unknown Observable type\");\n  };\n}\nfunction ee(e, t, n, r, s) {\n  return new Qi(e, t, n, r, s);\n}\nvar Qi = function(e) {\n  Qe(t, e);\n  function t(n, r, s, i, o, a) {\n    var c = e.call(this, n) || this;\n    return c.onFinalize = o, c.shouldUnsubscribe = a, c._next = r ? function(u) {\n      try {\n        r(u);\n      } catch (l) {\n        n.error(l);\n      }\n    } : e.prototype._next, c._error = i ? function(u) {\n      try {\n        i(u);\n      } catch (l) {\n        n.error(l);\n      } finally {\n        this.unsubscribe();\n      }\n    } : e.prototype._error, c._complete = s ? function() {\n      try {\n        s();\n      } catch (u) {\n        n.error(u);\n      } finally {\n        this.unsubscribe();\n      }\n    } : e.prototype._complete, c;\n  }\n  return t.prototype.unsubscribe = function() {\n    var n;\n    if (!this.shouldUnsubscribe || this.shouldUnsubscribe()) {\n      var r = this.closed;\n      e.prototype.unsubscribe.call(this), !r && ((n = this.onFinalize) === null || n === void 0 || n.call(this));\n    }\n  }, t;\n}(en), to = function(e) {\n  return e && typeof e.length == \"number\" && typeof e != \"function\";\n};\nfunction eo(e) {\n  return P(e?.then);\n}\nfunction no(e) {\n  return P(e[nn]);\n}\nfunction ro(e) {\n  return Symbol.asyncIterator && P(e?.[Symbol.asyncIterator]);\n}\nfunction so(e) {\n  return new TypeError(\"You provided \" + (e !== null && typeof e == \"object\" ? \"an invalid object\" : \"'\" + e + \"'\") + \" where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.\");\n}\nfunction io() {\n  return typeof Symbol != \"function\" || !Symbol.iterator ? \"@@iterator\" : Symbol.iterator;\n}\nvar oo = io();\nfunction ao(e) {\n  return P(e?.[oo]);\n}\nfunction co(e) {\n  return zi(this, arguments, function() {\n    var n, r, s, i;\n    return fr(this, function(o) {\n      switch (o.label) {\n        case 0:\n          n = e.getReader(), o.label = 1;\n        case 1:\n          o.trys.push([1, , 9, 10]), o.label = 2;\n        case 2:\n          return [4, pt(n.read())];\n        case 3:\n          return r = o.sent(), s = r.value, i = r.done, i ? [4, pt(void 0)] : [3, 5];\n        case 4:\n          return [2, o.sent()];\n        case 5:\n          return [4, pt(s)];\n        case 6:\n          return [4, o.sent()];\n        case 7:\n          return o.sent(), [3, 2];\n        case 8:\n          return [3, 10];\n        case 9:\n          return n.releaseLock(), [7];\n        case 10:\n          return [2];\n      }\n    });\n  });\n}\nfunction uo(e) {\n  return P(e?.getReader);\n}\nfunction lo(e) {\n  if (e instanceof st)\n    return e;\n  if (e != null) {\n    if (no(e))\n      return ho(e);\n    if (to(e))\n      return fo(e);\n    if (eo(e))\n      return po(e);\n    if (ro(e))\n      return yr(e);\n    if (ao(e))\n      return mo(e);\n    if (uo(e))\n      return go(e);\n  }\n  throw so(e);\n}\nfunction ho(e) {\n  return new st(function(t) {\n    var n = e[nn]();\n    if (P(n.subscribe))\n      return n.subscribe(t);\n    throw new TypeError(\"Provided object does not correctly implement Symbol.observable\");\n  });\n}\nfunction fo(e) {\n  return new st(function(t) {\n    for (var n = 0; n < e.length && !t.closed; n++)\n      t.next(e[n]);\n    t.complete();\n  });\n}\nfunction po(e) {\n  return new st(function(t) {\n    e.then(function(n) {\n      t.closed || (t.next(n), t.complete());\n    }, function(n) {\n      return t.error(n);\n    }).then(null, mr);\n  });\n}\nfunction mo(e) {\n  return new st(function(t) {\n    var n, r;\n    try {\n      for (var s = Tt(e), i = s.next(); !i.done; i = s.next()) {\n        var o = i.value;\n        if (t.next(o), t.closed)\n          return;\n      }\n    } catch (a) {\n      n = { error: a };\n    } finally {\n      try {\n        i && !i.done && (r = s.return) && r.call(s);\n      } finally {\n        if (n)\n          throw n.error;\n      }\n    }\n    t.complete();\n  });\n}\nfunction yr(e) {\n  return new st(function(t) {\n    yo(e, t).catch(function(n) {\n      return t.error(n);\n    });\n  });\n}\nfunction go(e) {\n  return yr(co(e));\n}\nfunction yo(e, t) {\n  var n, r, s, i;\n  return Ui(this, void 0, void 0, function() {\n    var o, a;\n    return fr(this, function(c) {\n      switch (c.label) {\n        case 0:\n          c.trys.push([0, 5, 6, 11]), n = ji(e), c.label = 1;\n        case 1:\n          return [4, n.next()];\n        case 2:\n          if (r = c.sent(), !!r.done)\n            return [3, 4];\n          if (o = r.value, t.next(o), t.closed)\n            return [2];\n          c.label = 3;\n        case 3:\n          return [3, 1];\n        case 4:\n          return [3, 11];\n        case 5:\n          return a = c.sent(), s = { error: a }, [3, 11];\n        case 6:\n          return c.trys.push([6, , 9, 10]), r && !r.done && (i = n.return) ? [4, i.call(n)] : [3, 8];\n        case 7:\n          c.sent(), c.label = 8;\n        case 8:\n          return [3, 10];\n        case 9:\n          if (s)\n            throw s.error;\n          return [7];\n        case 10:\n          return [7];\n        case 11:\n          return t.complete(), [2];\n      }\n    });\n  });\n}\nfunction wr(e, t) {\n  return rn(function(n, r) {\n    var s = 0;\n    n.subscribe(ee(r, function(i) {\n      r.next(e.call(t, i, s++));\n    }));\n  });\n}\nvar wo = new st(Fe);\nfunction bo(e, t) {\n  return rn(function(n, r) {\n    var s = 0;\n    n.subscribe(ee(r, function(i) {\n      return e.call(t, i, s++) && r.next(i);\n    }));\n  });\n}\nfunction So(e, t) {\n  return rn(function(n, r) {\n    var s = null, i = 0, o = !1, a = function() {\n      return o && !s && r.complete();\n    };\n    n.subscribe(ee(r, function(c) {\n      s?.unsubscribe();\n      var u = 0, l = i++;\n      lo(e(c, l)).subscribe(s = ee(r, function(h) {\n        return r.next(t ? t(c, h, l, u++) : h);\n      }, function() {\n        s = null, a();\n      }));\n    }, function() {\n      o = !0, a();\n    }));\n  });\n}\nfunction ml() {\n  return Zi(\n    bo((e) => !(e % 2)),\n    wr((e) => e + e)\n  );\n}\nfunction gl(e) {\n  return (t) => new st((n) => {\n    const r = /* @__PURE__ */ new Set();\n    let s = !1;\n    const i = t.subscribe({\n      next(o) {\n        const a = setTimeout(() => {\n          n.next(o), r.delete(a), s && r.size === 0 && n.complete();\n        }, e);\n        r.add(a);\n      },\n      error(o) {\n        n.error(o);\n      },\n      complete() {\n        s = !0, r.size === 0 && n.complete();\n      }\n    });\n    return () => {\n      i.unsubscribe();\n      for (const o of r)\n        clearTimeout(o);\n    };\n  });\n}\nfunction yl(e, t) {\n  return e.pipe(So((n) => n ? t : wo));\n}\nfunction wl(e, t) {\n  return e.pipe(wr((n) => n[t]));\n}\nfunction bl(e, t) {\n  return e.name == t.name || e.constructor.name == t.name || e instanceof t;\n}\nclass Sl extends Error {\n  name;\n  response;\n  statusCode;\n  constructor(t, n) {\n    super(t), this.name = \"HttpError\", this.response = n, this.statusCode = n.status;\n  }\n  toJSON() {\n    return {\n      name: this.name,\n      message: this.message,\n      stack: this.stack,\n      response: this.response,\n      statusCode: this.statusCode\n    };\n  }\n}\nlet Ot;\nfunction Al(e) {\n  Ot = e, e(), Ot = null;\n}\nclass Ao {\n  subscribers = /* @__PURE__ */ new Set();\n  add() {\n    Ot && !this.subscribers.has(Ot) && this.subscribers.add(Ot);\n  }\n  notify(t) {\n    this.subscribers.forEach((n) => n(t));\n  }\n}\nconst An = /* @__PURE__ */ new WeakMap();\nfunction qt(e, t) {\n  let n = An.get(e);\n  n || (n = /* @__PURE__ */ new Map(), An.set(e, n));\n  let r = n.get(t);\n  return r || (r = new Ao(), n.set(t, r)), r;\n}\nfunction xo(e, t = ne, n) {\n  if (!Array.isArray(e))\n    return;\n  const r = n?.path || \"\", s = n?.callback, i = Array.prototype, o = Object.create(i);\n  [\"push\", \"pop\", \"shift\", \"unshift\", \"splice\", \"sort\", \"reverse\"].forEach(\n    (a) => {\n      o[a] = function(...c) {\n        const u = this.slice();\n        [\"push\", \"unshift\", \"splice\"].includes(a) && (a === \"splice\" ? c.slice(2) : c).forEach(\n          (p, d) => {\n            U(p) && (c[d] = t(p, {\n              deep: !0,\n              path: r,\n              callback: s\n            }));\n          }\n        ), i[a].apply(this, c);\n        const l = this.slice();\n        return s && s({ path: r, newValue: l, oldValue: u }), l;\n      };\n    }\n  ), Object.setPrototypeOf(e, o), e.forEach((a, c) => {\n    U(a) && (e[c] = t(a, { deep: !0, path: r, callback: s }));\n  });\n}\nfunction ne(e, t) {\n  const n = typeof t?.deep == \"boolean\" ? t?.deep : !0, r = t?.path || \"\", s = t?.callback;\n  return Object.keys(e).forEach((i) => {\n    const o = qt(e, i);\n    let a = e[i];\n    const c = r ? `${r}.${String(i)}` : String(i);\n    Object.defineProperty(e, i, {\n      configurable: !0,\n      // 是否可删除、可配置\n      enumerable: !0,\n      // 是否可枚举\n      // 数据描述符\n      // value : 默认为 undefined\n      // writable : 是否可读写\n      // 存取描述符\n      get() {\n        return n && U(a) && (Array.isArray(a) ? xo(a, ne, {\n          callback: (u) => {\n            o.notify(u), s && s(u);\n          },\n          path: c\n        }) : ne(a, { deep: !0, path: c })), o.add(), a;\n      },\n      set(u) {\n        if (a !== u) {\n          const l = a;\n          a = u;\n          const h = { path: c, newValue: u, oldValue: l };\n          o.notify(h), s && s(h);\n        }\n      }\n    });\n  }), e;\n}\nfunction xl(e) {\n  return e.value ? e.value : typeof e == \"function\" ? e() : e;\n}\nfunction _l(e, t) {\n  return ne({ value: e }, t);\n}\nconst _o = br;\nfunction br(e, t) {\n  if (!U(e))\n    return e;\n  const n = typeof t?.deep == \"boolean\" ? t?.deep : !0, r = t?.path || \"\", s = t?.callback, i = {\n    // 拦截对象属性的读取\n    // target 目标对象、key 键值、receiver 当前proxy实例\n    get(a, c, u) {\n      const l = r ? `${r}.${String(c)}` : String(c);\n      let h = Reflect.get(a, c, u);\n      const p = qt(a, c);\n      if (n && U(h) && !(\"isYZProxy\" in h)) {\n        const d = br(h, {\n          deep: !0,\n          path: l,\n          callback: s\n        });\n        Array.isArray(h) && (d.YZProxyArrayDep = p), h = d;\n      }\n      return p.add(), h;\n    },\n    // 拦截对象属性的设置\n    // target 目标对象、key 键值、value 值、receiver 当前proxy实例\n    set(a, c, u, l) {\n      const h = Reflect.get(a, c, l), p = Reflect.set(a, c, u, l);\n      if (c == \"YZProxyArrayDep\")\n        return p;\n      if (h !== u) {\n        let d;\n        Array.isArray(a) ? d = a.YZProxyArrayDep : d = qt(a, c);\n        const m = { path: r ? `${r}.${String(c)}` : String(c), newValue: u, oldValue: h };\n        d.notify(m), s && s(m);\n      }\n      return p;\n    },\n    // 拦截 `delete proxy[key]` 的操作，返回一个布尔值\n    deleteProperty(a, c) {\n      if (!(c in a))\n        return !1;\n      let l = typeof c == \"symbol\" ? void 0 : a[c];\n      U(l) && (l = Array.isArray(l) ? [...l] : { ...l });\n      const h = Reflect.deleteProperty(a, c);\n      if (h) {\n        let p;\n        Array.isArray(a) ? p = a.YZProxyArrayDep : p = qt(a, c);\n        const g = { path: r ? `${r}.${String(c)}` : String(c), newValue: void 0, oldValue: l };\n        p.notify(g), s && s(g);\n      }\n      return h;\n    },\n    // 拦截 `key in proxy` 的操作，返回一个布尔值\n    has(a, c) {\n      return c === \"isYZProxy\" || c in a;\n    }\n    // 拦截 `Object.keys(proxy)`、`for...in` 等循环，返回一个数组\n    // ownKeys(target) {\n    //   return [];\n    // },\n    // 拦截 `Object.getOwnPropertyDescriptor(proxy, key)`，返回属性的描述对象\n    // getOwnPropertyDescriptor(target, key) {\n    //   return {};\n    // },\n    // 拦截 `Object.defineProperty(proxy, key, desc`，返回一个布尔值\n    // defineProperty(target, key, desc) {\n    //   return true;\n    // },\n    // 拦截 `Object.preventExtensions(proxy)`，返回一个布尔值\n    // preventExtensions(target) {\n    //   return true;\n    // },\n    // 拦截 `Object.getPrototypeOf(proxy)`，返回一个对象\n    // getPrototypeOf(target) {\n    //   return {};\n    // },\n    // 拦截 `Object.isExtensible(proxy)`，返回一个布尔值\n    // isExtensible(target) {\n    //   return true;\n    // },\n    // 拦截 `Object.setPrototypeOf(proxy, proto)`，返回一个布尔值\n    // setPrototypeOf(target, proto) {\n    //   return true;\n    // },\n    // 拦截 Proxy 实例作为函数调用的操作\n    // apply(target, thisArg, args) {\n    //   return target.apply(thisArg, args);\n    // },\n    // 拦截 Proxy 实例作为构造函数调用的操作\n    // construct(target, args) {\n    //   return {};\n    // }\n  };\n  return new Proxy(e, i);\n}\nclass Ol {\n  events;\n  constructor() {\n    this.events = {};\n  }\n  isEmpty(t) {\n    return this.events[t] == null || this.events[t].length == 0;\n  }\n  has(t, n) {\n    return this.events[t] !== void 0 && this.events[t].indexOf(n) !== -1;\n  }\n  prependListener(t, n, r) {\n    return this.events[t] || (this.events[t] = []), this.events[t].unshift(\n      r ? n.bind(r) : n\n    ), this;\n  }\n  addListener(t, n, r) {\n    return this.events[t] || (this.events[t] = []), this.events[t].push(\n      r ? n.bind(r) : n\n    ), this;\n  }\n  on(t, n, r) {\n    return this.addListener(t, n, r), this;\n  }\n  removeListener(t, n) {\n    return this.events[t] && (this.events[t] = this.events[t].filter((r) => r !== n)), this;\n  }\n  off(t, n) {\n    return this.removeListener(t, n), this;\n  }\n  removeAllListeners(t) {\n    return t ? this.events[t] = [] : this.events = {}, this;\n  }\n  // 注意：handler 自己绑定 this\n  emit(t, ...n) {\n    return this.events[t] && this.events[t].slice(0).forEach((s) => {\n      s(...n);\n    }), this;\n  }\n  once(t, n, r) {\n    const s = (...i) => {\n      r ? n.apply(r, i) : n(...i), this.off(t, s);\n    };\n    return this.on(t, s), this;\n  }\n}\nfunction Tl() {\n  const e = /* @__PURE__ */ new Set();\n  return {\n    subscribe(t) {\n      return e.add(t), () => {\n        e.delete(t);\n      };\n    },\n    emit(...t) {\n      for (const n of e)\n        n(...t);\n    },\n    clear() {\n      e.clear();\n    }\n  };\n}\nconst re = 3.141592653589793 * 3e3 / 180, F = 3.141592653589793, se = 6378245, ie = 0.006693421622965943;\nfunction Sr(e, t) {\n  return e < 72.004 || e > 137.8347 || t < 0.8293 || t > 55.8271 || !1;\n}\nfunction Ar(e, t) {\n  let n = -100 + 2 * e + 3 * t + 0.2 * t * t + 0.1 * e * t + 0.2 * Math.sqrt(Math.abs(e));\n  return n += (20 * Math.sin(6 * e * F) + 20 * Math.sin(2 * e * F)) * 2 / 3, n += (20 * Math.sin(t * F) + 40 * Math.sin(t / 3 * F)) * 2 / 3, n += (160 * Math.sin(t / 12 * F) + 320 * Math.sin(t * F / 30)) * 2 / 3, n;\n}\nfunction xr(e, t) {\n  let n = 300 + e + 2 * t + 0.1 * e * e + 0.1 * e * t + 0.1 * Math.sqrt(Math.abs(e));\n  return n += (20 * Math.sin(6 * e * F) + 20 * Math.sin(2 * e * F)) * 2 / 3, n += (20 * Math.sin(e * F) + 40 * Math.sin(e / 3 * F)) * 2 / 3, n += (150 * Math.sin(e / 12 * F) + 300 * Math.sin(e / 30 * F)) * 2 / 3, n;\n}\nfunction Oo(e, t) {\n  if (Sr(e, t))\n    return [e, t];\n  {\n    let n = xr(e - 105, t - 35), r = Ar(e - 105, t - 35);\n    const s = t / 180 * F;\n    let i = Math.sin(s);\n    i = 1 - ie * i * i;\n    const o = Math.sqrt(i);\n    n = n * 180 / (se / o * Math.cos(s) * F), r = r * 180 / (se * (1 - ie) / (i * o) * F);\n    const a = t + r;\n    return [e + n, a];\n  }\n}\nfunction To(e, t) {\n  if (Sr(e, t))\n    return [e, t];\n  {\n    let n = Ar(e - 105, t - 35), r = xr(e - 105, t - 35);\n    const s = t / 180 * F;\n    let i = Math.sin(s);\n    i = 1 - ie * i * i;\n    const o = Math.sqrt(i);\n    n = n * 180 / (se * (1 - ie) / (i * o) * F), r = r * 180 / (se / o * Math.cos(s) * F);\n    const a = t + n, c = e + r;\n    return [e * 2 - c, t * 2 - a];\n  }\n}\nfunction vo(e, t) {\n  const n = Math.sqrt(e * e + t * t) + 2e-5 * Math.sin(t * re), r = Math.atan2(t, e) + 3e-7 * Math.cos(e * re), s = n * Math.cos(r) + 65e-4, i = n * Math.sin(r) + 6e-3;\n  return [s, i];\n}\nfunction Ro(e, t) {\n  const n = e - 65e-4, r = t - 6e-3, s = Math.sqrt(n * n + r * r) - 2e-5 * Math.sin(r * re), i = Math.atan2(r, n) - 3e-6 * Math.cos(r * re), o = s * Math.cos(i), a = s * Math.sin(i);\n  return [o, a];\n}\nfunction vl(e, t) {\n  const n = Oo(e, t);\n  return vo(n[0], n[1]);\n}\nfunction Rl(e, t) {\n  const n = Ro(e, t);\n  return To(n[0], n[1]);\n}\nfunction El(e) {\n  const t = /* @__PURE__ */ new WeakMap();\n  return new Proxy(e, {\n    construct(n, r) {\n      return t.has(n) || t.set(n, new n(...r)), t.get(n);\n    }\n  });\n}\nfunction Cl(e) {\n  return class extends e {\n    constructor(...t) {\n      super(...t), this.currentUser = null;\n    }\n    login(t) {\n      E(`User ${t.name} logged in with role ${t.role}`), this.currentUser = t;\n    }\n    logout() {\n      E(`User ${this.currentUser.name} logged out`), this.currentUser = null;\n    }\n  };\n}\nfunction Fl(e) {\n  return function(t, n, r) {\n    const s = r.value;\n    return r.value = function(...i) {\n      if (!this.currentUser)\n        throw new Error(\"Authentication required\");\n      if (this.currentUser.role !== e)\n        throw new Error(`Requires ${e} role`);\n      return s.apply(this, i);\n    }, r;\n  };\n}\nfunction kl(e) {\n  return function(t, n) {\n    let r;\n    Object.defineProperty(t, n, {\n      get() {\n        return r;\n      },\n      set(s) {\n        if (s.length < e)\n          throw new Error(`${String(n)} must be at least ${e} long`);\n        r = s;\n      }\n    });\n  };\n}\nfunction Pl(e) {\n  return function(t, n) {\n    let r;\n    Object.defineProperty(t, n, {\n      get() {\n        return r;\n      },\n      set(s) {\n        if (s.length < e)\n          throw new Error(`${String(n)} must be at most ${e} long`);\n        r = s;\n      }\n    });\n  };\n}\nfunction Dl(e) {\n  return function(t, n, r) {\n    const s = e || `${t.constructor.name}.${String(n)}`, i = r.value;\n    if (typeof i != \"function\")\n      throw new SyntaxError(\n        `@LogExecuteResultDecorator() can only be used on functions, not: ${s}`\n      );\n    return {\n      ...r,\n      value(...o) {\n        const a = i.apply(this, o);\n        return E(`${s} ( ${o} ) = ${a}`), a;\n      }\n    };\n  };\n}\nfunction Ml(e, t, n) {\n  const r = `${e.constructor.name}.${String(t)}`, s = n.value;\n  if (typeof s != \"function\")\n    throw new SyntaxError(\n      `@LogExecuteTimeDecorator can only be used on functions, not: ${r}`\n    );\n  let i = 0;\n  return {\n    ...n,\n    value(...o) {\n      const a = `${r}-${i++}`;\n      Kt.start(a);\n      try {\n        return s.apply(this, o);\n      } finally {\n        Kt.end(a);\n      }\n    }\n  };\n}\nfunction Ll(e, t, n) {\n  const r = `${e.constructor.name}.${String(t)}`, s = n.value;\n  if (typeof s != \"function\")\n    throw new SyntaxError(\n      `@ProfileDecorator can only be used on functions, not: ${r}`\n    );\n  return {\n    ...n,\n    value(...i) {\n      yn.start(r);\n      try {\n        return s.apply(this, i);\n      } finally {\n        yn.end(r);\n      }\n    }\n  };\n}\nfunction Il(e = 300, t) {\n  return function(n, r, s) {\n    const i = `${n.constructor.name}.${String(r)}`, o = s.value;\n    if (typeof o != \"function\")\n      throw new SyntaxError(\n        `@ThrottleDecorator() can only be used on functions, not: ${i}`\n      );\n    return {\n      ...s,\n      value(...a) {\n        le(this).get(`__@ThrottleDecorator_${i}__`, Hs(o, e, t)).apply(this, a);\n      }\n    };\n  };\n}\nfunction $l(e = 300, t = !1) {\n  return function(n, r, s) {\n    const i = `${n.constructor.name}.${String(r)}`, o = s.value;\n    if (typeof o != \"function\")\n      throw new SyntaxError(\n        `@DebounceDecorator() can only be used on functions, not: ${i}`\n      );\n    return {\n      ...s,\n      value(...a) {\n        le(this).get(\n          `__@DebounceDecorator_${i}__`,\n          Vs(o, e, { immediate: t })\n        ).apply(this, a);\n      }\n    };\n  };\n}\nfunction Nl(e = 3, t) {\n  return function(n, r, s) {\n    const i = `${n.constructor.name}.${String(r)}`, o = s.value;\n    if (typeof o != \"function\")\n      throw new SyntaxError(\n        `@RetryDecoratorDecorator() can only be used on functions, not: ${i}`\n      );\n    const a = Qn(o, e, t);\n    return {\n      ...s,\n      async value(...c) {\n        return await a.apply(this, c);\n      }\n    };\n  };\n}\nfunction Ul(e = 60) {\n  return function(t, n, r) {\n    const s = `${t.constructor.name}.${String(n)}`, i = r.value;\n    if (typeof i != \"function\")\n      throw new SyntaxError(\n        `@CacheDecorator() can only be used on functions, not: ${s}`\n      );\n    return {\n      ...r,\n      async value(...o) {\n        return await le(this).get(\n          `__@CacheDecorator_${s}__`,\n          tr(i, e)\n        ).apply(this, o);\n      }\n    };\n  };\n}\nfunction zl() {\n  return function(e, t, n) {\n    const r = `${e.constructor.name}.${String(t)}`, s = n.value;\n    if (typeof s != \"function\")\n      throw new SyntaxError(\n        `@MemorizeDecorator() can only be used on functions, not: ${r}`\n      );\n    return {\n      ...n,\n      async value(...i) {\n        return await le(this).get(\n          `__@MemorizeDecorator_${r}__`,\n          Js(s)\n        ).apply(this, i);\n      }\n    };\n  };\n}\nfunction jl(e, t, n) {\n  if (n)\n    return n.writable = !1, n;\n  let r;\n  Object.defineProperty(e, t, {\n    get() {\n      return r;\n    },\n    set(s) {\n      if (r === void 0)\n        r = s;\n      else\n        throw new Error(`${e}.${String(t)} is Readonly!`);\n    }\n  });\n}\nfunction Bl(e = !0) {\n  return (t, n, r) => {\n    if (r)\n      return r.configurable = e, r;\n    Object.defineProperty(t, n, {\n      configurable: e\n    });\n  };\n}\nfunction ql(e = !0) {\n  return (t, n, r) => {\n    if (r)\n      return r.enumerable = e, r;\n    Object.defineProperty(t, n, {\n      enumerable: e\n    });\n  };\n}\nconst Eo = {\n  11e4: \"北京市\",\n  110100: \"市辖区\",\n  110101: \"东城区\",\n  110102: \"西城区\",\n  110105: \"朝阳区\",\n  110106: \"丰台区\",\n  110107: \"石景山区\",\n  110108: \"海淀区\",\n  110109: \"门头沟区\",\n  110111: \"房山区\",\n  110112: \"通州区\",\n  110113: \"顺义区\",\n  110114: \"昌平区\",\n  110115: \"大兴区\",\n  110116: \"怀柔区\",\n  110117: \"平谷区\",\n  110118: \"密云区\",\n  110119: \"延庆区\",\n  12e4: \"天津市\",\n  120100: \"市辖区\",\n  120101: \"和平区\",\n  120102: \"河东区\",\n  120103: \"河西区\",\n  120104: \"南开区\",\n  120105: \"河北区\",\n  120106: \"红桥区\",\n  120110: \"东丽区\",\n  120111: \"西青区\",\n  120112: \"津南区\",\n  120113: \"北辰区\",\n  120114: \"武清区\",\n  120115: \"宝坻区\",\n  120116: \"滨海新区\",\n  120117: \"宁河区\",\n  120118: \"静海区\",\n  120119: \"蓟州区\",\n  13e4: \"河北省\",\n  130100: \"石家庄市\",\n  130101: \"市辖区\",\n  130102: \"长安区\",\n  130104: \"桥西区\",\n  130105: \"新华区\",\n  130107: \"井陉矿区\",\n  130108: \"裕华区\",\n  130109: \"藁城区\",\n  130110: \"鹿泉区\",\n  130111: \"栾城区\",\n  130121: \"井陉县\",\n  130123: \"正定县\",\n  130125: \"行唐县\",\n  130126: \"灵寿县\",\n  130127: \"高邑县\",\n  130128: \"深泽县\",\n  130129: \"赞皇县\",\n  130130: \"无极县\",\n  130131: \"平山县\",\n  130132: \"元氏县\",\n  130133: \"赵县\",\n  130183: \"晋州市\",\n  130184: \"新乐市\",\n  130200: \"唐山市\",\n  130201: \"市辖区\",\n  130202: \"路南区\",\n  130203: \"路北区\",\n  130204: \"古冶区\",\n  130205: \"开平区\",\n  130207: \"丰南区\",\n  130208: \"丰润区\",\n  130209: \"曹妃甸区\",\n  130223: \"滦县\",\n  130224: \"滦南县\",\n  130225: \"乐亭县\",\n  130227: \"迁西县\",\n  130229: \"玉田县\",\n  130281: \"遵化市\",\n  130283: \"迁安市\",\n  130300: \"秦皇岛市\",\n  130301: \"市辖区\",\n  130302: \"海港区\",\n  130303: \"山海关区\",\n  130304: \"北戴河区\",\n  130306: \"抚宁区\",\n  130321: \"青龙满族自治县\",\n  130322: \"昌黎县\",\n  130324: \"卢龙县\",\n  130400: \"邯郸市\",\n  130401: \"市辖区\",\n  130402: \"邯山区\",\n  130403: \"丛台区\",\n  130404: \"复兴区\",\n  130406: \"峰峰矿区\",\n  130421: \"邯郸县\",\n  130423: \"临漳县\",\n  130424: \"成安县\",\n  130425: \"大名县\",\n  130426: \"涉县\",\n  130427: \"磁县\",\n  130428: \"肥乡县\",\n  130429: \"永年县\",\n  130430: \"邱县\",\n  130431: \"鸡泽县\",\n  130432: \"广平县\",\n  130433: \"馆陶县\",\n  130434: \"魏县\",\n  130435: \"曲周县\",\n  130481: \"武安市\",\n  130500: \"邢台市\",\n  130501: \"市辖区\",\n  130502: \"桥东区\",\n  130503: \"桥西区\",\n  130521: \"邢台县\",\n  130522: \"临城县\",\n  130523: \"内丘县\",\n  130524: \"柏乡县\",\n  130525: \"隆尧县\",\n  130526: \"任县\",\n  130527: \"南和县\",\n  130528: \"宁晋县\",\n  130529: \"巨鹿县\",\n  130530: \"新河县\",\n  130531: \"广宗县\",\n  130532: \"平乡县\",\n  130533: \"威县\",\n  130534: \"清河县\",\n  130535: \"临西县\",\n  130581: \"南宫市\",\n  130582: \"沙河市\",\n  130600: \"保定市\",\n  130601: \"市辖区\",\n  130602: \"竞秀区\",\n  130606: \"莲池区\",\n  130607: \"满城区\",\n  130608: \"清苑区\",\n  130609: \"徐水区\",\n  130623: \"涞水县\",\n  130624: \"阜平县\",\n  130626: \"定兴县\",\n  130627: \"唐县\",\n  130628: \"高阳县\",\n  130629: \"容城县\",\n  130630: \"涞源县\",\n  130631: \"望都县\",\n  130632: \"安新县\",\n  130633: \"易县\",\n  130634: \"曲阳县\",\n  130635: \"蠡县\",\n  130636: \"顺平县\",\n  130637: \"博野县\",\n  130638: \"雄县\",\n  130681: \"涿州市\",\n  130683: \"安国市\",\n  130684: \"高碑店市\",\n  130700: \"张家口市\",\n  130701: \"市辖区\",\n  130702: \"桥东区\",\n  130703: \"桥西区\",\n  130705: \"宣化区\",\n  130706: \"下花园区\",\n  130708: \"万全区\",\n  130709: \"崇礼区\",\n  130722: \"张北县\",\n  130723: \"康保县\",\n  130724: \"沽源县\",\n  130725: \"尚义县\",\n  130726: \"蔚县\",\n  130727: \"阳原县\",\n  130728: \"怀安县\",\n  130730: \"怀来县\",\n  130731: \"涿鹿县\",\n  130732: \"赤城县\",\n  130800: \"承德市\",\n  130801: \"市辖区\",\n  130802: \"双桥区\",\n  130803: \"双滦区\",\n  130804: \"鹰手营子矿区\",\n  130821: \"承德县\",\n  130822: \"兴隆县\",\n  130823: \"平泉县\",\n  130824: \"滦平县\",\n  130825: \"隆化县\",\n  130826: \"丰宁满族自治县\",\n  130827: \"宽城满族自治县\",\n  130828: \"围场满族蒙古族自治县\",\n  130900: \"沧州市\",\n  130901: \"市辖区\",\n  130902: \"新华区\",\n  130903: \"运河区\",\n  130921: \"沧县\",\n  130922: \"青县\",\n  130923: \"东光县\",\n  130924: \"海兴县\",\n  130925: \"盐山县\",\n  130926: \"肃宁县\",\n  130927: \"南皮县\",\n  130928: \"吴桥县\",\n  130929: \"献县\",\n  130930: \"孟村回族自治县\",\n  130981: \"泊头市\",\n  130982: \"任丘市\",\n  130983: \"黄骅市\",\n  130984: \"河间市\",\n  131e3: \"廊坊市\",\n  131001: \"市辖区\",\n  131002: \"安次区\",\n  131003: \"广阳区\",\n  131022: \"固安县\",\n  131023: \"永清县\",\n  131024: \"香河县\",\n  131025: \"大城县\",\n  131026: \"文安县\",\n  131028: \"大厂回族自治县\",\n  131081: \"霸州市\",\n  131082: \"三河市\",\n  131100: \"衡水市\",\n  131101: \"市辖区\",\n  131102: \"桃城区\",\n  131103: \"冀州区\",\n  131121: \"枣强县\",\n  131122: \"武邑县\",\n  131123: \"武强县\",\n  131124: \"饶阳县\",\n  131125: \"安平县\",\n  131126: \"故城县\",\n  131127: \"景县\",\n  131128: \"阜城县\",\n  131182: \"深州市\",\n  139e3: \"省直辖县级行政区划\",\n  139001: \"定州市\",\n  139002: \"辛集市\",\n  14e4: \"山西省\",\n  140100: \"太原市\",\n  140101: \"市辖区\",\n  140105: \"小店区\",\n  140106: \"迎泽区\",\n  140107: \"杏花岭区\",\n  140108: \"尖草坪区\",\n  140109: \"万柏林区\",\n  140110: \"晋源区\",\n  140121: \"清徐县\",\n  140122: \"阳曲县\",\n  140123: \"娄烦县\",\n  140181: \"古交市\",\n  140200: \"大同市\",\n  140201: \"市辖区\",\n  140202: \"城区\",\n  140203: \"矿区\",\n  140211: \"南郊区\",\n  140212: \"新荣区\",\n  140221: \"阳高县\",\n  140222: \"天镇县\",\n  140223: \"广灵县\",\n  140224: \"灵丘县\",\n  140225: \"浑源县\",\n  140226: \"左云县\",\n  140227: \"大同县\",\n  140300: \"阳泉市\",\n  140301: \"市辖区\",\n  140302: \"城区\",\n  140303: \"矿区\",\n  140311: \"郊区\",\n  140321: \"平定县\",\n  140322: \"盂县\",\n  140400: \"长治市\",\n  140401: \"市辖区\",\n  140402: \"城区\",\n  140411: \"郊区\",\n  140421: \"长治县\",\n  140423: \"襄垣县\",\n  140424: \"屯留县\",\n  140425: \"平顺县\",\n  140426: \"黎城县\",\n  140427: \"壶关县\",\n  140428: \"长子县\",\n  140429: \"武乡县\",\n  140430: \"沁县\",\n  140431: \"沁源县\",\n  140481: \"潞城市\",\n  140500: \"晋城市\",\n  140501: \"市辖区\",\n  140502: \"城区\",\n  140521: \"沁水县\",\n  140522: \"阳城县\",\n  140524: \"陵川县\",\n  140525: \"泽州县\",\n  140581: \"高平市\",\n  140600: \"朔州市\",\n  140601: \"市辖区\",\n  140602: \"朔城区\",\n  140603: \"平鲁区\",\n  140621: \"山阴县\",\n  140622: \"应县\",\n  140623: \"右玉县\",\n  140624: \"怀仁县\",\n  140700: \"晋中市\",\n  140701: \"市辖区\",\n  140702: \"榆次区\",\n  140721: \"榆社县\",\n  140722: \"左权县\",\n  140723: \"和顺县\",\n  140724: \"昔阳县\",\n  140725: \"寿阳县\",\n  140726: \"太谷县\",\n  140727: \"祁县\",\n  140728: \"平遥县\",\n  140729: \"灵石县\",\n  140781: \"介休市\",\n  140800: \"运城市\",\n  140801: \"市辖区\",\n  140802: \"盐湖区\",\n  140821: \"临猗县\",\n  140822: \"万荣县\",\n  140823: \"闻喜县\",\n  140824: \"稷山县\",\n  140825: \"新绛县\",\n  140826: \"绛县\",\n  140827: \"垣曲县\",\n  140828: \"夏县\",\n  140829: \"平陆县\",\n  140830: \"芮城县\",\n  140881: \"永济市\",\n  140882: \"河津市\",\n  140900: \"忻州市\",\n  140901: \"市辖区\",\n  140902: \"忻府区\",\n  140921: \"定襄县\",\n  140922: \"五台县\",\n  140923: \"代县\",\n  140924: \"繁峙县\",\n  140925: \"宁武县\",\n  140926: \"静乐县\",\n  140927: \"神池县\",\n  140928: \"五寨县\",\n  140929: \"岢岚县\",\n  140930: \"河曲县\",\n  140931: \"保德县\",\n  140932: \"偏关县\",\n  140981: \"原平市\",\n  141e3: \"临汾市\",\n  141001: \"市辖区\",\n  141002: \"尧都区\",\n  141021: \"曲沃县\",\n  141022: \"翼城县\",\n  141023: \"襄汾县\",\n  141024: \"洪洞县\",\n  141025: \"古县\",\n  141026: \"安泽县\",\n  141027: \"浮山县\",\n  141028: \"吉县\",\n  141029: \"乡宁县\",\n  141030: \"大宁县\",\n  141031: \"隰县\",\n  141032: \"永和县\",\n  141033: \"蒲县\",\n  141034: \"汾西县\",\n  141081: \"侯马市\",\n  141082: \"霍州市\",\n  141100: \"吕梁市\",\n  141101: \"市辖区\",\n  141102: \"离石区\",\n  141121: \"文水县\",\n  141122: \"交城县\",\n  141123: \"兴县\",\n  141124: \"临县\",\n  141125: \"柳林县\",\n  141126: \"石楼县\",\n  141127: \"岚县\",\n  141128: \"方山县\",\n  141129: \"中阳县\",\n  141130: \"交口县\",\n  141181: \"孝义市\",\n  141182: \"汾阳市\",\n  15e4: \"内蒙古自治区\",\n  150100: \"呼和浩特市\",\n  150101: \"市辖区\",\n  150102: \"新城区\",\n  150103: \"回民区\",\n  150104: \"玉泉区\",\n  150105: \"赛罕区\",\n  150121: \"土默特左旗\",\n  150122: \"托克托县\",\n  150123: \"和林格尔县\",\n  150124: \"清水河县\",\n  150125: \"武川县\",\n  150200: \"包头市\",\n  150201: \"市辖区\",\n  150202: \"东河区\",\n  150203: \"昆都仑区\",\n  150204: \"青山区\",\n  150205: \"石拐区\",\n  150206: \"白云鄂博矿区\",\n  150207: \"九原区\",\n  150221: \"土默特右旗\",\n  150222: \"固阳县\",\n  150223: \"达尔罕茂明安联合旗\",\n  150300: \"乌海市\",\n  150301: \"市辖区\",\n  150302: \"海勃湾区\",\n  150303: \"海南区\",\n  150304: \"乌达区\",\n  150400: \"赤峰市\",\n  150401: \"市辖区\",\n  150402: \"红山区\",\n  150403: \"元宝山区\",\n  150404: \"松山区\",\n  150421: \"阿鲁科尔沁旗\",\n  150422: \"巴林左旗\",\n  150423: \"巴林右旗\",\n  150424: \"林西县\",\n  150425: \"克什克腾旗\",\n  150426: \"翁牛特旗\",\n  150428: \"喀喇沁旗\",\n  150429: \"宁城县\",\n  150430: \"敖汉旗\",\n  150500: \"通辽市\",\n  150501: \"市辖区\",\n  150502: \"科尔沁区\",\n  150521: \"科尔沁左翼中旗\",\n  150522: \"科尔沁左翼后旗\",\n  150523: \"开鲁县\",\n  150524: \"库伦旗\",\n  150525: \"奈曼旗\",\n  150526: \"扎鲁特旗\",\n  150581: \"霍林郭勒市\",\n  150600: \"鄂尔多斯市\",\n  150601: \"市辖区\",\n  150602: \"东胜区\",\n  150603: \"康巴什区\",\n  150621: \"达拉特旗\",\n  150622: \"准格尔旗\",\n  150623: \"鄂托克前旗\",\n  150624: \"鄂托克旗\",\n  150625: \"杭锦旗\",\n  150626: \"乌审旗\",\n  150627: \"伊金霍洛旗\",\n  150700: \"呼伦贝尔市\",\n  150701: \"市辖区\",\n  150702: \"海拉尔区\",\n  150703: \"扎赉诺尔区\",\n  150721: \"阿荣旗\",\n  150722: \"莫力达瓦达斡尔族自治旗\",\n  150723: \"鄂伦春自治旗\",\n  150724: \"鄂温克族自治旗\",\n  150725: \"陈巴尔虎旗\",\n  150726: \"新巴尔虎左旗\",\n  150727: \"新巴尔虎右旗\",\n  150781: \"满洲里市\",\n  150782: \"牙克石市\",\n  150783: \"扎兰屯市\",\n  150784: \"额尔古纳市\",\n  150785: \"根河市\",\n  150800: \"巴彦淖尔市\",\n  150801: \"市辖区\",\n  150802: \"临河区\",\n  150821: \"五原县\",\n  150822: \"磴口县\",\n  150823: \"乌拉特前旗\",\n  150824: \"乌拉特中旗\",\n  150825: \"乌拉特后旗\",\n  150826: \"杭锦后旗\",\n  150900: \"乌兰察布市\",\n  150901: \"市辖区\",\n  150902: \"集宁区\",\n  150921: \"卓资县\",\n  150922: \"化德县\",\n  150923: \"商都县\",\n  150924: \"兴和县\",\n  150925: \"凉城县\",\n  150926: \"察哈尔右翼前旗\",\n  150927: \"察哈尔右翼中旗\",\n  150928: \"察哈尔右翼后旗\",\n  150929: \"四子王旗\",\n  150981: \"丰镇市\",\n  152200: \"兴安盟\",\n  152201: \"乌兰浩特市\",\n  152202: \"阿尔山市\",\n  152221: \"科尔沁右翼前旗\",\n  152222: \"科尔沁右翼中旗\",\n  152223: \"扎赉特旗\",\n  152224: \"突泉县\",\n  152500: \"锡林郭勒盟\",\n  152501: \"二连浩特市\",\n  152502: \"锡林浩特市\",\n  152522: \"阿巴嘎旗\",\n  152523: \"苏尼特左旗\",\n  152524: \"苏尼特右旗\",\n  152525: \"东乌珠穆沁旗\",\n  152526: \"西乌珠穆沁旗\",\n  152527: \"太仆寺旗\",\n  152528: \"镶黄旗\",\n  152529: \"正镶白旗\",\n  152530: \"正蓝旗\",\n  152531: \"多伦县\",\n  152900: \"阿拉善盟\",\n  152921: \"阿拉善左旗\",\n  152922: \"阿拉善右旗\",\n  152923: \"额济纳旗\",\n  21e4: \"辽宁省\",\n  210100: \"沈阳市\",\n  210101: \"市辖区\",\n  210102: \"和平区\",\n  210103: \"沈河区\",\n  210104: \"大东区\",\n  210105: \"皇姑区\",\n  210106: \"铁西区\",\n  210111: \"苏家屯区\",\n  210112: \"浑南区\",\n  210113: \"沈北新区\",\n  210114: \"于洪区\",\n  210115: \"辽中区\",\n  210123: \"康平县\",\n  210124: \"法库县\",\n  210181: \"新民市\",\n  210200: \"大连市\",\n  210201: \"市辖区\",\n  210202: \"中山区\",\n  210203: \"西岗区\",\n  210204: \"沙河口区\",\n  210211: \"甘井子区\",\n  210212: \"旅顺口区\",\n  210213: \"金州区\",\n  210214: \"普兰店区\",\n  210224: \"长海县\",\n  210281: \"瓦房店市\",\n  210283: \"庄河市\",\n  210300: \"鞍山市\",\n  210301: \"市辖区\",\n  210302: \"铁东区\",\n  210303: \"铁西区\",\n  210304: \"立山区\",\n  210311: \"千山区\",\n  210321: \"台安县\",\n  210323: \"岫岩满族自治县\",\n  210381: \"海城市\",\n  210400: \"抚顺市\",\n  210401: \"市辖区\",\n  210402: \"新抚区\",\n  210403: \"东洲区\",\n  210404: \"望花区\",\n  210411: \"顺城区\",\n  210421: \"抚顺县\",\n  210422: \"新宾满族自治县\",\n  210423: \"清原满族自治县\",\n  210500: \"本溪市\",\n  210501: \"市辖区\",\n  210502: \"平山区\",\n  210503: \"溪湖区\",\n  210504: \"明山区\",\n  210505: \"南芬区\",\n  210521: \"本溪满族自治县\",\n  210522: \"桓仁满族自治县\",\n  210600: \"丹东市\",\n  210601: \"市辖区\",\n  210602: \"元宝区\",\n  210603: \"振兴区\",\n  210604: \"振安区\",\n  210624: \"宽甸满族自治县\",\n  210681: \"东港市\",\n  210682: \"凤城市\",\n  210700: \"锦州市\",\n  210701: \"市辖区\",\n  210702: \"古塔区\",\n  210703: \"凌河区\",\n  210711: \"太和区\",\n  210726: \"黑山县\",\n  210727: \"义县\",\n  210781: \"凌海市\",\n  210782: \"北镇市\",\n  210800: \"营口市\",\n  210801: \"市辖区\",\n  210802: \"站前区\",\n  210803: \"西市区\",\n  210804: \"鲅鱼圈区\",\n  210811: \"老边区\",\n  210881: \"盖州市\",\n  210882: \"大石桥市\",\n  210900: \"阜新市\",\n  210901: \"市辖区\",\n  210902: \"海州区\",\n  210903: \"新邱区\",\n  210904: \"太平区\",\n  210905: \"清河门区\",\n  210911: \"细河区\",\n  210921: \"阜新蒙古族自治县\",\n  210922: \"彰武县\",\n  211e3: \"辽阳市\",\n  211001: \"市辖区\",\n  211002: \"白塔区\",\n  211003: \"文圣区\",\n  211004: \"宏伟区\",\n  211005: \"弓长岭区\",\n  211011: \"太子河区\",\n  211021: \"辽阳县\",\n  211081: \"灯塔市\",\n  211100: \"盘锦市\",\n  211101: \"市辖区\",\n  211102: \"双台子区\",\n  211103: \"兴隆台区\",\n  211104: \"大洼区\",\n  211122: \"盘山县\",\n  211200: \"铁岭市\",\n  211201: \"市辖区\",\n  211202: \"银州区\",\n  211204: \"清河区\",\n  211221: \"铁岭县\",\n  211223: \"西丰县\",\n  211224: \"昌图县\",\n  211281: \"调兵山市\",\n  211282: \"开原市\",\n  211300: \"朝阳市\",\n  211301: \"市辖区\",\n  211302: \"双塔区\",\n  211303: \"龙城区\",\n  211321: \"朝阳县\",\n  211322: \"建平县\",\n  211324: \"喀喇沁左翼蒙古族自治县\",\n  211381: \"北票市\",\n  211382: \"凌源市\",\n  211400: \"葫芦岛市\",\n  211401: \"市辖区\",\n  211402: \"连山区\",\n  211403: \"龙港区\",\n  211404: \"南票区\",\n  211421: \"绥中县\",\n  211422: \"建昌县\",\n  211481: \"兴城市\",\n  22e4: \"吉林省\",\n  220100: \"长春市\",\n  220101: \"市辖区\",\n  220102: \"南关区\",\n  220103: \"宽城区\",\n  220104: \"朝阳区\",\n  220105: \"二道区\",\n  220106: \"绿园区\",\n  220112: \"双阳区\",\n  220113: \"九台区\",\n  220122: \"农安县\",\n  220182: \"榆树市\",\n  220183: \"德惠市\",\n  220200: \"吉林市\",\n  220201: \"市辖区\",\n  220202: \"昌邑区\",\n  220203: \"龙潭区\",\n  220204: \"船营区\",\n  220211: \"丰满区\",\n  220221: \"永吉县\",\n  220281: \"蛟河市\",\n  220282: \"桦甸市\",\n  220283: \"舒兰市\",\n  220284: \"磐石市\",\n  220300: \"四平市\",\n  220301: \"市辖区\",\n  220302: \"铁西区\",\n  220303: \"铁东区\",\n  220322: \"梨树县\",\n  220323: \"伊通满族自治县\",\n  220381: \"公主岭市\",\n  220382: \"双辽市\",\n  220400: \"辽源市\",\n  220401: \"市辖区\",\n  220402: \"龙山区\",\n  220403: \"西安区\",\n  220421: \"东丰县\",\n  220422: \"东辽县\",\n  220500: \"通化市\",\n  220501: \"市辖区\",\n  220502: \"东昌区\",\n  220503: \"二道江区\",\n  220521: \"通化县\",\n  220523: \"辉南县\",\n  220524: \"柳河县\",\n  220581: \"梅河口市\",\n  220582: \"集安市\",\n  220600: \"白山市\",\n  220601: \"市辖区\",\n  220602: \"浑江区\",\n  220605: \"江源区\",\n  220621: \"抚松县\",\n  220622: \"靖宇县\",\n  220623: \"长白朝鲜族自治县\",\n  220681: \"临江市\",\n  220700: \"松原市\",\n  220701: \"市辖区\",\n  220702: \"宁江区\",\n  220721: \"前郭尔罗斯蒙古族自治县\",\n  220722: \"长岭县\",\n  220723: \"乾安县\",\n  220781: \"扶余市\",\n  220800: \"白城市\",\n  220801: \"市辖区\",\n  220802: \"洮北区\",\n  220821: \"镇赉县\",\n  220822: \"通榆县\",\n  220881: \"洮南市\",\n  220882: \"大安市\",\n  222400: \"延边朝鲜族自治州\",\n  222401: \"延吉市\",\n  222402: \"图们市\",\n  222403: \"敦化市\",\n  222404: \"珲春市\",\n  222405: \"龙井市\",\n  222406: \"和龙市\",\n  222424: \"汪清县\",\n  222426: \"安图县\",\n  23e4: \"黑龙江省\",\n  230100: \"哈尔滨市\",\n  230101: \"市辖区\",\n  230102: \"道里区\",\n  230103: \"南岗区\",\n  230104: \"道外区\",\n  230108: \"平房区\",\n  230109: \"松北区\",\n  230110: \"香坊区\",\n  230111: \"呼兰区\",\n  230112: \"阿城区\",\n  230113: \"双城区\",\n  230123: \"依兰县\",\n  230124: \"方正县\",\n  230125: \"宾县\",\n  230126: \"巴彦县\",\n  230127: \"木兰县\",\n  230128: \"通河县\",\n  230129: \"延寿县\",\n  230183: \"尚志市\",\n  230184: \"五常市\",\n  230200: \"齐齐哈尔市\",\n  230201: \"市辖区\",\n  230202: \"龙沙区\",\n  230203: \"建华区\",\n  230204: \"铁锋区\",\n  230205: \"昂昂溪区\",\n  230206: \"富拉尔基区\",\n  230207: \"碾子山区\",\n  230208: \"梅里斯达斡尔族区\",\n  230221: \"龙江县\",\n  230223: \"依安县\",\n  230224: \"泰来县\",\n  230225: \"甘南县\",\n  230227: \"富裕县\",\n  230229: \"克山县\",\n  230230: \"克东县\",\n  230231: \"拜泉县\",\n  230281: \"讷河市\",\n  230300: \"鸡西市\",\n  230301: \"市辖区\",\n  230302: \"鸡冠区\",\n  230303: \"恒山区\",\n  230304: \"滴道区\",\n  230305: \"梨树区\",\n  230306: \"城子河区\",\n  230307: \"麻山区\",\n  230321: \"鸡东县\",\n  230381: \"虎林市\",\n  230382: \"密山市\",\n  230400: \"鹤岗市\",\n  230401: \"市辖区\",\n  230402: \"向阳区\",\n  230403: \"工农区\",\n  230404: \"南山区\",\n  230405: \"兴安区\",\n  230406: \"东山区\",\n  230407: \"兴山区\",\n  230421: \"萝北县\",\n  230422: \"绥滨县\",\n  230500: \"双鸭山市\",\n  230501: \"市辖区\",\n  230502: \"尖山区\",\n  230503: \"岭东区\",\n  230505: \"四方台区\",\n  230506: \"宝山区\",\n  230521: \"集贤县\",\n  230522: \"友谊县\",\n  230523: \"宝清县\",\n  230524: \"饶河县\",\n  230600: \"大庆市\",\n  230601: \"市辖区\",\n  230602: \"萨尔图区\",\n  230603: \"龙凤区\",\n  230604: \"让胡路区\",\n  230605: \"红岗区\",\n  230606: \"大同区\",\n  230621: \"肇州县\",\n  230622: \"肇源县\",\n  230623: \"林甸县\",\n  230624: \"杜尔伯特蒙古族自治县\",\n  230700: \"伊春市\",\n  230701: \"市辖区\",\n  230702: \"伊春区\",\n  230703: \"南岔区\",\n  230704: \"友好区\",\n  230705: \"西林区\",\n  230706: \"翠峦区\",\n  230707: \"新青区\",\n  230708: \"美溪区\",\n  230709: \"金山屯区\",\n  230710: \"五营区\",\n  230711: \"乌马河区\",\n  230712: \"汤旺河区\",\n  230713: \"带岭区\",\n  230714: \"乌伊岭区\",\n  230715: \"红星区\",\n  230716: \"上甘岭区\",\n  230722: \"嘉荫县\",\n  230781: \"铁力市\",\n  230800: \"佳木斯市\",\n  230801: \"市辖区\",\n  230803: \"向阳区\",\n  230804: \"前进区\",\n  230805: \"东风区\",\n  230811: \"郊区\",\n  230822: \"桦南县\",\n  230826: \"桦川县\",\n  230828: \"汤原县\",\n  230881: \"同江市\",\n  230882: \"富锦市\",\n  230883: \"抚远市\",\n  230900: \"七台河市\",\n  230901: \"市辖区\",\n  230902: \"新兴区\",\n  230903: \"桃山区\",\n  230904: \"茄子河区\",\n  230921: \"勃利县\",\n  231e3: \"牡丹江市\",\n  231001: \"市辖区\",\n  231002: \"东安区\",\n  231003: \"阳明区\",\n  231004: \"爱民区\",\n  231005: \"西安区\",\n  231025: \"林口县\",\n  231081: \"绥芬河市\",\n  231083: \"海林市\",\n  231084: \"宁安市\",\n  231085: \"穆棱市\",\n  231086: \"东宁市\",\n  231100: \"黑河市\",\n  231101: \"市辖区\",\n  231102: \"爱辉区\",\n  231121: \"嫩江县\",\n  231123: \"逊克县\",\n  231124: \"孙吴县\",\n  231181: \"北安市\",\n  231182: \"五大连池市\",\n  231200: \"绥化市\",\n  231201: \"市辖区\",\n  231202: \"北林区\",\n  231221: \"望奎县\",\n  231222: \"兰西县\",\n  231223: \"青冈县\",\n  231224: \"庆安县\",\n  231225: \"明水县\",\n  231226: \"绥棱县\",\n  231281: \"安达市\",\n  231282: \"肇东市\",\n  231283: \"海伦市\",\n  232700: \"大兴安岭地区\",\n  232721: \"呼玛县\",\n  232722: \"塔河县\",\n  232723: \"漠河县\",\n  31e4: \"上海市\",\n  310100: \"市辖区\",\n  310101: \"黄浦区\",\n  310104: \"徐汇区\",\n  310105: \"长宁区\",\n  310106: \"静安区\",\n  310107: \"普陀区\",\n  310109: \"虹口区\",\n  310110: \"杨浦区\",\n  310112: \"闵行区\",\n  310113: \"宝山区\",\n  310114: \"嘉定区\",\n  310115: \"浦东新区\",\n  310116: \"金山区\",\n  310117: \"松江区\",\n  310118: \"青浦区\",\n  310120: \"奉贤区\",\n  310151: \"崇明区\",\n  32e4: \"江苏省\",\n  320100: \"南京市\",\n  320101: \"市辖区\",\n  320102: \"玄武区\",\n  320104: \"秦淮区\",\n  320105: \"建邺区\",\n  320106: \"鼓楼区\",\n  320111: \"浦口区\",\n  320113: \"栖霞区\",\n  320114: \"雨花台区\",\n  320115: \"江宁区\",\n  320116: \"六合区\",\n  320117: \"溧水区\",\n  320118: \"高淳区\",\n  320200: \"无锡市\",\n  320201: \"市辖区\",\n  320205: \"锡山区\",\n  320206: \"惠山区\",\n  320211: \"滨湖区\",\n  320213: \"梁溪区\",\n  320214: \"新吴区\",\n  320281: \"江阴市\",\n  320282: \"宜兴市\",\n  320300: \"徐州市\",\n  320301: \"市辖区\",\n  320302: \"鼓楼区\",\n  320303: \"云龙区\",\n  320305: \"贾汪区\",\n  320311: \"泉山区\",\n  320312: \"铜山区\",\n  320321: \"丰县\",\n  320322: \"沛县\",\n  320324: \"睢宁县\",\n  320381: \"新沂市\",\n  320382: \"邳州市\",\n  320400: \"常州市\",\n  320401: \"市辖区\",\n  320402: \"天宁区\",\n  320404: \"钟楼区\",\n  320411: \"新北区\",\n  320412: \"武进区\",\n  320413: \"金坛区\",\n  320481: \"溧阳市\",\n  320500: \"苏州市\",\n  320501: \"市辖区\",\n  320505: \"虎丘区\",\n  320506: \"吴中区\",\n  320507: \"相城区\",\n  320508: \"姑苏区\",\n  320509: \"吴江区\",\n  320581: \"常熟市\",\n  320582: \"张家港市\",\n  320583: \"昆山市\",\n  320585: \"太仓市\",\n  320594: \"苏州工业园区\",\n  320600: \"南通市\",\n  320601: \"市辖区\",\n  320602: \"崇川区\",\n  320611: \"港闸区\",\n  320612: \"通州区\",\n  320621: \"海安县\",\n  320623: \"如东县\",\n  320681: \"启东市\",\n  320682: \"如皋市\",\n  320684: \"海门市\",\n  320700: \"连云港市\",\n  320701: \"市辖区\",\n  320703: \"连云区\",\n  320706: \"海州区\",\n  320707: \"赣榆区\",\n  320722: \"东海县\",\n  320723: \"灌云县\",\n  320724: \"灌南县\",\n  320800: \"淮安市\",\n  320801: \"市辖区\",\n  320803: \"淮安区\",\n  320804: \"淮阴区\",\n  320812: \"清江浦区\",\n  320813: \"洪泽区\",\n  320826: \"涟水县\",\n  320830: \"盱眙县\",\n  320831: \"金湖县\",\n  320900: \"盐城市\",\n  320901: \"市辖区\",\n  320902: \"亭湖区\",\n  320903: \"盐都区\",\n  320904: \"大丰区\",\n  320921: \"响水县\",\n  320922: \"滨海县\",\n  320923: \"阜宁县\",\n  320924: \"射阳县\",\n  320925: \"建湖县\",\n  320981: \"东台市\",\n  321e3: \"扬州市\",\n  321001: \"市辖区\",\n  321002: \"广陵区\",\n  321003: \"邗江区\",\n  321012: \"江都区\",\n  321023: \"宝应县\",\n  321081: \"仪征市\",\n  321084: \"高邮市\",\n  321100: \"镇江市\",\n  321101: \"市辖区\",\n  321102: \"京口区\",\n  321111: \"润州区\",\n  321112: \"丹徒区\",\n  321181: \"丹阳市\",\n  321182: \"扬中市\",\n  321183: \"句容市\",\n  321200: \"泰州市\",\n  321201: \"市辖区\",\n  321202: \"海陵区\",\n  321203: \"高港区\",\n  321204: \"姜堰区\",\n  321281: \"兴化市\",\n  321282: \"靖江市\",\n  321283: \"泰兴市\",\n  321300: \"宿迁市\",\n  321301: \"市辖区\",\n  321302: \"宿城区\",\n  321311: \"宿豫区\",\n  321322: \"沭阳县\",\n  321323: \"泗阳县\",\n  321324: \"泗洪县\",\n  33e4: \"浙江省\",\n  330100: \"杭州市\",\n  330101: \"市辖区\",\n  330102: \"上城区\",\n  330103: \"下城区\",\n  330104: \"江干区\",\n  330105: \"拱墅区\",\n  330106: \"西湖区\",\n  330108: \"滨江区\",\n  330109: \"萧山区\",\n  330110: \"余杭区\",\n  330111: \"富阳区\",\n  330122: \"桐庐县\",\n  330127: \"淳安县\",\n  330182: \"建德市\",\n  330185: \"临安市\",\n  330200: \"宁波市\",\n  330201: \"市辖区\",\n  330203: \"海曙区\",\n  330204: \"江东区\",\n  330205: \"江北区\",\n  330206: \"北仑区\",\n  330211: \"镇海区\",\n  330212: \"鄞州区\",\n  330225: \"象山县\",\n  330226: \"宁海县\",\n  330281: \"余姚市\",\n  330282: \"慈溪市\",\n  330283: \"奉化市\",\n  330300: \"温州市\",\n  330301: \"市辖区\",\n  330302: \"鹿城区\",\n  330303: \"龙湾区\",\n  330304: \"瓯海区\",\n  330305: \"洞头区\",\n  330324: \"永嘉县\",\n  330326: \"平阳县\",\n  330327: \"苍南县\",\n  330328: \"文成县\",\n  330329: \"泰顺县\",\n  330381: \"瑞安市\",\n  330382: \"乐清市\",\n  330400: \"嘉兴市\",\n  330401: \"市辖区\",\n  330402: \"南湖区\",\n  330411: \"秀洲区\",\n  330421: \"嘉善县\",\n  330424: \"海盐县\",\n  330481: \"海宁市\",\n  330482: \"平湖市\",\n  330483: \"桐乡市\",\n  330500: \"湖州市\",\n  330501: \"市辖区\",\n  330502: \"吴兴区\",\n  330503: \"南浔区\",\n  330521: \"德清县\",\n  330522: \"长兴县\",\n  330523: \"安吉县\",\n  330600: \"绍兴市\",\n  330601: \"市辖区\",\n  330602: \"越城区\",\n  330603: \"柯桥区\",\n  330604: \"上虞区\",\n  330624: \"新昌县\",\n  330681: \"诸暨市\",\n  330683: \"嵊州市\",\n  330700: \"金华市\",\n  330701: \"市辖区\",\n  330702: \"婺城区\",\n  330703: \"金东区\",\n  330723: \"武义县\",\n  330726: \"浦江县\",\n  330727: \"磐安县\",\n  330781: \"兰溪市\",\n  330782: \"义乌市\",\n  330783: \"东阳市\",\n  330784: \"永康市\",\n  330800: \"衢州市\",\n  330801: \"市辖区\",\n  330802: \"柯城区\",\n  330803: \"衢江区\",\n  330822: \"常山县\",\n  330824: \"开化县\",\n  330825: \"龙游县\",\n  330881: \"江山市\",\n  330900: \"舟山市\",\n  330901: \"市辖区\",\n  330902: \"定海区\",\n  330903: \"普陀区\",\n  330921: \"岱山县\",\n  330922: \"嵊泗县\",\n  331e3: \"台州市\",\n  331001: \"市辖区\",\n  331002: \"椒江区\",\n  331003: \"黄岩区\",\n  331004: \"路桥区\",\n  331021: \"玉环县\",\n  331022: \"三门县\",\n  331023: \"天台县\",\n  331024: \"仙居县\",\n  331081: \"温岭市\",\n  331082: \"临海市\",\n  331100: \"丽水市\",\n  331101: \"市辖区\",\n  331102: \"莲都区\",\n  331121: \"青田县\",\n  331122: \"缙云县\",\n  331123: \"遂昌县\",\n  331124: \"松阳县\",\n  331125: \"云和县\",\n  331126: \"庆元县\",\n  331127: \"景宁畲族自治县\",\n  331181: \"龙泉市\",\n  34e4: \"安徽省\",\n  340100: \"合肥市\",\n  340101: \"市辖区\",\n  340102: \"瑶海区\",\n  340103: \"庐阳区\",\n  340104: \"蜀山区\",\n  340111: \"包河区\",\n  340121: \"长丰县\",\n  340122: \"肥东县\",\n  340123: \"肥西县\",\n  340124: \"庐江县\",\n  340181: \"巢湖市\",\n  340200: \"芜湖市\",\n  340201: \"市辖区\",\n  340202: \"镜湖区\",\n  340203: \"弋江区\",\n  340207: \"鸠江区\",\n  340208: \"三山区\",\n  340221: \"芜湖县\",\n  340222: \"繁昌县\",\n  340223: \"南陵县\",\n  340225: \"无为县\",\n  340300: \"蚌埠市\",\n  340301: \"市辖区\",\n  340302: \"龙子湖区\",\n  340303: \"蚌山区\",\n  340304: \"禹会区\",\n  340311: \"淮上区\",\n  340321: \"怀远县\",\n  340322: \"五河县\",\n  340323: \"固镇县\",\n  340400: \"淮南市\",\n  340401: \"市辖区\",\n  340402: \"大通区\",\n  340403: \"田家庵区\",\n  340404: \"谢家集区\",\n  340405: \"八公山区\",\n  340406: \"潘集区\",\n  340421: \"凤台县\",\n  340422: \"寿县\",\n  340500: \"马鞍山市\",\n  340501: \"市辖区\",\n  340503: \"花山区\",\n  340504: \"雨山区\",\n  340506: \"博望区\",\n  340521: \"当涂县\",\n  340522: \"含山县\",\n  340523: \"和县\",\n  340600: \"淮北市\",\n  340601: \"市辖区\",\n  340602: \"杜集区\",\n  340603: \"相山区\",\n  340604: \"烈山区\",\n  340621: \"濉溪县\",\n  340700: \"铜陵市\",\n  340701: \"市辖区\",\n  340705: \"铜官区\",\n  340706: \"义安区\",\n  340711: \"郊区\",\n  340722: \"枞阳县\",\n  340800: \"安庆市\",\n  340801: \"市辖区\",\n  340802: \"迎江区\",\n  340803: \"大观区\",\n  340811: \"宜秀区\",\n  340822: \"怀宁县\",\n  340824: \"潜山县\",\n  340825: \"太湖县\",\n  340826: \"宿松县\",\n  340827: \"望江县\",\n  340828: \"岳西县\",\n  340881: \"桐城市\",\n  341e3: \"黄山市\",\n  341001: \"市辖区\",\n  341002: \"屯溪区\",\n  341003: \"黄山区\",\n  341004: \"徽州区\",\n  341021: \"歙县\",\n  341022: \"休宁县\",\n  341023: \"黟县\",\n  341024: \"祁门县\",\n  341100: \"滁州市\",\n  341101: \"市辖区\",\n  341102: \"琅琊区\",\n  341103: \"南谯区\",\n  341122: \"来安县\",\n  341124: \"全椒县\",\n  341125: \"定远县\",\n  341126: \"凤阳县\",\n  341181: \"天长市\",\n  341182: \"明光市\",\n  341200: \"阜阳市\",\n  341201: \"市辖区\",\n  341202: \"颍州区\",\n  341203: \"颍东区\",\n  341204: \"颍泉区\",\n  341221: \"临泉县\",\n  341222: \"太和县\",\n  341225: \"阜南县\",\n  341226: \"颍上县\",\n  341282: \"界首市\",\n  341300: \"宿州市\",\n  341301: \"市辖区\",\n  341302: \"埇桥区\",\n  341321: \"砀山县\",\n  341322: \"萧县\",\n  341323: \"灵璧县\",\n  341324: \"泗县\",\n  341500: \"六安市\",\n  341501: \"市辖区\",\n  341502: \"金安区\",\n  341503: \"裕安区\",\n  341504: \"叶集区\",\n  341522: \"霍邱县\",\n  341523: \"舒城县\",\n  341524: \"金寨县\",\n  341525: \"霍山县\",\n  341600: \"亳州市\",\n  341601: \"市辖区\",\n  341602: \"谯城区\",\n  341621: \"涡阳县\",\n  341622: \"蒙城县\",\n  341623: \"利辛县\",\n  341700: \"池州市\",\n  341701: \"市辖区\",\n  341702: \"贵池区\",\n  341721: \"东至县\",\n  341722: \"石台县\",\n  341723: \"青阳县\",\n  341800: \"宣城市\",\n  341801: \"市辖区\",\n  341802: \"宣州区\",\n  341821: \"郎溪县\",\n  341822: \"广德县\",\n  341823: \"泾县\",\n  341824: \"绩溪县\",\n  341825: \"旌德县\",\n  341881: \"宁国市\",\n  35e4: \"福建省\",\n  350100: \"福州市\",\n  350101: \"市辖区\",\n  350102: \"鼓楼区\",\n  350103: \"台江区\",\n  350104: \"仓山区\",\n  350105: \"马尾区\",\n  350111: \"晋安区\",\n  350121: \"闽侯县\",\n  350122: \"连江县\",\n  350123: \"罗源县\",\n  350124: \"闽清县\",\n  350125: \"永泰县\",\n  350128: \"平潭县\",\n  350181: \"福清市\",\n  350182: \"长乐市\",\n  350200: \"厦门市\",\n  350201: \"市辖区\",\n  350203: \"思明区\",\n  350205: \"海沧区\",\n  350206: \"湖里区\",\n  350211: \"集美区\",\n  350212: \"同安区\",\n  350213: \"翔安区\",\n  350300: \"莆田市\",\n  350301: \"市辖区\",\n  350302: \"城厢区\",\n  350303: \"涵江区\",\n  350304: \"荔城区\",\n  350305: \"秀屿区\",\n  350322: \"仙游县\",\n  350400: \"三明市\",\n  350401: \"市辖区\",\n  350402: \"梅列区\",\n  350403: \"三元区\",\n  350421: \"明溪县\",\n  350423: \"清流县\",\n  350424: \"宁化县\",\n  350425: \"大田县\",\n  350426: \"尤溪县\",\n  350427: \"沙县\",\n  350428: \"将乐县\",\n  350429: \"泰宁县\",\n  350430: \"建宁县\",\n  350481: \"永安市\",\n  350500: \"泉州市\",\n  350501: \"市辖区\",\n  350502: \"鲤城区\",\n  350503: \"丰泽区\",\n  350504: \"洛江区\",\n  350505: \"泉港区\",\n  350521: \"惠安县\",\n  350524: \"安溪县\",\n  350525: \"永春县\",\n  350526: \"德化县\",\n  350527: \"金门县\",\n  350581: \"石狮市\",\n  350582: \"晋江市\",\n  350583: \"南安市\",\n  350600: \"漳州市\",\n  350601: \"市辖区\",\n  350602: \"芗城区\",\n  350603: \"龙文区\",\n  350622: \"云霄县\",\n  350623: \"漳浦县\",\n  350624: \"诏安县\",\n  350625: \"长泰县\",\n  350626: \"东山县\",\n  350627: \"南靖县\",\n  350628: \"平和县\",\n  350629: \"华安县\",\n  350681: \"龙海市\",\n  350700: \"南平市\",\n  350701: \"市辖区\",\n  350702: \"延平区\",\n  350703: \"建阳区\",\n  350721: \"顺昌县\",\n  350722: \"浦城县\",\n  350723: \"光泽县\",\n  350724: \"松溪县\",\n  350725: \"政和县\",\n  350781: \"邵武市\",\n  350782: \"武夷山市\",\n  350783: \"建瓯市\",\n  350800: \"龙岩市\",\n  350801: \"市辖区\",\n  350802: \"新罗区\",\n  350803: \"永定区\",\n  350821: \"长汀县\",\n  350823: \"上杭县\",\n  350824: \"武平县\",\n  350825: \"连城县\",\n  350881: \"漳平市\",\n  350900: \"宁德市\",\n  350901: \"市辖区\",\n  350902: \"蕉城区\",\n  350921: \"霞浦县\",\n  350922: \"古田县\",\n  350923: \"屏南县\",\n  350924: \"寿宁县\",\n  350925: \"周宁县\",\n  350926: \"柘荣县\",\n  350981: \"福安市\",\n  350982: \"福鼎市\",\n  36e4: \"江西省\",\n  360100: \"南昌市\",\n  360101: \"市辖区\",\n  360102: \"东湖区\",\n  360103: \"西湖区\",\n  360104: \"青云谱区\",\n  360105: \"湾里区\",\n  360111: \"青山湖区\",\n  360112: \"新建区\",\n  360121: \"南昌县\",\n  360123: \"安义县\",\n  360124: \"进贤县\",\n  360200: \"景德镇市\",\n  360201: \"市辖区\",\n  360202: \"昌江区\",\n  360203: \"珠山区\",\n  360222: \"浮梁县\",\n  360281: \"乐平市\",\n  360300: \"萍乡市\",\n  360301: \"市辖区\",\n  360302: \"安源区\",\n  360313: \"湘东区\",\n  360321: \"莲花县\",\n  360322: \"上栗县\",\n  360323: \"芦溪县\",\n  360400: \"九江市\",\n  360401: \"市辖区\",\n  360402: \"濂溪区\",\n  360403: \"浔阳区\",\n  360421: \"九江县\",\n  360423: \"武宁县\",\n  360424: \"修水县\",\n  360425: \"永修县\",\n  360426: \"德安县\",\n  360428: \"都昌县\",\n  360429: \"湖口县\",\n  360430: \"彭泽县\",\n  360481: \"瑞昌市\",\n  360482: \"共青城市\",\n  360483: \"庐山市\",\n  360500: \"新余市\",\n  360501: \"市辖区\",\n  360502: \"渝水区\",\n  360521: \"分宜县\",\n  360600: \"鹰潭市\",\n  360601: \"市辖区\",\n  360602: \"月湖区\",\n  360622: \"余江县\",\n  360681: \"贵溪市\",\n  360700: \"赣州市\",\n  360701: \"市辖区\",\n  360702: \"章贡区\",\n  360703: \"南康区\",\n  360721: \"赣县\",\n  360722: \"信丰县\",\n  360723: \"大余县\",\n  360724: \"上犹县\",\n  360725: \"崇义县\",\n  360726: \"安远县\",\n  360727: \"龙南县\",\n  360728: \"定南县\",\n  360729: \"全南县\",\n  360730: \"宁都县\",\n  360731: \"于都县\",\n  360732: \"兴国县\",\n  360733: \"会昌县\",\n  360734: \"寻乌县\",\n  360735: \"石城县\",\n  360781: \"瑞金市\",\n  360800: \"吉安市\",\n  360801: \"市辖区\",\n  360802: \"吉州区\",\n  360803: \"青原区\",\n  360821: \"吉安县\",\n  360822: \"吉水县\",\n  360823: \"峡江县\",\n  360824: \"新干县\",\n  360825: \"永丰县\",\n  360826: \"泰和县\",\n  360827: \"遂川县\",\n  360828: \"万安县\",\n  360829: \"安福县\",\n  360830: \"永新县\",\n  360881: \"井冈山市\",\n  360900: \"宜春市\",\n  360901: \"市辖区\",\n  360902: \"袁州区\",\n  360921: \"奉新县\",\n  360922: \"万载县\",\n  360923: \"上高县\",\n  360924: \"宜丰县\",\n  360925: \"靖安县\",\n  360926: \"铜鼓县\",\n  360981: \"丰城市\",\n  360982: \"樟树市\",\n  360983: \"高安市\",\n  361e3: \"抚州市\",\n  361001: \"市辖区\",\n  361002: \"临川区\",\n  361021: \"南城县\",\n  361022: \"黎川县\",\n  361023: \"南丰县\",\n  361024: \"崇仁县\",\n  361025: \"乐安县\",\n  361026: \"宜黄县\",\n  361027: \"金溪县\",\n  361028: \"资溪县\",\n  361029: \"东乡县\",\n  361030: \"广昌县\",\n  361100: \"上饶市\",\n  361101: \"市辖区\",\n  361102: \"信州区\",\n  361103: \"广丰区\",\n  361121: \"上饶县\",\n  361123: \"玉山县\",\n  361124: \"铅山县\",\n  361125: \"横峰县\",\n  361126: \"弋阳县\",\n  361127: \"余干县\",\n  361128: \"鄱阳县\",\n  361129: \"万年县\",\n  361130: \"婺源县\",\n  361181: \"德兴市\",\n  37e4: \"山东省\",\n  370100: \"济南市\",\n  370101: \"市辖区\",\n  370102: \"历下区\",\n  370103: \"市中区\",\n  370104: \"槐荫区\",\n  370105: \"天桥区\",\n  370112: \"历城区\",\n  370113: \"长清区\",\n  370124: \"平阴县\",\n  370125: \"济阳县\",\n  370126: \"商河县\",\n  370181: \"章丘市\",\n  370200: \"青岛市\",\n  370201: \"市辖区\",\n  370202: \"市南区\",\n  370203: \"市北区\",\n  370211: \"黄岛区\",\n  370212: \"崂山区\",\n  370213: \"李沧区\",\n  370214: \"城阳区\",\n  370281: \"胶州市\",\n  370282: \"即墨市\",\n  370283: \"平度市\",\n  370285: \"莱西市\",\n  370300: \"淄博市\",\n  370301: \"市辖区\",\n  370302: \"淄川区\",\n  370303: \"张店区\",\n  370304: \"博山区\",\n  370305: \"临淄区\",\n  370306: \"周村区\",\n  370321: \"桓台县\",\n  370322: \"高青县\",\n  370323: \"沂源县\",\n  370400: \"枣庄市\",\n  370401: \"市辖区\",\n  370402: \"市中区\",\n  370403: \"薛城区\",\n  370404: \"峄城区\",\n  370405: \"台儿庄区\",\n  370406: \"山亭区\",\n  370481: \"滕州市\",\n  370500: \"东营市\",\n  370501: \"市辖区\",\n  370502: \"东营区\",\n  370503: \"河口区\",\n  370505: \"垦利区\",\n  370522: \"利津县\",\n  370523: \"广饶县\",\n  370600: \"烟台市\",\n  370601: \"市辖区\",\n  370602: \"芝罘区\",\n  370611: \"福山区\",\n  370612: \"牟平区\",\n  370613: \"莱山区\",\n  370634: \"长岛县\",\n  370681: \"龙口市\",\n  370682: \"莱阳市\",\n  370683: \"莱州市\",\n  370684: \"蓬莱市\",\n  370685: \"招远市\",\n  370686: \"栖霞市\",\n  370687: \"海阳市\",\n  370700: \"潍坊市\",\n  370701: \"市辖区\",\n  370702: \"潍城区\",\n  370703: \"寒亭区\",\n  370704: \"坊子区\",\n  370705: \"奎文区\",\n  370724: \"临朐县\",\n  370725: \"昌乐县\",\n  370781: \"青州市\",\n  370782: \"诸城市\",\n  370783: \"寿光市\",\n  370784: \"安丘市\",\n  370785: \"高密市\",\n  370786: \"昌邑市\",\n  370800: \"济宁市\",\n  370801: \"市辖区\",\n  370811: \"任城区\",\n  370812: \"兖州区\",\n  370826: \"微山县\",\n  370827: \"鱼台县\",\n  370828: \"金乡县\",\n  370829: \"嘉祥县\",\n  370830: \"汶上县\",\n  370831: \"泗水县\",\n  370832: \"梁山县\",\n  370881: \"曲阜市\",\n  370883: \"邹城市\",\n  370900: \"泰安市\",\n  370901: \"市辖区\",\n  370902: \"泰山区\",\n  370911: \"岱岳区\",\n  370921: \"宁阳县\",\n  370923: \"东平县\",\n  370982: \"新泰市\",\n  370983: \"肥城市\",\n  371e3: \"威海市\",\n  371001: \"市辖区\",\n  371002: \"环翠区\",\n  371003: \"文登区\",\n  371082: \"荣成市\",\n  371083: \"乳山市\",\n  371100: \"日照市\",\n  371101: \"市辖区\",\n  371102: \"东港区\",\n  371103: \"岚山区\",\n  371121: \"五莲县\",\n  371122: \"莒县\",\n  371200: \"莱芜市\",\n  371201: \"市辖区\",\n  371202: \"莱城区\",\n  371203: \"钢城区\",\n  371300: \"临沂市\",\n  371301: \"市辖区\",\n  371302: \"兰山区\",\n  371311: \"罗庄区\",\n  371312: \"河东区\",\n  371321: \"沂南县\",\n  371322: \"郯城县\",\n  371323: \"沂水县\",\n  371324: \"兰陵县\",\n  371325: \"费县\",\n  371326: \"平邑县\",\n  371327: \"莒南县\",\n  371328: \"蒙阴县\",\n  371329: \"临沭县\",\n  371400: \"德州市\",\n  371401: \"市辖区\",\n  371402: \"德城区\",\n  371403: \"陵城区\",\n  371422: \"宁津县\",\n  371423: \"庆云县\",\n  371424: \"临邑县\",\n  371425: \"齐河县\",\n  371426: \"平原县\",\n  371427: \"夏津县\",\n  371428: \"武城县\",\n  371481: \"乐陵市\",\n  371482: \"禹城市\",\n  371500: \"聊城市\",\n  371501: \"市辖区\",\n  371502: \"东昌府区\",\n  371521: \"阳谷县\",\n  371522: \"莘县\",\n  371523: \"茌平县\",\n  371524: \"东阿县\",\n  371525: \"冠县\",\n  371526: \"高唐县\",\n  371581: \"临清市\",\n  371600: \"滨州市\",\n  371601: \"市辖区\",\n  371602: \"滨城区\",\n  371603: \"沾化区\",\n  371621: \"惠民县\",\n  371622: \"阳信县\",\n  371623: \"无棣县\",\n  371625: \"博兴县\",\n  371626: \"邹平县\",\n  371700: \"菏泽市\",\n  371701: \"市辖区\",\n  371702: \"牡丹区\",\n  371703: \"定陶区\",\n  371721: \"曹县\",\n  371722: \"单县\",\n  371723: \"成武县\",\n  371724: \"巨野县\",\n  371725: \"郓城县\",\n  371726: \"鄄城县\",\n  371728: \"东明县\",\n  41e4: \"河南省\",\n  410100: \"郑州市\",\n  410101: \"市辖区\",\n  410102: \"中原区\",\n  410103: \"二七区\",\n  410104: \"管城回族区\",\n  410105: \"金水区\",\n  410106: \"上街区\",\n  410108: \"惠济区\",\n  410122: \"中牟县\",\n  410181: \"巩义市\",\n  410182: \"荥阳市\",\n  410183: \"新密市\",\n  410184: \"新郑市\",\n  410185: \"登封市\",\n  410200: \"开封市\",\n  410201: \"市辖区\",\n  410202: \"龙亭区\",\n  410203: \"顺河回族区\",\n  410204: \"鼓楼区\",\n  410205: \"禹王台区\",\n  410211: \"金明区\",\n  410212: \"祥符区\",\n  410221: \"杞县\",\n  410222: \"通许县\",\n  410223: \"尉氏县\",\n  410225: \"兰考县\",\n  410300: \"洛阳市\",\n  410301: \"市辖区\",\n  410302: \"老城区\",\n  410303: \"西工区\",\n  410304: \"瀍河回族区\",\n  410305: \"涧西区\",\n  410306: \"吉利区\",\n  410311: \"洛龙区\",\n  410322: \"孟津县\",\n  410323: \"新安县\",\n  410324: \"栾川县\",\n  410325: \"嵩县\",\n  410326: \"汝阳县\",\n  410327: \"宜阳县\",\n  410328: \"洛宁县\",\n  410329: \"伊川县\",\n  410381: \"偃师市\",\n  410400: \"平顶山市\",\n  410401: \"市辖区\",\n  410402: \"新华区\",\n  410403: \"卫东区\",\n  410404: \"石龙区\",\n  410411: \"湛河区\",\n  410421: \"宝丰县\",\n  410422: \"叶县\",\n  410423: \"鲁山县\",\n  410425: \"郏县\",\n  410481: \"舞钢市\",\n  410482: \"汝州市\",\n  410500: \"安阳市\",\n  410501: \"市辖区\",\n  410502: \"文峰区\",\n  410503: \"北关区\",\n  410505: \"殷都区\",\n  410506: \"龙安区\",\n  410522: \"安阳县\",\n  410523: \"汤阴县\",\n  410526: \"滑县\",\n  410527: \"内黄县\",\n  410581: \"林州市\",\n  410600: \"鹤壁市\",\n  410601: \"市辖区\",\n  410602: \"鹤山区\",\n  410603: \"山城区\",\n  410611: \"淇滨区\",\n  410621: \"浚县\",\n  410622: \"淇县\",\n  410700: \"新乡市\",\n  410701: \"市辖区\",\n  410702: \"红旗区\",\n  410703: \"卫滨区\",\n  410704: \"凤泉区\",\n  410711: \"牧野区\",\n  410721: \"新乡县\",\n  410724: \"获嘉县\",\n  410725: \"原阳县\",\n  410726: \"延津县\",\n  410727: \"封丘县\",\n  410728: \"长垣县\",\n  410781: \"卫辉市\",\n  410782: \"辉县市\",\n  410800: \"焦作市\",\n  410801: \"市辖区\",\n  410802: \"解放区\",\n  410803: \"中站区\",\n  410804: \"马村区\",\n  410811: \"山阳区\",\n  410821: \"修武县\",\n  410822: \"博爱县\",\n  410823: \"武陟县\",\n  410825: \"温县\",\n  410882: \"沁阳市\",\n  410883: \"孟州市\",\n  410900: \"濮阳市\",\n  410901: \"市辖区\",\n  410902: \"华龙区\",\n  410922: \"清丰县\",\n  410923: \"南乐县\",\n  410926: \"范县\",\n  410927: \"台前县\",\n  410928: \"濮阳县\",\n  411e3: \"许昌市\",\n  411001: \"市辖区\",\n  411002: \"魏都区\",\n  411023: \"许昌县\",\n  411024: \"鄢陵县\",\n  411025: \"襄城县\",\n  411081: \"禹州市\",\n  411082: \"长葛市\",\n  411100: \"漯河市\",\n  411101: \"市辖区\",\n  411102: \"源汇区\",\n  411103: \"郾城区\",\n  411104: \"召陵区\",\n  411121: \"舞阳县\",\n  411122: \"临颍县\",\n  411200: \"三门峡市\",\n  411201: \"市辖区\",\n  411202: \"湖滨区\",\n  411203: \"陕州区\",\n  411221: \"渑池县\",\n  411224: \"卢氏县\",\n  411281: \"义马市\",\n  411282: \"灵宝市\",\n  411300: \"南阳市\",\n  411301: \"市辖区\",\n  411302: \"宛城区\",\n  411303: \"卧龙区\",\n  411321: \"南召县\",\n  411322: \"方城县\",\n  411323: \"西峡县\",\n  411324: \"镇平县\",\n  411325: \"内乡县\",\n  411326: \"淅川县\",\n  411327: \"社旗县\",\n  411328: \"唐河县\",\n  411329: \"新野县\",\n  411330: \"桐柏县\",\n  411381: \"邓州市\",\n  411400: \"商丘市\",\n  411401: \"市辖区\",\n  411402: \"梁园区\",\n  411403: \"睢阳区\",\n  411421: \"民权县\",\n  411422: \"睢县\",\n  411423: \"宁陵县\",\n  411424: \"柘城县\",\n  411425: \"虞城县\",\n  411426: \"夏邑县\",\n  411481: \"永城市\",\n  411500: \"信阳市\",\n  411501: \"市辖区\",\n  411502: \"浉河区\",\n  411503: \"平桥区\",\n  411521: \"罗山县\",\n  411522: \"光山县\",\n  411523: \"新县\",\n  411524: \"商城县\",\n  411525: \"固始县\",\n  411526: \"潢川县\",\n  411527: \"淮滨县\",\n  411528: \"息县\",\n  411600: \"周口市\",\n  411601: \"市辖区\",\n  411602: \"川汇区\",\n  411621: \"扶沟县\",\n  411622: \"西华县\",\n  411623: \"商水县\",\n  411624: \"沈丘县\",\n  411625: \"郸城县\",\n  411626: \"淮阳县\",\n  411627: \"太康县\",\n  411628: \"鹿邑县\",\n  411681: \"项城市\",\n  411700: \"驻马店市\",\n  411701: \"市辖区\",\n  411702: \"驿城区\",\n  411721: \"西平县\",\n  411722: \"上蔡县\",\n  411723: \"平舆县\",\n  411724: \"正阳县\",\n  411725: \"确山县\",\n  411726: \"泌阳县\",\n  411727: \"汝南县\",\n  411728: \"遂平县\",\n  411729: \"新蔡县\",\n  419e3: \"省直辖县级行政区划\",\n  419001: \"济源市\",\n  42e4: \"湖北省\",\n  420100: \"武汉市\",\n  420101: \"市辖区\",\n  420102: \"江岸区\",\n  420103: \"江汉区\",\n  420104: \"硚口区\",\n  420105: \"汉阳区\",\n  420106: \"武昌区\",\n  420107: \"青山区\",\n  420111: \"洪山区\",\n  420112: \"东西湖区\",\n  420113: \"汉南区\",\n  420114: \"蔡甸区\",\n  420115: \"江夏区\",\n  420116: \"黄陂区\",\n  420117: \"新洲区\",\n  420200: \"黄石市\",\n  420201: \"市辖区\",\n  420202: \"黄石港区\",\n  420203: \"西塞山区\",\n  420204: \"下陆区\",\n  420205: \"铁山区\",\n  420222: \"阳新县\",\n  420281: \"大冶市\",\n  420300: \"十堰市\",\n  420301: \"市辖区\",\n  420302: \"茅箭区\",\n  420303: \"张湾区\",\n  420304: \"郧阳区\",\n  420322: \"郧西县\",\n  420323: \"竹山县\",\n  420324: \"竹溪县\",\n  420325: \"房县\",\n  420381: \"丹江口市\",\n  420500: \"宜昌市\",\n  420501: \"市辖区\",\n  420502: \"西陵区\",\n  420503: \"伍家岗区\",\n  420504: \"点军区\",\n  420505: \"猇亭区\",\n  420506: \"夷陵区\",\n  420525: \"远安县\",\n  420526: \"兴山县\",\n  420527: \"秭归县\",\n  420528: \"长阳土家族自治县\",\n  420529: \"五峰土家族自治县\",\n  420581: \"宜都市\",\n  420582: \"当阳市\",\n  420583: \"枝江市\",\n  420600: \"襄阳市\",\n  420601: \"市辖区\",\n  420602: \"襄城区\",\n  420606: \"樊城区\",\n  420607: \"襄州区\",\n  420624: \"南漳县\",\n  420625: \"谷城县\",\n  420626: \"保康县\",\n  420682: \"老河口市\",\n  420683: \"枣阳市\",\n  420684: \"宜城市\",\n  420700: \"鄂州市\",\n  420701: \"市辖区\",\n  420702: \"梁子湖区\",\n  420703: \"华容区\",\n  420704: \"鄂城区\",\n  420800: \"荆门市\",\n  420801: \"市辖区\",\n  420802: \"东宝区\",\n  420804: \"掇刀区\",\n  420821: \"京山县\",\n  420822: \"沙洋县\",\n  420881: \"钟祥市\",\n  420900: \"孝感市\",\n  420901: \"市辖区\",\n  420902: \"孝南区\",\n  420921: \"孝昌县\",\n  420922: \"大悟县\",\n  420923: \"云梦县\",\n  420981: \"应城市\",\n  420982: \"安陆市\",\n  420984: \"汉川市\",\n  421e3: \"荆州市\",\n  421001: \"市辖区\",\n  421002: \"沙市区\",\n  421003: \"荆州区\",\n  421022: \"公安县\",\n  421023: \"监利县\",\n  421024: \"江陵县\",\n  421081: \"石首市\",\n  421083: \"洪湖市\",\n  421087: \"松滋市\",\n  421100: \"黄冈市\",\n  421101: \"市辖区\",\n  421102: \"黄州区\",\n  421121: \"团风县\",\n  421122: \"红安县\",\n  421123: \"罗田县\",\n  421124: \"英山县\",\n  421125: \"浠水县\",\n  421126: \"蕲春县\",\n  421127: \"黄梅县\",\n  421181: \"麻城市\",\n  421182: \"武穴市\",\n  421200: \"咸宁市\",\n  421201: \"市辖区\",\n  421202: \"咸安区\",\n  421221: \"嘉鱼县\",\n  421222: \"通城县\",\n  421223: \"崇阳县\",\n  421224: \"通山县\",\n  421281: \"赤壁市\",\n  421300: \"随州市\",\n  421301: \"市辖区\",\n  421303: \"曾都区\",\n  421321: \"随县\",\n  421381: \"广水市\",\n  422800: \"恩施土家族苗族自治州\",\n  422801: \"恩施市\",\n  422802: \"利川市\",\n  422822: \"建始县\",\n  422823: \"巴东县\",\n  422825: \"宣恩县\",\n  422826: \"咸丰县\",\n  422827: \"来凤县\",\n  422828: \"鹤峰县\",\n  429e3: \"省直辖县级行政区划\",\n  429004: \"仙桃市\",\n  429005: \"潜江市\",\n  429006: \"天门市\",\n  429021: \"神农架林区\",\n  43e4: \"湖南省\",\n  430100: \"长沙市\",\n  430101: \"市辖区\",\n  430102: \"芙蓉区\",\n  430103: \"天心区\",\n  430104: \"岳麓区\",\n  430105: \"开福区\",\n  430111: \"雨花区\",\n  430112: \"望城区\",\n  430121: \"长沙县\",\n  430124: \"宁乡县\",\n  430181: \"浏阳市\",\n  430200: \"株洲市\",\n  430201: \"市辖区\",\n  430202: \"荷塘区\",\n  430203: \"芦淞区\",\n  430204: \"石峰区\",\n  430211: \"天元区\",\n  430221: \"株洲县\",\n  430223: \"攸县\",\n  430224: \"茶陵县\",\n  430225: \"炎陵县\",\n  430281: \"醴陵市\",\n  430300: \"湘潭市\",\n  430301: \"市辖区\",\n  430302: \"雨湖区\",\n  430304: \"岳塘区\",\n  430321: \"湘潭县\",\n  430381: \"湘乡市\",\n  430382: \"韶山市\",\n  430400: \"衡阳市\",\n  430401: \"市辖区\",\n  430405: \"珠晖区\",\n  430406: \"雁峰区\",\n  430407: \"石鼓区\",\n  430408: \"蒸湘区\",\n  430412: \"南岳区\",\n  430421: \"衡阳县\",\n  430422: \"衡南县\",\n  430423: \"衡山县\",\n  430424: \"衡东县\",\n  430426: \"祁东县\",\n  430481: \"耒阳市\",\n  430482: \"常宁市\",\n  430500: \"邵阳市\",\n  430501: \"市辖区\",\n  430502: \"双清区\",\n  430503: \"大祥区\",\n  430511: \"北塔区\",\n  430521: \"邵东县\",\n  430522: \"新邵县\",\n  430523: \"邵阳县\",\n  430524: \"隆回县\",\n  430525: \"洞口县\",\n  430527: \"绥宁县\",\n  430528: \"新宁县\",\n  430529: \"城步苗族自治县\",\n  430581: \"武冈市\",\n  430600: \"岳阳市\",\n  430601: \"市辖区\",\n  430602: \"岳阳楼区\",\n  430603: \"云溪区\",\n  430611: \"君山区\",\n  430621: \"岳阳县\",\n  430623: \"华容县\",\n  430624: \"湘阴县\",\n  430626: \"平江县\",\n  430681: \"汨罗市\",\n  430682: \"临湘市\",\n  430700: \"常德市\",\n  430701: \"市辖区\",\n  430702: \"武陵区\",\n  430703: \"鼎城区\",\n  430721: \"安乡县\",\n  430722: \"汉寿县\",\n  430723: \"澧县\",\n  430724: \"临澧县\",\n  430725: \"桃源县\",\n  430726: \"石门县\",\n  430781: \"津市市\",\n  430800: \"张家界市\",\n  430801: \"市辖区\",\n  430802: \"永定区\",\n  430811: \"武陵源区\",\n  430821: \"慈利县\",\n  430822: \"桑植县\",\n  430900: \"益阳市\",\n  430901: \"市辖区\",\n  430902: \"资阳区\",\n  430903: \"赫山区\",\n  430921: \"南县\",\n  430922: \"桃江县\",\n  430923: \"安化县\",\n  430981: \"沅江市\",\n  431e3: \"郴州市\",\n  431001: \"市辖区\",\n  431002: \"北湖区\",\n  431003: \"苏仙区\",\n  431021: \"桂阳县\",\n  431022: \"宜章县\",\n  431023: \"永兴县\",\n  431024: \"嘉禾县\",\n  431025: \"临武县\",\n  431026: \"汝城县\",\n  431027: \"桂东县\",\n  431028: \"安仁县\",\n  431081: \"资兴市\",\n  431100: \"永州市\",\n  431101: \"市辖区\",\n  431102: \"零陵区\",\n  431103: \"冷水滩区\",\n  431121: \"祁阳县\",\n  431122: \"东安县\",\n  431123: \"双牌县\",\n  431124: \"道县\",\n  431125: \"江永县\",\n  431126: \"宁远县\",\n  431127: \"蓝山县\",\n  431128: \"新田县\",\n  431129: \"江华瑶族自治县\",\n  431200: \"怀化市\",\n  431201: \"市辖区\",\n  431202: \"鹤城区\",\n  431221: \"中方县\",\n  431222: \"沅陵县\",\n  431223: \"辰溪县\",\n  431224: \"溆浦县\",\n  431225: \"会同县\",\n  431226: \"麻阳苗族自治县\",\n  431227: \"新晃侗族自治县\",\n  431228: \"芷江侗族自治县\",\n  431229: \"靖州苗族侗族自治县\",\n  431230: \"通道侗族自治县\",\n  431281: \"洪江市\",\n  431300: \"娄底市\",\n  431301: \"市辖区\",\n  431302: \"娄星区\",\n  431321: \"双峰县\",\n  431322: \"新化县\",\n  431381: \"冷水江市\",\n  431382: \"涟源市\",\n  433100: \"湘西土家族苗族自治州\",\n  433101: \"吉首市\",\n  433122: \"泸溪县\",\n  433123: \"凤凰县\",\n  433124: \"花垣县\",\n  433125: \"保靖县\",\n  433126: \"古丈县\",\n  433127: \"永顺县\",\n  433130: \"龙山县\",\n  44e4: \"广东省\",\n  440100: \"广州市\",\n  440101: \"市辖区\",\n  440103: \"荔湾区\",\n  440104: \"越秀区\",\n  440105: \"海珠区\",\n  440106: \"天河区\",\n  440111: \"白云区\",\n  440112: \"黄埔区\",\n  440113: \"番禺区\",\n  440114: \"花都区\",\n  440115: \"南沙区\",\n  440117: \"从化区\",\n  440118: \"增城区\",\n  440200: \"韶关市\",\n  440201: \"市辖区\",\n  440203: \"武江区\",\n  440204: \"浈江区\",\n  440205: \"曲江区\",\n  440222: \"始兴县\",\n  440224: \"仁化县\",\n  440229: \"翁源县\",\n  440232: \"乳源瑶族自治县\",\n  440233: \"新丰县\",\n  440281: \"乐昌市\",\n  440282: \"南雄市\",\n  440300: \"深圳市\",\n  440301: \"市辖区\",\n  440303: \"罗湖区\",\n  440304: \"福田区\",\n  440305: \"南山区\",\n  440306: \"宝安区\",\n  440307: \"龙岗区\",\n  440308: \"盐田区\",\n  440400: \"珠海市\",\n  440401: \"市辖区\",\n  440402: \"香洲区\",\n  440403: \"斗门区\",\n  440404: \"金湾区\",\n  440500: \"汕头市\",\n  440501: \"市辖区\",\n  440507: \"龙湖区\",\n  440511: \"金平区\",\n  440512: \"濠江区\",\n  440513: \"潮阳区\",\n  440514: \"潮南区\",\n  440515: \"澄海区\",\n  440523: \"南澳县\",\n  440600: \"佛山市\",\n  440601: \"市辖区\",\n  440604: \"禅城区\",\n  440605: \"南海区\",\n  440606: \"顺德区\",\n  440607: \"三水区\",\n  440608: \"高明区\",\n  440700: \"江门市\",\n  440701: \"市辖区\",\n  440703: \"蓬江区\",\n  440704: \"江海区\",\n  440705: \"新会区\",\n  440781: \"台山市\",\n  440783: \"开平市\",\n  440784: \"鹤山市\",\n  440785: \"恩平市\",\n  440800: \"湛江市\",\n  440801: \"市辖区\",\n  440802: \"赤坎区\",\n  440803: \"霞山区\",\n  440804: \"坡头区\",\n  440811: \"麻章区\",\n  440823: \"遂溪县\",\n  440825: \"徐闻县\",\n  440881: \"廉江市\",\n  440882: \"雷州市\",\n  440883: \"吴川市\",\n  440900: \"茂名市\",\n  440901: \"市辖区\",\n  440902: \"茂南区\",\n  440904: \"电白区\",\n  440981: \"高州市\",\n  440982: \"化州市\",\n  440983: \"信宜市\",\n  441200: \"肇庆市\",\n  441201: \"市辖区\",\n  441202: \"端州区\",\n  441203: \"鼎湖区\",\n  441204: \"高要区\",\n  441223: \"广宁县\",\n  441224: \"怀集县\",\n  441225: \"封开县\",\n  441226: \"德庆县\",\n  441284: \"四会市\",\n  441300: \"惠州市\",\n  441301: \"市辖区\",\n  441302: \"惠城区\",\n  441303: \"惠阳区\",\n  441322: \"博罗县\",\n  441323: \"惠东县\",\n  441324: \"龙门县\",\n  441400: \"梅州市\",\n  441401: \"市辖区\",\n  441402: \"梅江区\",\n  441403: \"梅县区\",\n  441422: \"大埔县\",\n  441423: \"丰顺县\",\n  441424: \"五华县\",\n  441426: \"平远县\",\n  441427: \"蕉岭县\",\n  441481: \"兴宁市\",\n  441500: \"汕尾市\",\n  441501: \"市辖区\",\n  441502: \"城区\",\n  441521: \"海丰县\",\n  441523: \"陆河县\",\n  441581: \"陆丰市\",\n  441600: \"河源市\",\n  441601: \"市辖区\",\n  441602: \"源城区\",\n  441621: \"紫金县\",\n  441622: \"龙川县\",\n  441623: \"连平县\",\n  441624: \"和平县\",\n  441625: \"东源县\",\n  441700: \"阳江市\",\n  441701: \"市辖区\",\n  441702: \"江城区\",\n  441704: \"阳东区\",\n  441721: \"阳西县\",\n  441781: \"阳春市\",\n  441800: \"清远市\",\n  441801: \"市辖区\",\n  441802: \"清城区\",\n  441803: \"清新区\",\n  441821: \"佛冈县\",\n  441823: \"阳山县\",\n  441825: \"连山壮族瑶族自治县\",\n  441826: \"连南瑶族自治县\",\n  441881: \"英德市\",\n  441882: \"连州市\",\n  441900: \"东莞市\",\n  442e3: \"中山市\",\n  445100: \"潮州市\",\n  445101: \"市辖区\",\n  445102: \"湘桥区\",\n  445103: \"潮安区\",\n  445122: \"饶平县\",\n  445200: \"揭阳市\",\n  445201: \"市辖区\",\n  445202: \"榕城区\",\n  445203: \"揭东区\",\n  445222: \"揭西县\",\n  445224: \"惠来县\",\n  445281: \"普宁市\",\n  445300: \"云浮市\",\n  445301: \"市辖区\",\n  445302: \"云城区\",\n  445303: \"云安区\",\n  445321: \"新兴县\",\n  445322: \"郁南县\",\n  445381: \"罗定市\",\n  45e4: \"广西壮族自治区\",\n  450100: \"南宁市\",\n  450101: \"市辖区\",\n  450102: \"兴宁区\",\n  450103: \"青秀区\",\n  450105: \"江南区\",\n  450107: \"西乡塘区\",\n  450108: \"良庆区\",\n  450109: \"邕宁区\",\n  450110: \"武鸣区\",\n  450123: \"隆安县\",\n  450124: \"马山县\",\n  450125: \"上林县\",\n  450126: \"宾阳县\",\n  450127: \"横县\",\n  450200: \"柳州市\",\n  450201: \"市辖区\",\n  450202: \"城中区\",\n  450203: \"鱼峰区\",\n  450204: \"柳南区\",\n  450205: \"柳北区\",\n  450206: \"柳江区\",\n  450222: \"柳城县\",\n  450223: \"鹿寨县\",\n  450224: \"融安县\",\n  450225: \"融水苗族自治县\",\n  450226: \"三江侗族自治县\",\n  450300: \"桂林市\",\n  450301: \"市辖区\",\n  450302: \"秀峰区\",\n  450303: \"叠彩区\",\n  450304: \"象山区\",\n  450305: \"七星区\",\n  450311: \"雁山区\",\n  450312: \"临桂区\",\n  450321: \"阳朔县\",\n  450323: \"灵川县\",\n  450324: \"全州县\",\n  450325: \"兴安县\",\n  450326: \"永福县\",\n  450327: \"灌阳县\",\n  450328: \"龙胜各族自治县\",\n  450329: \"资源县\",\n  450330: \"平乐县\",\n  450331: \"荔浦县\",\n  450332: \"恭城瑶族自治县\",\n  450400: \"梧州市\",\n  450401: \"市辖区\",\n  450403: \"万秀区\",\n  450405: \"长洲区\",\n  450406: \"龙圩区\",\n  450421: \"苍梧县\",\n  450422: \"藤县\",\n  450423: \"蒙山县\",\n  450481: \"岑溪市\",\n  450500: \"北海市\",\n  450501: \"市辖区\",\n  450502: \"海城区\",\n  450503: \"银海区\",\n  450512: \"铁山港区\",\n  450521: \"合浦县\",\n  450600: \"防城港市\",\n  450601: \"市辖区\",\n  450602: \"港口区\",\n  450603: \"防城区\",\n  450621: \"上思县\",\n  450681: \"东兴市\",\n  450700: \"钦州市\",\n  450701: \"市辖区\",\n  450702: \"钦南区\",\n  450703: \"钦北区\",\n  450721: \"灵山县\",\n  450722: \"浦北县\",\n  450800: \"贵港市\",\n  450801: \"市辖区\",\n  450802: \"港北区\",\n  450803: \"港南区\",\n  450804: \"覃塘区\",\n  450821: \"平南县\",\n  450881: \"桂平市\",\n  450900: \"玉林市\",\n  450901: \"市辖区\",\n  450902: \"玉州区\",\n  450903: \"福绵区\",\n  450921: \"容县\",\n  450922: \"陆川县\",\n  450923: \"博白县\",\n  450924: \"兴业县\",\n  450981: \"北流市\",\n  451e3: \"百色市\",\n  451001: \"市辖区\",\n  451002: \"右江区\",\n  451021: \"田阳县\",\n  451022: \"田东县\",\n  451023: \"平果县\",\n  451024: \"德保县\",\n  451026: \"那坡县\",\n  451027: \"凌云县\",\n  451028: \"乐业县\",\n  451029: \"田林县\",\n  451030: \"西林县\",\n  451031: \"隆林各族自治县\",\n  451081: \"靖西市\",\n  451100: \"贺州市\",\n  451101: \"市辖区\",\n  451102: \"八步区\",\n  451103: \"平桂区\",\n  451121: \"昭平县\",\n  451122: \"钟山县\",\n  451123: \"富川瑶族自治县\",\n  451200: \"河池市\",\n  451201: \"市辖区\",\n  451202: \"金城江区\",\n  451221: \"南丹县\",\n  451222: \"天峨县\",\n  451223: \"凤山县\",\n  451224: \"东兰县\",\n  451225: \"罗城仫佬族自治县\",\n  451226: \"环江毛南族自治县\",\n  451227: \"巴马瑶族自治县\",\n  451228: \"都安瑶族自治县\",\n  451229: \"大化瑶族自治县\",\n  451281: \"宜州市\",\n  451300: \"来宾市\",\n  451301: \"市辖区\",\n  451302: \"兴宾区\",\n  451321: \"忻城县\",\n  451322: \"象州县\",\n  451323: \"武宣县\",\n  451324: \"金秀瑶族自治县\",\n  451381: \"合山市\",\n  451400: \"崇左市\",\n  451401: \"市辖区\",\n  451402: \"江州区\",\n  451421: \"扶绥县\",\n  451422: \"宁明县\",\n  451423: \"龙州县\",\n  451424: \"大新县\",\n  451425: \"天等县\",\n  451481: \"凭祥市\",\n  46e4: \"海南省\",\n  460100: \"海口市\",\n  460101: \"市辖区\",\n  460105: \"秀英区\",\n  460106: \"龙华区\",\n  460107: \"琼山区\",\n  460108: \"美兰区\",\n  460200: \"三亚市\",\n  460201: \"市辖区\",\n  460202: \"海棠区\",\n  460203: \"吉阳区\",\n  460204: \"天涯区\",\n  460205: \"崖州区\",\n  460300: \"三沙市\",\n  460400: \"儋州市\",\n  469e3: \"省直辖县级行政区划\",\n  469001: \"五指山市\",\n  469002: \"琼海市\",\n  469005: \"文昌市\",\n  469006: \"万宁市\",\n  469007: \"东方市\",\n  469021: \"定安县\",\n  469022: \"屯昌县\",\n  469023: \"澄迈县\",\n  469024: \"临高县\",\n  469025: \"白沙黎族自治县\",\n  469026: \"昌江黎族自治县\",\n  469027: \"乐东黎族自治县\",\n  469028: \"陵水黎族自治县\",\n  469029: \"保亭黎族苗族自治县\",\n  469030: \"琼中黎族苗族自治县\",\n  5e5: \"重庆市\",\n  500100: \"市辖区\",\n  500101: \"万州区\",\n  500102: \"涪陵区\",\n  500103: \"渝中区\",\n  500104: \"大渡口区\",\n  500105: \"江北区\",\n  500106: \"沙坪坝区\",\n  500107: \"九龙坡区\",\n  500108: \"南岸区\",\n  500109: \"北碚区\",\n  500110: \"綦江区\",\n  500111: \"大足区\",\n  500112: \"渝北区\",\n  500113: \"巴南区\",\n  500114: \"黔江区\",\n  500115: \"长寿区\",\n  500116: \"江津区\",\n  500117: \"合川区\",\n  500118: \"永川区\",\n  500119: \"南川区\",\n  500120: \"璧山区\",\n  500151: \"铜梁区\",\n  500152: \"潼南区\",\n  500153: \"荣昌区\",\n  500154: \"开州区\",\n  500200: \"县\",\n  500228: \"梁平县\",\n  500229: \"城口县\",\n  500230: \"丰都县\",\n  500231: \"垫江县\",\n  500232: \"武隆县\",\n  500233: \"忠县\",\n  500235: \"云阳县\",\n  500236: \"奉节县\",\n  500237: \"巫山县\",\n  500238: \"巫溪县\",\n  500240: \"石柱土家族自治县\",\n  500241: \"秀山土家族苗族自治县\",\n  500242: \"酉阳土家族苗族自治县\",\n  500243: \"彭水苗族土家族自治县\",\n  51e4: \"四川省\",\n  510100: \"成都市\",\n  510101: \"市辖区\",\n  510104: \"锦江区\",\n  510105: \"青羊区\",\n  510106: \"金牛区\",\n  510107: \"武侯区\",\n  510108: \"成华区\",\n  510112: \"龙泉驿区\",\n  510113: \"青白江区\",\n  510114: \"新都区\",\n  510115: \"温江区\",\n  510116: \"双流区\",\n  510121: \"金堂县\",\n  510124: \"郫县\",\n  510129: \"大邑县\",\n  510131: \"蒲江县\",\n  510132: \"新津县\",\n  510181: \"都江堰市\",\n  510182: \"彭州市\",\n  510183: \"邛崃市\",\n  510184: \"崇州市\",\n  510185: \"简阳市\",\n  510300: \"自贡市\",\n  510301: \"市辖区\",\n  510302: \"自流井区\",\n  510303: \"贡井区\",\n  510304: \"大安区\",\n  510311: \"沿滩区\",\n  510321: \"荣县\",\n  510322: \"富顺县\",\n  510400: \"攀枝花市\",\n  510401: \"市辖区\",\n  510402: \"东区\",\n  510403: \"西区\",\n  510411: \"仁和区\",\n  510421: \"米易县\",\n  510422: \"盐边县\",\n  510500: \"泸州市\",\n  510501: \"市辖区\",\n  510502: \"江阳区\",\n  510503: \"纳溪区\",\n  510504: \"龙马潭区\",\n  510521: \"泸县\",\n  510522: \"合江县\",\n  510524: \"叙永县\",\n  510525: \"古蔺县\",\n  510600: \"德阳市\",\n  510601: \"市辖区\",\n  510603: \"旌阳区\",\n  510623: \"中江县\",\n  510626: \"罗江县\",\n  510681: \"广汉市\",\n  510682: \"什邡市\",\n  510683: \"绵竹市\",\n  510700: \"绵阳市\",\n  510701: \"市辖区\",\n  510703: \"涪城区\",\n  510704: \"游仙区\",\n  510705: \"安州区\",\n  510722: \"三台县\",\n  510723: \"盐亭县\",\n  510725: \"梓潼县\",\n  510726: \"北川羌族自治县\",\n  510727: \"平武县\",\n  510781: \"江油市\",\n  510800: \"广元市\",\n  510801: \"市辖区\",\n  510802: \"利州区\",\n  510811: \"昭化区\",\n  510812: \"朝天区\",\n  510821: \"旺苍县\",\n  510822: \"青川县\",\n  510823: \"剑阁县\",\n  510824: \"苍溪县\",\n  510900: \"遂宁市\",\n  510901: \"市辖区\",\n  510903: \"船山区\",\n  510904: \"安居区\",\n  510921: \"蓬溪县\",\n  510922: \"射洪县\",\n  510923: \"大英县\",\n  511e3: \"内江市\",\n  511001: \"市辖区\",\n  511002: \"市中区\",\n  511011: \"东兴区\",\n  511024: \"威远县\",\n  511025: \"资中县\",\n  511028: \"隆昌县\",\n  511100: \"乐山市\",\n  511101: \"市辖区\",\n  511102: \"市中区\",\n  511111: \"沙湾区\",\n  511112: \"五通桥区\",\n  511113: \"金口河区\",\n  511123: \"犍为县\",\n  511124: \"井研县\",\n  511126: \"夹江县\",\n  511129: \"沐川县\",\n  511132: \"峨边彝族自治县\",\n  511133: \"马边彝族自治县\",\n  511181: \"峨眉山市\",\n  511300: \"南充市\",\n  511301: \"市辖区\",\n  511302: \"顺庆区\",\n  511303: \"高坪区\",\n  511304: \"嘉陵区\",\n  511321: \"南部县\",\n  511322: \"营山县\",\n  511323: \"蓬安县\",\n  511324: \"仪陇县\",\n  511325: \"西充县\",\n  511381: \"阆中市\",\n  511400: \"眉山市\",\n  511401: \"市辖区\",\n  511402: \"东坡区\",\n  511403: \"彭山区\",\n  511421: \"仁寿县\",\n  511423: \"洪雅县\",\n  511424: \"丹棱县\",\n  511425: \"青神县\",\n  511500: \"宜宾市\",\n  511501: \"市辖区\",\n  511502: \"翠屏区\",\n  511503: \"南溪区\",\n  511521: \"宜宾县\",\n  511523: \"江安县\",\n  511524: \"长宁县\",\n  511525: \"高县\",\n  511526: \"珙县\",\n  511527: \"筠连县\",\n  511528: \"兴文县\",\n  511529: \"屏山县\",\n  511600: \"广安市\",\n  511601: \"市辖区\",\n  511602: \"广安区\",\n  511603: \"前锋区\",\n  511621: \"岳池县\",\n  511622: \"武胜县\",\n  511623: \"邻水县\",\n  511681: \"华蓥市\",\n  511700: \"达州市\",\n  511701: \"市辖区\",\n  511702: \"通川区\",\n  511703: \"达川区\",\n  511722: \"宣汉县\",\n  511723: \"开江县\",\n  511724: \"大竹县\",\n  511725: \"渠县\",\n  511781: \"万源市\",\n  511800: \"雅安市\",\n  511801: \"市辖区\",\n  511802: \"雨城区\",\n  511803: \"名山区\",\n  511822: \"荥经县\",\n  511823: \"汉源县\",\n  511824: \"石棉县\",\n  511825: \"天全县\",\n  511826: \"芦山县\",\n  511827: \"宝兴县\",\n  511900: \"巴中市\",\n  511901: \"市辖区\",\n  511902: \"巴州区\",\n  511903: \"恩阳区\",\n  511921: \"通江县\",\n  511922: \"南江县\",\n  511923: \"平昌县\",\n  512e3: \"资阳市\",\n  512001: \"市辖区\",\n  512002: \"雁江区\",\n  512021: \"安岳县\",\n  512022: \"乐至县\",\n  513200: \"阿坝藏族羌族自治州\",\n  513201: \"马尔康市\",\n  513221: \"汶川县\",\n  513222: \"理县\",\n  513223: \"茂县\",\n  513224: \"松潘县\",\n  513225: \"九寨沟县\",\n  513226: \"金川县\",\n  513227: \"小金县\",\n  513228: \"黑水县\",\n  513230: \"壤塘县\",\n  513231: \"阿坝县\",\n  513232: \"若尔盖县\",\n  513233: \"红原县\",\n  513300: \"甘孜藏族自治州\",\n  513301: \"康定市\",\n  513322: \"泸定县\",\n  513323: \"丹巴县\",\n  513324: \"九龙县\",\n  513325: \"雅江县\",\n  513326: \"道孚县\",\n  513327: \"炉霍县\",\n  513328: \"甘孜县\",\n  513329: \"新龙县\",\n  513330: \"德格县\",\n  513331: \"白玉县\",\n  513332: \"石渠县\",\n  513333: \"色达县\",\n  513334: \"理塘县\",\n  513335: \"巴塘县\",\n  513336: \"乡城县\",\n  513337: \"稻城县\",\n  513338: \"得荣县\",\n  513400: \"凉山彝族自治州\",\n  513401: \"西昌市\",\n  513422: \"木里藏族自治县\",\n  513423: \"盐源县\",\n  513424: \"德昌县\",\n  513425: \"会理县\",\n  513426: \"会东县\",\n  513427: \"宁南县\",\n  513428: \"普格县\",\n  513429: \"布拖县\",\n  513430: \"金阳县\",\n  513431: \"昭觉县\",\n  513432: \"喜德县\",\n  513433: \"冕宁县\",\n  513434: \"越西县\",\n  513435: \"甘洛县\",\n  513436: \"美姑县\",\n  513437: \"雷波县\",\n  52e4: \"贵州省\",\n  520100: \"贵阳市\",\n  520101: \"市辖区\",\n  520102: \"南明区\",\n  520103: \"云岩区\",\n  520111: \"花溪区\",\n  520112: \"乌当区\",\n  520113: \"白云区\",\n  520115: \"观山湖区\",\n  520121: \"开阳县\",\n  520122: \"息烽县\",\n  520123: \"修文县\",\n  520181: \"清镇市\",\n  520200: \"六盘水市\",\n  520201: \"钟山区\",\n  520203: \"六枝特区\",\n  520221: \"水城县\",\n  520222: \"盘县\",\n  520300: \"遵义市\",\n  520301: \"市辖区\",\n  520302: \"红花岗区\",\n  520303: \"汇川区\",\n  520304: \"播州区\",\n  520322: \"桐梓县\",\n  520323: \"绥阳县\",\n  520324: \"正安县\",\n  520325: \"道真仡佬族苗族自治县\",\n  520326: \"务川仡佬族苗族自治县\",\n  520327: \"凤冈县\",\n  520328: \"湄潭县\",\n  520329: \"余庆县\",\n  520330: \"习水县\",\n  520381: \"赤水市\",\n  520382: \"仁怀市\",\n  520400: \"安顺市\",\n  520401: \"市辖区\",\n  520402: \"西秀区\",\n  520403: \"平坝区\",\n  520422: \"普定县\",\n  520423: \"镇宁布依族苗族自治县\",\n  520424: \"关岭布依族苗族自治县\",\n  520425: \"紫云苗族布依族自治县\",\n  520500: \"毕节市\",\n  520501: \"市辖区\",\n  520502: \"七星关区\",\n  520521: \"大方县\",\n  520522: \"黔西县\",\n  520523: \"金沙县\",\n  520524: \"织金县\",\n  520525: \"纳雍县\",\n  520526: \"威宁彝族回族苗族自治县\",\n  520527: \"赫章县\",\n  520600: \"铜仁市\",\n  520601: \"市辖区\",\n  520602: \"碧江区\",\n  520603: \"万山区\",\n  520621: \"江口县\",\n  520622: \"玉屏侗族自治县\",\n  520623: \"石阡县\",\n  520624: \"思南县\",\n  520625: \"印江土家族苗族自治县\",\n  520626: \"德江县\",\n  520627: \"沿河土家族自治县\",\n  520628: \"松桃苗族自治县\",\n  522300: \"黔西南布依族苗族自治州\",\n  522301: \"兴义市\",\n  522322: \"兴仁县\",\n  522323: \"普安县\",\n  522324: \"晴隆县\",\n  522325: \"贞丰县\",\n  522326: \"望谟县\",\n  522327: \"册亨县\",\n  522328: \"安龙县\",\n  522600: \"黔东南苗族侗族自治州\",\n  522601: \"凯里市\",\n  522622: \"黄平县\",\n  522623: \"施秉县\",\n  522624: \"三穗县\",\n  522625: \"镇远县\",\n  522626: \"岑巩县\",\n  522627: \"天柱县\",\n  522628: \"锦屏县\",\n  522629: \"剑河县\",\n  522630: \"台江县\",\n  522631: \"黎平县\",\n  522632: \"榕江县\",\n  522633: \"从江县\",\n  522634: \"雷山县\",\n  522635: \"麻江县\",\n  522636: \"丹寨县\",\n  522700: \"黔南布依族苗族自治州\",\n  522701: \"都匀市\",\n  522702: \"福泉市\",\n  522722: \"荔波县\",\n  522723: \"贵定县\",\n  522725: \"瓮安县\",\n  522726: \"独山县\",\n  522727: \"平塘县\",\n  522728: \"罗甸县\",\n  522729: \"长顺县\",\n  522730: \"龙里县\",\n  522731: \"惠水县\",\n  522732: \"三都水族自治县\",\n  53e4: \"云南省\",\n  530100: \"昆明市\",\n  530101: \"市辖区\",\n  530102: \"五华区\",\n  530103: \"盘龙区\",\n  530111: \"官渡区\",\n  530112: \"西山区\",\n  530113: \"东川区\",\n  530114: \"呈贡区\",\n  530122: \"晋宁县\",\n  530124: \"富民县\",\n  530125: \"宜良县\",\n  530126: \"石林彝族自治县\",\n  530127: \"嵩明县\",\n  530128: \"禄劝彝族苗族自治县\",\n  530129: \"寻甸回族彝族自治县\",\n  530181: \"安宁市\",\n  530300: \"曲靖市\",\n  530301: \"市辖区\",\n  530302: \"麒麟区\",\n  530303: \"沾益区\",\n  530321: \"马龙县\",\n  530322: \"陆良县\",\n  530323: \"师宗县\",\n  530324: \"罗平县\",\n  530325: \"富源县\",\n  530326: \"会泽县\",\n  530381: \"宣威市\",\n  530400: \"玉溪市\",\n  530401: \"市辖区\",\n  530402: \"红塔区\",\n  530403: \"江川区\",\n  530422: \"澄江县\",\n  530423: \"通海县\",\n  530424: \"华宁县\",\n  530425: \"易门县\",\n  530426: \"峨山彝族自治县\",\n  530427: \"新平彝族傣族自治县\",\n  530428: \"元江哈尼族彝族傣族自治县\",\n  530500: \"保山市\",\n  530501: \"市辖区\",\n  530502: \"隆阳区\",\n  530521: \"施甸县\",\n  530523: \"龙陵县\",\n  530524: \"昌宁县\",\n  530581: \"腾冲市\",\n  530600: \"昭通市\",\n  530601: \"市辖区\",\n  530602: \"昭阳区\",\n  530621: \"鲁甸县\",\n  530622: \"巧家县\",\n  530623: \"盐津县\",\n  530624: \"大关县\",\n  530625: \"永善县\",\n  530626: \"绥江县\",\n  530627: \"镇雄县\",\n  530628: \"彝良县\",\n  530629: \"威信县\",\n  530630: \"水富县\",\n  530700: \"丽江市\",\n  530701: \"市辖区\",\n  530702: \"古城区\",\n  530721: \"玉龙纳西族自治县\",\n  530722: \"永胜县\",\n  530723: \"华坪县\",\n  530724: \"宁蒗彝族自治县\",\n  530800: \"普洱市\",\n  530801: \"市辖区\",\n  530802: \"思茅区\",\n  530821: \"宁洱哈尼族彝族自治县\",\n  530822: \"墨江哈尼族自治县\",\n  530823: \"景东彝族自治县\",\n  530824: \"景谷傣族彝族自治县\",\n  530825: \"镇沅彝族哈尼族拉祜族自治县\",\n  530826: \"江城哈尼族彝族自治县\",\n  530827: \"孟连傣族拉祜族佤族自治县\",\n  530828: \"澜沧拉祜族自治县\",\n  530829: \"西盟佤族自治县\",\n  530900: \"临沧市\",\n  530901: \"市辖区\",\n  530902: \"临翔区\",\n  530921: \"凤庆县\",\n  530922: \"云县\",\n  530923: \"永德县\",\n  530924: \"镇康县\",\n  530925: \"双江拉祜族佤族布朗族傣族自治县\",\n  530926: \"耿马傣族佤族自治县\",\n  530927: \"沧源佤族自治县\",\n  532300: \"楚雄彝族自治州\",\n  532301: \"楚雄市\",\n  532322: \"双柏县\",\n  532323: \"牟定县\",\n  532324: \"南华县\",\n  532325: \"姚安县\",\n  532326: \"大姚县\",\n  532327: \"永仁县\",\n  532328: \"元谋县\",\n  532329: \"武定县\",\n  532331: \"禄丰县\",\n  532500: \"红河哈尼族彝族自治州\",\n  532501: \"个旧市\",\n  532502: \"开远市\",\n  532503: \"蒙自市\",\n  532504: \"弥勒市\",\n  532523: \"屏边苗族自治县\",\n  532524: \"建水县\",\n  532525: \"石屏县\",\n  532527: \"泸西县\",\n  532528: \"元阳县\",\n  532529: \"红河县\",\n  532530: \"金平苗族瑶族傣族自治县\",\n  532531: \"绿春县\",\n  532532: \"河口瑶族自治县\",\n  532600: \"文山壮族苗族自治州\",\n  532601: \"文山市\",\n  532622: \"砚山县\",\n  532623: \"西畴县\",\n  532624: \"麻栗坡县\",\n  532625: \"马关县\",\n  532626: \"丘北县\",\n  532627: \"广南县\",\n  532628: \"富宁县\",\n  532800: \"西双版纳傣族自治州\",\n  532801: \"景洪市\",\n  532822: \"勐海县\",\n  532823: \"勐腊县\",\n  532900: \"大理白族自治州\",\n  532901: \"大理市\",\n  532922: \"漾濞彝族自治县\",\n  532923: \"祥云县\",\n  532924: \"宾川县\",\n  532925: \"弥渡县\",\n  532926: \"南涧彝族自治县\",\n  532927: \"巍山彝族回族自治县\",\n  532928: \"永平县\",\n  532929: \"云龙县\",\n  532930: \"洱源县\",\n  532931: \"剑川县\",\n  532932: \"鹤庆县\",\n  533100: \"德宏傣族景颇族自治州\",\n  533102: \"瑞丽市\",\n  533103: \"芒市\",\n  533122: \"梁河县\",\n  533123: \"盈江县\",\n  533124: \"陇川县\",\n  533300: \"怒江傈僳族自治州\",\n  533301: \"泸水市\",\n  533323: \"福贡县\",\n  533324: \"贡山独龙族怒族自治县\",\n  533325: \"兰坪白族普米族自治县\",\n  533400: \"迪庆藏族自治州\",\n  533401: \"香格里拉市\",\n  533422: \"德钦县\",\n  533423: \"维西傈僳族自治县\",\n  54e4: \"西藏自治区\",\n  540100: \"拉萨市\",\n  540101: \"市辖区\",\n  540102: \"城关区\",\n  540103: \"堆龙德庆区\",\n  540121: \"林周县\",\n  540122: \"当雄县\",\n  540123: \"尼木县\",\n  540124: \"曲水县\",\n  540126: \"达孜县\",\n  540127: \"墨竹工卡县\",\n  540200: \"日喀则市\",\n  540202: \"桑珠孜区\",\n  540221: \"南木林县\",\n  540222: \"江孜县\",\n  540223: \"定日县\",\n  540224: \"萨迦县\",\n  540225: \"拉孜县\",\n  540226: \"昂仁县\",\n  540227: \"谢通门县\",\n  540228: \"白朗县\",\n  540229: \"仁布县\",\n  540230: \"康马县\",\n  540231: \"定结县\",\n  540232: \"仲巴县\",\n  540233: \"亚东县\",\n  540234: \"吉隆县\",\n  540235: \"聂拉木县\",\n  540236: \"萨嘎县\",\n  540237: \"岗巴县\",\n  540300: \"昌都市\",\n  540302: \"卡若区\",\n  540321: \"江达县\",\n  540322: \"贡觉县\",\n  540323: \"类乌齐县\",\n  540324: \"丁青县\",\n  540325: \"察雅县\",\n  540326: \"八宿县\",\n  540327: \"左贡县\",\n  540328: \"芒康县\",\n  540329: \"洛隆县\",\n  540330: \"边坝县\",\n  540400: \"林芝市\",\n  540402: \"巴宜区\",\n  540421: \"工布江达县\",\n  540422: \"米林县\",\n  540423: \"墨脱县\",\n  540424: \"波密县\",\n  540425: \"察隅县\",\n  540426: \"朗县\",\n  540500: \"山南市\",\n  540501: \"市辖区\",\n  540502: \"乃东区\",\n  540521: \"扎囊县\",\n  540522: \"贡嘎县\",\n  540523: \"桑日县\",\n  540524: \"琼结县\",\n  540525: \"曲松县\",\n  540526: \"措美县\",\n  540527: \"洛扎县\",\n  540528: \"加查县\",\n  540529: \"隆子县\",\n  540530: \"错那县\",\n  540531: \"浪卡子县\",\n  542400: \"那曲地区\",\n  542421: \"那曲县\",\n  542422: \"嘉黎县\",\n  542423: \"比如县\",\n  542424: \"聂荣县\",\n  542425: \"安多县\",\n  542426: \"申扎县\",\n  542427: \"索县\",\n  542428: \"班戈县\",\n  542429: \"巴青县\",\n  542430: \"尼玛县\",\n  542431: \"双湖县\",\n  542500: \"阿里地区\",\n  542521: \"普兰县\",\n  542522: \"札达县\",\n  542523: \"噶尔县\",\n  542524: \"日土县\",\n  542525: \"革吉县\",\n  542526: \"改则县\",\n  542527: \"措勤县\",\n  61e4: \"陕西省\",\n  610100: \"西安市\",\n  610101: \"市辖区\",\n  610102: \"新城区\",\n  610103: \"碑林区\",\n  610104: \"莲湖区\",\n  610111: \"灞桥区\",\n  610112: \"未央区\",\n  610113: \"雁塔区\",\n  610114: \"阎良区\",\n  610115: \"临潼区\",\n  610116: \"长安区\",\n  610117: \"高陵区\",\n  610122: \"蓝田县\",\n  610124: \"周至县\",\n  610125: \"户县\",\n  610200: \"铜川市\",\n  610201: \"市辖区\",\n  610202: \"王益区\",\n  610203: \"印台区\",\n  610204: \"耀州区\",\n  610222: \"宜君县\",\n  610300: \"宝鸡市\",\n  610301: \"市辖区\",\n  610302: \"渭滨区\",\n  610303: \"金台区\",\n  610304: \"陈仓区\",\n  610322: \"凤翔县\",\n  610323: \"岐山县\",\n  610324: \"扶风县\",\n  610326: \"眉县\",\n  610327: \"陇县\",\n  610328: \"千阳县\",\n  610329: \"麟游县\",\n  610330: \"凤县\",\n  610331: \"太白县\",\n  610400: \"咸阳市\",\n  610401: \"市辖区\",\n  610402: \"秦都区\",\n  610403: \"杨陵区\",\n  610404: \"渭城区\",\n  610422: \"三原县\",\n  610423: \"泾阳县\",\n  610424: \"乾县\",\n  610425: \"礼泉县\",\n  610426: \"永寿县\",\n  610427: \"彬县\",\n  610428: \"长武县\",\n  610429: \"旬邑县\",\n  610430: \"淳化县\",\n  610431: \"武功县\",\n  610481: \"兴平市\",\n  610500: \"渭南市\",\n  610501: \"市辖区\",\n  610502: \"临渭区\",\n  610503: \"华州区\",\n  610522: \"潼关县\",\n  610523: \"大荔县\",\n  610524: \"合阳县\",\n  610525: \"澄城县\",\n  610526: \"蒲城县\",\n  610527: \"白水县\",\n  610528: \"富平县\",\n  610581: \"韩城市\",\n  610582: \"华阴市\",\n  610600: \"延安市\",\n  610601: \"市辖区\",\n  610602: \"宝塔区\",\n  610603: \"安塞区\",\n  610621: \"延长县\",\n  610622: \"延川县\",\n  610623: \"子长县\",\n  610625: \"志丹县\",\n  610626: \"吴起县\",\n  610627: \"甘泉县\",\n  610628: \"富县\",\n  610629: \"洛川县\",\n  610630: \"宜川县\",\n  610631: \"黄龙县\",\n  610632: \"黄陵县\",\n  610700: \"汉中市\",\n  610701: \"市辖区\",\n  610702: \"汉台区\",\n  610721: \"南郑县\",\n  610722: \"城固县\",\n  610723: \"洋县\",\n  610724: \"西乡县\",\n  610725: \"勉县\",\n  610726: \"宁强县\",\n  610727: \"略阳县\",\n  610728: \"镇巴县\",\n  610729: \"留坝县\",\n  610730: \"佛坪县\",\n  610800: \"榆林市\",\n  610801: \"市辖区\",\n  610802: \"榆阳区\",\n  610803: \"横山区\",\n  610821: \"神木县\",\n  610822: \"府谷县\",\n  610824: \"靖边县\",\n  610825: \"定边县\",\n  610826: \"绥德县\",\n  610827: \"米脂县\",\n  610828: \"佳县\",\n  610829: \"吴堡县\",\n  610830: \"清涧县\",\n  610831: \"子洲县\",\n  610900: \"安康市\",\n  610901: \"市辖区\",\n  610902: \"汉滨区\",\n  610921: \"汉阴县\",\n  610922: \"石泉县\",\n  610923: \"宁陕县\",\n  610924: \"紫阳县\",\n  610925: \"岚皋县\",\n  610926: \"平利县\",\n  610927: \"镇坪县\",\n  610928: \"旬阳县\",\n  610929: \"白河县\",\n  611e3: \"商洛市\",\n  611001: \"市辖区\",\n  611002: \"商州区\",\n  611021: \"洛南县\",\n  611022: \"丹凤县\",\n  611023: \"商南县\",\n  611024: \"山阳县\",\n  611025: \"镇安县\",\n  611026: \"柞水县\",\n  62e4: \"甘肃省\",\n  620100: \"兰州市\",\n  620101: \"市辖区\",\n  620102: \"城关区\",\n  620103: \"七里河区\",\n  620104: \"西固区\",\n  620105: \"安宁区\",\n  620111: \"红古区\",\n  620121: \"永登县\",\n  620122: \"皋兰县\",\n  620123: \"榆中县\",\n  620200: \"嘉峪关市\",\n  620201: \"市辖区\",\n  620300: \"金昌市\",\n  620301: \"市辖区\",\n  620302: \"金川区\",\n  620321: \"永昌县\",\n  620400: \"白银市\",\n  620401: \"市辖区\",\n  620402: \"白银区\",\n  620403: \"平川区\",\n  620421: \"靖远县\",\n  620422: \"会宁县\",\n  620423: \"景泰县\",\n  620500: \"天水市\",\n  620501: \"市辖区\",\n  620502: \"秦州区\",\n  620503: \"麦积区\",\n  620521: \"清水县\",\n  620522: \"秦安县\",\n  620523: \"甘谷县\",\n  620524: \"武山县\",\n  620525: \"张家川回族自治县\",\n  620600: \"武威市\",\n  620601: \"市辖区\",\n  620602: \"凉州区\",\n  620621: \"民勤县\",\n  620622: \"古浪县\",\n  620623: \"天祝藏族自治县\",\n  620700: \"张掖市\",\n  620701: \"市辖区\",\n  620702: \"甘州区\",\n  620721: \"肃南裕固族自治县\",\n  620722: \"民乐县\",\n  620723: \"临泽县\",\n  620724: \"高台县\",\n  620725: \"山丹县\",\n  620800: \"平凉市\",\n  620801: \"市辖区\",\n  620802: \"崆峒区\",\n  620821: \"泾川县\",\n  620822: \"灵台县\",\n  620823: \"崇信县\",\n  620824: \"华亭县\",\n  620825: \"庄浪县\",\n  620826: \"静宁县\",\n  620900: \"酒泉市\",\n  620901: \"市辖区\",\n  620902: \"肃州区\",\n  620921: \"金塔县\",\n  620922: \"瓜州县\",\n  620923: \"肃北蒙古族自治县\",\n  620924: \"阿克塞哈萨克族自治县\",\n  620981: \"玉门市\",\n  620982: \"敦煌市\",\n  621e3: \"庆阳市\",\n  621001: \"市辖区\",\n  621002: \"西峰区\",\n  621021: \"庆城县\",\n  621022: \"环县\",\n  621023: \"华池县\",\n  621024: \"合水县\",\n  621025: \"正宁县\",\n  621026: \"宁县\",\n  621027: \"镇原县\",\n  621100: \"定西市\",\n  621101: \"市辖区\",\n  621102: \"安定区\",\n  621121: \"通渭县\",\n  621122: \"陇西县\",\n  621123: \"渭源县\",\n  621124: \"临洮县\",\n  621125: \"漳县\",\n  621126: \"岷县\",\n  621200: \"陇南市\",\n  621201: \"市辖区\",\n  621202: \"武都区\",\n  621221: \"成县\",\n  621222: \"文县\",\n  621223: \"宕昌县\",\n  621224: \"康县\",\n  621225: \"西和县\",\n  621226: \"礼县\",\n  621227: \"徽县\",\n  621228: \"两当县\",\n  622900: \"临夏回族自治州\",\n  622901: \"临夏市\",\n  622921: \"临夏县\",\n  622922: \"康乐县\",\n  622923: \"永靖县\",\n  622924: \"广河县\",\n  622925: \"和政县\",\n  622926: \"东乡族自治县\",\n  622927: \"积石山保安族东乡族撒拉族自治县\",\n  623e3: \"甘南藏族自治州\",\n  623001: \"合作市\",\n  623021: \"临潭县\",\n  623022: \"卓尼县\",\n  623023: \"舟曲县\",\n  623024: \"迭部县\",\n  623025: \"玛曲县\",\n  623026: \"碌曲县\",\n  623027: \"夏河县\",\n  63e4: \"青海省\",\n  630100: \"西宁市\",\n  630101: \"市辖区\",\n  630102: \"城东区\",\n  630103: \"城中区\",\n  630104: \"城西区\",\n  630105: \"城北区\",\n  630121: \"大通回族土族自治县\",\n  630122: \"湟中县\",\n  630123: \"湟源县\",\n  630200: \"海东市\",\n  630202: \"乐都区\",\n  630203: \"平安区\",\n  630222: \"民和回族土族自治县\",\n  630223: \"互助土族自治县\",\n  630224: \"化隆回族自治县\",\n  630225: \"循化撒拉族自治县\",\n  632200: \"海北藏族自治州\",\n  632221: \"门源回族自治县\",\n  632222: \"祁连县\",\n  632223: \"海晏县\",\n  632224: \"刚察县\",\n  632300: \"黄南藏族自治州\",\n  632321: \"同仁县\",\n  632322: \"尖扎县\",\n  632323: \"泽库县\",\n  632324: \"河南蒙古族自治县\",\n  632500: \"海南藏族自治州\",\n  632521: \"共和县\",\n  632522: \"同德县\",\n  632523: \"贵德县\",\n  632524: \"兴海县\",\n  632525: \"贵南县\",\n  632600: \"果洛藏族自治州\",\n  632621: \"玛沁县\",\n  632622: \"班玛县\",\n  632623: \"甘德县\",\n  632624: \"达日县\",\n  632625: \"久治县\",\n  632626: \"玛多县\",\n  632700: \"玉树藏族自治州\",\n  632701: \"玉树市\",\n  632722: \"杂多县\",\n  632723: \"称多县\",\n  632724: \"治多县\",\n  632725: \"囊谦县\",\n  632726: \"曲麻莱县\",\n  632800: \"海西蒙古族藏族自治州\",\n  632801: \"格尔木市\",\n  632802: \"德令哈市\",\n  632821: \"乌兰县\",\n  632822: \"都兰县\",\n  632823: \"天峻县\",\n  64e4: \"宁夏回族自治区\",\n  640100: \"银川市\",\n  640101: \"市辖区\",\n  640104: \"兴庆区\",\n  640105: \"西夏区\",\n  640106: \"金凤区\",\n  640121: \"永宁县\",\n  640122: \"贺兰县\",\n  640181: \"灵武市\",\n  640200: \"石嘴山市\",\n  640201: \"市辖区\",\n  640202: \"大武口区\",\n  640205: \"惠农区\",\n  640221: \"平罗县\",\n  640300: \"吴忠市\",\n  640301: \"市辖区\",\n  640302: \"利通区\",\n  640303: \"红寺堡区\",\n  640323: \"盐池县\",\n  640324: \"同心县\",\n  640381: \"青铜峡市\",\n  640400: \"固原市\",\n  640401: \"市辖区\",\n  640402: \"原州区\",\n  640422: \"西吉县\",\n  640423: \"隆德县\",\n  640424: \"泾源县\",\n  640425: \"彭阳县\",\n  640500: \"中卫市\",\n  640501: \"市辖区\",\n  640502: \"沙坡头区\",\n  640521: \"中宁县\",\n  640522: \"海原县\",\n  65e4: \"新疆维吾尔自治区\",\n  650100: \"乌鲁木齐市\",\n  650101: \"市辖区\",\n  650102: \"天山区\",\n  650103: \"沙依巴克区\",\n  650104: \"新市区\",\n  650105: \"水磨沟区\",\n  650106: \"头屯河区\",\n  650107: \"达坂城区\",\n  650109: \"米东区\",\n  650121: \"乌鲁木齐县\",\n  650200: \"克拉玛依市\",\n  650201: \"市辖区\",\n  650202: \"独山子区\",\n  650203: \"克拉玛依区\",\n  650204: \"白碱滩区\",\n  650205: \"乌尔禾区\",\n  650400: \"吐鲁番市\",\n  650402: \"高昌区\",\n  650421: \"鄯善县\",\n  650422: \"托克逊县\",\n  650500: \"哈密市\",\n  650502: \"伊州区\",\n  650521: \"巴里坤哈萨克自治县\",\n  650522: \"伊吾县\",\n  652300: \"昌吉回族自治州\",\n  652301: \"昌吉市\",\n  652302: \"阜康市\",\n  652323: \"呼图壁县\",\n  652324: \"玛纳斯县\",\n  652325: \"奇台县\",\n  652327: \"吉木萨尔县\",\n  652328: \"木垒哈萨克自治县\",\n  652700: \"博尔塔拉蒙古自治州\",\n  652701: \"博乐市\",\n  652702: \"阿拉山口市\",\n  652722: \"精河县\",\n  652723: \"温泉县\",\n  652800: \"巴音郭楞蒙古自治州\",\n  652801: \"库尔勒市\",\n  652822: \"轮台县\",\n  652823: \"尉犁县\",\n  652824: \"若羌县\",\n  652825: \"且末县\",\n  652826: \"焉耆回族自治县\",\n  652827: \"和静县\",\n  652828: \"和硕县\",\n  652829: \"博湖县\",\n  652900: \"阿克苏地区\",\n  652901: \"阿克苏市\",\n  652922: \"温宿县\",\n  652923: \"库车县\",\n  652924: \"沙雅县\",\n  652925: \"新和县\",\n  652926: \"拜城县\",\n  652927: \"乌什县\",\n  652928: \"阿瓦提县\",\n  652929: \"柯坪县\",\n  653e3: \"克孜勒苏柯尔克孜自治州\",\n  653001: \"阿图什市\",\n  653022: \"阿克陶县\",\n  653023: \"阿合奇县\",\n  653024: \"乌恰县\",\n  653100: \"喀什地区\",\n  653101: \"喀什市\",\n  653121: \"疏附县\",\n  653122: \"疏勒县\",\n  653123: \"英吉沙县\",\n  653124: \"泽普县\",\n  653125: \"莎车县\",\n  653126: \"叶城县\",\n  653127: \"麦盖提县\",\n  653128: \"岳普湖县\",\n  653129: \"伽师县\",\n  653130: \"巴楚县\",\n  653131: \"塔什库尔干塔吉克自治县\",\n  653200: \"和田地区\",\n  653201: \"和田市\",\n  653221: \"和田县\",\n  653222: \"墨玉县\",\n  653223: \"皮山县\",\n  653224: \"洛浦县\",\n  653225: \"策勒县\",\n  653226: \"于田县\",\n  653227: \"民丰县\",\n  654e3: \"伊犁哈萨克自治州\",\n  654002: \"伊宁市\",\n  654003: \"奎屯市\",\n  654004: \"霍尔果斯市\",\n  654021: \"伊宁县\",\n  654022: \"察布查尔锡伯自治县\",\n  654023: \"霍城县\",\n  654024: \"巩留县\",\n  654025: \"新源县\",\n  654026: \"昭苏县\",\n  654027: \"特克斯县\",\n  654028: \"尼勒克县\",\n  654200: \"塔城地区\",\n  654201: \"塔城市\",\n  654202: \"乌苏市\",\n  654221: \"额敏县\",\n  654223: \"沙湾县\",\n  654224: \"托里县\",\n  654225: \"裕民县\",\n  654226: \"和布克赛尔蒙古自治县\",\n  654300: \"阿勒泰地区\",\n  654301: \"阿勒泰市\",\n  654321: \"布尔津县\",\n  654322: \"富蕴县\",\n  654323: \"福海县\",\n  654324: \"哈巴河县\",\n  654325: \"青河县\",\n  654326: \"吉木乃县\",\n  659e3: \"自治区直辖县级行政区划\",\n  659001: \"石河子市\",\n  659002: \"阿拉尔市\",\n  659003: \"图木舒克市\",\n  659004: \"五家渠市\",\n  659006: \"铁门关市\",\n  71e4: \"台湾省\",\n  81e4: \"香港特别行政区\",\n  82e4: \"澳门特别行政区\"\n};\nfunction _r(e, t, n) {\n  if (!e || e.length !== t || !/^[0-9A-Z]+$/.test(e))\n    throw new Error(n);\n}\nfunction D(e, t, n) {\n  if (t.findIndex((r) => r == e) < 0)\n    throw new Error(n);\n}\nfunction Co(e, t, n) {\n  const r = Object.entries(t).find(([s]) => s == e);\n  if (!r)\n    throw new Error(n || `{ ${e} } 不在范围内！`);\n  return r[1];\n}\nfunction Fo(e, t, n) {\n  const r = Object.entries(t).find(([s, i]) => i == e);\n  if (!r)\n    throw new Error(n || `{ ${e} } 不在范围内！`);\n  return r[0];\n}\nfunction Or(e, t, n, r) {\n  let s = 0;\n  for (let i = 0, o = n.length; i < o; i++) {\n    if (!(e[i] in r))\n      throw new Error(\n        `计算校验码失败: 参与校验的字符 { ${e[i]} } 不在代码字符集范围内！`\n      );\n    const a = r[e[i]];\n    s += a * n[i];\n  }\n  return s = (t - s % t) % t, Fo(\n    s,\n    r,\n    `计算校验码失败: 校验码 { ${s} } 不在代码字符集范围内！`\n  );\n}\nconst ko = 11, Po = [3, 7, 9, 10, 5, 8, 4, 2], Do = {\n  0: 0,\n  1: 1,\n  2: 2,\n  3: 3,\n  4: 4,\n  5: 5,\n  6: 6,\n  7: 7,\n  8: 8,\n  9: 9,\n  A: 10,\n  B: 11,\n  C: 12,\n  D: 13,\n  E: 14,\n  F: 15,\n  G: 16,\n  H: 17,\n  I: 18,\n  J: 19,\n  K: 20,\n  L: 21,\n  M: 22,\n  N: 23,\n  O: 24,\n  P: 25,\n  Q: 26,\n  R: 27,\n  S: 28,\n  T: 29,\n  U: 30,\n  V: 31,\n  W: 32,\n  X: 33,\n  Y: 34,\n  Z: 35\n};\nfunction Mo(e) {\n  if (_r(\n    e,\n    9,\n    \"不符合《GB 11714-1997》：组织机构代码只能 9 位 且 大写！\"\n  ), Or(e, ko, Po, Do) !== e[8])\n    throw new Error(\"不符合《GB 11714-1997》：校验码检验失败\");\n  return !0;\n}\nconst Lo = 31, Io = [1, 3, 9, 27, 19, 26, 16, 17, 20, 29, 25, 13, 8, 24, 10, 30, 28], $o = {\n  0: 0,\n  1: 1,\n  2: 2,\n  3: 3,\n  4: 4,\n  5: 5,\n  6: 6,\n  7: 7,\n  8: 8,\n  9: 9,\n  A: 10,\n  B: 11,\n  C: 12,\n  D: 13,\n  E: 14,\n  F: 15,\n  G: 16,\n  H: 17,\n  J: 18,\n  K: 19,\n  L: 20,\n  M: 21,\n  N: 22,\n  P: 23,\n  Q: 24,\n  R: 25,\n  T: 26,\n  U: 27,\n  W: 28,\n  X: 29,\n  Y: 30\n};\nfunction Wl(e) {\n  _r(\n    e,\n    18,\n    \"不符合《GB 32100-2015》：税号只能 18 位 且 大写！\"\n  );\n  const t = e[0];\n  D(\n    t,\n    [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"A\", \"N\", \"Y\"],\n    \"不符合《GB 32100-2015》： { 第1位 : 登记管理部门代码 } \"\n  );\n  const n = e[1], r = \"不符合《GB 32100-2015》： { 第2位 : 机构类别代码 } \";\n  switch (t) {\n    case \"1\":\n      D(n, [\"1\", \"2\", \"3\", \"9\"], r);\n      break;\n    case \"2\":\n      D(n, [\"1\", \"9\"], r);\n      break;\n    case \"3\":\n      D(\n        n,\n        [\"1\", \"2\", \"3\", \"4\", \"5\", \"9\"],\n        r\n      );\n      break;\n    case \"4\":\n      D(n, [\"1\", \"9\"], r);\n      break;\n    case \"5\":\n      D(n, [\"1\", \"2\", \"3\", \"9\"], r);\n      break;\n    case \"6\":\n      D(n, [\"1\", \"2\", \"9\"], r);\n      break;\n    case \"7\":\n      D(n, [\"1\", \"2\", \"9\"], r);\n      break;\n    case \"8\":\n      D(n, [\"1\", \"9\"], r);\n      break;\n    case \"9\":\n      D(n, [\"1\", \"2\", \"3\"], r);\n      break;\n    case \"A\":\n      D(n, [\"1\", \"9\"], r);\n      break;\n    case \"N\":\n      D(n, [\"1\", \"2\", \"3\", \"9\"], r);\n      break;\n    case \"Y\":\n      D(n, [\"1\"], r);\n      break;\n  }\n  const s = e.substring(2, 8);\n  Co(\n    s,\n    Eo,\n    \"不符合《GB 32100-2015》： { 第3位 ~ 第8位 : 登记管理机关行政区划码 } \"\n  );\n  const i = e.substring(8, 17);\n  try {\n    Mo(i);\n  } catch {\n    throw new Error(\n      \"不符合《GB 32100-2015》： { 第9位 ~ 第17位 : 主体标识码 (组织机构代码) }\"\n    );\n  }\n  if (Or(e, Lo, Io, $o) !== e[17])\n    throw new Error(\"不符合《GB 32100-2015》：校验码检验失败\");\n  return !0;\n}\nconst xn = Symbol(\"NO_VALUE\");\nasync function* Hl(e) {\n  for (const t of e)\n    yield t;\n}\nasync function Vl(e) {\n  const t = [];\n  for await (const n of e)\n    t.push(n);\n  return t;\n}\nasync function Gl(e) {\n  let t = xn;\n  for await (const n of e)\n    t = n;\n  if (t === xn)\n    throw new Error(\"No items in generator\");\n  return t;\n}\nasync function Xl(e) {\n  let t;\n  do\n    t = await e.next();\n  while (!t.done);\n  return t.value;\n}\nasync function* Zl(e, t = 1 / 0) {\n  const n = (i) => {\n    const o = i.next().then(({ done: a, value: c }) => ({\n      done: a,\n      value: c,\n      generator: i,\n      promise: o\n    }));\n    return o;\n  }, r = [...e], s = /* @__PURE__ */ new Set();\n  for (; s.size < t && r.length > 0; ) {\n    const i = r.shift();\n    s.add(n(i));\n  }\n  for (; s.size > 0; ) {\n    const { done: i, value: o, generator: a, promise: c } = await Promise.race(s);\n    if (s.delete(c), !i)\n      s.add(n(a)), o !== void 0 && (yield o);\n    else if (r.length > 0) {\n      const u = r.shift();\n      s.add(n(u));\n    }\n  }\n}\nfunction No() {\n  const e = {};\n  return e.promise = new Promise((t, n) => {\n    e.resolve = t, e.reject = n;\n  }), e;\n}\nasync function Jl(e, t) {\n  const n = fi(e) ? e : e(), r = async (s) => {\n    s.value && s.value.then ? s.value.then(async (i) => {\n      await t?.(i), s.done || await r(await n.next(i));\n    }).catch(async (i) => {\n      if (s.done || !n.throw)\n        throw new Error(i);\n      await r(await n.throw(i));\n    }) : typeof s.value == \"function\" ? s.value(async (i, o) => {\n      if (i) {\n        if (s.done || !n.throw)\n          throw new Error(i);\n        return await r(await n.throw(i));\n      }\n      await t?.(o), s.done || await r(await n.next(o));\n    }) : (await t?.(s.value), s.done || await r(await n.next(s.value)));\n  };\n  await r(await n.next());\n}\nfunction Yl(e) {\n  return (...t) => (\n    // Thunk函数签名\n    (n) => {\n      let r;\n      try {\n        e.apply(this, [\n          ...t,\n          (s, i) => {\n            r || (r = !0, n(s, i));\n          }\n        ]);\n      } catch (s) {\n        n(s);\n      }\n    }\n  );\n}\nfunction Kl(e) {\n  return new Promise((t, n) => {\n    e.call(this, (r, s) => r ? n(r) : t(s));\n  });\n}\nfunction Ql(e) {\n  let t = !1;\n  return {\n    promise: new Promise((n, r) => {\n      e.then(\n        (s) => t ? r({ isCanceled: !0, value: s }) : n(s),\n        (s) => r({ isCanceled: t, error: s })\n      );\n    }),\n    cancel: () => t = !0\n  };\n}\nfunction th(e, t) {\n  let n;\n  return Promise.race([\n    e,\n    new Promise((r, s) => {\n      n = setTimeout(() => s(new Error(\"Timeout\")), t);\n    })\n  ]).then((r) => (clearTimeout(n), r)).catch((r) => (clearTimeout(n), r));\n}\nfunction eh(e) {\n  let t = null, n = Promise.resolve();\n  for (const r of e)\n    n = n.then((s) => (t = s, r));\n  return n.catch((r) => {\n    throw r;\n  }).then(() => t);\n}\nasync function nh(e) {\n  return new Promise((t) => {\n    setTimeout(t, Math.min(ws, e));\n  });\n}\nfunction rh(e) {\n}\nasync function sh(e, t) {\n  return Promise.race([\n    e(),\n    new Promise(\n      (n, r) => setTimeout(() => r(new Error(\"Timeout exceeded!\")), t)\n    )\n  ]);\n}\nasync function ih(e = []) {\n  return await e.reduce(async (t, n) => (await t, await n()), Promise.resolve(void 0));\n}\nlet Uo = 0;\nfunction Tr(e) {\n  const t = No();\n  let n = !1;\n  return {\n    name: e.name || String(++Uo),\n    deadline: typeof e.deadline == \"number\" ? Math.max(e.deadline, 0) : -1,\n    run: async () => {\n      if (!n) {\n        n = !0;\n        try {\n          let r;\n          const s = e.args || [];\n          e.thisArg ? r = await e.fn.call(e.thisArg, ...s) : r = await e.fn(...s), t.resolve(r);\n        } catch (r) {\n          t.reject(r);\n        }\n      }\n    },\n    result: () => t.promise\n  };\n}\nclass zo {\n  // 任务队列\n  queue;\n  // 是否暂停执行任务队列\n  suspend = !1;\n  // 执行信号\n  // Incrementing adds a lock\n  // Decrementing releases a lock\n  semaphore = 0;\n  // 并发执行数量 或 并发等待结果数量\n  concurrency = 1;\n  // 剩余可执行时间，毫秒\n  // -1 不考虑剩余可执行时间\n  // =0 自动暂停执行任务队列\n  timeRemaining = -1;\n  // 超时任务检查id\n  timeoutId;\n  // queue = createNoneRingQueue() : 不缓存数据\n  // queue = createFixedRingQueue(10) : 超出缓存空间时，抛错\n  // queue = createDroppingRingQueue(10) : 超出缓存空间时，忽略新数据\n  // queue = createSlidingRingQueue(10) : 超出缓存空间时，删除旧数据\n  // queue = createExpandingRingQueue(10) : 超出缓存空间时，扩大缓存空间\n  constructor(t) {\n    this.queue = t?.queue || ys(10), typeof t?.concurrency == \"number\" && (this.concurrency = Math.max(t?.concurrency, 1)), typeof t?.timeRemaining == \"number\" && this.setTimeRemaining(t.timeRemaining);\n  }\n  setTimeRemaining(t) {\n    this.timeRemaining = Math.max(0, t);\n  }\n  increaseTimeRemaining(t, n = !1) {\n    this.timeRemaining !== -1 ? this.setTimeRemaining(this.timeRemaining + t) : n && this.setTimeRemaining(t);\n  }\n  decreaseTimeRemaining(t) {\n    this.timeRemaining !== -1 && this.setTimeRemaining(this.timeRemaining - t);\n  }\n  // 执行任务，不管执行结果\n  _exec(t, n = !0) {\n    const r = K();\n    try {\n      this.semaphore++, t.run();\n    } finally {\n      this.semaphore--, n && (this.decreaseTimeRemaining(K() - r), this._flush());\n    }\n  }\n  // 执行队列\n  _flush() {\n    for (; !this.suspend && this.semaphore < this.concurrency && (this.timeRemaining == -1 || this.timeRemaining > 0); ) {\n      const t = this.queue.dequeue();\n      if (!t)\n        break;\n      this._exec(t);\n    }\n    this._timeout();\n  }\n  // 超时任务检查\n  _timeout(t = 0, n = 0) {\n    clearTimeout(this.timeoutId), this.timeoutId = setTimeout(() => {\n      if (!(this.suspend || this.semaphore > 0 || !this.queue.length)) {\n        for (let r = 0; r < this.queue.length(); ) {\n          const s = this.queue.index(r);\n          if (!s)\n            break;\n          s.deadline != -1 && s.deadline <= K() ? (this._exec(s, !1), this.queue.deleteIndex(r)) : r++;\n        }\n        this.queue.length() && (this.timeoutId = setTimeout(\n          () => {\n            this._timeout(t, ++n);\n          },\n          300 * Math.pow(2, n)\n          // wait a bit longer between each retry\n        ));\n      }\n    }, t);\n  }\n  // 暂停\n  pause() {\n    this.suspend = !0;\n  }\n  // 恢复\n  resume() {\n    this.suspend = !1, this._flush();\n  }\n  addTask(t) {\n    this.queue.delete((n) => n.name == t.name), this.queue.enqueue(t);\n  }\n  // 立即触发执行\n  immediately(t) {\n    this._exec(t), this._flush();\n  }\n  // 立即顺序触发执行队列\n  asap(t) {\n    this.addTask(t), this._flush();\n  }\n  // 有空余时间再执行队列\n  idleCallback(t) {\n    this.setTimeRemaining(t.timeRemaining()), this._flush();\n  }\n  clear() {\n    this.queue.clear();\n  }\n}\nclass vr extends zo {\n  // 上个任务的执行结果\n  lastResult;\n  constructor(t) {\n    super(t);\n  }\n  // 执行任务\n  _exec(t, n = !0) {\n    const r = K();\n    try {\n      this.semaphore++, t.run();\n    } finally {\n      t.result().then((s) => {\n        this.lastResult = s;\n      }).finally(() => {\n        this.semaphore--, n && (this.decreaseTimeRemaining(K() - r), this._flush());\n      });\n    }\n  }\n}\nclass oh {\n  schedule;\n  constructor(t) {\n    this.schedule = new vr(t);\n  }\n  get lastResult() {\n    return this.schedule.lastResult;\n  }\n  // promise 自己绑定this\n  asap(t, ...n) {\n    const r = Tr({\n      fn: t,\n      args: n\n    });\n    return this.schedule.asap(r), r;\n  }\n  immediately(t, ...n) {\n    return this.clear(), this.asap(t, ...n);\n  }\n  // 丢弃所有未处理的 promise\n  clear() {\n    this.schedule.clear();\n  }\n}\nclass ah {\n  schedule;\n  closeLastDialog;\n  constructor(t) {\n    this.schedule = new vr(t);\n  }\n  // dialog 自己绑定this\n  // 将 Dialog 放入队列，依次关闭后显示\n  asap(t, n) {\n    const r = Tr({\n      fn: (s) => new Promise((i) => {\n        this.closeLastDialog = t({\n          ...s,\n          onClose: () => {\n            this.closeLastDialog = void 0, s?.onClose?.(), i();\n          }\n        });\n      }),\n      args: [n]\n    });\n    return this.schedule.asap(r), r;\n  }\n  // 强制显示 Dialog\n  immediately(t, n) {\n    return this.clear(), this.asap(t, n);\n  }\n  // 强制关闭上一个 Dialog\n  closeLast() {\n    this.closeLastDialog && this.closeLastDialog();\n  }\n  // 丢弃所有未处理的 Dialog\n  clear() {\n    this.schedule.clear(), this.closeLast();\n  }\n}\nfunction ch(e) {\n  if (typeof setImmediate < \"u\" && zt(setImmediate))\n    setImmediate(e);\n  else if (typeof MessageChannel < \"u\" && (zt(MessageChannel) || MessageChannel.toString() === \"[object MessageChannelConstructor]\")) {\n    const { port1: t, port2: n } = new MessageChannel();\n    n.onmessage = e, t.postMessage(null);\n  } else\n    typeof Promise < \"u\" && zt(Promise) ? Promise.resolve().then(e) : setTimeout(e, 0);\n}\nfunction uh(e) {\n  typeof queueMicrotask == \"function\" ? queueMicrotask(e) : Promise.resolve().then(e).catch(\n    (t) => setTimeout(() => {\n      throw t;\n    })\n  );\n}\nclass lh {\n  // postMessage\n  port;\n  // onmessage\n  port2;\n  constructor() {\n    const { port1: t, port2: n } = new MessageChannel();\n    this.port = t, this.port2 = n, this.port.start(), this.port2.start();\n  }\n  close() {\n    this.port.close(), this.port2.close();\n  }\n  postMessage(t) {\n    const n = Vn();\n    return this.port.postMessage({ id: n, message: t }), n;\n  }\n  onmessage(t) {\n    this.port2.addEventListener(\"message\", t);\n  }\n  offmessage(t) {\n    this.port2.removeEventListener(\"message\", t);\n  }\n  onmessageerror(t) {\n    this.port2.addEventListener(\"messageerror\", t);\n  }\n  offmessageerror(t) {\n    this.port2.removeEventListener(\"messageerror\", t);\n  }\n}\nfunction hh(e = \"\", t) {\n  const {\n    OPERATION_DELIMITER: n = \"/\",\n    KEY_DELIMITER: r = \",\",\n    KEY_VALUE_DELIMITER: s = \":\"\n  } = t || {};\n  return e.split(n).filter((i) => i !== \"\").reduce((i, o) => {\n    const [a, ...c] = o.split(r);\n    if (c.length === 0) {\n      const [u, l] = a.split(s);\n      i.push({\n        type: u,\n        payload: l !== void 0 ? decodeURIComponent(l) : !0\n      });\n    } else {\n      if (a.indexOf(s) !== -1)\n        throw new Error(`\"${a}\" is invalid`);\n      i.push(\n        c.reduce(\n          (u, l) => {\n            const [h, p] = l.split(s);\n            return u[h] = p !== void 0 ? decodeURIComponent(p) : !0, u;\n          },\n          {\n            type: a\n          }\n        )\n      );\n    }\n    return i;\n  }, []);\n}\nfunction jo(e) {\n  const t = typeof e.immutable == \"boolean\" ? e.immutable : !0, n = e.initState || {};\n  let r = e.reducer;\n  if (e.enhancer)\n    return e.enhancer(jo)({ reducer: r, initState: n, immutable: t });\n  const s = [], i = (u) => (s.push(u), () => {\n    const l = s.indexOf(u);\n    l > -1 && s.splice(l, 1);\n  });\n  let o = n;\n  t || (o = _o(o, {\n    callback: (u) => {\n      s.forEach((l) => l(u));\n    }\n  }));\n  const a = (u) => {\n    if (t) {\n      const l = o;\n      o = r(o, u);\n      const h = cr(l, o);\n      for (const p of h)\n        s.forEach((d) => d(p));\n    } else\n      r(o, u);\n  }, c = (u) => {\n    r = u, a({ type: \"INIT\" });\n  };\n  return a({ type: \"INIT\" }), {\n    getState: () => o,\n    dispatch: a,\n    subscribe: i,\n    replaceReducer: c\n  };\n}\nfunction fh(e, t = !0) {\n  const n = Object.keys(e);\n  return (r, s) => {\n    const i = t ? { ...r } : r;\n    for (let o = 0, a = n.length; o < a; o++) {\n      const c = n[o];\n      i[c] = e[c](i[c] || {}, s);\n    }\n    return i;\n  };\n}\nfunction dh(...e) {\n  return (t) => (n) => {\n    const r = t(n);\n    let s = r.dispatch;\n    const i = { getState: r.getState, dispatch: s }, o = e.map((a) => a(i));\n    return s = Xs(...o)(s), r.dispatch = s, r;\n  };\n}\nconst ph = (e) => {\n  let t = 0;\n  return (n) => (r) => {\n    gn.start(\n      `--- State Change index: ${++t} action: ${String(\n        r.type\n      )} ---`\n    ), E(`action: ${I(r)}`), E(`old-state: ${I(e.getState())}`), n(r), E(`new-state: ${I(e.getState())}`), gn.end();\n  };\n}, mh = (e) => (t) => (n) => {\n  try {\n    t(n);\n  } catch (r) {\n    throw E(`Reducer错误报告: ${r}`), r;\n  }\n}, gh = (e) => (t) => (n) => {\n  const r = `dispatch(${String(n.type)}) execute time`;\n  Kt.start(r), t(n), Kt.end(r);\n};\nclass yh {\n  _next;\n  _error;\n  _complete;\n  constructor() {\n  }\n  subscribe(t) {\n    return this._next = t.next, this._error = t.error, this._complete = t.complete, {\n      unsubscribe: () => {\n        this.complete();\n      }\n    };\n  }\n  next(t) {\n    this._next?.(t);\n  }\n  error(t) {\n    this._error?.(t);\n  }\n  complete() {\n    this._complete?.();\n  }\n}\nfunction Rr(e = window.location.href) {\n  try {\n    return new URL(e);\n  } catch {\n    const n = \"(?<protocol>https?:)\", r = \"(?<host>(?<hostname>[^/#?:]+)(?::(?<port>\\\\d+))?)\", s = \"(?<pathname>(?:\\\\/[^/#?]+)*\\\\/?)\", i = \"(?<search>(?:\\\\?[^#]*)?)\", o = \"(?<hash>(?:#.*)?)\", c = new RegExp(`^${n}//${r}${s}${i}${o}$`).exec(e);\n    return {\n      href: e,\n      protocol: c?.groups?.protocol || \"\",\n      host: c?.groups?.host || \"\",\n      hostname: c?.groups?.hostname || \"\",\n      port: c?.groups?.port || \"\",\n      pathname: c?.groups?.pathname || \"\",\n      search: c?.groups?.search || \"\",\n      hash: c?.groups?.hash || \"\"\n    };\n  }\n}\nfunction wh(e) {\n  const t = Rr(e);\n  return t.protocol === \"http:\" || t.protocol === \"https:\";\n}\nfunction Bo(e) {\n  return !e.includes(\"://\") || e.includes(window.location.origin);\n}\nfunction bh(e = window.location.href) {\n  const t = Rr(e), n = t.href.indexOf(t.hash);\n  return t.hash && n >= 0 ? t.href.substring(0, n) : t.href;\n}\nfunction qo(e, t) {\n  return e.replace(/(?:\\?.*)?$/, t.replace(/^[&?]/, \"?\"));\n}\nfunction Sh(e, t) {\n  return qo(e, Er(t));\n}\nfunction Wo(e, t) {\n  return e + t.replace(/^[&?]/, e.indexOf(\"?\") >= 0 ? \"&\" : \"?\");\n}\nfunction Ah(e, t) {\n  return Wo(e, Er(t));\n}\nfunction xh(e = window.location.href) {\n  const t = {};\n  let n = decodeURIComponent(e).split(/[?]/)[1];\n  if (n || (n = e), n = n.replace(/^[#?&]/, \"\"), n = n.replace(/#\\/(([^?&=]*))$/, \"\"), n) {\n    const r = /(?:^|&)([^&=]*)=?([^&]*?)(?=&|$)/y;\n    let s = r.exec(n);\n    for (; s; )\n      t[s[1]] = s[2], s = r.exec(n);\n  }\n  return t;\n}\nfunction _h(e = window.location.href) {\n  return JSON.parse(\n    '{\"' + decodeURI(e.split(\"?\")[1]).replace(/\"/g, '\\\\\"').replace(/&/g, '\",\"').replace(/=/g, '\":\"') + '\"}'\n  );\n}\nfunction Er(e) {\n  return \"?\" + Object.entries(e).map(([t, n]) => `${encodeURIComponent(t)}=${encodeURIComponent(n)}`).join(\"&\");\n}\nfunction Oh(e) {\n  return \"?\" + [...e.entries()].map(\n    (t) => encodeURIComponent(t[0]) + \"=\" + encodeURIComponent(t[1] instanceof File ? t[1].name : t[1])\n  ).join(\"&\");\n}\nasync function Ho(e, t) {\n  if (Bo(e))\n    return e;\n  const r = await (await fetch(e)).text(), s = new URL(e).href.split(\"/\");\n  s.pop();\n  const i = `const _importScripts = importScripts;\nconst _fixImports = (url) => new URL(url, '${s.join(\"/\") + \"/\"}').href;\nimportScripts = (...urls) => _importScripts(...urls.map(_fixImports));\n`, o = \"application/javascript\";\n  let a = `data:${o},` + encodeURIComponent(i + r);\n  return (typeof t?.useBlob == \"boolean\" ? t?.useBlob : !0) && (a = URL.createObjectURL(\n    new Blob([`importScripts(\"${a}\")`], { type: o })\n  )), a;\n}\nclass Th {\n  worker;\n  constructor() {\n    if (!wi)\n      throw new Error(\"Your environment do not support Worker !\");\n  }\n  async createFromURL(t, n = !1) {\n    const r = await Ho(t);\n    return n ? (this.worker = new SharedWorker(r, {\n      type: \"module\"\n      // 声明为 ES 模块，默认是 classic\n    }), this.worker.port.start()) : this.worker = new Worker(r, {\n      type: \"module\"\n      // 声明为 ES 模块，默认是 classic\n    }), this.worker;\n  }\n  async createFromCode(t, n = !1) {\n    const r = new Blob([t]), s = URL.createObjectURL(r);\n    return n ? (this.worker = new SharedWorker(s, {\n      type: \"module\"\n      // 声明为 ES 模块，默认是 classic\n    }), this.worker.port.start()) : this.worker = new Worker(s, {\n      type: \"module\"\n      // 声明为 ES 模块，默认是 classic\n    }), this.worker;\n  }\n  terminate() {\n    this.worker instanceof Worker && this.worker.terminate(), this.worker instanceof SharedWorker && this.worker.port.close();\n  }\n  // type Transferable = OffscreenCanvas | ImageBitmap | MessagePort | ReadableStream | WritableStream | TransformStream | ArrayBuffer;\n  postMessage(t, n = []) {\n    const r = Vn();\n    return this.worker instanceof Worker && this.worker.postMessage({ id: r, message: t }, n), this.worker instanceof SharedWorker && this.worker.port.postMessage({ id: r, message: t }, n), r;\n  }\n  postCanvas(t) {\n    const n = t.transferControlToOffscreen();\n    this.postMessage({ canvas: n }, [n]);\n  }\n  postPort(t) {\n    this.postMessage({ port: t }, [t]);\n  }\n  onmessage(t) {\n    this.worker instanceof Worker && this.worker.addEventListener(\"message\", t), this.worker instanceof SharedWorker && this.worker.port.addEventListener(\"message\", t);\n  }\n  offmessage(t) {\n    this.worker instanceof Worker && this.worker.removeEventListener(\"message\", t), this.worker instanceof SharedWorker && this.worker.port.removeEventListener(\"message\", t);\n  }\n  onmessageerror(t) {\n    this.worker instanceof Worker && this.worker.addEventListener(\"messageerror\", t), this.worker instanceof SharedWorker && this.worker.port.addEventListener(\"messageerror\", t);\n  }\n  offmessageerror(t) {\n    this.worker instanceof Worker && this.worker.removeEventListener(\"messageerror\", t), this.worker instanceof SharedWorker && this.worker.port.removeEventListener(\"messageerror\", t);\n  }\n}\nfunction Vo(e) {\n  return e * Math.PI / 180;\n}\nfunction H(e) {\n  return e * 180 / Math.PI;\n}\nfunction Z(e, t = 0) {\n  if (!e)\n    return t;\n  switch (e.unit) {\n    case \"turn\":\n      return e.v * 360;\n    case \"rad\":\n      return H(e.v);\n    case \"deg\":\n    default:\n      return e.v;\n  }\n}\nfunction vh(e, t) {\n  return {\n    dx: Math.cos(e) * t,\n    dy: Math.sin(e) * t\n  };\n}\nfunction Go(e) {\n  const t = [];\n  return e.replace(\n    /([a-z0-9]+)\\s*\\(?\\s*((-?[0-9]*\\.?[0-9]+(?:e[-+]?\\d+)*[a-z%]*\\s*,?\\s*)+)\\)?/gi,\n    (n, r, s) => {\n      const i = [];\n      return s.split(/\\s*[,\\s]+\\s*/).forEach((o) => {\n        o.trim() && i.push({\n          v: Y(o, 0),\n          unit: o.match(/[a-z%]+$/)?.[0] || \"\"\n        });\n      }), t.push({\n        command: r,\n        values: i\n      }), \"\";\n    }\n  ), t;\n}\nclass v {\n  precision = 1e-6;\n  x;\n  y;\n  z;\n  w;\n  // 齐次坐标 w = 1：表示 3D 点坐标  w = 0：作为一个向量或方向使用\n  constructor(t = 0, n = 0, r = 0, s = 1) {\n    this.x = t, this.y = n, this.z = r, this.w = s;\n  }\n  clone() {\n    return new v(this.x, this.y, this.z, this.w);\n  }\n  add(t) {\n    return new v(this.x + t.x, this.y + t.y, this.z + t.z, this.w);\n  }\n  sub(t) {\n    return new v(this.x - t.x, this.y - t.y, this.z - t.z, this.w);\n  }\n  multiply(t) {\n    return new v(this.x * t.x, this.y * t.y, this.z * t.z, this.w);\n  }\n  divide(t) {\n    return new v(this.x / t.x, this.y / t.y, this.z / t.z, this.w);\n  }\n  min(t) {\n    return new v(\n      Math.min(this.x, t.x),\n      Math.min(this.y, t.y),\n      Math.min(this.z, t.z),\n      this.w\n    );\n  }\n  max(t) {\n    return new v(\n      Math.max(this.x, t.x),\n      Math.max(this.y, t.y),\n      Math.max(this.z, t.z),\n      this.w\n    );\n  }\n  clamp(t, n) {\n    return new v(\n      dt(this.x, t.x, n.x),\n      dt(this.y, t.y, n.y),\n      dt(this.z, t.z, n.z),\n      this.w\n    );\n  }\n  floor() {\n    return new v(\n      Math.floor(this.x),\n      Math.floor(this.y),\n      Math.floor(this.z),\n      this.w\n    );\n  }\n  ceil() {\n    return new v(\n      Math.ceil(this.x),\n      Math.ceil(this.y),\n      Math.ceil(this.z),\n      this.w\n    );\n  }\n  round() {\n    return new v(\n      Math.round(this.x),\n      Math.round(this.y),\n      Math.round(this.z),\n      this.w\n    );\n  }\n  roundToZero() {\n    return new v(\n      Math.trunc(this.x),\n      Math.trunc(this.y),\n      Math.trunc(this.z),\n      this.w\n    );\n  }\n  negate() {\n    return new v(\n      this.x - this.x,\n      this.y - this.y,\n      this.z - this.z,\n      this.w\n    );\n  }\n  // Returns the scalar product of the vector with the argument\n  // Both vectors must have equal dimensionality\n  dot(t) {\n    const n = t.toArray(), r = this.toArray();\n    let s = 0, i = 3;\n    do\n      s += r[i - 1] * n[i - 1];\n    while (--i);\n    return s;\n  }\n  // Returns the vector product of the vector with the argument\n  // Both vectors must have dimensionality 3\n  cross(t) {\n    const n = t.toArray(), r = this.toArray();\n    return new v(\n      r[1] * n[2] - r[2] * n[1],\n      r[2] * n[0] - r[0] * n[2],\n      r[0] * n[1] - r[1] * n[0]\n    );\n  }\n  length() {\n    return Math.sqrt(this.dot(this));\n  }\n  distance(t) {\n    return this.sub(t).length();\n  }\n  normalize() {\n    const t = this.length();\n    return t == 0 ? new v() : new v(this.x / t, this.y / t, this.z / t, this.w);\n  }\n  manhattanLength() {\n    return Math.abs(this.x) + Math.abs(this.y) + Math.abs(this.z);\n  }\n  // Returns the angle between the vector and the argument (also a vector)\n  degreeFrom(t) {\n    const n = t.toArray();\n    let r = 0, s = 0, i = 0;\n    if (this.toArray().forEach((a, c) => {\n      r += a * n[c], s += a * a, i += n[c] * n[c];\n    }), s = Math.sqrt(s), i = Math.sqrt(i), s * i === 0)\n      return;\n    let o = r / (s * i);\n    return o < -1 && (o = -1), o > 1 && (o = 1), H(Math.acos(o));\n  }\n  // Returns true iff the vector is parallel to the argument\n  isParallelTo(t) {\n    const n = this.degreeFrom(t);\n    return n === void 0 ? void 0 : n <= this.precision;\n  }\n  // 2D: 与 x 轴正方向之间的弧度值\n  radian() {\n    let t = Math.atan2(this.y, this.x);\n    return t < 0 && (t += Math.PI * 2), t;\n  }\n  // 2D: 与 x 轴正方向之间的角度值\n  degree() {\n    return H(this.radian());\n  }\n  // 2D: 返回滑动方向\n  getDirection(t = 10) {\n    if (Math.abs(this.x) < t && Math.abs(this.y) < t)\n      return \"no\";\n    const n = this.degree();\n    return n >= -135 && n <= -45 ? \"up\" : n > 45 && n < 135 ? \"down\" : n >= 135 && n <= 180 || n >= -180 && n < -135 ? \"left\" : \"right\";\n  }\n  toArray() {\n    return [this.x, this.y, this.z, this.w];\n  }\n  *[Symbol.iterator]() {\n    yield this.x, yield this.y, yield this.z, yield this.w;\n  }\n}\nclass W {\n  _elements;\n  _margin;\n  // protected isCoordinateChanged = false;\n  // private _is2D: boolean;\n  // 2D矩阵属性\n  get a() {\n    return this._elements[0];\n  }\n  set a(t) {\n    this._elements[0] = t;\n  }\n  get b() {\n    return this._elements[1];\n  }\n  set b(t) {\n    this._elements[1] = t;\n  }\n  get c() {\n    return this._elements[4];\n  }\n  set c(t) {\n    this._elements[4] = t;\n  }\n  get d() {\n    return this._elements[5];\n  }\n  set d(t) {\n    this._elements[5] = t;\n  }\n  get e() {\n    return this._elements[12];\n  }\n  set e(t) {\n    this._elements[12] = t;\n  }\n  get f() {\n    return this._elements[13];\n  }\n  set f(t) {\n    this._elements[13] = t;\n  }\n  // 3D矩阵属性\n  get m11() {\n    return this._elements[0];\n  }\n  set m11(t) {\n    this._elements[0] = t;\n  }\n  get m12() {\n    return this._elements[1];\n  }\n  set m12(t) {\n    this._elements[1] = t;\n  }\n  get m13() {\n    return this._elements[2];\n  }\n  set m13(t) {\n    this._elements[2] = t;\n  }\n  get m14() {\n    return this._elements[3];\n  }\n  set m14(t) {\n    this._elements[3] = t;\n  }\n  get m21() {\n    return this._elements[4];\n  }\n  set m21(t) {\n    this._elements[4] = t;\n  }\n  get m22() {\n    return this._elements[5];\n  }\n  set m22(t) {\n    this._elements[5] = t;\n  }\n  get m23() {\n    return this._elements[6];\n  }\n  set m23(t) {\n    this._elements[6] = t;\n  }\n  get m24() {\n    return this._elements[7];\n  }\n  set m24(t) {\n    this._elements[7] = t;\n  }\n  get m31() {\n    return this._elements[8];\n  }\n  set m31(t) {\n    this._elements[8] = t;\n  }\n  get m32() {\n    return this._elements[9];\n  }\n  set m32(t) {\n    this._elements[9] = t;\n  }\n  get m33() {\n    return this._elements[10];\n  }\n  set m33(t) {\n    this._elements[10] = t;\n  }\n  get m34() {\n    return this._elements[11];\n  }\n  set m34(t) {\n    this._elements[11] = t;\n  }\n  get m41() {\n    return this._elements[12];\n  }\n  set m41(t) {\n    this._elements[12] = t;\n  }\n  get m42() {\n    return this._elements[13];\n  }\n  set m42(t) {\n    this._elements[13] = t;\n  }\n  get m43() {\n    return this._elements[14];\n  }\n  set m43(t) {\n    this._elements[14] = t;\n  }\n  get m44() {\n    return this._elements[15];\n  }\n  set m44(t) {\n    this._elements[15] = t;\n  }\n  get elements() {\n    return Array.from(this._elements);\n  }\n  constructor(t, n) {\n    this._margin = xs(n), this._elements = new Float64Array(16), this.identity(), t && (typeof t == \"string\" ? this._parseTransformString(t) : Array.isArray(t) ? this._fromArray(t) : t instanceof W && this._elements.set(t._elements));\n  }\n  identity() {\n    this._elements.fill(0), this.m11 = 1, this.m22 = 1, this.m33 = 1, this.m44 = 1;\n  }\n  get isIdentity() {\n    return this._margin(this.m11, 1) && this._margin(this.m12, 0) && this._margin(this.m13, 0) && this._margin(this.m14, 0) && this._margin(this.m21, 0) && this._margin(this.m22, 1) && this._margin(this.m23, 0) && this._margin(this.m24, 0) && this._margin(this.m31, 0) && this._margin(this.m32, 0) && this._margin(this.m33, 1) && this._margin(this.m34, 0) && this._margin(this.m41, 0) && this._margin(this.m42, 0) && this._margin(this.m43, 0) && this._margin(this.m44, 1);\n  }\n  get isCoordinateChanged() {\n    return !(this._margin(this.m11, 1) && this._margin(this.m12, 0) && this._margin(this.m13, 0) && this._margin(this.m14, 0) && this._margin(this.m21, 0) && this._margin(this.m22, 1) && this._margin(this.m23, 0) && this._margin(this.m24, 0) && this._margin(this.m31, 0) && this._margin(this.m32, 0) && this._margin(this.m33, 1) && this._margin(this.m34, 0) && // this._margin(this.m41, 0) &&\n    // this._margin(this.m42, 0) &&\n    // this._margin(this.m43, 0) &&\n    this._margin(this.m44, 1));\n  }\n  get is2D() {\n    return this._margin(this.m31, 0) && this._margin(this.m32, 0) && this._margin(this.m33, 1) && this._margin(this.m34, 0) && this._margin(this.m43, 0) && this._margin(this.m44, 1);\n  }\n  _fromArray(t) {\n    if (t.length === 6)\n      this._elements.set([\n        t[0],\n        t[1],\n        0,\n        0,\n        t[2],\n        t[3],\n        0,\n        0,\n        0,\n        0,\n        1,\n        0,\n        t[4],\n        t[5],\n        0,\n        1\n      ]);\n    else if (t.length === 16)\n      this._elements.set(t);\n    else\n      throw new TypeError(\n        \"Invalid matrix length (must be 6 for 2D or 16 for 3D)\"\n      );\n  }\n  // 矩阵不满足交换律，所以顺序很重要\n  _parseTransformString(t) {\n    return Go(t).forEach(({ command: n, values: r }) => {\n      switch (n) {\n        case \"m\":\n        case \"matrix\":\n        case \"matrix3d\":\n          this._fromArray(r.map((s) => s.v));\n          break;\n        case \"t\":\n        case \"translate\":\n        case \"translate3d\":\n          this.translateSelf(\n            r[0]?.v || 0,\n            r[1]?.v || 0,\n            r[2]?.v || 0\n          );\n          break;\n        case \"translateX\":\n          this.translateSelf(r[0]?.v || 0, 0, 0);\n          break;\n        case \"translateY\":\n          this.translateSelf(0, r[0]?.v || 0, 0);\n          break;\n        case \"translateZ\":\n          this.translateSelf(0, 0, r[0]?.v || 0);\n          break;\n        case \"r\":\n        case \"rotate\":\n        case \"rotateZ\":\n          this.rotateSelf(Z(r[0], 0), 0, 0, 1);\n          break;\n        case \"rotateX\":\n          this.rotateSelf(Z(r[0], 0), 1, 0, 0);\n          break;\n        case \"rotateY\":\n          this.rotateSelf(Z(r[0], 0), 0, 1, 0);\n          break;\n        case \"rotate3d\":\n          this.rotateSelf(\n            Z(r[3], 0),\n            Z(r[0], 0),\n            Z(r[1], 0),\n            Z(r[2], 0)\n          );\n          break;\n        case \"s\":\n        case \"scale\":\n        case \"scale3d\":\n          this.scaleSelf(\n            r[0]?.v || 1,\n            r[1]?.v || r[0]?.v || 1,\n            r[2]?.v || 1\n          );\n          break;\n        case \"scaleX\":\n          this.scaleSelf(r[0]?.v || 1, 1, 1);\n          break;\n        case \"scaleY\":\n          this.scaleSelf(1, r[0]?.v || 1, 1);\n          break;\n        case \"scaleZ\":\n          this.scaleSelf(1, 1, r[0]?.v || 1);\n          break;\n        case \"skewX\":\n          this.skewXSelf(Z(r[0], 0));\n          break;\n        case \"skewY\":\n          this.skewYSelf(Z(r[0], 0));\n          break;\n        case \"none\":\n        default:\n          Bs(`Unsupported transform function: ${n}`);\n      }\n    }), this;\n  }\n  // other * this  =>  this first, then other\n  multiply(t) {\n    return this.clone().multiplySelf(t);\n  }\n  // other * this  =>  this first, then other\n  multiplySelf(t) {\n    const n = this.elements, r = t.elements, s = new Float64Array(16);\n    for (let i = 0; i < 4; i++)\n      for (let o = 0; o < 4; o++)\n        s[i * 4 + o] = n[i * 4 + 0] * r[0 * 4 + o] + n[i * 4 + 1] * r[1 * 4 + o] + n[i * 4 + 2] * r[2 * 4 + o] + n[i * 4 + 3] * r[3 * 4 + o];\n    return this._elements.set(s), this;\n  }\n  translate(t, n = 0, r = 0) {\n    return this.clone().translateSelf(t, n, r);\n  }\n  translateSelf(t, n = 0, r = 0) {\n    const s = new W();\n    if (this.isCoordinateChanged) {\n      const i = this.transformPoint(new v(t, n, r));\n      s.m41 = i.x, s.m42 = i.y, s.m43 = i.z;\n    } else\n      s.m41 = t, s.m42 = n, s.m43 = r;\n    return this.multiplySelf(s);\n  }\n  rotate(t, n = 0, r = 0, s = 1) {\n    return this.clone().rotateSelf(t, n, r, s);\n  }\n  // x, y, z 代表旋转轴的方向向量\n  // 对于多个旋转，通常是先绕 Z 轴旋转，然后绕 Y 轴，再绕 X 轴\n  rotateSelf(t, n = 0, r = 0, s = 1) {\n    if (this.isCoordinateChanged) {\n      const u = this.transformPoint(new v(n, r, s));\n      n = u.x, r = u.y, s = u.z;\n    }\n    const i = t * Math.PI / 180, o = Math.cos(i), a = Math.sin(i), c = new W();\n    if (n === 0 && r === 0 && s === 1)\n      c.m11 = o, c.m12 = a, c.m21 = -a, c.m22 = o;\n    else if (n === 1 && r === 0 && s === 0)\n      c.m22 = o, c.m23 = a, c.m32 = -a, c.m33 = o;\n    else if (n === 0 && r === 1 && s === 0)\n      c.m11 = o, c.m13 = -a, c.m31 = a, c.m33 = o;\n    else {\n      const u = Math.sqrt(n * n + r * r + s * s) || 1;\n      if (u == 0)\n        return this;\n      const l = n / u, h = r / u, p = s / u, d = 1 - o;\n      c.m11 = o + l * l * d, c.m12 = l * h * d + p * a, c.m13 = l * p * d - h * a, c.m21 = h * l * d - p * a, c.m22 = o + h * h * d, c.m23 = h * p * d + l * a, c.m31 = p * l * d + h * a, c.m32 = p * h * d - l * a, c.m33 = o + p * p * d;\n    }\n    return this.multiplySelf(c);\n  }\n  scale(t, n = t, r = 1) {\n    return this.clone().scaleSelf(t, n, r);\n  }\n  scaleSelf(t, n = t, r = 1) {\n    const s = new W();\n    return s.m11 = t, s.m22 = n, s.m33 = r, this.multiplySelf(s);\n  }\n  skewX(t) {\n    return this.clone().skewXSelf(t);\n  }\n  skewXSelf(t) {\n    const n = t * Math.PI / 180, r = new W();\n    return r.m21 = Math.tan(n), this.multiplySelf(r);\n  }\n  skewY(t) {\n    return this.clone().skewYSelf(t);\n  }\n  skewYSelf(t) {\n    const n = t * Math.PI / 180, r = new W();\n    return r.m12 = Math.tan(n), this.multiplySelf(r);\n  }\n  // skewZ(degree: number): DomMatrix {\n  //   return this.clone().skewZSelf(degree);\n  // }\n  // skewZSelf(degree: number): this {\n  //   const rad = (degree * Math.PI) / 180;\n  //   const skew = new DomMatrix();\n  //   skew.m13 = Math.tan(rad); // c参数\n  //   // if (skew.m13 !== 0) {\n  //   //   this.isCoordinateChanged = true;\n  //   // }\n  //   return this.multiplySelf(skew);\n  // }\n  to2D() {\n    return new W([\n      this.a,\n      this.b,\n      this.c,\n      this.d,\n      this.e,\n      this.f\n    ]);\n  }\n  // 正射投影\n  // | 2/(r-l)   0         0      -(r+l)/(r-l) |\n  // | 0         2/(t-b)   0      -(t+b)/(t-b) |\n  // | 0         0         -2/(f-n)  -(f+n)/(f-n) |\n  // | 0         0         0       1            |\n  // 透视投影\n  // | 2n/(r-l)  0        (r+l)/(r-l)   0       |\n  // | 0        2n/(t-b)  (t+b)/(t-b)   0       |\n  // | 0        0        -(f+n)/(f-n)   -2fn/(f-n) |\n  // | 0        0        -1             0       |\n  inverse() {\n    return this.clone().invertSelf();\n  }\n  /**\n   * Inverts the matrix\n   * -> based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm\n   * -> based on https://github.com/mrdoob/three.js/blob/master/src/math/Matrix4.js\n   */\n  invertSelf() {\n    if (this.is2D) {\n      const t = this.a * this.d - this.b * this.c;\n      if (t === 0)\n        throw new Error(\"Matrix is not invertible.\");\n      const n = 1 / t;\n      return this.multiplySelf(\n        new W([\n          this.d * n,\n          -this.b * n,\n          -this.c * n,\n          this.a * n,\n          (this.c * this.f - this.d * this.e) * n,\n          (this.b * this.e - this.a * this.f) * n\n        ])\n      );\n    } else {\n      const t = Array.from(this.elements), n = t[0], r = t[1], s = t[2], i = t[3], o = t[4], a = t[5], c = t[6], u = t[7], l = t[8], h = t[9], p = t[10], d = t[11], g = t[12], m = t[13], y = t[14], w = t[15], S = h * y * u - m * p * u + m * c * d - a * y * d - h * c * w + a * p * w, x = g * p * u - l * y * u - g * c * d + o * y * d + l * c * w - o * p * w, O = l * m * u - g * h * u + g * a * d - o * m * d - l * a * w + o * h * w, A = g * h * c - l * m * c - g * a * p + o * m * p + l * a * y - o * h * y, C = n * S + r * x + s * O + i * A;\n      if (C === 0)\n        throw new Error(\"Matrix is not invertible.\");\n      const _ = 1 / C;\n      return t[0] = S * _, t[1] = (m * p * i - h * y * i - m * s * d + r * y * d + h * s * w - r * p * w) * _, t[2] = (a * y * i - m * c * i + m * s * u - r * y * u - a * s * w + r * c * w) * _, t[3] = (h * c * i - a * p * i - h * s * u + r * p * u + a * s * d - r * c * d) * _, t[4] = x * _, t[5] = (l * y * i - g * p * i + g * s * d - n * y * d - l * s * w + n * p * w) * _, t[6] = (g * c * i - o * y * i - g * s * u + n * y * u + o * s * w - n * c * w) * _, t[7] = (o * p * i - l * c * i + l * s * u - n * p * u - o * s * d + n * c * d) * _, t[8] = O * _, t[9] = (g * h * i - l * m * i - g * r * d + n * m * d + l * r * w - n * h * w) * _, t[10] = (o * m * i - g * a * i + g * r * u - n * m * u - o * r * w + n * a * w) * _, t[11] = (l * a * i - o * h * i - l * r * u + n * h * u + o * r * d - n * a * d) * _, t[12] = A * _, t[13] = (l * m * s - g * h * s + g * r * p - n * m * p - l * r * y + n * h * y) * _, t[14] = (g * a * s - o * m * s - g * r * c + n * m * c + o * r * y - n * a * y) * _, t[15] = (o * h * s - l * a * s + l * r * c - n * h * c - o * r * p + n * a * p) * _, this._elements.set(t), this;\n    }\n  }\n  transformPoint(t) {\n    const { x: n = 0, y: r = 0, z: s = 0, w: i = 1 } = t, o = new v(\n      this.m11 * n + this.m21 * r + this.m31 * s + this.m41 * i,\n      this.m12 * n + this.m22 * r + this.m32 * s + this.m42 * i,\n      this.m13 * n + this.m23 * r + this.m33 * s + this.m43 * i,\n      this.m14 * n + this.m24 * r + this.m34 * s + this.m44 * i\n    );\n    return o.w !== 1 && (o.x /= o.w, o.y /= o.w, o.z /= o.w), o;\n  }\n  toString(t = 6) {\n    return this.is2D ? `matrix(${[\n      et(this.a, t),\n      et(this.b, t),\n      et(this.c, t),\n      et(this.d, t),\n      et(this.e, t),\n      et(this.f, t)\n    ].join(\", \")})` : `matrix3d(${Array.from(this.elements).map((n) => et(n, t)).join(\", \")})`;\n  }\n  toArray() {\n    return this.is2D ? [this.a, this.b, this.c, this.d, this.e, this.f] : [\n      this.m11,\n      this.m12,\n      this.m13,\n      this.m14,\n      this.m21,\n      this.m22,\n      this.m23,\n      this.m24,\n      this.m31,\n      this.m32,\n      this.m33,\n      this.m34,\n      this.m41,\n      this.m42,\n      this.m43,\n      this.m44\n    ];\n  }\n  clone() {\n    return new W(this);\n  }\n  split() {\n    const t = Math.sqrt(\n      this.m11 * this.m11 + this.m12 * this.m12 + this.m13 * this.m13\n    ), n = Math.sqrt(\n      this.m21 * this.m21 + this.m22 * this.m22 + this.m23 * this.m23\n    ), r = Math.sqrt(\n      this.m31 * this.m31 + this.m32 * this.m32 + this.m33 * this.m33\n    ), s = H(dt(Math.asin(-this.m13), -1, 1));\n    let i = H(Math.atan2(this.m23, this.m33));\n    Math.cos(Vo(s)) === 0 && (i = H(Math.atan2(-this.m31, this.m22)));\n    let o = H(Math.atan2(this.m12, this.m11));\n    return this.m11 < 0 && this.m22 >= 0 && (o += 180), {\n      x: this.m41,\n      y: this.m42,\n      z: this.m43,\n      scalarX: t,\n      scalarY: n,\n      scalarZ: r,\n      degreeX: i,\n      degreeY: s,\n      degreeZ: o,\n      skewX: H(this.m14),\n      skewY: H(this.m24),\n      skewZ: H(this.m34),\n      skewW: this.m44,\n      perspective: this.m34 ? -(1 / this.m34) : 0\n    };\n  }\n  // 行列式\n  determinant() {\n    if (this.is2D)\n      return this.a * this.d - this.b * this.c;\n    const t = this.elements, n = t[0], r = t[4], s = t[8], i = t[12], o = t[1], a = t[5], c = t[9], u = t[13], l = t[2], h = t[6], p = t[10], d = t[14], g = t[3], m = t[7], y = t[11], w = t[15];\n    return g * (+i * c * h - s * u * h - i * a * p + r * u * p + s * a * d - r * c * d) + m * (+n * c * d - n * u * p + i * o * p - s * o * d + s * u * l - i * c * l) + y * (+n * u * h - n * a * d - i * o * h + r * o * d + i * a * l - r * u * l) + w * (-s * a * l - n * c * h + n * a * p + s * o * h - r * o * p + r * c * l);\n  }\n}\nfunction Cr(e, t) {\n  return function() {\n    return e.apply(t, arguments);\n  };\n}\nconst { toString: Xo } = Object.prototype, { getPrototypeOf: sn } = Object, pe = ((e) => (t) => {\n  const n = Xo.call(t);\n  return e[n] || (e[n] = n.slice(8, -1).toLowerCase());\n})(/* @__PURE__ */ Object.create(null)), B = (e) => (e = e.toLowerCase(), (t) => pe(t) === e), me = (e) => (t) => typeof t === e, { isArray: wt } = Array, vt = me(\"undefined\");\nfunction Zo(e) {\n  return e !== null && !vt(e) && e.constructor !== null && !vt(e.constructor) && L(e.constructor.isBuffer) && e.constructor.isBuffer(e);\n}\nconst Fr = B(\"ArrayBuffer\");\nfunction Jo(e) {\n  let t;\n  return typeof ArrayBuffer < \"u\" && ArrayBuffer.isView ? t = ArrayBuffer.isView(e) : t = e && e.buffer && Fr(e.buffer), t;\n}\nconst Yo = me(\"string\"), L = me(\"function\"), kr = me(\"number\"), ge = (e) => e !== null && typeof e == \"object\", Ko = (e) => e === !0 || e === !1, Wt = (e) => {\n  if (pe(e) !== \"object\")\n    return !1;\n  const t = sn(e);\n  return (t === null || t === Object.prototype || Object.getPrototypeOf(t) === null) && !(Symbol.toStringTag in e) && !(Symbol.iterator in e);\n}, Qo = B(\"Date\"), t0 = B(\"File\"), e0 = B(\"Blob\"), n0 = B(\"FileList\"), r0 = (e) => ge(e) && L(e.pipe), s0 = (e) => {\n  let t;\n  return e && (typeof FormData == \"function\" && e instanceof FormData || L(e.append) && ((t = pe(e)) === \"formdata\" || // detect form-data instance\n  t === \"object\" && L(e.toString) && e.toString() === \"[object FormData]\"));\n}, i0 = B(\"URLSearchParams\"), [o0, a0, c0, u0] = [\"ReadableStream\", \"Request\", \"Response\", \"Headers\"].map(B), l0 = (e) => e.trim ? e.trim() : e.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, \"\");\nfunction Pt(e, t, { allOwnKeys: n = !1 } = {}) {\n  if (e === null || typeof e > \"u\")\n    return;\n  let r, s;\n  if (typeof e != \"object\" && (e = [e]), wt(e))\n    for (r = 0, s = e.length; r < s; r++)\n      t.call(null, e[r], r, e);\n  else {\n    const i = n ? Object.getOwnPropertyNames(e) : Object.keys(e), o = i.length;\n    let a;\n    for (r = 0; r < o; r++)\n      a = i[r], t.call(null, e[a], a, e);\n  }\n}\nfunction Pr(e, t) {\n  t = t.toLowerCase();\n  const n = Object.keys(e);\n  let r = n.length, s;\n  for (; r-- > 0; )\n    if (s = n[r], t === s.toLowerCase())\n      return s;\n  return null;\n}\nconst ot = (() => typeof globalThis < \"u\" ? globalThis : typeof self < \"u\" ? self : typeof window < \"u\" ? window : global)(), Dr = (e) => !vt(e) && e !== ot;\nfunction Pe() {\n  const { caseless: e } = Dr(this) && this || {}, t = {}, n = (r, s) => {\n    const i = e && Pr(t, s) || s;\n    Wt(t[i]) && Wt(r) ? t[i] = Pe(t[i], r) : Wt(r) ? t[i] = Pe({}, r) : wt(r) ? t[i] = r.slice() : t[i] = r;\n  };\n  for (let r = 0, s = arguments.length; r < s; r++)\n    arguments[r] && Pt(arguments[r], n);\n  return t;\n}\nconst h0 = (e, t, n, { allOwnKeys: r } = {}) => (Pt(t, (s, i) => {\n  n && L(s) ? e[i] = Cr(s, n) : e[i] = s;\n}, { allOwnKeys: r }), e), f0 = (e) => (e.charCodeAt(0) === 65279 && (e = e.slice(1)), e), d0 = (e, t, n, r) => {\n  e.prototype = Object.create(t.prototype, r), e.prototype.constructor = e, Object.defineProperty(e, \"super\", {\n    value: t.prototype\n  }), n && Object.assign(e.prototype, n);\n}, p0 = (e, t, n, r) => {\n  let s, i, o;\n  const a = {};\n  if (t = t || {}, e == null)\n    return t;\n  do {\n    for (s = Object.getOwnPropertyNames(e), i = s.length; i-- > 0; )\n      o = s[i], (!r || r(o, e, t)) && !a[o] && (t[o] = e[o], a[o] = !0);\n    e = n !== !1 && sn(e);\n  } while (e && (!n || n(e, t)) && e !== Object.prototype);\n  return t;\n}, m0 = (e, t, n) => {\n  e = String(e), (n === void 0 || n > e.length) && (n = e.length), n -= t.length;\n  const r = e.indexOf(t, n);\n  return r !== -1 && r === n;\n}, g0 = (e) => {\n  if (!e)\n    return null;\n  if (wt(e))\n    return e;\n  let t = e.length;\n  if (!kr(t))\n    return null;\n  const n = new Array(t);\n  for (; t-- > 0; )\n    n[t] = e[t];\n  return n;\n}, y0 = ((e) => (t) => e && t instanceof e)(typeof Uint8Array < \"u\" && sn(Uint8Array)), w0 = (e, t) => {\n  const r = (e && e[Symbol.iterator]).call(e);\n  let s;\n  for (; (s = r.next()) && !s.done; ) {\n    const i = s.value;\n    t.call(e, i[0], i[1]);\n  }\n}, b0 = (e, t) => {\n  let n;\n  const r = [];\n  for (; (n = e.exec(t)) !== null; )\n    r.push(n);\n  return r;\n}, S0 = B(\"HTMLFormElement\"), A0 = (e) => e.toLowerCase().replace(\n  /[-_\\s]([a-z\\d])(\\w*)/g,\n  function(n, r, s) {\n    return r.toUpperCase() + s;\n  }\n), _n = (({ hasOwnProperty: e }) => (t, n) => e.call(t, n))(Object.prototype), x0 = B(\"RegExp\"), Mr = (e, t) => {\n  const n = Object.getOwnPropertyDescriptors(e), r = {};\n  Pt(n, (s, i) => {\n    let o;\n    (o = t(s, i, e)) !== !1 && (r[i] = o || s);\n  }), Object.defineProperties(e, r);\n}, _0 = (e) => {\n  Mr(e, (t, n) => {\n    if (L(e) && [\"arguments\", \"caller\", \"callee\"].indexOf(n) !== -1)\n      return !1;\n    const r = e[n];\n    if (L(r)) {\n      if (t.enumerable = !1, \"writable\" in t) {\n        t.writable = !1;\n        return;\n      }\n      t.set || (t.set = () => {\n        throw Error(\"Can not rewrite read-only method '\" + n + \"'\");\n      });\n    }\n  });\n}, O0 = (e, t) => {\n  const n = {}, r = (s) => {\n    s.forEach((i) => {\n      n[i] = !0;\n    });\n  };\n  return wt(e) ? r(e) : r(String(e).split(t)), n;\n}, T0 = () => {\n}, v0 = (e, t) => e != null && Number.isFinite(e = +e) ? e : t;\nfunction R0(e) {\n  return !!(e && L(e.append) && e[Symbol.toStringTag] === \"FormData\" && e[Symbol.iterator]);\n}\nconst E0 = (e) => {\n  const t = new Array(10), n = (r, s) => {\n    if (ge(r)) {\n      if (t.indexOf(r) >= 0)\n        return;\n      if (!(\"toJSON\" in r)) {\n        t[s] = r;\n        const i = wt(r) ? [] : {};\n        return Pt(r, (o, a) => {\n          const c = n(o, s + 1);\n          !vt(c) && (i[a] = c);\n        }), t[s] = void 0, i;\n      }\n    }\n    return r;\n  };\n  return n(e, 0);\n}, C0 = B(\"AsyncFunction\"), F0 = (e) => e && (ge(e) || L(e)) && L(e.then) && L(e.catch), Lr = ((e, t) => e ? setImmediate : t ? ((n, r) => (ot.addEventListener(\"message\", ({ source: s, data: i }) => {\n  s === ot && i === n && r.length && r.shift()();\n}, !1), (s) => {\n  r.push(s), ot.postMessage(n, \"*\");\n}))(`axios@${Math.random()}`, []) : (n) => setTimeout(n))(\n  typeof setImmediate == \"function\",\n  L(ot.postMessage)\n), k0 = typeof queueMicrotask < \"u\" ? queueMicrotask.bind(ot) : typeof process < \"u\" && process.nextTick || Lr, f = {\n  isArray: wt,\n  isArrayBuffer: Fr,\n  isBuffer: Zo,\n  isFormData: s0,\n  isArrayBufferView: Jo,\n  isString: Yo,\n  isNumber: kr,\n  isBoolean: Ko,\n  isObject: ge,\n  isPlainObject: Wt,\n  isReadableStream: o0,\n  isRequest: a0,\n  isResponse: c0,\n  isHeaders: u0,\n  isUndefined: vt,\n  isDate: Qo,\n  isFile: t0,\n  isBlob: e0,\n  isRegExp: x0,\n  isFunction: L,\n  isStream: r0,\n  isURLSearchParams: i0,\n  isTypedArray: y0,\n  isFileList: n0,\n  forEach: Pt,\n  merge: Pe,\n  extend: h0,\n  trim: l0,\n  stripBOM: f0,\n  inherits: d0,\n  toFlatObject: p0,\n  kindOf: pe,\n  kindOfTest: B,\n  endsWith: m0,\n  toArray: g0,\n  forEachEntry: w0,\n  matchAll: b0,\n  isHTMLForm: S0,\n  hasOwnProperty: _n,\n  hasOwnProp: _n,\n  // an alias to avoid ESLint no-prototype-builtins detection\n  reduceDescriptors: Mr,\n  freezeMethods: _0,\n  toObjectSet: O0,\n  toCamelCase: A0,\n  noop: T0,\n  toFiniteNumber: v0,\n  findKey: Pr,\n  global: ot,\n  isContextDefined: Dr,\n  isSpecCompliantForm: R0,\n  toJSONObject: E0,\n  isAsyncFn: C0,\n  isThenable: F0,\n  setImmediate: Lr,\n  asap: k0\n};\nfunction b(e, t, n, r, s) {\n  Error.call(this), Error.captureStackTrace ? Error.captureStackTrace(this, this.constructor) : this.stack = new Error().stack, this.message = e, this.name = \"AxiosError\", t && (this.code = t), n && (this.config = n), r && (this.request = r), s && (this.response = s, this.status = s.status ? s.status : null);\n}\nf.inherits(b, Error, {\n  toJSON: function() {\n    return {\n      // Standard\n      message: this.message,\n      name: this.name,\n      // Microsoft\n      description: this.description,\n      number: this.number,\n      // Mozilla\n      fileName: this.fileName,\n      lineNumber: this.lineNumber,\n      columnNumber: this.columnNumber,\n      stack: this.stack,\n      // Axios\n      config: f.toJSONObject(this.config),\n      code: this.code,\n      status: this.status\n    };\n  }\n});\nconst Ir = b.prototype, $r = {};\n[\n  \"ERR_BAD_OPTION_VALUE\",\n  \"ERR_BAD_OPTION\",\n  \"ECONNABORTED\",\n  \"ETIMEDOUT\",\n  \"ERR_NETWORK\",\n  \"ERR_FR_TOO_MANY_REDIRECTS\",\n  \"ERR_DEPRECATED\",\n  \"ERR_BAD_RESPONSE\",\n  \"ERR_BAD_REQUEST\",\n  \"ERR_CANCELED\",\n  \"ERR_NOT_SUPPORT\",\n  \"ERR_INVALID_URL\"\n  // eslint-disable-next-line func-names\n].forEach((e) => {\n  $r[e] = { value: e };\n});\nObject.defineProperties(b, $r);\nObject.defineProperty(Ir, \"isAxiosError\", { value: !0 });\nb.from = (e, t, n, r, s, i) => {\n  const o = Object.create(Ir);\n  return f.toFlatObject(e, o, function(c) {\n    return c !== Error.prototype;\n  }, (a) => a !== \"isAxiosError\"), b.call(o, e.message, t, n, r, s), o.cause = e, o.name = e.name, i && Object.assign(o, i), o;\n};\nconst P0 = null;\nfunction De(e) {\n  return f.isPlainObject(e) || f.isArray(e);\n}\nfunction Nr(e) {\n  return f.endsWith(e, \"[]\") ? e.slice(0, -2) : e;\n}\nfunction On(e, t, n) {\n  return e ? e.concat(t).map(function(s, i) {\n    return s = Nr(s), !n && i ? \"[\" + s + \"]\" : s;\n  }).join(n ? \".\" : \"\") : t;\n}\nfunction D0(e) {\n  return f.isArray(e) && !e.some(De);\n}\nconst M0 = f.toFlatObject(f, {}, null, function(t) {\n  return /^is[A-Z]/.test(t);\n});\nfunction ye(e, t, n) {\n  if (!f.isObject(e))\n    throw new TypeError(\"target must be an object\");\n  t = t || new FormData(), n = f.toFlatObject(n, {\n    metaTokens: !0,\n    dots: !1,\n    indexes: !1\n  }, !1, function(m, y) {\n    return !f.isUndefined(y[m]);\n  });\n  const r = n.metaTokens, s = n.visitor || l, i = n.dots, o = n.indexes, c = (n.Blob || typeof Blob < \"u\" && Blob) && f.isSpecCompliantForm(t);\n  if (!f.isFunction(s))\n    throw new TypeError(\"visitor must be a function\");\n  function u(g) {\n    if (g === null)\n      return \"\";\n    if (f.isDate(g))\n      return g.toISOString();\n    if (!c && f.isBlob(g))\n      throw new b(\"Blob is not supported. Use a Buffer instead.\");\n    return f.isArrayBuffer(g) || f.isTypedArray(g) ? c && typeof Blob == \"function\" ? new Blob([g]) : Buffer.from(g) : g;\n  }\n  function l(g, m, y) {\n    let w = g;\n    if (g && !y && typeof g == \"object\") {\n      if (f.endsWith(m, \"{}\"))\n        m = r ? m : m.slice(0, -2), g = JSON.stringify(g);\n      else if (f.isArray(g) && D0(g) || (f.isFileList(g) || f.endsWith(m, \"[]\")) && (w = f.toArray(g)))\n        return m = Nr(m), w.forEach(function(x, O) {\n          !(f.isUndefined(x) || x === null) && t.append(\n            // eslint-disable-next-line no-nested-ternary\n            o === !0 ? On([m], O, i) : o === null ? m : m + \"[]\",\n            u(x)\n          );\n        }), !1;\n    }\n    return De(g) ? !0 : (t.append(On(y, m, i), u(g)), !1);\n  }\n  const h = [], p = Object.assign(M0, {\n    defaultVisitor: l,\n    convertValue: u,\n    isVisitable: De\n  });\n  function d(g, m) {\n    if (!f.isUndefined(g)) {\n      if (h.indexOf(g) !== -1)\n        throw Error(\"Circular reference detected in \" + m.join(\".\"));\n      h.push(g), f.forEach(g, function(w, S) {\n        (!(f.isUndefined(w) || w === null) && s.call(\n          t,\n          w,\n          f.isString(S) ? S.trim() : S,\n          m,\n          p\n        )) === !0 && d(w, m ? m.concat(S) : [S]);\n      }), h.pop();\n    }\n  }\n  if (!f.isObject(e))\n    throw new TypeError(\"data must be an object\");\n  return d(e), t;\n}\nfunction Tn(e) {\n  const t = {\n    \"!\": \"%21\",\n    \"'\": \"%27\",\n    \"(\": \"%28\",\n    \")\": \"%29\",\n    \"~\": \"%7E\",\n    \"%20\": \"+\",\n    \"%00\": \"\\0\"\n  };\n  return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g, function(r) {\n    return t[r];\n  });\n}\nfunction on(e, t) {\n  this._pairs = [], e && ye(e, this, t);\n}\nconst Ur = on.prototype;\nUr.append = function(t, n) {\n  this._pairs.push([t, n]);\n};\nUr.toString = function(t) {\n  const n = t ? function(r) {\n    return t.call(this, r, Tn);\n  } : Tn;\n  return this._pairs.map(function(s) {\n    return n(s[0]) + \"=\" + n(s[1]);\n  }, \"\").join(\"&\");\n};\nfunction L0(e) {\n  return encodeURIComponent(e).replace(/%3A/gi, \":\").replace(/%24/g, \"$\").replace(/%2C/gi, \",\").replace(/%20/g, \"+\").replace(/%5B/gi, \"[\").replace(/%5D/gi, \"]\");\n}\nfunction zr(e, t, n) {\n  if (!t)\n    return e;\n  const r = n && n.encode || L0;\n  f.isFunction(n) && (n = {\n    serialize: n\n  });\n  const s = n && n.serialize;\n  let i;\n  if (s ? i = s(t, n) : i = f.isURLSearchParams(t) ? t.toString() : new on(t, n).toString(r), i) {\n    const o = e.indexOf(\"#\");\n    o !== -1 && (e = e.slice(0, o)), e += (e.indexOf(\"?\") === -1 ? \"?\" : \"&\") + i;\n  }\n  return e;\n}\nclass I0 {\n  constructor() {\n    this.handlers = [];\n  }\n  /**\n   * Add a new interceptor to the stack\n   *\n   * @param {Function} fulfilled The function to handle `then` for a `Promise`\n   * @param {Function} rejected The function to handle `reject` for a `Promise`\n   *\n   * @return {Number} An ID used to remove interceptor later\n   */\n  use(t, n, r) {\n    return this.handlers.push({\n      fulfilled: t,\n      rejected: n,\n      synchronous: r ? r.synchronous : !1,\n      runWhen: r ? r.runWhen : null\n    }), this.handlers.length - 1;\n  }\n  /**\n   * Remove an interceptor from the stack\n   *\n   * @param {Number} id The ID that was returned by `use`\n   *\n   * @returns {Boolean} `true` if the interceptor was removed, `false` otherwise\n   */\n  eject(t) {\n    this.handlers[t] && (this.handlers[t] = null);\n  }\n  /**\n   * Clear all interceptors from the stack\n   *\n   * @returns {void}\n   */\n  clear() {\n    this.handlers && (this.handlers = []);\n  }\n  /**\n   * Iterate over all the registered interceptors\n   *\n   * This method is particularly useful for skipping over any\n   * interceptors that may have become `null` calling `eject`.\n   *\n   * @param {Function} fn The function to call for each interceptor\n   *\n   * @returns {void}\n   */\n  forEach(t) {\n    f.forEach(this.handlers, function(r) {\n      r !== null && t(r);\n    });\n  }\n}\nconst vn = I0, jr = {\n  silentJSONParsing: !0,\n  forcedJSONParsing: !0,\n  clarifyTimeoutError: !1\n}, $0 = typeof URLSearchParams < \"u\" ? URLSearchParams : on, N0 = typeof FormData < \"u\" ? FormData : null, U0 = typeof Blob < \"u\" ? Blob : null, z0 = {\n  isBrowser: !0,\n  classes: {\n    URLSearchParams: $0,\n    FormData: N0,\n    Blob: U0\n  },\n  protocols: [\"http\", \"https\", \"file\", \"blob\", \"url\", \"data\"]\n}, an = typeof window < \"u\" && typeof document < \"u\", Me = typeof navigator == \"object\" && navigator || void 0, j0 = an && (!Me || [\"ReactNative\", \"NativeScript\", \"NS\"].indexOf(Me.product) < 0), B0 = (() => typeof WorkerGlobalScope < \"u\" && // eslint-disable-next-line no-undef\nself instanceof WorkerGlobalScope && typeof self.importScripts == \"function\")(), q0 = an && window.location.href || \"http://localhost\", W0 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({\n  __proto__: null,\n  hasBrowserEnv: an,\n  hasStandardBrowserEnv: j0,\n  hasStandardBrowserWebWorkerEnv: B0,\n  navigator: Me,\n  origin: q0\n}, Symbol.toStringTag, { value: \"Module\" })), k = {\n  ...W0,\n  ...z0\n};\nfunction H0(e, t) {\n  return ye(e, new k.classes.URLSearchParams(), Object.assign({\n    visitor: function(n, r, s, i) {\n      return k.isNode && f.isBuffer(n) ? (this.append(r, n.toString(\"base64\")), !1) : i.defaultVisitor.apply(this, arguments);\n    }\n  }, t));\n}\nfunction V0(e) {\n  return f.matchAll(/\\w+|\\[(\\w*)]/g, e).map((t) => t[0] === \"[]\" ? \"\" : t[1] || t[0]);\n}\nfunction G0(e) {\n  const t = {}, n = Object.keys(e);\n  let r;\n  const s = n.length;\n  let i;\n  for (r = 0; r < s; r++)\n    i = n[r], t[i] = e[i];\n  return t;\n}\nfunction Br(e) {\n  function t(n, r, s, i) {\n    let o = n[i++];\n    if (o === \"__proto__\")\n      return !0;\n    const a = Number.isFinite(+o), c = i >= n.length;\n    return o = !o && f.isArray(s) ? s.length : o, c ? (f.hasOwnProp(s, o) ? s[o] = [s[o], r] : s[o] = r, !a) : ((!s[o] || !f.isObject(s[o])) && (s[o] = []), t(n, r, s[o], i) && f.isArray(s[o]) && (s[o] = G0(s[o])), !a);\n  }\n  if (f.isFormData(e) && f.isFunction(e.entries)) {\n    const n = {};\n    return f.forEachEntry(e, (r, s) => {\n      t(V0(r), s, n, 0);\n    }), n;\n  }\n  return null;\n}\nfunction X0(e, t, n) {\n  if (f.isString(e))\n    try {\n      return (t || JSON.parse)(e), f.trim(e);\n    } catch (r) {\n      if (r.name !== \"SyntaxError\")\n        throw r;\n    }\n  return (n || JSON.stringify)(e);\n}\nconst cn = {\n  transitional: jr,\n  adapter: [\"xhr\", \"http\", \"fetch\"],\n  transformRequest: [function(t, n) {\n    const r = n.getContentType() || \"\", s = r.indexOf(\"application/json\") > -1, i = f.isObject(t);\n    if (i && f.isHTMLForm(t) && (t = new FormData(t)), f.isFormData(t))\n      return s ? JSON.stringify(Br(t)) : t;\n    if (f.isArrayBuffer(t) || f.isBuffer(t) || f.isStream(t) || f.isFile(t) || f.isBlob(t) || f.isReadableStream(t))\n      return t;\n    if (f.isArrayBufferView(t))\n      return t.buffer;\n    if (f.isURLSearchParams(t))\n      return n.setContentType(\"application/x-www-form-urlencoded;charset=utf-8\", !1), t.toString();\n    let a;\n    if (i) {\n      if (r.indexOf(\"application/x-www-form-urlencoded\") > -1)\n        return H0(t, this.formSerializer).toString();\n      if ((a = f.isFileList(t)) || r.indexOf(\"multipart/form-data\") > -1) {\n        const c = this.env && this.env.FormData;\n        return ye(\n          a ? { \"files[]\": t } : t,\n          c && new c(),\n          this.formSerializer\n        );\n      }\n    }\n    return i || s ? (n.setContentType(\"application/json\", !1), X0(t)) : t;\n  }],\n  transformResponse: [function(t) {\n    const n = this.transitional || cn.transitional, r = n && n.forcedJSONParsing, s = this.responseType === \"json\";\n    if (f.isResponse(t) || f.isReadableStream(t))\n      return t;\n    if (t && f.isString(t) && (r && !this.responseType || s)) {\n      const o = !(n && n.silentJSONParsing) && s;\n      try {\n        return JSON.parse(t);\n      } catch (a) {\n        if (o)\n          throw a.name === \"SyntaxError\" ? b.from(a, b.ERR_BAD_RESPONSE, this, null, this.response) : a;\n      }\n    }\n    return t;\n  }],\n  /**\n   * A timeout in milliseconds to abort a request. If set to 0 (default) a\n   * timeout is not created.\n   */\n  timeout: 0,\n  xsrfCookieName: \"XSRF-TOKEN\",\n  xsrfHeaderName: \"X-XSRF-TOKEN\",\n  maxContentLength: -1,\n  maxBodyLength: -1,\n  env: {\n    FormData: k.classes.FormData,\n    Blob: k.classes.Blob\n  },\n  validateStatus: function(t) {\n    return t >= 200 && t < 300;\n  },\n  headers: {\n    common: {\n      Accept: \"application/json, text/plain, */*\",\n      \"Content-Type\": void 0\n    }\n  }\n};\nf.forEach([\"delete\", \"get\", \"head\", \"post\", \"put\", \"patch\"], (e) => {\n  cn.headers[e] = {};\n});\nconst un = cn, Z0 = f.toObjectSet([\n  \"age\",\n  \"authorization\",\n  \"content-length\",\n  \"content-type\",\n  \"etag\",\n  \"expires\",\n  \"from\",\n  \"host\",\n  \"if-modified-since\",\n  \"if-unmodified-since\",\n  \"last-modified\",\n  \"location\",\n  \"max-forwards\",\n  \"proxy-authorization\",\n  \"referer\",\n  \"retry-after\",\n  \"user-agent\"\n]), J0 = (e) => {\n  const t = {};\n  let n, r, s;\n  return e && e.split(`\n`).forEach(function(o) {\n    s = o.indexOf(\":\"), n = o.substring(0, s).trim().toLowerCase(), r = o.substring(s + 1).trim(), !(!n || t[n] && Z0[n]) && (n === \"set-cookie\" ? t[n] ? t[n].push(r) : t[n] = [r] : t[n] = t[n] ? t[n] + \", \" + r : r);\n  }), t;\n}, Rn = Symbol(\"internals\");\nfunction At(e) {\n  return e && String(e).trim().toLowerCase();\n}\nfunction Ht(e) {\n  return e === !1 || e == null ? e : f.isArray(e) ? e.map(Ht) : String(e);\n}\nfunction Y0(e) {\n  const t = /* @__PURE__ */ Object.create(null), n = /([^\\s,;=]+)\\s*(?:=\\s*([^,;]+))?/g;\n  let r;\n  for (; r = n.exec(e); )\n    t[r[1]] = r[2];\n  return t;\n}\nconst K0 = (e) => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim());\nfunction _e(e, t, n, r, s) {\n  if (f.isFunction(r))\n    return r.call(this, t, n);\n  if (s && (t = n), !!f.isString(t)) {\n    if (f.isString(r))\n      return t.indexOf(r) !== -1;\n    if (f.isRegExp(r))\n      return r.test(t);\n  }\n}\nfunction Q0(e) {\n  return e.trim().toLowerCase().replace(/([a-z\\d])(\\w*)/g, (t, n, r) => n.toUpperCase() + r);\n}\nfunction ta(e, t) {\n  const n = f.toCamelCase(\" \" + t);\n  [\"get\", \"set\", \"has\"].forEach((r) => {\n    Object.defineProperty(e, r + n, {\n      value: function(s, i, o) {\n        return this[r].call(this, t, s, i, o);\n      },\n      configurable: !0\n    });\n  });\n}\nclass we {\n  constructor(t) {\n    t && this.set(t);\n  }\n  set(t, n, r) {\n    const s = this;\n    function i(a, c, u) {\n      const l = At(c);\n      if (!l)\n        throw new Error(\"header name must be a non-empty string\");\n      const h = f.findKey(s, l);\n      (!h || s[h] === void 0 || u === !0 || u === void 0 && s[h] !== !1) && (s[h || c] = Ht(a));\n    }\n    const o = (a, c) => f.forEach(a, (u, l) => i(u, l, c));\n    if (f.isPlainObject(t) || t instanceof this.constructor)\n      o(t, n);\n    else if (f.isString(t) && (t = t.trim()) && !K0(t))\n      o(J0(t), n);\n    else if (f.isHeaders(t))\n      for (const [a, c] of t.entries())\n        i(c, a, r);\n    else\n      t != null && i(n, t, r);\n    return this;\n  }\n  get(t, n) {\n    if (t = At(t), t) {\n      const r = f.findKey(this, t);\n      if (r) {\n        const s = this[r];\n        if (!n)\n          return s;\n        if (n === !0)\n          return Y0(s);\n        if (f.isFunction(n))\n          return n.call(this, s, r);\n        if (f.isRegExp(n))\n          return n.exec(s);\n        throw new TypeError(\"parser must be boolean|regexp|function\");\n      }\n    }\n  }\n  has(t, n) {\n    if (t = At(t), t) {\n      const r = f.findKey(this, t);\n      return !!(r && this[r] !== void 0 && (!n || _e(this, this[r], r, n)));\n    }\n    return !1;\n  }\n  delete(t, n) {\n    const r = this;\n    let s = !1;\n    function i(o) {\n      if (o = At(o), o) {\n        const a = f.findKey(r, o);\n        a && (!n || _e(r, r[a], a, n)) && (delete r[a], s = !0);\n      }\n    }\n    return f.isArray(t) ? t.forEach(i) : i(t), s;\n  }\n  clear(t) {\n    const n = Object.keys(this);\n    let r = n.length, s = !1;\n    for (; r--; ) {\n      const i = n[r];\n      (!t || _e(this, this[i], i, t, !0)) && (delete this[i], s = !0);\n    }\n    return s;\n  }\n  normalize(t) {\n    const n = this, r = {};\n    return f.forEach(this, (s, i) => {\n      const o = f.findKey(r, i);\n      if (o) {\n        n[o] = Ht(s), delete n[i];\n        return;\n      }\n      const a = t ? Q0(i) : String(i).trim();\n      a !== i && delete n[i], n[a] = Ht(s), r[a] = !0;\n    }), this;\n  }\n  concat(...t) {\n    return this.constructor.concat(this, ...t);\n  }\n  toJSON(t) {\n    const n = /* @__PURE__ */ Object.create(null);\n    return f.forEach(this, (r, s) => {\n      r != null && r !== !1 && (n[s] = t && f.isArray(r) ? r.join(\", \") : r);\n    }), n;\n  }\n  [Symbol.iterator]() {\n    return Object.entries(this.toJSON())[Symbol.iterator]();\n  }\n  toString() {\n    return Object.entries(this.toJSON()).map(([t, n]) => t + \": \" + n).join(`\n`);\n  }\n  get [Symbol.toStringTag]() {\n    return \"AxiosHeaders\";\n  }\n  static from(t) {\n    return t instanceof this ? t : new this(t);\n  }\n  static concat(t, ...n) {\n    const r = new this(t);\n    return n.forEach((s) => r.set(s)), r;\n  }\n  static accessor(t) {\n    const r = (this[Rn] = this[Rn] = {\n      accessors: {}\n    }).accessors, s = this.prototype;\n    function i(o) {\n      const a = At(o);\n      r[a] || (ta(s, o), r[a] = !0);\n    }\n    return f.isArray(t) ? t.forEach(i) : i(t), this;\n  }\n}\nwe.accessor([\"Content-Type\", \"Content-Length\", \"Accept\", \"Accept-Encoding\", \"User-Agent\", \"Authorization\"]);\nf.reduceDescriptors(we.prototype, ({ value: e }, t) => {\n  let n = t[0].toUpperCase() + t.slice(1);\n  return {\n    get: () => e,\n    set(r) {\n      this[n] = r;\n    }\n  };\n});\nf.freezeMethods(we);\nconst z = we;\nfunction Oe(e, t) {\n  const n = this || un, r = t || n, s = z.from(r.headers);\n  let i = r.data;\n  return f.forEach(e, function(a) {\n    i = a.call(n, i, s.normalize(), t ? t.status : void 0);\n  }), s.normalize(), i;\n}\nfunction qr(e) {\n  return !!(e && e.__CANCEL__);\n}\nfunction bt(e, t, n) {\n  b.call(this, e ?? \"canceled\", b.ERR_CANCELED, t, n), this.name = \"CanceledError\";\n}\nf.inherits(bt, b, {\n  __CANCEL__: !0\n});\nfunction Wr(e, t, n) {\n  const r = n.config.validateStatus;\n  !n.status || !r || r(n.status) ? e(n) : t(new b(\n    \"Request failed with status code \" + n.status,\n    [b.ERR_BAD_REQUEST, b.ERR_BAD_RESPONSE][Math.floor(n.status / 100) - 4],\n    n.config,\n    n.request,\n    n\n  ));\n}\nfunction ea(e) {\n  const t = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(e);\n  return t && t[1] || \"\";\n}\nfunction na(e, t) {\n  e = e || 10;\n  const n = new Array(e), r = new Array(e);\n  let s = 0, i = 0, o;\n  return t = t !== void 0 ? t : 1e3, function(c) {\n    const u = Date.now(), l = r[i];\n    o || (o = u), n[s] = c, r[s] = u;\n    let h = i, p = 0;\n    for (; h !== s; )\n      p += n[h++], h = h % e;\n    if (s = (s + 1) % e, s === i && (i = (i + 1) % e), u - o < t)\n      return;\n    const d = l && u - l;\n    return d ? Math.round(p * 1e3 / d) : void 0;\n  };\n}\nfunction ra(e, t) {\n  let n = 0, r = 1e3 / t, s, i;\n  const o = (u, l = Date.now()) => {\n    n = l, s = null, i && (clearTimeout(i), i = null), e.apply(null, u);\n  };\n  return [(...u) => {\n    const l = Date.now(), h = l - n;\n    h >= r ? o(u, l) : (s = u, i || (i = setTimeout(() => {\n      i = null, o(s);\n    }, r - h)));\n  }, () => s && o(s)];\n}\nconst oe = (e, t, n = 3) => {\n  let r = 0;\n  const s = na(50, 250);\n  return ra((i) => {\n    const o = i.loaded, a = i.lengthComputable ? i.total : void 0, c = o - r, u = s(c), l = o <= a;\n    r = o;\n    const h = {\n      loaded: o,\n      total: a,\n      progress: a ? o / a : void 0,\n      bytes: c,\n      rate: u || void 0,\n      estimated: u && a && l ? (a - o) / u : void 0,\n      event: i,\n      lengthComputable: a != null,\n      [t ? \"download\" : \"upload\"]: !0\n    };\n    e(h);\n  }, n);\n}, En = (e, t) => {\n  const n = e != null;\n  return [(r) => t[0]({\n    lengthComputable: n,\n    total: e,\n    loaded: r\n  }), t[1]];\n}, Cn = (e) => (...t) => f.asap(() => e(...t)), sa = k.hasStandardBrowserEnv ? ((e, t) => (n) => (n = new URL(n, k.origin), e.protocol === n.protocol && e.host === n.host && (t || e.port === n.port)))(\n  new URL(k.origin),\n  k.navigator && /(msie|trident)/i.test(k.navigator.userAgent)\n) : () => !0, ia = k.hasStandardBrowserEnv ? (\n  // Standard browser envs support document.cookie\n  {\n    write(e, t, n, r, s, i) {\n      const o = [e + \"=\" + encodeURIComponent(t)];\n      f.isNumber(n) && o.push(\"expires=\" + new Date(n).toGMTString()), f.isString(r) && o.push(\"path=\" + r), f.isString(s) && o.push(\"domain=\" + s), i === !0 && o.push(\"secure\"), document.cookie = o.join(\"; \");\n    },\n    read(e) {\n      const t = document.cookie.match(new RegExp(\"(^|;\\\\s*)(\" + e + \")=([^;]*)\"));\n      return t ? decodeURIComponent(t[3]) : null;\n    },\n    remove(e) {\n      this.write(e, \"\", Date.now() - 864e5);\n    }\n  }\n) : (\n  // Non-standard browser env (web workers, react-native) lack needed support.\n  {\n    write() {\n    },\n    read() {\n      return null;\n    },\n    remove() {\n    }\n  }\n);\nfunction oa(e) {\n  return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(e);\n}\nfunction aa(e, t) {\n  return t ? e.replace(/\\/?\\/$/, \"\") + \"/\" + t.replace(/^\\/+/, \"\") : e;\n}\nfunction Hr(e, t, n) {\n  let r = !oa(t);\n  return e && (r || n == !1) ? aa(e, t) : t;\n}\nconst Fn = (e) => e instanceof z ? { ...e } : e;\nfunction at(e, t) {\n  t = t || {};\n  const n = {};\n  function r(u, l, h, p) {\n    return f.isPlainObject(u) && f.isPlainObject(l) ? f.merge.call({ caseless: p }, u, l) : f.isPlainObject(l) ? f.merge({}, l) : f.isArray(l) ? l.slice() : l;\n  }\n  function s(u, l, h, p) {\n    if (f.isUndefined(l)) {\n      if (!f.isUndefined(u))\n        return r(void 0, u, h, p);\n    } else\n      return r(u, l, h, p);\n  }\n  function i(u, l) {\n    if (!f.isUndefined(l))\n      return r(void 0, l);\n  }\n  function o(u, l) {\n    if (f.isUndefined(l)) {\n      if (!f.isUndefined(u))\n        return r(void 0, u);\n    } else\n      return r(void 0, l);\n  }\n  function a(u, l, h) {\n    if (h in t)\n      return r(u, l);\n    if (h in e)\n      return r(void 0, u);\n  }\n  const c = {\n    url: i,\n    method: i,\n    data: i,\n    baseURL: o,\n    transformRequest: o,\n    transformResponse: o,\n    paramsSerializer: o,\n    timeout: o,\n    timeoutMessage: o,\n    withCredentials: o,\n    withXSRFToken: o,\n    adapter: o,\n    responseType: o,\n    xsrfCookieName: o,\n    xsrfHeaderName: o,\n    onUploadProgress: o,\n    onDownloadProgress: o,\n    decompress: o,\n    maxContentLength: o,\n    maxBodyLength: o,\n    beforeRedirect: o,\n    transport: o,\n    httpAgent: o,\n    httpsAgent: o,\n    cancelToken: o,\n    socketPath: o,\n    responseEncoding: o,\n    validateStatus: a,\n    headers: (u, l, h) => s(Fn(u), Fn(l), h, !0)\n  };\n  return f.forEach(Object.keys(Object.assign({}, e, t)), function(l) {\n    const h = c[l] || s, p = h(e[l], t[l], l);\n    f.isUndefined(p) && h !== a || (n[l] = p);\n  }), n;\n}\nconst Vr = (e) => {\n  const t = at({}, e);\n  let { data: n, withXSRFToken: r, xsrfHeaderName: s, xsrfCookieName: i, headers: o, auth: a } = t;\n  t.headers = o = z.from(o), t.url = zr(Hr(t.baseURL, t.url, t.allowAbsoluteUrls), e.params, e.paramsSerializer), a && o.set(\n    \"Authorization\",\n    \"Basic \" + btoa((a.username || \"\") + \":\" + (a.password ? unescape(encodeURIComponent(a.password)) : \"\"))\n  );\n  let c;\n  if (f.isFormData(n)) {\n    if (k.hasStandardBrowserEnv || k.hasStandardBrowserWebWorkerEnv)\n      o.setContentType(void 0);\n    else if ((c = o.getContentType()) !== !1) {\n      const [u, ...l] = c ? c.split(\";\").map((h) => h.trim()).filter(Boolean) : [];\n      o.setContentType([u || \"multipart/form-data\", ...l].join(\"; \"));\n    }\n  }\n  if (k.hasStandardBrowserEnv && (r && f.isFunction(r) && (r = r(t)), r || r !== !1 && sa(t.url))) {\n    const u = s && i && ia.read(i);\n    u && o.set(s, u);\n  }\n  return t;\n}, ca = typeof XMLHttpRequest < \"u\", ua = ca && function(e) {\n  return new Promise(function(n, r) {\n    const s = Vr(e);\n    let i = s.data;\n    const o = z.from(s.headers).normalize();\n    let { responseType: a, onUploadProgress: c, onDownloadProgress: u } = s, l, h, p, d, g;\n    function m() {\n      d && d(), g && g(), s.cancelToken && s.cancelToken.unsubscribe(l), s.signal && s.signal.removeEventListener(\"abort\", l);\n    }\n    let y = new XMLHttpRequest();\n    y.open(s.method.toUpperCase(), s.url, !0), y.timeout = s.timeout;\n    function w() {\n      if (!y)\n        return;\n      const x = z.from(\n        \"getAllResponseHeaders\" in y && y.getAllResponseHeaders()\n      ), A = {\n        data: !a || a === \"text\" || a === \"json\" ? y.responseText : y.response,\n        status: y.status,\n        statusText: y.statusText,\n        headers: x,\n        config: e,\n        request: y\n      };\n      Wr(function(_) {\n        n(_), m();\n      }, function(_) {\n        r(_), m();\n      }, A), y = null;\n    }\n    \"onloadend\" in y ? y.onloadend = w : y.onreadystatechange = function() {\n      !y || y.readyState !== 4 || y.status === 0 && !(y.responseURL && y.responseURL.indexOf(\"file:\") === 0) || setTimeout(w);\n    }, y.onabort = function() {\n      y && (r(new b(\"Request aborted\", b.ECONNABORTED, e, y)), y = null);\n    }, y.onerror = function() {\n      r(new b(\"Network Error\", b.ERR_NETWORK, e, y)), y = null;\n    }, y.ontimeout = function() {\n      let O = s.timeout ? \"timeout of \" + s.timeout + \"ms exceeded\" : \"timeout exceeded\";\n      const A = s.transitional || jr;\n      s.timeoutErrorMessage && (O = s.timeoutErrorMessage), r(new b(\n        O,\n        A.clarifyTimeoutError ? b.ETIMEDOUT : b.ECONNABORTED,\n        e,\n        y\n      )), y = null;\n    }, i === void 0 && o.setContentType(null), \"setRequestHeader\" in y && f.forEach(o.toJSON(), function(O, A) {\n      y.setRequestHeader(A, O);\n    }), f.isUndefined(s.withCredentials) || (y.withCredentials = !!s.withCredentials), a && a !== \"json\" && (y.responseType = s.responseType), u && ([p, g] = oe(u, !0), y.addEventListener(\"progress\", p)), c && y.upload && ([h, d] = oe(c), y.upload.addEventListener(\"progress\", h), y.upload.addEventListener(\"loadend\", d)), (s.cancelToken || s.signal) && (l = (x) => {\n      y && (r(!x || x.type ? new bt(null, e, y) : x), y.abort(), y = null);\n    }, s.cancelToken && s.cancelToken.subscribe(l), s.signal && (s.signal.aborted ? l() : s.signal.addEventListener(\"abort\", l)));\n    const S = ea(s.url);\n    if (S && k.protocols.indexOf(S) === -1) {\n      r(new b(\"Unsupported protocol \" + S + \":\", b.ERR_BAD_REQUEST, e));\n      return;\n    }\n    y.send(i || null);\n  });\n}, la = (e, t) => {\n  const { length: n } = e = e ? e.filter(Boolean) : [];\n  if (t || n) {\n    let r = new AbortController(), s;\n    const i = function(u) {\n      if (!s) {\n        s = !0, a();\n        const l = u instanceof Error ? u : this.reason;\n        r.abort(l instanceof b ? l : new bt(l instanceof Error ? l.message : l));\n      }\n    };\n    let o = t && setTimeout(() => {\n      o = null, i(new b(`timeout ${t} of ms exceeded`, b.ETIMEDOUT));\n    }, t);\n    const a = () => {\n      e && (o && clearTimeout(o), o = null, e.forEach((u) => {\n        u.unsubscribe ? u.unsubscribe(i) : u.removeEventListener(\"abort\", i);\n      }), e = null);\n    };\n    e.forEach((u) => u.addEventListener(\"abort\", i));\n    const { signal: c } = r;\n    return c.unsubscribe = () => f.asap(a), c;\n  }\n}, ha = la, fa = function* (e, t) {\n  let n = e.byteLength;\n  if (!t || n < t) {\n    yield e;\n    return;\n  }\n  let r = 0, s;\n  for (; r < n; )\n    s = r + t, yield e.slice(r, s), r = s;\n}, da = async function* (e, t) {\n  for await (const n of pa(e))\n    yield* fa(n, t);\n}, pa = async function* (e) {\n  if (e[Symbol.asyncIterator]) {\n    yield* e;\n    return;\n  }\n  const t = e.getReader();\n  try {\n    for (; ; ) {\n      const { done: n, value: r } = await t.read();\n      if (n)\n        break;\n      yield r;\n    }\n  } finally {\n    await t.cancel();\n  }\n}, kn = (e, t, n, r) => {\n  const s = da(e, t);\n  let i = 0, o, a = (c) => {\n    o || (o = !0, r && r(c));\n  };\n  return new ReadableStream({\n    async pull(c) {\n      try {\n        const { done: u, value: l } = await s.next();\n        if (u) {\n          a(), c.close();\n          return;\n        }\n        let h = l.byteLength;\n        if (n) {\n          let p = i += h;\n          n(p);\n        }\n        c.enqueue(new Uint8Array(l));\n      } catch (u) {\n        throw a(u), u;\n      }\n    },\n    cancel(c) {\n      return a(c), s.return();\n    }\n  }, {\n    highWaterMark: 2\n  });\n}, be = typeof fetch == \"function\" && typeof Request == \"function\" && typeof Response == \"function\", Gr = be && typeof ReadableStream == \"function\", ma = be && (typeof TextEncoder == \"function\" ? ((e) => (t) => e.encode(t))(new TextEncoder()) : async (e) => new Uint8Array(await new Response(e).arrayBuffer())), Xr = (e, ...t) => {\n  try {\n    return !!e(...t);\n  } catch {\n    return !1;\n  }\n}, ga = Gr && Xr(() => {\n  let e = !1;\n  const t = new Request(k.origin, {\n    body: new ReadableStream(),\n    method: \"POST\",\n    get duplex() {\n      return e = !0, \"half\";\n    }\n  }).headers.has(\"Content-Type\");\n  return e && !t;\n}), Pn = 64 * 1024, Le = Gr && Xr(() => f.isReadableStream(new Response(\"\").body)), ae = {\n  stream: Le && ((e) => e.body)\n};\nbe && ((e) => {\n  [\"text\", \"arrayBuffer\", \"blob\", \"formData\", \"stream\"].forEach((t) => {\n    !ae[t] && (ae[t] = f.isFunction(e[t]) ? (n) => n[t]() : (n, r) => {\n      throw new b(`Response type '${t}' is not supported`, b.ERR_NOT_SUPPORT, r);\n    });\n  });\n})(new Response());\nconst ya = async (e) => {\n  if (e == null)\n    return 0;\n  if (f.isBlob(e))\n    return e.size;\n  if (f.isSpecCompliantForm(e))\n    return (await new Request(k.origin, {\n      method: \"POST\",\n      body: e\n    }).arrayBuffer()).byteLength;\n  if (f.isArrayBufferView(e) || f.isArrayBuffer(e))\n    return e.byteLength;\n  if (f.isURLSearchParams(e) && (e = e + \"\"), f.isString(e))\n    return (await ma(e)).byteLength;\n}, wa = async (e, t) => {\n  const n = f.toFiniteNumber(e.getContentLength());\n  return n ?? ya(t);\n}, ba = be && (async (e) => {\n  let {\n    url: t,\n    method: n,\n    data: r,\n    signal: s,\n    cancelToken: i,\n    timeout: o,\n    onDownloadProgress: a,\n    onUploadProgress: c,\n    responseType: u,\n    headers: l,\n    withCredentials: h = \"same-origin\",\n    fetchOptions: p\n  } = Vr(e);\n  u = u ? (u + \"\").toLowerCase() : \"text\";\n  let d = ha([s, i && i.toAbortSignal()], o), g;\n  const m = d && d.unsubscribe && (() => {\n    d.unsubscribe();\n  });\n  let y;\n  try {\n    if (c && ga && n !== \"get\" && n !== \"head\" && (y = await wa(l, r)) !== 0) {\n      let A = new Request(t, {\n        method: \"POST\",\n        body: r,\n        duplex: \"half\"\n      }), C;\n      if (f.isFormData(r) && (C = A.headers.get(\"content-type\")) && l.setContentType(C), A.body) {\n        const [_, G] = En(\n          y,\n          oe(Cn(c))\n        );\n        r = kn(A.body, Pn, _, G);\n      }\n    }\n    f.isString(h) || (h = h ? \"include\" : \"omit\");\n    const w = \"credentials\" in Request.prototype;\n    g = new Request(t, {\n      ...p,\n      signal: d,\n      method: n.toUpperCase(),\n      headers: l.normalize().toJSON(),\n      body: r,\n      duplex: \"half\",\n      credentials: w ? h : void 0\n    });\n    let S = await fetch(g);\n    const x = Le && (u === \"stream\" || u === \"response\");\n    if (Le && (a || x && m)) {\n      const A = {};\n      [\"status\", \"statusText\", \"headers\"].forEach((X) => {\n        A[X] = S[X];\n      });\n      const C = f.toFiniteNumber(S.headers.get(\"content-length\")), [_, G] = a && En(\n        C,\n        oe(Cn(a), !0)\n      ) || [];\n      S = new Response(\n        kn(S.body, Pn, _, () => {\n          G && G(), m && m();\n        }),\n        A\n      );\n    }\n    u = u || \"text\";\n    let O = await ae[f.findKey(ae, u) || \"text\"](S, e);\n    return !x && m && m(), await new Promise((A, C) => {\n      Wr(A, C, {\n        data: O,\n        headers: z.from(S.headers),\n        status: S.status,\n        statusText: S.statusText,\n        config: e,\n        request: g\n      });\n    });\n  } catch (w) {\n    throw m && m(), w && w.name === \"TypeError\" && /fetch/i.test(w.message) ? Object.assign(\n      new b(\"Network Error\", b.ERR_NETWORK, e, g),\n      {\n        cause: w.cause || w\n      }\n    ) : b.from(w, w && w.code, e, g);\n  }\n}), Ie = {\n  http: P0,\n  xhr: ua,\n  fetch: ba\n};\nf.forEach(Ie, (e, t) => {\n  if (e) {\n    try {\n      Object.defineProperty(e, \"name\", { value: t });\n    } catch {\n    }\n    Object.defineProperty(e, \"adapterName\", { value: t });\n  }\n});\nconst Dn = (e) => `- ${e}`, Sa = (e) => f.isFunction(e) || e === null || e === !1, Zr = {\n  getAdapter: (e) => {\n    e = f.isArray(e) ? e : [e];\n    const { length: t } = e;\n    let n, r;\n    const s = {};\n    for (let i = 0; i < t; i++) {\n      n = e[i];\n      let o;\n      if (r = n, !Sa(n) && (r = Ie[(o = String(n)).toLowerCase()], r === void 0))\n        throw new b(`Unknown adapter '${o}'`);\n      if (r)\n        break;\n      s[o || \"#\" + i] = r;\n    }\n    if (!r) {\n      const i = Object.entries(s).map(\n        ([a, c]) => `adapter ${a} ` + (c === !1 ? \"is not supported by the environment\" : \"is not available in the build\")\n      );\n      let o = t ? i.length > 1 ? `since :\n` + i.map(Dn).join(`\n`) : \" \" + Dn(i[0]) : \"as no adapter specified\";\n      throw new b(\n        \"There is no suitable adapter to dispatch the request \" + o,\n        \"ERR_NOT_SUPPORT\"\n      );\n    }\n    return r;\n  },\n  adapters: Ie\n};\nfunction Te(e) {\n  if (e.cancelToken && e.cancelToken.throwIfRequested(), e.signal && e.signal.aborted)\n    throw new bt(null, e);\n}\nfunction Mn(e) {\n  return Te(e), e.headers = z.from(e.headers), e.data = Oe.call(\n    e,\n    e.transformRequest\n  ), [\"post\", \"put\", \"patch\"].indexOf(e.method) !== -1 && e.headers.setContentType(\"application/x-www-form-urlencoded\", !1), Zr.getAdapter(e.adapter || un.adapter)(e).then(function(r) {\n    return Te(e), r.data = Oe.call(\n      e,\n      e.transformResponse,\n      r\n    ), r.headers = z.from(r.headers), r;\n  }, function(r) {\n    return qr(r) || (Te(e), r && r.response && (r.response.data = Oe.call(\n      e,\n      e.transformResponse,\n      r.response\n    ), r.response.headers = z.from(r.response.headers))), Promise.reject(r);\n  });\n}\nconst Jr = \"1.8.4\", Se = {};\n[\"object\", \"boolean\", \"number\", \"function\", \"string\", \"symbol\"].forEach((e, t) => {\n  Se[e] = function(r) {\n    return typeof r === e || \"a\" + (t < 1 ? \"n \" : \" \") + e;\n  };\n});\nconst Ln = {};\nSe.transitional = function(t, n, r) {\n  function s(i, o) {\n    return \"[Axios v\" + Jr + \"] Transitional option '\" + i + \"'\" + o + (r ? \". \" + r : \"\");\n  }\n  return (i, o, a) => {\n    if (t === !1)\n      throw new b(\n        s(o, \" has been removed\" + (n ? \" in \" + n : \"\")),\n        b.ERR_DEPRECATED\n      );\n    return n && !Ln[o] && (Ln[o] = !0, console.warn(\n      s(\n        o,\n        \" has been deprecated since v\" + n + \" and will be removed in the near future\"\n      )\n    )), t ? t(i, o, a) : !0;\n  };\n};\nSe.spelling = function(t) {\n  return (n, r) => (console.warn(`${r} is likely a misspelling of ${t}`), !0);\n};\nfunction Aa(e, t, n) {\n  if (typeof e != \"object\")\n    throw new b(\"options must be an object\", b.ERR_BAD_OPTION_VALUE);\n  const r = Object.keys(e);\n  let s = r.length;\n  for (; s-- > 0; ) {\n    const i = r[s], o = t[i];\n    if (o) {\n      const a = e[i], c = a === void 0 || o(a, i, e);\n      if (c !== !0)\n        throw new b(\"option \" + i + \" must be \" + c, b.ERR_BAD_OPTION_VALUE);\n      continue;\n    }\n    if (n !== !0)\n      throw new b(\"Unknown option \" + i, b.ERR_BAD_OPTION);\n  }\n}\nconst Vt = {\n  assertOptions: Aa,\n  validators: Se\n}, q = Vt.validators;\nclass ce {\n  constructor(t) {\n    this.defaults = t, this.interceptors = {\n      request: new vn(),\n      response: new vn()\n    };\n  }\n  /**\n   * Dispatch a request\n   *\n   * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults)\n   * @param {?Object} config\n   *\n   * @returns {Promise} The Promise to be fulfilled\n   */\n  async request(t, n) {\n    try {\n      return await this._request(t, n);\n    } catch (r) {\n      if (r instanceof Error) {\n        let s = {};\n        Error.captureStackTrace ? Error.captureStackTrace(s) : s = new Error();\n        const i = s.stack ? s.stack.replace(/^.+\\n/, \"\") : \"\";\n        try {\n          r.stack ? i && !String(r.stack).endsWith(i.replace(/^.+\\n.+\\n/, \"\")) && (r.stack += `\n` + i) : r.stack = i;\n        } catch {\n        }\n      }\n      throw r;\n    }\n  }\n  _request(t, n) {\n    typeof t == \"string\" ? (n = n || {}, n.url = t) : n = t || {}, n = at(this.defaults, n);\n    const { transitional: r, paramsSerializer: s, headers: i } = n;\n    r !== void 0 && Vt.assertOptions(r, {\n      silentJSONParsing: q.transitional(q.boolean),\n      forcedJSONParsing: q.transitional(q.boolean),\n      clarifyTimeoutError: q.transitional(q.boolean)\n    }, !1), s != null && (f.isFunction(s) ? n.paramsSerializer = {\n      serialize: s\n    } : Vt.assertOptions(s, {\n      encode: q.function,\n      serialize: q.function\n    }, !0)), n.allowAbsoluteUrls !== void 0 || (this.defaults.allowAbsoluteUrls !== void 0 ? n.allowAbsoluteUrls = this.defaults.allowAbsoluteUrls : n.allowAbsoluteUrls = !0), Vt.assertOptions(n, {\n      baseUrl: q.spelling(\"baseURL\"),\n      withXsrfToken: q.spelling(\"withXSRFToken\")\n    }, !0), n.method = (n.method || this.defaults.method || \"get\").toLowerCase();\n    let o = i && f.merge(\n      i.common,\n      i[n.method]\n    );\n    i && f.forEach(\n      [\"delete\", \"get\", \"head\", \"post\", \"put\", \"patch\", \"common\"],\n      (g) => {\n        delete i[g];\n      }\n    ), n.headers = z.concat(o, i);\n    const a = [];\n    let c = !0;\n    this.interceptors.request.forEach(function(m) {\n      typeof m.runWhen == \"function\" && m.runWhen(n) === !1 || (c = c && m.synchronous, a.unshift(m.fulfilled, m.rejected));\n    });\n    const u = [];\n    this.interceptors.response.forEach(function(m) {\n      u.push(m.fulfilled, m.rejected);\n    });\n    let l, h = 0, p;\n    if (!c) {\n      const g = [Mn.bind(this), void 0];\n      for (g.unshift.apply(g, a), g.push.apply(g, u), p = g.length, l = Promise.resolve(n); h < p; )\n        l = l.then(g[h++], g[h++]);\n      return l;\n    }\n    p = a.length;\n    let d = n;\n    for (h = 0; h < p; ) {\n      const g = a[h++], m = a[h++];\n      try {\n        d = g(d);\n      } catch (y) {\n        m.call(this, y);\n        break;\n      }\n    }\n    try {\n      l = Mn.call(this, d);\n    } catch (g) {\n      return Promise.reject(g);\n    }\n    for (h = 0, p = u.length; h < p; )\n      l = l.then(u[h++], u[h++]);\n    return l;\n  }\n  getUri(t) {\n    t = at(this.defaults, t);\n    const n = Hr(t.baseURL, t.url, t.allowAbsoluteUrls);\n    return zr(n, t.params, t.paramsSerializer);\n  }\n}\nf.forEach([\"delete\", \"get\", \"head\", \"options\"], function(t) {\n  ce.prototype[t] = function(n, r) {\n    return this.request(at(r || {}, {\n      method: t,\n      url: n,\n      data: (r || {}).data\n    }));\n  };\n});\nf.forEach([\"post\", \"put\", \"patch\"], function(t) {\n  function n(r) {\n    return function(i, o, a) {\n      return this.request(at(a || {}, {\n        method: t,\n        headers: r ? {\n          \"Content-Type\": \"multipart/form-data\"\n        } : {},\n        url: i,\n        data: o\n      }));\n    };\n  }\n  ce.prototype[t] = n(), ce.prototype[t + \"Form\"] = n(!0);\n});\nconst Gt = ce;\nclass ln {\n  constructor(t) {\n    if (typeof t != \"function\")\n      throw new TypeError(\"executor must be a function.\");\n    let n;\n    this.promise = new Promise(function(i) {\n      n = i;\n    });\n    const r = this;\n    this.promise.then((s) => {\n      if (!r._listeners)\n        return;\n      let i = r._listeners.length;\n      for (; i-- > 0; )\n        r._listeners[i](s);\n      r._listeners = null;\n    }), this.promise.then = (s) => {\n      let i;\n      const o = new Promise((a) => {\n        r.subscribe(a), i = a;\n      }).then(s);\n      return o.cancel = function() {\n        r.unsubscribe(i);\n      }, o;\n    }, t(function(i, o, a) {\n      r.reason || (r.reason = new bt(i, o, a), n(r.reason));\n    });\n  }\n  /**\n   * Throws a `CanceledError` if cancellation has been requested.\n   */\n  throwIfRequested() {\n    if (this.reason)\n      throw this.reason;\n  }\n  /**\n   * Subscribe to the cancel signal\n   */\n  subscribe(t) {\n    if (this.reason) {\n      t(this.reason);\n      return;\n    }\n    this._listeners ? this._listeners.push(t) : this._listeners = [t];\n  }\n  /**\n   * Unsubscribe from the cancel signal\n   */\n  unsubscribe(t) {\n    if (!this._listeners)\n      return;\n    const n = this._listeners.indexOf(t);\n    n !== -1 && this._listeners.splice(n, 1);\n  }\n  toAbortSignal() {\n    const t = new AbortController(), n = (r) => {\n      t.abort(r);\n    };\n    return this.subscribe(n), t.signal.unsubscribe = () => this.unsubscribe(n), t.signal;\n  }\n  /**\n   * Returns an object that contains a new `CancelToken` and a function that, when called,\n   * cancels the `CancelToken`.\n   */\n  static source() {\n    let t;\n    return {\n      token: new ln(function(s) {\n        t = s;\n      }),\n      cancel: t\n    };\n  }\n}\nconst xa = ln;\nfunction _a(e) {\n  return function(n) {\n    return e.apply(null, n);\n  };\n}\nfunction Oa(e) {\n  return f.isObject(e) && e.isAxiosError === !0;\n}\nconst $e = {\n  Continue: 100,\n  SwitchingProtocols: 101,\n  Processing: 102,\n  EarlyHints: 103,\n  Ok: 200,\n  Created: 201,\n  Accepted: 202,\n  NonAuthoritativeInformation: 203,\n  NoContent: 204,\n  ResetContent: 205,\n  PartialContent: 206,\n  MultiStatus: 207,\n  AlreadyReported: 208,\n  ImUsed: 226,\n  MultipleChoices: 300,\n  MovedPermanently: 301,\n  Found: 302,\n  SeeOther: 303,\n  NotModified: 304,\n  UseProxy: 305,\n  Unused: 306,\n  TemporaryRedirect: 307,\n  PermanentRedirect: 308,\n  BadRequest: 400,\n  Unauthorized: 401,\n  PaymentRequired: 402,\n  Forbidden: 403,\n  NotFound: 404,\n  MethodNotAllowed: 405,\n  NotAcceptable: 406,\n  ProxyAuthenticationRequired: 407,\n  RequestTimeout: 408,\n  Conflict: 409,\n  Gone: 410,\n  LengthRequired: 411,\n  PreconditionFailed: 412,\n  PayloadTooLarge: 413,\n  UriTooLong: 414,\n  UnsupportedMediaType: 415,\n  RangeNotSatisfiable: 416,\n  ExpectationFailed: 417,\n  ImATeapot: 418,\n  MisdirectedRequest: 421,\n  UnprocessableEntity: 422,\n  Locked: 423,\n  FailedDependency: 424,\n  TooEarly: 425,\n  UpgradeRequired: 426,\n  PreconditionRequired: 428,\n  TooManyRequests: 429,\n  RequestHeaderFieldsTooLarge: 431,\n  UnavailableForLegalReasons: 451,\n  InternalServerError: 500,\n  NotImplemented: 501,\n  BadGateway: 502,\n  ServiceUnavailable: 503,\n  GatewayTimeout: 504,\n  HttpVersionNotSupported: 505,\n  VariantAlsoNegotiates: 506,\n  InsufficientStorage: 507,\n  LoopDetected: 508,\n  NotExtended: 510,\n  NetworkAuthenticationRequired: 511\n};\nObject.entries($e).forEach(([e, t]) => {\n  $e[t] = e;\n});\nconst Ta = $e;\nfunction Yr(e) {\n  const t = new Gt(e), n = Cr(Gt.prototype.request, t);\n  return f.extend(n, Gt.prototype, t, { allOwnKeys: !0 }), f.extend(n, t, null, { allOwnKeys: !0 }), n.create = function(s) {\n    return Yr(at(e, s));\n  }, n;\n}\nconst R = Yr(un);\nR.Axios = Gt;\nR.CanceledError = bt;\nR.CancelToken = xa;\nR.isCancel = qr;\nR.VERSION = Jr;\nR.toFormData = ye;\nR.AxiosError = b;\nR.Cancel = R.CanceledError;\nR.all = function(t) {\n  return Promise.all(t);\n};\nR.spread = _a;\nR.isAxiosError = Oa;\nR.mergeConfig = at;\nR.AxiosHeaders = z;\nR.formToJSON = (e) => Br(f.isHTMLForm(e) ? new FormData(e) : e);\nR.getAdapter = Zr.getAdapter;\nR.HttpStatusCode = Ta;\nR.default = R;\nconst va = R;\nclass Rh {\n  instance;\n  canceler;\n  retryCount = 0;\n  cacheTime = 0;\n  caches = new Ve();\n  constructor(t) {\n    this.instance = va.create(t), this.canceler = new Ra(), this.retryCount = t?.retry || 0, this.cacheTime = t?.cache || 0, this.instance.interceptors.request.use(\n      (n) => (t?.interceptor?.start?.(), this.canceler.pendingRequest(n), t?.interceptor?.request?.(n), n),\n      (n) => (t?.interceptor?.end?.(), this.canceler.cancelRequest(n.config), t?.interceptor?.requestError?.(n), Promise.reject(n))\n    ), this.instance.interceptors.response.use(\n      (n) => (t?.interceptor?.end?.(), this.canceler.confirmRequest(n.config), t?.interceptor?.response?.(n), n.status == 200 ? Promise.resolve(n) : Promise.reject(n)),\n      (n) => (t?.interceptor?.end?.(), this.canceler.cancelRequest(n.config), t?.interceptor?.responseError?.(n), Promise.reject(n.response))\n    );\n  }\n  // @CacheDecorator(60)\n  // @RetryDecorator(3)\n  request(t) {\n    let n = this.instance.request;\n    const r = t.retry || this.retryCount;\n    r && (n = Qn(n, r));\n    const s = t.cache || this.cacheTime;\n    return s && (n = tr(n, s, this.caches)), n(t);\n  }\n  // this.request() 请求后未返回前，可取消请求\n  cancel(t) {\n    this.canceler.cancelRequest(t);\n  }\n  get(t, n) {\n    return this.request({ ...n, method: \"get\", url: t });\n  }\n  delete(t, n) {\n    return this.request({ ...n, method: \"delete\", url: t });\n  }\n  head(t, n) {\n    return this.request({ ...n, method: \"head\", url: t });\n  }\n  options(t, n) {\n    return this.request({ ...n, method: \"options\", url: t });\n  }\n  post(t, n, r) {\n    return this.request({ ...r, method: \"post\", url: t, data: n });\n  }\n  postBlob(t, n, r) {\n    return r = {\n      ...r,\n      headers: {\n        ...r?.headers,\n        \"Content-Type\": \"multipart/form-data\"\n      }\n    }, this.request({ ...r, method: \"post\", url: t, data: n });\n  }\n  // UNDO : application/octet-stream\n  postForm(t, n, r) {\n    return this.instance.postForm(t, n, { ...r });\n  }\n  put(t, n, r) {\n    return this.request({ ...r, method: \"put\", url: t, data: n });\n  }\n  patch(t, n, r) {\n    return this.request({ ...r, method: \"patch\", url: t, data: n });\n  }\n  getUri(t) {\n    return this.instance.getUri(t);\n  }\n}\nclass Ra {\n  pendingRequestMap;\n  constructor() {\n    this.pendingRequestMap = /* @__PURE__ */ new Map();\n  }\n  getRequestId(t) {\n    const { method: n, url: r, params: s, data: i } = t;\n    return je({ method: n, url: r, params: s, data: i });\n  }\n  pendingRequest(t) {\n    const n = this.getRequestId(t);\n    if (this.pendingRequestMap.has(n))\n      t.signal = this.pendingRequestMap.get(n)?.signal;\n    else {\n      const r = new AbortController();\n      t.signal = r.signal, this.pendingRequestMap.set(n, r);\n    }\n  }\n  confirmRequest(t) {\n    if (this.pendingRequestMap.size === 0)\n      return;\n    const n = this.getRequestId(t);\n    this.pendingRequestMap.has(n) && this.pendingRequestMap.delete(n);\n  }\n  cancelRequest(t) {\n    if (this.pendingRequestMap.size === 0)\n      return;\n    const n = this.getRequestId(t);\n    this.pendingRequestMap.has(n) && (this.pendingRequestMap.get(n)?.abort(), this.pendingRequestMap.delete(n));\n  }\n  cancelAllRequest() {\n    const t = this.pendingRequestMap.values();\n    for (const n of t)\n      n.abort();\n    this.pendingRequestMap.clear();\n  }\n}\nfunction Eh(e, t = (n, r) => n <= r) {\n  for (let n = 1, r = e.length; n < r; n++) {\n    let s = !1;\n    for (let i = 0; i < r - n; i++)\n      t(e[i], e[i + 1]) || ([e[i], e[i + 1]] = [e[i + 1], e[i]], s = !0);\n    if (!s)\n      return;\n  }\n}\nfunction Ch(e, t = (n, r) => n <= r) {\n  let n;\n  for (let r = 0, s = e.length; r < s - 1; r++) {\n    n = r;\n    for (let i = r + 1; i < s; i++)\n      t(e[n], e[i]) || (n = i);\n    n != r && ([e[n], e[r]] = [e[r], e[n]]);\n  }\n}\nfunction Fh(e, t = (n, r) => n <= r) {\n  for (let n = 1, r = e.length; n < r; n++) {\n    const s = e[n];\n    let i = n - 1;\n    for (; i >= 0 && !t(e[i], s); )\n      e[i + 1] = e[i], i--;\n    e[i + 1] = s;\n  }\n}\nfunction In(e, t = (n, r) => n <= r) {\n  const n = e.length;\n  if (n < 2)\n    return e;\n  const r = Math.floor(n / 2), s = In(e.slice(0, r), t), i = In(e.slice(r), t), o = [];\n  for (; s.length && i.length; )\n    t(s[0], i[0]) ? o.push(s.shift()) : o.push(i.shift());\n  for (; s.length; )\n    o.push(s.shift());\n  for (; i.length; )\n    o.push(i.shift());\n  return o;\n}\nfunction $n(e, t = 0, n = e.length - 1, r = (s, i) => s <= i) {\n  if (t >= n)\n    return;\n  const s = t + n >> 1;\n  $n(e, t, s, r), $n(e, s + 1, n, r);\n  let i = t, o = s + 1;\n  const a = [];\n  for (; i <= s && o <= n; )\n    r(e[i], e[o]) ? a.push(e[i++]) : a.push(e[o++]);\n  for (; i <= s; )\n    a.push(e[i++]);\n  for (; o <= n; )\n    a.push(e[o++]);\n  for (i = t, o = 0; i <= n; ++i, ++o)\n    e[i] = a[o];\n}\nfunction Ea(e, t = 0, n = e.length - 1, r = (s, i) => s <= i) {\n  if (t >= n)\n    return t;\n  const s = n, i = e[s];\n  let o = t;\n  for (let a = t; a <= n; a++)\n    a != s && r(e[a], i) && ([e[o], e[a]] = [e[a], e[o]], o++);\n  return [e[o], e[s]] = [\n    e[s],\n    e[o]\n  ], o;\n}\nfunction Nn(e, t = 0, n = e.length - 1, r = (s, i) => s <= i) {\n  if (t >= n)\n    return;\n  const s = Ea(e, t, n, r);\n  Nn(e, t, s - 1, r), Nn(e, s + 1, n, r);\n}\nfunction Un(e, t = 0, n = e.length - 1, r = (s, i) => s <= i) {\n  if (t >= n)\n    return;\n  const s = t, i = e[s];\n  let o = t, a = n;\n  for (; o < a; ) {\n    for (; o < n && r(e[o], i); )\n      o++;\n    for (; a > t && r(i, e[a]); )\n      a--;\n    o < a && ([e[o], e[a]] = [e[a], e[o]]);\n  }\n  [e[s], e[a]] = [e[a], e[s]], Un(e, t, a - 1, r), Un(e, a + 1, n, r);\n}\nfunction zn(e, t = 0, n = e.length - 1, r = (s, i) => s <= i) {\n  if (t >= n)\n    return;\n  const s = t, i = e[s];\n  let o = t, a = n, c = t;\n  for (; c <= a; )\n    r(e[c], i) ? ([e[o], e[c]] = [e[c], e[o]], o++, c++) : r(i, e[c]) ? ([e[c], e[a]] = [e[a], e[c]], a--) : c++;\n  [e[s], e[a]] = [e[a], e[s]], zn(e, t, a - 1, r), zn(e, a + 1, n, r);\n}\nfunction kh(e, t = (n, r) => n <= r) {\n  const n = e.length;\n  let r = Math.floor(n / 2);\n  for (; r > 0; ) {\n    for (let s = r; s < n; s++) {\n      const i = e[s];\n      let o = s;\n      for (; o >= r && !t(e[o - r], i); )\n        e[o] = e[o - r], o -= r;\n      e[o] = i;\n    }\n    r = Math.floor(r / 2);\n  }\n}\nfunction Ph(e, t = (n, r) => n <= r) {\n  const n = new fe(t, e), r = [];\n  let s;\n  for (; (s = n.pop()) !== null; )\n    r.push(s);\n  return r;\n}\nfunction Dh(e, t) {\n  let n = 0, r = e.length - 1;\n  for (; n < r; ) {\n    const s = Math.floor((n + r) / 2), i = e[s];\n    if (i === t)\n      return s;\n    i < t ? n = s + 1 : r = s - 1;\n  }\n  return -1;\n}\nfunction Mh(e, t) {\n  function n(s, i, o) {\n    const a = s[o];\n    let c = i - 1;\n    for (let u = i; u < o; u++)\n      s[u] >= a && (c++, [s[c], s[u]] = [s[u], s[c]]);\n    return [s[c + 1], s[o]] = [s[o], s[c + 1]], c + 1;\n  }\n  function r(s, i, o) {\n    if (s === i)\n      return e[s];\n    const a = n(e, s, i);\n    return a === o ? e[a] : a < o ? r(a + 1, i, o) : r(s, a - 1, o);\n  }\n  return r(0, e.length - 1, t - 1);\n}\nclass Lh {\n  prefixSumArray;\n  constructor(t) {\n    const n = t.length + 1;\n    this.prefixSumArray = Array.from({ length: n }).fill(0);\n    for (let r = 1; r < n; r++)\n      this.prefixSumArray[r] = this.prefixSumArray[r - 1] + t[r - 1];\n  }\n  // 查询闭区间 [i, j] 的累加和\n  sum(t, n) {\n    return this.prefixSumArray[n + 1] - this.prefixSumArray[t];\n  }\n}\nclass Ih {\n  diffArray;\n  constructor(t) {\n    const n = t.length;\n    this.diffArray = Array.from({ length: n }).fill(0), this.diffArray[0] = t[0];\n    for (let r = 1; r < n; r++)\n      this.diffArray[r] = t[r] - t[r - 1];\n  }\n  // 根据差分数组构造结果数组\n  result() {\n    const t = this.diffArray.length, n = Array.from({ length: t }).fill(0);\n    n[0] = this.diffArray[0];\n    for (let r = 1; r < t; r++)\n      n[r] = n[r - 1] + this.diffArray[r];\n    return n;\n  }\n  // 对闭区间 [i, j]进行增减的操作 ，num 可以为负数\n  // 原理很简单，根据 diffArray 数组反推 nums 数组的过程，diff[i] += 3 意味着给 nums[i..] 所有的元素都加了 3，然后 diffArray[j+1] -= 3 又意味着对于 nums[j+1..] 所有元素再减 3，那综合起来，是不是就是对 nums[i..j] 中的所有元素都加 3 了\n  // 只要花费 O(1) 的时间修改 diffArray 数组，就相当于给 原数组 的整个区间做了修改\n  operate(t, n, r) {\n    t >= 0 && t < this.diffArray.length && (this.diffArray[t] += r), n + 1 >= 0 && n + 1 < this.diffArray.length && (this.diffArray[n + 1] -= r);\n  }\n}\nclass $h {\n  max;\n  cache = /* @__PURE__ */ new Map();\n  constructor(t) {\n    this.max = t;\n  }\n  add(t, n) {\n    const { cache: r } = this;\n    if (r.size >= this.max) {\n      const s = r.keys().next();\n      s.value && r.delete(s.value);\n    }\n    r.set(t, n);\n  }\n  get(t) {\n    const { cache: n } = this, r = n.get(t);\n    if (r)\n      return n.delete(t), n.set(t, r), r;\n  }\n}\nclass Nh {\n  max;\n  cache = new gs();\n  constructor(t) {\n    this.max = t;\n  }\n  add(t) {\n    const { cache: n } = this;\n    n.size() >= this.max && n.pop(), n.unshift(t);\n  }\n  get(t) {\n    const { cache: n } = this, r = n.getIndex(t);\n    return r == -1 ? this.add(t) : (n.delete(r), n.unshift(t)), t;\n  }\n}\nconst Ca = typeof performance == \"object\" && performance && typeof performance.now == \"function\" ? performance : Date, Kr = /* @__PURE__ */ new Set(), Ne = typeof process == \"object\" && process ? process : {}, Qr = (e, t, n, r) => {\n  typeof Ne.emitWarning == \"function\" ? Ne.emitWarning(e, t, n, r) : console.error(`[${n}] ${t}: ${e}`);\n};\nlet ue = T.AbortController, jn = T.AbortSignal;\nif (typeof ue > \"u\") {\n  jn = class {\n    onabort;\n    _onabort = [];\n    reason;\n    aborted = !1;\n    addEventListener(r, s) {\n      this._onabort.push(s);\n    }\n  }, ue = class {\n    constructor() {\n      t();\n    }\n    signal = new jn();\n    abort(r) {\n      if (!this.signal.aborted) {\n        this.signal.reason = r, this.signal.aborted = !0;\n        for (const s of this.signal._onabort)\n          s(r);\n        this.signal.onabort?.(r);\n      }\n    }\n  };\n  let e = Ne.env?.LRU_CACHE_IGNORE_AC_WARNING !== \"1\";\n  const t = () => {\n    e && (e = !1, Qr(\n      \"AbortController is not defined. If using lru-cache in node 14, load an AbortController polyfill from the `node-abort-controller` package. A minimal polyfill is provided for use by LRUCache.fetch(), but it should not be relied upon in other contexts (eg, passing it to other APIs that use AbortController/AbortSignal might have undesirable effects). You may disable this with LRU_CACHE_IGNORE_AC_WARNING=1 in the env.\",\n      \"NO_ABORT_CONTROLLER\",\n      \"ENOTSUP\",\n      t\n    ));\n  };\n}\nconst Fa = (e) => !Kr.has(e), nt = (e) => e && e === Math.floor(e) && e > 0 && isFinite(e), ts = (e) => nt(e) ? e <= Math.pow(2, 8) ? Uint8Array : e <= Math.pow(2, 16) ? Uint16Array : e <= Math.pow(2, 32) ? Uint32Array : e <= Number.MAX_SAFE_INTEGER ? Xt : null : null;\nclass Xt extends Array {\n  constructor(t) {\n    super(t), this.fill(0);\n  }\n}\nclass ft {\n  heap;\n  length;\n  // private constructor\n  static #a = !1;\n  static create(t) {\n    const n = ts(t);\n    if (!n)\n      return [];\n    ft.#a = !0;\n    const r = new ft(t, n);\n    return ft.#a = !1, r;\n  }\n  constructor(t, n) {\n    if (!ft.#a)\n      throw new TypeError(\"instantiate Stack using Stack.create(n)\");\n    this.heap = new n(t), this.length = 0;\n  }\n  push(t) {\n    this.heap[this.length++] = t;\n  }\n  pop() {\n    return this.heap[--this.length];\n  }\n}\nclass es {\n  // options that cannot be changed without disaster\n  #a;\n  #h;\n  #g;\n  #C;\n  #y;\n  #D;\n  #M;\n  #w;\n  /**\n   * {@link LRUCache.OptionsBase.perf}\n   */\n  get perf() {\n    return this.#w;\n  }\n  /**\n   * {@link LRUCache.OptionsBase.ttl}\n   */\n  ttl;\n  /**\n   * {@link LRUCache.OptionsBase.ttlResolution}\n   */\n  ttlResolution;\n  /**\n   * {@link LRUCache.OptionsBase.ttlAutopurge}\n   */\n  ttlAutopurge;\n  /**\n   * {@link LRUCache.OptionsBase.updateAgeOnGet}\n   */\n  updateAgeOnGet;\n  /**\n   * {@link LRUCache.OptionsBase.updateAgeOnHas}\n   */\n  updateAgeOnHas;\n  /**\n   * {@link LRUCache.OptionsBase.allowStale}\n   */\n  allowStale;\n  /**\n   * {@link LRUCache.OptionsBase.noDisposeOnSet}\n   */\n  noDisposeOnSet;\n  /**\n   * {@link LRUCache.OptionsBase.noUpdateTTL}\n   */\n  noUpdateTTL;\n  /**\n   * {@link LRUCache.OptionsBase.maxEntrySize}\n   */\n  maxEntrySize;\n  /**\n   * {@link LRUCache.OptionsBase.sizeCalculation}\n   */\n  sizeCalculation;\n  /**\n   * {@link LRUCache.OptionsBase.noDeleteOnFetchRejection}\n   */\n  noDeleteOnFetchRejection;\n  /**\n   * {@link LRUCache.OptionsBase.noDeleteOnStaleGet}\n   */\n  noDeleteOnStaleGet;\n  /**\n   * {@link LRUCache.OptionsBase.allowStaleOnFetchAbort}\n   */\n  allowStaleOnFetchAbort;\n  /**\n   * {@link LRUCache.OptionsBase.allowStaleOnFetchRejection}\n   */\n  allowStaleOnFetchRejection;\n  /**\n   * {@link LRUCache.OptionsBase.ignoreFetchAbort}\n   */\n  ignoreFetchAbort;\n  // computed properties\n  #s;\n  #b;\n  #r;\n  #n;\n  #t;\n  #u;\n  #f;\n  #c;\n  #i;\n  #S;\n  #o;\n  #A;\n  #x;\n  #d;\n  #p;\n  #_;\n  #E;\n  #l;\n  #L;\n  /**\n   * Do not call this method unless you need to inspect the\n   * inner workings of the cache.  If anything returned by this\n   * object is modified in any way, strange breakage may occur.\n   *\n   * These fields are private for a reason!\n   *\n   * @internal\n   */\n  static unsafeExposeInternals(t) {\n    return {\n      // properties\n      starts: t.#x,\n      ttls: t.#d,\n      autopurgeTimers: t.#p,\n      sizes: t.#A,\n      keyMap: t.#r,\n      keyList: t.#n,\n      valList: t.#t,\n      next: t.#u,\n      prev: t.#f,\n      get head() {\n        return t.#c;\n      },\n      get tail() {\n        return t.#i;\n      },\n      free: t.#S,\n      // methods\n      isBackgroundFetch: (n) => t.#e(n),\n      backgroundFetch: (n, r, s, i) => t.#N(n, r, s, i),\n      moveToTail: (n) => t.#P(n),\n      indexes: (n) => t.#O(n),\n      rindexes: (n) => t.#T(n),\n      isStale: (n) => t.#m(n)\n    };\n  }\n  // Protected read-only members\n  /**\n   * {@link LRUCache.OptionsBase.max} (read-only)\n   */\n  get max() {\n    return this.#a;\n  }\n  /**\n   * {@link LRUCache.OptionsBase.maxSize} (read-only)\n   */\n  get maxSize() {\n    return this.#h;\n  }\n  /**\n   * The total computed size of items in the cache (read-only)\n   */\n  get calculatedSize() {\n    return this.#b;\n  }\n  /**\n   * The number of items stored in the cache (read-only)\n   */\n  get size() {\n    return this.#s;\n  }\n  /**\n   * {@link LRUCache.OptionsBase.fetchMethod} (read-only)\n   */\n  get fetchMethod() {\n    return this.#D;\n  }\n  get memoMethod() {\n    return this.#M;\n  }\n  /**\n   * {@link LRUCache.OptionsBase.dispose} (read-only)\n   */\n  get dispose() {\n    return this.#g;\n  }\n  /**\n   * {@link LRUCache.OptionsBase.onInsert} (read-only)\n   */\n  get onInsert() {\n    return this.#C;\n  }\n  /**\n   * {@link LRUCache.OptionsBase.disposeAfter} (read-only)\n   */\n  get disposeAfter() {\n    return this.#y;\n  }\n  constructor(t) {\n    const {\n      max: n = 0,\n      ttl: r,\n      ttlResolution: s = 1,\n      ttlAutopurge: i,\n      updateAgeOnGet: o,\n      updateAgeOnHas: a,\n      allowStale: c,\n      dispose: u,\n      onInsert: l,\n      disposeAfter: h,\n      noDisposeOnSet: p,\n      noUpdateTTL: d,\n      maxSize: g = 0,\n      maxEntrySize: m = 0,\n      sizeCalculation: y,\n      fetchMethod: w,\n      memoMethod: S,\n      noDeleteOnFetchRejection: x,\n      noDeleteOnStaleGet: O,\n      allowStaleOnFetchRejection: A,\n      allowStaleOnFetchAbort: C,\n      ignoreFetchAbort: _,\n      perf: G\n    } = t;\n    if (G !== void 0 && typeof G?.now != \"function\")\n      throw new TypeError(\n        \"perf option must have a now() method if specified\"\n      );\n    if (this.#w = G ?? Ca, n !== 0 && !nt(n))\n      throw new TypeError(\"max option must be a nonnegative integer\");\n    const X = n ? ts(n) : Array;\n    if (!X)\n      throw new Error(\"invalid max value: \" + n);\n    if (this.#a = n, this.#h = g, this.maxEntrySize = m || this.#h, this.sizeCalculation = y, this.sizeCalculation) {\n      if (!this.#h && !this.maxEntrySize)\n        throw new TypeError(\n          \"cannot set sizeCalculation without setting maxSize or maxEntrySize\"\n        );\n      if (typeof this.sizeCalculation != \"function\")\n        throw new TypeError(\"sizeCalculation set to non-function\");\n    }\n    if (S !== void 0 && typeof S != \"function\")\n      throw new TypeError(\"memoMethod must be a function if defined\");\n    if (this.#M = S, w !== void 0 && typeof w != \"function\")\n      throw new TypeError(\"fetchMethod must be a function if specified\");\n    if (this.#D = w, this.#E = !!w, this.#r = /* @__PURE__ */ new Map(), this.#n = new Array(n).fill(void 0), this.#t = new Array(n).fill(void 0), this.#u = new X(n), this.#f = new X(n), this.#c = 0, this.#i = 0, this.#S = ft.create(n), this.#s = 0, this.#b = 0, typeof u == \"function\" && (this.#g = u), typeof l == \"function\" && (this.#C = l), typeof h == \"function\" ? (this.#y = h, this.#o = []) : (this.#y = void 0, this.#o = void 0), this.#_ = !!this.#g, this.#L = !!this.#C, this.#l = !!this.#y, this.noDisposeOnSet = !!p, this.noUpdateTTL = !!d, this.noDeleteOnFetchRejection = !!x, this.allowStaleOnFetchRejection = !!A, this.allowStaleOnFetchAbort = !!C, this.ignoreFetchAbort = !!_, this.maxEntrySize !== 0) {\n      if (this.#h !== 0 && !nt(this.#h))\n        throw new TypeError(\n          \"maxSize must be a positive integer if specified\"\n        );\n      if (!nt(this.maxEntrySize))\n        throw new TypeError(\n          \"maxEntrySize must be a positive integer if specified\"\n        );\n      this.#H();\n    }\n    if (this.allowStale = !!c, this.noDeleteOnStaleGet = !!O, this.updateAgeOnGet = !!o, this.updateAgeOnHas = !!a, this.ttlResolution = nt(s) || s === 0 ? s : 1, this.ttlAutopurge = !!i, this.ttl = r || 0, this.ttl) {\n      if (!nt(this.ttl))\n        throw new TypeError(\"ttl must be a positive integer if specified\");\n      this.#U();\n    }\n    if (this.#a === 0 && this.ttl === 0 && this.#h === 0)\n      throw new TypeError(\"At least one of max, maxSize, or ttl is required\");\n    if (!this.ttlAutopurge && !this.#a && !this.#h) {\n      const lt = \"LRU_CACHE_UNBOUNDED\";\n      Fa(lt) && (Kr.add(lt), Qr(\"TTL caching without ttlAutopurge, max, or maxSize can result in unbounded memory consumption.\", \"UnboundedCacheWarning\", lt, es));\n    }\n  }\n  /**\n   * Return the number of ms left in the item's TTL. If item is not in cache,\n   * returns `0`. Returns `Infinity` if item is in cache without a defined TTL.\n   */\n  getRemainingTTL(t) {\n    return this.#r.has(t) ? 1 / 0 : 0;\n  }\n  #U() {\n    const t = new Xt(this.#a), n = new Xt(this.#a);\n    this.#d = t, this.#x = n;\n    const r = this.ttlAutopurge ? new Array(this.#a) : void 0;\n    this.#p = r, this.#z = (a, c, u = this.#w.now()) => {\n      n[a] = c !== 0 ? u : 0, t[a] = c, s(a, c);\n    }, this.#F = (a) => {\n      n[a] = t[a] !== 0 ? this.#w.now() : 0, s(a, t[a]);\n    };\n    const s = this.ttlAutopurge ? (a, c) => {\n      if (r?.[a] && (clearTimeout(r[a]), r[a] = void 0), c && c !== 0 && r) {\n        const u = setTimeout(() => {\n          this.#m(a) && this.#v(this.#n[a], \"expire\");\n        }, c + 1);\n        u.unref && u.unref(), r[a] = u;\n      }\n    } : () => {\n    };\n    this.#R = (a, c) => {\n      if (t[c]) {\n        const u = t[c], l = n[c];\n        if (!u || !l)\n          return;\n        a.ttl = u, a.start = l, a.now = i || o();\n        const h = a.now - l;\n        a.remainingTTL = u - h;\n      }\n    };\n    let i = 0;\n    const o = () => {\n      const a = this.#w.now();\n      if (this.ttlResolution > 0) {\n        i = a;\n        const c = setTimeout(() => i = 0, this.ttlResolution);\n        c.unref && c.unref();\n      }\n      return a;\n    };\n    this.getRemainingTTL = (a) => {\n      const c = this.#r.get(a);\n      if (c === void 0)\n        return 0;\n      const u = t[c], l = n[c];\n      if (!u || !l)\n        return 1 / 0;\n      const h = (i || o()) - l;\n      return u - h;\n    }, this.#m = (a) => {\n      const c = n[a], u = t[a];\n      return !!u && !!c && (i || o()) - c > u;\n    };\n  }\n  // conditionally set private methods related to TTL\n  #F = () => {\n  };\n  #R = () => {\n  };\n  #z = () => {\n  };\n  #m = () => !1;\n  #H() {\n    const t = new Xt(this.#a);\n    this.#b = 0, this.#A = t, this.#k = (n) => {\n      this.#b -= t[n], t[n] = 0;\n    }, this.#j = (n, r, s, i) => {\n      if (this.#e(r))\n        return 0;\n      if (!nt(s))\n        if (i) {\n          if (typeof i != \"function\")\n            throw new TypeError(\"sizeCalculation must be a function\");\n          if (s = i(r, n), !nt(s))\n            throw new TypeError(\n              \"sizeCalculation return invalid (expect positive integer)\"\n            );\n        } else\n          throw new TypeError(\n            \"invalid size value (must be positive integer). When maxSize or maxEntrySize is used, sizeCalculation or size must be set.\"\n          );\n      return s;\n    }, this.#I = (n, r, s) => {\n      if (t[n] = r, this.#h) {\n        const i = this.#h - t[n];\n        for (; this.#b > i; )\n          this.#$(!0);\n      }\n      this.#b += t[n], s && (s.entrySize = r, s.totalCalculatedSize = this.#b);\n    };\n  }\n  #k = (t) => {\n  };\n  #I = (t, n, r) => {\n  };\n  #j = (t, n, r, s) => {\n    if (r || s)\n      throw new TypeError(\n        \"cannot set size without setting maxSize or maxEntrySize on cache\"\n      );\n    return 0;\n  };\n  *#O({ allowStale: t = this.allowStale } = {}) {\n    if (this.#s)\n      for (let n = this.#i; !(!this.#B(n) || ((t || !this.#m(n)) && (yield n), n === this.#c)); )\n        n = this.#f[n];\n  }\n  *#T({ allowStale: t = this.allowStale } = {}) {\n    if (this.#s)\n      for (let n = this.#c; !(!this.#B(n) || ((t || !this.#m(n)) && (yield n), n === this.#i)); )\n        n = this.#u[n];\n  }\n  #B(t) {\n    return t !== void 0 && this.#r.get(this.#n[t]) === t;\n  }\n  /**\n   * Return a generator yielding `[key, value]` pairs,\n   * in order from most recently used to least recently used.\n   */\n  *entries() {\n    for (const t of this.#O())\n      this.#t[t] !== void 0 && this.#n[t] !== void 0 && !this.#e(this.#t[t]) && (yield [this.#n[t], this.#t[t]]);\n  }\n  /**\n   * Inverse order version of {@link LRUCache.entries}\n   *\n   * Return a generator yielding `[key, value]` pairs,\n   * in order from least recently used to most recently used.\n   */\n  *rentries() {\n    for (const t of this.#T())\n      this.#t[t] !== void 0 && this.#n[t] !== void 0 && !this.#e(this.#t[t]) && (yield [this.#n[t], this.#t[t]]);\n  }\n  /**\n   * Return a generator yielding the keys in the cache,\n   * in order from most recently used to least recently used.\n   */\n  *keys() {\n    for (const t of this.#O()) {\n      const n = this.#n[t];\n      n !== void 0 && !this.#e(this.#t[t]) && (yield n);\n    }\n  }\n  /**\n   * Inverse order version of {@link LRUCache.keys}\n   *\n   * Return a generator yielding the keys in the cache,\n   * in order from least recently used to most recently used.\n   */\n  *rkeys() {\n    for (const t of this.#T()) {\n      const n = this.#n[t];\n      n !== void 0 && !this.#e(this.#t[t]) && (yield n);\n    }\n  }\n  /**\n   * Return a generator yielding the values in the cache,\n   * in order from most recently used to least recently used.\n   */\n  *values() {\n    for (const t of this.#O())\n      this.#t[t] !== void 0 && !this.#e(this.#t[t]) && (yield this.#t[t]);\n  }\n  /**\n   * Inverse order version of {@link LRUCache.values}\n   *\n   * Return a generator yielding the values in the cache,\n   * in order from least recently used to most recently used.\n   */\n  *rvalues() {\n    for (const t of this.#T())\n      this.#t[t] !== void 0 && !this.#e(this.#t[t]) && (yield this.#t[t]);\n  }\n  /**\n   * Iterating over the cache itself yields the same results as\n   * {@link LRUCache.entries}\n   */\n  [Symbol.iterator]() {\n    return this.entries();\n  }\n  /**\n   * A String value that is used in the creation of the default string\n   * description of an object. Called by the built-in method\n   * `Object.prototype.toString`.\n   */\n  [Symbol.toStringTag] = \"LRUCache\";\n  /**\n   * Find a value for which the supplied fn method returns a truthy value,\n   * similar to `Array.find()`. fn is called as `fn(value, key, cache)`.\n   */\n  find(t, n = {}) {\n    for (const r of this.#O()) {\n      const s = this.#t[r], i = this.#e(s) ? s.__staleWhileFetching : s;\n      if (i !== void 0 && t(i, this.#n[r], this))\n        return this.get(this.#n[r], n);\n    }\n  }\n  /**\n   * Call the supplied function on each item in the cache, in order from most\n   * recently used to least recently used.\n   *\n   * `fn` is called as `fn(value, key, cache)`.\n   *\n   * If `thisp` is provided, function will be called in the `this`-context of\n   * the provided object, or the cache if no `thisp` object is provided.\n   *\n   * Does not update age or recenty of use, or iterate over stale values.\n   */\n  forEach(t, n = this) {\n    for (const r of this.#O()) {\n      const s = this.#t[r], i = this.#e(s) ? s.__staleWhileFetching : s;\n      i !== void 0 && t.call(n, i, this.#n[r], this);\n    }\n  }\n  /**\n   * The same as {@link LRUCache.forEach} but items are iterated over in\n   * reverse order.  (ie, less recently used items are iterated over first.)\n   */\n  rforEach(t, n = this) {\n    for (const r of this.#T()) {\n      const s = this.#t[r], i = this.#e(s) ? s.__staleWhileFetching : s;\n      i !== void 0 && t.call(n, i, this.#n[r], this);\n    }\n  }\n  /**\n   * Delete any stale entries. Returns true if anything was removed,\n   * false otherwise.\n   */\n  purgeStale() {\n    let t = !1;\n    for (const n of this.#T({ allowStale: !0 }))\n      this.#m(n) && (this.#v(this.#n[n], \"expire\"), t = !0);\n    return t;\n  }\n  /**\n   * Get the extended info about a given entry, to get its value, size, and\n   * TTL info simultaneously. Returns `undefined` if the key is not present.\n   *\n   * Unlike {@link LRUCache#dump}, which is designed to be portable and survive\n   * serialization, the `start` value is always the current timestamp, and the\n   * `ttl` is a calculated remaining time to live (negative if expired).\n   *\n   * Always returns stale values, if their info is found in the cache, so be\n   * sure to check for expirations (ie, a negative {@link LRUCache.Entry#ttl})\n   * if relevant.\n   */\n  info(t) {\n    const n = this.#r.get(t);\n    if (n === void 0)\n      return;\n    const r = this.#t[n], s = this.#e(r) ? r.__staleWhileFetching : r;\n    if (s === void 0)\n      return;\n    const i = { value: s };\n    if (this.#d && this.#x) {\n      const o = this.#d[n], a = this.#x[n];\n      if (o && a) {\n        const c = o - (this.#w.now() - a);\n        i.ttl = c, i.start = Date.now();\n      }\n    }\n    return this.#A && (i.size = this.#A[n]), i;\n  }\n  /**\n   * Return an array of [key, {@link LRUCache.Entry}] tuples which can be\n   * passed to {@link LRUCache#load}.\n   *\n   * The `start` fields are calculated relative to a portable `Date.now()`\n   * timestamp, even if `performance.now()` is available.\n   *\n   * Stale entries are always included in the `dump`, even if\n   * {@link LRUCache.OptionsBase.allowStale} is false.\n   *\n   * Note: this returns an actual array, not a generator, so it can be more\n   * easily passed around.\n   */\n  dump() {\n    const t = [];\n    for (const n of this.#O({ allowStale: !0 })) {\n      const r = this.#n[n], s = this.#t[n], i = this.#e(s) ? s.__staleWhileFetching : s;\n      if (i === void 0 || r === void 0)\n        continue;\n      const o = { value: i };\n      if (this.#d && this.#x) {\n        o.ttl = this.#d[n];\n        const a = this.#w.now() - this.#x[n];\n        o.start = Math.floor(Date.now() - a);\n      }\n      this.#A && (o.size = this.#A[n]), t.unshift([r, o]);\n    }\n    return t;\n  }\n  /**\n   * Reset the cache and load in the items in entries in the order listed.\n   *\n   * The shape of the resulting cache may be different if the same options are\n   * not used in both caches.\n   *\n   * The `start` fields are assumed to be calculated relative to a portable\n   * `Date.now()` timestamp, even if `performance.now()` is available.\n   */\n  load(t) {\n    this.clear();\n    for (const [n, r] of t) {\n      if (r.start) {\n        const s = Date.now() - r.start;\n        r.start = this.#w.now() - s;\n      }\n      this.set(n, r.value, r);\n    }\n  }\n  /**\n   * Add a value to the cache.\n   *\n   * Note: if `undefined` is specified as a value, this is an alias for\n   * {@link LRUCache#delete}\n   *\n   * Fields on the {@link LRUCache.SetOptions} options param will override\n   * their corresponding values in the constructor options for the scope\n   * of this single `set()` operation.\n   *\n   * If `start` is provided, then that will set the effective start\n   * time for the TTL calculation. Note that this must be a previous\n   * value of `performance.now()` if supported, or a previous value of\n   * `Date.now()` if not.\n   *\n   * Options object may also include `size`, which will prevent\n   * calling the `sizeCalculation` function and just use the specified\n   * number if it is a positive integer, and `noDisposeOnSet` which\n   * will prevent calling a `dispose` function in the case of\n   * overwrites.\n   *\n   * If the `size` (or return value of `sizeCalculation`) for a given\n   * entry is greater than `maxEntrySize`, then the item will not be\n   * added to the cache.\n   *\n   * Will update the recency of the entry.\n   *\n   * If the value is `undefined`, then this is an alias for\n   * `cache.delete(key)`. `undefined` is never stored in the cache.\n   */\n  set(t, n, r = {}) {\n    if (n === void 0)\n      return this.delete(t), this;\n    const {\n      ttl: s = this.ttl,\n      start: i,\n      noDisposeOnSet: o = this.noDisposeOnSet,\n      sizeCalculation: a = this.sizeCalculation,\n      status: c\n    } = r;\n    let { noUpdateTTL: u = this.noUpdateTTL } = r;\n    const l = this.#j(t, n, r.size || 0, a);\n    if (this.maxEntrySize && l > this.maxEntrySize)\n      return c && (c.set = \"miss\", c.maxEntrySizeExceeded = !0), this.#v(t, \"set\"), this;\n    let h = this.#s === 0 ? void 0 : this.#r.get(t);\n    if (h === void 0)\n      h = this.#s === 0 ? this.#i : this.#S.length !== 0 ? this.#S.pop() : this.#s === this.#a ? this.#$(!1) : this.#s, this.#n[h] = t, this.#t[h] = n, this.#r.set(t, h), this.#u[this.#i] = h, this.#f[h] = this.#i, this.#i = h, this.#s++, this.#I(h, l, c), c && (c.set = \"add\"), u = !1, this.#L && this.#C?.(n, t, \"add\");\n    else {\n      this.#P(h);\n      const p = this.#t[h];\n      if (n !== p) {\n        if (this.#E && this.#e(p)) {\n          p.__abortController.abort(new Error(\"replaced\"));\n          const { __staleWhileFetching: d } = p;\n          d !== void 0 && !o && (this.#_ && this.#g?.(d, t, \"set\"), this.#l && this.#o?.push([d, t, \"set\"]));\n        } else\n          o || (this.#_ && this.#g?.(p, t, \"set\"), this.#l && this.#o?.push([p, t, \"set\"]));\n        if (this.#k(h), this.#I(h, l, c), this.#t[h] = n, c) {\n          c.set = \"replace\";\n          const d = p && this.#e(p) ? p.__staleWhileFetching : p;\n          d !== void 0 && (c.oldValue = d);\n        }\n      } else\n        c && (c.set = \"update\");\n      this.#L && this.onInsert?.(n, t, n === p ? \"update\" : \"replace\");\n    }\n    if (s !== 0 && !this.#d && this.#U(), this.#d && (u || this.#z(h, s, i), c && this.#R(c, h)), !o && this.#l && this.#o) {\n      const p = this.#o;\n      let d;\n      for (; d = p?.shift(); )\n        this.#y?.(...d);\n    }\n    return this;\n  }\n  /**\n   * Evict the least recently used item, returning its value or\n   * `undefined` if cache is empty.\n   */\n  pop() {\n    try {\n      for (; this.#s; ) {\n        const t = this.#t[this.#c];\n        if (this.#$(!0), this.#e(t)) {\n          if (t.__staleWhileFetching)\n            return t.__staleWhileFetching;\n        } else if (t !== void 0)\n          return t;\n      }\n    } finally {\n      if (this.#l && this.#o) {\n        const t = this.#o;\n        let n;\n        for (; n = t?.shift(); )\n          this.#y?.(...n);\n      }\n    }\n  }\n  #$(t) {\n    const n = this.#c, r = this.#n[n], s = this.#t[n];\n    return this.#E && this.#e(s) ? s.__abortController.abort(new Error(\"evicted\")) : (this.#_ || this.#l) && (this.#_ && this.#g?.(s, r, \"evict\"), this.#l && this.#o?.push([s, r, \"evict\"])), this.#k(n), this.#p?.[n] && (clearTimeout(this.#p[n]), this.#p[n] = void 0), t && (this.#n[n] = void 0, this.#t[n] = void 0, this.#S.push(n)), this.#s === 1 ? (this.#c = this.#i = 0, this.#S.length = 0) : this.#c = this.#u[n], this.#r.delete(r), this.#s--, n;\n  }\n  /**\n   * Check if a key is in the cache, without updating the recency of use.\n   * Will return false if the item is stale, even though it is technically\n   * in the cache.\n   *\n   * Check if a key is in the cache, without updating the recency of\n   * use. Age is updated if {@link LRUCache.OptionsBase.updateAgeOnHas} is set\n   * to `true` in either the options or the constructor.\n   *\n   * Will return `false` if the item is stale, even though it is technically in\n   * the cache. The difference can be determined (if it matters) by using a\n   * `status` argument, and inspecting the `has` field.\n   *\n   * Will not update item age unless\n   * {@link LRUCache.OptionsBase.updateAgeOnHas} is set.\n   */\n  has(t, n = {}) {\n    const { updateAgeOnHas: r = this.updateAgeOnHas, status: s } = n, i = this.#r.get(t);\n    if (i !== void 0) {\n      const o = this.#t[i];\n      if (this.#e(o) && o.__staleWhileFetching === void 0)\n        return !1;\n      if (this.#m(i))\n        s && (s.has = \"stale\", this.#R(s, i));\n      else\n        return r && this.#F(i), s && (s.has = \"hit\", this.#R(s, i)), !0;\n    } else\n      s && (s.has = \"miss\");\n    return !1;\n  }\n  /**\n   * Like {@link LRUCache#get} but doesn't update recency or delete stale\n   * items.\n   *\n   * Returns `undefined` if the item is stale, unless\n   * {@link LRUCache.OptionsBase.allowStale} is set.\n   */\n  peek(t, n = {}) {\n    const { allowStale: r = this.allowStale } = n, s = this.#r.get(t);\n    if (s === void 0 || !r && this.#m(s))\n      return;\n    const i = this.#t[s];\n    return this.#e(i) ? i.__staleWhileFetching : i;\n  }\n  #N(t, n, r, s) {\n    const i = n === void 0 ? void 0 : this.#t[n];\n    if (this.#e(i))\n      return i;\n    const o = new ue(), { signal: a } = r;\n    a?.addEventListener(\"abort\", () => o.abort(a.reason), {\n      signal: o.signal\n    });\n    const c = {\n      signal: o.signal,\n      options: r,\n      context: s\n    }, u = (m, y = !1) => {\n      const { aborted: w } = o.signal, S = r.ignoreFetchAbort && m !== void 0, x = r.ignoreFetchAbort || !!(r.allowStaleOnFetchAbort && m !== void 0);\n      if (r.status && (w && !y ? (r.status.fetchAborted = !0, r.status.fetchError = o.signal.reason, S && (r.status.fetchAbortIgnored = !0)) : r.status.fetchResolved = !0), w && !S && !y)\n        return h(o.signal.reason, x);\n      const O = d, A = this.#t[n];\n      return (A === d || S && y && A === void 0) && (m === void 0 ? O.__staleWhileFetching !== void 0 ? this.#t[n] = O.__staleWhileFetching : this.#v(t, \"fetch\") : (r.status && (r.status.fetchUpdated = !0), this.set(t, m, c.options))), m;\n    }, l = (m) => (r.status && (r.status.fetchRejected = !0, r.status.fetchError = m), h(m, !1)), h = (m, y) => {\n      const { aborted: w } = o.signal, S = w && r.allowStaleOnFetchAbort, x = S || r.allowStaleOnFetchRejection, O = x || r.noDeleteOnFetchRejection, A = d;\n      if (this.#t[n] === d && (!O || !y && A.__staleWhileFetching === void 0 ? this.#v(t, \"fetch\") : S || (this.#t[n] = A.__staleWhileFetching)), x)\n        return r.status && A.__staleWhileFetching !== void 0 && (r.status.returnedStale = !0), A.__staleWhileFetching;\n      if (A.__returned === A)\n        throw m;\n    }, p = (m, y) => {\n      const w = this.#D?.(t, i, c);\n      w && w instanceof Promise && w.then((S) => m(S === void 0 ? void 0 : S), y), o.signal.addEventListener(\"abort\", () => {\n        (!r.ignoreFetchAbort || r.allowStaleOnFetchAbort) && (m(void 0), r.allowStaleOnFetchAbort && (m = (S) => u(S, !0)));\n      });\n    };\n    r.status && (r.status.fetchDispatched = !0);\n    const d = new Promise(p).then(u, l), g = Object.assign(d, {\n      __abortController: o,\n      __staleWhileFetching: i,\n      __returned: void 0\n    });\n    return n === void 0 ? (this.set(t, g, { ...c.options, status: void 0 }), n = this.#r.get(t)) : this.#t[n] = g, g;\n  }\n  #e(t) {\n    if (!this.#E)\n      return !1;\n    const n = t;\n    return !!n && n instanceof Promise && Object.prototype.hasOwnProperty.call(n, \"__staleWhileFetching\") && n.__abortController instanceof ue;\n  }\n  async fetch(t, n = {}) {\n    const {\n      // get options\n      allowStale: r = this.allowStale,\n      updateAgeOnGet: s = this.updateAgeOnGet,\n      noDeleteOnStaleGet: i = this.noDeleteOnStaleGet,\n      // set options\n      ttl: o = this.ttl,\n      noDisposeOnSet: a = this.noDisposeOnSet,\n      size: c = 0,\n      sizeCalculation: u = this.sizeCalculation,\n      noUpdateTTL: l = this.noUpdateTTL,\n      // fetch exclusive options\n      noDeleteOnFetchRejection: h = this.noDeleteOnFetchRejection,\n      allowStaleOnFetchRejection: p = this.allowStaleOnFetchRejection,\n      ignoreFetchAbort: d = this.ignoreFetchAbort,\n      allowStaleOnFetchAbort: g = this.allowStaleOnFetchAbort,\n      context: m,\n      forceRefresh: y = !1,\n      status: w,\n      signal: S\n    } = n;\n    if (!this.#E)\n      return w && (w.fetch = \"get\"), this.get(t, {\n        allowStale: r,\n        updateAgeOnGet: s,\n        noDeleteOnStaleGet: i,\n        status: w\n      });\n    const x = {\n      allowStale: r,\n      updateAgeOnGet: s,\n      noDeleteOnStaleGet: i,\n      ttl: o,\n      noDisposeOnSet: a,\n      size: c,\n      sizeCalculation: u,\n      noUpdateTTL: l,\n      noDeleteOnFetchRejection: h,\n      allowStaleOnFetchRejection: p,\n      allowStaleOnFetchAbort: g,\n      ignoreFetchAbort: d,\n      status: w,\n      signal: S\n    };\n    let O = this.#r.get(t);\n    if (O === void 0) {\n      w && (w.fetch = \"miss\");\n      const A = this.#N(t, O, x, m);\n      return A.__returned = A;\n    } else {\n      const A = this.#t[O];\n      if (this.#e(A)) {\n        const lt = r && A.__staleWhileFetching !== void 0;\n        return w && (w.fetch = \"inflight\", lt && (w.returnedStale = !0)), lt ? A.__staleWhileFetching : A.__returned = A;\n      }\n      const C = this.#m(O);\n      if (!y && !C)\n        return w && (w.fetch = \"hit\"), this.#P(O), s && this.#F(O), w && this.#R(w, O), A;\n      const _ = this.#N(t, O, x, m), X = _.__staleWhileFetching !== void 0 && r;\n      return w && (w.fetch = C ? \"stale\" : \"refresh\", X && C && (w.returnedStale = !0)), X ? _.__staleWhileFetching : _.__returned = _;\n    }\n  }\n  async forceFetch(t, n = {}) {\n    const r = await this.fetch(t, n);\n    if (r === void 0)\n      throw new Error(\"fetch() returned undefined\");\n    return r;\n  }\n  memo(t, n = {}) {\n    const r = this.#M;\n    if (!r)\n      throw new Error(\"no memoMethod provided to constructor\");\n    const { context: s, forceRefresh: i, ...o } = n, a = this.get(t, o);\n    if (!i && a !== void 0)\n      return a;\n    const c = r(t, a, {\n      options: o,\n      context: s\n    });\n    return this.set(t, c, o), c;\n  }\n  /**\n   * Return a value from the cache. Will update the recency of the cache\n   * entry found.\n   *\n   * If the key is not found, get() will return `undefined`.\n   */\n  get(t, n = {}) {\n    const {\n      allowStale: r = this.allowStale,\n      updateAgeOnGet: s = this.updateAgeOnGet,\n      noDeleteOnStaleGet: i = this.noDeleteOnStaleGet,\n      status: o\n    } = n, a = this.#r.get(t);\n    if (a !== void 0) {\n      const c = this.#t[a], u = this.#e(c);\n      return o && this.#R(o, a), this.#m(a) ? (o && (o.get = \"stale\"), u ? (o && r && c.__staleWhileFetching !== void 0 && (o.returnedStale = !0), r ? c.__staleWhileFetching : void 0) : (i || this.#v(t, \"expire\"), o && r && (o.returnedStale = !0), r ? c : void 0)) : (o && (o.get = \"hit\"), u ? c.__staleWhileFetching : (this.#P(a), s && this.#F(a), c));\n    } else\n      o && (o.get = \"miss\");\n  }\n  #q(t, n) {\n    this.#f[n] = t, this.#u[t] = n;\n  }\n  #P(t) {\n    t !== this.#i && (t === this.#c ? this.#c = this.#u[t] : this.#q(this.#f[t], this.#u[t]), this.#q(this.#i, t), this.#i = t);\n  }\n  /**\n   * Deletes a key out of the cache.\n   *\n   * Returns true if the key was deleted, false otherwise.\n   */\n  delete(t) {\n    return this.#v(t, \"delete\");\n  }\n  #v(t, n) {\n    let r = !1;\n    if (this.#s !== 0) {\n      const s = this.#r.get(t);\n      if (s !== void 0)\n        if (this.#p?.[s] && (clearTimeout(this.#p?.[s]), this.#p[s] = void 0), r = !0, this.#s === 1)\n          this.#W(n);\n        else {\n          this.#k(s);\n          const i = this.#t[s];\n          if (this.#e(i) ? i.__abortController.abort(new Error(\"deleted\")) : (this.#_ || this.#l) && (this.#_ && this.#g?.(i, t, n), this.#l && this.#o?.push([i, t, n])), this.#r.delete(t), this.#n[s] = void 0, this.#t[s] = void 0, s === this.#i)\n            this.#i = this.#f[s];\n          else if (s === this.#c)\n            this.#c = this.#u[s];\n          else {\n            const o = this.#f[s];\n            this.#u[o] = this.#u[s];\n            const a = this.#u[s];\n            this.#f[a] = this.#f[s];\n          }\n          this.#s--, this.#S.push(s);\n        }\n    }\n    if (this.#l && this.#o?.length) {\n      const s = this.#o;\n      let i;\n      for (; i = s?.shift(); )\n        this.#y?.(...i);\n    }\n    return r;\n  }\n  /**\n   * Clear the cache entirely, throwing away all values.\n   */\n  clear() {\n    return this.#W(\"delete\");\n  }\n  #W(t) {\n    for (const n of this.#T({ allowStale: !0 })) {\n      const r = this.#t[n];\n      if (this.#e(r))\n        r.__abortController.abort(new Error(\"deleted\"));\n      else {\n        const s = this.#n[n];\n        this.#_ && this.#g?.(r, s, t), this.#l && this.#o?.push([r, s, t]);\n      }\n    }\n    if (this.#r.clear(), this.#t.fill(void 0), this.#n.fill(void 0), this.#d && this.#x) {\n      this.#d.fill(0), this.#x.fill(0);\n      for (const n of this.#p ?? [])\n        n !== void 0 && clearTimeout(n);\n      this.#p?.fill(void 0);\n    }\n    if (this.#A && this.#A.fill(0), this.#c = 0, this.#i = 0, this.#S.length = 0, this.#b = 0, this.#s = 0, this.#l && this.#o) {\n      const n = this.#o;\n      let r;\n      for (; r = n?.shift(); )\n        this.#y?.(...r);\n    }\n  }\n}\nclass ka {\n  commands = [];\n  pushCommand(t) {\n    this.commands.push(t);\n  }\n  popCommand() {\n    this.commands.pop();\n  }\n  executeCommands(...t) {\n    this.commands.forEach((n) => this.executeCommand(n, ...t)), this.commands = [];\n  }\n  // 子类只需修改此方法\n  executeCommand(t, ...n) {\n    t.execute(...n);\n  }\n}\nclass Pa {\n  data;\n  constructor(t) {\n    this.data = t;\n  }\n  get() {\n    return this.data;\n  }\n}\nclass jh {\n  state;\n  saveState() {\n    if (this.state)\n      return new Pa(this.state);\n  }\n  restoreState(t) {\n    this.state = t.get();\n  }\n}\nclass Bh extends ka {\n  originator;\n  mementos = [];\n  constructor(t) {\n    super(), this.originator = t;\n  }\n  pushMemento(t) {\n    this.mementos.push(t);\n  }\n  popMemento() {\n    return this.mementos.pop();\n  }\n  executeCommand(t) {\n    t.execute(this);\n  }\n}\nclass qh {\n  execute(t) {\n    const n = t.originator.saveState();\n    n && t.pushMemento(n);\n  }\n}\nclass Wh {\n  execute(t) {\n    const n = t.popMemento();\n    n && t.originator.restoreState(n);\n  }\n}\nexport {\n  cs as AlgorithmEnum,\n  Cl as AuthenticatableDecorator,\n  Fl as AuthorizeDecorator,\n  fe as BasicHeap,\n  P2 as BigIntSupported,\n  Dh as BinarySearch,\n  Sc as BinarySearchTree,\n  xt as BinaryTreeNode,\n  Eh as BubbleSort,\n  Ia as CSSAnimationNames,\n  Ve as Cache,\n  Ul as CacheDecorator,\n  us as CipherEnum,\n  ka as CommandInvoker,\n  Bl as ConfigurableDecorator,\n  rl as CreateValidator,\n  $l as DebounceDecorator,\n  Ao as Dep,\n  Th as DeriveWorker,\n  ah as DialogSchedule,\n  Ih as DiffArray,\n  W as DomMatrix,\n  v as DomPoint,\n  kc as EPSILON,\n  Zt as EncodeEnum,\n  $1 as Enum,\n  ql as EnumerableDecorator,\n  Ol as EventBus,\n  Rh as FetchWithAxios,\n  Ac as Graph,\n  Jt as GraphEdge,\n  We as GraphNode,\n  vs as HASH_UNDEFINED,\n  Dt as Hash,\n  Kc as HashObject,\n  Yc as HashTable,\n  fn as HashTableOverflow,\n  Ph as HeapSort,\n  Sl as HttpError,\n  Fh as InsertSort,\n  Ns as LARGE_ARRAY_SIZE,\n  es as LRUCache,\n  Nh as LRUCacheUseLinkedList,\n  $h as LRUCacheUseMap,\n  gs as LinkedList,\n  _t as ListCache,\n  He as ListNode,\n  Dl as LogExecuteResultDecorator,\n  Ml as LogExecuteTimeDecorator,\n  Cc as MAX_SAFE_INTEGER,\n  ws as MAX_SIGNED_INT,\n  J as MIMEEnum,\n  Fc as MIN_SAFE_INTEGER,\n  jt as Map,\n  Ct as MapCache,\n  _c as MaxHeap,\n  Pl as MaxLengthDecorator,\n  Bh as MementoCaretaker,\n  jh as MementoOriginator,\n  zl as MemorizeDecorator,\n  $n as MergeSort,\n  In as MergeSort2,\n  Oc as MinHeap,\n  kl as MinLengthDecorator,\n  Ge as ONE_DAY_TIMESTAMP,\n  Lh as PrefixSumArray,\n  xc as PriorityQueue,\n  Ll as ProfileDecorator,\n  oh as PromiseSchedule,\n  Et as Queue,\n  V as QueueOverflow,\n  Mh as QuickSearch,\n  Nn as QuickSort,\n  Un as QuickSort2,\n  Ea as QuickSort_partition,\n  as as ReadInBrowserEnum,\n  jl as ReadonlyDecorator,\n  Nl as RetryDecorator,\n  ht as SYMBOL_META,\n  qh as SaveCommand,\n  zo as Schedule,\n  vr as ScheduleDependOnResult,\n  Ch as SelectSort,\n  z1 as SetCache,\n  kh as ShellSort,\n  El as SingletonDecorator,\n  N1 as Stack,\n  lh as StreamUsedMessageChannel,\n  yh as Subject,\n  D2 as SymbolSupported,\n  zn as ThreeWayQuickSort,\n  Il as ThrottleDecorator,\n  Wh as UndoCommand,\n  or as WeakMap,\n  Ls as ZeroArray,\n  $u as _instanceof,\n  Ic as add,\n  m1 as addArrayItem,\n  Is as addMapEntry,\n  $s as addSetEntry,\n  Zl as all,\n  Wo as appendURL,\n  Ah as appendURLRecord,\n  O1 as appendUniqueArray,\n  Ws as apply,\n  dh as applyMiddleware,\n  mc as arrayBufferToDataView,\n  gc as arrayBufferToTypedArray,\n  c1 as arrayCount,\n  o1 as arrayEach,\n  a1 as arrayEvery,\n  h1 as arrayMiddleValue,\n  P1 as arrayNeedsUint32,\n  Au as assoc,\n  Mt as assocIndexOf,\n  hr as atob,\n  Mc as average,\n  Ri as base64URLDecode,\n  vi as base64URLEncode,\n  Ro as bd09_to_gcj02,\n  Rl as bd09_to_wgs84,\n  S2 as bind,\n  A2 as bindObjectThis,\n  Ci as btoa,\n  tr as cache,\n  N2 as canUseBitmap,\n  wi as canUseWorker,\n  Ql as cancelablePromise,\n  Qa as capitalize,\n  eh as chainPromise,\n  j1 as changeTimeZone,\n  Ha as charAt,\n  dt as clamp,\n  d2 as classMixin,\n  p1 as clearArray,\n  T2 as clearObject,\n  qe as cloneArrayBuffer,\n  y2 as cloneAsPrototype,\n  wc as cloneDataView,\n  s1 as cloneFill2DArray,\n  L1 as cloneMap,\n  hs as cloneRegExp,\n  I1 as cloneSet,\n  Wu as cloneSymbol,\n  bc as cloneTypedArray,\n  pu as closeLog,\n  fh as combineReducers,\n  $2 as compareVersion,\n  Xs as compose,\n  yc as concateTypedArray,\n  Fu as conditional,\n  K1 as copyTime,\n  ol as createCommonDateValidator,\n  cl as createCommonDatetimeValidator,\n  sl as createCommonEmailValidator,\n  hl as createCommonEnumValidator,\n  ll as createCommonLengthValidator,\n  ul as createCommonNumberValidator,\n  il as createCommonPhoneValidator,\n  al as createCommonTimeValidator,\n  Rc as createDroppingRingQueue,\n  Qc as createEmptyArray,\n  ys as createExpandingRingQueue,\n  vc as createFixedRingQueue,\n  Xc as createNextInt,\n  Tc as createNoneRingQueue,\n  Tl as createSignal,\n  Ec as createSlidingRingQueue,\n  jo as createStore,\n  Hn as createSymbol,\n  Tr as createTask,\n  Gs as curry,\n  gl as customDelay,\n  Li as dateValidate,\n  $i as datetimeValidate,\n  au as dayOfYear,\n  Vs as debounce,\n  qc as decimalNumber,\n  Y1 as decreaseTime,\n  it as deepClone,\n  cr as deepDiff,\n  gi as deepEqual,\n  No as deferred,\n  nh as delayAsync,\n  rh as delaySync,\n  g1 as deleteArrayItem,\n  Jc as denormalize,\n  mn as diffDays,\n  ml as discardOddDoubleEven,\n  Di as emailValidate,\n  Ni as enumValidate,\n  mi as eq,\n  gu as errorLog,\n  Nc as euclideanModulo,\n  mh as exceptionLoggerMiddleware,\n  gh as executeTimeLoggerMiddleware,\n  Os as extractAllNumbers,\n  Hc as extractNumber,\n  Rs as fill2DArray,\n  r1 as fillArray,\n  n1 as fillArrayIterate,\n  _2 as filterObject,\n  f1 as first,\n  Ga as fixChineseCompanyName,\n  Va as fixChineseTaxNo,\n  Xa as fixEmail,\n  Xn as fixedDotNumberString,\n  Bc as fixedNumberString,\n  b1 as flattenArray,\n  Ds as flattenArray2,\n  Ms as flattenArray3,\n  S1 as flattenArray4,\n  A1 as flattenArray5,\n  Ps as flushArray,\n  Sh as flushURLRecord,\n  qo as flushURLSearch,\n  Oh as formDataToSearch,\n  Ft as format,\n  nu as formatDate,\n  iu as formatDateTime,\n  fl as formatDistance,\n  dl as formatMoney,\n  Wc as formatNumber,\n  eu as formatPreset,\n  ru as formatTime,\n  su as formatTime2,\n  W1 as formatTimeOverflow,\n  H1 as formatTimeOverflowChinese,\n  pi as freeze,\n  f2 as functionMixin,\n  Wl as gb32100_2015,\n  Mo as gbt11714,\n  vo as gcj02_to_bd09,\n  To as gcj02_to_wgs84,\n  Za as generateUUID,\n  Hl as generatorfromArray,\n  Vl as generatortoArray,\n  Cs as get2DArrayColumn,\n  Es as get2DArrayRow,\n  i1 as get2DArrayRowColumn,\n  j2 as getArrayBufferFromByteArray,\n  q2 as getArrayBufferFromHexString,\n  B2 as getArrayBufferFromNumber,\n  Ti as getArrayBufferFromString,\n  Ai as getByteArrayFromArrayBuffer,\n  _i as getByteArrayFromHexString,\n  xi as getByteArrayFromNumber,\n  Oi as getByteArrayFromString,\n  fu as getCalendarPageItems,\n  z2 as getCodePointArrayFromString,\n  Ho as getCrossOriginWorkerURL,\n  St as getDateDetail,\n  ct as getDefinedRegExpPattern,\n  Z as getDegree,\n  F1 as getDifferenceArray,\n  k1 as getDifferenceSet,\n  K2 as getFileTypeFromArrayBuffer,\n  js as getFirstTimestampOfMonth,\n  cu as getFirstTimestampOfNextMonth,\n  rs as getGlobal,\n  V2 as getHexNumber,\n  G2 as getHexString,\n  R1 as getIntersectArray,\n  C1 as getIntersectArrayUseMap,\n  E1 as getIntersectSet,\n  Us as getLastDayOfMonth,\n  zs as getLastTimestampOfMonth,\n  uu as getLastTimestampOfPrevMonth,\n  Ye as getNative,\n  R2 as getNestedValue,\n  As as getNextPrime,\n  It as getNthDay,\n  hu as getNthMonth,\n  lu as getNthMonthNotGood,\n  u2 as getOwnPropertyDescriptors,\n  Yu as getPrototype,\n  ls as getRegExpFlags,\n  Zs as getRetryDelay,\n  Ut as getSecondsFromTimeOverlow,\n  v2 as getSortedObjectString,\n  Ei as getString,\n  X2 as getStringFromArrayBuffer,\n  Z2 as getStringFromArrayBuffer2,\n  J2 as getStringFromBase64,\n  $ as getTag,\n  Nu as getType,\n  pc as getTypedArrayType,\n  Rr as getURL,\n  Q2 as getUint64,\n  tl as getUint64BigInt,\n  U2 as getUint8ArrayFromString,\n  M1 as getUintArray,\n  qa as getUnicodeLengthES5,\n  T1 as getUnionArray,\n  v1 as getUnionSet,\n  gn as groupLog,\n  M2 as hasDocument,\n  I2 as hasHistory,\n  l2 as hasProperty,\n  Ma as hasSymbol,\n  L2 as hasWindow,\n  yu as identity,\n  ks as includes,\n  J1 as increaseTime,\n  w2 as inheritPrototype,\n  e1 as initCloneArray,\n  u1 as intersperse,\n  lc as is32BitString,\n  j as isArray,\n  ps as isArrayBufferView,\n  w1 as isArrayEqual,\n  Xu as isArrayLike,\n  y1 as isArrayNotEmpty,\n  ju as isBoolean,\n  yi as isBrowser,\n  p2 as isCloneable,\n  i2 as isDate,\n  N as isDateValid,\n  Ku as isDescriptor,\n  Qu as isEmptyObject,\n  bl as isErrorType,\n  Dc as isEven,\n  Q as isFunction,\n  e2 as isGenerator,\n  tu as isInDays,\n  Q1 as isInTime,\n  n2 as isIterable,\n  fi as isIterator,\n  M as isJustObject,\n  hi as isKeyable,\n  Ke as isLittleEndian,\n  r2 as isMap,\n  Gn as isNaN,\n  zt as isNative,\n  Vu as isNativeFunction,\n  k2 as isNode,\n  t1 as isNotEmptyArray,\n  zu as isNull,\n  Bu as isNumber,\n  qu as isNumeric,\n  ai as isOK,\n  yt as isObject,\n  U as isObjectLike,\n  Zu as isPlainObject,\n  bs as isPosInt,\n  Ss as isPrime,\n  Je as isPrimitive,\n  t2 as isPromise,\n  Ju as isPrototype,\n  Pc as isReallyNaN,\n  Bo as isSameOriginURL,\n  F2 as isServer,\n  s2 as isSet,\n  o2 as isStrictComparable,\n  ci as isString,\n  Hu as isStringableFunction,\n  ui as isSymbol,\n  Ue as isSymbolString,\n  Jn as isTimestampInMilliSeconds,\n  q1 as isTimestampInSeconds,\n  ms as isTypedArray,\n  wh as isURL,\n  Uu as isUndefined,\n  ou as isWeekend,\n  Su as kDone,\n  bu as kFalse,\n  wu as kTrue,\n  Yn as konst,\n  d1 as last,\n  Gl as lastX,\n  Pi as lengthValidate,\n  _s as lerp,\n  zc as lerpMap,\n  Uc as lerps,\n  E as log,\n  fs as lowercaseFirst,\n  Mu as map,\n  dn as mapToArray,\n  et as maxDotNumber,\n  nl as maxLengthValidate,\n  ki as maxValidate,\n  Ze as memoize,\n  Eu as memoizeCapped,\n  Js as memorize,\n  Bt as mergeObject,\n  di as mergeObjectDeep,\n  le as meta,\n  uh as microTask,\n  K as milliseconds,\n  el as minLengthValidate,\n  Fi as minValidate,\n  Gu as nativeCreate,\n  g2 as newConstructor,\n  ch as nextTick,\n  qs as noop,\n  Zc as normalize,\n  ut as notEmptyValidate,\n  Yt as now,\n  bi as numberToRadixString,\n  c2 as objectEntries,\n  kt as objectKeys,\n  je as objectSignature,\n  a2 as objectValues,\n  Ru as once,\n  du as openLog,\n  hh as operationParser,\n  Sr as out_of_china,\n  Ks as overArg,\n  Iu as overRest,\n  W2 as pack,\n  ic as padString,\n  is as parse,\n  de as parseDate,\n  Y as parseNumber,\n  La as parseObjectSignature,\n  Lc as parseRelativeNumber,\n  V1 as parseTime,\n  X1 as parseTimeFromArray,\n  G1 as parseTimeFromDate,\n  Z1 as parseTimeFromDateDiff,\n  yl as pausable$,\n  Mi as phoneValidate,\n  O2 as pick,\n  xu as pipe,\n  _u as pipeCallback,\n  vh as polar,\n  l1 as popToTopInArray,\n  yn as profileLog,\n  wl as prop$,\n  Si as radixStringToNumber,\n  Vc as randomDirection,\n  Ts as randomFloat,\n  Gc as randomInt,\n  Ja as randomLetter,\n  Vn as randomString,\n  Ka as raw,\n  _o as reactive,\n  ne as reactiveVue2,\n  br as reactiveVue3,\n  pl as readStream,\n  B1 as readableTimestamp,\n  Er as recordToSearch,\n  Lu as reduce,\n  _l as ref,\n  za as regExec,\n  Be as regMatch,\n  Ua as regMatchAll,\n  $a as regSearchIndex,\n  Na as regSplit,\n  Rt as regTest,\n  oc as repeatString,\n  ve as replaceSymbol,\n  Re as restoreSymbol,\n  Qn as retry,\n  Xl as returnValue,\n  vu as reverseArgs,\n  uc as reverseString,\n  T as root,\n  $c as round,\n  ih as runAsyncChain,\n  sh as runAsyncWithTimeout,\n  Jl as runGenerator,\n  tt as runValidates,\n  xh as searchToRecord,\n  _h as searchToRecord2,\n  mu as setLogUploadFn,\n  E2 as setNestedValue,\n  b2 as setProtoOf,\n  pn as setToArray,\n  m2 as shallowClone,\n  x1 as shuffleArray,\n  h2 as shuffleObject,\n  Wa as sliceByCodePoints,\n  Go as splitTransformString,\n  ph as stateLoggerMiddleware,\n  jc as stepMap,\n  dc as stringByteSize,\n  rt as stringLength,\n  ja as stringLength2,\n  Ba as stringLength3,\n  Ya as stringReplace,\n  ss as stringify,\n  x2 as subtractObject,\n  Fs as swapArrayValue,\n  Tu as tco,\n  Hs as throttle,\n  Kl as thunkToPromise,\n  Yl as thunkify,\n  Kt as timeLog,\n  Ii as timeValidate,\n  th as timeoutLimitPromise,\n  he as toArrayBuffer,\n  Y2 as toBlob,\n  ec as toCamel,\n  H as toDegree,\n  ar as toFunctionString,\n  tc as toKebab,\n  I as toObjectString,\n  ds as toPascal,\n  Vo as toRadian,\n  xl as toValue,\n  Pu as trace,\n  Ou as trampoline,\n  Du as transformUnaryArg,\n  nc as trim,\n  bh as trimHash,\n  sc as trimScopedCSS,\n  rc as trimSpecial,\n  ac as truncateString,\n  cc as truncateStringInMiddle,\n  ku as tryCatch,\n  Cu as tryEach,\n  hn as tryToSymbol,\n  _1 as uniqueArray,\n  H2 as unpack,\n  C2 as useTimestampValue,\n  hc as utf16to8,\n  fc as utf8to16,\n  Bs as warnLog,\n  Al as watchEffect,\n  vl as wgs84_to_bd09,\n  Oo as wgs84_to_gcj02,\n  xs as withinErrorMarginNumber\n};\n//# sourceMappingURL=zyzgroup_core_common.js.map\n","(function (factory) {\n    if (typeof exports === 'object') {\n        // Node/CommonJS\n        module.exports = factory();\n    } else if (typeof define === 'function' && define.amd) {\n        // AMD\n        define(factory);\n    } else {\n        // Browser globals (with support for web workers)\n        var glob;\n\n        try {\n            glob = window;\n        } catch (e) {\n            glob = self;\n        }\n\n        glob.SparkMD5 = factory();\n    }\n}(function (undefined) {\n\n    'use strict';\n\n    /*\n     * Fastest md5 implementation around (JKM md5).\n     * Credits: Joseph Myers\n     *\n     * @see http://www.myersdaily.org/joseph/javascript/md5-text.html\n     * @see http://jsperf.com/md5-shootout/7\n     */\n\n    /* this function is much faster,\n      so if possible we use it. Some IEs\n      are the only ones I know of that\n      need the idiotic second function,\n      generated by an if clause.  */\n    var add32 = function (a, b) {\n        return (a + b) & 0xFFFFFFFF;\n    },\n        hex_chr = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'];\n\n\n    function cmn(q, a, b, x, s, t) {\n        a = add32(add32(a, q), add32(x, t));\n        return add32((a << s) | (a >>> (32 - s)), b);\n    }\n\n    function md5cycle(x, k) {\n        var a = x[0],\n            b = x[1],\n            c = x[2],\n            d = x[3];\n\n        a += (b & c | ~b & d) + k[0] - 680876936 | 0;\n        a  = (a << 7 | a >>> 25) + b | 0;\n        d += (a & b | ~a & c) + k[1] - 389564586 | 0;\n        d  = (d << 12 | d >>> 20) + a | 0;\n        c += (d & a | ~d & b) + k[2] + 606105819 | 0;\n        c  = (c << 17 | c >>> 15) + d | 0;\n        b += (c & d | ~c & a) + k[3] - 1044525330 | 0;\n        b  = (b << 22 | b >>> 10) + c | 0;\n        a += (b & c | ~b & d) + k[4] - 176418897 | 0;\n        a  = (a << 7 | a >>> 25) + b | 0;\n        d += (a & b | ~a & c) + k[5] + 1200080426 | 0;\n        d  = (d << 12 | d >>> 20) + a | 0;\n        c += (d & a | ~d & b) + k[6] - 1473231341 | 0;\n        c  = (c << 17 | c >>> 15) + d | 0;\n        b += (c & d | ~c & a) + k[7] - 45705983 | 0;\n        b  = (b << 22 | b >>> 10) + c | 0;\n        a += (b & c | ~b & d) + k[8] + 1770035416 | 0;\n        a  = (a << 7 | a >>> 25) + b | 0;\n        d += (a & b | ~a & c) + k[9] - 1958414417 | 0;\n        d  = (d << 12 | d >>> 20) + a | 0;\n        c += (d & a | ~d & b) + k[10] - 42063 | 0;\n        c  = (c << 17 | c >>> 15) + d | 0;\n        b += (c & d | ~c & a) + k[11] - 1990404162 | 0;\n        b  = (b << 22 | b >>> 10) + c | 0;\n        a += (b & c | ~b & d) + k[12] + 1804603682 | 0;\n        a  = (a << 7 | a >>> 25) + b | 0;\n        d += (a & b | ~a & c) + k[13] - 40341101 | 0;\n        d  = (d << 12 | d >>> 20) + a | 0;\n        c += (d & a | ~d & b) + k[14] - 1502002290 | 0;\n        c  = (c << 17 | c >>> 15) + d | 0;\n        b += (c & d | ~c & a) + k[15] + 1236535329 | 0;\n        b  = (b << 22 | b >>> 10) + c | 0;\n\n        a += (b & d | c & ~d) + k[1] - 165796510 | 0;\n        a  = (a << 5 | a >>> 27) + b | 0;\n        d += (a & c | b & ~c) + k[6] - 1069501632 | 0;\n        d  = (d << 9 | d >>> 23) + a | 0;\n        c += (d & b | a & ~b) + k[11] + 643717713 | 0;\n        c  = (c << 14 | c >>> 18) + d | 0;\n        b += (c & a | d & ~a) + k[0] - 373897302 | 0;\n        b  = (b << 20 | b >>> 12) + c | 0;\n        a += (b & d | c & ~d) + k[5] - 701558691 | 0;\n        a  = (a << 5 | a >>> 27) + b | 0;\n        d += (a & c | b & ~c) + k[10] + 38016083 | 0;\n        d  = (d << 9 | d >>> 23) + a | 0;\n        c += (d & b | a & ~b) + k[15] - 660478335 | 0;\n        c  = (c << 14 | c >>> 18) + d | 0;\n        b += (c & a | d & ~a) + k[4] - 405537848 | 0;\n        b  = (b << 20 | b >>> 12) + c | 0;\n        a += (b & d | c & ~d) + k[9] + 568446438 | 0;\n        a  = (a << 5 | a >>> 27) + b | 0;\n        d += (a & c | b & ~c) + k[14] - 1019803690 | 0;\n        d  = (d << 9 | d >>> 23) + a | 0;\n        c += (d & b | a & ~b) + k[3] - 187363961 | 0;\n        c  = (c << 14 | c >>> 18) + d | 0;\n        b += (c & a | d & ~a) + k[8] + 1163531501 | 0;\n        b  = (b << 20 | b >>> 12) + c | 0;\n        a += (b & d | c & ~d) + k[13] - 1444681467 | 0;\n        a  = (a << 5 | a >>> 27) + b | 0;\n        d += (a & c | b & ~c) + k[2] - 51403784 | 0;\n        d  = (d << 9 | d >>> 23) + a | 0;\n        c += (d & b | a & ~b) + k[7] + 1735328473 | 0;\n        c  = (c << 14 | c >>> 18) + d | 0;\n        b += (c & a | d & ~a) + k[12] - 1926607734 | 0;\n        b  = (b << 20 | b >>> 12) + c | 0;\n\n        a += (b ^ c ^ d) + k[5] - 378558 | 0;\n        a  = (a << 4 | a >>> 28) + b | 0;\n        d += (a ^ b ^ c) + k[8] - 2022574463 | 0;\n        d  = (d << 11 | d >>> 21) + a | 0;\n        c += (d ^ a ^ b) + k[11] + 1839030562 | 0;\n        c  = (c << 16 | c >>> 16) + d | 0;\n        b += (c ^ d ^ a) + k[14] - 35309556 | 0;\n        b  = (b << 23 | b >>> 9) + c | 0;\n        a += (b ^ c ^ d) + k[1] - 1530992060 | 0;\n        a  = (a << 4 | a >>> 28) + b | 0;\n        d += (a ^ b ^ c) + k[4] + 1272893353 | 0;\n        d  = (d << 11 | d >>> 21) + a | 0;\n        c += (d ^ a ^ b) + k[7] - 155497632 | 0;\n        c  = (c << 16 | c >>> 16) + d | 0;\n        b += (c ^ d ^ a) + k[10] - 1094730640 | 0;\n        b  = (b << 23 | b >>> 9) + c | 0;\n        a += (b ^ c ^ d) + k[13] + 681279174 | 0;\n        a  = (a << 4 | a >>> 28) + b | 0;\n        d += (a ^ b ^ c) + k[0] - 358537222 | 0;\n        d  = (d << 11 | d >>> 21) + a | 0;\n        c += (d ^ a ^ b) + k[3] - 722521979 | 0;\n        c  = (c << 16 | c >>> 16) + d | 0;\n        b += (c ^ d ^ a) + k[6] + 76029189 | 0;\n        b  = (b << 23 | b >>> 9) + c | 0;\n        a += (b ^ c ^ d) + k[9] - 640364487 | 0;\n        a  = (a << 4 | a >>> 28) + b | 0;\n        d += (a ^ b ^ c) + k[12] - 421815835 | 0;\n        d  = (d << 11 | d >>> 21) + a | 0;\n        c += (d ^ a ^ b) + k[15] + 530742520 | 0;\n        c  = (c << 16 | c >>> 16) + d | 0;\n        b += (c ^ d ^ a) + k[2] - 995338651 | 0;\n        b  = (b << 23 | b >>> 9) + c | 0;\n\n        a += (c ^ (b | ~d)) + k[0] - 198630844 | 0;\n        a  = (a << 6 | a >>> 26) + b | 0;\n        d += (b ^ (a | ~c)) + k[7] + 1126891415 | 0;\n        d  = (d << 10 | d >>> 22) + a | 0;\n        c += (a ^ (d | ~b)) + k[14] - 1416354905 | 0;\n        c  = (c << 15 | c >>> 17) + d | 0;\n        b += (d ^ (c | ~a)) + k[5] - 57434055 | 0;\n        b  = (b << 21 |b >>> 11) + c | 0;\n        a += (c ^ (b | ~d)) + k[12] + 1700485571 | 0;\n        a  = (a << 6 | a >>> 26) + b | 0;\n        d += (b ^ (a | ~c)) + k[3] - 1894986606 | 0;\n        d  = (d << 10 | d >>> 22) + a | 0;\n        c += (a ^ (d | ~b)) + k[10] - 1051523 | 0;\n        c  = (c << 15 | c >>> 17) + d | 0;\n        b += (d ^ (c | ~a)) + k[1] - 2054922799 | 0;\n        b  = (b << 21 |b >>> 11) + c | 0;\n        a += (c ^ (b | ~d)) + k[8] + 1873313359 | 0;\n        a  = (a << 6 | a >>> 26) + b | 0;\n        d += (b ^ (a | ~c)) + k[15] - 30611744 | 0;\n        d  = (d << 10 | d >>> 22) + a | 0;\n        c += (a ^ (d | ~b)) + k[6] - 1560198380 | 0;\n        c  = (c << 15 | c >>> 17) + d | 0;\n        b += (d ^ (c | ~a)) + k[13] + 1309151649 | 0;\n        b  = (b << 21 |b >>> 11) + c | 0;\n        a += (c ^ (b | ~d)) + k[4] - 145523070 | 0;\n        a  = (a << 6 | a >>> 26) + b | 0;\n        d += (b ^ (a | ~c)) + k[11] - 1120210379 | 0;\n        d  = (d << 10 | d >>> 22) + a | 0;\n        c += (a ^ (d | ~b)) + k[2] + 718787259 | 0;\n        c  = (c << 15 | c >>> 17) + d | 0;\n        b += (d ^ (c | ~a)) + k[9] - 343485551 | 0;\n        b  = (b << 21 | b >>> 11) + c | 0;\n\n        x[0] = a + x[0] | 0;\n        x[1] = b + x[1] | 0;\n        x[2] = c + x[2] | 0;\n        x[3] = d + x[3] | 0;\n    }\n\n    function md5blk(s) {\n        var md5blks = [],\n            i; /* Andy King said do it this way. */\n\n        for (i = 0; i < 64; i += 4) {\n            md5blks[i >> 2] = s.charCodeAt(i) + (s.charCodeAt(i + 1) << 8) + (s.charCodeAt(i + 2) << 16) + (s.charCodeAt(i + 3) << 24);\n        }\n        return md5blks;\n    }\n\n    function md5blk_array(a) {\n        var md5blks = [],\n            i; /* Andy King said do it this way. */\n\n        for (i = 0; i < 64; i += 4) {\n            md5blks[i >> 2] = a[i] + (a[i + 1] << 8) + (a[i + 2] << 16) + (a[i + 3] << 24);\n        }\n        return md5blks;\n    }\n\n    function md51(s) {\n        var n = s.length,\n            state = [1732584193, -271733879, -1732584194, 271733878],\n            i,\n            length,\n            tail,\n            tmp,\n            lo,\n            hi;\n\n        for (i = 64; i <= n; i += 64) {\n            md5cycle(state, md5blk(s.substring(i - 64, i)));\n        }\n        s = s.substring(i - 64);\n        length = s.length;\n        tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n        for (i = 0; i < length; i += 1) {\n            tail[i >> 2] |= s.charCodeAt(i) << ((i % 4) << 3);\n        }\n        tail[i >> 2] |= 0x80 << ((i % 4) << 3);\n        if (i > 55) {\n            md5cycle(state, tail);\n            for (i = 0; i < 16; i += 1) {\n                tail[i] = 0;\n            }\n        }\n\n        // Beware that the final length might not fit in 32 bits so we take care of that\n        tmp = n * 8;\n        tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n        lo = parseInt(tmp[2], 16);\n        hi = parseInt(tmp[1], 16) || 0;\n\n        tail[14] = lo;\n        tail[15] = hi;\n\n        md5cycle(state, tail);\n        return state;\n    }\n\n    function md51_array(a) {\n        var n = a.length,\n            state = [1732584193, -271733879, -1732584194, 271733878],\n            i,\n            length,\n            tail,\n            tmp,\n            lo,\n            hi;\n\n        for (i = 64; i <= n; i += 64) {\n            md5cycle(state, md5blk_array(a.subarray(i - 64, i)));\n        }\n\n        // Not sure if it is a bug, however IE10 will always produce a sub array of length 1\n        // containing the last element of the parent array if the sub array specified starts\n        // beyond the length of the parent array - weird.\n        // https://connect.microsoft.com/IE/feedback/details/771452/typed-array-subarray-issue\n        a = (i - 64) < n ? a.subarray(i - 64) : new Uint8Array(0);\n\n        length = a.length;\n        tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n        for (i = 0; i < length; i += 1) {\n            tail[i >> 2] |= a[i] << ((i % 4) << 3);\n        }\n\n        tail[i >> 2] |= 0x80 << ((i % 4) << 3);\n        if (i > 55) {\n            md5cycle(state, tail);\n            for (i = 0; i < 16; i += 1) {\n                tail[i] = 0;\n            }\n        }\n\n        // Beware that the final length might not fit in 32 bits so we take care of that\n        tmp = n * 8;\n        tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n        lo = parseInt(tmp[2], 16);\n        hi = parseInt(tmp[1], 16) || 0;\n\n        tail[14] = lo;\n        tail[15] = hi;\n\n        md5cycle(state, tail);\n\n        return state;\n    }\n\n    function rhex(n) {\n        var s = '',\n            j;\n        for (j = 0; j < 4; j += 1) {\n            s += hex_chr[(n >> (j * 8 + 4)) & 0x0F] + hex_chr[(n >> (j * 8)) & 0x0F];\n        }\n        return s;\n    }\n\n    function hex(x) {\n        var i;\n        for (i = 0; i < x.length; i += 1) {\n            x[i] = rhex(x[i]);\n        }\n        return x.join('');\n    }\n\n    // In some cases the fast add32 function cannot be used..\n    if (hex(md51('hello')) !== '5d41402abc4b2a76b9719d911017c592') {\n        add32 = function (x, y) {\n            var lsw = (x & 0xFFFF) + (y & 0xFFFF),\n                msw = (x >> 16) + (y >> 16) + (lsw >> 16);\n            return (msw << 16) | (lsw & 0xFFFF);\n        };\n    }\n\n    // ---------------------------------------------------\n\n    /**\n     * ArrayBuffer slice polyfill.\n     *\n     * @see https://github.com/ttaubert/node-arraybuffer-slice\n     */\n\n    if (typeof ArrayBuffer !== 'undefined' && !ArrayBuffer.prototype.slice) {\n        (function () {\n            function clamp(val, length) {\n                val = (val | 0) || 0;\n\n                if (val < 0) {\n                    return Math.max(val + length, 0);\n                }\n\n                return Math.min(val, length);\n            }\n\n            ArrayBuffer.prototype.slice = function (from, to) {\n                var length = this.byteLength,\n                    begin = clamp(from, length),\n                    end = length,\n                    num,\n                    target,\n                    targetArray,\n                    sourceArray;\n\n                if (to !== undefined) {\n                    end = clamp(to, length);\n                }\n\n                if (begin > end) {\n                    return new ArrayBuffer(0);\n                }\n\n                num = end - begin;\n                target = new ArrayBuffer(num);\n                targetArray = new Uint8Array(target);\n\n                sourceArray = new Uint8Array(this, begin, num);\n                targetArray.set(sourceArray);\n\n                return target;\n            };\n        })();\n    }\n\n    // ---------------------------------------------------\n\n    /**\n     * Helpers.\n     */\n\n    function toUtf8(str) {\n        if (/[\\u0080-\\uFFFF]/.test(str)) {\n            str = unescape(encodeURIComponent(str));\n        }\n\n        return str;\n    }\n\n    function utf8Str2ArrayBuffer(str, returnUInt8Array) {\n        var length = str.length,\n           buff = new ArrayBuffer(length),\n           arr = new Uint8Array(buff),\n           i;\n\n        for (i = 0; i < length; i += 1) {\n            arr[i] = str.charCodeAt(i);\n        }\n\n        return returnUInt8Array ? arr : buff;\n    }\n\n    function arrayBuffer2Utf8Str(buff) {\n        return String.fromCharCode.apply(null, new Uint8Array(buff));\n    }\n\n    function concatenateArrayBuffers(first, second, returnUInt8Array) {\n        var result = new Uint8Array(first.byteLength + second.byteLength);\n\n        result.set(new Uint8Array(first));\n        result.set(new Uint8Array(second), first.byteLength);\n\n        return returnUInt8Array ? result : result.buffer;\n    }\n\n    function hexToBinaryString(hex) {\n        var bytes = [],\n            length = hex.length,\n            x;\n\n        for (x = 0; x < length - 1; x += 2) {\n            bytes.push(parseInt(hex.substr(x, 2), 16));\n        }\n\n        return String.fromCharCode.apply(String, bytes);\n    }\n\n    // ---------------------------------------------------\n\n    /**\n     * SparkMD5 OOP implementation.\n     *\n     * Use this class to perform an incremental md5, otherwise use the\n     * static methods instead.\n     */\n\n    function SparkMD5() {\n        // call reset to init the instance\n        this.reset();\n    }\n\n    /**\n     * Appends a string.\n     * A conversion will be applied if an utf8 string is detected.\n     *\n     * @param {String} str The string to be appended\n     *\n     * @return {SparkMD5} The instance itself\n     */\n    SparkMD5.prototype.append = function (str) {\n        // Converts the string to utf8 bytes if necessary\n        // Then append as binary\n        this.appendBinary(toUtf8(str));\n\n        return this;\n    };\n\n    /**\n     * Appends a binary string.\n     *\n     * @param {String} contents The binary string to be appended\n     *\n     * @return {SparkMD5} The instance itself\n     */\n    SparkMD5.prototype.appendBinary = function (contents) {\n        this._buff += contents;\n        this._length += contents.length;\n\n        var length = this._buff.length,\n            i;\n\n        for (i = 64; i <= length; i += 64) {\n            md5cycle(this._hash, md5blk(this._buff.substring(i - 64, i)));\n        }\n\n        this._buff = this._buff.substring(i - 64);\n\n        return this;\n    };\n\n    /**\n     * Finishes the incremental computation, reseting the internal state and\n     * returning the result.\n     *\n     * @param {Boolean} raw True to get the raw string, false to get the hex string\n     *\n     * @return {String} The result\n     */\n    SparkMD5.prototype.end = function (raw) {\n        var buff = this._buff,\n            length = buff.length,\n            i,\n            tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n            ret;\n\n        for (i = 0; i < length; i += 1) {\n            tail[i >> 2] |= buff.charCodeAt(i) << ((i % 4) << 3);\n        }\n\n        this._finish(tail, length);\n        ret = hex(this._hash);\n\n        if (raw) {\n            ret = hexToBinaryString(ret);\n        }\n\n        this.reset();\n\n        return ret;\n    };\n\n    /**\n     * Resets the internal state of the computation.\n     *\n     * @return {SparkMD5} The instance itself\n     */\n    SparkMD5.prototype.reset = function () {\n        this._buff = '';\n        this._length = 0;\n        this._hash = [1732584193, -271733879, -1732584194, 271733878];\n\n        return this;\n    };\n\n    /**\n     * Gets the internal state of the computation.\n     *\n     * @return {Object} The state\n     */\n    SparkMD5.prototype.getState = function () {\n        return {\n            buff: this._buff,\n            length: this._length,\n            hash: this._hash.slice()\n        };\n    };\n\n    /**\n     * Gets the internal state of the computation.\n     *\n     * @param {Object} state The state\n     *\n     * @return {SparkMD5} The instance itself\n     */\n    SparkMD5.prototype.setState = function (state) {\n        this._buff = state.buff;\n        this._length = state.length;\n        this._hash = state.hash;\n\n        return this;\n    };\n\n    /**\n     * Releases memory used by the incremental buffer and other additional\n     * resources. If you plan to use the instance again, use reset instead.\n     */\n    SparkMD5.prototype.destroy = function () {\n        delete this._hash;\n        delete this._buff;\n        delete this._length;\n    };\n\n    /**\n     * Finish the final calculation based on the tail.\n     *\n     * @param {Array}  tail   The tail (will be modified)\n     * @param {Number} length The length of the remaining buffer\n     */\n    SparkMD5.prototype._finish = function (tail, length) {\n        var i = length,\n            tmp,\n            lo,\n            hi;\n\n        tail[i >> 2] |= 0x80 << ((i % 4) << 3);\n        if (i > 55) {\n            md5cycle(this._hash, tail);\n            for (i = 0; i < 16; i += 1) {\n                tail[i] = 0;\n            }\n        }\n\n        // Do the final computation based on the tail and length\n        // Beware that the final length may not fit in 32 bits so we take care of that\n        tmp = this._length * 8;\n        tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n        lo = parseInt(tmp[2], 16);\n        hi = parseInt(tmp[1], 16) || 0;\n\n        tail[14] = lo;\n        tail[15] = hi;\n        md5cycle(this._hash, tail);\n    };\n\n    /**\n     * Performs the md5 hash on a string.\n     * A conversion will be applied if utf8 string is detected.\n     *\n     * @param {String}  str The string\n     * @param {Boolean} [raw] True to get the raw string, false to get the hex string\n     *\n     * @return {String} The result\n     */\n    SparkMD5.hash = function (str, raw) {\n        // Converts the string to utf8 bytes if necessary\n        // Then compute it using the binary function\n        return SparkMD5.hashBinary(toUtf8(str), raw);\n    };\n\n    /**\n     * Performs the md5 hash on a binary string.\n     *\n     * @param {String}  content The binary string\n     * @param {Boolean} [raw]     True to get the raw string, false to get the hex string\n     *\n     * @return {String} The result\n     */\n    SparkMD5.hashBinary = function (content, raw) {\n        var hash = md51(content),\n            ret = hex(hash);\n\n        return raw ? hexToBinaryString(ret) : ret;\n    };\n\n    // ---------------------------------------------------\n\n    /**\n     * SparkMD5 OOP implementation for array buffers.\n     *\n     * Use this class to perform an incremental md5 ONLY for array buffers.\n     */\n    SparkMD5.ArrayBuffer = function () {\n        // call reset to init the instance\n        this.reset();\n    };\n\n    /**\n     * Appends an array buffer.\n     *\n     * @param {ArrayBuffer} arr The array to be appended\n     *\n     * @return {SparkMD5.ArrayBuffer} The instance itself\n     */\n    SparkMD5.ArrayBuffer.prototype.append = function (arr) {\n        var buff = concatenateArrayBuffers(this._buff.buffer, arr, true),\n            length = buff.length,\n            i;\n\n        this._length += arr.byteLength;\n\n        for (i = 64; i <= length; i += 64) {\n            md5cycle(this._hash, md5blk_array(buff.subarray(i - 64, i)));\n        }\n\n        this._buff = (i - 64) < length ? new Uint8Array(buff.buffer.slice(i - 64)) : new Uint8Array(0);\n\n        return this;\n    };\n\n    /**\n     * Finishes the incremental computation, reseting the internal state and\n     * returning the result.\n     *\n     * @param {Boolean} raw True to get the raw string, false to get the hex string\n     *\n     * @return {String} The result\n     */\n    SparkMD5.ArrayBuffer.prototype.end = function (raw) {\n        var buff = this._buff,\n            length = buff.length,\n            tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n            i,\n            ret;\n\n        for (i = 0; i < length; i += 1) {\n            tail[i >> 2] |= buff[i] << ((i % 4) << 3);\n        }\n\n        this._finish(tail, length);\n        ret = hex(this._hash);\n\n        if (raw) {\n            ret = hexToBinaryString(ret);\n        }\n\n        this.reset();\n\n        return ret;\n    };\n\n    /**\n     * Resets the internal state of the computation.\n     *\n     * @return {SparkMD5.ArrayBuffer} The instance itself\n     */\n    SparkMD5.ArrayBuffer.prototype.reset = function () {\n        this._buff = new Uint8Array(0);\n        this._length = 0;\n        this._hash = [1732584193, -271733879, -1732584194, 271733878];\n\n        return this;\n    };\n\n    /**\n     * Gets the internal state of the computation.\n     *\n     * @return {Object} The state\n     */\n    SparkMD5.ArrayBuffer.prototype.getState = function () {\n        var state = SparkMD5.prototype.getState.call(this);\n\n        // Convert buffer to a string\n        state.buff = arrayBuffer2Utf8Str(state.buff);\n\n        return state;\n    };\n\n    /**\n     * Gets the internal state of the computation.\n     *\n     * @param {Object} state The state\n     *\n     * @return {SparkMD5.ArrayBuffer} The instance itself\n     */\n    SparkMD5.ArrayBuffer.prototype.setState = function (state) {\n        // Convert string to buffer\n        state.buff = utf8Str2ArrayBuffer(state.buff, true);\n\n        return SparkMD5.prototype.setState.call(this, state);\n    };\n\n    SparkMD5.ArrayBuffer.prototype.destroy = SparkMD5.prototype.destroy;\n\n    SparkMD5.ArrayBuffer.prototype._finish = SparkMD5.prototype._finish;\n\n    /**\n     * Performs the md5 hash on an array buffer.\n     *\n     * @param {ArrayBuffer} arr The array buffer\n     * @param {Boolean}     [raw] True to get the raw string, false to get the hex one\n     *\n     * @return {String} The result\n     */\n    SparkMD5.ArrayBuffer.hash = function (arr, raw) {\n        var hash = md51_array(new Uint8Array(arr)),\n            ret = hex(hash);\n\n        return raw ? hexToBinaryString(ret) : ret;\n    };\n\n    return SparkMD5;\n}));\n","import {\n  hasWindow,\n  getFileTypeFromArrayBuffer,\n  toBlob,\n  MIMEEnum,\n  EncodeEnum,\n  Time,\n  increaseTime,\n  formatTimeOverflow,\n  ReadInBrowserEnum,\n  FetchWithAxios\n} from \"@zyzgroup/core-common\";\nimport SparkMD5 from \"spark-md5\";\n\nexport const isBrowserSupportFileAPI =\n  hasWindow &&\n  window.File &&\n  window.FileReader &&\n  window.FileList &&\n  window.Blob;\n\nexport function querySelectorAllToStringArray(\n  query = 'script[type=\"text/js-worker\"]'\n): string[] {\n  return Array.prototype.map.call(\n    document.querySelectorAll(query),\n    (oScript) => oScript.textContent\n  ) as string[];\n}\n\nexport const DOMToString = (el: HTMLElement) => {\n  return new XMLSerializer().serializeToString(el);\n};\n\nexport const stringToDOM = (\n  str: string,\n  type: DOMParserSupportedType = \"text/html\"\n) => {\n  return new DOMParser().parseFromString(str, type);\n};\n\nexport const DOMToBlob = (\n  el: HTMLElement,\n  options: {\n    mime?: MIMEEnum;\n    encode?: EncodeEnum; // utf-8 base64\n    type?: string; // text/javascript\n  } = {\n    mime: MIMEEnum.SVG,\n    encode: EncodeEnum.utf8 // utf-8 base64\n  }\n) => {\n  return toBlob(DOMToString(el), options);\n};\n\nexport async function selectFileInBrowser(\n  accepts: string[] = [\"*\"],\n  multiple?: boolean\n): Promise<File[]> {\n  // if (!document || !(document instanceof Document)) {\n  //   throw new Error(\"This is not a browser environment\");\n  // }\n  // 新API\n  // window.showOpenFilePicker();\n  // window.showDirectoryPicker();\n  let files: File[] = [];\n  const input = document.createElement(\"input\") as HTMLInputElement;\n  input.setAttribute(\"type\", \"file\");\n  input.setAttribute(\"visibility\", \"hidden\");\n  input.setAttribute(\"accept\", accepts.join(\",\"));\n  if (multiple) {\n    input.setAttribute(\"multiple\", \"true\");\n  }\n  input.addEventListener(\n    \"click\",\n    (e) => {\n      // e.preventDefault();\n      // e.stopPropagation();\n      // input.blur();\n      input.value = \"\"; // 连续上传2次相同的文件时，清空 value 以触发 change 事件\n    },\n    false\n  );\n  return new Promise<File[]>((resolve, reject) => {\n    input.addEventListener(\n      \"change\",\n      (e: Event) => {\n        files = Array.from((e.target as HTMLInputElement).files || []);\n        if (files.length === 0) {\n          reject(new Error(\"Cancel\"));\n        }\n        // else if (\n        //   !accepts.includes(\"*\") &&\n        //   files.some((file) => !accepts.includes(`.${getFileExtension(file)}`))\n        // ) {\n        //   reject(new Error(`Please select files in ${accepts} format`));\n        // }\n        else {\n          resolve(files);\n        }\n      },\n      false\n    );\n    window.addEventListener(\n      \"focus\",\n      () => {\n        setTimeout(() => {\n          if (files.length === 0) {\n            reject(new Error(\"Cancel\"));\n          }\n        }, 1000);\n      },\n      { once: true }\n    );\n    // input.dispatchEvent(new MouseEvent(\"click\", { bubbles: true }));\n    input.click();\n  })\n    .then((files) => {\n      input.remove();\n      return files;\n    })\n    .catch((e) => {\n      input.remove();\n      throw e;\n    });\n}\n\nexport function readFileInBrowser<T extends string | ArrayBuffer>(\n  // files: FileList,\n  file: File | Blob,\n  type: ReadInBrowserEnum = ReadInBrowserEnum.text,\n  progressCb?: (loaded: number, total: number) => void\n): Promise<T> {\n  return new Promise<T>((resolve, reject) => {\n    const reader = new FileReader();\n    reader.addEventListener(\"progress\", (e: ProgressEvent<FileReader>) => {\n      // e: FileReaderEventMap[\"progress\"]\n      progressCb?.(e.loaded, e.total);\n    });\n    reader.addEventListener(\"load\", (e: FileReaderEventMap[\"load\"]) => {\n      resolve(e.target?.result as T);\n      // resolve(reader.result as T);\n    });\n    reader.addEventListener(\"error\", (e: FileReaderEventMap[\"error\"]) => {\n      reject(e);\n    });\n    switch (type) {\n      case ReadInBrowserEnum.dataURL:\n        reader.readAsDataURL(file);\n        break;\n      case ReadInBrowserEnum.binaryString:\n        reader.readAsBinaryString(file);\n        break;\n      case ReadInBrowserEnum.arraybuffer:\n        reader.readAsArrayBuffer(file);\n        break;\n      case ReadInBrowserEnum.text:\n      default:\n        reader.readAsText(file);\n    }\n  });\n}\n\nexport async function getFileTypeFromFile(file: File) {\n  const arrayBuffer = await readFileInBrowser<ArrayBuffer>(\n    file,\n    ReadInBrowserEnum.arraybuffer\n  );\n  return getFileTypeFromArrayBuffer(arrayBuffer);\n}\n\n/// 获取文件后缀\nexport const getFileExtension = (file: File | string): string => {\n  let fileName: string;\n  if (file instanceof File) {\n    fileName = file.name;\n  } else {\n    fileName = file;\n  }\n  return fileName.match(/\\.([0-9a-z]+)(?:[\\\\?#]|$)/i)?.[1] || \"\";\n};\n\nexport function getMIME(name: string) {\n  switch (name.toLowerCase()) {\n    case \"jpg\":\n    case \"jpeg\":\n      return MIMEEnum.JPEG;\n    case \"gif\":\n      return MIMEEnum.GIF;\n    case \"svg\":\n      return MIMEEnum.SVG;\n    case \"pdf\":\n      return MIMEEnum.PDF;\n    case \"png\":\n    default:\n      return MIMEEnum.PNG;\n  }\n}\n\nfunction readFileMD5Hash(\n  resolve: (v: string) => void,\n  reject: (e: any) => void,\n  spark: SparkMD5.ArrayBuffer,\n  file: File,\n  chunkSize: number,\n  start: number,\n  end: number\n) {\n  const fileReader = new FileReader();\n  fileReader.addEventListener(\"load\", (e) => {\n    if (!e.target || !e.target.result) {\n      return reject(e);\n    }\n    spark.append(e.target.result as ArrayBuffer);\n    if (end < file.size) {\n      readFileMD5Hash(\n        resolve,\n        reject,\n        spark,\n        file,\n        chunkSize,\n        end,\n        Math.min(end + chunkSize, file.size)\n      );\n    } else {\n      return resolve(spark.end());\n    }\n  });\n  fileReader.addEventListener(\"error\", (e) => {\n    return reject(e);\n  });\n  fileReader.readAsArrayBuffer(file.slice(start, end));\n}\n\n/// 获取文件 MD5 hash\nexport async function getFileMD5Hash(file: File, chunkSize = 1 * 1024 * 1024) {\n  return await new Promise<string>((resolve, reject) =>\n    readFileMD5Hash(\n      resolve,\n      reject,\n      new SparkMD5.ArrayBuffer(),\n      file,\n      chunkSize,\n      0,\n      Math.min(chunkSize, file.size)\n    )\n  );\n}\n\nexport class FileUpload {\n  axios: FetchWithAxios;\n  // 获取服务器端 文件 MD5 hash 地址\n  checkURL: string;\n  // 文件上传地址\n  uploadURL: string;\n  // 要上传的文件\n  file: File;\n  // 本地文件 MD5 hash\n  fileHash?: string;\n  // 文件切割块大小\n  chunkSize: number;\n  // 文件总切割数量\n  chunks: number;\n  // 当前块数\n  currentChunk = 0;\n  // 是否正在上传\n  isUploading = false;\n  begin = 0;\n  end = 0;\n  timer?: ReturnType<typeof setInterval>;\n  time: Time = [0, 0, 0, 0, 0, 0];\n  onExist?: () => void;\n  onStart?: () => void;\n  onProgress?: (currentChunk: number, chunks: number) => void;\n  onComplete?: () => void;\n  onTime?: (time: string) => void;\n\n  constructor(options: {\n    baseURL: string;\n    checkURL: string;\n    uploadURL: string;\n    file: File;\n    chunkSize?: number;\n    onExist?: () => void;\n    onStart?: () => void;\n    onProgress?: (currentChunk: number, chunks: number) => void;\n    onComplete?: () => void;\n    onTime?: (time: string) => void;\n  }) {\n    this.axios = new FetchWithAxios({\n      baseURL: options.baseURL,\n      interceptor: {\n        response: (response) => {\n          if (response.config.url == this.uploadURL) {\n            if (response.status == 200) {\n              this.onProgress?.(this.currentChunk++, this.chunks);\n              if (this.end == this.file.size) {\n                this.isUploading = false;\n                this.stopTimeCount();\n                this.onComplete?.();\n              } else {\n                if (this.isUploading) {\n                  this.uploadChunk();\n                }\n              }\n            } else {\n              // UNDO: 上传失败，尝试重传\n            }\n          }\n        }\n      }\n    });\n    this.checkURL = options.checkURL;\n    this.uploadURL = options.uploadURL;\n    this.file = options.file;\n    this.chunkSize = options.chunkSize || 1 * 1024 * 1024;\n    this.chunks = Math.ceil(this.file.size / this.chunkSize);\n    this.onExist = options.onExist;\n    this.onStart = options.onStart;\n    this.onProgress = options.onProgress;\n    this.onComplete = options.onComplete;\n    this.onTime = options.onTime;\n  }\n\n  public async start() {\n    if (!this.fileHash) {\n      this.fileHash = await getFileMD5Hash(this.file, this.chunkSize);\n    }\n    // 后台判断文件是否已存在\n    const result = await this.axios.post(this.checkURL, {\n      fileName: this.file.name,\n      fileHash: this.fileHash\n    });\n    if (result.data.isExist) {\n      this.isUploading = false;\n      this.onExist?.();\n    } else {\n      if (!this.isUploading) {\n        this.onStart?.();\n        this.startTimeCount();\n        await this.uploadChunk();\n      }\n    }\n  }\n\n  public pause() {\n    if (this.isUploading) {\n      this.isUploading = false;\n      this.stopTimeCount();\n    }\n  }\n\n  private async uploadChunk() {\n    this.isUploading = true;\n    this.begin = this.currentChunk * this.chunkSize;\n    this.end = Math.min(this.begin + this.chunkSize, this.file.size);\n    const blob = this.file.slice(this.begin, this.end);\n    const fd = new FormData();\n    fd.append(\"fileData\", blob);\n    fd.append(\"fileName\", this.file.name);\n    fd.append(\"fileHash\", this.fileHash!);\n    fd.append(\"chunkIndex\", String(this.currentChunk));\n    fd.append(\"chunks\", String(this.chunks));\n    await this.axios.postBlob(this.uploadURL, fd);\n  }\n\n  private startTimeCount() {\n    this.stopTimeCount();\n    this.timer = setInterval(() => {\n      increaseTime(this.time, 1);\n      this.onTime?.(formatTimeOverflow(this.time));\n    }, 1000);\n  }\n\n  private stopTimeCount() {\n    if (this.timer) {\n      clearInterval(this.timer);\n      this.timer = undefined;\n    }\n  }\n}\n","/*! Hammer.JS - v2.0.7 - 2016-04-22\n * http://hammerjs.github.io/\n *\n * Copyright (c) 2016 Jorik Tangelder;\n * Licensed under the MIT license */\n(function(window, document, exportName, undefined) {\n  'use strict';\n\nvar VENDOR_PREFIXES = ['', 'webkit', 'Moz', 'MS', 'ms', 'o'];\nvar TEST_ELEMENT = document.createElement('div');\n\nvar TYPE_FUNCTION = 'function';\n\nvar round = Math.round;\nvar abs = Math.abs;\nvar now = Date.now;\n\n/**\n * set a timeout with a given scope\n * @param {Function} fn\n * @param {Number} timeout\n * @param {Object} context\n * @returns {number}\n */\nfunction setTimeoutContext(fn, timeout, context) {\n    return setTimeout(bindFn(fn, context), timeout);\n}\n\n/**\n * if the argument is an array, we want to execute the fn on each entry\n * if it aint an array we don't want to do a thing.\n * this is used by all the methods that accept a single and array argument.\n * @param {*|Array} arg\n * @param {String} fn\n * @param {Object} [context]\n * @returns {Boolean}\n */\nfunction invokeArrayArg(arg, fn, context) {\n    if (Array.isArray(arg)) {\n        each(arg, context[fn], context);\n        return true;\n    }\n    return false;\n}\n\n/**\n * walk objects and arrays\n * @param {Object} obj\n * @param {Function} iterator\n * @param {Object} context\n */\nfunction each(obj, iterator, context) {\n    var i;\n\n    if (!obj) {\n        return;\n    }\n\n    if (obj.forEach) {\n        obj.forEach(iterator, context);\n    } else if (obj.length !== undefined) {\n        i = 0;\n        while (i < obj.length) {\n            iterator.call(context, obj[i], i, obj);\n            i++;\n        }\n    } else {\n        for (i in obj) {\n            obj.hasOwnProperty(i) && iterator.call(context, obj[i], i, obj);\n        }\n    }\n}\n\n/**\n * wrap a method with a deprecation warning and stack trace\n * @param {Function} method\n * @param {String} name\n * @param {String} message\n * @returns {Function} A new function wrapping the supplied method.\n */\nfunction deprecate(method, name, message) {\n    var deprecationMessage = 'DEPRECATED METHOD: ' + name + '\\n' + message + ' AT \\n';\n    return function() {\n        var e = new Error('get-stack-trace');\n        var stack = e && e.stack ? e.stack.replace(/^[^\\(]+?[\\n$]/gm, '')\n            .replace(/^\\s+at\\s+/gm, '')\n            .replace(/^Object.<anonymous>\\s*\\(/gm, '{anonymous}()@') : 'Unknown Stack Trace';\n\n        var log = window.console && (window.console.warn || window.console.log);\n        if (log) {\n            log.call(window.console, deprecationMessage, stack);\n        }\n        return method.apply(this, arguments);\n    };\n}\n\n/**\n * extend object.\n * means that properties in dest will be overwritten by the ones in src.\n * @param {Object} target\n * @param {...Object} objects_to_assign\n * @returns {Object} target\n */\nvar assign;\nif (typeof Object.assign !== 'function') {\n    assign = function assign(target) {\n        if (target === undefined || target === null) {\n            throw new TypeError('Cannot convert undefined or null to object');\n        }\n\n        var output = Object(target);\n        for (var index = 1; index < arguments.length; index++) {\n            var source = arguments[index];\n            if (source !== undefined && source !== null) {\n                for (var nextKey in source) {\n                    if (source.hasOwnProperty(nextKey)) {\n                        output[nextKey] = source[nextKey];\n                    }\n                }\n            }\n        }\n        return output;\n    };\n} else {\n    assign = Object.assign;\n}\n\n/**\n * extend object.\n * means that properties in dest will be overwritten by the ones in src.\n * @param {Object} dest\n * @param {Object} src\n * @param {Boolean} [merge=false]\n * @returns {Object} dest\n */\nvar extend = deprecate(function extend(dest, src, merge) {\n    var keys = Object.keys(src);\n    var i = 0;\n    while (i < keys.length) {\n        if (!merge || (merge && dest[keys[i]] === undefined)) {\n            dest[keys[i]] = src[keys[i]];\n        }\n        i++;\n    }\n    return dest;\n}, 'extend', 'Use `assign`.');\n\n/**\n * merge the values from src in the dest.\n * means that properties that exist in dest will not be overwritten by src\n * @param {Object} dest\n * @param {Object} src\n * @returns {Object} dest\n */\nvar merge = deprecate(function merge(dest, src) {\n    return extend(dest, src, true);\n}, 'merge', 'Use `assign`.');\n\n/**\n * simple class inheritance\n * @param {Function} child\n * @param {Function} base\n * @param {Object} [properties]\n */\nfunction inherit(child, base, properties) {\n    var baseP = base.prototype,\n        childP;\n\n    childP = child.prototype = Object.create(baseP);\n    childP.constructor = child;\n    childP._super = baseP;\n\n    if (properties) {\n        assign(childP, properties);\n    }\n}\n\n/**\n * simple function bind\n * @param {Function} fn\n * @param {Object} context\n * @returns {Function}\n */\nfunction bindFn(fn, context) {\n    return function boundFn() {\n        return fn.apply(context, arguments);\n    };\n}\n\n/**\n * let a boolean value also be a function that must return a boolean\n * this first item in args will be used as the context\n * @param {Boolean|Function} val\n * @param {Array} [args]\n * @returns {Boolean}\n */\nfunction boolOrFn(val, args) {\n    if (typeof val == TYPE_FUNCTION) {\n        return val.apply(args ? args[0] || undefined : undefined, args);\n    }\n    return val;\n}\n\n/**\n * use the val2 when val1 is undefined\n * @param {*} val1\n * @param {*} val2\n * @returns {*}\n */\nfunction ifUndefined(val1, val2) {\n    return (val1 === undefined) ? val2 : val1;\n}\n\n/**\n * addEventListener with multiple events at once\n * @param {EventTarget} target\n * @param {String} types\n * @param {Function} handler\n */\nfunction addEventListeners(target, types, handler) {\n    each(splitStr(types), function(type) {\n        target.addEventListener(type, handler, false);\n    });\n}\n\n/**\n * removeEventListener with multiple events at once\n * @param {EventTarget} target\n * @param {String} types\n * @param {Function} handler\n */\nfunction removeEventListeners(target, types, handler) {\n    each(splitStr(types), function(type) {\n        target.removeEventListener(type, handler, false);\n    });\n}\n\n/**\n * find if a node is in the given parent\n * @method hasParent\n * @param {HTMLElement} node\n * @param {HTMLElement} parent\n * @return {Boolean} found\n */\nfunction hasParent(node, parent) {\n    while (node) {\n        if (node == parent) {\n            return true;\n        }\n        node = node.parentNode;\n    }\n    return false;\n}\n\n/**\n * small indexOf wrapper\n * @param {String} str\n * @param {String} find\n * @returns {Boolean} found\n */\nfunction inStr(str, find) {\n    return str.indexOf(find) > -1;\n}\n\n/**\n * split string on whitespace\n * @param {String} str\n * @returns {Array} words\n */\nfunction splitStr(str) {\n    return str.trim().split(/\\s+/g);\n}\n\n/**\n * find if a array contains the object using indexOf or a simple polyFill\n * @param {Array} src\n * @param {String} find\n * @param {String} [findByKey]\n * @return {Boolean|Number} false when not found, or the index\n */\nfunction inArray(src, find, findByKey) {\n    if (src.indexOf && !findByKey) {\n        return src.indexOf(find);\n    } else {\n        var i = 0;\n        while (i < src.length) {\n            if ((findByKey && src[i][findByKey] == find) || (!findByKey && src[i] === find)) {\n                return i;\n            }\n            i++;\n        }\n        return -1;\n    }\n}\n\n/**\n * convert array-like objects to real arrays\n * @param {Object} obj\n * @returns {Array}\n */\nfunction toArray(obj) {\n    return Array.prototype.slice.call(obj, 0);\n}\n\n/**\n * unique array with objects based on a key (like 'id') or just by the array's value\n * @param {Array} src [{id:1},{id:2},{id:1}]\n * @param {String} [key]\n * @param {Boolean} [sort=False]\n * @returns {Array} [{id:1},{id:2}]\n */\nfunction uniqueArray(src, key, sort) {\n    var results = [];\n    var values = [];\n    var i = 0;\n\n    while (i < src.length) {\n        var val = key ? src[i][key] : src[i];\n        if (inArray(values, val) < 0) {\n            results.push(src[i]);\n        }\n        values[i] = val;\n        i++;\n    }\n\n    if (sort) {\n        if (!key) {\n            results = results.sort();\n        } else {\n            results = results.sort(function sortUniqueArray(a, b) {\n                return a[key] > b[key];\n            });\n        }\n    }\n\n    return results;\n}\n\n/**\n * get the prefixed property\n * @param {Object} obj\n * @param {String} property\n * @returns {String|Undefined} prefixed\n */\nfunction prefixed(obj, property) {\n    var prefix, prop;\n    var camelProp = property[0].toUpperCase() + property.slice(1);\n\n    var i = 0;\n    while (i < VENDOR_PREFIXES.length) {\n        prefix = VENDOR_PREFIXES[i];\n        prop = (prefix) ? prefix + camelProp : property;\n\n        if (prop in obj) {\n            return prop;\n        }\n        i++;\n    }\n    return undefined;\n}\n\n/**\n * get a unique id\n * @returns {number} uniqueId\n */\nvar _uniqueId = 1;\nfunction uniqueId() {\n    return _uniqueId++;\n}\n\n/**\n * get the window object of an element\n * @param {HTMLElement} element\n * @returns {DocumentView|Window}\n */\nfunction getWindowForElement(element) {\n    var doc = element.ownerDocument || element;\n    return (doc.defaultView || doc.parentWindow || window);\n}\n\nvar MOBILE_REGEX = /mobile|tablet|ip(ad|hone|od)|android/i;\n\nvar SUPPORT_TOUCH = ('ontouchstart' in window);\nvar SUPPORT_POINTER_EVENTS = prefixed(window, 'PointerEvent') !== undefined;\nvar SUPPORT_ONLY_TOUCH = SUPPORT_TOUCH && MOBILE_REGEX.test(navigator.userAgent);\n\nvar INPUT_TYPE_TOUCH = 'touch';\nvar INPUT_TYPE_PEN = 'pen';\nvar INPUT_TYPE_MOUSE = 'mouse';\nvar INPUT_TYPE_KINECT = 'kinect';\n\nvar COMPUTE_INTERVAL = 25;\n\nvar INPUT_START = 1;\nvar INPUT_MOVE = 2;\nvar INPUT_END = 4;\nvar INPUT_CANCEL = 8;\n\nvar DIRECTION_NONE = 1;\nvar DIRECTION_LEFT = 2;\nvar DIRECTION_RIGHT = 4;\nvar DIRECTION_UP = 8;\nvar DIRECTION_DOWN = 16;\n\nvar DIRECTION_HORIZONTAL = DIRECTION_LEFT | DIRECTION_RIGHT;\nvar DIRECTION_VERTICAL = DIRECTION_UP | DIRECTION_DOWN;\nvar DIRECTION_ALL = DIRECTION_HORIZONTAL | DIRECTION_VERTICAL;\n\nvar PROPS_XY = ['x', 'y'];\nvar PROPS_CLIENT_XY = ['clientX', 'clientY'];\n\n/**\n * create new input type manager\n * @param {Manager} manager\n * @param {Function} callback\n * @returns {Input}\n * @constructor\n */\nfunction Input(manager, callback) {\n    var self = this;\n    this.manager = manager;\n    this.callback = callback;\n    this.element = manager.element;\n    this.target = manager.options.inputTarget;\n\n    // smaller wrapper around the handler, for the scope and the enabled state of the manager,\n    // so when disabled the input events are completely bypassed.\n    this.domHandler = function(ev) {\n        if (boolOrFn(manager.options.enable, [manager])) {\n            self.handler(ev);\n        }\n    };\n\n    this.init();\n\n}\n\nInput.prototype = {\n    /**\n     * should handle the inputEvent data and trigger the callback\n     * @virtual\n     */\n    handler: function() { },\n\n    /**\n     * bind the events\n     */\n    init: function() {\n        this.evEl && addEventListeners(this.element, this.evEl, this.domHandler);\n        this.evTarget && addEventListeners(this.target, this.evTarget, this.domHandler);\n        this.evWin && addEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);\n    },\n\n    /**\n     * unbind the events\n     */\n    destroy: function() {\n        this.evEl && removeEventListeners(this.element, this.evEl, this.domHandler);\n        this.evTarget && removeEventListeners(this.target, this.evTarget, this.domHandler);\n        this.evWin && removeEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);\n    }\n};\n\n/**\n * create new input type manager\n * called by the Manager constructor\n * @param {Hammer} manager\n * @returns {Input}\n */\nfunction createInputInstance(manager) {\n    var Type;\n    var inputClass = manager.options.inputClass;\n\n    if (inputClass) {\n        Type = inputClass;\n    } else if (SUPPORT_POINTER_EVENTS) {\n        Type = PointerEventInput;\n    } else if (SUPPORT_ONLY_TOUCH) {\n        Type = TouchInput;\n    } else if (!SUPPORT_TOUCH) {\n        Type = MouseInput;\n    } else {\n        Type = TouchMouseInput;\n    }\n    return new (Type)(manager, inputHandler);\n}\n\n/**\n * handle input events\n * @param {Manager} manager\n * @param {String} eventType\n * @param {Object} input\n */\nfunction inputHandler(manager, eventType, input) {\n    var pointersLen = input.pointers.length;\n    var changedPointersLen = input.changedPointers.length;\n    var isFirst = (eventType & INPUT_START && (pointersLen - changedPointersLen === 0));\n    var isFinal = (eventType & (INPUT_END | INPUT_CANCEL) && (pointersLen - changedPointersLen === 0));\n\n    input.isFirst = !!isFirst;\n    input.isFinal = !!isFinal;\n\n    if (isFirst) {\n        manager.session = {};\n    }\n\n    // source event is the normalized value of the domEvents\n    // like 'touchstart, mouseup, pointerdown'\n    input.eventType = eventType;\n\n    // compute scale, rotation etc\n    computeInputData(manager, input);\n\n    // emit secret event\n    manager.emit('hammer.input', input);\n\n    manager.recognize(input);\n    manager.session.prevInput = input;\n}\n\n/**\n * extend the data with some usable properties like scale, rotate, velocity etc\n * @param {Object} manager\n * @param {Object} input\n */\nfunction computeInputData(manager, input) {\n    var session = manager.session;\n    var pointers = input.pointers;\n    var pointersLength = pointers.length;\n\n    // store the first input to calculate the distance and direction\n    if (!session.firstInput) {\n        session.firstInput = simpleCloneInputData(input);\n    }\n\n    // to compute scale and rotation we need to store the multiple touches\n    if (pointersLength > 1 && !session.firstMultiple) {\n        session.firstMultiple = simpleCloneInputData(input);\n    } else if (pointersLength === 1) {\n        session.firstMultiple = false;\n    }\n\n    var firstInput = session.firstInput;\n    var firstMultiple = session.firstMultiple;\n    var offsetCenter = firstMultiple ? firstMultiple.center : firstInput.center;\n\n    var center = input.center = getCenter(pointers);\n    input.timeStamp = now();\n    input.deltaTime = input.timeStamp - firstInput.timeStamp;\n\n    input.angle = getAngle(offsetCenter, center);\n    input.distance = getDistance(offsetCenter, center);\n\n    computeDeltaXY(session, input);\n    input.offsetDirection = getDirection(input.deltaX, input.deltaY);\n\n    var overallVelocity = getVelocity(input.deltaTime, input.deltaX, input.deltaY);\n    input.overallVelocityX = overallVelocity.x;\n    input.overallVelocityY = overallVelocity.y;\n    input.overallVelocity = (abs(overallVelocity.x) > abs(overallVelocity.y)) ? overallVelocity.x : overallVelocity.y;\n\n    input.scale = firstMultiple ? getScale(firstMultiple.pointers, pointers) : 1;\n    input.rotation = firstMultiple ? getRotation(firstMultiple.pointers, pointers) : 0;\n\n    input.maxPointers = !session.prevInput ? input.pointers.length : ((input.pointers.length >\n        session.prevInput.maxPointers) ? input.pointers.length : session.prevInput.maxPointers);\n\n    computeIntervalInputData(session, input);\n\n    // find the correct target\n    var target = manager.element;\n    if (hasParent(input.srcEvent.target, target)) {\n        target = input.srcEvent.target;\n    }\n    input.target = target;\n}\n\nfunction computeDeltaXY(session, input) {\n    var center = input.center;\n    var offset = session.offsetDelta || {};\n    var prevDelta = session.prevDelta || {};\n    var prevInput = session.prevInput || {};\n\n    if (input.eventType === INPUT_START || prevInput.eventType === INPUT_END) {\n        prevDelta = session.prevDelta = {\n            x: prevInput.deltaX || 0,\n            y: prevInput.deltaY || 0\n        };\n\n        offset = session.offsetDelta = {\n            x: center.x,\n            y: center.y\n        };\n    }\n\n    input.deltaX = prevDelta.x + (center.x - offset.x);\n    input.deltaY = prevDelta.y + (center.y - offset.y);\n}\n\n/**\n * velocity is calculated every x ms\n * @param {Object} session\n * @param {Object} input\n */\nfunction computeIntervalInputData(session, input) {\n    var last = session.lastInterval || input,\n        deltaTime = input.timeStamp - last.timeStamp,\n        velocity, velocityX, velocityY, direction;\n\n    if (input.eventType != INPUT_CANCEL && (deltaTime > COMPUTE_INTERVAL || last.velocity === undefined)) {\n        var deltaX = input.deltaX - last.deltaX;\n        var deltaY = input.deltaY - last.deltaY;\n\n        var v = getVelocity(deltaTime, deltaX, deltaY);\n        velocityX = v.x;\n        velocityY = v.y;\n        velocity = (abs(v.x) > abs(v.y)) ? v.x : v.y;\n        direction = getDirection(deltaX, deltaY);\n\n        session.lastInterval = input;\n    } else {\n        // use latest velocity info if it doesn't overtake a minimum period\n        velocity = last.velocity;\n        velocityX = last.velocityX;\n        velocityY = last.velocityY;\n        direction = last.direction;\n    }\n\n    input.velocity = velocity;\n    input.velocityX = velocityX;\n    input.velocityY = velocityY;\n    input.direction = direction;\n}\n\n/**\n * create a simple clone from the input used for storage of firstInput and firstMultiple\n * @param {Object} input\n * @returns {Object} clonedInputData\n */\nfunction simpleCloneInputData(input) {\n    // make a simple copy of the pointers because we will get a reference if we don't\n    // we only need clientXY for the calculations\n    var pointers = [];\n    var i = 0;\n    while (i < input.pointers.length) {\n        pointers[i] = {\n            clientX: round(input.pointers[i].clientX),\n            clientY: round(input.pointers[i].clientY)\n        };\n        i++;\n    }\n\n    return {\n        timeStamp: now(),\n        pointers: pointers,\n        center: getCenter(pointers),\n        deltaX: input.deltaX,\n        deltaY: input.deltaY\n    };\n}\n\n/**\n * get the center of all the pointers\n * @param {Array} pointers\n * @return {Object} center contains `x` and `y` properties\n */\nfunction getCenter(pointers) {\n    var pointersLength = pointers.length;\n\n    // no need to loop when only one touch\n    if (pointersLength === 1) {\n        return {\n            x: round(pointers[0].clientX),\n            y: round(pointers[0].clientY)\n        };\n    }\n\n    var x = 0, y = 0, i = 0;\n    while (i < pointersLength) {\n        x += pointers[i].clientX;\n        y += pointers[i].clientY;\n        i++;\n    }\n\n    return {\n        x: round(x / pointersLength),\n        y: round(y / pointersLength)\n    };\n}\n\n/**\n * calculate the velocity between two points. unit is in px per ms.\n * @param {Number} deltaTime\n * @param {Number} x\n * @param {Number} y\n * @return {Object} velocity `x` and `y`\n */\nfunction getVelocity(deltaTime, x, y) {\n    return {\n        x: x / deltaTime || 0,\n        y: y / deltaTime || 0\n    };\n}\n\n/**\n * get the direction between two points\n * @param {Number} x\n * @param {Number} y\n * @return {Number} direction\n */\nfunction getDirection(x, y) {\n    if (x === y) {\n        return DIRECTION_NONE;\n    }\n\n    if (abs(x) >= abs(y)) {\n        return x < 0 ? DIRECTION_LEFT : DIRECTION_RIGHT;\n    }\n    return y < 0 ? DIRECTION_UP : DIRECTION_DOWN;\n}\n\n/**\n * calculate the absolute distance between two points\n * @param {Object} p1 {x, y}\n * @param {Object} p2 {x, y}\n * @param {Array} [props] containing x and y keys\n * @return {Number} distance\n */\nfunction getDistance(p1, p2, props) {\n    if (!props) {\n        props = PROPS_XY;\n    }\n    var x = p2[props[0]] - p1[props[0]],\n        y = p2[props[1]] - p1[props[1]];\n\n    return Math.sqrt((x * x) + (y * y));\n}\n\n/**\n * calculate the angle between two coordinates\n * @param {Object} p1\n * @param {Object} p2\n * @param {Array} [props] containing x and y keys\n * @return {Number} angle\n */\nfunction getAngle(p1, p2, props) {\n    if (!props) {\n        props = PROPS_XY;\n    }\n    var x = p2[props[0]] - p1[props[0]],\n        y = p2[props[1]] - p1[props[1]];\n    return Math.atan2(y, x) * 180 / Math.PI;\n}\n\n/**\n * calculate the rotation degrees between two pointersets\n * @param {Array} start array of pointers\n * @param {Array} end array of pointers\n * @return {Number} rotation\n */\nfunction getRotation(start, end) {\n    return getAngle(end[1], end[0], PROPS_CLIENT_XY) + getAngle(start[1], start[0], PROPS_CLIENT_XY);\n}\n\n/**\n * calculate the scale factor between two pointersets\n * no scale is 1, and goes down to 0 when pinched together, and bigger when pinched out\n * @param {Array} start array of pointers\n * @param {Array} end array of pointers\n * @return {Number} scale\n */\nfunction getScale(start, end) {\n    return getDistance(end[0], end[1], PROPS_CLIENT_XY) / getDistance(start[0], start[1], PROPS_CLIENT_XY);\n}\n\nvar MOUSE_INPUT_MAP = {\n    mousedown: INPUT_START,\n    mousemove: INPUT_MOVE,\n    mouseup: INPUT_END\n};\n\nvar MOUSE_ELEMENT_EVENTS = 'mousedown';\nvar MOUSE_WINDOW_EVENTS = 'mousemove mouseup';\n\n/**\n * Mouse events input\n * @constructor\n * @extends Input\n */\nfunction MouseInput() {\n    this.evEl = MOUSE_ELEMENT_EVENTS;\n    this.evWin = MOUSE_WINDOW_EVENTS;\n\n    this.pressed = false; // mousedown state\n\n    Input.apply(this, arguments);\n}\n\ninherit(MouseInput, Input, {\n    /**\n     * handle mouse events\n     * @param {Object} ev\n     */\n    handler: function MEhandler(ev) {\n        var eventType = MOUSE_INPUT_MAP[ev.type];\n\n        // on start we want to have the left mouse button down\n        if (eventType & INPUT_START && ev.button === 0) {\n            this.pressed = true;\n        }\n\n        if (eventType & INPUT_MOVE && ev.which !== 1) {\n            eventType = INPUT_END;\n        }\n\n        // mouse must be down\n        if (!this.pressed) {\n            return;\n        }\n\n        if (eventType & INPUT_END) {\n            this.pressed = false;\n        }\n\n        this.callback(this.manager, eventType, {\n            pointers: [ev],\n            changedPointers: [ev],\n            pointerType: INPUT_TYPE_MOUSE,\n            srcEvent: ev\n        });\n    }\n});\n\nvar POINTER_INPUT_MAP = {\n    pointerdown: INPUT_START,\n    pointermove: INPUT_MOVE,\n    pointerup: INPUT_END,\n    pointercancel: INPUT_CANCEL,\n    pointerout: INPUT_CANCEL\n};\n\n// in IE10 the pointer types is defined as an enum\nvar IE10_POINTER_TYPE_ENUM = {\n    2: INPUT_TYPE_TOUCH,\n    3: INPUT_TYPE_PEN,\n    4: INPUT_TYPE_MOUSE,\n    5: INPUT_TYPE_KINECT // see https://twitter.com/jacobrossi/status/480596438489890816\n};\n\nvar POINTER_ELEMENT_EVENTS = 'pointerdown';\nvar POINTER_WINDOW_EVENTS = 'pointermove pointerup pointercancel';\n\n// IE10 has prefixed support, and case-sensitive\nif (window.MSPointerEvent && !window.PointerEvent) {\n    POINTER_ELEMENT_EVENTS = 'MSPointerDown';\n    POINTER_WINDOW_EVENTS = 'MSPointerMove MSPointerUp MSPointerCancel';\n}\n\n/**\n * Pointer events input\n * @constructor\n * @extends Input\n */\nfunction PointerEventInput() {\n    this.evEl = POINTER_ELEMENT_EVENTS;\n    this.evWin = POINTER_WINDOW_EVENTS;\n\n    Input.apply(this, arguments);\n\n    this.store = (this.manager.session.pointerEvents = []);\n}\n\ninherit(PointerEventInput, Input, {\n    /**\n     * handle mouse events\n     * @param {Object} ev\n     */\n    handler: function PEhandler(ev) {\n        var store = this.store;\n        var removePointer = false;\n\n        var eventTypeNormalized = ev.type.toLowerCase().replace('ms', '');\n        var eventType = POINTER_INPUT_MAP[eventTypeNormalized];\n        var pointerType = IE10_POINTER_TYPE_ENUM[ev.pointerType] || ev.pointerType;\n\n        var isTouch = (pointerType == INPUT_TYPE_TOUCH);\n\n        // get index of the event in the store\n        var storeIndex = inArray(store, ev.pointerId, 'pointerId');\n\n        // start and mouse must be down\n        if (eventType & INPUT_START && (ev.button === 0 || isTouch)) {\n            if (storeIndex < 0) {\n                store.push(ev);\n                storeIndex = store.length - 1;\n            }\n        } else if (eventType & (INPUT_END | INPUT_CANCEL)) {\n            removePointer = true;\n        }\n\n        // it not found, so the pointer hasn't been down (so it's probably a hover)\n        if (storeIndex < 0) {\n            return;\n        }\n\n        // update the event in the store\n        store[storeIndex] = ev;\n\n        this.callback(this.manager, eventType, {\n            pointers: store,\n            changedPointers: [ev],\n            pointerType: pointerType,\n            srcEvent: ev\n        });\n\n        if (removePointer) {\n            // remove from the store\n            store.splice(storeIndex, 1);\n        }\n    }\n});\n\nvar SINGLE_TOUCH_INPUT_MAP = {\n    touchstart: INPUT_START,\n    touchmove: INPUT_MOVE,\n    touchend: INPUT_END,\n    touchcancel: INPUT_CANCEL\n};\n\nvar SINGLE_TOUCH_TARGET_EVENTS = 'touchstart';\nvar SINGLE_TOUCH_WINDOW_EVENTS = 'touchstart touchmove touchend touchcancel';\n\n/**\n * Touch events input\n * @constructor\n * @extends Input\n */\nfunction SingleTouchInput() {\n    this.evTarget = SINGLE_TOUCH_TARGET_EVENTS;\n    this.evWin = SINGLE_TOUCH_WINDOW_EVENTS;\n    this.started = false;\n\n    Input.apply(this, arguments);\n}\n\ninherit(SingleTouchInput, Input, {\n    handler: function TEhandler(ev) {\n        var type = SINGLE_TOUCH_INPUT_MAP[ev.type];\n\n        // should we handle the touch events?\n        if (type === INPUT_START) {\n            this.started = true;\n        }\n\n        if (!this.started) {\n            return;\n        }\n\n        var touches = normalizeSingleTouches.call(this, ev, type);\n\n        // when done, reset the started state\n        if (type & (INPUT_END | INPUT_CANCEL) && touches[0].length - touches[1].length === 0) {\n            this.started = false;\n        }\n\n        this.callback(this.manager, type, {\n            pointers: touches[0],\n            changedPointers: touches[1],\n            pointerType: INPUT_TYPE_TOUCH,\n            srcEvent: ev\n        });\n    }\n});\n\n/**\n * @this {TouchInput}\n * @param {Object} ev\n * @param {Number} type flag\n * @returns {undefined|Array} [all, changed]\n */\nfunction normalizeSingleTouches(ev, type) {\n    var all = toArray(ev.touches);\n    var changed = toArray(ev.changedTouches);\n\n    if (type & (INPUT_END | INPUT_CANCEL)) {\n        all = uniqueArray(all.concat(changed), 'identifier', true);\n    }\n\n    return [all, changed];\n}\n\nvar TOUCH_INPUT_MAP = {\n    touchstart: INPUT_START,\n    touchmove: INPUT_MOVE,\n    touchend: INPUT_END,\n    touchcancel: INPUT_CANCEL\n};\n\nvar TOUCH_TARGET_EVENTS = 'touchstart touchmove touchend touchcancel';\n\n/**\n * Multi-user touch events input\n * @constructor\n * @extends Input\n */\nfunction TouchInput() {\n    this.evTarget = TOUCH_TARGET_EVENTS;\n    this.targetIds = {};\n\n    Input.apply(this, arguments);\n}\n\ninherit(TouchInput, Input, {\n    handler: function MTEhandler(ev) {\n        var type = TOUCH_INPUT_MAP[ev.type];\n        var touches = getTouches.call(this, ev, type);\n        if (!touches) {\n            return;\n        }\n\n        this.callback(this.manager, type, {\n            pointers: touches[0],\n            changedPointers: touches[1],\n            pointerType: INPUT_TYPE_TOUCH,\n            srcEvent: ev\n        });\n    }\n});\n\n/**\n * @this {TouchInput}\n * @param {Object} ev\n * @param {Number} type flag\n * @returns {undefined|Array} [all, changed]\n */\nfunction getTouches(ev, type) {\n    var allTouches = toArray(ev.touches);\n    var targetIds = this.targetIds;\n\n    // when there is only one touch, the process can be simplified\n    if (type & (INPUT_START | INPUT_MOVE) && allTouches.length === 1) {\n        targetIds[allTouches[0].identifier] = true;\n        return [allTouches, allTouches];\n    }\n\n    var i,\n        targetTouches,\n        changedTouches = toArray(ev.changedTouches),\n        changedTargetTouches = [],\n        target = this.target;\n\n    // get target touches from touches\n    targetTouches = allTouches.filter(function(touch) {\n        return hasParent(touch.target, target);\n    });\n\n    // collect touches\n    if (type === INPUT_START) {\n        i = 0;\n        while (i < targetTouches.length) {\n            targetIds[targetTouches[i].identifier] = true;\n            i++;\n        }\n    }\n\n    // filter changed touches to only contain touches that exist in the collected target ids\n    i = 0;\n    while (i < changedTouches.length) {\n        if (targetIds[changedTouches[i].identifier]) {\n            changedTargetTouches.push(changedTouches[i]);\n        }\n\n        // cleanup removed touches\n        if (type & (INPUT_END | INPUT_CANCEL)) {\n            delete targetIds[changedTouches[i].identifier];\n        }\n        i++;\n    }\n\n    if (!changedTargetTouches.length) {\n        return;\n    }\n\n    return [\n        // merge targetTouches with changedTargetTouches so it contains ALL touches, including 'end' and 'cancel'\n        uniqueArray(targetTouches.concat(changedTargetTouches), 'identifier', true),\n        changedTargetTouches\n    ];\n}\n\n/**\n * Combined touch and mouse input\n *\n * Touch has a higher priority then mouse, and while touching no mouse events are allowed.\n * This because touch devices also emit mouse events while doing a touch.\n *\n * @constructor\n * @extends Input\n */\n\nvar DEDUP_TIMEOUT = 2500;\nvar DEDUP_DISTANCE = 25;\n\nfunction TouchMouseInput() {\n    Input.apply(this, arguments);\n\n    var handler = bindFn(this.handler, this);\n    this.touch = new TouchInput(this.manager, handler);\n    this.mouse = new MouseInput(this.manager, handler);\n\n    this.primaryTouch = null;\n    this.lastTouches = [];\n}\n\ninherit(TouchMouseInput, Input, {\n    /**\n     * handle mouse and touch events\n     * @param {Hammer} manager\n     * @param {String} inputEvent\n     * @param {Object} inputData\n     */\n    handler: function TMEhandler(manager, inputEvent, inputData) {\n        var isTouch = (inputData.pointerType == INPUT_TYPE_TOUCH),\n            isMouse = (inputData.pointerType == INPUT_TYPE_MOUSE);\n\n        if (isMouse && inputData.sourceCapabilities && inputData.sourceCapabilities.firesTouchEvents) {\n            return;\n        }\n\n        // when we're in a touch event, record touches to  de-dupe synthetic mouse event\n        if (isTouch) {\n            recordTouches.call(this, inputEvent, inputData);\n        } else if (isMouse && isSyntheticEvent.call(this, inputData)) {\n            return;\n        }\n\n        this.callback(manager, inputEvent, inputData);\n    },\n\n    /**\n     * remove the event listeners\n     */\n    destroy: function destroy() {\n        this.touch.destroy();\n        this.mouse.destroy();\n    }\n});\n\nfunction recordTouches(eventType, eventData) {\n    if (eventType & INPUT_START) {\n        this.primaryTouch = eventData.changedPointers[0].identifier;\n        setLastTouch.call(this, eventData);\n    } else if (eventType & (INPUT_END | INPUT_CANCEL)) {\n        setLastTouch.call(this, eventData);\n    }\n}\n\nfunction setLastTouch(eventData) {\n    var touch = eventData.changedPointers[0];\n\n    if (touch.identifier === this.primaryTouch) {\n        var lastTouch = {x: touch.clientX, y: touch.clientY};\n        this.lastTouches.push(lastTouch);\n        var lts = this.lastTouches;\n        var removeLastTouch = function() {\n            var i = lts.indexOf(lastTouch);\n            if (i > -1) {\n                lts.splice(i, 1);\n            }\n        };\n        setTimeout(removeLastTouch, DEDUP_TIMEOUT);\n    }\n}\n\nfunction isSyntheticEvent(eventData) {\n    var x = eventData.srcEvent.clientX, y = eventData.srcEvent.clientY;\n    for (var i = 0; i < this.lastTouches.length; i++) {\n        var t = this.lastTouches[i];\n        var dx = Math.abs(x - t.x), dy = Math.abs(y - t.y);\n        if (dx <= DEDUP_DISTANCE && dy <= DEDUP_DISTANCE) {\n            return true;\n        }\n    }\n    return false;\n}\n\nvar PREFIXED_TOUCH_ACTION = prefixed(TEST_ELEMENT.style, 'touchAction');\nvar NATIVE_TOUCH_ACTION = PREFIXED_TOUCH_ACTION !== undefined;\n\n// magical touchAction value\nvar TOUCH_ACTION_COMPUTE = 'compute';\nvar TOUCH_ACTION_AUTO = 'auto';\nvar TOUCH_ACTION_MANIPULATION = 'manipulation'; // not implemented\nvar TOUCH_ACTION_NONE = 'none';\nvar TOUCH_ACTION_PAN_X = 'pan-x';\nvar TOUCH_ACTION_PAN_Y = 'pan-y';\nvar TOUCH_ACTION_MAP = getTouchActionProps();\n\n/**\n * Touch Action\n * sets the touchAction property or uses the js alternative\n * @param {Manager} manager\n * @param {String} value\n * @constructor\n */\nfunction TouchAction(manager, value) {\n    this.manager = manager;\n    this.set(value);\n}\n\nTouchAction.prototype = {\n    /**\n     * set the touchAction value on the element or enable the polyfill\n     * @param {String} value\n     */\n    set: function(value) {\n        // find out the touch-action by the event handlers\n        if (value == TOUCH_ACTION_COMPUTE) {\n            value = this.compute();\n        }\n\n        if (NATIVE_TOUCH_ACTION && this.manager.element.style && TOUCH_ACTION_MAP[value]) {\n            this.manager.element.style[PREFIXED_TOUCH_ACTION] = value;\n        }\n        this.actions = value.toLowerCase().trim();\n    },\n\n    /**\n     * just re-set the touchAction value\n     */\n    update: function() {\n        this.set(this.manager.options.touchAction);\n    },\n\n    /**\n     * compute the value for the touchAction property based on the recognizer's settings\n     * @returns {String} value\n     */\n    compute: function() {\n        var actions = [];\n        each(this.manager.recognizers, function(recognizer) {\n            if (boolOrFn(recognizer.options.enable, [recognizer])) {\n                actions = actions.concat(recognizer.getTouchAction());\n            }\n        });\n        return cleanTouchActions(actions.join(' '));\n    },\n\n    /**\n     * this method is called on each input cycle and provides the preventing of the browser behavior\n     * @param {Object} input\n     */\n    preventDefaults: function(input) {\n        var srcEvent = input.srcEvent;\n        var direction = input.offsetDirection;\n\n        // if the touch action did prevented once this session\n        if (this.manager.session.prevented) {\n            srcEvent.preventDefault();\n            return;\n        }\n\n        var actions = this.actions;\n        var hasNone = inStr(actions, TOUCH_ACTION_NONE) && !TOUCH_ACTION_MAP[TOUCH_ACTION_NONE];\n        var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_Y];\n        var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_X];\n\n        if (hasNone) {\n            //do not prevent defaults if this is a tap gesture\n\n            var isTapPointer = input.pointers.length === 1;\n            var isTapMovement = input.distance < 2;\n            var isTapTouchTime = input.deltaTime < 250;\n\n            if (isTapPointer && isTapMovement && isTapTouchTime) {\n                return;\n            }\n        }\n\n        if (hasPanX && hasPanY) {\n            // `pan-x pan-y` means browser handles all scrolling/panning, do not prevent\n            return;\n        }\n\n        if (hasNone ||\n            (hasPanY && direction & DIRECTION_HORIZONTAL) ||\n            (hasPanX && direction & DIRECTION_VERTICAL)) {\n            return this.preventSrc(srcEvent);\n        }\n    },\n\n    /**\n     * call preventDefault to prevent the browser's default behavior (scrolling in most cases)\n     * @param {Object} srcEvent\n     */\n    preventSrc: function(srcEvent) {\n        this.manager.session.prevented = true;\n        srcEvent.preventDefault();\n    }\n};\n\n/**\n * when the touchActions are collected they are not a valid value, so we need to clean things up. *\n * @param {String} actions\n * @returns {*}\n */\nfunction cleanTouchActions(actions) {\n    // none\n    if (inStr(actions, TOUCH_ACTION_NONE)) {\n        return TOUCH_ACTION_NONE;\n    }\n\n    var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X);\n    var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y);\n\n    // if both pan-x and pan-y are set (different recognizers\n    // for different directions, e.g. horizontal pan but vertical swipe?)\n    // we need none (as otherwise with pan-x pan-y combined none of these\n    // recognizers will work, since the browser would handle all panning\n    if (hasPanX && hasPanY) {\n        return TOUCH_ACTION_NONE;\n    }\n\n    // pan-x OR pan-y\n    if (hasPanX || hasPanY) {\n        return hasPanX ? TOUCH_ACTION_PAN_X : TOUCH_ACTION_PAN_Y;\n    }\n\n    // manipulation\n    if (inStr(actions, TOUCH_ACTION_MANIPULATION)) {\n        return TOUCH_ACTION_MANIPULATION;\n    }\n\n    return TOUCH_ACTION_AUTO;\n}\n\nfunction getTouchActionProps() {\n    if (!NATIVE_TOUCH_ACTION) {\n        return false;\n    }\n    var touchMap = {};\n    var cssSupports = window.CSS && window.CSS.supports;\n    ['auto', 'manipulation', 'pan-y', 'pan-x', 'pan-x pan-y', 'none'].forEach(function(val) {\n\n        // If css.supports is not supported but there is native touch-action assume it supports\n        // all values. This is the case for IE 10 and 11.\n        touchMap[val] = cssSupports ? window.CSS.supports('touch-action', val) : true;\n    });\n    return touchMap;\n}\n\n/**\n * Recognizer flow explained; *\n * All recognizers have the initial state of POSSIBLE when a input session starts.\n * The definition of a input session is from the first input until the last input, with all it's movement in it. *\n * Example session for mouse-input: mousedown -> mousemove -> mouseup\n *\n * On each recognizing cycle (see Manager.recognize) the .recognize() method is executed\n * which determines with state it should be.\n *\n * If the recognizer has the state FAILED, CANCELLED or RECOGNIZED (equals ENDED), it is reset to\n * POSSIBLE to give it another change on the next cycle.\n *\n *               Possible\n *                  |\n *            +-----+---------------+\n *            |                     |\n *      +-----+-----+               |\n *      |           |               |\n *   Failed      Cancelled          |\n *                          +-------+------+\n *                          |              |\n *                      Recognized       Began\n *                                         |\n *                                      Changed\n *                                         |\n *                                  Ended/Recognized\n */\nvar STATE_POSSIBLE = 1;\nvar STATE_BEGAN = 2;\nvar STATE_CHANGED = 4;\nvar STATE_ENDED = 8;\nvar STATE_RECOGNIZED = STATE_ENDED;\nvar STATE_CANCELLED = 16;\nvar STATE_FAILED = 32;\n\n/**\n * Recognizer\n * Every recognizer needs to extend from this class.\n * @constructor\n * @param {Object} options\n */\nfunction Recognizer(options) {\n    this.options = assign({}, this.defaults, options || {});\n\n    this.id = uniqueId();\n\n    this.manager = null;\n\n    // default is enable true\n    this.options.enable = ifUndefined(this.options.enable, true);\n\n    this.state = STATE_POSSIBLE;\n\n    this.simultaneous = {};\n    this.requireFail = [];\n}\n\nRecognizer.prototype = {\n    /**\n     * @virtual\n     * @type {Object}\n     */\n    defaults: {},\n\n    /**\n     * set options\n     * @param {Object} options\n     * @return {Recognizer}\n     */\n    set: function(options) {\n        assign(this.options, options);\n\n        // also update the touchAction, in case something changed about the directions/enabled state\n        this.manager && this.manager.touchAction.update();\n        return this;\n    },\n\n    /**\n     * recognize simultaneous with an other recognizer.\n     * @param {Recognizer} otherRecognizer\n     * @returns {Recognizer} this\n     */\n    recognizeWith: function(otherRecognizer) {\n        if (invokeArrayArg(otherRecognizer, 'recognizeWith', this)) {\n            return this;\n        }\n\n        var simultaneous = this.simultaneous;\n        otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n        if (!simultaneous[otherRecognizer.id]) {\n            simultaneous[otherRecognizer.id] = otherRecognizer;\n            otherRecognizer.recognizeWith(this);\n        }\n        return this;\n    },\n\n    /**\n     * drop the simultaneous link. it doesnt remove the link on the other recognizer.\n     * @param {Recognizer} otherRecognizer\n     * @returns {Recognizer} this\n     */\n    dropRecognizeWith: function(otherRecognizer) {\n        if (invokeArrayArg(otherRecognizer, 'dropRecognizeWith', this)) {\n            return this;\n        }\n\n        otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n        delete this.simultaneous[otherRecognizer.id];\n        return this;\n    },\n\n    /**\n     * recognizer can only run when an other is failing\n     * @param {Recognizer} otherRecognizer\n     * @returns {Recognizer} this\n     */\n    requireFailure: function(otherRecognizer) {\n        if (invokeArrayArg(otherRecognizer, 'requireFailure', this)) {\n            return this;\n        }\n\n        var requireFail = this.requireFail;\n        otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n        if (inArray(requireFail, otherRecognizer) === -1) {\n            requireFail.push(otherRecognizer);\n            otherRecognizer.requireFailure(this);\n        }\n        return this;\n    },\n\n    /**\n     * drop the requireFailure link. it does not remove the link on the other recognizer.\n     * @param {Recognizer} otherRecognizer\n     * @returns {Recognizer} this\n     */\n    dropRequireFailure: function(otherRecognizer) {\n        if (invokeArrayArg(otherRecognizer, 'dropRequireFailure', this)) {\n            return this;\n        }\n\n        otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n        var index = inArray(this.requireFail, otherRecognizer);\n        if (index > -1) {\n            this.requireFail.splice(index, 1);\n        }\n        return this;\n    },\n\n    /**\n     * has require failures boolean\n     * @returns {boolean}\n     */\n    hasRequireFailures: function() {\n        return this.requireFail.length > 0;\n    },\n\n    /**\n     * if the recognizer can recognize simultaneous with an other recognizer\n     * @param {Recognizer} otherRecognizer\n     * @returns {Boolean}\n     */\n    canRecognizeWith: function(otherRecognizer) {\n        return !!this.simultaneous[otherRecognizer.id];\n    },\n\n    /**\n     * You should use `tryEmit` instead of `emit` directly to check\n     * that all the needed recognizers has failed before emitting.\n     * @param {Object} input\n     */\n    emit: function(input) {\n        var self = this;\n        var state = this.state;\n\n        function emit(event) {\n            self.manager.emit(event, input);\n        }\n\n        // 'panstart' and 'panmove'\n        if (state < STATE_ENDED) {\n            emit(self.options.event + stateStr(state));\n        }\n\n        emit(self.options.event); // simple 'eventName' events\n\n        if (input.additionalEvent) { // additional event(panleft, panright, pinchin, pinchout...)\n            emit(input.additionalEvent);\n        }\n\n        // panend and pancancel\n        if (state >= STATE_ENDED) {\n            emit(self.options.event + stateStr(state));\n        }\n    },\n\n    /**\n     * Check that all the require failure recognizers has failed,\n     * if true, it emits a gesture event,\n     * otherwise, setup the state to FAILED.\n     * @param {Object} input\n     */\n    tryEmit: function(input) {\n        if (this.canEmit()) {\n            return this.emit(input);\n        }\n        // it's failing anyway\n        this.state = STATE_FAILED;\n    },\n\n    /**\n     * can we emit?\n     * @returns {boolean}\n     */\n    canEmit: function() {\n        var i = 0;\n        while (i < this.requireFail.length) {\n            if (!(this.requireFail[i].state & (STATE_FAILED | STATE_POSSIBLE))) {\n                return false;\n            }\n            i++;\n        }\n        return true;\n    },\n\n    /**\n     * update the recognizer\n     * @param {Object} inputData\n     */\n    recognize: function(inputData) {\n        // make a new copy of the inputData\n        // so we can change the inputData without messing up the other recognizers\n        var inputDataClone = assign({}, inputData);\n\n        // is is enabled and allow recognizing?\n        if (!boolOrFn(this.options.enable, [this, inputDataClone])) {\n            this.reset();\n            this.state = STATE_FAILED;\n            return;\n        }\n\n        // reset when we've reached the end\n        if (this.state & (STATE_RECOGNIZED | STATE_CANCELLED | STATE_FAILED)) {\n            this.state = STATE_POSSIBLE;\n        }\n\n        this.state = this.process(inputDataClone);\n\n        // the recognizer has recognized a gesture\n        // so trigger an event\n        if (this.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED | STATE_CANCELLED)) {\n            this.tryEmit(inputDataClone);\n        }\n    },\n\n    /**\n     * return the state of the recognizer\n     * the actual recognizing happens in this method\n     * @virtual\n     * @param {Object} inputData\n     * @returns {Const} STATE\n     */\n    process: function(inputData) { }, // jshint ignore:line\n\n    /**\n     * return the preferred touch-action\n     * @virtual\n     * @returns {Array}\n     */\n    getTouchAction: function() { },\n\n    /**\n     * called when the gesture isn't allowed to recognize\n     * like when another is being recognized or it is disabled\n     * @virtual\n     */\n    reset: function() { }\n};\n\n/**\n * get a usable string, used as event postfix\n * @param {Const} state\n * @returns {String} state\n */\nfunction stateStr(state) {\n    if (state & STATE_CANCELLED) {\n        return 'cancel';\n    } else if (state & STATE_ENDED) {\n        return 'end';\n    } else if (state & STATE_CHANGED) {\n        return 'move';\n    } else if (state & STATE_BEGAN) {\n        return 'start';\n    }\n    return '';\n}\n\n/**\n * direction cons to string\n * @param {Const} direction\n * @returns {String}\n */\nfunction directionStr(direction) {\n    if (direction == DIRECTION_DOWN) {\n        return 'down';\n    } else if (direction == DIRECTION_UP) {\n        return 'up';\n    } else if (direction == DIRECTION_LEFT) {\n        return 'left';\n    } else if (direction == DIRECTION_RIGHT) {\n        return 'right';\n    }\n    return '';\n}\n\n/**\n * get a recognizer by name if it is bound to a manager\n * @param {Recognizer|String} otherRecognizer\n * @param {Recognizer} recognizer\n * @returns {Recognizer}\n */\nfunction getRecognizerByNameIfManager(otherRecognizer, recognizer) {\n    var manager = recognizer.manager;\n    if (manager) {\n        return manager.get(otherRecognizer);\n    }\n    return otherRecognizer;\n}\n\n/**\n * This recognizer is just used as a base for the simple attribute recognizers.\n * @constructor\n * @extends Recognizer\n */\nfunction AttrRecognizer() {\n    Recognizer.apply(this, arguments);\n}\n\ninherit(AttrRecognizer, Recognizer, {\n    /**\n     * @namespace\n     * @memberof AttrRecognizer\n     */\n    defaults: {\n        /**\n         * @type {Number}\n         * @default 1\n         */\n        pointers: 1\n    },\n\n    /**\n     * Used to check if it the recognizer receives valid input, like input.distance > 10.\n     * @memberof AttrRecognizer\n     * @param {Object} input\n     * @returns {Boolean} recognized\n     */\n    attrTest: function(input) {\n        var optionPointers = this.options.pointers;\n        return optionPointers === 0 || input.pointers.length === optionPointers;\n    },\n\n    /**\n     * Process the input and return the state for the recognizer\n     * @memberof AttrRecognizer\n     * @param {Object} input\n     * @returns {*} State\n     */\n    process: function(input) {\n        var state = this.state;\n        var eventType = input.eventType;\n\n        var isRecognized = state & (STATE_BEGAN | STATE_CHANGED);\n        var isValid = this.attrTest(input);\n\n        // on cancel input and we've recognized before, return STATE_CANCELLED\n        if (isRecognized && (eventType & INPUT_CANCEL || !isValid)) {\n            return state | STATE_CANCELLED;\n        } else if (isRecognized || isValid) {\n            if (eventType & INPUT_END) {\n                return state | STATE_ENDED;\n            } else if (!(state & STATE_BEGAN)) {\n                return STATE_BEGAN;\n            }\n            return state | STATE_CHANGED;\n        }\n        return STATE_FAILED;\n    }\n});\n\n/**\n * Pan\n * Recognized when the pointer is down and moved in the allowed direction.\n * @constructor\n * @extends AttrRecognizer\n */\nfunction PanRecognizer() {\n    AttrRecognizer.apply(this, arguments);\n\n    this.pX = null;\n    this.pY = null;\n}\n\ninherit(PanRecognizer, AttrRecognizer, {\n    /**\n     * @namespace\n     * @memberof PanRecognizer\n     */\n    defaults: {\n        event: 'pan',\n        threshold: 10,\n        pointers: 1,\n        direction: DIRECTION_ALL\n    },\n\n    getTouchAction: function() {\n        var direction = this.options.direction;\n        var actions = [];\n        if (direction & DIRECTION_HORIZONTAL) {\n            actions.push(TOUCH_ACTION_PAN_Y);\n        }\n        if (direction & DIRECTION_VERTICAL) {\n            actions.push(TOUCH_ACTION_PAN_X);\n        }\n        return actions;\n    },\n\n    directionTest: function(input) {\n        var options = this.options;\n        var hasMoved = true;\n        var distance = input.distance;\n        var direction = input.direction;\n        var x = input.deltaX;\n        var y = input.deltaY;\n\n        // lock to axis?\n        if (!(direction & options.direction)) {\n            if (options.direction & DIRECTION_HORIZONTAL) {\n                direction = (x === 0) ? DIRECTION_NONE : (x < 0) ? DIRECTION_LEFT : DIRECTION_RIGHT;\n                hasMoved = x != this.pX;\n                distance = Math.abs(input.deltaX);\n            } else {\n                direction = (y === 0) ? DIRECTION_NONE : (y < 0) ? DIRECTION_UP : DIRECTION_DOWN;\n                hasMoved = y != this.pY;\n                distance = Math.abs(input.deltaY);\n            }\n        }\n        input.direction = direction;\n        return hasMoved && distance > options.threshold && direction & options.direction;\n    },\n\n    attrTest: function(input) {\n        return AttrRecognizer.prototype.attrTest.call(this, input) &&\n            (this.state & STATE_BEGAN || (!(this.state & STATE_BEGAN) && this.directionTest(input)));\n    },\n\n    emit: function(input) {\n\n        this.pX = input.deltaX;\n        this.pY = input.deltaY;\n\n        var direction = directionStr(input.direction);\n\n        if (direction) {\n            input.additionalEvent = this.options.event + direction;\n        }\n        this._super.emit.call(this, input);\n    }\n});\n\n/**\n * Pinch\n * Recognized when two or more pointers are moving toward (zoom-in) or away from each other (zoom-out).\n * @constructor\n * @extends AttrRecognizer\n */\nfunction PinchRecognizer() {\n    AttrRecognizer.apply(this, arguments);\n}\n\ninherit(PinchRecognizer, AttrRecognizer, {\n    /**\n     * @namespace\n     * @memberof PinchRecognizer\n     */\n    defaults: {\n        event: 'pinch',\n        threshold: 0,\n        pointers: 2\n    },\n\n    getTouchAction: function() {\n        return [TOUCH_ACTION_NONE];\n    },\n\n    attrTest: function(input) {\n        return this._super.attrTest.call(this, input) &&\n            (Math.abs(input.scale - 1) > this.options.threshold || this.state & STATE_BEGAN);\n    },\n\n    emit: function(input) {\n        if (input.scale !== 1) {\n            var inOut = input.scale < 1 ? 'in' : 'out';\n            input.additionalEvent = this.options.event + inOut;\n        }\n        this._super.emit.call(this, input);\n    }\n});\n\n/**\n * Press\n * Recognized when the pointer is down for x ms without any movement.\n * @constructor\n * @extends Recognizer\n */\nfunction PressRecognizer() {\n    Recognizer.apply(this, arguments);\n\n    this._timer = null;\n    this._input = null;\n}\n\ninherit(PressRecognizer, Recognizer, {\n    /**\n     * @namespace\n     * @memberof PressRecognizer\n     */\n    defaults: {\n        event: 'press',\n        pointers: 1,\n        time: 251, // minimal time of the pointer to be pressed\n        threshold: 9 // a minimal movement is ok, but keep it low\n    },\n\n    getTouchAction: function() {\n        return [TOUCH_ACTION_AUTO];\n    },\n\n    process: function(input) {\n        var options = this.options;\n        var validPointers = input.pointers.length === options.pointers;\n        var validMovement = input.distance < options.threshold;\n        var validTime = input.deltaTime > options.time;\n\n        this._input = input;\n\n        // we only allow little movement\n        // and we've reached an end event, so a tap is possible\n        if (!validMovement || !validPointers || (input.eventType & (INPUT_END | INPUT_CANCEL) && !validTime)) {\n            this.reset();\n        } else if (input.eventType & INPUT_START) {\n            this.reset();\n            this._timer = setTimeoutContext(function() {\n                this.state = STATE_RECOGNIZED;\n                this.tryEmit();\n            }, options.time, this);\n        } else if (input.eventType & INPUT_END) {\n            return STATE_RECOGNIZED;\n        }\n        return STATE_FAILED;\n    },\n\n    reset: function() {\n        clearTimeout(this._timer);\n    },\n\n    emit: function(input) {\n        if (this.state !== STATE_RECOGNIZED) {\n            return;\n        }\n\n        if (input && (input.eventType & INPUT_END)) {\n            this.manager.emit(this.options.event + 'up', input);\n        } else {\n            this._input.timeStamp = now();\n            this.manager.emit(this.options.event, this._input);\n        }\n    }\n});\n\n/**\n * Rotate\n * Recognized when two or more pointer are moving in a circular motion.\n * @constructor\n * @extends AttrRecognizer\n */\nfunction RotateRecognizer() {\n    AttrRecognizer.apply(this, arguments);\n}\n\ninherit(RotateRecognizer, AttrRecognizer, {\n    /**\n     * @namespace\n     * @memberof RotateRecognizer\n     */\n    defaults: {\n        event: 'rotate',\n        threshold: 0,\n        pointers: 2\n    },\n\n    getTouchAction: function() {\n        return [TOUCH_ACTION_NONE];\n    },\n\n    attrTest: function(input) {\n        return this._super.attrTest.call(this, input) &&\n            (Math.abs(input.rotation) > this.options.threshold || this.state & STATE_BEGAN);\n    }\n});\n\n/**\n * Swipe\n * Recognized when the pointer is moving fast (velocity), with enough distance in the allowed direction.\n * @constructor\n * @extends AttrRecognizer\n */\nfunction SwipeRecognizer() {\n    AttrRecognizer.apply(this, arguments);\n}\n\ninherit(SwipeRecognizer, AttrRecognizer, {\n    /**\n     * @namespace\n     * @memberof SwipeRecognizer\n     */\n    defaults: {\n        event: 'swipe',\n        threshold: 10,\n        velocity: 0.3,\n        direction: DIRECTION_HORIZONTAL | DIRECTION_VERTICAL,\n        pointers: 1\n    },\n\n    getTouchAction: function() {\n        return PanRecognizer.prototype.getTouchAction.call(this);\n    },\n\n    attrTest: function(input) {\n        var direction = this.options.direction;\n        var velocity;\n\n        if (direction & (DIRECTION_HORIZONTAL | DIRECTION_VERTICAL)) {\n            velocity = input.overallVelocity;\n        } else if (direction & DIRECTION_HORIZONTAL) {\n            velocity = input.overallVelocityX;\n        } else if (direction & DIRECTION_VERTICAL) {\n            velocity = input.overallVelocityY;\n        }\n\n        return this._super.attrTest.call(this, input) &&\n            direction & input.offsetDirection &&\n            input.distance > this.options.threshold &&\n            input.maxPointers == this.options.pointers &&\n            abs(velocity) > this.options.velocity && input.eventType & INPUT_END;\n    },\n\n    emit: function(input) {\n        var direction = directionStr(input.offsetDirection);\n        if (direction) {\n            this.manager.emit(this.options.event + direction, input);\n        }\n\n        this.manager.emit(this.options.event, input);\n    }\n});\n\n/**\n * A tap is ecognized when the pointer is doing a small tap/click. Multiple taps are recognized if they occur\n * between the given interval and position. The delay option can be used to recognize multi-taps without firing\n * a single tap.\n *\n * The eventData from the emitted event contains the property `tapCount`, which contains the amount of\n * multi-taps being recognized.\n * @constructor\n * @extends Recognizer\n */\nfunction TapRecognizer() {\n    Recognizer.apply(this, arguments);\n\n    // previous time and center,\n    // used for tap counting\n    this.pTime = false;\n    this.pCenter = false;\n\n    this._timer = null;\n    this._input = null;\n    this.count = 0;\n}\n\ninherit(TapRecognizer, Recognizer, {\n    /**\n     * @namespace\n     * @memberof PinchRecognizer\n     */\n    defaults: {\n        event: 'tap',\n        pointers: 1,\n        taps: 1,\n        interval: 300, // max time between the multi-tap taps\n        time: 250, // max time of the pointer to be down (like finger on the screen)\n        threshold: 9, // a minimal movement is ok, but keep it low\n        posThreshold: 10 // a multi-tap can be a bit off the initial position\n    },\n\n    getTouchAction: function() {\n        return [TOUCH_ACTION_MANIPULATION];\n    },\n\n    process: function(input) {\n        var options = this.options;\n\n        var validPointers = input.pointers.length === options.pointers;\n        var validMovement = input.distance < options.threshold;\n        var validTouchTime = input.deltaTime < options.time;\n\n        this.reset();\n\n        if ((input.eventType & INPUT_START) && (this.count === 0)) {\n            return this.failTimeout();\n        }\n\n        // we only allow little movement\n        // and we've reached an end event, so a tap is possible\n        if (validMovement && validTouchTime && validPointers) {\n            if (input.eventType != INPUT_END) {\n                return this.failTimeout();\n            }\n\n            var validInterval = this.pTime ? (input.timeStamp - this.pTime < options.interval) : true;\n            var validMultiTap = !this.pCenter || getDistance(this.pCenter, input.center) < options.posThreshold;\n\n            this.pTime = input.timeStamp;\n            this.pCenter = input.center;\n\n            if (!validMultiTap || !validInterval) {\n                this.count = 1;\n            } else {\n                this.count += 1;\n            }\n\n            this._input = input;\n\n            // if tap count matches we have recognized it,\n            // else it has began recognizing...\n            var tapCount = this.count % options.taps;\n            if (tapCount === 0) {\n                // no failing requirements, immediately trigger the tap event\n                // or wait as long as the multitap interval to trigger\n                if (!this.hasRequireFailures()) {\n                    return STATE_RECOGNIZED;\n                } else {\n                    this._timer = setTimeoutContext(function() {\n                        this.state = STATE_RECOGNIZED;\n                        this.tryEmit();\n                    }, options.interval, this);\n                    return STATE_BEGAN;\n                }\n            }\n        }\n        return STATE_FAILED;\n    },\n\n    failTimeout: function() {\n        this._timer = setTimeoutContext(function() {\n            this.state = STATE_FAILED;\n        }, this.options.interval, this);\n        return STATE_FAILED;\n    },\n\n    reset: function() {\n        clearTimeout(this._timer);\n    },\n\n    emit: function() {\n        if (this.state == STATE_RECOGNIZED) {\n            this._input.tapCount = this.count;\n            this.manager.emit(this.options.event, this._input);\n        }\n    }\n});\n\n/**\n * Simple way to create a manager with a default set of recognizers.\n * @param {HTMLElement} element\n * @param {Object} [options]\n * @constructor\n */\nfunction Hammer(element, options) {\n    options = options || {};\n    options.recognizers = ifUndefined(options.recognizers, Hammer.defaults.preset);\n    return new Manager(element, options);\n}\n\n/**\n * @const {string}\n */\nHammer.VERSION = '2.0.7';\n\n/**\n * default settings\n * @namespace\n */\nHammer.defaults = {\n    /**\n     * set if DOM events are being triggered.\n     * But this is slower and unused by simple implementations, so disabled by default.\n     * @type {Boolean}\n     * @default false\n     */\n    domEvents: false,\n\n    /**\n     * The value for the touchAction property/fallback.\n     * When set to `compute` it will magically set the correct value based on the added recognizers.\n     * @type {String}\n     * @default compute\n     */\n    touchAction: TOUCH_ACTION_COMPUTE,\n\n    /**\n     * @type {Boolean}\n     * @default true\n     */\n    enable: true,\n\n    /**\n     * EXPERIMENTAL FEATURE -- can be removed/changed\n     * Change the parent input target element.\n     * If Null, then it is being set the to main element.\n     * @type {Null|EventTarget}\n     * @default null\n     */\n    inputTarget: null,\n\n    /**\n     * force an input class\n     * @type {Null|Function}\n     * @default null\n     */\n    inputClass: null,\n\n    /**\n     * Default recognizer setup when calling `Hammer()`\n     * When creating a new Manager these will be skipped.\n     * @type {Array}\n     */\n    preset: [\n        // RecognizerClass, options, [recognizeWith, ...], [requireFailure, ...]\n        [RotateRecognizer, {enable: false}],\n        [PinchRecognizer, {enable: false}, ['rotate']],\n        [SwipeRecognizer, {direction: DIRECTION_HORIZONTAL}],\n        [PanRecognizer, {direction: DIRECTION_HORIZONTAL}, ['swipe']],\n        [TapRecognizer],\n        [TapRecognizer, {event: 'doubletap', taps: 2}, ['tap']],\n        [PressRecognizer]\n    ],\n\n    /**\n     * Some CSS properties can be used to improve the working of Hammer.\n     * Add them to this method and they will be set when creating a new Manager.\n     * @namespace\n     */\n    cssProps: {\n        /**\n         * Disables text selection to improve the dragging gesture. Mainly for desktop browsers.\n         * @type {String}\n         * @default 'none'\n         */\n        userSelect: 'none',\n\n        /**\n         * Disable the Windows Phone grippers when pressing an element.\n         * @type {String}\n         * @default 'none'\n         */\n        touchSelect: 'none',\n\n        /**\n         * Disables the default callout shown when you touch and hold a touch target.\n         * On iOS, when you touch and hold a touch target such as a link, Safari displays\n         * a callout containing information about the link. This property allows you to disable that callout.\n         * @type {String}\n         * @default 'none'\n         */\n        touchCallout: 'none',\n\n        /**\n         * Specifies whether zooming is enabled. Used by IE10>\n         * @type {String}\n         * @default 'none'\n         */\n        contentZooming: 'none',\n\n        /**\n         * Specifies that an entire element should be draggable instead of its contents. Mainly for desktop browsers.\n         * @type {String}\n         * @default 'none'\n         */\n        userDrag: 'none',\n\n        /**\n         * Overrides the highlight color shown when the user taps a link or a JavaScript\n         * clickable element in iOS. This property obeys the alpha value, if specified.\n         * @type {String}\n         * @default 'rgba(0,0,0,0)'\n         */\n        tapHighlightColor: 'rgba(0,0,0,0)'\n    }\n};\n\nvar STOP = 1;\nvar FORCED_STOP = 2;\n\n/**\n * Manager\n * @param {HTMLElement} element\n * @param {Object} [options]\n * @constructor\n */\nfunction Manager(element, options) {\n    this.options = assign({}, Hammer.defaults, options || {});\n\n    this.options.inputTarget = this.options.inputTarget || element;\n\n    this.handlers = {};\n    this.session = {};\n    this.recognizers = [];\n    this.oldCssProps = {};\n\n    this.element = element;\n    this.input = createInputInstance(this);\n    this.touchAction = new TouchAction(this, this.options.touchAction);\n\n    toggleCssProps(this, true);\n\n    each(this.options.recognizers, function(item) {\n        var recognizer = this.add(new (item[0])(item[1]));\n        item[2] && recognizer.recognizeWith(item[2]);\n        item[3] && recognizer.requireFailure(item[3]);\n    }, this);\n}\n\nManager.prototype = {\n    /**\n     * set options\n     * @param {Object} options\n     * @returns {Manager}\n     */\n    set: function(options) {\n        assign(this.options, options);\n\n        // Options that need a little more setup\n        if (options.touchAction) {\n            this.touchAction.update();\n        }\n        if (options.inputTarget) {\n            // Clean up existing event listeners and reinitialize\n            this.input.destroy();\n            this.input.target = options.inputTarget;\n            this.input.init();\n        }\n        return this;\n    },\n\n    /**\n     * stop recognizing for this session.\n     * This session will be discarded, when a new [input]start event is fired.\n     * When forced, the recognizer cycle is stopped immediately.\n     * @param {Boolean} [force]\n     */\n    stop: function(force) {\n        this.session.stopped = force ? FORCED_STOP : STOP;\n    },\n\n    /**\n     * run the recognizers!\n     * called by the inputHandler function on every movement of the pointers (touches)\n     * it walks through all the recognizers and tries to detect the gesture that is being made\n     * @param {Object} inputData\n     */\n    recognize: function(inputData) {\n        var session = this.session;\n        if (session.stopped) {\n            return;\n        }\n\n        // run the touch-action polyfill\n        this.touchAction.preventDefaults(inputData);\n\n        var recognizer;\n        var recognizers = this.recognizers;\n\n        // this holds the recognizer that is being recognized.\n        // so the recognizer's state needs to be BEGAN, CHANGED, ENDED or RECOGNIZED\n        // if no recognizer is detecting a thing, it is set to `null`\n        var curRecognizer = session.curRecognizer;\n\n        // reset when the last recognizer is recognized\n        // or when we're in a new session\n        if (!curRecognizer || (curRecognizer && curRecognizer.state & STATE_RECOGNIZED)) {\n            curRecognizer = session.curRecognizer = null;\n        }\n\n        var i = 0;\n        while (i < recognizers.length) {\n            recognizer = recognizers[i];\n\n            // find out if we are allowed try to recognize the input for this one.\n            // 1.   allow if the session is NOT forced stopped (see the .stop() method)\n            // 2.   allow if we still haven't recognized a gesture in this session, or the this recognizer is the one\n            //      that is being recognized.\n            // 3.   allow if the recognizer is allowed to run simultaneous with the current recognized recognizer.\n            //      this can be setup with the `recognizeWith()` method on the recognizer.\n            if (session.stopped !== FORCED_STOP && ( // 1\n                    !curRecognizer || recognizer == curRecognizer || // 2\n                    recognizer.canRecognizeWith(curRecognizer))) { // 3\n                recognizer.recognize(inputData);\n            } else {\n                recognizer.reset();\n            }\n\n            // if the recognizer has been recognizing the input as a valid gesture, we want to store this one as the\n            // current active recognizer. but only if we don't already have an active recognizer\n            if (!curRecognizer && recognizer.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED)) {\n                curRecognizer = session.curRecognizer = recognizer;\n            }\n            i++;\n        }\n    },\n\n    /**\n     * get a recognizer by its event name.\n     * @param {Recognizer|String} recognizer\n     * @returns {Recognizer|Null}\n     */\n    get: function(recognizer) {\n        if (recognizer instanceof Recognizer) {\n            return recognizer;\n        }\n\n        var recognizers = this.recognizers;\n        for (var i = 0; i < recognizers.length; i++) {\n            if (recognizers[i].options.event == recognizer) {\n                return recognizers[i];\n            }\n        }\n        return null;\n    },\n\n    /**\n     * add a recognizer to the manager\n     * existing recognizers with the same event name will be removed\n     * @param {Recognizer} recognizer\n     * @returns {Recognizer|Manager}\n     */\n    add: function(recognizer) {\n        if (invokeArrayArg(recognizer, 'add', this)) {\n            return this;\n        }\n\n        // remove existing\n        var existing = this.get(recognizer.options.event);\n        if (existing) {\n            this.remove(existing);\n        }\n\n        this.recognizers.push(recognizer);\n        recognizer.manager = this;\n\n        this.touchAction.update();\n        return recognizer;\n    },\n\n    /**\n     * remove a recognizer by name or instance\n     * @param {Recognizer|String} recognizer\n     * @returns {Manager}\n     */\n    remove: function(recognizer) {\n        if (invokeArrayArg(recognizer, 'remove', this)) {\n            return this;\n        }\n\n        recognizer = this.get(recognizer);\n\n        // let's make sure this recognizer exists\n        if (recognizer) {\n            var recognizers = this.recognizers;\n            var index = inArray(recognizers, recognizer);\n\n            if (index !== -1) {\n                recognizers.splice(index, 1);\n                this.touchAction.update();\n            }\n        }\n\n        return this;\n    },\n\n    /**\n     * bind event\n     * @param {String} events\n     * @param {Function} handler\n     * @returns {EventEmitter} this\n     */\n    on: function(events, handler) {\n        if (events === undefined) {\n            return;\n        }\n        if (handler === undefined) {\n            return;\n        }\n\n        var handlers = this.handlers;\n        each(splitStr(events), function(event) {\n            handlers[event] = handlers[event] || [];\n            handlers[event].push(handler);\n        });\n        return this;\n    },\n\n    /**\n     * unbind event, leave emit blank to remove all handlers\n     * @param {String} events\n     * @param {Function} [handler]\n     * @returns {EventEmitter} this\n     */\n    off: function(events, handler) {\n        if (events === undefined) {\n            return;\n        }\n\n        var handlers = this.handlers;\n        each(splitStr(events), function(event) {\n            if (!handler) {\n                delete handlers[event];\n            } else {\n                handlers[event] && handlers[event].splice(inArray(handlers[event], handler), 1);\n            }\n        });\n        return this;\n    },\n\n    /**\n     * emit event to the listeners\n     * @param {String} event\n     * @param {Object} data\n     */\n    emit: function(event, data) {\n        // we also want to trigger dom events\n        if (this.options.domEvents) {\n            triggerDomEvent(event, data);\n        }\n\n        // no handlers, so skip it all\n        var handlers = this.handlers[event] && this.handlers[event].slice();\n        if (!handlers || !handlers.length) {\n            return;\n        }\n\n        data.type = event;\n        data.preventDefault = function() {\n            data.srcEvent.preventDefault();\n        };\n\n        var i = 0;\n        while (i < handlers.length) {\n            handlers[i](data);\n            i++;\n        }\n    },\n\n    /**\n     * destroy the manager and unbinds all events\n     * it doesn't unbind dom events, that is the user own responsibility\n     */\n    destroy: function() {\n        this.element && toggleCssProps(this, false);\n\n        this.handlers = {};\n        this.session = {};\n        this.input.destroy();\n        this.element = null;\n    }\n};\n\n/**\n * add/remove the css properties as defined in manager.options.cssProps\n * @param {Manager} manager\n * @param {Boolean} add\n */\nfunction toggleCssProps(manager, add) {\n    var element = manager.element;\n    if (!element.style) {\n        return;\n    }\n    var prop;\n    each(manager.options.cssProps, function(value, name) {\n        prop = prefixed(element.style, name);\n        if (add) {\n            manager.oldCssProps[prop] = element.style[prop];\n            element.style[prop] = value;\n        } else {\n            element.style[prop] = manager.oldCssProps[prop] || '';\n        }\n    });\n    if (!add) {\n        manager.oldCssProps = {};\n    }\n}\n\n/**\n * trigger dom event\n * @param {String} event\n * @param {Object} data\n */\nfunction triggerDomEvent(event, data) {\n    var gestureEvent = document.createEvent('Event');\n    gestureEvent.initEvent(event, true, true);\n    gestureEvent.gesture = data;\n    data.target.dispatchEvent(gestureEvent);\n}\n\nassign(Hammer, {\n    INPUT_START: INPUT_START,\n    INPUT_MOVE: INPUT_MOVE,\n    INPUT_END: INPUT_END,\n    INPUT_CANCEL: INPUT_CANCEL,\n\n    STATE_POSSIBLE: STATE_POSSIBLE,\n    STATE_BEGAN: STATE_BEGAN,\n    STATE_CHANGED: STATE_CHANGED,\n    STATE_ENDED: STATE_ENDED,\n    STATE_RECOGNIZED: STATE_RECOGNIZED,\n    STATE_CANCELLED: STATE_CANCELLED,\n    STATE_FAILED: STATE_FAILED,\n\n    DIRECTION_NONE: DIRECTION_NONE,\n    DIRECTION_LEFT: DIRECTION_LEFT,\n    DIRECTION_RIGHT: DIRECTION_RIGHT,\n    DIRECTION_UP: DIRECTION_UP,\n    DIRECTION_DOWN: DIRECTION_DOWN,\n    DIRECTION_HORIZONTAL: DIRECTION_HORIZONTAL,\n    DIRECTION_VERTICAL: DIRECTION_VERTICAL,\n    DIRECTION_ALL: DIRECTION_ALL,\n\n    Manager: Manager,\n    Input: Input,\n    TouchAction: TouchAction,\n\n    TouchInput: TouchInput,\n    MouseInput: MouseInput,\n    PointerEventInput: PointerEventInput,\n    TouchMouseInput: TouchMouseInput,\n    SingleTouchInput: SingleTouchInput,\n\n    Recognizer: Recognizer,\n    AttrRecognizer: AttrRecognizer,\n    Tap: TapRecognizer,\n    Pan: PanRecognizer,\n    Swipe: SwipeRecognizer,\n    Pinch: PinchRecognizer,\n    Rotate: RotateRecognizer,\n    Press: PressRecognizer,\n\n    on: addEventListeners,\n    off: removeEventListeners,\n    each: each,\n    merge: merge,\n    extend: extend,\n    assign: assign,\n    inherit: inherit,\n    bindFn: bindFn,\n    prefixed: prefixed\n});\n\n// this prevents errors when Hammer is loaded in the presence of an AMD\n//  style loader but by script tag, not by the loader.\nvar freeGlobal = (typeof window !== 'undefined' ? window : (typeof self !== 'undefined' ? self : {})); // jshint ignore:line\nfreeGlobal.Hammer = Hammer;\n\nif (typeof define === 'function' && define.amd) {\n    define(function() {\n        return Hammer;\n    });\n} else if (typeof module != 'undefined' && module.exports) {\n    module.exports = Hammer;\n} else {\n    window[exportName] = Hammer;\n}\n\n})(window, document, 'Hammer');\n","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n  extendStatics = Object.setPrototypeOf ||\n      ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n      function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n  return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n  if (typeof b !== \"function\" && b !== null)\n      throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n  extendStatics(d, b);\n  function __() { this.constructor = d; }\n  d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n  __assign = Object.assign || function __assign(t) {\n      for (var s, i = 1, n = arguments.length; i < n; i++) {\n          s = arguments[i];\n          for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n      }\n      return t;\n  }\n  return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n  var t = {};\n  for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n      t[p] = s[p];\n  if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n      for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n          if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n              t[p[i]] = s[p[i]];\n      }\n  return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n  if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n  return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n  return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n  function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n  var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n  var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n  var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n  var _, done = false;\n  for (var i = decorators.length - 1; i >= 0; i--) {\n      var context = {};\n      for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n      for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n      context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n      var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n      if (kind === \"accessor\") {\n          if (result === void 0) continue;\n          if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n          if (_ = accept(result.get)) descriptor.get = _;\n          if (_ = accept(result.set)) descriptor.set = _;\n          if (_ = accept(result.init)) initializers.unshift(_);\n      }\n      else if (_ = accept(result)) {\n          if (kind === \"field\") initializers.unshift(_);\n          else descriptor[key] = _;\n      }\n  }\n  if (target) Object.defineProperty(target, contextIn.name, descriptor);\n  done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n  var useValue = arguments.length > 2;\n  for (var i = 0; i < initializers.length; i++) {\n      value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n  }\n  return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n  return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n  if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n  return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n  if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n  return new (P || (P = Promise))(function (resolve, reject) {\n      function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n      function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n      function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n      step((generator = generator.apply(thisArg, _arguments || [])).next());\n  });\n}\n\nexport function __generator(thisArg, body) {\n  var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n  return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n  function verb(n) { return function (v) { return step([n, v]); }; }\n  function step(op) {\n      if (f) throw new TypeError(\"Generator is already executing.\");\n      while (g && (g = 0, op[0] && (_ = 0)), _) try {\n          if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n          if (y = 0, t) op = [op[0] & 2, t.value];\n          switch (op[0]) {\n              case 0: case 1: t = op; break;\n              case 4: _.label++; return { value: op[1], done: false };\n              case 5: _.label++; y = op[1]; op = [0]; continue;\n              case 7: op = _.ops.pop(); _.trys.pop(); continue;\n              default:\n                  if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                  if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                  if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                  if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                  if (t[2]) _.ops.pop();\n                  _.trys.pop(); continue;\n          }\n          op = body.call(thisArg, _);\n      } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n      if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n  }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n  if (k2 === undefined) k2 = k;\n  var desc = Object.getOwnPropertyDescriptor(m, k);\n  if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n  }\n  Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n  if (k2 === undefined) k2 = k;\n  o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n  for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n  var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n  if (m) return m.call(o);\n  if (o && typeof o.length === \"number\") return {\n      next: function () {\n          if (o && i >= o.length) o = void 0;\n          return { value: o && o[i++], done: !o };\n      }\n  };\n  throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n  var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n  if (!m) return o;\n  var i = m.call(o), r, ar = [], e;\n  try {\n      while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n  }\n  catch (error) { e = { error: error }; }\n  finally {\n      try {\n          if (r && !r.done && (m = i[\"return\"])) m.call(i);\n      }\n      finally { if (e) throw e.error; }\n  }\n  return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n  for (var ar = [], i = 0; i < arguments.length; i++)\n      ar = ar.concat(__read(arguments[i]));\n  return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n  for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n  for (var r = Array(s), k = 0, i = 0; i < il; i++)\n      for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n          r[k] = a[j];\n  return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n  if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n      if (ar || !(i in from)) {\n          if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n          ar[i] = from[i];\n      }\n  }\n  return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n  return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n  if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n  var g = generator.apply(thisArg, _arguments || []), i, q = [];\n  return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n  function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n  function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n  function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n  function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n  function fulfill(value) { resume(\"next\", value); }\n  function reject(value) { resume(\"throw\", value); }\n  function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n  var i, p;\n  return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n  function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n  if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n  var m = o[Symbol.asyncIterator], i;\n  return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n  function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n  function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n  if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n  return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n  Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n  o[\"default\"] = v;\n};\n\nvar ownKeys = function(o) {\n  ownKeys = Object.getOwnPropertyNames || function (o) {\n    var ar = [];\n    for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n    return ar;\n  };\n  return ownKeys(o);\n};\n\nexport function __importStar(mod) {\n  if (mod && mod.__esModule) return mod;\n  var result = {};\n  if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n  __setModuleDefault(result, mod);\n  return result;\n}\n\nexport function __importDefault(mod) {\n  return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n  if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n  if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n  return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n  if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n  if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n  if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n  return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n  if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n  return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n  if (value !== null && value !== void 0) {\n    if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n    var dispose, inner;\n    if (async) {\n      if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n      dispose = value[Symbol.asyncDispose];\n    }\n    if (dispose === void 0) {\n      if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n      dispose = value[Symbol.dispose];\n      if (async) inner = dispose;\n    }\n    if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n    if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n    env.stack.push({ value: value, dispose: dispose, async: async });\n  }\n  else if (async) {\n    env.stack.push({ async: true });\n  }\n  return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n  var e = new Error(message);\n  return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n  function fail(e) {\n    env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n    env.hasError = true;\n  }\n  var r, s = 0;\n  function next() {\n    while (r = env.stack.pop()) {\n      try {\n        if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n        if (r.dispose) {\n          var result = r.dispose.call(r.value);\n          if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n        }\n        else s |= 1;\n      }\n      catch (e) {\n        fail(e);\n      }\n    }\n    if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n    if (env.hasError) throw env.error;\n  }\n  return next();\n}\n\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\n  if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n      return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n          return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\n      });\n  }\n  return path;\n}\n\nexport default {\n  __extends,\n  __assign,\n  __rest,\n  __decorate,\n  __param,\n  __esDecorate,\n  __runInitializers,\n  __propKey,\n  __setFunctionName,\n  __metadata,\n  __awaiter,\n  __generator,\n  __createBinding,\n  __exportStar,\n  __values,\n  __read,\n  __spread,\n  __spreadArrays,\n  __spreadArray,\n  __await,\n  __asyncGenerator,\n  __asyncDelegator,\n  __asyncValues,\n  __makeTemplateObject,\n  __importStar,\n  __importDefault,\n  __classPrivateFieldGet,\n  __classPrivateFieldSet,\n  __classPrivateFieldIn,\n  __addDisposableResource,\n  __disposeResources,\n  __rewriteRelativeImportExtension,\n};\n","export function isFunction(value) {\n    return typeof value === 'function';\n}\n//# sourceMappingURL=isFunction.js.map","export function createErrorClass(createImpl) {\n    var _super = function (instance) {\n        Error.call(instance);\n        instance.stack = new Error().stack;\n    };\n    var ctorFunc = createImpl(_super);\n    ctorFunc.prototype = Object.create(Error.prototype);\n    ctorFunc.prototype.constructor = ctorFunc;\n    return ctorFunc;\n}\n//# sourceMappingURL=createErrorClass.js.map","import { createErrorClass } from './createErrorClass';\nexport var UnsubscriptionError = createErrorClass(function (_super) {\n    return function UnsubscriptionErrorImpl(errors) {\n        _super(this);\n        this.message = errors\n            ? errors.length + \" errors occurred during unsubscription:\\n\" + errors.map(function (err, i) { return i + 1 + \") \" + err.toString(); }).join('\\n  ')\n            : '';\n        this.name = 'UnsubscriptionError';\n        this.errors = errors;\n    };\n});\n//# sourceMappingURL=UnsubscriptionError.js.map","export function arrRemove(arr, item) {\n    if (arr) {\n        var index = arr.indexOf(item);\n        0 <= index && arr.splice(index, 1);\n    }\n}\n//# sourceMappingURL=arrRemove.js.map","import { __read, __spreadArray, __values } from \"tslib\";\nimport { isFunction } from './util/isFunction';\nimport { UnsubscriptionError } from './util/UnsubscriptionError';\nimport { arrRemove } from './util/arrRemove';\nvar Subscription = (function () {\n    function Subscription(initialTeardown) {\n        this.initialTeardown = initialTeardown;\n        this.closed = false;\n        this._parentage = null;\n        this._finalizers = null;\n    }\n    Subscription.prototype.unsubscribe = function () {\n        var e_1, _a, e_2, _b;\n        var errors;\n        if (!this.closed) {\n            this.closed = true;\n            var _parentage = this._parentage;\n            if (_parentage) {\n                this._parentage = null;\n                if (Array.isArray(_parentage)) {\n                    try {\n                        for (var _parentage_1 = __values(_parentage), _parentage_1_1 = _parentage_1.next(); !_parentage_1_1.done; _parentage_1_1 = _parentage_1.next()) {\n                            var parent_1 = _parentage_1_1.value;\n                            parent_1.remove(this);\n                        }\n                    }\n                    catch (e_1_1) { e_1 = { error: e_1_1 }; }\n                    finally {\n                        try {\n                            if (_parentage_1_1 && !_parentage_1_1.done && (_a = _parentage_1.return)) _a.call(_parentage_1);\n                        }\n                        finally { if (e_1) throw e_1.error; }\n                    }\n                }\n                else {\n                    _parentage.remove(this);\n                }\n            }\n            var initialFinalizer = this.initialTeardown;\n            if (isFunction(initialFinalizer)) {\n                try {\n                    initialFinalizer();\n                }\n                catch (e) {\n                    errors = e instanceof UnsubscriptionError ? e.errors : [e];\n                }\n            }\n            var _finalizers = this._finalizers;\n            if (_finalizers) {\n                this._finalizers = null;\n                try {\n                    for (var _finalizers_1 = __values(_finalizers), _finalizers_1_1 = _finalizers_1.next(); !_finalizers_1_1.done; _finalizers_1_1 = _finalizers_1.next()) {\n                        var finalizer = _finalizers_1_1.value;\n                        try {\n                            execFinalizer(finalizer);\n                        }\n                        catch (err) {\n                            errors = errors !== null && errors !== void 0 ? errors : [];\n                            if (err instanceof UnsubscriptionError) {\n                                errors = __spreadArray(__spreadArray([], __read(errors)), __read(err.errors));\n                            }\n                            else {\n                                errors.push(err);\n                            }\n                        }\n                    }\n                }\n                catch (e_2_1) { e_2 = { error: e_2_1 }; }\n                finally {\n                    try {\n                        if (_finalizers_1_1 && !_finalizers_1_1.done && (_b = _finalizers_1.return)) _b.call(_finalizers_1);\n                    }\n                    finally { if (e_2) throw e_2.error; }\n                }\n            }\n            if (errors) {\n                throw new UnsubscriptionError(errors);\n            }\n        }\n    };\n    Subscription.prototype.add = function (teardown) {\n        var _a;\n        if (teardown && teardown !== this) {\n            if (this.closed) {\n                execFinalizer(teardown);\n            }\n            else {\n                if (teardown instanceof Subscription) {\n                    if (teardown.closed || teardown._hasParent(this)) {\n                        return;\n                    }\n                    teardown._addParent(this);\n                }\n                (this._finalizers = (_a = this._finalizers) !== null && _a !== void 0 ? _a : []).push(teardown);\n            }\n        }\n    };\n    Subscription.prototype._hasParent = function (parent) {\n        var _parentage = this._parentage;\n        return _parentage === parent || (Array.isArray(_parentage) && _parentage.includes(parent));\n    };\n    Subscription.prototype._addParent = function (parent) {\n        var _parentage = this._parentage;\n        this._parentage = Array.isArray(_parentage) ? (_parentage.push(parent), _parentage) : _parentage ? [_parentage, parent] : parent;\n    };\n    Subscription.prototype._removeParent = function (parent) {\n        var _parentage = this._parentage;\n        if (_parentage === parent) {\n            this._parentage = null;\n        }\n        else if (Array.isArray(_parentage)) {\n            arrRemove(_parentage, parent);\n        }\n    };\n    Subscription.prototype.remove = function (teardown) {\n        var _finalizers = this._finalizers;\n        _finalizers && arrRemove(_finalizers, teardown);\n        if (teardown instanceof Subscription) {\n            teardown._removeParent(this);\n        }\n    };\n    Subscription.EMPTY = (function () {\n        var empty = new Subscription();\n        empty.closed = true;\n        return empty;\n    })();\n    return Subscription;\n}());\nexport { Subscription };\nexport var EMPTY_SUBSCRIPTION = Subscription.EMPTY;\nexport function isSubscription(value) {\n    return (value instanceof Subscription ||\n        (value && 'closed' in value && isFunction(value.remove) && isFunction(value.add) && isFunction(value.unsubscribe)));\n}\nfunction execFinalizer(finalizer) {\n    if (isFunction(finalizer)) {\n        finalizer();\n    }\n    else {\n        finalizer.unsubscribe();\n    }\n}\n//# sourceMappingURL=Subscription.js.map","export var config = {\n    onUnhandledError: null,\n    onStoppedNotification: null,\n    Promise: undefined,\n    useDeprecatedSynchronousErrorHandling: false,\n    useDeprecatedNextContext: false,\n};\n//# sourceMappingURL=config.js.map","import { __read, __spreadArray } from \"tslib\";\nexport var timeoutProvider = {\n    setTimeout: function (handler, timeout) {\n        var args = [];\n        for (var _i = 2; _i < arguments.length; _i++) {\n            args[_i - 2] = arguments[_i];\n        }\n        var delegate = timeoutProvider.delegate;\n        if (delegate === null || delegate === void 0 ? void 0 : delegate.setTimeout) {\n            return delegate.setTimeout.apply(delegate, __spreadArray([handler, timeout], __read(args)));\n        }\n        return setTimeout.apply(void 0, __spreadArray([handler, timeout], __read(args)));\n    },\n    clearTimeout: function (handle) {\n        var delegate = timeoutProvider.delegate;\n        return ((delegate === null || delegate === void 0 ? void 0 : delegate.clearTimeout) || clearTimeout)(handle);\n    },\n    delegate: undefined,\n};\n//# sourceMappingURL=timeoutProvider.js.map","import { config } from '../config';\nimport { timeoutProvider } from '../scheduler/timeoutProvider';\nexport function reportUnhandledError(err) {\n    timeoutProvider.setTimeout(function () {\n        var onUnhandledError = config.onUnhandledError;\n        if (onUnhandledError) {\n            onUnhandledError(err);\n        }\n        else {\n            throw err;\n        }\n    });\n}\n//# sourceMappingURL=reportUnhandledError.js.map","export function noop() { }\n//# sourceMappingURL=noop.js.map","import { config } from '../config';\nvar context = null;\nexport function errorContext(cb) {\n    if (config.useDeprecatedSynchronousErrorHandling) {\n        var isRoot = !context;\n        if (isRoot) {\n            context = { errorThrown: false, error: null };\n        }\n        cb();\n        if (isRoot) {\n            var _a = context, errorThrown = _a.errorThrown, error = _a.error;\n            context = null;\n            if (errorThrown) {\n                throw error;\n            }\n        }\n    }\n    else {\n        cb();\n    }\n}\nexport function captureError(err) {\n    if (config.useDeprecatedSynchronousErrorHandling && context) {\n        context.errorThrown = true;\n        context.error = err;\n    }\n}\n//# sourceMappingURL=errorContext.js.map","import { __extends } from \"tslib\";\nimport { isFunction } from './util/isFunction';\nimport { isSubscription, Subscription } from './Subscription';\nimport { config } from './config';\nimport { reportUnhandledError } from './util/reportUnhandledError';\nimport { noop } from './util/noop';\nimport { nextNotification, errorNotification, COMPLETE_NOTIFICATION } from './NotificationFactories';\nimport { timeoutProvider } from './scheduler/timeoutProvider';\nimport { captureError } from './util/errorContext';\nvar Subscriber = (function (_super) {\n    __extends(Subscriber, _super);\n    function Subscriber(destination) {\n        var _this = _super.call(this) || this;\n        _this.isStopped = false;\n        if (destination) {\n            _this.destination = destination;\n            if (isSubscription(destination)) {\n                destination.add(_this);\n            }\n        }\n        else {\n            _this.destination = EMPTY_OBSERVER;\n        }\n        return _this;\n    }\n    Subscriber.create = function (next, error, complete) {\n        return new SafeSubscriber(next, error, complete);\n    };\n    Subscriber.prototype.next = function (value) {\n        if (this.isStopped) {\n            handleStoppedNotification(nextNotification(value), this);\n        }\n        else {\n            this._next(value);\n        }\n    };\n    Subscriber.prototype.error = function (err) {\n        if (this.isStopped) {\n            handleStoppedNotification(errorNotification(err), this);\n        }\n        else {\n            this.isStopped = true;\n            this._error(err);\n        }\n    };\n    Subscriber.prototype.complete = function () {\n        if (this.isStopped) {\n            handleStoppedNotification(COMPLETE_NOTIFICATION, this);\n        }\n        else {\n            this.isStopped = true;\n            this._complete();\n        }\n    };\n    Subscriber.prototype.unsubscribe = function () {\n        if (!this.closed) {\n            this.isStopped = true;\n            _super.prototype.unsubscribe.call(this);\n            this.destination = null;\n        }\n    };\n    Subscriber.prototype._next = function (value) {\n        this.destination.next(value);\n    };\n    Subscriber.prototype._error = function (err) {\n        try {\n            this.destination.error(err);\n        }\n        finally {\n            this.unsubscribe();\n        }\n    };\n    Subscriber.prototype._complete = function () {\n        try {\n            this.destination.complete();\n        }\n        finally {\n            this.unsubscribe();\n        }\n    };\n    return Subscriber;\n}(Subscription));\nexport { Subscriber };\nvar _bind = Function.prototype.bind;\nfunction bind(fn, thisArg) {\n    return _bind.call(fn, thisArg);\n}\nvar ConsumerObserver = (function () {\n    function ConsumerObserver(partialObserver) {\n        this.partialObserver = partialObserver;\n    }\n    ConsumerObserver.prototype.next = function (value) {\n        var partialObserver = this.partialObserver;\n        if (partialObserver.next) {\n            try {\n                partialObserver.next(value);\n            }\n            catch (error) {\n                handleUnhandledError(error);\n            }\n        }\n    };\n    ConsumerObserver.prototype.error = function (err) {\n        var partialObserver = this.partialObserver;\n        if (partialObserver.error) {\n            try {\n                partialObserver.error(err);\n            }\n            catch (error) {\n                handleUnhandledError(error);\n            }\n        }\n        else {\n            handleUnhandledError(err);\n        }\n    };\n    ConsumerObserver.prototype.complete = function () {\n        var partialObserver = this.partialObserver;\n        if (partialObserver.complete) {\n            try {\n                partialObserver.complete();\n            }\n            catch (error) {\n                handleUnhandledError(error);\n            }\n        }\n    };\n    return ConsumerObserver;\n}());\nvar SafeSubscriber = (function (_super) {\n    __extends(SafeSubscriber, _super);\n    function SafeSubscriber(observerOrNext, error, complete) {\n        var _this = _super.call(this) || this;\n        var partialObserver;\n        if (isFunction(observerOrNext) || !observerOrNext) {\n            partialObserver = {\n                next: (observerOrNext !== null && observerOrNext !== void 0 ? observerOrNext : undefined),\n                error: error !== null && error !== void 0 ? error : undefined,\n                complete: complete !== null && complete !== void 0 ? complete : undefined,\n            };\n        }\n        else {\n            var context_1;\n            if (_this && config.useDeprecatedNextContext) {\n                context_1 = Object.create(observerOrNext);\n                context_1.unsubscribe = function () { return _this.unsubscribe(); };\n                partialObserver = {\n                    next: observerOrNext.next && bind(observerOrNext.next, context_1),\n                    error: observerOrNext.error && bind(observerOrNext.error, context_1),\n                    complete: observerOrNext.complete && bind(observerOrNext.complete, context_1),\n                };\n            }\n            else {\n                partialObserver = observerOrNext;\n            }\n        }\n        _this.destination = new ConsumerObserver(partialObserver);\n        return _this;\n    }\n    return SafeSubscriber;\n}(Subscriber));\nexport { SafeSubscriber };\nfunction handleUnhandledError(error) {\n    if (config.useDeprecatedSynchronousErrorHandling) {\n        captureError(error);\n    }\n    else {\n        reportUnhandledError(error);\n    }\n}\nfunction defaultErrorHandler(err) {\n    throw err;\n}\nfunction handleStoppedNotification(notification, subscriber) {\n    var onStoppedNotification = config.onStoppedNotification;\n    onStoppedNotification && timeoutProvider.setTimeout(function () { return onStoppedNotification(notification, subscriber); });\n}\nexport var EMPTY_OBSERVER = {\n    closed: true,\n    next: noop,\n    error: defaultErrorHandler,\n    complete: noop,\n};\n//# sourceMappingURL=Subscriber.js.map","export var observable = (function () { return (typeof Symbol === 'function' && Symbol.observable) || '@@observable'; })();\n//# sourceMappingURL=observable.js.map","export function identity(x) {\n    return x;\n}\n//# sourceMappingURL=identity.js.map","import { identity } from './identity';\nexport function pipe() {\n    var fns = [];\n    for (var _i = 0; _i < arguments.length; _i++) {\n        fns[_i] = arguments[_i];\n    }\n    return pipeFromArray(fns);\n}\nexport function pipeFromArray(fns) {\n    if (fns.length === 0) {\n        return identity;\n    }\n    if (fns.length === 1) {\n        return fns[0];\n    }\n    return function piped(input) {\n        return fns.reduce(function (prev, fn) { return fn(prev); }, input);\n    };\n}\n//# sourceMappingURL=pipe.js.map","import { SafeSubscriber, Subscriber } from './Subscriber';\nimport { isSubscription } from './Subscription';\nimport { observable as Symbol_observable } from './symbol/observable';\nimport { pipeFromArray } from './util/pipe';\nimport { config } from './config';\nimport { isFunction } from './util/isFunction';\nimport { errorContext } from './util/errorContext';\nvar Observable = (function () {\n    function Observable(subscribe) {\n        if (subscribe) {\n            this._subscribe = subscribe;\n        }\n    }\n    Observable.prototype.lift = function (operator) {\n        var observable = new Observable();\n        observable.source = this;\n        observable.operator = operator;\n        return observable;\n    };\n    Observable.prototype.subscribe = function (observerOrNext, error, complete) {\n        var _this = this;\n        var subscriber = isSubscriber(observerOrNext) ? observerOrNext : new SafeSubscriber(observerOrNext, error, complete);\n        errorContext(function () {\n            var _a = _this, operator = _a.operator, source = _a.source;\n            subscriber.add(operator\n                ?\n                    operator.call(subscriber, source)\n                : source\n                    ?\n                        _this._subscribe(subscriber)\n                    :\n                        _this._trySubscribe(subscriber));\n        });\n        return subscriber;\n    };\n    Observable.prototype._trySubscribe = function (sink) {\n        try {\n            return this._subscribe(sink);\n        }\n        catch (err) {\n            sink.error(err);\n        }\n    };\n    Observable.prototype.forEach = function (next, promiseCtor) {\n        var _this = this;\n        promiseCtor = getPromiseCtor(promiseCtor);\n        return new promiseCtor(function (resolve, reject) {\n            var subscriber = new SafeSubscriber({\n                next: function (value) {\n                    try {\n                        next(value);\n                    }\n                    catch (err) {\n                        reject(err);\n                        subscriber.unsubscribe();\n                    }\n                },\n                error: reject,\n                complete: resolve,\n            });\n            _this.subscribe(subscriber);\n        });\n    };\n    Observable.prototype._subscribe = function (subscriber) {\n        var _a;\n        return (_a = this.source) === null || _a === void 0 ? void 0 : _a.subscribe(subscriber);\n    };\n    Observable.prototype[Symbol_observable] = function () {\n        return this;\n    };\n    Observable.prototype.pipe = function () {\n        var operations = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            operations[_i] = arguments[_i];\n        }\n        return pipeFromArray(operations)(this);\n    };\n    Observable.prototype.toPromise = function (promiseCtor) {\n        var _this = this;\n        promiseCtor = getPromiseCtor(promiseCtor);\n        return new promiseCtor(function (resolve, reject) {\n            var value;\n            _this.subscribe(function (x) { return (value = x); }, function (err) { return reject(err); }, function () { return resolve(value); });\n        });\n    };\n    Observable.create = function (subscribe) {\n        return new Observable(subscribe);\n    };\n    return Observable;\n}());\nexport { Observable };\nfunction getPromiseCtor(promiseCtor) {\n    var _a;\n    return (_a = promiseCtor !== null && promiseCtor !== void 0 ? promiseCtor : config.Promise) !== null && _a !== void 0 ? _a : Promise;\n}\nfunction isObserver(value) {\n    return value && isFunction(value.next) && isFunction(value.error) && isFunction(value.complete);\n}\nfunction isSubscriber(value) {\n    return (value && value instanceof Subscriber) || (isObserver(value) && isSubscription(value));\n}\n//# sourceMappingURL=Observable.js.map","import { isFunction } from './isFunction';\nexport function hasLift(source) {\n    return isFunction(source === null || source === void 0 ? void 0 : source.lift);\n}\nexport function operate(init) {\n    return function (source) {\n        if (hasLift(source)) {\n            return source.lift(function (liftedSource) {\n                try {\n                    return init(liftedSource, this);\n                }\n                catch (err) {\n                    this.error(err);\n                }\n            });\n        }\n        throw new TypeError('Unable to lift unknown Observable type');\n    };\n}\n//# sourceMappingURL=lift.js.map","import { __extends } from \"tslib\";\nimport { Subscriber } from '../Subscriber';\nexport function createOperatorSubscriber(destination, onNext, onComplete, onError, onFinalize) {\n    return new OperatorSubscriber(destination, onNext, onComplete, onError, onFinalize);\n}\nvar OperatorSubscriber = (function (_super) {\n    __extends(OperatorSubscriber, _super);\n    function OperatorSubscriber(destination, onNext, onComplete, onError, onFinalize, shouldUnsubscribe) {\n        var _this = _super.call(this, destination) || this;\n        _this.onFinalize = onFinalize;\n        _this.shouldUnsubscribe = shouldUnsubscribe;\n        _this._next = onNext\n            ? function (value) {\n                try {\n                    onNext(value);\n                }\n                catch (err) {\n                    destination.error(err);\n                }\n            }\n            : _super.prototype._next;\n        _this._error = onError\n            ? function (err) {\n                try {\n                    onError(err);\n                }\n                catch (err) {\n                    destination.error(err);\n                }\n                finally {\n                    this.unsubscribe();\n                }\n            }\n            : _super.prototype._error;\n        _this._complete = onComplete\n            ? function () {\n                try {\n                    onComplete();\n                }\n                catch (err) {\n                    destination.error(err);\n                }\n                finally {\n                    this.unsubscribe();\n                }\n            }\n            : _super.prototype._complete;\n        return _this;\n    }\n    OperatorSubscriber.prototype.unsubscribe = function () {\n        var _a;\n        if (!this.shouldUnsubscribe || this.shouldUnsubscribe()) {\n            var closed_1 = this.closed;\n            _super.prototype.unsubscribe.call(this);\n            !closed_1 && ((_a = this.onFinalize) === null || _a === void 0 ? void 0 : _a.call(this));\n        }\n    };\n    return OperatorSubscriber;\n}(Subscriber));\nexport { OperatorSubscriber };\n//# sourceMappingURL=OperatorSubscriber.js.map","import { createErrorClass } from './createErrorClass';\nexport var ObjectUnsubscribedError = createErrorClass(function (_super) {\n    return function ObjectUnsubscribedErrorImpl() {\n        _super(this);\n        this.name = 'ObjectUnsubscribedError';\n        this.message = 'object unsubscribed';\n    };\n});\n//# sourceMappingURL=ObjectUnsubscribedError.js.map","import { __extends, __values } from \"tslib\";\nimport { Observable } from './Observable';\nimport { Subscription, EMPTY_SUBSCRIPTION } from './Subscription';\nimport { ObjectUnsubscribedError } from './util/ObjectUnsubscribedError';\nimport { arrRemove } from './util/arrRemove';\nimport { errorContext } from './util/errorContext';\nvar Subject = (function (_super) {\n    __extends(Subject, _super);\n    function Subject() {\n        var _this = _super.call(this) || this;\n        _this.closed = false;\n        _this.currentObservers = null;\n        _this.observers = [];\n        _this.isStopped = false;\n        _this.hasError = false;\n        _this.thrownError = null;\n        return _this;\n    }\n    Subject.prototype.lift = function (operator) {\n        var subject = new AnonymousSubject(this, this);\n        subject.operator = operator;\n        return subject;\n    };\n    Subject.prototype._throwIfClosed = function () {\n        if (this.closed) {\n            throw new ObjectUnsubscribedError();\n        }\n    };\n    Subject.prototype.next = function (value) {\n        var _this = this;\n        errorContext(function () {\n            var e_1, _a;\n            _this._throwIfClosed();\n            if (!_this.isStopped) {\n                if (!_this.currentObservers) {\n                    _this.currentObservers = Array.from(_this.observers);\n                }\n                try {\n                    for (var _b = __values(_this.currentObservers), _c = _b.next(); !_c.done; _c = _b.next()) {\n                        var observer = _c.value;\n                        observer.next(value);\n                    }\n                }\n                catch (e_1_1) { e_1 = { error: e_1_1 }; }\n                finally {\n                    try {\n                        if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n                    }\n                    finally { if (e_1) throw e_1.error; }\n                }\n            }\n        });\n    };\n    Subject.prototype.error = function (err) {\n        var _this = this;\n        errorContext(function () {\n            _this._throwIfClosed();\n            if (!_this.isStopped) {\n                _this.hasError = _this.isStopped = true;\n                _this.thrownError = err;\n                var observers = _this.observers;\n                while (observers.length) {\n                    observers.shift().error(err);\n                }\n            }\n        });\n    };\n    Subject.prototype.complete = function () {\n        var _this = this;\n        errorContext(function () {\n            _this._throwIfClosed();\n            if (!_this.isStopped) {\n                _this.isStopped = true;\n                var observers = _this.observers;\n                while (observers.length) {\n                    observers.shift().complete();\n                }\n            }\n        });\n    };\n    Subject.prototype.unsubscribe = function () {\n        this.isStopped = this.closed = true;\n        this.observers = this.currentObservers = null;\n    };\n    Object.defineProperty(Subject.prototype, \"observed\", {\n        get: function () {\n            var _a;\n            return ((_a = this.observers) === null || _a === void 0 ? void 0 : _a.length) > 0;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Subject.prototype._trySubscribe = function (subscriber) {\n        this._throwIfClosed();\n        return _super.prototype._trySubscribe.call(this, subscriber);\n    };\n    Subject.prototype._subscribe = function (subscriber) {\n        this._throwIfClosed();\n        this._checkFinalizedStatuses(subscriber);\n        return this._innerSubscribe(subscriber);\n    };\n    Subject.prototype._innerSubscribe = function (subscriber) {\n        var _this = this;\n        var _a = this, hasError = _a.hasError, isStopped = _a.isStopped, observers = _a.observers;\n        if (hasError || isStopped) {\n            return EMPTY_SUBSCRIPTION;\n        }\n        this.currentObservers = null;\n        observers.push(subscriber);\n        return new Subscription(function () {\n            _this.currentObservers = null;\n            arrRemove(observers, subscriber);\n        });\n    };\n    Subject.prototype._checkFinalizedStatuses = function (subscriber) {\n        var _a = this, hasError = _a.hasError, thrownError = _a.thrownError, isStopped = _a.isStopped;\n        if (hasError) {\n            subscriber.error(thrownError);\n        }\n        else if (isStopped) {\n            subscriber.complete();\n        }\n    };\n    Subject.prototype.asObservable = function () {\n        var observable = new Observable();\n        observable.source = this;\n        return observable;\n    };\n    Subject.create = function (destination, source) {\n        return new AnonymousSubject(destination, source);\n    };\n    return Subject;\n}(Observable));\nexport { Subject };\nvar AnonymousSubject = (function (_super) {\n    __extends(AnonymousSubject, _super);\n    function AnonymousSubject(destination, source) {\n        var _this = _super.call(this) || this;\n        _this.destination = destination;\n        _this.source = source;\n        return _this;\n    }\n    AnonymousSubject.prototype.next = function (value) {\n        var _a, _b;\n        (_b = (_a = this.destination) === null || _a === void 0 ? void 0 : _a.next) === null || _b === void 0 ? void 0 : _b.call(_a, value);\n    };\n    AnonymousSubject.prototype.error = function (err) {\n        var _a, _b;\n        (_b = (_a = this.destination) === null || _a === void 0 ? void 0 : _a.error) === null || _b === void 0 ? void 0 : _b.call(_a, err);\n    };\n    AnonymousSubject.prototype.complete = function () {\n        var _a, _b;\n        (_b = (_a = this.destination) === null || _a === void 0 ? void 0 : _a.complete) === null || _b === void 0 ? void 0 : _b.call(_a);\n    };\n    AnonymousSubject.prototype._subscribe = function (subscriber) {\n        var _a, _b;\n        return (_b = (_a = this.source) === null || _a === void 0 ? void 0 : _a.subscribe(subscriber)) !== null && _b !== void 0 ? _b : EMPTY_SUBSCRIPTION;\n    };\n    return AnonymousSubject;\n}(Subject));\nexport { AnonymousSubject };\n//# sourceMappingURL=Subject.js.map","import { __extends } from \"tslib\";\nimport { Subject } from './Subject';\nvar BehaviorSubject = (function (_super) {\n    __extends(BehaviorSubject, _super);\n    function BehaviorSubject(_value) {\n        var _this = _super.call(this) || this;\n        _this._value = _value;\n        return _this;\n    }\n    Object.defineProperty(BehaviorSubject.prototype, \"value\", {\n        get: function () {\n            return this.getValue();\n        },\n        enumerable: false,\n        configurable: true\n    });\n    BehaviorSubject.prototype._subscribe = function (subscriber) {\n        var subscription = _super.prototype._subscribe.call(this, subscriber);\n        !subscription.closed && subscriber.next(this._value);\n        return subscription;\n    };\n    BehaviorSubject.prototype.getValue = function () {\n        var _a = this, hasError = _a.hasError, thrownError = _a.thrownError, _value = _a._value;\n        if (hasError) {\n            throw thrownError;\n        }\n        this._throwIfClosed();\n        return _value;\n    };\n    BehaviorSubject.prototype.next = function (value) {\n        _super.prototype.next.call(this, (this._value = value));\n    };\n    return BehaviorSubject;\n}(Subject));\nexport { BehaviorSubject };\n//# sourceMappingURL=BehaviorSubject.js.map","export var dateTimestampProvider = {\n    now: function () {\n        return (dateTimestampProvider.delegate || Date).now();\n    },\n    delegate: undefined,\n};\n//# sourceMappingURL=dateTimestampProvider.js.map","import { __extends } from \"tslib\";\nimport { Subject } from './Subject';\nimport { dateTimestampProvider } from './scheduler/dateTimestampProvider';\nvar ReplaySubject = (function (_super) {\n    __extends(ReplaySubject, _super);\n    function ReplaySubject(_bufferSize, _windowTime, _timestampProvider) {\n        if (_bufferSize === void 0) { _bufferSize = Infinity; }\n        if (_windowTime === void 0) { _windowTime = Infinity; }\n        if (_timestampProvider === void 0) { _timestampProvider = dateTimestampProvider; }\n        var _this = _super.call(this) || this;\n        _this._bufferSize = _bufferSize;\n        _this._windowTime = _windowTime;\n        _this._timestampProvider = _timestampProvider;\n        _this._buffer = [];\n        _this._infiniteTimeWindow = true;\n        _this._infiniteTimeWindow = _windowTime === Infinity;\n        _this._bufferSize = Math.max(1, _bufferSize);\n        _this._windowTime = Math.max(1, _windowTime);\n        return _this;\n    }\n    ReplaySubject.prototype.next = function (value) {\n        var _a = this, isStopped = _a.isStopped, _buffer = _a._buffer, _infiniteTimeWindow = _a._infiniteTimeWindow, _timestampProvider = _a._timestampProvider, _windowTime = _a._windowTime;\n        if (!isStopped) {\n            _buffer.push(value);\n            !_infiniteTimeWindow && _buffer.push(_timestampProvider.now() + _windowTime);\n        }\n        this._trimBuffer();\n        _super.prototype.next.call(this, value);\n    };\n    ReplaySubject.prototype._subscribe = function (subscriber) {\n        this._throwIfClosed();\n        this._trimBuffer();\n        var subscription = this._innerSubscribe(subscriber);\n        var _a = this, _infiniteTimeWindow = _a._infiniteTimeWindow, _buffer = _a._buffer;\n        var copy = _buffer.slice();\n        for (var i = 0; i < copy.length && !subscriber.closed; i += _infiniteTimeWindow ? 1 : 2) {\n            subscriber.next(copy[i]);\n        }\n        this._checkFinalizedStatuses(subscriber);\n        return subscription;\n    };\n    ReplaySubject.prototype._trimBuffer = function () {\n        var _a = this, _bufferSize = _a._bufferSize, _timestampProvider = _a._timestampProvider, _buffer = _a._buffer, _infiniteTimeWindow = _a._infiniteTimeWindow;\n        var adjustedBufferSize = (_infiniteTimeWindow ? 1 : 2) * _bufferSize;\n        _bufferSize < Infinity && adjustedBufferSize < _buffer.length && _buffer.splice(0, _buffer.length - adjustedBufferSize);\n        if (!_infiniteTimeWindow) {\n            var now = _timestampProvider.now();\n            var last = 0;\n            for (var i = 1; i < _buffer.length && _buffer[i] <= now; i += 2) {\n                last = i;\n            }\n            last && _buffer.splice(0, last + 1);\n        }\n    };\n    return ReplaySubject;\n}(Subject));\nexport { ReplaySubject };\n//# sourceMappingURL=ReplaySubject.js.map","import { __extends } from \"tslib\";\nimport { Subscription } from '../Subscription';\nvar Action = (function (_super) {\n    __extends(Action, _super);\n    function Action(scheduler, work) {\n        return _super.call(this) || this;\n    }\n    Action.prototype.schedule = function (state, delay) {\n        if (delay === void 0) { delay = 0; }\n        return this;\n    };\n    return Action;\n}(Subscription));\nexport { Action };\n//# sourceMappingURL=Action.js.map","import { __read, __spreadArray } from \"tslib\";\nexport var intervalProvider = {\n    setInterval: function (handler, timeout) {\n        var args = [];\n        for (var _i = 2; _i < arguments.length; _i++) {\n            args[_i - 2] = arguments[_i];\n        }\n        var delegate = intervalProvider.delegate;\n        if (delegate === null || delegate === void 0 ? void 0 : delegate.setInterval) {\n            return delegate.setInterval.apply(delegate, __spreadArray([handler, timeout], __read(args)));\n        }\n        return setInterval.apply(void 0, __spreadArray([handler, timeout], __read(args)));\n    },\n    clearInterval: function (handle) {\n        var delegate = intervalProvider.delegate;\n        return ((delegate === null || delegate === void 0 ? void 0 : delegate.clearInterval) || clearInterval)(handle);\n    },\n    delegate: undefined,\n};\n//# sourceMappingURL=intervalProvider.js.map","import { __extends } from \"tslib\";\nimport { Action } from './Action';\nimport { intervalProvider } from './intervalProvider';\nimport { arrRemove } from '../util/arrRemove';\nvar AsyncAction = (function (_super) {\n    __extends(AsyncAction, _super);\n    function AsyncAction(scheduler, work) {\n        var _this = _super.call(this, scheduler, work) || this;\n        _this.scheduler = scheduler;\n        _this.work = work;\n        _this.pending = false;\n        return _this;\n    }\n    AsyncAction.prototype.schedule = function (state, delay) {\n        var _a;\n        if (delay === void 0) { delay = 0; }\n        if (this.closed) {\n            return this;\n        }\n        this.state = state;\n        var id = this.id;\n        var scheduler = this.scheduler;\n        if (id != null) {\n            this.id = this.recycleAsyncId(scheduler, id, delay);\n        }\n        this.pending = true;\n        this.delay = delay;\n        this.id = (_a = this.id) !== null && _a !== void 0 ? _a : this.requestAsyncId(scheduler, this.id, delay);\n        return this;\n    };\n    AsyncAction.prototype.requestAsyncId = function (scheduler, _id, delay) {\n        if (delay === void 0) { delay = 0; }\n        return intervalProvider.setInterval(scheduler.flush.bind(scheduler, this), delay);\n    };\n    AsyncAction.prototype.recycleAsyncId = function (_scheduler, id, delay) {\n        if (delay === void 0) { delay = 0; }\n        if (delay != null && this.delay === delay && this.pending === false) {\n            return id;\n        }\n        if (id != null) {\n            intervalProvider.clearInterval(id);\n        }\n        return undefined;\n    };\n    AsyncAction.prototype.execute = function (state, delay) {\n        if (this.closed) {\n            return new Error('executing a cancelled action');\n        }\n        this.pending = false;\n        var error = this._execute(state, delay);\n        if (error) {\n            return error;\n        }\n        else if (this.pending === false && this.id != null) {\n            this.id = this.recycleAsyncId(this.scheduler, this.id, null);\n        }\n    };\n    AsyncAction.prototype._execute = function (state, _delay) {\n        var errored = false;\n        var errorValue;\n        try {\n            this.work(state);\n        }\n        catch (e) {\n            errored = true;\n            errorValue = e ? e : new Error('Scheduled action threw falsy error');\n        }\n        if (errored) {\n            this.unsubscribe();\n            return errorValue;\n        }\n    };\n    AsyncAction.prototype.unsubscribe = function () {\n        if (!this.closed) {\n            var _a = this, id = _a.id, scheduler = _a.scheduler;\n            var actions = scheduler.actions;\n            this.work = this.state = this.scheduler = null;\n            this.pending = false;\n            arrRemove(actions, this);\n            if (id != null) {\n                this.id = this.recycleAsyncId(scheduler, id, null);\n            }\n            this.delay = null;\n            _super.prototype.unsubscribe.call(this);\n        }\n    };\n    return AsyncAction;\n}(Action));\nexport { AsyncAction };\n//# sourceMappingURL=AsyncAction.js.map","import { dateTimestampProvider } from './scheduler/dateTimestampProvider';\nvar Scheduler = (function () {\n    function Scheduler(schedulerActionCtor, now) {\n        if (now === void 0) { now = Scheduler.now; }\n        this.schedulerActionCtor = schedulerActionCtor;\n        this.now = now;\n    }\n    Scheduler.prototype.schedule = function (work, delay, state) {\n        if (delay === void 0) { delay = 0; }\n        return new this.schedulerActionCtor(this, work).schedule(state, delay);\n    };\n    Scheduler.now = dateTimestampProvider.now;\n    return Scheduler;\n}());\nexport { Scheduler };\n//# sourceMappingURL=Scheduler.js.map","import { __extends } from \"tslib\";\nimport { Scheduler } from '../Scheduler';\nvar AsyncScheduler = (function (_super) {\n    __extends(AsyncScheduler, _super);\n    function AsyncScheduler(SchedulerAction, now) {\n        if (now === void 0) { now = Scheduler.now; }\n        var _this = _super.call(this, SchedulerAction, now) || this;\n        _this.actions = [];\n        _this._active = false;\n        return _this;\n    }\n    AsyncScheduler.prototype.flush = function (action) {\n        var actions = this.actions;\n        if (this._active) {\n            actions.push(action);\n            return;\n        }\n        var error;\n        this._active = true;\n        do {\n            if ((error = action.execute(action.state, action.delay))) {\n                break;\n            }\n        } while ((action = actions.shift()));\n        this._active = false;\n        if (error) {\n            while ((action = actions.shift())) {\n                action.unsubscribe();\n            }\n            throw error;\n        }\n    };\n    return AsyncScheduler;\n}(Scheduler));\nexport { AsyncScheduler };\n//# sourceMappingURL=AsyncScheduler.js.map","import { AsyncAction } from './AsyncAction';\nimport { AsyncScheduler } from './AsyncScheduler';\nexport var asyncScheduler = new AsyncScheduler(AsyncAction);\nexport var async = asyncScheduler;\n//# sourceMappingURL=async.js.map","import { Observable } from '../Observable';\nexport var EMPTY = new Observable(function (subscriber) { return subscriber.complete(); });\nexport function empty(scheduler) {\n    return scheduler ? emptyScheduled(scheduler) : EMPTY;\n}\nfunction emptyScheduled(scheduler) {\n    return new Observable(function (subscriber) { return scheduler.schedule(function () { return subscriber.complete(); }); });\n}\n//# sourceMappingURL=empty.js.map","import { isFunction } from './isFunction';\nexport function isScheduler(value) {\n    return value && isFunction(value.schedule);\n}\n//# sourceMappingURL=isScheduler.js.map","import { isFunction } from './isFunction';\nimport { isScheduler } from './isScheduler';\nfunction last(arr) {\n    return arr[arr.length - 1];\n}\nexport function popResultSelector(args) {\n    return isFunction(last(args)) ? args.pop() : undefined;\n}\nexport function popScheduler(args) {\n    return isScheduler(last(args)) ? args.pop() : undefined;\n}\nexport function popNumber(args, defaultValue) {\n    return typeof last(args) === 'number' ? args.pop() : defaultValue;\n}\n//# sourceMappingURL=args.js.map","export var isArrayLike = (function (x) { return x && typeof x.length === 'number' && typeof x !== 'function'; });\n//# sourceMappingURL=isArrayLike.js.map","import { isFunction } from \"./isFunction\";\nexport function isPromise(value) {\n    return isFunction(value === null || value === void 0 ? void 0 : value.then);\n}\n//# sourceMappingURL=isPromise.js.map","import { observable as Symbol_observable } from '../symbol/observable';\nimport { isFunction } from './isFunction';\nexport function isInteropObservable(input) {\n    return isFunction(input[Symbol_observable]);\n}\n//# sourceMappingURL=isInteropObservable.js.map","import { isFunction } from './isFunction';\nexport function isAsyncIterable(obj) {\n    return Symbol.asyncIterator && isFunction(obj === null || obj === void 0 ? void 0 : obj[Symbol.asyncIterator]);\n}\n//# sourceMappingURL=isAsyncIterable.js.map","export function createInvalidObservableTypeError(input) {\n    return new TypeError(\"You provided \" + (input !== null && typeof input === 'object' ? 'an invalid object' : \"'\" + input + \"'\") + \" where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.\");\n}\n//# sourceMappingURL=throwUnobservableError.js.map","export function getSymbolIterator() {\n    if (typeof Symbol !== 'function' || !Symbol.iterator) {\n        return '@@iterator';\n    }\n    return Symbol.iterator;\n}\nexport var iterator = getSymbolIterator();\n//# sourceMappingURL=iterator.js.map","import { iterator as Symbol_iterator } from '../symbol/iterator';\nimport { isFunction } from './isFunction';\nexport function isIterable(input) {\n    return isFunction(input === null || input === void 0 ? void 0 : input[Symbol_iterator]);\n}\n//# sourceMappingURL=isIterable.js.map","import { __asyncGenerator, __await, __generator } from \"tslib\";\nimport { isFunction } from './isFunction';\nexport function readableStreamLikeToAsyncGenerator(readableStream) {\n    return __asyncGenerator(this, arguments, function readableStreamLikeToAsyncGenerator_1() {\n        var reader, _a, value, done;\n        return __generator(this, function (_b) {\n            switch (_b.label) {\n                case 0:\n                    reader = readableStream.getReader();\n                    _b.label = 1;\n                case 1:\n                    _b.trys.push([1, , 9, 10]);\n                    _b.label = 2;\n                case 2:\n                    if (!true) return [3, 8];\n                    return [4, __await(reader.read())];\n                case 3:\n                    _a = _b.sent(), value = _a.value, done = _a.done;\n                    if (!done) return [3, 5];\n                    return [4, __await(void 0)];\n                case 4: return [2, _b.sent()];\n                case 5: return [4, __await(value)];\n                case 6: return [4, _b.sent()];\n                case 7:\n                    _b.sent();\n                    return [3, 2];\n                case 8: return [3, 10];\n                case 9:\n                    reader.releaseLock();\n                    return [7];\n                case 10: return [2];\n            }\n        });\n    });\n}\nexport function isReadableStreamLike(obj) {\n    return isFunction(obj === null || obj === void 0 ? void 0 : obj.getReader);\n}\n//# sourceMappingURL=isReadableStreamLike.js.map","import { __asyncValues, __awaiter, __generator, __values } from \"tslib\";\nimport { isArrayLike } from '../util/isArrayLike';\nimport { isPromise } from '../util/isPromise';\nimport { Observable } from '../Observable';\nimport { isInteropObservable } from '../util/isInteropObservable';\nimport { isAsyncIterable } from '../util/isAsyncIterable';\nimport { createInvalidObservableTypeError } from '../util/throwUnobservableError';\nimport { isIterable } from '../util/isIterable';\nimport { isReadableStreamLike, readableStreamLikeToAsyncGenerator } from '../util/isReadableStreamLike';\nimport { isFunction } from '../util/isFunction';\nimport { reportUnhandledError } from '../util/reportUnhandledError';\nimport { observable as Symbol_observable } from '../symbol/observable';\nexport function innerFrom(input) {\n    if (input instanceof Observable) {\n        return input;\n    }\n    if (input != null) {\n        if (isInteropObservable(input)) {\n            return fromInteropObservable(input);\n        }\n        if (isArrayLike(input)) {\n            return fromArrayLike(input);\n        }\n        if (isPromise(input)) {\n            return fromPromise(input);\n        }\n        if (isAsyncIterable(input)) {\n            return fromAsyncIterable(input);\n        }\n        if (isIterable(input)) {\n            return fromIterable(input);\n        }\n        if (isReadableStreamLike(input)) {\n            return fromReadableStreamLike(input);\n        }\n    }\n    throw createInvalidObservableTypeError(input);\n}\nexport function fromInteropObservable(obj) {\n    return new Observable(function (subscriber) {\n        var obs = obj[Symbol_observable]();\n        if (isFunction(obs.subscribe)) {\n            return obs.subscribe(subscriber);\n        }\n        throw new TypeError('Provided object does not correctly implement Symbol.observable');\n    });\n}\nexport function fromArrayLike(array) {\n    return new Observable(function (subscriber) {\n        for (var i = 0; i < array.length && !subscriber.closed; i++) {\n            subscriber.next(array[i]);\n        }\n        subscriber.complete();\n    });\n}\nexport function fromPromise(promise) {\n    return new Observable(function (subscriber) {\n        promise\n            .then(function (value) {\n            if (!subscriber.closed) {\n                subscriber.next(value);\n                subscriber.complete();\n            }\n        }, function (err) { return subscriber.error(err); })\n            .then(null, reportUnhandledError);\n    });\n}\nexport function fromIterable(iterable) {\n    return new Observable(function (subscriber) {\n        var e_1, _a;\n        try {\n            for (var iterable_1 = __values(iterable), iterable_1_1 = iterable_1.next(); !iterable_1_1.done; iterable_1_1 = iterable_1.next()) {\n                var value = iterable_1_1.value;\n                subscriber.next(value);\n                if (subscriber.closed) {\n                    return;\n                }\n            }\n        }\n        catch (e_1_1) { e_1 = { error: e_1_1 }; }\n        finally {\n            try {\n                if (iterable_1_1 && !iterable_1_1.done && (_a = iterable_1.return)) _a.call(iterable_1);\n            }\n            finally { if (e_1) throw e_1.error; }\n        }\n        subscriber.complete();\n    });\n}\nexport function fromAsyncIterable(asyncIterable) {\n    return new Observable(function (subscriber) {\n        process(asyncIterable, subscriber).catch(function (err) { return subscriber.error(err); });\n    });\n}\nexport function fromReadableStreamLike(readableStream) {\n    return fromAsyncIterable(readableStreamLikeToAsyncGenerator(readableStream));\n}\nfunction process(asyncIterable, subscriber) {\n    var asyncIterable_1, asyncIterable_1_1;\n    var e_2, _a;\n    return __awaiter(this, void 0, void 0, function () {\n        var value, e_2_1;\n        return __generator(this, function (_b) {\n            switch (_b.label) {\n                case 0:\n                    _b.trys.push([0, 5, 6, 11]);\n                    asyncIterable_1 = __asyncValues(asyncIterable);\n                    _b.label = 1;\n                case 1: return [4, asyncIterable_1.next()];\n                case 2:\n                    if (!(asyncIterable_1_1 = _b.sent(), !asyncIterable_1_1.done)) return [3, 4];\n                    value = asyncIterable_1_1.value;\n                    subscriber.next(value);\n                    if (subscriber.closed) {\n                        return [2];\n                    }\n                    _b.label = 3;\n                case 3: return [3, 1];\n                case 4: return [3, 11];\n                case 5:\n                    e_2_1 = _b.sent();\n                    e_2 = { error: e_2_1 };\n                    return [3, 11];\n                case 6:\n                    _b.trys.push([6, , 9, 10]);\n                    if (!(asyncIterable_1_1 && !asyncIterable_1_1.done && (_a = asyncIterable_1.return))) return [3, 8];\n                    return [4, _a.call(asyncIterable_1)];\n                case 7:\n                    _b.sent();\n                    _b.label = 8;\n                case 8: return [3, 10];\n                case 9:\n                    if (e_2) throw e_2.error;\n                    return [7];\n                case 10: return [7];\n                case 11:\n                    subscriber.complete();\n                    return [2];\n            }\n        });\n    });\n}\n//# sourceMappingURL=innerFrom.js.map","export function executeSchedule(parentSubscription, scheduler, work, delay, repeat) {\n    if (delay === void 0) { delay = 0; }\n    if (repeat === void 0) { repeat = false; }\n    var scheduleSubscription = scheduler.schedule(function () {\n        work();\n        if (repeat) {\n            parentSubscription.add(this.schedule(null, delay));\n        }\n        else {\n            this.unsubscribe();\n        }\n    }, delay);\n    parentSubscription.add(scheduleSubscription);\n    if (!repeat) {\n        return scheduleSubscription;\n    }\n}\n//# sourceMappingURL=executeSchedule.js.map","import { executeSchedule } from '../util/executeSchedule';\nimport { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function observeOn(scheduler, delay) {\n    if (delay === void 0) { delay = 0; }\n    return operate(function (source, subscriber) {\n        source.subscribe(createOperatorSubscriber(subscriber, function (value) { return executeSchedule(subscriber, scheduler, function () { return subscriber.next(value); }, delay); }, function () { return executeSchedule(subscriber, scheduler, function () { return subscriber.complete(); }, delay); }, function (err) { return executeSchedule(subscriber, scheduler, function () { return subscriber.error(err); }, delay); }));\n    });\n}\n//# sourceMappingURL=observeOn.js.map","import { operate } from '../util/lift';\nexport function subscribeOn(scheduler, delay) {\n    if (delay === void 0) { delay = 0; }\n    return operate(function (source, subscriber) {\n        subscriber.add(scheduler.schedule(function () { return source.subscribe(subscriber); }, delay));\n    });\n}\n//# sourceMappingURL=subscribeOn.js.map","import { innerFrom } from '../observable/innerFrom';\nimport { observeOn } from '../operators/observeOn';\nimport { subscribeOn } from '../operators/subscribeOn';\nexport function scheduleObservable(input, scheduler) {\n    return innerFrom(input).pipe(subscribeOn(scheduler), observeOn(scheduler));\n}\n//# sourceMappingURL=scheduleObservable.js.map","import { innerFrom } from '../observable/innerFrom';\nimport { observeOn } from '../operators/observeOn';\nimport { subscribeOn } from '../operators/subscribeOn';\nexport function schedulePromise(input, scheduler) {\n    return innerFrom(input).pipe(subscribeOn(scheduler), observeOn(scheduler));\n}\n//# sourceMappingURL=schedulePromise.js.map","import { Observable } from '../Observable';\nexport function scheduleArray(input, scheduler) {\n    return new Observable(function (subscriber) {\n        var i = 0;\n        return scheduler.schedule(function () {\n            if (i === input.length) {\n                subscriber.complete();\n            }\n            else {\n                subscriber.next(input[i++]);\n                if (!subscriber.closed) {\n                    this.schedule();\n                }\n            }\n        });\n    });\n}\n//# sourceMappingURL=scheduleArray.js.map","import { Observable } from '../Observable';\nimport { iterator as Symbol_iterator } from '../symbol/iterator';\nimport { isFunction } from '../util/isFunction';\nimport { executeSchedule } from '../util/executeSchedule';\nexport function scheduleIterable(input, scheduler) {\n    return new Observable(function (subscriber) {\n        var iterator;\n        executeSchedule(subscriber, scheduler, function () {\n            iterator = input[Symbol_iterator]();\n            executeSchedule(subscriber, scheduler, function () {\n                var _a;\n                var value;\n                var done;\n                try {\n                    (_a = iterator.next(), value = _a.value, done = _a.done);\n                }\n                catch (err) {\n                    subscriber.error(err);\n                    return;\n                }\n                if (done) {\n                    subscriber.complete();\n                }\n                else {\n                    subscriber.next(value);\n                }\n            }, 0, true);\n        });\n        return function () { return isFunction(iterator === null || iterator === void 0 ? void 0 : iterator.return) && iterator.return(); };\n    });\n}\n//# sourceMappingURL=scheduleIterable.js.map","import { Observable } from '../Observable';\nimport { executeSchedule } from '../util/executeSchedule';\nexport function scheduleAsyncIterable(input, scheduler) {\n    if (!input) {\n        throw new Error('Iterable cannot be null');\n    }\n    return new Observable(function (subscriber) {\n        executeSchedule(subscriber, scheduler, function () {\n            var iterator = input[Symbol.asyncIterator]();\n            executeSchedule(subscriber, scheduler, function () {\n                iterator.next().then(function (result) {\n                    if (result.done) {\n                        subscriber.complete();\n                    }\n                    else {\n                        subscriber.next(result.value);\n                    }\n                });\n            }, 0, true);\n        });\n    });\n}\n//# sourceMappingURL=scheduleAsyncIterable.js.map","import { scheduleAsyncIterable } from './scheduleAsyncIterable';\nimport { readableStreamLikeToAsyncGenerator } from '../util/isReadableStreamLike';\nexport function scheduleReadableStreamLike(input, scheduler) {\n    return scheduleAsyncIterable(readableStreamLikeToAsyncGenerator(input), scheduler);\n}\n//# sourceMappingURL=scheduleReadableStreamLike.js.map","import { scheduleObservable } from './scheduleObservable';\nimport { schedulePromise } from './schedulePromise';\nimport { scheduleArray } from './scheduleArray';\nimport { scheduleIterable } from './scheduleIterable';\nimport { scheduleAsyncIterable } from './scheduleAsyncIterable';\nimport { isInteropObservable } from '../util/isInteropObservable';\nimport { isPromise } from '../util/isPromise';\nimport { isArrayLike } from '../util/isArrayLike';\nimport { isIterable } from '../util/isIterable';\nimport { isAsyncIterable } from '../util/isAsyncIterable';\nimport { createInvalidObservableTypeError } from '../util/throwUnobservableError';\nimport { isReadableStreamLike } from '../util/isReadableStreamLike';\nimport { scheduleReadableStreamLike } from './scheduleReadableStreamLike';\nexport function scheduled(input, scheduler) {\n    if (input != null) {\n        if (isInteropObservable(input)) {\n            return scheduleObservable(input, scheduler);\n        }\n        if (isArrayLike(input)) {\n            return scheduleArray(input, scheduler);\n        }\n        if (isPromise(input)) {\n            return schedulePromise(input, scheduler);\n        }\n        if (isAsyncIterable(input)) {\n            return scheduleAsyncIterable(input, scheduler);\n        }\n        if (isIterable(input)) {\n            return scheduleIterable(input, scheduler);\n        }\n        if (isReadableStreamLike(input)) {\n            return scheduleReadableStreamLike(input, scheduler);\n        }\n    }\n    throw createInvalidObservableTypeError(input);\n}\n//# sourceMappingURL=scheduled.js.map","import { scheduled } from '../scheduled/scheduled';\nimport { innerFrom } from './innerFrom';\nexport function from(input, scheduler) {\n    return scheduler ? scheduled(input, scheduler) : innerFrom(input);\n}\n//# sourceMappingURL=from.js.map","import { popScheduler } from '../util/args';\nimport { from } from './from';\nexport function of() {\n    var args = [];\n    for (var _i = 0; _i < arguments.length; _i++) {\n        args[_i] = arguments[_i];\n    }\n    var scheduler = popScheduler(args);\n    return from(args, scheduler);\n}\n//# sourceMappingURL=of.js.map","import { createErrorClass } from './createErrorClass';\nexport var EmptyError = createErrorClass(function (_super) {\n    return function EmptyErrorImpl() {\n        _super(this);\n        this.name = 'EmptyError';\n        this.message = 'no elements in sequence';\n    };\n});\n//# sourceMappingURL=EmptyError.js.map","import { EmptyError } from './util/EmptyError';\nimport { SafeSubscriber } from './Subscriber';\nexport function firstValueFrom(source, config) {\n    var hasConfig = typeof config === 'object';\n    return new Promise(function (resolve, reject) {\n        var subscriber = new SafeSubscriber({\n            next: function (value) {\n                resolve(value);\n                subscriber.unsubscribe();\n            },\n            error: reject,\n            complete: function () {\n                if (hasConfig) {\n                    resolve(config.defaultValue);\n                }\n                else {\n                    reject(new EmptyError());\n                }\n            },\n        });\n        source.subscribe(subscriber);\n    });\n}\n//# sourceMappingURL=firstValueFrom.js.map","export function isValidDate(value) {\n    return value instanceof Date && !isNaN(value);\n}\n//# sourceMappingURL=isDate.js.map","import { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function map(project, thisArg) {\n    return operate(function (source, subscriber) {\n        var index = 0;\n        source.subscribe(createOperatorSubscriber(subscriber, function (value) {\n            subscriber.next(project.call(thisArg, value, index++));\n        }));\n    });\n}\n//# sourceMappingURL=map.js.map","import { __read, __spreadArray } from \"tslib\";\nimport { map } from \"../operators/map\";\nvar isArray = Array.isArray;\nfunction callOrApply(fn, args) {\n    return isArray(args) ? fn.apply(void 0, __spreadArray([], __read(args))) : fn(args);\n}\nexport function mapOneOrManyArgs(fn) {\n    return map(function (args) { return callOrApply(fn, args); });\n}\n//# sourceMappingURL=mapOneOrManyArgs.js.map","var isArray = Array.isArray;\nvar getPrototypeOf = Object.getPrototypeOf, objectProto = Object.prototype, getKeys = Object.keys;\nexport function argsArgArrayOrObject(args) {\n    if (args.length === 1) {\n        var first_1 = args[0];\n        if (isArray(first_1)) {\n            return { args: first_1, keys: null };\n        }\n        if (isPOJO(first_1)) {\n            var keys = getKeys(first_1);\n            return {\n                args: keys.map(function (key) { return first_1[key]; }),\n                keys: keys,\n            };\n        }\n    }\n    return { args: args, keys: null };\n}\nfunction isPOJO(obj) {\n    return obj && typeof obj === 'object' && getPrototypeOf(obj) === objectProto;\n}\n//# sourceMappingURL=argsArgArrayOrObject.js.map","export function createObject(keys, values) {\n    return keys.reduce(function (result, key, i) { return ((result[key] = values[i]), result); }, {});\n}\n//# sourceMappingURL=createObject.js.map","import { Observable } from '../Observable';\nimport { argsArgArrayOrObject } from '../util/argsArgArrayOrObject';\nimport { from } from './from';\nimport { identity } from '../util/identity';\nimport { mapOneOrManyArgs } from '../util/mapOneOrManyArgs';\nimport { popResultSelector, popScheduler } from '../util/args';\nimport { createObject } from '../util/createObject';\nimport { createOperatorSubscriber } from '../operators/OperatorSubscriber';\nimport { executeSchedule } from '../util/executeSchedule';\nexport function combineLatest() {\n    var args = [];\n    for (var _i = 0; _i < arguments.length; _i++) {\n        args[_i] = arguments[_i];\n    }\n    var scheduler = popScheduler(args);\n    var resultSelector = popResultSelector(args);\n    var _a = argsArgArrayOrObject(args), observables = _a.args, keys = _a.keys;\n    if (observables.length === 0) {\n        return from([], scheduler);\n    }\n    var result = new Observable(combineLatestInit(observables, scheduler, keys\n        ?\n            function (values) { return createObject(keys, values); }\n        :\n            identity));\n    return resultSelector ? result.pipe(mapOneOrManyArgs(resultSelector)) : result;\n}\nexport function combineLatestInit(observables, scheduler, valueTransform) {\n    if (valueTransform === void 0) { valueTransform = identity; }\n    return function (subscriber) {\n        maybeSchedule(scheduler, function () {\n            var length = observables.length;\n            var values = new Array(length);\n            var active = length;\n            var remainingFirstValues = length;\n            var _loop_1 = function (i) {\n                maybeSchedule(scheduler, function () {\n                    var source = from(observables[i], scheduler);\n                    var hasFirstValue = false;\n                    source.subscribe(createOperatorSubscriber(subscriber, function (value) {\n                        values[i] = value;\n                        if (!hasFirstValue) {\n                            hasFirstValue = true;\n                            remainingFirstValues--;\n                        }\n                        if (!remainingFirstValues) {\n                            subscriber.next(valueTransform(values.slice()));\n                        }\n                    }, function () {\n                        if (!--active) {\n                            subscriber.complete();\n                        }\n                    }));\n                }, subscriber);\n            };\n            for (var i = 0; i < length; i++) {\n                _loop_1(i);\n            }\n        }, subscriber);\n    };\n}\nfunction maybeSchedule(scheduler, execute, subscription) {\n    if (scheduler) {\n        executeSchedule(subscription, scheduler, execute);\n    }\n    else {\n        execute();\n    }\n}\n//# sourceMappingURL=combineLatest.js.map","import { innerFrom } from '../observable/innerFrom';\nimport { executeSchedule } from '../util/executeSchedule';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function mergeInternals(source, subscriber, project, concurrent, onBeforeNext, expand, innerSubScheduler, additionalFinalizer) {\n    var buffer = [];\n    var active = 0;\n    var index = 0;\n    var isComplete = false;\n    var checkComplete = function () {\n        if (isComplete && !buffer.length && !active) {\n            subscriber.complete();\n        }\n    };\n    var outerNext = function (value) { return (active < concurrent ? doInnerSub(value) : buffer.push(value)); };\n    var doInnerSub = function (value) {\n        expand && subscriber.next(value);\n        active++;\n        var innerComplete = false;\n        innerFrom(project(value, index++)).subscribe(createOperatorSubscriber(subscriber, function (innerValue) {\n            onBeforeNext === null || onBeforeNext === void 0 ? void 0 : onBeforeNext(innerValue);\n            if (expand) {\n                outerNext(innerValue);\n            }\n            else {\n                subscriber.next(innerValue);\n            }\n        }, function () {\n            innerComplete = true;\n        }, undefined, function () {\n            if (innerComplete) {\n                try {\n                    active--;\n                    var _loop_1 = function () {\n                        var bufferedValue = buffer.shift();\n                        if (innerSubScheduler) {\n                            executeSchedule(subscriber, innerSubScheduler, function () { return doInnerSub(bufferedValue); });\n                        }\n                        else {\n                            doInnerSub(bufferedValue);\n                        }\n                    };\n                    while (buffer.length && active < concurrent) {\n                        _loop_1();\n                    }\n                    checkComplete();\n                }\n                catch (err) {\n                    subscriber.error(err);\n                }\n            }\n        }));\n    };\n    source.subscribe(createOperatorSubscriber(subscriber, outerNext, function () {\n        isComplete = true;\n        checkComplete();\n    }));\n    return function () {\n        additionalFinalizer === null || additionalFinalizer === void 0 ? void 0 : additionalFinalizer();\n    };\n}\n//# sourceMappingURL=mergeInternals.js.map","import { map } from './map';\nimport { innerFrom } from '../observable/innerFrom';\nimport { operate } from '../util/lift';\nimport { mergeInternals } from './mergeInternals';\nimport { isFunction } from '../util/isFunction';\nexport function mergeMap(project, resultSelector, concurrent) {\n    if (concurrent === void 0) { concurrent = Infinity; }\n    if (isFunction(resultSelector)) {\n        return mergeMap(function (a, i) { return map(function (b, ii) { return resultSelector(a, b, i, ii); })(innerFrom(project(a, i))); }, concurrent);\n    }\n    else if (typeof resultSelector === 'number') {\n        concurrent = resultSelector;\n    }\n    return operate(function (source, subscriber) { return mergeInternals(source, subscriber, project, concurrent); });\n}\n//# sourceMappingURL=mergeMap.js.map","import { mergeMap } from './mergeMap';\nimport { identity } from '../util/identity';\nexport function mergeAll(concurrent) {\n    if (concurrent === void 0) { concurrent = Infinity; }\n    return mergeMap(identity, concurrent);\n}\n//# sourceMappingURL=mergeAll.js.map","import { mergeAll } from './mergeAll';\nexport function concatAll() {\n    return mergeAll(1);\n}\n//# sourceMappingURL=concatAll.js.map","import { concatAll } from '../operators/concatAll';\nimport { popScheduler } from '../util/args';\nimport { from } from './from';\nexport function concat() {\n    var args = [];\n    for (var _i = 0; _i < arguments.length; _i++) {\n        args[_i] = arguments[_i];\n    }\n    return concatAll()(from(args, popScheduler(args)));\n}\n//# sourceMappingURL=concat.js.map","import { __read } from \"tslib\";\nimport { innerFrom } from '../observable/innerFrom';\nimport { Observable } from '../Observable';\nimport { mergeMap } from '../operators/mergeMap';\nimport { isArrayLike } from '../util/isArrayLike';\nimport { isFunction } from '../util/isFunction';\nimport { mapOneOrManyArgs } from '../util/mapOneOrManyArgs';\nvar nodeEventEmitterMethods = ['addListener', 'removeListener'];\nvar eventTargetMethods = ['addEventListener', 'removeEventListener'];\nvar jqueryMethods = ['on', 'off'];\nexport function fromEvent(target, eventName, options, resultSelector) {\n    if (isFunction(options)) {\n        resultSelector = options;\n        options = undefined;\n    }\n    if (resultSelector) {\n        return fromEvent(target, eventName, options).pipe(mapOneOrManyArgs(resultSelector));\n    }\n    var _a = __read(isEventTarget(target)\n        ? eventTargetMethods.map(function (methodName) { return function (handler) { return target[methodName](eventName, handler, options); }; })\n        :\n            isNodeStyleEventEmitter(target)\n                ? nodeEventEmitterMethods.map(toCommonHandlerRegistry(target, eventName))\n                : isJQueryStyleEventEmitter(target)\n                    ? jqueryMethods.map(toCommonHandlerRegistry(target, eventName))\n                    : [], 2), add = _a[0], remove = _a[1];\n    if (!add) {\n        if (isArrayLike(target)) {\n            return mergeMap(function (subTarget) { return fromEvent(subTarget, eventName, options); })(innerFrom(target));\n        }\n    }\n    if (!add) {\n        throw new TypeError('Invalid event target');\n    }\n    return new Observable(function (subscriber) {\n        var handler = function () {\n            var args = [];\n            for (var _i = 0; _i < arguments.length; _i++) {\n                args[_i] = arguments[_i];\n            }\n            return subscriber.next(1 < args.length ? args : args[0]);\n        };\n        add(handler);\n        return function () { return remove(handler); };\n    });\n}\nfunction toCommonHandlerRegistry(target, eventName) {\n    return function (methodName) { return function (handler) { return target[methodName](eventName, handler); }; };\n}\nfunction isNodeStyleEventEmitter(target) {\n    return isFunction(target.addListener) && isFunction(target.removeListener);\n}\nfunction isJQueryStyleEventEmitter(target) {\n    return isFunction(target.on) && isFunction(target.off);\n}\nfunction isEventTarget(target) {\n    return isFunction(target.addEventListener) && isFunction(target.removeEventListener);\n}\n//# sourceMappingURL=fromEvent.js.map","import { Observable } from '../Observable';\nimport { isFunction } from '../util/isFunction';\nimport { mapOneOrManyArgs } from '../util/mapOneOrManyArgs';\nexport function fromEventPattern(addHandler, removeHandler, resultSelector) {\n    if (resultSelector) {\n        return fromEventPattern(addHandler, removeHandler).pipe(mapOneOrManyArgs(resultSelector));\n    }\n    return new Observable(function (subscriber) {\n        var handler = function () {\n            var e = [];\n            for (var _i = 0; _i < arguments.length; _i++) {\n                e[_i] = arguments[_i];\n            }\n            return subscriber.next(e.length === 1 ? e[0] : e);\n        };\n        var retValue = addHandler(handler);\n        return isFunction(removeHandler) ? function () { return removeHandler(handler, retValue); } : undefined;\n    });\n}\n//# sourceMappingURL=fromEventPattern.js.map","import { Observable } from '../Observable';\nimport { async as asyncScheduler } from '../scheduler/async';\nimport { isScheduler } from '../util/isScheduler';\nimport { isValidDate } from '../util/isDate';\nexport function timer(dueTime, intervalOrScheduler, scheduler) {\n    if (dueTime === void 0) { dueTime = 0; }\n    if (scheduler === void 0) { scheduler = asyncScheduler; }\n    var intervalDuration = -1;\n    if (intervalOrScheduler != null) {\n        if (isScheduler(intervalOrScheduler)) {\n            scheduler = intervalOrScheduler;\n        }\n        else {\n            intervalDuration = intervalOrScheduler;\n        }\n    }\n    return new Observable(function (subscriber) {\n        var due = isValidDate(dueTime) ? +dueTime - scheduler.now() : dueTime;\n        if (due < 0) {\n            due = 0;\n        }\n        var n = 0;\n        return scheduler.schedule(function () {\n            if (!subscriber.closed) {\n                subscriber.next(n++);\n                if (0 <= intervalDuration) {\n                    this.schedule(undefined, intervalDuration);\n                }\n                else {\n                    subscriber.complete();\n                }\n            }\n        }, due);\n    });\n}\n//# sourceMappingURL=timer.js.map","import { mergeAll } from '../operators/mergeAll';\nimport { innerFrom } from './innerFrom';\nimport { EMPTY } from './empty';\nimport { popNumber, popScheduler } from '../util/args';\nimport { from } from './from';\nexport function merge() {\n    var args = [];\n    for (var _i = 0; _i < arguments.length; _i++) {\n        args[_i] = arguments[_i];\n    }\n    var scheduler = popScheduler(args);\n    var concurrent = popNumber(args, Infinity);\n    var sources = args;\n    return !sources.length\n        ?\n            EMPTY\n        : sources.length === 1\n            ?\n                innerFrom(sources[0])\n            :\n                mergeAll(concurrent)(from(sources, scheduler));\n}\n//# sourceMappingURL=merge.js.map","var isArray = Array.isArray;\nexport function argsOrArgArray(args) {\n    return args.length === 1 && isArray(args[0]) ? args[0] : args;\n}\n//# sourceMappingURL=argsOrArgArray.js.map","import { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function filter(predicate, thisArg) {\n    return operate(function (source, subscriber) {\n        var index = 0;\n        source.subscribe(createOperatorSubscriber(subscriber, function (value) { return predicate.call(thisArg, value, index++) && subscriber.next(value); }));\n    });\n}\n//# sourceMappingURL=filter.js.map","import { Observable } from '../Observable';\nimport { innerFrom } from './innerFrom';\nimport { argsOrArgArray } from '../util/argsOrArgArray';\nimport { createOperatorSubscriber } from '../operators/OperatorSubscriber';\nexport function race() {\n    var sources = [];\n    for (var _i = 0; _i < arguments.length; _i++) {\n        sources[_i] = arguments[_i];\n    }\n    sources = argsOrArgArray(sources);\n    return sources.length === 1 ? innerFrom(sources[0]) : new Observable(raceInit(sources));\n}\nexport function raceInit(sources) {\n    return function (subscriber) {\n        var subscriptions = [];\n        var _loop_1 = function (i) {\n            subscriptions.push(innerFrom(sources[i]).subscribe(createOperatorSubscriber(subscriber, function (value) {\n                if (subscriptions) {\n                    for (var s = 0; s < subscriptions.length; s++) {\n                        s !== i && subscriptions[s].unsubscribe();\n                    }\n                    subscriptions = null;\n                }\n                subscriber.next(value);\n            })));\n        };\n        for (var i = 0; subscriptions && !subscriber.closed && i < sources.length; i++) {\n            _loop_1(i);\n        }\n    };\n}\n//# sourceMappingURL=race.js.map","import { identity } from '../util/identity';\nimport { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function distinctUntilChanged(comparator, keySelector) {\n    if (keySelector === void 0) { keySelector = identity; }\n    comparator = comparator !== null && comparator !== void 0 ? comparator : defaultCompare;\n    return operate(function (source, subscriber) {\n        var previousKey;\n        var first = true;\n        source.subscribe(createOperatorSubscriber(subscriber, function (value) {\n            var currentKey = keySelector(value);\n            if (first || !comparator(previousKey, currentKey)) {\n                first = false;\n                previousKey = currentKey;\n                subscriber.next(value);\n            }\n        }));\n    });\n}\nfunction defaultCompare(a, b) {\n    return a === b;\n}\n//# sourceMappingURL=distinctUntilChanged.js.map","import { map } from './map';\nimport { innerFrom } from '../observable/innerFrom';\nimport { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function exhaustMap(project, resultSelector) {\n    if (resultSelector) {\n        return function (source) {\n            return source.pipe(exhaustMap(function (a, i) { return innerFrom(project(a, i)).pipe(map(function (b, ii) { return resultSelector(a, b, i, ii); })); }));\n        };\n    }\n    return operate(function (source, subscriber) {\n        var index = 0;\n        var innerSub = null;\n        var isComplete = false;\n        source.subscribe(createOperatorSubscriber(subscriber, function (outerValue) {\n            if (!innerSub) {\n                innerSub = createOperatorSubscriber(subscriber, undefined, function () {\n                    innerSub = null;\n                    isComplete && subscriber.complete();\n                });\n                innerFrom(project(outerValue, index++)).subscribe(innerSub);\n            }\n        }, function () {\n            isComplete = true;\n            !innerSub && subscriber.complete();\n        }));\n    });\n}\n//# sourceMappingURL=exhaustMap.js.map","import { __read, __spreadArray } from \"tslib\";\nimport { innerFrom } from '../observable/innerFrom';\nimport { Subject } from '../Subject';\nimport { SafeSubscriber } from '../Subscriber';\nimport { operate } from '../util/lift';\nexport function share(options) {\n    if (options === void 0) { options = {}; }\n    var _a = options.connector, connector = _a === void 0 ? function () { return new Subject(); } : _a, _b = options.resetOnError, resetOnError = _b === void 0 ? true : _b, _c = options.resetOnComplete, resetOnComplete = _c === void 0 ? true : _c, _d = options.resetOnRefCountZero, resetOnRefCountZero = _d === void 0 ? true : _d;\n    return function (wrapperSource) {\n        var connection;\n        var resetConnection;\n        var subject;\n        var refCount = 0;\n        var hasCompleted = false;\n        var hasErrored = false;\n        var cancelReset = function () {\n            resetConnection === null || resetConnection === void 0 ? void 0 : resetConnection.unsubscribe();\n            resetConnection = undefined;\n        };\n        var reset = function () {\n            cancelReset();\n            connection = subject = undefined;\n            hasCompleted = hasErrored = false;\n        };\n        var resetAndUnsubscribe = function () {\n            var conn = connection;\n            reset();\n            conn === null || conn === void 0 ? void 0 : conn.unsubscribe();\n        };\n        return operate(function (source, subscriber) {\n            refCount++;\n            if (!hasErrored && !hasCompleted) {\n                cancelReset();\n            }\n            var dest = (subject = subject !== null && subject !== void 0 ? subject : connector());\n            subscriber.add(function () {\n                refCount--;\n                if (refCount === 0 && !hasErrored && !hasCompleted) {\n                    resetConnection = handleReset(resetAndUnsubscribe, resetOnRefCountZero);\n                }\n            });\n            dest.subscribe(subscriber);\n            if (!connection &&\n                refCount > 0) {\n                connection = new SafeSubscriber({\n                    next: function (value) { return dest.next(value); },\n                    error: function (err) {\n                        hasErrored = true;\n                        cancelReset();\n                        resetConnection = handleReset(reset, resetOnError, err);\n                        dest.error(err);\n                    },\n                    complete: function () {\n                        hasCompleted = true;\n                        cancelReset();\n                        resetConnection = handleReset(reset, resetOnComplete);\n                        dest.complete();\n                    },\n                });\n                innerFrom(source).subscribe(connection);\n            }\n        })(wrapperSource);\n    };\n}\nfunction handleReset(reset, on) {\n    var args = [];\n    for (var _i = 2; _i < arguments.length; _i++) {\n        args[_i - 2] = arguments[_i];\n    }\n    if (on === true) {\n        reset();\n        return;\n    }\n    if (on === false) {\n        return;\n    }\n    var onSubscriber = new SafeSubscriber({\n        next: function () {\n            onSubscriber.unsubscribe();\n            reset();\n        },\n    });\n    return innerFrom(on.apply(void 0, __spreadArray([], __read(args)))).subscribe(onSubscriber);\n}\n//# sourceMappingURL=share.js.map","import { ReplaySubject } from '../ReplaySubject';\nimport { share } from './share';\nexport function shareReplay(configOrBufferSize, windowTime, scheduler) {\n    var _a, _b, _c;\n    var bufferSize;\n    var refCount = false;\n    if (configOrBufferSize && typeof configOrBufferSize === 'object') {\n        (_a = configOrBufferSize.bufferSize, bufferSize = _a === void 0 ? Infinity : _a, _b = configOrBufferSize.windowTime, windowTime = _b === void 0 ? Infinity : _b, _c = configOrBufferSize.refCount, refCount = _c === void 0 ? false : _c, scheduler = configOrBufferSize.scheduler);\n    }\n    else {\n        bufferSize = (configOrBufferSize !== null && configOrBufferSize !== void 0 ? configOrBufferSize : Infinity);\n    }\n    return share({\n        connector: function () { return new ReplaySubject(bufferSize, windowTime, scheduler); },\n        resetOnError: true,\n        resetOnComplete: false,\n        resetOnRefCountZero: refCount,\n    });\n}\n//# sourceMappingURL=shareReplay.js.map","import { concat } from '../observable/concat';\nimport { popScheduler } from '../util/args';\nimport { operate } from '../util/lift';\nexport function startWith() {\n    var values = [];\n    for (var _i = 0; _i < arguments.length; _i++) {\n        values[_i] = arguments[_i];\n    }\n    var scheduler = popScheduler(values);\n    return operate(function (source, subscriber) {\n        (scheduler ? concat(values, source, scheduler) : concat(values, source)).subscribe(subscriber);\n    });\n}\n//# sourceMappingURL=startWith.js.map","import { innerFrom } from '../observable/innerFrom';\nimport { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nexport function switchMap(project, resultSelector) {\n    return operate(function (source, subscriber) {\n        var innerSubscriber = null;\n        var index = 0;\n        var isComplete = false;\n        var checkComplete = function () { return isComplete && !innerSubscriber && subscriber.complete(); };\n        source.subscribe(createOperatorSubscriber(subscriber, function (value) {\n            innerSubscriber === null || innerSubscriber === void 0 ? void 0 : innerSubscriber.unsubscribe();\n            var innerIndex = 0;\n            var outerIndex = index++;\n            innerFrom(project(value, outerIndex)).subscribe((innerSubscriber = createOperatorSubscriber(subscriber, function (innerValue) { return subscriber.next(resultSelector ? resultSelector(value, innerValue, outerIndex, innerIndex++) : innerValue); }, function () {\n                innerSubscriber = null;\n                checkComplete();\n            })));\n        }, function () {\n            isComplete = true;\n            checkComplete();\n        }));\n    });\n}\n//# sourceMappingURL=switchMap.js.map","import { switchMap } from './switchMap';\nimport { identity } from '../util/identity';\nexport function switchAll() {\n    return switchMap(identity);\n}\n//# sourceMappingURL=switchAll.js.map","import { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nimport { innerFrom } from '../observable/innerFrom';\nimport { noop } from '../util/noop';\nexport function takeUntil(notifier) {\n    return operate(function (source, subscriber) {\n        innerFrom(notifier).subscribe(createOperatorSubscriber(subscriber, function () { return subscriber.complete(); }, noop));\n        !subscriber.closed && source.subscribe(subscriber);\n    });\n}\n//# sourceMappingURL=takeUntil.js.map","import { isFunction } from '../util/isFunction';\nimport { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nimport { identity } from '../util/identity';\nexport function tap(observerOrNext, error, complete) {\n    var tapObserver = isFunction(observerOrNext) || error || complete\n        ?\n            { next: observerOrNext, error: error, complete: complete }\n        : observerOrNext;\n    return tapObserver\n        ? operate(function (source, subscriber) {\n            var _a;\n            (_a = tapObserver.subscribe) === null || _a === void 0 ? void 0 : _a.call(tapObserver);\n            var isUnsub = true;\n            source.subscribe(createOperatorSubscriber(subscriber, function (value) {\n                var _a;\n                (_a = tapObserver.next) === null || _a === void 0 ? void 0 : _a.call(tapObserver, value);\n                subscriber.next(value);\n            }, function () {\n                var _a;\n                isUnsub = false;\n                (_a = tapObserver.complete) === null || _a === void 0 ? void 0 : _a.call(tapObserver);\n                subscriber.complete();\n            }, function (err) {\n                var _a;\n                isUnsub = false;\n                (_a = tapObserver.error) === null || _a === void 0 ? void 0 : _a.call(tapObserver, err);\n                subscriber.error(err);\n            }, function () {\n                var _a, _b;\n                if (isUnsub) {\n                    (_a = tapObserver.unsubscribe) === null || _a === void 0 ? void 0 : _a.call(tapObserver);\n                }\n                (_b = tapObserver.finalize) === null || _b === void 0 ? void 0 : _b.call(tapObserver);\n            }));\n        })\n        :\n            identity;\n}\n//# sourceMappingURL=tap.js.map","import { operate } from '../util/lift';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nimport { innerFrom } from '../observable/innerFrom';\nexport function throttle(durationSelector, config) {\n    return operate(function (source, subscriber) {\n        var _a = config !== null && config !== void 0 ? config : {}, _b = _a.leading, leading = _b === void 0 ? true : _b, _c = _a.trailing, trailing = _c === void 0 ? false : _c;\n        var hasValue = false;\n        var sendValue = null;\n        var throttled = null;\n        var isComplete = false;\n        var endThrottling = function () {\n            throttled === null || throttled === void 0 ? void 0 : throttled.unsubscribe();\n            throttled = null;\n            if (trailing) {\n                send();\n                isComplete && subscriber.complete();\n            }\n        };\n        var cleanupThrottling = function () {\n            throttled = null;\n            isComplete && subscriber.complete();\n        };\n        var startThrottle = function (value) {\n            return (throttled = innerFrom(durationSelector(value)).subscribe(createOperatorSubscriber(subscriber, endThrottling, cleanupThrottling)));\n        };\n        var send = function () {\n            if (hasValue) {\n                hasValue = false;\n                var value = sendValue;\n                sendValue = null;\n                subscriber.next(value);\n                !isComplete && startThrottle(value);\n            }\n        };\n        source.subscribe(createOperatorSubscriber(subscriber, function (value) {\n            hasValue = true;\n            sendValue = value;\n            !(throttled && !throttled.closed) && (leading ? send() : startThrottle(value));\n        }, function () {\n            isComplete = true;\n            !(trailing && hasValue && throttled && !throttled.closed) && subscriber.complete();\n        }));\n    });\n}\n//# sourceMappingURL=throttle.js.map","import { asyncScheduler } from '../scheduler/async';\nimport { throttle } from './throttle';\nimport { timer } from '../observable/timer';\nexport function throttleTime(duration, scheduler, config) {\n    if (scheduler === void 0) { scheduler = asyncScheduler; }\n    var duration$ = timer(duration, scheduler);\n    return throttle(function () { return duration$; }, config);\n}\n//# sourceMappingURL=throttleTime.js.map","import { __values } from \"tslib\";\nimport { Subject } from '../Subject';\nimport { Subscription } from '../Subscription';\nimport { operate } from '../util/lift';\nimport { innerFrom } from '../observable/innerFrom';\nimport { createOperatorSubscriber } from './OperatorSubscriber';\nimport { noop } from '../util/noop';\nimport { arrRemove } from '../util/arrRemove';\nexport function windowToggle(openings, closingSelector) {\n    return operate(function (source, subscriber) {\n        var windows = [];\n        var handleError = function (err) {\n            while (0 < windows.length) {\n                windows.shift().error(err);\n            }\n            subscriber.error(err);\n        };\n        innerFrom(openings).subscribe(createOperatorSubscriber(subscriber, function (openValue) {\n            var window = new Subject();\n            windows.push(window);\n            var closingSubscription = new Subscription();\n            var closeWindow = function () {\n                arrRemove(windows, window);\n                window.complete();\n                closingSubscription.unsubscribe();\n            };\n            var closingNotifier;\n            try {\n                closingNotifier = innerFrom(closingSelector(openValue));\n            }\n            catch (err) {\n                handleError(err);\n                return;\n            }\n            subscriber.next(window.asObservable());\n            closingSubscription.add(closingNotifier.subscribe(createOperatorSubscriber(subscriber, closeWindow, noop, handleError)));\n        }, noop));\n        source.subscribe(createOperatorSubscriber(subscriber, function (value) {\n            var e_1, _a;\n            var windowsCopy = windows.slice();\n            try {\n                for (var windowsCopy_1 = __values(windowsCopy), windowsCopy_1_1 = windowsCopy_1.next(); !windowsCopy_1_1.done; windowsCopy_1_1 = windowsCopy_1.next()) {\n                    var window_1 = windowsCopy_1_1.value;\n                    window_1.next(value);\n                }\n            }\n            catch (e_1_1) { e_1 = { error: e_1_1 }; }\n            finally {\n                try {\n                    if (windowsCopy_1_1 && !windowsCopy_1_1.done && (_a = windowsCopy_1.return)) _a.call(windowsCopy_1);\n                }\n                finally { if (e_1) throw e_1.error; }\n            }\n        }, function () {\n            while (0 < windows.length) {\n                windows.shift().complete();\n            }\n            subscriber.complete();\n        }, handleError, function () {\n            while (0 < windows.length) {\n                windows.shift().unsubscribe();\n            }\n        }));\n    });\n}\n//# sourceMappingURL=windowToggle.js.map","import { Observable, fromEvent, fromEventPattern, shareReplay } from \"rxjs\";\nimport { NodeEventHandler } from \"rxjs/internal/observable/fromEvent\";\n\ndeclare const document: Document & {\n  attachEvent: any;\n  createEventObject: any;\n  onmousewheel: any;\n};\n\nexport type EventMap = GlobalEventHandlersEventMap &\n  ElementEventMap &\n  HTMLElementEventMap &\n  DocumentEventMap &\n  WindowEventHandlersEventMap &\n  WindowEventMap &\n  MediaQueryListEventMap;\n\n// event.type == 'mouseover'\ntype EventName =\n  | keyof EventMap\n  | \"wheel\"\n  | \"mousewheel\"\n  | \"DOMMouseScroll\"\n  | \"transitionend\"\n  | \"webkitTransitionEnd\"\n  | \"oTransitionEnd\"\n  | \"MSTransitionEnd\";\n\ntype EventScope =\n  | MouseEvent\n  | KeyboardEvent\n  | TouchEvent\n  | PointerEvent\n  | DragEvent\n  | Event\n  | CustomEvent\n  | UIEvent\n  | TransitionEvent\n  | AnimationEvent\n  | StorageEvent\n  | any;\n\n// event.target: Refers to the actual element where the event occurred\n// event.currentTarget: Refers to the element to which the event handler is attached\n\nexport function getEventCurrentTarget(e: any) {\n  // first, IE method for mouse events(also supported by Safari and Opera)\n  if (e.toElement) {\n    return e.toElement;\n    // W3C\n  } else if (e.currentTarget) {\n    return e.currentTarget;\n    // MS way\n  } else if (e.srcElement) {\n    return e.srcElement;\n  } else {\n    return null;\n  }\n}\n\nexport type HTMLEventObservable =\n  | EventTarget\n  | HTMLElement\n  | SVGElement\n  | SVGSVGElement\n  | HTMLCanvasElement\n  | any;\n\nexport function useEventListener(\n  target: HTMLEventObservable,\n  eventName: EventName,\n  handler: (e: EventScope) => void | Promise<void>,\n  useCapture = false // [ 捕获阶段 -> 目标阶段 -> 冒泡阶段 ] useCapture 用于指定是否在捕获阶段进行处理，一般设置为 false 与 IE浏览器保持一致\n): () => void {\n  const eventHandler = async (e: EventScope) => {\n    await handler(e);\n  };\n\n  try {\n    target.addEventListener(eventName, eventHandler, useCapture);\n  } catch (e) {\n    target.attachEvent(\"on\" + eventName, eventHandler);\n  }\n\n  return () => {\n    try {\n      target.removeEventListener(eventName, eventHandler, useCapture);\n    } catch (e) {\n      target.detachEvent(\"on\" + eventName, eventHandler);\n    }\n  };\n}\n\n// 绑定事件监听器到父元素\nexport function useParentEventListener(\n  parent: HTMLEventObservable,\n  target: HTMLEventObservable,\n  eventName: EventName,\n  handler: (e: EventScope) => void | Promise<void>,\n  useCapture = false // [ 捕获阶段 -> 目标阶段 -> 冒泡阶段 ] useCapture 用于指定是否在捕获阶段进行处理，一般设置为 false 与 IE浏览器保持一致\n): () => void {\n  return useEventListener(\n    parent || document.body,\n    eventName,\n    (e) => {\n      if (e.target === target) {\n        // hit 目标元素!\n        handler(e);\n      }\n    },\n    useCapture\n  );\n}\n\nexport function removeAllEventListeners(target: HTMLEventObservable) {\n  target.replaceWith(target.cloneNode(true));\n}\n\nexport function useEvent$<T extends EventScope = EventScope>(\n  target: HTMLEventObservable,\n  eventName: EventName,\n  useCapture = false // [ 捕获阶段 -> 目标阶段 -> 冒泡阶段 ] useCapture 用于指定是否在捕获阶段进行处理，一般设置为 false 与 IE浏览器保持一致\n): Observable<T> {\n  // 当取消订阅时，fromEvent 会自动停止监听事件\n  return fromEvent<T>(target, eventName, { capture: useCapture });\n}\n\nexport function createFromEventPattern(options: {\n  register: (handler: NodeEventHandler) => any;\n  unregister?: (handler: NodeEventHandler, ...args: any[]) => any;\n  share?: boolean;\n  bufferSize?: number;\n}): Observable<any[]> {\n  // observer.next 默认只会接收「自定义事件机制」emit 的第一个参数\n  const $ = fromEventPattern(\n    (handler: NodeEventHandler) => {\n      return options.register(handler);\n    },\n    (handler: NodeEventHandler, args?: any[]) => {\n      options.unregister?.(handler, ...(args || []));\n    },\n    // 参数转换函数\n    (...args: any[]) => {\n      return [...args];\n    }\n  );\n  if (options.share) {\n    return $.pipe(\n      shareReplay({\n        bufferSize: options.bufferSize || 1, // 每个新订阅会收到最近一次事件\n        refCount: true // 最后一个订阅取消时会自动解绑事件\n      })\n    );\n  } else {\n    return $;\n  }\n}\n\n// e.preventDefault();\nexport function preventDefault(e: EventScope) {\n  if (e.preventDefault) {\n    e.preventDefault();\n    return;\n  }\n  try {\n    e.returnValue = false;\n  } catch (ex) {\n    // do nothing\n  }\n}\n\n// e.stopPropagation();\n// e.stopImmediatePropagation();\nexport function stopPropagation(e: EventScope) {\n  if (e.stopPropagation) {\n    e.stopPropagation();\n    return;\n  }\n  try {\n    e.cancelBubble = true;\n  } catch (ex) {\n    // do nothing\n  }\n}\n\n// https://dom.spec.whatwg.org/#dom-document-createevent\n// 以下按需扩展\nconst MouseEvents = [\n  \"click\",\n  \"dblclick\",\n  \"wheel\",\n  \"contextmenu\",\n  \"mousedown\",\n  \"mouseup\",\n  \"mousemove\",\n  \"mouseover\",\n  \"mouseout\",\n  \"mouseenter\",\n  \"mouseleave\"\n];\nconst KeyboardEvents = [\"keydown\", \"keyup\", \"keypress\"];\nconst TouchEvents = [\"touchstart\", \"touchend\", \"touchcancel\", \"touchmove\"];\nconst PointerEvents = [\n  \"pointerdown\",\n  \"pointerup\",\n  \"pointercancel\",\n  \"pointermove\"\n];\nconst DragEvents = [\n  \"dragstart\",\n  \"drag\",\n  \"dragend\",\n  \"dragenter\",\n  \"dragover\",\n  \"dragleave\",\n  \"drop\"\n];\nconst Events = [\"change\"];\n\nexport function createEvent(\n  eventName: EventName, // click keydown ...\n  options:\n    | MouseEventInit\n    | KeyboardEventInit\n    | TouchEventInit\n    | PointerEventInit\n    | DragEventInit\n    | EventInit\n    | CustomEventInit = {\n    bubbles: true,\n    detail: {}\n  }\n): EventScope {\n  let event;\n  try {\n    const o = Object.assign(\n      {\n        bubbles: true,\n        cancelable: true,\n        view: window,\n        detail: 1,\n        // screenX: e.screenX,\n        // screenY: e.screenY,\n        // clientX: e.clientX,\n        // clientY: e.clientY,\n        ctrlKey: false,\n        altKey: false,\n        shiftKey: false,\n        metaKey: false,\n        button: 0,\n        relatedTarget: null\n      },\n      options\n    );\n    if (MouseEvents.includes(eventName)) {\n      event = new MouseEvent(eventName, o);\n    } else if (KeyboardEvents.includes(eventName)) {\n      event = new KeyboardEvent(eventName, o);\n    } else if (TouchEvents.includes(eventName)) {\n      event = new TouchEvent(eventName, o);\n    } else if (PointerEvents.includes(eventName)) {\n      event = new PointerEvent(eventName, o);\n    } else if (DragEvents.includes(eventName)) {\n      event = new DragEvent(eventName, o);\n    } else if (Events.includes(eventName)) {\n      event = new Event(eventName, o);\n    } else {\n      // const event = new CustomEvent(\"awesome\", { detail: { text: () => textarea.value } });\n      // el.addEventListener(\"awesome\", (e) => console.log(e.detail.text()));\n      event = new CustomEvent(eventName, o);\n    }\n  } catch (e) {\n    // fallback\n    if (document.createEvent) {\n      // https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/initMouseEvent\n      // initMouseEvent is deprecated.\n      event = document\n        // .createEvent(\"HTMLEvents\")\n        .createEvent(\"Event\")\n        .initEvent(eventName, true, true); // event-type, bubbling, cancelable\n    } else if (document.createEventObject) {\n      event = document.createEventObject();\n    }\n  }\n  return event;\n}\n\nexport function dispatchEvent(\n  target: HTMLEventObservable,\n  eventName: EventName, // click keydown ...\n  event: EventScope\n) {\n  if (!target) {\n    return;\n  }\n  if (target.dispatchEvent) {\n    // dispatch for firefox + ie9 + others\n    target.dispatchEvent(event);\n  } else if (target.fireEvent && document.createEventObject) {\n    // dispatch for IE8 and lower\n    target.fireEvent(\"on\" + eventName, event);\n  } else {\n    throw new Error(`Can't dispatch event : ${eventName}`);\n  }\n}\n\nexport function dispatchEventFromEvent(e: EventScope, eventName: EventName) {\n  const target = e.target;\n  const event = createEvent(eventName);\n  dispatchEvent(target, eventName, event);\n}\n\nexport function dispatchClickFromEvent(e: EventScope) {\n  const target = e.target as any;\n  const eventName = \"click\";\n  if (!/(SELECT|INPUT|TEXTAREA)/i.test(target.tagName)) {\n    const event = createEvent(eventName) as any;\n    event.view = (e as any).view || window;\n    event.detail = 1;\n    event.screenX = target.screenX || 0;\n    event.screenY = target.screenY || 0;\n    event.clientX = target.clientX || 0;\n    event.clientY = target.clientY || 0;\n    event.pageX = (e as any).pageX;\n    event.pageY = (e as any).pageY;\n    event.ctrlKey = !!(e as any).ctrlKey;\n    event.altKey = !!(e as any).altKey;\n    event.shiftKey = !!(e as any).shiftKey;\n    event.metaKey = !!(e as any).metaKey;\n    event.button = 0;\n    event.relatedTarget = null;\n    event._constructed = true;\n    dispatchEvent(target, eventName, event);\n  }\n}\n\nexport function simulateEventFromTouch(\n  touchEvent: TouchEvent,\n  eventName: EventName\n): EventScope {\n  const touch = touchEvent.changedTouches[0];\n  return createEvent(eventName, {\n    bubbles: true,\n    cancelable: true,\n    view: window,\n    detail: 1,\n    screenX: touch.screenX,\n    screenY: touch.screenY,\n    clientX: touch.clientX,\n    clientY: touch.clientY,\n    ctrlKey: false,\n    altKey: false,\n    shiftKey: false,\n    metaKey: false,\n    button: 0,\n    relatedTarget: null\n  });\n}\n","import {\n  now,\n  createTask,\n  ScheduleDependOnResult,\n  milliseconds\n} from \"@zyzgroup/core-common\";\n\n// requestAnimationFrame 的触发时机是在一帧的开头\nlet rAF =\n  window.requestAnimationFrame ||\n  (window as any).webkitRequestAnimationFrame ||\n  (window as any).mozRequestAnimationFrame ||\n  (window as any).oRequestAnimationFrame ||\n  (window as any).msRequestAnimationFrame;\n\nlet cAF =\n  window.cancelAnimationFrame ||\n  (window as any).webkitCancelAnimationFrame ||\n  (window as any).mozCancelAnimationFrame ||\n  (window as any).oCancelAnimationFrame ||\n  (window as any).msCancelAnimationFrame;\n\n// requestAnimationFrame polyfill\nif (!rAF) {\n  let lastTime = now();\n  rAF = (cb: (time: DOMHighResTimeStamp) => void) => {\n    const currTime = now();\n    const timeRemain = Math.max(0, 16 - (currTime - lastTime)); // 16 = 1000 / 60\n    const id = window.setTimeout(() => {\n      cb(currTime + timeRemain);\n    }, timeRemain);\n    lastTime = currTime + timeRemain;\n    return id;\n  };\n}\n// cancelAnimationFrame polyfill\nif (!cAF) {\n  cAF = (id) => {\n    window.clearTimeout(id);\n  };\n}\n\nexport { rAF, cAF };\n\n// 自调用 requestAnimationFrame\n// cb return false : 结束持续调用\nexport function requestAnimationFrameCycle(\n  cb: (time: DOMHighResTimeStamp) => boolean\n): () => void {\n  let isCancel = false;\n  let id = rAF(function frame(time: DOMHighResTimeStamp) {\n    if (!isCancel && cb(time)) {\n      id = rAF(frame);\n    }\n  });\n  return () => {\n    cAF(id);\n    isCancel = true;\n  };\n}\n\n// return cancelFn\nexport function setTimeoutAccurate(\n  cb: (time: DOMHighResTimeStamp) => void,\n  timeout = 0\n): () => void {\n  if (timeout == 0) {\n    // 同步立即执行\n    cb(now());\n    return () => {};\n  } else {\n    // 异步执行\n    const startTime = now();\n    return requestAnimationFrameCycle((time: DOMHighResTimeStamp) => {\n      if (time - startTime >= timeout) {\n        cb(time);\n        return false;\n      }\n      return true;\n    });\n  }\n}\n\nexport function setIntervalAccurate(\n  cb: (\n    time: DOMHighResTimeStamp,\n    count: number,\n    isTimeOutInThisCycle: boolean\n  ) => void,\n  interval = 0\n): () => void {\n  let isCancel = false;\n  let count = 0;\n  const startTime = now();\n  let cancel = setTimeoutAccurate(function frame(time: DOMHighResTimeStamp) {\n    if (isCancel) {\n      return;\n    }\n    count++;\n    // 时间偏差\n    const offset = time - startTime - count * interval;\n    cb(time, count, interval <= offset);\n    // 根据时间偏差，计算下次倒计时设定的回调时间，从而达到纠正的目的\n    cancel = setTimeoutAccurate(frame, Math.max(0, interval - offset));\n  }, interval);\n  return () => {\n    cancel();\n    isCancel = true;\n  };\n}\n\n// 快于指定帧率调用时，返回缓存值\nexport function createRunCycleInMaxRate(task: () => any, fps = 20): () => any {\n  const duration = 1000 / fps;\n  let lastTime = 0;\n  let lastResult: any;\n  return () => {\n    if (now() - lastTime >= duration) {\n      lastTime = now();\n      lastResult = task();\n    }\n    return lastResult;\n  };\n}\n\n/// FPS（frame per second）是浏览器每秒刷新的次数\n/// fps 低于 60 人眼就会感知卡顿掉帧\n/// 在两次屏幕硬件刷新之间，浏览器正好进行一次刷新（重绘），网页会很流畅\n/// 两次硬件刷新之间浏览器重绘多次是没意义的，只会消耗资源\n/// 如果浏览器重绘一次的时间是硬件多次刷新的时间，那么人眼将感知卡顿掉帧\n/// 所以浏览器对一次重绘的渲染工作需要在 16ms（ 1000ms/60 ）之内完成，也就是说每一次重绘小于 16ms 才不会卡顿掉帧\n\n/// requestIdleCallback 会在每一帧结束后判断浏览器是否空闲，如果浏览器一直处于占用状态，则没有空闲时间\n/// 且如果 requestIdleCallback 没有设置 timeout 时间，那么 callback 的任务会一直推迟执行\n/// 如果在当前帧设置 timeout，浏览器会在当前帧结束的下一帧开始判断是否超时执行 callback\n\n// 浏览器出现空闲时段，调用 requestIdleCallback 的场景\n// 1. 当浏览器一帧渲染所用时间小于屏幕刷新率（对于具有60Hz 的设备，一帧间隔应该小于16ms）时间，到下一帧渲染渲染开始时出现的空闲时间\n// 2. 当浏览器没有可渲染的任务，主线程一直处于空闲状态，事件队列为空\n//    为了避免在不可预测的任务（例如用户输入的处理）中引起用户可察觉的延迟，这些空闲周期的长度应限制为最大值 50ms = 1000 / 20\n//    也就是 timeRemaining 最大不超过 50ms（也就是20fps，这也是 react polyfill 的原因之一）\n//    当空闲时段结束时，可以调度另一个空闲时段，如果它保持空闲，那么空闲时段将更长，后台任务可以在更长时间段内发生\n\n//    注意：timeRemaining 最大为 50毫秒 ，是根据研究[ https://w3c.github.io/requestidlecallback/#bib-responsetime ] 得出的\n//    该研究表明，对用户输入的 100毫秒 以内的响应通常被认为对人类是瞬时的，就是人类不会有察觉\n//    将闲置截止期限设置为 50ms 意味着即使在闲置任务开始后立即发生用户输入，用户代理仍然有剩余的 50ms 可以在其中响应用户输入而不会产生用户可察觉的滞后\n\n// requestIdleCallback 注意事项：\n// 1. requestIdleCallback 是屏幕渲染之后执行的\n// 2. 一些低优先级的任务可使用 requestIdleCallback 等浏览器不忙的时候来执行\n//    同时因为时间有限，它所执行的任务应该尽量是能够量化\n//    细分的微任务（micro task）比较适合 requestIdleCallback\n// 3. requestIdleCallback 不会和帧对齐，所以涉及到 DOM的操作 和 动画 最好放在 requestAnimationFrame 中执行\n//    requestAnimationFrame 在重新渲染屏幕之前执行\n// 4. Promise 也不建议在这里面进行，因为 Promise 的回调是在 Event loop 中优先级较高的一种微任务\n//    会在 requestIdleCallback 结束时立即执行，不管此时是否还有富余的时间，这样有很大可能会让一帧超过 16 ms\n\n/// requestIdleCallback polyfill\nwindow.requestIdleCallback =\n  window.requestIdleCallback ||\n  function (cb: IdleRequestCallback, options?: IdleRequestOptions) {\n    const start = now();\n    // 退化为 setTimeout\n    return setTimeout(() => {\n      const diff = now() - start;\n      cb({\n        didTimeout: true, // 是否已到设置的超时时间\n        timeRemaining: () => Math.max(0, 50 - diff) // 本帧剩余可执行时间，毫秒\n      } as IdleDeadline);\n    }, options?.timeout);\n  };\n/// cancelIdleCallback polyfill\nwindow.cancelIdleCallback =\n  window.cancelIdleCallback ||\n  function (id: number) {\n    clearTimeout(id);\n  };\n\n// 以最快20fps帧率，在浏览器空闲时，调用任务 - 几乎没用\nexport function scheduleIdle(\n  cb: () => void,\n  options?: {\n    timeout?: number;\n  }\n) {\n  window.requestIdleCallback(\n    (deadline) => {\n      if (deadline.timeRemaining() > 0 || deadline.didTimeout) {\n        cb();\n      } else {\n        // cb() 未主动执行，循环调用 scheduleIdle\n        scheduleIdle(cb, options);\n      }\n    },\n    { timeout: options?.timeout }\n  );\n}\n\n// https://www.npmjs.com/package/scheduler\n\n/// React 任务优先级\n// Immediate -1 需要立刻执行\n// UserBlocking 250ms 超时时间250ms，一般指的是用户交互\n// Normal 5000ms 超时时间5s，不需要直观立即变化的任务，比如网络请求\n// Low 10000ms 超时时间10s，肯定要执行的任务，但是可以放在最后处理\n// Idle 一些没有必要的任务，可能不会执行\n\n/// 使用 rAF 来动态算出当前帧率:\n/// 1. 假设初始帧率为 30fps，则每一帧执行时间为 1000 / 30 = 33ms\n/// 2. 如果连续 2 帧的执行时间都小于当前帧率下的每帧执行时间，则表明当前帧率有待提高\n/// 3. 如果连续 2 帧的执行时间都大于当前帧率下的每帧执行时间，则表明当前帧率有待减低\n\n// 当前帧开始时间\nlet frameStartTimestamp = 0;\n// 估算的当前帧截止时间\nlet frameEndTimestamp = 0;\n// 估算的上一帧执行时间\nlet previousFrameDuration = 33;\n// 估算的帧执行时间\nlet activeFrameDuration = 33;\n\n// rAF 每一个 frame 中都会调用 currentCallback，currentCallback 自己根据 deadline.timeRemaining() 决定是否真正执行\nlet currentCallback: IdleRequestCallback;\nlet currentTimeout = -1;\nconst channel = new MessageChannel();\nconst port: MessagePort = channel.port2;\nchannel.port1.onmessage = (e: MessageEvent) => {\n  if (currentCallback) {\n    currentCallback({\n      didTimeout:\n        currentTimeout == -1\n          ? false\n          : now() - frameStartTimestamp > currentTimeout, // currentCallback 执行时，是否已到设置的超时时间\n      timeRemaining: () => Math.max(0, frameEndTimestamp - now()) // 本帧剩余可执行时间，毫秒\n    });\n  }\n};\n\n// React v16.0.0 中实现 rIC 的核心思路就是，使用 rAF 动态计算帧率，使用 postMessage 实现异步调用\nfunction requestIdleCallbackDynamic(\n  cb: IdleRequestCallback,\n  options?: {\n    timeout?: number; // 超过这个时间后，如果任务还没执行，则强制执行，不必等待空闲\n  }\n): number {\n  currentCallback = cb;\n  currentTimeout = typeof options?.timeout == \"number\" ? options?.timeout : -1;\n  // 如果直接使用 rAF 模拟 requestIdleCallback ，Fiber tree 的更新操作会在 rAF 里执行，整体增加了当前帧完成所需的时间，会导致帧率下降\n  // 解决方案：使用 rAF 动态计算出当前帧率，得出帧截止时间，从而可以较准确的计算得到 rIC 中参数 timeRemaining\n  return requestAnimationFrame((t: DOMHighResTimeStamp) => {\n    frameStartTimestamp = t;\n    // 估算的当前帧执行时间=估算的帧执行时间+上一帧实际执行时间与预期执行时间的差值，这里的 frameEndTimestamp 为上一帧的截止时间\n    let currentFrameDuration =\n      activeFrameDuration + frameStartTimestamp - frameEndTimestamp;\n    if (\n      currentFrameDuration < activeFrameDuration &&\n      previousFrameDuration < activeFrameDuration\n    ) {\n      // 如果连续2帧的执行时间都小于帧执行时间，说明可以提高帧率\n      // 最高 120 fps, 1000 / 120 = 8.3\n      if (currentFrameDuration < 8) {\n        currentFrameDuration = 8;\n      }\n      // 取连续2帧中执行时间较大的，防止执行超过帧截止时间\n      activeFrameDuration =\n        currentFrameDuration < previousFrameDuration\n          ? previousFrameDuration\n          : currentFrameDuration;\n    } else if (\n      currentFrameDuration > activeFrameDuration &&\n      previousFrameDuration > activeFrameDuration\n    ) {\n      // 如果连续2帧的执行时间都大于帧执行时间，说明可以减低帧率\n      // 取连续2帧中执行时间较大的，防止执行超过帧截止时间\n      activeFrameDuration =\n        currentFrameDuration < previousFrameDuration\n          ? previousFrameDuration\n          : currentFrameDuration;\n    } else {\n      // 帧率不变\n      previousFrameDuration = currentFrameDuration;\n    }\n    frameEndTimestamp = frameStartTimestamp + activeFrameDuration;\n    // 为了减少误差，使用 postMessage，而不是 setTimeout，因为 postMessage 比 setTimeout 要早得到执行\n    // 异步调度越早开始，那么 timeRemaining 得到值的误差就会越小\n\n    // 对于现代浏览器来说，使用 setTimeout(callback,0)，会存在 4ms 的执行间隔限制\n    // https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#timers\n    // If timeout is less than 0, then set timeout to 0.\n    // If nesting level is greater than 5, and timeout is less than 4, then set timeout to 4.\n    port.postMessage(null);\n  });\n}\n\nconst schedule = new ScheduleDependOnResult({\n  concurrency: 1,\n  timeRemaining: 0\n});\nlet isCalled = false;\n// 以当前帧率调用空闲任务\nexport function scheduleIdleAsap(\n  cb: () => void,\n  options?: {\n    timeout?: number;\n    name?: string;\n  }\n) {\n  const task = createTask({\n    fn: cb,\n    name: options?.name,\n    deadline:\n      typeof options?.timeout == \"number\"\n        ? milliseconds() + options.timeout\n        : undefined\n  });\n  schedule.addTask(task);\n  if (isCalled) {\n    return;\n  }\n  isCalled = true;\n  requestIdleCallbackDynamic((deadline) => {\n    isCalled = false;\n    schedule.idleCallback(deadline);\n  });\n}\n","export default class Sequence {\n  private static _nextId = 0;\n\n  static nextId(): number {\n    return Sequence._nextId++;\n  }\n}\n","// 缓动函数 t: 0-1\nexport type EasingFunction = (t: number) => number;\n\nexport const Easing = {\n  // 线性\n  Linear: {\n    None: function (t: number): number {\n      return t;\n    }\n  },\n  Ease: {\n    In: function (t: number): number {\n      return Math.pow(t, 1.7);\n    }\n  },\n  // 二次\n  Quadratic: {\n    In: function (t: number): number {\n      return t * t;\n    },\n    Out: function (t: number): number {\n      return t * (2 - t);\n    },\n    InOut: function (t: number): number {\n      if ((t *= 2) < 1) {\n        return 0.5 * t * t;\n      }\n      return -0.5 * (--t * (t - 2) - 1);\n    },\n    style: \"cubic-bezier(0.25, 0.46, 0.45, 0.94)\"\n  },\n  // 三次\n  Cubic: {\n    In: function (t: number): number {\n      return t * t * t;\n    },\n    Out: function (t: number): number {\n      return --t * t * t + 1;\n    },\n    InOut: function (t: number): number {\n      if ((t *= 2) < 1) {\n        return 0.5 * t * t * t;\n      }\n      return 0.5 * ((t -= 2) * t * t + 2);\n    }\n  },\n  // 四次\n  Quartic: {\n    In: function (t: number): number {\n      return t * t * t * t;\n    },\n    Out: function (t: number): number {\n      return 1 - --t * t * t * t;\n    },\n    InOut: function (t: number): number {\n      if ((t *= 2) < 1) {\n        return 0.5 * t * t * t * t;\n      }\n      return -0.5 * ((t -= 2) * t * t * t - 2);\n    }\n  },\n  // 五次\n  Quintic: {\n    In: function (t: number): number {\n      return t * t * t * t * t;\n    },\n    Out: function (t: number): number {\n      return --t * t * t * t * t + 1;\n    },\n    InOut: function (t: number): number {\n      if ((t *= 2) < 1) {\n        return 0.5 * t * t * t * t * t;\n      }\n      return 0.5 * ((t -= 2) * t * t * t * t + 2);\n    }\n  },\n  // 正弦曲线\n  Sinusoidal: {\n    In: function (t: number): number {\n      return 1 - Math.sin(((1.0 - t) * Math.PI) / 2);\n    },\n    Out: function (t: number): number {\n      return Math.sin((t * Math.PI) / 2);\n    },\n    InOut: function (t: number): number {\n      return 0.5 * (1 - Math.sin(Math.PI * (0.5 - t)));\n    }\n  },\n  // 指数\n  Exponential: {\n    In: function (t: number): number {\n      return t === 0 ? 0 : Math.pow(1024, t - 1);\n    },\n    Out: function (t: number): number {\n      return t === 1 ? 1 : 1 - Math.pow(2, -10 * t);\n    },\n    InOut: function (t: number): number {\n      if (t === 0) {\n        return 0;\n      }\n      if (t === 1) {\n        return 1;\n      }\n      if ((t *= 2) < 1) {\n        return 0.5 * Math.pow(1024, t - 1);\n      }\n      return 0.5 * (-Math.pow(2, -10 * (t - 1)) + 2);\n    }\n  },\n  // 圆\n  Circular: {\n    In: function (t: number): number {\n      return 1 - Math.sqrt(1 - t * t);\n    },\n    Out: function (t: number): number {\n      return Math.sqrt(1 - --t * t);\n    },\n    InOut: function (t: number): number {\n      if ((t *= 2) < 1) {\n        return -0.5 * (Math.sqrt(1 - t * t) - 1);\n      }\n      return 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1);\n    },\n    style: \"cubic-bezier(0.1, 0.57, 0.1, 1)\" // Not properly \"circular\" but this looks better, it should be (0.075, 0.82, 0.165, 1)\n  },\n  // 松紧带\n  Elastic: {\n    In: function (t: number): number {\n      if (t === 0) {\n        return 0;\n      }\n      if (t === 1) {\n        return 1;\n      }\n      return -Math.pow(2, 10 * (t - 1)) * Math.sin((t - 1.1) * 5 * Math.PI);\n    },\n    Out: function (t: number): number {\n      if (t === 0) {\n        return 0;\n      }\n      if (t === 1) {\n        return 1;\n      }\n      return Math.pow(2, -10 * t) * Math.sin((t - 0.1) * 5 * Math.PI) + 1;\n    },\n    InOut: function (t: number): number {\n      if (t === 0) {\n        return 0;\n      }\n      if (t === 1) {\n        return 1;\n      }\n      t *= 2;\n      if (t < 1) {\n        return (\n          -0.5 * Math.pow(2, 10 * (t - 1)) * Math.sin((t - 1.1) * 5 * Math.PI)\n        );\n      }\n      return (\n        0.5 * Math.pow(2, -10 * (t - 1)) * Math.sin((t - 1.1) * 5 * Math.PI) + 1\n      );\n    }\n  },\n  // 后退\n  Back: {\n    In: function (t: number): number {\n      const s = 1.70158;\n      return t === 1 ? 1 : t * t * ((s + 1) * t - s);\n    },\n    Out: function (t: number): number {\n      const s = 1.70158;\n      // const s = 4;\n      return t === 0 ? 0 : --t * t * ((s + 1) * t + s) + 1;\n    },\n    InOut: function (t: number): number {\n      const s = 1.70158 * 1.525;\n      if ((t *= 2) < 1) {\n        return 0.5 * (t * t * ((s + 1) * t - s));\n      }\n      return 0.5 * ((t -= 2) * t * ((s + 1) * t + s) + 2);\n    },\n    style: \"cubic-bezier(0.175, 0.885, 0.32, 1.275)\"\n  },\n  // 弹跳\n  Bounce: {\n    In: function (t: number): number {\n      return 1 - Easing.Bounce.Out(1 - t);\n    },\n    Out: function (t: number): number {\n      if (t < 1 / 2.75) {\n        return 7.5625 * t * t;\n      } else if (t < 2 / 2.75) {\n        return 7.5625 * (t -= 1.5 / 2.75) * t + 0.75;\n      } else if (t < 2.5 / 2.75) {\n        return 7.5625 * (t -= 2.25 / 2.75) * t + 0.9375;\n      } else {\n        return 7.5625 * (t -= 2.625 / 2.75) * t + 0.984375;\n      }\n    },\n    InOut: function (t: number): number {\n      if (t < 0.5) {\n        return Easing.Bounce.In(t * 2) * 0.5;\n      }\n      return Easing.Bounce.Out(t * 2 - 1) * 0.5 + 0.5;\n    }\n  },\n  // 生成指数\n  generatePow: function (power = 4): {\n    In(t: number): number;\n    Out(t: number): number;\n    InOut(t: number): number;\n  } {\n    power = power < Number.EPSILON ? Number.EPSILON : power;\n    power = power > 10000 ? 10000 : power;\n    return {\n      In: function (t: number): number {\n        return t ** power;\n      },\n      Out: function (t: number): number {\n        return 1 - (1 - t) ** power;\n      },\n      InOut: function (t: number): number {\n        if (t < 0.5) {\n          return (t * 2) ** power / 2;\n        }\n        return (1 - (2 - t * 2) ** power) / 2 + 0.5;\n      }\n    };\n  },\n  // 随机\n  random: function (t: number) {\n    return Math.random();\n  },\n  // 步数\n  createStep: function (numSteps: number): EasingFunction {\n    return function (t: number) {\n      return Math.floor(t * numSteps) / numSteps;\n    };\n  },\n  // 增加噪音\n  createNoisyEasing: function (\n    easingFunction: EasingFunction,\n    randomProportion = 0.1\n  ): EasingFunction {\n    const normalProportion = 1.0 - randomProportion;\n    return function (t: number) {\n      return (\n        randomProportion * Math.random() + normalProportion * easingFunction(t)\n      );\n    };\n  },\n  swing: function (t: number) {\n    return t + Math.sin(t * Math.PI * 2) / 2;\n  },\n  causeSeizures: function (t: number) {\n    return t + 0.2 * Math.random() - 0.1;\n  }\n};\n\nexport default Easing;\n\nexport function reverseEasing(easing: EasingFunction): EasingFunction {\n  switch (easing) {\n    // 二次\n    case Easing.Quadratic.In:\n      return Easing.Quadratic.Out;\n    case Easing.Quadratic.Out:\n      return Easing.Quadratic.In;\n    case Easing.Quadratic.InOut:\n      return Easing.Quadratic.InOut;\n    // 三次\n    case Easing.Cubic.In:\n      return Easing.Cubic.Out;\n    case Easing.Cubic.Out:\n      return Easing.Cubic.In;\n    case Easing.Cubic.InOut:\n      return Easing.Cubic.InOut;\n    // 四次\n    case Easing.Quartic.In:\n      return Easing.Quartic.Out;\n    case Easing.Quartic.Out:\n      return Easing.Quartic.In;\n    case Easing.Quartic.InOut:\n      return Easing.Quartic.InOut;\n    // 五次\n    case Easing.Quintic.In:\n      return Easing.Quintic.Out;\n    case Easing.Quintic.Out:\n      return Easing.Quintic.In;\n    case Easing.Quintic.InOut:\n      return Easing.Quintic.InOut;\n    // 正弦曲线\n    case Easing.Sinusoidal.In:\n      return Easing.Sinusoidal.Out;\n    case Easing.Sinusoidal.Out:\n      return Easing.Sinusoidal.In;\n    case Easing.Sinusoidal.InOut:\n      return Easing.Sinusoidal.InOut;\n    // 指数\n    case Easing.Exponential.In:\n      return Easing.Exponential.Out;\n    case Easing.Exponential.Out:\n      return Easing.Exponential.In;\n    case Easing.Exponential.InOut:\n      return Easing.Exponential.InOut;\n    // 圆\n    case Easing.Circular.In:\n      return Easing.Circular.Out;\n    case Easing.Circular.Out:\n      return Easing.Circular.In;\n    case Easing.Circular.InOut:\n      return Easing.Circular.InOut;\n    // 松紧带\n    case Easing.Elastic.In:\n      return Easing.Elastic.Out;\n    case Easing.Elastic.Out:\n      return Easing.Elastic.In;\n    case Easing.Elastic.InOut:\n      return Easing.Elastic.InOut;\n    // 后退\n    case Easing.Back.In:\n      return Easing.Back.Out;\n    case Easing.Back.Out:\n      return Easing.Back.In;\n    case Easing.Back.InOut:\n      return Easing.Back.InOut;\n    // 弹跳\n    case Easing.Bounce.In:\n      return Easing.Bounce.Out;\n    case Easing.Bounce.Out:\n      return Easing.Bounce.In;\n    case Easing.Bounce.InOut:\n      return Easing.Bounce.InOut;\n    default:\n      return easing;\n  }\n}\n","/**\n * https://github.com/gre/bezier-easing\n * BezierEasing - use bezier curve for transition easing function\n * by Gaëtan Renaudeau 2014 - 2015 – MIT License\n */\n\nimport { EasingFunction } from \"./Easing\";\n\n// These values are established by empiricism with tests (tradeoff: performance VS precision)\nconst NEWTON_ITERATIONS = 4;\nconst NEWTON_MIN_SLOPE = 0.001;\nconst SUBDIVISION_PRECISION = 0.0000001;\nconst SUBDIVISION_MAX_ITERATIONS = 10;\n\nconst kSplineTableSize = 11;\nconst kSampleStepSize = 1.0 / (kSplineTableSize - 1.0);\n\nconst float32ArraySupported = typeof Float32Array === \"function\";\n\nfunction A(aA1: number, aA2: number) {\n  return 1.0 - 3.0 * aA2 + 3.0 * aA1;\n}\nfunction B(aA1: number, aA2: number) {\n  return 3.0 * aA2 - 6.0 * aA1;\n}\nfunction C(aA1: number) {\n  return 3.0 * aA1;\n}\n\n// Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2.\nfunction calcBezier(aT: number, aA1: number, aA2: number) {\n  return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT;\n}\n\n// Returns dx/dt given t, x1, and x2, or dy/dt given t, y1, and y2.\nfunction getSlope(aT: number, aA1: number, aA2: number) {\n  return 3.0 * A(aA1, aA2) * aT * aT + 2.0 * B(aA1, aA2) * aT + C(aA1);\n}\n\nfunction binarySubdivide(\n  aX: number,\n  aA: number,\n  aB: number,\n  mX1: number,\n  mX2: number\n) {\n  let currentX,\n    currentT,\n    i = 0;\n  do {\n    currentT = aA + (aB - aA) / 2.0;\n    currentX = calcBezier(currentT, mX1, mX2) - aX;\n    if (currentX > 0.0) {\n      aB = currentT;\n    } else {\n      aA = currentT;\n    }\n  } while (\n    Math.abs(currentX) > SUBDIVISION_PRECISION &&\n    ++i < SUBDIVISION_MAX_ITERATIONS\n  );\n  return currentT;\n}\n\nfunction newtonRaphsonIterate(\n  aX: number,\n  aGuessT: number,\n  mX1: number,\n  mX2: number\n) {\n  for (let i = 0; i < NEWTON_ITERATIONS; ++i) {\n    const currentSlope = getSlope(aGuessT, mX1, mX2);\n    if (currentSlope === 0.0) {\n      return aGuessT;\n    }\n    const currentX = calcBezier(aGuessT, mX1, mX2) - aX;\n    aGuessT -= currentX / currentSlope;\n  }\n  return aGuessT;\n}\n\nfunction LinearEasing(x: number) {\n  return x;\n}\n\n// const easing = BezierEasing(0, 0, 1, 0.5);\n// // easing allows to project x in [0.0,1.0] range onto the bezier-curve defined by the 4 points (see schema below).\n// console.log(easing(0.0)); // 0.0\n// console.log(easing(0.5)); // 0.3125\n// console.log(easing(1.0)); // 1.0\nexport function BezierEasing(\n  mX1: number,\n  mY1: number,\n  mX2: number,\n  mY2: number\n): (x: number) => number {\n  if (!(0 <= mX1 && mX1 <= 1 && 0 <= mX2 && mX2 <= 1)) {\n    throw new Error(\"bezier x values must be in [0, 1] range\");\n  }\n\n  if (mX1 === mY1 && mX2 === mY2) {\n    return LinearEasing;\n  }\n\n  // Precompute samples table\n  const sampleValues = float32ArraySupported\n    ? new Float32Array(kSplineTableSize)\n    : new Array(kSplineTableSize);\n  for (let i = 0; i < kSplineTableSize; ++i) {\n    sampleValues[i] = calcBezier(i * kSampleStepSize, mX1, mX2);\n  }\n\n  function getTForX(aX: number) {\n    let intervalStart = 0.0;\n    let currentSample = 1;\n    const lastSample = kSplineTableSize - 1;\n\n    for (\n      ;\n      currentSample !== lastSample && sampleValues[currentSample] <= aX;\n      ++currentSample\n    ) {\n      intervalStart += kSampleStepSize;\n    }\n    --currentSample;\n\n    // Interpolate to provide an initial guess for t\n    const dist =\n      (aX - sampleValues[currentSample]) /\n      (sampleValues[currentSample + 1] - sampleValues[currentSample]);\n    const guessForT = intervalStart + dist * kSampleStepSize;\n\n    const initialSlope = getSlope(guessForT, mX1, mX2);\n    if (initialSlope >= NEWTON_MIN_SLOPE) {\n      return newtonRaphsonIterate(aX, guessForT, mX1, mX2);\n    } else if (initialSlope === 0.0) {\n      return guessForT;\n    } else {\n      return binarySubdivide(\n        aX,\n        intervalStart,\n        intervalStart + kSampleStepSize,\n        mX1,\n        mX2\n      );\n    }\n  }\n\n  return (x: number) => {\n    // Because JavaScript number are imprecise, we should guarantee the extremes are right.\n    if (x === 0 || x === 1) {\n      return x;\n    }\n    return calcBezier(getTForX(x), mY1, mY2);\n  };\n}\n\nexport type SupportedEaseNameToCubicBezier =\n  | \"linear\"\n  | \"ease\"\n  | \"ease-in\"\n  | \"ease-in-out\"\n  | \"ease-out\";\n\nexport function easeNameToCubicBezier(\n  easeName: SupportedEaseNameToCubicBezier\n): [number, number, number, number] {\n  switch (easeName) {\n    case \"linear\":\n      // cubic-bezier(0, 0, 1, 1)\n      return [0, 0, 1, 1];\n    case \"ease\":\n      // cubic-bezier(0.25, 0.1, 0.25, 1)\n      return [0.25, 0.1, 0.25, 1];\n    case \"ease-in\":\n      // cubic-bezier(0.42, 0, 1, 1)\n      return [0.42, 0, 1, 1];\n    case \"ease-in-out\":\n      // cubic-bezier(0.42, 0, 0.58, 1)\n      return [0.42, 0, 0.58, 1];\n    case \"ease-out\":\n      // cubic-bezier(0, 0, 0.58, 1)\n      return [0, 0, 0.58, 1];\n  }\n}\n\nexport function reverseEaseNameToCubicBezier(\n  easeName: SupportedEaseNameToCubicBezier\n): [number, number, number, number] {\n  const [x1, y1, x2, y2] = easeNameToCubicBezier(easeName);\n  return [1 - x2, 1 - y2, 1 - x1, 1 - y1];\n}\n\nexport function CSSToJSEasing(\n  easeName: SupportedEaseNameToCubicBezier\n): EasingFunction {\n  return BezierEasing(...easeNameToCubicBezier(easeName));\n}\n\nexport function reverseCSSToJSEasing(\n  easeName: SupportedEaseNameToCubicBezier\n): EasingFunction {\n  return BezierEasing(...reverseEaseNameToCubicBezier(easeName));\n}\n","// 插值函数\nexport type InterpolationFunction = (\n  originalValues: number[],\n  t: number // 0 ~ 1\n) => number;\n\nexport const Interpolation = {\n  Utils: {\n    Linear: function (p0: number, p1: number, t: number): number {\n      return (p1 - p0) * t + p0;\n    },\n    Factorial: (function () {\n      const a = [1];\n      return function (n: number): number {\n        let s = 1;\n        if (a[n]) {\n          return a[n];\n        }\n        for (let i = n; i > 1; i--) {\n          s *= i;\n        }\n        a[n] = s;\n        return s;\n      };\n    })(),\n    Bernstein: function (n: number, i: number): number {\n      const fc = Interpolation.Utils.Factorial;\n      return fc(n) / fc(i) / fc(n - i);\n    },\n    // 卡特穆尔·罗姆\n    CatmullRom: function (\n      p0: number,\n      p1: number,\n      p2: number,\n      p3: number,\n      t: number\n    ): number {\n      const v0 = (p2 - p0) * 0.5;\n      const v1 = (p3 - p1) * 0.5;\n      const t2 = t * t;\n      const t3 = t * t2;\n      return (\n        (2 * p1 - 2 * p2 + v0 + v1) * t3 +\n        (-3 * p1 + 3 * p2 - 2 * v0 - v1) * t2 +\n        v0 * t +\n        p1\n      );\n    },\n    QuadraticBezier: (\n      p0: number,\n      p1: number,\n      p2: number,\n      t: number\n    ): number => {\n      const k = 1 - t;\n      return k * k * p0 + 2 * k * t * p1 + t * t * p2;\n    },\n    CubicBezier: (\n      p0: number,\n      p1: number,\n      p2: number,\n      p3: number,\n      t: number\n    ): number => {\n      const k = 1 - t;\n      return (\n        k * k * k * p0 +\n        3 * k * k * t * p1 +\n        3 * k * t * t * p2 +\n        t * t * t * p3\n      );\n    }\n  },\n  // 线性\n  Linear: function (v: number[], k: number): number {\n    const m = v.length - 1;\n    const f = m * k;\n    const i = Math.floor(f);\n    const fn = Interpolation.Utils.Linear;\n    if (k < 0) {\n      return fn(v[0], v[1], f);\n    }\n    if (k > 1) {\n      return fn(v[m], v[m - 1], m - f);\n    }\n    return fn(v[i], v[i + 1 > m ? m : i + 1], f - i);\n  },\n  // 贝塞尔\n  Bezier: function (v: number[], k: number): number {\n    let b = 0;\n    const n = v.length - 1;\n    const pw = Math.pow;\n    const bn = Interpolation.Utils.Bernstein;\n    for (let i = 0; i <= n; i++) {\n      b += pw(1 - k, n - i) * pw(k, i) * v[i] * bn(n, i);\n    }\n    return b;\n  },\n  // 卡特穆尔·罗姆\n  CatmullRom: function (v: number[], k: number): number {\n    const m = v.length - 1;\n    let f = m * k;\n    let i = Math.floor(f);\n    const fn = Interpolation.Utils.CatmullRom;\n    if (v[0] === v[m]) {\n      if (k < 0) {\n        i = Math.floor((f = m * (1 + k)));\n      }\n      return fn(\n        v[(i - 1 + m) % m],\n        v[i],\n        v[(i + 1) % m],\n        v[(i + 2) % m],\n        f - i\n      );\n    } else {\n      if (k < 0) {\n        return v[0] - (fn(v[0], v[0], v[1], v[1], -f) - v[0]);\n      }\n      if (k > 1) {\n        return v[m] - (fn(v[m], v[m], v[m - 1], v[m - 1], f - m) - v[m]);\n      }\n      return fn(\n        v[i ? i - 1 : 0],\n        v[i],\n        v[m < i + 1 ? m : i + 1],\n        v[m < i + 2 ? m : i + 2],\n        f - i\n      );\n    }\n  }\n};\n\nexport default Interpolation;\n","// import now from \"./Now\";\nimport { now } from \"@zyzgroup/core-common\";\nimport type { Tween, UnknownProps } from \"./Tween\";\n\n/**\n * Controlling groups of tweens\n *\n * Using the TWEEN singleton to manage your tweens can cause issues in large apps with many components.\n * In these cases, you may want to create your own smaller groups of tween\n */\nexport default class Group {\n  private _tweens: {\n    [key: string]: Tween<UnknownProps>;\n  } = {};\n\n  private _tweensAddedDuringUpdate: {\n    [key: string]: Tween<UnknownProps>;\n  } = {};\n\n  getAll(): Array<Tween<UnknownProps>> {\n    return Object.keys(this._tweens).map((tweenId) => this._tweens[tweenId]);\n  }\n\n  removeAll(): void {\n    this._tweens = {};\n  }\n\n  add(tween: Tween<UnknownProps>): void {\n    this._tweens[tween.getId()] = tween;\n    this._tweensAddedDuringUpdate[tween.getId()] = tween;\n  }\n\n  remove(tween: Tween<UnknownProps>): void {\n    delete this._tweens[tween.getId()];\n    delete this._tweensAddedDuringUpdate[tween.getId()];\n  }\n\n  update(time: number = now(), preserve = false): boolean {\n    const tweenIds = Object.keys(this._tweens);\n    // if (tweenIds.length === 0) {\n    //   return false;\n    // }\n    // while (tweenIds.length > 0) {\n    //   this._tweensAddedDuringUpdate = {};\n    for (let i = 0; i < tweenIds.length; i++) {\n      const tween = this._tweens[tweenIds[i]];\n      const autoStart = !preserve;\n      if (tween && tween.update(time, autoStart) === false && !preserve) {\n        delete this._tweens[tweenIds[i]];\n      }\n    }\n    // tweenIds = Object.keys(this._tweensAddedDuringUpdate);\n    // }\n    // return true;\n    return !!Object.keys(this._tweens).length;\n  }\n}\n","import Group from \"./Group\";\n\nexport const mainGroup = new Group();\n","import Easing from \"./Easing\";\nimport Interpolation from \"./Interpolation\";\nimport Sequence from \"./Sequence\";\n// import now from \"./Now\";\nimport { now } from \"@zyzgroup/core-common\";\nimport { mainGroup } from \"./mainGroup\";\n\nimport type { EasingFunction } from \"./Easing\";\nimport type { InterpolationFunction } from \"./Interpolation\";\nimport type Group from \"./Group\";\n\nexport type UnknownProps = Record<string, any>;\n\nexport class Tween<T extends UnknownProps> {\n  private _id = Sequence.nextId();\n\n  // 是否正在执行\n  private _isPlaying = false;\n  // 动画开始时间\n  private _startTime = 0;\n  // 动画延迟时间\n  private _delayTime = 0;\n  // 动画持续时间\n  private _durationTime = 1000;\n\n  // 是否暂停\n  private _isPaused = false;\n  // 暂停开始时间\n  private _pauseStartTime = 0;\n\n  // 动画重复次数初始值\n  private _initialRepeat = 0;\n  // 动画重复次数剩余值\n  private _repeat = 0;\n  // 动画重复间隔\n  private _repeatDelayTime?: number;\n  // 动画重复时是否倒置\n  private _yoyo = false;\n  // 是否倒置运行\n  private _reversed = false;\n\n  // 初始值\n  private _valuesStart: UnknownProps = {};\n  // 结束值\n  private _valuesEnd: Record<string, number | string> = {};\n  // reverse时的初始值\n  private _valuesStartRepeat: UnknownProps = {};\n\n  // 缓动函数\n  private _easingFunction: EasingFunction = Easing.Linear.None;\n  // 插值函数\n  private _interpolationFunction: InterpolationFunction = Interpolation.Linear;\n\n  // 链式动画数组\n  private _chainedTweens: Array<Tween<any>> = [];\n  // 链式动画是否已停止\n  private _isChainStopped = false;\n\n  // 动画开始hook\n  private _onStartCallback?: (object: T) => void;\n  // 动画开始hook是否已被执行\n  private _onStartCallbackFired = false;\n  // 动画每轮repeat开始hook\n  private _onEveryStartCallback?: (object: T) => void;\n  // 动画每轮repeat开始hook是否已被执行\n  private _onEveryStartCallbackFired = false;\n  // 动画更新hook\n  private _onUpdateCallback?: (object: T, elapsed: number) => void;\n  // 动画repeat hook\n  private _onRepeatCallback?: (object: T) => void;\n  // 动画完成hook\n  private _onCompleteCallback?: (object: T) => void;\n  // 动画结束hook\n  private _onStopCallback?: (object: T) => void;\n  // 是否强制结束动画\n  private _goToEnd = false;\n\n  constructor(private _object: T, private _group: Group | false = mainGroup) {}\n\n  getId(): number {\n    return this._id;\n  }\n\n  isPlaying(): boolean {\n    return this._isPlaying;\n  }\n\n  isPaused(): boolean {\n    return this._isPaused;\n  }\n\n  to(properties: UnknownProps, duration?: number): this {\n    this._valuesEnd = Object.create(properties);\n    if (duration !== undefined) {\n      this._durationTime = duration;\n    }\n    return this;\n  }\n\n  duration(d = 1000): this {\n    this._durationTime = d;\n    return this;\n  }\n\n  start(time: number = now()): this {\n    if (this._isPlaying) {\n      return this;\n    }\n    this._group && this._group.add(this as Tween<UnknownProps>);\n    this._repeat = this._initialRepeat;\n    if (this._reversed) {\n      this._reversed = false;\n      for (const property in this._valuesStartRepeat) {\n        this._swapEndStartRepeatValues(property);\n        this._valuesStart[property] = this._valuesStartRepeat[property];\n      }\n    }\n    this._isPlaying = true;\n    this._isPaused = false;\n    this._onStartCallbackFired = false;\n    this._onEveryStartCallbackFired = false;\n    this._isChainStopped = false;\n    this._startTime = time;\n    this._startTime += this._delayTime;\n    this._setupProperties(\n      this._object,\n      this._valuesStart,\n      this._valuesEnd,\n      this._valuesStartRepeat\n    );\n    return this;\n  }\n\n  private _setupProperties(\n    _object: UnknownProps,\n    _valuesStart: UnknownProps,\n    _valuesEnd: UnknownProps,\n    _valuesStartRepeat: UnknownProps\n  ): void {\n    for (const property in _valuesEnd) {\n      const startValue = _object[property];\n      const startValueIsArray = Array.isArray(startValue);\n      const propType = startValueIsArray ? \"array\" : typeof startValue;\n      const isInterpolationList =\n        !startValueIsArray && Array.isArray(_valuesEnd[property]);\n      if (propType === \"undefined\" || propType === \"function\") {\n        continue;\n      }\n      if (isInterpolationList) {\n        let endValues = _valuesEnd[property] as Array<number | string>;\n        if (endValues.length === 0) {\n          continue;\n        }\n        endValues = endValues.map(\n          this._handleRelativeValue.bind(this, startValue as number)\n        );\n        _valuesEnd[property] = [startValue].concat(endValues);\n      }\n      if (\n        (propType === \"object\" || startValueIsArray) &&\n        startValue &&\n        !isInterpolationList\n      ) {\n        _valuesStart[property] = startValueIsArray ? [] : {};\n        for (const prop in startValue as object) {\n          _valuesStart[property][prop] = startValue[prop];\n        }\n        _valuesStartRepeat[property] = startValueIsArray ? [] : {}; // TODO? repeat nested values? And yoyo? And array values?\n        this._setupProperties(\n          startValue,\n          _valuesStart[property],\n          _valuesEnd[property],\n          _valuesStartRepeat[property]\n        );\n      } else {\n        if (typeof _valuesStart[property] === \"undefined\") {\n          _valuesStart[property] = startValue;\n        }\n        if (!startValueIsArray) {\n          _valuesStart[property] *= 1.0;\n        }\n        if (isInterpolationList) {\n          _valuesStartRepeat[property] = _valuesEnd[property].slice().reverse();\n        } else {\n          _valuesStartRepeat[property] = _valuesStart[property] || 0;\n        }\n      }\n    }\n  }\n\n  stop(): this {\n    if (!this._isChainStopped) {\n      this._isChainStopped = true;\n      this.stopChainedTweens();\n    }\n    if (!this._isPlaying) {\n      return this;\n    }\n    this._group && this._group.remove(this as Tween<UnknownProps>);\n    this._isPlaying = false;\n    this._isPaused = false;\n    if (this._onStopCallback) {\n      this._onStopCallback(this._object);\n    }\n    return this;\n  }\n\n  end(): this {\n    this._goToEnd = true;\n    this.update(Infinity);\n    return this;\n  }\n\n  pause(time: number = now()): this {\n    if (this._isPaused || !this._isPlaying) {\n      return this;\n    }\n    this._isPaused = true;\n    this._pauseStartTime = time;\n    this._group && this._group.remove(this as Tween<UnknownProps>);\n    return this;\n  }\n\n  resume(time: number = now()): this {\n    if (!this._isPaused || !this._isPlaying) {\n      return this;\n    }\n    this._isPaused = false;\n    this._startTime += time - this._pauseStartTime;\n    this._pauseStartTime = 0;\n    this._group && this._group.add(this as Tween<UnknownProps>);\n    return this;\n  }\n\n  stopChainedTweens(): this {\n    for (\n      let i = 0, numChainedTweens = this._chainedTweens.length;\n      i < numChainedTweens;\n      i++\n    ) {\n      this._chainedTweens[i].stop();\n    }\n    return this;\n  }\n\n  group(group = mainGroup): this {\n    this._group = group;\n    return this;\n  }\n\n  delay(amount = 0): this {\n    this._delayTime = amount;\n    return this;\n  }\n\n  repeat(times = 0): this {\n    this._initialRepeat = times;\n    this._repeat = times;\n    return this;\n  }\n\n  repeatDelay(amount?: number): this {\n    this._repeatDelayTime = amount;\n    return this;\n  }\n\n  yoyo(yoyo = false): this {\n    this._yoyo = yoyo;\n    return this;\n  }\n\n  easing(easingFunction: EasingFunction = Easing.Linear.None): this {\n    this._easingFunction = easingFunction;\n    return this;\n  }\n\n  interpolation(\n    interpolationFunction: InterpolationFunction = Interpolation.Linear\n  ): this {\n    this._interpolationFunction = interpolationFunction;\n    return this;\n  }\n\n  chain(...tweens: Array<Tween<any>>): this {\n    this._chainedTweens = tweens;\n    return this;\n  }\n\n  onStart(callback?: (object: T) => void): this {\n    this._onStartCallback = callback;\n    return this;\n  }\n\n  onEveryStart(callback?: (object: T) => void): this {\n    this._onEveryStartCallback = callback;\n    return this;\n  }\n\n  onUpdate(callback?: (object: T, elapsed: number) => void): this {\n    this._onUpdateCallback = callback;\n    return this;\n  }\n\n  onRepeat(callback?: (object: T) => void): this {\n    this._onRepeatCallback = callback;\n    return this;\n  }\n\n  onComplete(callback?: (object: T) => void): this {\n    this._onCompleteCallback = callback;\n    return this;\n  }\n\n  onStop(callback?: (object: T) => void): this {\n    this._onStopCallback = callback;\n    return this;\n  }\n\n  /**\n   * @returns true if the tween is still playing after the update, false otherwise\n   */\n  update(time = now(), autoStart = true): boolean {\n    if (this._isPaused) return true;\n    let property;\n    let elapsed;\n    const endTime = this._startTime + this._durationTime;\n    if (!this._goToEnd && !this._isPlaying) {\n      if (time > endTime) return false;\n      if (autoStart) this.start(time);\n    }\n    this._goToEnd = false;\n    if (time < this._startTime) {\n      return true;\n    }\n    if (this._onStartCallbackFired === false) {\n      if (this._onStartCallback) {\n        this._onStartCallback(this._object);\n      }\n      this._onStartCallbackFired = true;\n    }\n    if (this._onEveryStartCallbackFired === false) {\n      if (this._onEveryStartCallback) {\n        this._onEveryStartCallback(this._object);\n      }\n      this._onEveryStartCallbackFired = true;\n    }\n    elapsed = (time - this._startTime) / this._durationTime;\n    elapsed = this._durationTime === 0 || elapsed > 1 ? 1 : elapsed;\n    const value = this._easingFunction(elapsed);\n    this._updateProperties(\n      this._object,\n      this._valuesStart,\n      this._valuesEnd,\n      value\n    );\n    if (this._onUpdateCallback) {\n      this._onUpdateCallback(this._object, elapsed);\n    }\n    if (elapsed === 1) {\n      if (this._repeat > 0) {\n        if (isFinite(this._repeat)) {\n          this._repeat--;\n        }\n        for (property in this._valuesStartRepeat) {\n          if (!this._yoyo && typeof this._valuesEnd[property] === \"string\") {\n            this._valuesStartRepeat[property] =\n              this._valuesStartRepeat[property] +\n              parseFloat(this._valuesEnd[property] as string);\n          }\n          if (this._yoyo) {\n            this._swapEndStartRepeatValues(property);\n          }\n          this._valuesStart[property] = this._valuesStartRepeat[property];\n        }\n        if (this._yoyo) {\n          this._reversed = !this._reversed;\n        }\n        if (this._repeatDelayTime !== undefined) {\n          this._startTime = time + this._repeatDelayTime;\n        } else {\n          this._startTime = time + this._delayTime;\n        }\n        if (this._onRepeatCallback) {\n          this._onRepeatCallback(this._object);\n        }\n        this._onEveryStartCallbackFired = false;\n        return true;\n      } else {\n        if (this._onCompleteCallback) {\n          this._onCompleteCallback(this._object);\n        }\n        for (\n          let i = 0, numChainedTweens = this._chainedTweens.length;\n          i < numChainedTweens;\n          i++\n        ) {\n          // Make the chained tweens start exactly at the time they should,\n          // even if the `update()` method was called way past the duration of the tween\n          this._chainedTweens[i].start(this._startTime + this._durationTime);\n        }\n        this._isPlaying = false;\n        return false;\n      }\n    }\n    return true;\n  }\n\n  private _updateProperties(\n    _object: UnknownProps,\n    _valuesStart: UnknownProps,\n    _valuesEnd: UnknownProps,\n    value: number\n  ): void {\n    for (const property in _valuesEnd) {\n      if (_valuesStart[property] === undefined) {\n        continue;\n      }\n      const start = _valuesStart[property] || 0;\n      let end = _valuesEnd[property];\n      const startIsArray = Array.isArray(_object[property]);\n      const endIsArray = Array.isArray(end);\n      const isInterpolationList = !startIsArray && endIsArray;\n      if (isInterpolationList) {\n        _object[property] = this._interpolationFunction(\n          end as Array<number>,\n          value\n        );\n      } else if (typeof end === \"object\" && end) {\n        this._updateProperties(_object[property], start, end, value);\n      } else {\n        end = this._handleRelativeValue(\n          start as number,\n          end as number | string\n        );\n        if (typeof end === \"number\") {\n          _object[property] = start + (end - start) * value;\n        }\n      }\n    }\n  }\n\n  // Parses relative end values with start as base (e.g.: +10, -3)\n  private _handleRelativeValue(start: number, end: number | string): number {\n    if (typeof end !== \"string\") {\n      return end;\n    }\n    if (end.charAt(0) === \"+\" || end.charAt(0) === \"-\") {\n      return start + parseFloat(end);\n    } else {\n      return parseFloat(end);\n    }\n  }\n\n  private _swapEndStartRepeatValues(property: string): void {\n    const tmp = this._valuesStartRepeat[property];\n    const endValue = this._valuesEnd[property];\n    if (typeof endValue === \"string\") {\n      this._valuesStartRepeat[property] =\n        this._valuesStartRepeat[property] + parseFloat(endValue);\n    } else {\n      this._valuesStartRepeat[property] = endValue;\n    }\n    this._valuesEnd[property] = tmp;\n  }\n}\n\nexport default Tween;\n","// import now from \"./Now\";\nimport { now } from \"@zyzgroup/core-common\";\nimport Sequence from \"./Sequence\";\n\nimport Easing from \"./Easing\";\nexport { Easing, type EasingFunction, reverseEasing } from \"./Easing\";\nexport * from \"./BezierEasing\";\n\nimport Interpolation from \"./Interpolation\";\nexport { Interpolation, type InterpolationFunction } from \"./Interpolation\";\n\nimport Tween from \"./Tween\";\nexport * from \"./Tween\";\n\nimport Group from \"./Group\";\nexport * from \"./Group\";\nimport { mainGroup } from \"./mainGroup\";\n\nconst nextId = Sequence.nextId;\n\n// This is the best way to export things in a way that's compatible with both ES\n// Modules and CommonJS, without build hacks, and so as not to break the\n// existing API.\n// https://github.com/rollup/rollup/issues/1961#issuecomment-423037881\nconst getAll = mainGroup.getAll.bind(mainGroup);\nconst removeAll = mainGroup.removeAll.bind(mainGroup);\nconst add = mainGroup.add.bind(mainGroup);\nconst remove = mainGroup.remove.bind(mainGroup);\nconst update = mainGroup.update.bind(mainGroup);\n\nexport const TWEEN = {\n  now,\n  Sequence,\n  Easing,\n  Interpolation,\n  Group,\n  Tween,\n  nextId,\n  getAll,\n  removeAll,\n  add,\n  remove,\n  update\n};\nexport default TWEEN;\n","import { now } from \"@zyzgroup/core-common\";\n\nexport class Clock {\n  autoStart: boolean;\n  startTime: number;\n  oldTime: number;\n  elapsedTime: number;\n  running: boolean;\n\n  constructor(autoStart = true) {\n    this.autoStart = autoStart;\n    this.startTime = 0;\n    this.oldTime = 0;\n    this.elapsedTime = 0;\n    this.running = false;\n  }\n\n  start() {\n    this.startTime = now();\n    this.oldTime = this.startTime;\n    this.elapsedTime = 0;\n    this.running = true;\n  }\n\n  stop() {\n    this.getElapsedTime();\n    this.running = false;\n    this.autoStart = false;\n  }\n\n  // 毫秒\n  getElapsedTime() {\n    this.getDelta();\n    return this.elapsedTime;\n  }\n\n  // 毫秒\n  getDelta() {\n    let diff = 0;\n    if (this.autoStart && !this.running) {\n      this.start();\n      return 0;\n    }\n    if (this.running) {\n      const newTime = now();\n      diff = newTime - this.oldTime;\n      this.oldTime = newTime;\n      this.elapsedTime += diff;\n    }\n    return diff;\n  }\n}\n\nexport default Clock;\n","import { ShellSort, deleteArrayItem } from \"@zyzgroup/core-common\";\nimport {\n  Tween,\n  Easing,\n  reverseEasing,\n  type EasingFunction,\n  Interpolation,\n  type InterpolationFunction\n} from \"./tween\";\nimport { requestAnimationFrameCycle } from \"./schedule\";\nimport Clock from \"./Clock\";\n// import gsap from \"gsap\";\n\nexport type TweenValue = Record<string, any>;\n\nexport type TweenRawOptions = {\n  /// 动画占用帧数\n  frames?: number;\n  /// 开始帧数\n  delay?: number;\n  easeFunction?: EasingFunction;\n  interpolationFunction?: InterpolationFunction;\n  repeat?: number | typeof Infinity;\n  yoyo?: boolean;\n  onStart?: (currentValue: TweenValue) => void;\n  onUpdate?: (currentValue: TweenValue, elapsed: number) => void;\n  onComplete?: (currentValue: TweenValue) => void;\n};\n\ntype TimelineTweenConfig = Required<TweenRawOptions> & {\n  fromValues: TweenValue;\n  // number[] 代表使用插值\n  toValues: TweenValue;\n  tween?: Tween<TweenValue>;\n};\n\nexport class Timeline {\n  public tweens: TimelineTweenConfig[] = [];\n\n  /// 每帧时间\n  public frameDuration: number;\n  public onGroupStart?: () => void;\n  public onGroupComplete?: () => void;\n\n  constructor(options?: {\n    frameDuration?: number;\n    onGroupStart?: () => void;\n    onGroupComplete?: () => void;\n  }) {\n    this.frameDuration = options?.frameDuration || 1000;\n    this.onGroupStart = options?.onGroupStart;\n    this.onGroupComplete = options?.onGroupComplete;\n  }\n\n  public get count(): number {\n    return this.tweens.length;\n  }\n\n  public clear(): void {\n    this.tweens = [];\n  }\n\n  private sort(reverse = false) {\n    ShellSort<TimelineTweenConfig>(\n      this.tweens,\n      (a: TimelineTweenConfig, b: TimelineTweenConfig) =>\n        !reverse ? a.delay <= b.delay : a.delay > b.delay\n    );\n  }\n\n  private cloneTweens(\n    tweens: TimelineTweenConfig[] = this.tweens\n  ): TimelineTweenConfig[] {\n    const clones: TimelineTweenConfig[] = [];\n    tweens.forEach((tween) => {\n      const t = { ...tween };\n      delete t.tween;\n      t.fromValues = { ...t.fromValues };\n      t.toValues = { ...t.toValues };\n      clones.push(t);\n    });\n    return clones;\n  }\n\n  public addTween(\n    fromValues: TweenValue,\n    toValues: TweenValue,\n    options?: TweenRawOptions\n  ): this {\n    const tweenConfig = {\n      fromValues,\n      toValues,\n      frames: typeof options?.frames === \"number\" ? options.frames : 1,\n      /// 默认顺序执行\n      delay:\n        typeof options?.delay === \"number\" ? options.delay : this.tweens.length,\n      easeFunction: options?.easeFunction || Easing.Linear.None,\n      interpolationFunction:\n        options?.interpolationFunction || Interpolation.Linear,\n      repeat: typeof options?.repeat === \"number\" ? options.repeat : 0,\n      yoyo: options?.yoyo || false,\n      onStart: options?.onStart || (() => {}),\n      onUpdate: options?.onUpdate || (() => {}),\n      onComplete: options?.onComplete || (() => {})\n    };\n    this.tweens.push(tweenConfig);\n    // this.sort();\n    return this;\n  }\n\n  private cancelRequestAnimationCycle = () => {};\n  private runTweens(tweens: TimelineTweenConfig[]): Promise<void> {\n    this.cancelRequestAnimationCycle();\n    const clock = new Clock();\n    const frameDuration = this.frameDuration;\n    return new Promise<void>((resolve) => {\n      this.onGroupStart?.();\n      this.cancelRequestAnimationCycle = requestAnimationFrameCycle(\n        (t: number) => {\n          if (this.isPaused) {\n            // tweens.forEach((t) => {\n            //   if (t.tween && t.tween.isPlaying()) {\n            //     t.tween.pause();\n            //   }\n            // });\n          } else {\n            const time = Math.max(0, t - this.pausedDuration);\n            const duration = Math.max(\n              0,\n              clock.getElapsedTime() - this.pausedDuration\n            );\n            tweens\n              .filter((t) => t.delay * frameDuration <= duration)\n              .forEach((t) => {\n                /// 开始的tween\n                if (!t.tween) {\n                  t.tween = new Tween({ ...t.fromValues })\n                    .to({ ...t.toValues }, t.frames * frameDuration)\n                    // .delay(t.delay * frameDuration)\n                    .easing(t.easeFunction)\n                    .interpolation(t.interpolationFunction)\n                    .repeat(t.repeat)\n                    .yoyo(t.yoyo)\n                    .onStart(t.onStart)\n                    .onUpdate(t.onUpdate)\n                    .onComplete(t.onComplete);\n                  t.tween.start(time);\n                  // tween.chain(tweenBack);\n                  // tweenBack.chain(tween);\n                  // tween.start();\n                  // tween.start(\"+2000\");\n                  // tween.start(\"-500\");\n                  // tween.stop();\n                }\n                // if (t.tween.isPaused()) {\n                //   t.tween.resume();\n                // }\n                if (\n                  /// 进行中的tween\n                  (t.delay + t.frames * (t.repeat + 1)) * frameDuration >\n                  duration\n                ) {\n                  t.tween.update(time);\n                } else {\n                  /// 结束的tween\n                  if (t.tween.isPlaying()) {\n                    t.tween.end();\n                  }\n                  deleteArrayItem(tweens, t);\n                }\n              });\n          }\n          const isContinue = !!tweens.length;\n          if (!isContinue) {\n            this.onGroupComplete?.();\n            resolve();\n          }\n          return isContinue;\n        }\n      );\n    });\n  }\n\n  public isPaused = false;\n  private pausedClock = new Clock();\n  private pausedDuration = 0;\n\n  /// 注意传入的 tweens 为深拷贝新数据\n  play(tweens: TimelineTweenConfig[] = this.cloneTweens(this.tweens)) {\n    this.isPaused = false;\n    this.pausedDuration = 0;\n    this.runTweens(tweens);\n  }\n\n  reverse() {\n    const reverseTweens = this.cloneTweens(this.tweens);\n    let maxFrames = 0;\n    reverseTweens.forEach((t) => {\n      maxFrames = Math.max(maxFrames, t.delay + t.frames);\n      t.easeFunction = reverseEasing(t.easeFunction);\n      const temp = { ...t.toValues };\n      t.toValues = { ...t.fromValues };\n      t.fromValues = { ...temp };\n    });\n    /// 改变delay以改变执行顺序\n    reverseTweens.forEach((t) => {\n      t.delay = maxFrames - t.frames;\n    });\n    // reverseTweens.sort();\n    this.play(reverseTweens);\n  }\n\n  pause() {\n    this.pausedClock.start();\n    this.isPaused = true;\n  }\n\n  resume() {\n    this.pausedDuration += this.pausedClock.getElapsedTime();\n    this.pausedClock.stop();\n    this.isPaused = false;\n  }\n}\n\nexport default Timeline;\n","import {\n  type AnyElement,\n  HashTable,\n  HashTableOverflow,\n  getNextPrime,\n  mergeObjectDeep\n} from \"@zyzgroup/core-common\";\nimport { VNode, h, hFromEl, mount, patch } from \"../vnode\";\nimport { scheduleIdleAsap } from \"../animate\";\n\nconst globalVNodeCache = new HashTable<VNode>({\n  objectSignature: (v) => v.name\n  // size: getNextPrime(500),\n  // overflow: HashTableOverflow.SLIDE\n});\n\n// 前提：el已挂载到dom上！\nexport function getVnode(el: AnyElement, cache = globalVNodeCache): VNode {\n  // 性能瓶颈\n  let vnode = cache?.find((vnode) => vnode.el == el);\n  if (vnode) {\n    return vnode;\n  }\n  vnode = hFromEl(el);\n  cache.put(vnode);\n  return vnode;\n}\n\n// 前提：el已挂载到dom上！\nexport function updateVnode(\n  el: AnyElement,\n  update: (vnode: VNode) => void,\n  cache = globalVNodeCache\n) {\n  const vnode = getVnode(el, cache);\n  if (!vnode.alternate) {\n    vnode.alternate = hFromEl(el);\n    mergeObjectDeep(vnode.alternate.props, vnode.props, true);\n  }\n  update(vnode.alternate);\n}\n\n// 更新 vnode to 真实dom\n// 前提：el已挂载到dom上！\nfunction patchVnode(cache = globalVNodeCache) {\n  cache.update((vnode: VNode) => {\n    const alternate = vnode.alternate;\n    if (alternate) {\n      patch(vnode, alternate);\n      // 提高性能：不改变 cache 中 vnode 引用\n      vnode.props = alternate.props;\n      vnode.alternate = undefined;\n      return true;\n    } else {\n      return true;\n    }\n  });\n}\n\nexport function scheduleVnodeImmediately(cache = globalVNodeCache) {\n  patchVnode(cache);\n}\n\nexport function scheduleVnodeAsap(cache = globalVNodeCache) {\n  scheduleIdleAsap(() => patchVnode(cache), {\n    name: \"PATCH_VNODES\",\n    timeout: 50\n  });\n}\n","// import UPNG from \"./UPNG\";\n\nexport type ImageDisplayMode =\n  | \"scaleToFill\" // 不保持纵横比缩放图片，使图片的宽高完全拉伸至填满 image 元素\n  | \"aspectFit\" // 保持纵横比缩放图片，使图片的长边能完全显示出来。也就是说，可以完整地将图片显示出来\n  | \"aspectFill\" // 保持纵横比缩放图片，只保证图片的短边能完全显示出来。也就是说，图片通常只在水平或垂直方向是完整的，另一个方向将会发生截取\n  | \"widthFix\" // 保持纵横比缩放图片，宽度完全拉伸，高度自动变化\n  | \"heightFix\"; // 保持纵横比缩放图片，高度完全拉伸，宽度自动变化\n\nexport function computeImageDisplayRect(\n  mode: ImageDisplayMode,\n  sourceWidth: number,\n  sourceHeight: number,\n  containerWidth: number,\n  containerHeight: number\n): { width: number; height: number } {\n  const sourceAspectRatio = sourceWidth / sourceHeight;\n  let showWidth = 0;\n  let showHeight = 0;\n  switch (mode) {\n    case \"aspectFit\":\n      if (sourceAspectRatio >= 1) {\n        showWidth = containerWidth;\n        showHeight = showWidth / sourceAspectRatio;\n        if (showHeight > containerHeight) {\n          showHeight = containerHeight;\n          showWidth = showHeight * sourceAspectRatio;\n        }\n      } else {\n        showHeight = containerHeight;\n        showWidth = showHeight * sourceAspectRatio;\n        if (showWidth > containerWidth) {\n          showWidth = containerWidth;\n          showHeight = showWidth / sourceAspectRatio;\n        }\n      }\n      break;\n    case \"aspectFill\":\n      if (sourceAspectRatio >= 1) {\n        showHeight = containerHeight;\n        showWidth = showHeight * sourceAspectRatio;\n      } else {\n        showWidth = containerWidth;\n        showHeight = showWidth / sourceAspectRatio;\n      }\n      break;\n    case \"widthFix\":\n      showWidth = containerWidth;\n      showHeight = showWidth / sourceAspectRatio;\n      break;\n    case \"heightFix\":\n      showHeight = containerHeight;\n      showWidth = showHeight * sourceAspectRatio;\n      break;\n    case \"scaleToFill\":\n    default:\n      showWidth = containerWidth;\n      showHeight = containerHeight;\n      break;\n  }\n  return { width: showWidth, height: showHeight };\n}\n\nexport function getImageData(\n  image: ImageBitmap | HTMLImageElement | HTMLVideoElement\n): ImageData {\n  try {\n    const canvas = document.createElement(\"canvas\") as HTMLCanvasElement;\n    const ctx = canvas.getContext(\"2d\") as CanvasRenderingContext2D;\n    canvas.width = image.width;\n    canvas.height = image.height;\n    ctx.drawImage(image, 0, 0, canvas.width, canvas.height);\n    return ctx.getImageData(0, 0, canvas.width, canvas.height) as ImageData;\n  } catch (e) {\n    // Uncaught SecurityError: Failed to execute 'getImageData' on 'CanvasRenderingContext2D': The canvas has been tainted by cross-origin data.\n    return new ImageData(image.width, image.height);\n  }\n}\n\n/// ImageData对象转Bitmap\nexport const imageDataToBitmap = (imageData: ImageData) => {\n  //\n  // BITMAPFILEHEADER: http://msdn.microsoft.com/en-us/library/windows/desktop/dd183374(v=vs.85).aspx\n  // BITMAPINFOHEADER: http://msdn.microsoft.com/en-us/library/dd183376.aspx\n  //\n\n  const biWidth = imageData.width;\n  const biHeight = imageData.height;\n  const biSizeImage = biWidth * biHeight * 3;\n  const bfSize = biSizeImage + 54; // total header size = 54 bytes\n\n  //\n  //  typedef struct tagBITMAPFILEHEADER {\n  //  \tWORD bfType;\n  //  \tDWORD bfSize;\n  //  \tWORD bfReserved1;\n  //  \tWORD bfReserved2;\n  //  \tDWORD bfOffBits;\n  //  } BITMAPFILEHEADER;\n  //\n  const BITMAPFILEHEADER = [\n    // WORD bfType -- The file type signature; must be \"BM\"\n    0x42,\n    0x4d,\n    // DWORD bfSize -- The size, in bytes, of the bitmap file\n    bfSize & 0xff,\n    (bfSize >> 8) & 0xff,\n    (bfSize >> 16) & 0xff,\n    (bfSize >> 24) & 0xff,\n    // WORD bfReserved1 -- Reserved; must be zero\n    0,\n    0,\n    // WORD bfReserved2 -- Reserved; must be zero\n    0,\n    0,\n    // DWORD bfOffBits -- The offset, in bytes, from the beginning of the BITMAPFILEHEADER structure to the bitmap bits.\n    54,\n    0,\n    0,\n    0\n  ];\n\n  //\n  //  typedef struct tagBITMAPINFOHEADER {\n  //  \tDWORD biSize;\n  //  \tLONG  biWidth;\n  //  \tLONG  biHeight;\n  //  \tWORD  biPlanes;\n  //  \tWORD  biBitCount;\n  //  \tDWORD biCompression;\n  //  \tDWORD biSizeImage;\n  //  \tLONG  biXPelsPerMeter;\n  //  \tLONG  biYPelsPerMeter;\n  //  \tDWORD biClrUsed;\n  //  \tDWORD biClrImportant;\n  //  } BITMAPINFOHEADER, *PBITMAPINFOHEADER;\n  //\n  const BITMAPINFOHEADER = [\n    // DWORD biSize -- The number of bytes required by the structure\n    40,\n    0,\n    0,\n    0,\n    // LONG biWidth -- The width of the bitmap, in pixels\n    biWidth & 0xff,\n    (biWidth >> 8) & 0xff,\n    (biWidth >> 16) & 0xff,\n    (biWidth >> 24) & 0xff,\n    // LONG biHeight -- The height of the bitmap, in pixels\n    biHeight & 0xff,\n    (biHeight >> 8) & 0xff,\n    (biHeight >> 16) & 0xff,\n    (biHeight >> 24) & 0xff,\n    // WORD biPlanes -- The number of planes for the target device. This value must be set to 1\n    1,\n    0,\n    // WORD biBitCount -- The number of bits-per-pixel, 24 bits-per-pixel -- the bitmap\n    // has a maximum of 2^24 colors (16777216, Truecolor)\n    24,\n    0,\n    // DWORD biCompression -- The type of compression, BI_RGB (code 0) -- uncompressed\n    0,\n    0,\n    0,\n    0,\n    // DWORD biSizeImage -- The size, in bytes, of the image. This may be set to zero for BI_RGB bitmaps\n    biSizeImage & 0xff,\n    (biSizeImage >> 8) & 0xff,\n    (biSizeImage >> 16) & 0xff,\n    (biSizeImage >> 24) & 0xff,\n    // LONG biXPelsPerMeter, unused\n    0,\n    0,\n    0,\n    0,\n    // LONG biYPelsPerMeter, unused\n    0,\n    0,\n    0,\n    0,\n    // DWORD biClrUsed, the number of color indexes of palette, unused\n    0,\n    0,\n    0,\n    0,\n    // DWORD biClrImportant, unused\n    0,\n    0,\n    0,\n    0\n  ];\n\n  const iPadding = (4 - ((biWidth * 3) % 4)) % 4;\n  const aImgData = imageData.data;\n\n  let strPixelData = \"\";\n  const biWidth4 = biWidth << 2;\n  let y = biHeight;\n  const fromCharCode = String.fromCharCode;\n\n  do {\n    const iOffsetY = biWidth4 * (y - 1);\n    let strPixelRow = \"\";\n    for (let x = 0; x < biWidth; x++) {\n      const iOffsetX = x << 2;\n      strPixelRow +=\n        fromCharCode(aImgData[iOffsetY + iOffsetX + 2]) +\n        fromCharCode(aImgData[iOffsetY + iOffsetX + 1]) +\n        fromCharCode(aImgData[iOffsetY + iOffsetX]);\n    }\n\n    for (let c = 0; c < iPadding; c++) {\n      strPixelRow += String.fromCharCode(0);\n    }\n\n    strPixelData += strPixelRow;\n  } while (--y);\n\n  function encodeData(data: string | any[]) {\n    if (!window.btoa) {\n      throw \"btoa undefined\";\n    }\n    let str = \"\";\n    if (typeof data == \"string\") {\n      str = data;\n    } else {\n      for (let i = 0; i < data.length; i++) {\n        str += String.fromCharCode(data[i]);\n      }\n    }\n    return btoa(str);\n  }\n\n  return (\n    encodeData(BITMAPFILEHEADER.concat(BITMAPINFOHEADER)) +\n    encodeData(strPixelData)\n  );\n};\n\n/**\n * ImageData对象转DataURL\n */\nexport function imageDataToDataURL(imageData: ImageData): string {\n  const { width, height } = imageData;\n  const canvas = document.createElement(\"canvas\") as HTMLCanvasElement;\n  const ctx = canvas.getContext(\"2d\") as CanvasRenderingContext2D;\n  canvas.width = width;\n  canvas.height = height;\n  ctx.putImageData(imageData, 0, 0, 0, 0, width, height);\n  const dataUrl = canvas.toDataURL(\"image/png\"); // 可添加 quality: any 进行有损压缩\n  return dataUrl;\n}\n\n/// ImageData对象转Blob\nexport const imageDataToBlob = (\n  imageData: ImageData,\n  exportImageType?: string,\n  cb?: (err: any, blob: Blob | null) => void\n) => {\n  const { width, height } = imageData;\n  const canvas = document.createElement(\"canvas\") as HTMLCanvasElement;\n  const ctx = canvas.getContext(\"2d\") as CanvasRenderingContext2D;\n  canvas.width = width;\n  canvas.height = height;\n  ctx.putImageData(imageData, 0, 0, 0, 0, width, height);\n  const toImageType = `image/${\n    exportImageType ? exportImageType.toLowerCase() : \"png\"\n  }`;\n  canvas.toBlob(\n    (blob: Blob | null) => {\n      cb?.(null, blob);\n    },\n    toImageType,\n    1\n  );\n};\n\nexport function blobToImageData(blob: Blob, options?: ImageBitmapOptions) {\n  return createImageBitmap(blob, options);\n}\n\n/// 获取图片的主要颜色值,返回表示颜色值的字符串,如rgb(red,green,blue)\nexport function getImageMainColor(imageData: ImageData) {\n  const arrR = [];\n  const arrG = [];\n  const arrB = [];\n  let j = 0;\n  for (let i = 0, len = imageData.data.length; i < len; i += 4) {\n    arrR[j] = imageData.data[i];\n    arrG[j] = imageData.data[i + 1];\n    arrB[j] = imageData.data[i + 2];\n    j += 1;\n  }\n  const R = _getArryWeightValue(arrR);\n  const G = _getArryWeightValue(arrG);\n  const B = _getArryWeightValue(arrB);\n  return \"rgb(\" + R + \",\" + G + \",\" + B + \")\";\n}\n// 用于获取数组中的最高权重值 返回数组的最高权重值\nfunction _getArryWeightValue(arr: number[]) {\n  const existArr = {} as { [index: number]: number };\n  const duplicationArr = [];\n  const duplicationCount = [];\n  for (let i = 0; i < arr.length; i++) {\n    if (!existArr[arr[i]]) {\n      existArr[arr[i]] = 1;\n    } else {\n      duplicationArr.push(arr[i]);\n    }\n  }\n  let k = 0;\n  for (let i = 0; i < duplicationArr.length; i++) {\n    k = 0;\n    for (let j = 0; j < duplicationArr.length; j++) {\n      if (duplicationArr[i] === duplicationArr[j]) {\n        k += 1;\n      }\n      duplicationCount[i] = k;\n    }\n  }\n  const max = Math.max.apply(null, duplicationCount);\n  let maxIndex = 0;\n  for (; maxIndex < duplicationCount.length; maxIndex++) {\n    if (duplicationCount[maxIndex] === max) {\n      return;\n    }\n  }\n  return duplicationArr[maxIndex];\n}\n\n/// 左右翻转ImageData\nexport const flipSideToSide = (imageData: ImageData) => {\n  const { data, width, height } = imageData;\n  const newImgData = new Uint8ClampedArray(data.length);\n  for (let y = 0; y < height; y++) {\n    for (let x = 0; x < width; x++) {\n      const startIndex = (y * width + x) * 4;\n      newImgData[startIndex] = data[(y * width + width - x - 1) * 4];\n      newImgData[startIndex + 1] = data[(y * width + width - x - 1) * 4 + 1];\n      newImgData[startIndex + 2] = data[(y * width + width - x - 1) * 4 + 2];\n      newImgData[startIndex + 3] = data[(y * width + width - x - 1) * 4 + 3];\n    }\n  }\n  const newImageData = new ImageData(newImgData, width, height);\n  return newImageData;\n};\n\n/// 上下翻转ImageData\nexport const flipUpsideDown = (imageData: ImageData) => {\n  const { data, width, height } = imageData;\n  const newImgData = new Uint8ClampedArray(data.length);\n  for (let y = 0; y < height; y++) {\n    for (let x = 0; x < width; x++) {\n      const startIndex = (y * width + x) * 4;\n      newImgData[startIndex] = data[((height - y - 1) * width + x) * 4];\n      newImgData[startIndex + 1] = data[((height - y - 1) * width + x) * 4 + 1];\n      newImgData[startIndex + 2] = data[((height - y - 1) * width + x) * 4 + 2];\n      newImgData[startIndex + 3] = data[((height - y - 1) * width + x) * 4 + 3];\n    }\n  }\n  const newImageData = new ImageData(newImgData, width, height);\n  return newImageData;\n};\n\n/// 左旋转ImageData\nexport const leftRotate = (imageData: ImageData) => {\n  const { data, width, height } = imageData;\n  const newImgData = new Uint8ClampedArray(data.length);\n  for (let x = 0; x < width; x++) {\n    for (let y = 0; y < height; y++) {\n      const startIndex = (x * height + y) * 4;\n      newImgData[startIndex] = data[(y * width + width - x - 1) * 4];\n      newImgData[startIndex + 1] = data[(y * width + width - x - 1) * 4 + 1];\n      newImgData[startIndex + 2] = data[(y * width + width - x - 1) * 4 + 2];\n      newImgData[startIndex + 3] = data[(y * width + width - x - 1) * 4 + 3];\n    }\n  }\n  const newImageData = new ImageData(newImgData, height, width);\n  return newImageData;\n};\n\n/// 右旋转ImageData\nexport const rightRotate = (imageData: ImageData) => {\n  const { data, width, height } = imageData;\n  const newImgData = new Uint8ClampedArray(data.length);\n  for (let x = 0; x < width; x++) {\n    for (let y = 0; y < height; y++) {\n      const startIndex = (x * height + y) * 4;\n      newImgData[startIndex] = data[((height - y - 1) * width + x) * 4];\n      newImgData[startIndex + 1] = data[((height - y - 1) * width + x) * 4 + 1];\n      newImgData[startIndex + 2] = data[((height - y - 1) * width + x) * 4 + 2];\n      newImgData[startIndex + 3] = data[((height - y - 1) * width + x) * 4 + 3];\n    }\n  }\n  const newImageData = new ImageData(newImgData, height, width);\n  return newImageData;\n};\n\n/// 灰化ImageData\nexport const toGrey = (imageData: ImageData) => {\n  const { data, width, height } = imageData;\n  const newImgData = new Uint8ClampedArray(data.length);\n  for (let y = 0; y < height; y++) {\n    for (let x = 0; x < width; x++) {\n      const startIndex = (y * width + x) * 4;\n      const avgColor =\n        (data[startIndex] + data[startIndex + 1] + data[startIndex + 2]) / 3;\n      newImgData[startIndex] = avgColor;\n      newImgData[startIndex + 1] = avgColor;\n      newImgData[startIndex + 2] = avgColor;\n      newImgData[startIndex + 3] = data[startIndex + 3];\n    }\n  }\n  const newImageData = new ImageData(newImgData, width, height);\n  return newImageData;\n};\n\n/// 灰化ImageData\nexport const toGrey2 = (imageData: ImageData) => {\n  const { data, width, height } = imageData;\n  const newImgData = new Uint8ClampedArray(data.length);\n  for (let y = 0; y < height; y++) {\n    for (let x = 0; x < width; x++) {\n      const startIndex = (y * width + x) * 4;\n      //relative luminance, humans perceive green more\n      const avgColor =\n        0.2126 * data[startIndex] +\n        0.7152 * data[startIndex + 1] +\n        0.0722 * data[startIndex + 2];\n      newImgData[startIndex] = avgColor;\n      newImgData[startIndex + 1] = avgColor;\n      newImgData[startIndex + 2] = avgColor;\n      newImgData[startIndex + 3] = data[startIndex + 3];\n    }\n  }\n  const newImageData = new ImageData(newImgData, width, height);\n  return newImageData;\n};\n\n/// 黑白化ImageData\nexport const toBlackAndWhite = (imageData: ImageData) => {\n  const { data, width, height } = imageData;\n  const newImgData = new Uint8ClampedArray(data.length);\n  for (let y = 0; y < height; y++) {\n    for (let x = 0; x < width; x++) {\n      const startIndex = (y * width + x) * 4;\n      const avgColor =\n        (data[startIndex] + data[startIndex + 1] + data[startIndex + 2]) / 3;\n      const newColor = avgColor > 127 ? 255 : 0;\n      newImgData[startIndex] = newColor;\n      newImgData[startIndex + 1] = newColor;\n      newImgData[startIndex + 2] = newColor;\n      newImgData[startIndex + 3] = data[startIndex + 3];\n    }\n  }\n  const newImageData = new ImageData(newImgData, width, height);\n  return newImageData;\n};\n\n/// 反相色滤镜ImageData\nexport const toOpposite = (imageData: ImageData) => {\n  const { data, width, height } = imageData;\n  const newImgData = new Uint8ClampedArray(data.length);\n  for (let y = 0; y < height; y++) {\n    for (let x = 0; x < width; x++) {\n      const startIndex = (y * width + x) * 4;\n      newImgData[startIndex] = 255 - data[startIndex];\n      newImgData[startIndex + 1] = 255 - data[startIndex + 1];\n      newImgData[startIndex + 2] = 255 - data[startIndex + 2];\n      newImgData[startIndex + 3] = data[startIndex + 3];\n    }\n  }\n  const newImageData = new ImageData(newImgData, width, height);\n  return newImageData;\n};\n\n/// 红色滤镜ImageData\nexport const toRed = (imageData: ImageData) => {\n  const { data, width, height } = imageData;\n  const newImgData = new Uint8ClampedArray(data.length);\n  for (let y = 0; y < height; y++) {\n    for (let x = 0; x < width; x++) {\n      const startIndex = (y * width + x) * 4;\n      newImgData[startIndex] = data[startIndex];\n      newImgData[startIndex + 1] = 0;\n      newImgData[startIndex + 2] = 0;\n      newImgData[startIndex + 3] = data[startIndex + 3];\n    }\n  }\n  const newImageData = new ImageData(newImgData, width, height);\n  return newImageData;\n};\n\n/// 绿色滤镜ImageData\nexport const toGreen = (imageData: ImageData) => {\n  const { data, width, height } = imageData;\n  const newImgData = new Uint8ClampedArray(data.length);\n  for (let y = 0; y < height; y++) {\n    for (let x = 0; x < width; x++) {\n      const startIndex = (y * width + x) * 4;\n      newImgData[startIndex] = 0;\n      newImgData[startIndex + 1] = data[startIndex + 1];\n      newImgData[startIndex + 2] = 0;\n      newImgData[startIndex + 3] = data[startIndex + 3];\n    }\n  }\n  const newImageData = new ImageData(newImgData, width, height);\n  return newImageData;\n};\n\n/// 蓝色滤镜ImageData\nexport const toBlue = (imageData: ImageData) => {\n  const { data, width, height } = imageData;\n  const newImgData = new Uint8ClampedArray(data.length);\n  for (let y = 0; y < height; y++) {\n    for (let x = 0; x < width; x++) {\n      const startIndex = (y * width + x) * 4;\n      newImgData[startIndex] = 0;\n      newImgData[startIndex + 1] = 0;\n      newImgData[startIndex + 2] = data[startIndex + 2];\n      newImgData[startIndex + 3] = data[startIndex + 3];\n    }\n  }\n  const newImageData = new ImageData(newImgData, width, height);\n  return newImageData;\n};\n\n/// 红绿色滤镜ImageData\nexport const toRedAndGreen = (imageData: ImageData) => {\n  const { data, width, height } = imageData;\n  const newImgData = new Uint8ClampedArray(data.length);\n  for (let y = 0; y < height; y++) {\n    for (let x = 0; x < width; x++) {\n      const startIndex = (y * width + x) * 4;\n      newImgData[startIndex] = data[startIndex];\n      newImgData[startIndex + 1] = data[startIndex + 1];\n      newImgData[startIndex + 2] = 0;\n      newImgData[startIndex + 3] = data[startIndex + 3];\n    }\n  }\n  const newImageData = new ImageData(newImgData, width, height);\n  return newImageData;\n};\n\n/// 红蓝色滤镜ImageData\nexport const toRedAndBlue = (imageData: ImageData) => {\n  const { data, width, height } = imageData;\n  const newImgData = new Uint8ClampedArray(data.length);\n  for (let y = 0; y < height; y++) {\n    for (let x = 0; x < width; x++) {\n      const startIndex = (y * width + x) * 4;\n      newImgData[startIndex] = data[startIndex];\n      newImgData[startIndex + 1] = 0;\n      newImgData[startIndex + 2] = data[startIndex + 1];\n      newImgData[startIndex + 3] = data[startIndex + 3];\n    }\n  }\n  const newImageData = new ImageData(newImgData, width, height);\n  return newImageData;\n};\n\n/// 蓝绿色滤镜ImageData\nexport const toBlueAndGreen = (imageData: ImageData) => {\n  const { data, width, height } = imageData;\n  const newImgData = new Uint8ClampedArray(data.length);\n  for (let y = 0; y < height; y++) {\n    for (let x = 0; x < width; x++) {\n      const startIndex = (y * width + x) * 4;\n      newImgData[startIndex] = 0;\n      newImgData[startIndex + 1] = data[startIndex + 1];\n      newImgData[startIndex + 2] = data[startIndex + 1];\n      newImgData[startIndex + 3] = data[startIndex + 3];\n    }\n  }\n  const newImageData = new ImageData(newImgData, width, height);\n  return newImageData;\n};\n\n/// 红灰色滤镜ImageData\nexport const toRedAndGrey = (imageData: ImageData) => {\n  const { data, width, height } = imageData;\n  const newImgData = new Uint8ClampedArray(data.length);\n  for (let y = 0; y < height; y++) {\n    for (let x = 0; x < width; x++) {\n      const startIndex = (y * width + x) * 4;\n      const greyColor = (data[startIndex + 1] + data[startIndex + 2]) / 2;\n      newImgData[startIndex] = data[startIndex];\n      newImgData[startIndex + 1] = greyColor;\n      newImgData[startIndex + 2] = greyColor;\n      newImgData[startIndex + 3] = data[startIndex + 3];\n    }\n  }\n  const newImageData = new ImageData(newImgData, width, height);\n  return newImageData;\n};\n\n/// 绿灰色滤镜ImageData\nexport const toGreenAndGrey = (imageData: ImageData) => {\n  const { data, width, height } = imageData;\n  const newImgData = new Uint8ClampedArray(data.length);\n  for (let y = 0; y < height; y++) {\n    for (let x = 0; x < width; x++) {\n      const startIndex = (y * width + x) * 4;\n      const greyColor = (data[startIndex] + data[startIndex + 2]) / 2;\n      newImgData[startIndex] = greyColor;\n      newImgData[startIndex + 1] = data[startIndex + 1];\n      newImgData[startIndex + 2] = greyColor;\n      newImgData[startIndex + 3] = data[startIndex + 3];\n    }\n  }\n  const newImageData = new ImageData(newImgData, width, height);\n  return newImageData;\n};\n\n/// 蓝灰色滤镜ImageData\nexport const toBlueAndGrey = (imageData: ImageData) => {\n  const { data, width, height } = imageData;\n  const newImgData = new Uint8ClampedArray(data.length);\n  for (let y = 0; y < height; y++) {\n    for (let x = 0; x < width; x++) {\n      const startIndex = (y * width + x) * 4;\n      const greyColor = (data[startIndex] + data[startIndex + 1]) / 2;\n      newImgData[startIndex] = greyColor;\n      newImgData[startIndex + 1] = greyColor;\n      newImgData[startIndex + 2] = data[startIndex + 2];\n      newImgData[startIndex + 3] = data[startIndex + 3];\n    }\n  }\n  const newImageData = new ImageData(newImgData, width, height);\n  return newImageData;\n};\n\n/// 锐化ImageData\nexport const sharpen = (imageData: ImageData) => {\n  const kernel = [-1, -1, -1, -1, 9, -1, -1, -1, -1]; // 锐化卷积核\n  const newImageData = convolutionMatrix(imageData, kernel);\n  return newImageData;\n};\n\n/// 边缘锐化ImageData\nexport const marginSharpen = (imageData: ImageData) => {\n  const kernel = [-1, -1, -1, -1, 8, -1, -1, -1, -1]; // 边缘化卷积核\n  const newImageData = convolutionMatrix(imageData, kernel);\n  return newImageData;\n};\n\n/// JPG转PNG\nexport const jpgToPng = (imageData: ImageData): ImageData => {\n  const { data, width, height } = imageData;\n  const newImgData = new Uint8ClampedArray(data.length);\n  for (let y = 0; y < height; y++) {\n    for (let x = 0; x < width; x++) {\n      const startIndex = (y * width + x) * 4;\n      newImgData[startIndex] = data[startIndex];\n      newImgData[startIndex + 1] = data[startIndex + 1];\n      newImgData[startIndex + 2] = data[startIndex + 2];\n      newImgData[startIndex + 3] = 255;\n    }\n  }\n  const newImageData = new ImageData(newImgData, width, height);\n  return newImageData;\n};\n\n/// PNG转JPG\nexport const pngToJpg = (imageData: ImageData): ImageData => {\n  const { data, width, height } = imageData;\n  const newImgData = new Uint8ClampedArray(data.length);\n  for (let y = 0; y < height; y++) {\n    for (let x = 0; x < width; x++) {\n      const startIndex = (y * width + x) * 4;\n      if (data[startIndex + 3] === 0) {\n        newImgData[startIndex] = 255;\n        newImgData[startIndex + 1] = 255;\n        newImgData[startIndex + 2] = 255;\n        newImgData[startIndex + 3] = 255;\n      } else {\n        const newColor = colorStacks(\n          [\n            data[startIndex],\n            data[startIndex + 1],\n            data[startIndex + 2],\n            data[startIndex + 3]\n          ],\n          [255, 255, 255, 255]\n        );\n        newImgData[startIndex] = newColor[0];\n        newImgData[startIndex + 1] = newColor[1];\n        newImgData[startIndex + 2] = newColor[2];\n        newImgData[startIndex + 3] = newColor[3];\n      }\n    }\n  }\n  const newImageData = new ImageData(newImgData, width, height);\n  return newImageData;\n};\n\n/**\n * 矩形裁剪\n * @param imageData ImageData源数据\n * @param newWidth 新图的宽度（retainOriginalSize为true时，宽度为imageData.width）\n * @param newHeight 新图的高度（retainOriginalSize为true时，高度为imageData.height）\n * @param top 新图相对于原图顶部的起始位置\n * @param left 新图相对于原图左侧的起始位置\n * @param retainOriginalSize 是否保留为原图的宽高 (宽高继承原图，多余部分用白色或透明色填充)\n * @param imageType 图片类型 (retainOriginalSize为true时必须传该值)\n * @returns ImageData\n */\nexport function rectClip(\n  imageData: ImageData,\n  newWidth: number,\n  newHeight: number,\n  top: number,\n  left: number,\n  retainOriginalSize = false,\n  imageType?: string\n): ImageData {\n  const { data, width, height } = imageData;\n  let finalLeft = left;\n  let finalTop = top;\n  let finalWidth = newWidth;\n  let finalHeight = newHeight;\n  if (finalLeft < 0) {\n    finalLeft = 0;\n  } else if (finalLeft > width) {\n    finalLeft = width;\n  }\n  if (finalTop < 0) {\n    finalTop = 0;\n  } else if (finalTop > height) {\n    finalTop = height;\n  }\n  if (finalWidth < 1) {\n    finalWidth = 1;\n  } else if (finalWidth > width) {\n    finalWidth = width;\n  }\n  if (finalHeight < 1) {\n    finalHeight = 1;\n  } else if (finalHeight > height) {\n    finalHeight = height;\n  }\n  if (finalLeft + finalWidth > width) {\n    finalWidth = width - finalLeft;\n  }\n  if (finalTop + finalHeight > height) {\n    finalHeight = height - finalTop;\n  }\n  // 保留原尺寸\n  if (retainOriginalSize) {\n    const newImgData = new Uint8ClampedArray(data.length);\n    for (let y = 0; y < height; y++) {\n      for (let x = 0; x < width; x++) {\n        const startIndex = (y * width + x) * 4;\n        if (\n          x >= finalLeft &&\n          x <= finalLeft + finalWidth &&\n          y >= finalTop &&\n          y <= finalTop + finalHeight\n        ) {\n          newImgData[startIndex] = data[startIndex];\n          newImgData[startIndex + 1] = data[startIndex + 1];\n          newImgData[startIndex + 2] = data[startIndex + 2];\n          newImgData[startIndex + 3] = data[startIndex + 3];\n        } else {\n          newImgData[startIndex] = 255;\n          newImgData[startIndex + 1] = 255;\n          newImgData[startIndex + 2] = 255;\n          newImgData[startIndex + 3] =\n            imageType && [\"JPG\", \"JPEG\"].includes(imageType.toUpperCase())\n              ? 255\n              : 0;\n        }\n      }\n    }\n    const newImageData = new ImageData(newImgData, width, height);\n    return newImageData;\n  } else {\n    const newImgData = new Uint8ClampedArray(finalWidth * finalHeight * 4);\n    for (let y = finalTop; y <= finalTop + finalHeight; y++) {\n      for (let x = finalLeft; x <= finalLeft + finalWidth; x++) {\n        const startIndex = ((y - finalTop) * finalWidth + x - finalLeft) * 4;\n        const startIndex2 = (y * width + x) * 4;\n        newImgData[startIndex] = data[startIndex2];\n        newImgData[startIndex + 1] = data[startIndex2 + 1];\n        newImgData[startIndex + 2] = data[startIndex2 + 2];\n        newImgData[startIndex + 3] = data[startIndex2 + 3];\n      }\n    }\n    const newImageData = new ImageData(newImgData, finalWidth, finalHeight);\n    return newImageData;\n  }\n}\n\n/**\n * 圆角裁剪\n * @param imageData ImageData源数据\n * @param borderRadius 圆角半径\n * @param imageType 图片类型\n * @param jpgToPNG 是否为JPG转成PNG\n * @returns ImageData\n */\nexport function radiusClip(\n  imageData: ImageData,\n  borderRadius: number,\n  imageType: string,\n  jpgToPNG?: boolean\n): ImageData {\n  const { data, width, height } = imageData;\n  let finalRadius = borderRadius;\n  if (finalRadius > Math.floor(width / 2)) {\n    finalRadius = Math.floor(width / 2);\n  }\n  if (finalRadius > Math.floor(height / 2)) {\n    finalRadius = Math.floor(height / 2);\n  }\n  if (finalRadius < 0) {\n    finalRadius = 0;\n  }\n  const newImgData = new Uint8ClampedArray(data.length);\n  for (let y = 0; y < height; y++) {\n    for (let x = 0; x < width; x++) {\n      const startIndex = (y * width + x) * 4;\n      let l = -1;\n      if (x < finalRadius) {\n        if (y < finalRadius) {\n          l = Math.sqrt(\n            Math.pow(finalRadius - x - 1, 2) + Math.pow(finalRadius - y - 1, 2)\n          );\n        } else if (y > height - finalRadius - 1) {\n          l = Math.sqrt(\n            Math.pow(finalRadius - x - 1, 2) +\n              Math.pow(y - (height - finalRadius), 2)\n          );\n        }\n      } else if (x > width - finalRadius - 1) {\n        if (y < finalRadius) {\n          l = Math.sqrt(\n            Math.pow(x - (width - finalRadius), 2) +\n              Math.pow(finalRadius - y - 1, 2)\n          );\n        } else if (y > height - finalRadius - 1) {\n          l = Math.sqrt(\n            Math.pow(x - (width - finalRadius), 2) +\n              Math.pow(y - (height - finalRadius), 2)\n          );\n        }\n      }\n      if (Math.round(l) > finalRadius) {\n        newImgData[startIndex] = 255;\n        newImgData[startIndex + 1] = 255;\n        newImgData[startIndex + 2] = 255;\n        newImgData[startIndex + 3] =\n          jpgToPNG || imageType.toUpperCase() === \"PNG\" ? 0 : 255;\n      } else {\n        newImgData[startIndex] = data[startIndex];\n        newImgData[startIndex + 1] = data[startIndex + 1];\n        newImgData[startIndex + 2] = data[startIndex + 2];\n        newImgData[startIndex + 3] =\n          jpgToPNG || imageType.toUpperCase() === \"PNG\"\n            ? data[startIndex + 3]\n            : 255;\n      }\n    }\n  }\n  const newImageData = new ImageData(newImgData, width, height);\n  return newImageData;\n}\n\n/**\n * 图片缩放，修改尺寸\n * @param imgUrl - 图片地址\n * @param width - sourceWidth\n * @param height - sourceHeight\n * @param newWidth - targetWidth\n * @param newHeight - targetHeight\n * @param maxWidthHeight - 最大长度\n * @returns\n */\nexport function changeSize(\n  imgUrl: string,\n  width: number,\n  height: number,\n  newWidth: number,\n  newHeight: number,\n  maxWidthHeight = 10000\n): ImageData {\n  const img = new Image();\n  img.src = imgUrl;\n  const canvas = document.createElement(\"canvas\") as HTMLCanvasElement;\n  const ctx = canvas.getContext(\"2d\") as CanvasRenderingContext2D;\n  canvas.width = maxWidthHeight;\n  canvas.height = maxWidthHeight;\n  ctx.drawImage(img, 0, 0, width, height, 0, 0, newWidth, newHeight);\n  const newImageData = ctx.getImageData(0, 0, newWidth, newHeight) as ImageData;\n  return newImageData;\n}\n\n/// 修改亮度\nexport function changeBrightness(\n  imageData: ImageData,\n  changeNum: number\n): ImageData {\n  const { data, width, height } = imageData;\n  const newImgData = new Uint8ClampedArray(data.length);\n  for (let y = 0; y < height; y++) {\n    for (let x = 0; x < width; x++) {\n      const startIndex = (y * width + x) * 4;\n      newImgData[startIndex] = Math.max(\n        Math.min(data[startIndex] + changeNum, 255),\n        0\n      );\n      newImgData[startIndex + 1] = Math.max(\n        Math.min(data[startIndex + 1] + changeNum, 255),\n        0\n      );\n      newImgData[startIndex + 2] = Math.max(\n        Math.min(data[startIndex + 2] + changeNum, 255),\n        0\n      );\n      newImgData[startIndex + 3] = data[startIndex + 3];\n    }\n  }\n  const newImageData = new ImageData(newImgData, width, height);\n  return newImageData;\n}\n\n/// 修改透明度\nexport function changeDiaphaneity(\n  imageData: ImageData,\n  value: number,\n  fixedDiaphaneity = false\n): ImageData {\n  const { data, width, height } = imageData;\n  const newImgData = new Uint8ClampedArray(data.length);\n  for (let y = 0; y < height; y++) {\n    for (let x = 0; x < width; x++) {\n      const startIndex = (y * width + x) * 4;\n      if (data[startIndex + 3] === 0) {\n        newImgData[startIndex] = 255;\n        newImgData[startIndex + 1] = 255;\n        newImgData[startIndex + 2] = 255;\n      } else {\n        newImgData[startIndex] = data[startIndex];\n        newImgData[startIndex + 1] = data[startIndex + 1];\n        newImgData[startIndex + 2] = data[startIndex + 2];\n      }\n      let a = data[startIndex + 3];\n      if (fixedDiaphaneity) {\n        a = Math.max(Math.min(Math.floor(255 * value), 255), 0);\n      } else {\n        a = Math.max(Math.min(Math.floor(a + 255 * value), 255), 0);\n      }\n      newImgData[startIndex + 3] = a;\n    }\n  }\n  const newImageData = new ImageData(newImgData, width, height);\n  return newImageData;\n}\n\n/// 添加水印\nexport function addWatermark(\n  imageData: ImageData,\n  watermarkImageData: ImageData,\n  top: number,\n  left: number\n): ImageData {\n  const { data, width, height } = imageData;\n  const {\n    data: watermarkData,\n    width: watermarkWidth,\n    height: watermarkHeight\n  } = watermarkImageData;\n  let finalTop = top;\n  let finalLeft = left;\n  if (top + watermarkHeight > height) {\n    finalTop = height - watermarkHeight;\n  }\n  if (left + watermarkWidth > width) {\n    finalLeft = width - watermarkWidth;\n  }\n  const newImgData = new Uint8ClampedArray(data.length);\n  for (let y = 0; y < height; y++) {\n    for (let x = 0; x < width; x++) {\n      const startIndex = (y * width + x) * 4;\n      if (\n        x < finalLeft ||\n        x > finalLeft + watermarkWidth ||\n        y <= finalTop ||\n        y >= finalTop + watermarkHeight\n      ) {\n        newImgData[startIndex] = data[startIndex];\n        newImgData[startIndex + 1] = data[startIndex + 1];\n        newImgData[startIndex + 2] = data[startIndex + 2];\n        newImgData[startIndex + 3] = data[startIndex + 3];\n      } else {\n        const watermarkStartIndex =\n          (y * width +\n            x -\n            ((finalTop + 1) * width +\n              (y - (finalTop + 1)) * (width - watermarkWidth)) +\n            watermarkWidth -\n            finalLeft -\n            1) *\n          4;\n        const aboveColor: [number, number, number, number] = [\n          watermarkData[watermarkStartIndex],\n          watermarkData[watermarkStartIndex + 1],\n          watermarkData[watermarkStartIndex + 2],\n          watermarkData[watermarkStartIndex + 3]\n        ];\n        const belowColor: [number, number, number, number] = [\n          data[startIndex],\n          data[startIndex + 1],\n          data[startIndex + 2],\n          data[startIndex + 3]\n        ];\n        const finalColor = colorStacks(aboveColor, belowColor);\n        newImgData[startIndex] = finalColor[0];\n        newImgData[startIndex + 1] = finalColor[1];\n        newImgData[startIndex + 2] = finalColor[2];\n        newImgData[startIndex + 3] = finalColor[3];\n      }\n    }\n  }\n  const newImageData = new ImageData(newImgData, width, height);\n  return newImageData;\n}\n\n/**\n * 打马赛克\n * @param imageData ImageData源数据\n * @param width 马赛克区域的宽度\n * @param height 马赛克区域的高度\n * @param top 马赛克相对于顶部的起始位置\n * @param left 马塞克相对于左侧的起始位置\n * @param mosaicSize 马塞克颗粒的大小\n * @returns ImageData\n */\nexport function mosaic(\n  imageData: ImageData,\n  mosaicWidth: number,\n  mosaicHeight: number,\n  top: number,\n  left: number,\n  mosaicSize = 10\n): ImageData {\n  const { data, width, height } = imageData;\n  let finalLeft = left;\n  let finalTop = top;\n  let finalWidth = mosaicWidth;\n  let finalHeight = mosaicHeight;\n  if (finalLeft < 0) {\n    finalLeft = 0;\n  } else if (finalLeft > width) {\n    finalLeft = width;\n  }\n  if (finalTop < 0) {\n    finalTop = 0;\n  } else if (finalTop > height) {\n    finalTop = height;\n  }\n  if (finalWidth < 1) {\n    finalWidth = 1;\n  } else if (finalWidth > width) {\n    finalWidth = width;\n  }\n  if (finalHeight < 1) {\n    finalHeight = 1;\n  } else if (finalHeight > height) {\n    finalHeight = height;\n  }\n  if (finalLeft + finalWidth > width) {\n    finalWidth = width - finalLeft;\n  }\n  if (finalTop + finalHeight > height) {\n    finalHeight = height - finalTop;\n  }\n\n  const newImgData = new Uint8ClampedArray(data.length);\n  for (let y = 0; y < height; y++) {\n    for (let x = 0; x < width; x++) {\n      const startIndex = (y * width + x) * 4;\n      if (\n        x >= finalLeft &&\n        x <= finalLeft + finalWidth &&\n        y >= finalTop &&\n        y <= finalTop + finalHeight\n      ) {\n        const boxXIndex = Math.floor((x - finalLeft) / mosaicSize);\n        const boxYIndex = Math.floor((y - finalTop) / mosaicSize);\n        let mosaicBoxColorX = Math.floor(\n          mosaicSize * (boxXIndex + 1) - mosaicSize / 2 + finalLeft\n        );\n        let mosaicBoxColorY = Math.floor(\n          mosaicSize * (boxYIndex + 1) - mosaicSize / 2 + finalTop\n        );\n        if (mosaicBoxColorX > width - 1) {\n          mosaicBoxColorX = width - 1;\n        }\n        if (mosaicBoxColorY > height - 1) {\n          mosaicBoxColorY = height - 1;\n        }\n        const mosaicBoxColorIndex =\n          (mosaicBoxColorY * width + mosaicBoxColorX) * 4;\n        newImgData[startIndex] = data[mosaicBoxColorIndex];\n        newImgData[startIndex + 1] = data[mosaicBoxColorIndex + 1];\n        newImgData[startIndex + 2] = data[mosaicBoxColorIndex + 2];\n        newImgData[startIndex + 3] = data[mosaicBoxColorIndex + 3];\n      } else {\n        newImgData[startIndex] = data[startIndex];\n        newImgData[startIndex + 1] = data[startIndex + 1];\n        newImgData[startIndex + 2] = data[startIndex + 2];\n        newImgData[startIndex + 3] = data[startIndex + 3];\n      }\n    }\n  }\n  const newImageData = new ImageData(newImgData, width, height);\n  return newImageData;\n}\n\n/// 图片压缩\n// export const compression = async (\n//   imageUrl: string | ImageData,\n//   width: number,\n//   height: number,\n//   imageType: string,\n//   compressionDegree: number,\n//   cb: (blob: Blob | null) => void\n// ) => {\n//   const degree = compressionDegree / 100;\n//   if ([\"JPG\", \"JPEG\"].includes(imageType.toUpperCase())) {\n//     const img = new Image();\n//     img.src = imageUrl as string;\n//     const canvas = document.createElement(\"canvas\") as HTMLCanvasElement;\n//     const ctx = canvas.getContext(\"2d\") as CanvasRenderingContext2D;\n//     canvas.width = width;\n//     canvas.height = height;\n//     ctx.drawImage(img, 0, 0, width, height);\n//     canvas.toBlob(\n//       (blob: Blob | null) => {\n//         cb(blob);\n//       },\n//       `image/${imageType.toLowerCase()}`,\n//       degree\n//     );\n//   } else {\n//     const bit = Math.floor(degree * 256);\n//     const png = UPNG.encode(\n//       [(imageUrl as ImageData).data.buffer],\n//       width,\n//       height,\n//       bit\n//     );\n//     const blob = new Blob([png]);\n//     cb && cb(blob);\n//   }\n// };\n\n/// 根据AI识别的人像数据算出界面中需要显示的最终数据\nexport function getImageDataByAIData(\n  originalImageData: ImageData,\n  AIImageData: ImageData,\n  options: {\n    backgroundColor: { r: number; g: number; b: number; a: number };\n    changeIntoColor: { r: number; g: number; b: number; a: number };\n  } = {\n    backgroundColor: { r: 0, g: 0, b: 0, a: 255 },\n    changeIntoColor: { r: 0, g: 0, b: 0, a: 0 }\n  }\n): ImageData {\n  if (AIImageData && options) {\n    const { data, width, height } = originalImageData;\n    const { data: AIData } = AIImageData;\n    const newImgData = new Uint8ClampedArray(data.length);\n    const { backgroundColor, changeIntoColor } = options;\n    for (let y = 0; y < height; y++) {\n      for (let x = 0; x < width; x++) {\n        const startIndex = (y * width + x) * 4;\n        const r = AIData[startIndex];\n        const g = AIData[startIndex + 1];\n        const b = AIData[startIndex + 2];\n        const a = AIData[startIndex + 3];\n        if (\n          r === backgroundColor.r &&\n          g === backgroundColor.g &&\n          b === backgroundColor.b &&\n          a === backgroundColor.a &&\n          changeIntoColor.a !== 0\n        ) {\n          newImgData[startIndex] = changeIntoColor.r;\n          newImgData[startIndex + 1] = changeIntoColor.g;\n          newImgData[startIndex + 2] = changeIntoColor.b;\n          newImgData[startIndex + 3] = changeIntoColor.a;\n        } else {\n          newImgData[startIndex] = data[startIndex];\n          newImgData[startIndex + 1] = data[startIndex + 1];\n          newImgData[startIndex + 2] = data[startIndex + 2];\n          newImgData[startIndex + 3] = data[startIndex + 3];\n        }\n      }\n    }\n    const newImageData = new ImageData(newImgData, width, height);\n    return newImageData;\n  }\n  return originalImageData;\n}\n\n/// 卷积算法\nfunction convolutionMatrix(imageData: ImageData, kernel: number[]): ImageData {\n  const { data, width, height } = imageData;\n  const newImgData = new Uint8ClampedArray(data.length);\n  for (let y = 0; y < height; y++) {\n    for (let x = 0; x < width; x++) {\n      const startIndex = (y * width + x) * 4;\n      for (let i = 0; i < 3; i++) {\n        const index = startIndex + i;\n        if (x === 0 || x === width - 1 || y === 0 || y === height - 1) {\n          newImgData[index] = data[index];\n        } else {\n          newImgData[index] =\n            kernel[0] * data[index - width * 4 - 4] +\n            kernel[1] * data[index - width * 4] +\n            kernel[2] * data[index - width * 4 + 4] +\n            kernel[3] * data[index - 4] +\n            kernel[4] * data[index] +\n            kernel[5] * data[index + 4] +\n            kernel[6] * data[index + width * 4 - 4] +\n            kernel[7] * data[index + width * 4] +\n            kernel[8] * data[index + width * 4 + 4];\n        }\n      }\n      newImgData[startIndex + 3] = data[startIndex + 3];\n    }\n  }\n  const newImageData = new ImageData(newImgData, width, height);\n  return newImageData;\n}\n\n/// 颜色叠加算法\nfunction colorStacks(\n  aboveColor: [number, number, number, number],\n  belowColor: [number, number, number, number]\n) {\n  if (\n    aboveColor &&\n    aboveColor.length === 4 &&\n    belowColor &&\n    belowColor.length === 4\n  ) {\n    const aboveA = aboveColor[3];\n    const belowA = belowColor[3];\n    if (aboveA === 255 || belowA === 0) {\n      return aboveColor;\n    } else if (aboveA === 0) {\n      return belowColor;\n    } else {\n      const aboveDiaphaneity = aboveA / 255;\n      const belowDiaphaneity = belowA / 255;\n      const newColorR = Math.max(\n        Math.min(\n          Math.floor(\n            aboveColor[0] * aboveDiaphaneity +\n              belowColor[0] * belowDiaphaneity * (1 - aboveDiaphaneity)\n          ),\n          255\n        ),\n        0\n      );\n      const newColorG = Math.max(\n        Math.min(\n          Math.floor(\n            aboveColor[1] * aboveDiaphaneity +\n              belowColor[1] * belowDiaphaneity * (1 - aboveDiaphaneity)\n          ),\n          255\n        ),\n        0\n      );\n      const newColorB = Math.max(\n        Math.min(\n          Math.floor(\n            aboveColor[2] * aboveDiaphaneity +\n              belowColor[2] * belowDiaphaneity * (1 - aboveDiaphaneity)\n          ),\n          255\n        ),\n        0\n      );\n      const newColorA = Math.max(\n        Math.min(\n          Math.floor(\n            (aboveDiaphaneity + belowDiaphaneity * (1 - aboveDiaphaneity)) * 255\n          ),\n          255\n        ),\n        0\n      );\n      return [newColorR, newColorG, newColorB, newColorA];\n    }\n  }\n  return [255, 255, 255, 255];\n}\n","import { radixStringToNumber } from \"@zyzgroup/core-common\";\n\nexport interface ByteArrayOutputStream {\n  writeByte(b: number): void;\n  writeShort(i: number): void;\n  writeBytes(ab: number[], off: number, len: number): void;\n  writeString(s: string): void;\n  toByteArray(): number[];\n  toString(): string;\n}\n\nexport interface Base64EncodeOutputStream {\n  writeByte(b: number): void;\n  flush(): void;\n  toString(): string;\n}\n\nexport const byteArrayOutputStream = function () {\n  const _bytes: number[] = [];\n\n  return {\n    writeByte(b) {\n      _bytes.push(b & 0xff);\n    },\n    writeShort(i) {\n      this.writeByte(i);\n      this.writeByte(i >>> 8);\n    },\n    writeBytes(ab, off = 0, len = ab.length) {\n      for (let i = 0; i < len; i++) {\n        this.writeByte(ab[i + off]);\n      }\n    },\n    writeString(s) {\n      for (let i = 0, len = s.length; i < len; i++) {\n        this.writeByte(s.charCodeAt(i));\n      }\n    },\n    toByteArray() {\n      return _bytes;\n    },\n    toString() {\n      let s = \"[\";\n      for (let i = 0, len = _bytes.length; i < len; i++) {\n        if (i > 0) {\n          s += \",\";\n        }\n        s += _bytes[i];\n      }\n      s += \"]\";\n      return s;\n    }\n  } as ByteArrayOutputStream;\n};\n\nexport const base64EncodeOutputStream = function () {\n  let _buffer = 0;\n  let _buflen = 0;\n  let _length = 0;\n  let _base64 = \"\";\n\n  const encode = function (n: number) {\n    if (n < 0) {\n      // error\n    } else if (n < 26) {\n      return 0x41 + n;\n    } else if (n < 52) {\n      return 0x61 + (n - 26);\n    } else if (n < 62) {\n      return 0x30 + (n - 52);\n    } else if (n == 62) {\n      return 0x2b;\n    } else if (n == 63) {\n      return 0x2f;\n    }\n    throw new Error(\"n:\" + n);\n  };\n\n  const writeEncoded = function (b: number) {\n    _base64 += String.fromCharCode(encode(b & 0x3f));\n  };\n\n  return {\n    writeByte(n) {\n      _buffer = (_buffer << 8) | (n & 0xff);\n      _buflen += 8;\n      _length += 1;\n      while (_buflen >= 6) {\n        writeEncoded(_buffer >>> (_buflen - 6));\n        _buflen -= 6;\n      }\n    },\n    flush() {\n      if (_buflen > 0) {\n        writeEncoded(_buffer << (6 - _buflen));\n        _buffer = 0;\n        _buflen = 0;\n      }\n      if (_length % 3 != 0) {\n        // padding\n        const padlen = 3 - (_length % 3);\n        for (let i = 0; i < padlen; i++) {\n          _base64 += \"=\";\n        }\n      }\n    },\n    toString() {\n      return _base64;\n    }\n  } as Base64EncodeOutputStream;\n};\n\nexport const gifImage = function (\n  size: number,\n  foreground: string,\n  background: string\n) {\n  const _data = new Array(size * size);\n\n  const bitOutputStream = function (out: ByteArrayOutputStream) {\n    const _out = out;\n    let _bitLength = 0;\n    let _bitBuffer = 0;\n\n    return {\n      write(data: number, length: number) {\n        if (data >>> length != 0) {\n          throw new Error(\"length over\");\n        }\n\n        while (_bitLength + length >= 8) {\n          _out.writeByte(0xff & ((data << _bitLength) | _bitBuffer));\n          length -= 8 - _bitLength;\n          data >>>= 8 - _bitLength;\n          _bitBuffer = 0;\n          _bitLength = 0;\n        }\n\n        _bitBuffer = (data << _bitLength) | _bitBuffer;\n        _bitLength = _bitLength + length;\n      },\n\n      flush() {\n        if (_bitLength > 0) {\n          _out.writeByte(_bitBuffer);\n        }\n      }\n    };\n  };\n\n  const getLZWRaster = function (lzwMinCodeSize: number) {\n    const clearCode = 1 << lzwMinCodeSize;\n    const endCode = (1 << lzwMinCodeSize) + 1;\n    let bitLength = lzwMinCodeSize + 1;\n\n    // Setup LZWTable\n    const table = lzwTable();\n\n    for (let i = 0; i < clearCode; i++) {\n      table.add(String.fromCharCode(i));\n    }\n    table.add(String.fromCharCode(clearCode));\n    table.add(String.fromCharCode(endCode));\n\n    const byteOut = byteArrayOutputStream();\n    const bitOut = bitOutputStream(byteOut);\n\n    // clear code\n    bitOut.write(clearCode, bitLength);\n\n    let dataIndex = 0;\n\n    let s = String.fromCharCode(_data[dataIndex]);\n    dataIndex += 1;\n\n    while (dataIndex < _data.length) {\n      const c = String.fromCharCode(_data[dataIndex]);\n      dataIndex += 1;\n\n      if (table.contains(s + c)) {\n        s = s + c;\n      } else {\n        bitOut.write(table.indexOf(s), bitLength);\n\n        if (table.size() < 0xfff) {\n          if (table.size() == 1 << bitLength) {\n            bitLength += 1;\n          }\n\n          table.add(s + c);\n        }\n\n        s = c;\n      }\n    }\n\n    bitOut.write(table.indexOf(s), bitLength);\n\n    // end code\n    bitOut.write(endCode, bitLength);\n\n    bitOut.flush();\n\n    return byteOut.toByteArray();\n  };\n\n  const lzwTable = function () {\n    const _map: Record<string, number> = {};\n    let _size = 0;\n\n    return {\n      add(key: string) {\n        if (this.contains(key)) {\n          throw new Error(\"dup key:\" + key);\n        }\n        _map[key] = _size;\n        _size += 1;\n      },\n\n      size() {\n        return _size;\n      },\n\n      indexOf(key: string) {\n        return _map[key];\n      },\n\n      contains(key: string) {\n        return typeof _map[key] != \"undefined\";\n      }\n    };\n  };\n\n  return {\n    setPixel(x: number, y: number, pixel: number) {\n      _data[y * size + x] = pixel;\n    },\n    write(out: ByteArrayOutputStream) {\n      // GIF Signature\n      out.writeString(\"GIF87a\");\n\n      // Screen Descriptor\n      out.writeShort(size);\n      out.writeShort(size);\n\n      out.writeByte(0x80); // 2bit\n      out.writeByte(0);\n      out.writeByte(0);\n\n      // Global Color Map\n\n      // black\n      out.writeByte(radixStringToNumber(\"0x\" + foreground[1] + foreground[2]));\n      out.writeByte(radixStringToNumber(\"0x\" + foreground[3] + foreground[4]));\n      out.writeByte(radixStringToNumber(\"0x\" + foreground[5] + foreground[6]));\n\n      // white\n      out.writeByte(radixStringToNumber(\"0x\" + background[1] + background[2]));\n      out.writeByte(radixStringToNumber(\"0x\" + background[3] + background[4]));\n      out.writeByte(radixStringToNumber(\"0x\" + background[5] + background[6]));\n\n      // Image Descriptor\n      out.writeString(\",\");\n      out.writeShort(0);\n      out.writeShort(0);\n      out.writeShort(size);\n      out.writeShort(size);\n      out.writeByte(0);\n\n      // Local Color Map\n\n      // Raster Data\n      const lzwMinCodeSize = 2;\n      const raster = getLZWRaster(lzwMinCodeSize);\n\n      out.writeByte(lzwMinCodeSize);\n\n      let offset = 0;\n\n      while (raster.length - offset > 255) {\n        out.writeByte(255);\n        out.writeBytes(raster, offset, 255);\n        offset += 255;\n      }\n\n      out.writeByte(raster.length - offset);\n      out.writeBytes(raster, offset, raster.length - offset);\n      out.writeByte(0x00);\n\n      // GIF Terminator\n      out.writeString(\";\");\n    }\n  };\n};\n\nexport const outputGifBase64 = function (\n  size: number,\n  foreground: string,\n  background: string,\n  getPixel: (x: number, y: number) => number\n) {\n  const gif = gifImage(size, foreground, background);\n\n  for (let y = 0; y < size; y++) {\n    for (let x = 0; x < size; x++) {\n      gif.setPixel(x, y, getPixel(x, y));\n    }\n  }\n\n  const b = byteArrayOutputStream();\n  gif.write(b);\n\n  const base64 = base64EncodeOutputStream();\n  const bytes = b.toByteArray();\n  for (let i = 0, len = bytes.length; i < len; i++) {\n    base64.writeByte(bytes[i]);\n  }\n  base64.flush();\n\n  let img = \"\";\n  img += \"data:image/gif;base64,\";\n  img += base64;\n\n  return img;\n};\n","import { utf16to8 } from \"@zyzgroup/core-common\";\nimport { outputGifBase64 } from \"./image-gif\";\n\nconst QRMode = {\n  MODE_NUMBER: 1 << 0,\n  MODE_ALPHA_NUM: 1 << 1,\n  MODE_8BIT_BYTE: 1 << 2,\n  MODE_KANJI: 1 << 3\n};\n\nconst QRErrorCorrectLevel = {\n  M: 0,\n  L: 1,\n  H: 2,\n  Q: 3\n};\n\nconst QRMaskPattern = {\n  PATTERN000: 0,\n  PATTERN001: 1,\n  PATTERN010: 2,\n  PATTERN011: 3,\n  PATTERN100: 4,\n  PATTERN101: 5,\n  PATTERN110: 6,\n  PATTERN111: 7\n};\n\nconst QRMath = {\n  glog: function (n: number) {\n    if (n < 1) {\n      throw new Error(\"glog(\" + n + \")\");\n    }\n    return QRMath.LOG_TABLE[n];\n  },\n  gexp: function (n: number) {\n    while (n < 0) {\n      n += 255;\n    }\n    while (n >= 256) {\n      n -= 255;\n    }\n    return QRMath.EXP_TABLE[n];\n  },\n  EXP_TABLE: new Array(256),\n  LOG_TABLE: new Array(256)\n};\n\nfor (let i = 0; i < 8; i++) {\n  QRMath.EXP_TABLE[i] = 1 << i;\n}\nfor (let i = 8; i < 256; i++) {\n  QRMath.EXP_TABLE[i] =\n    QRMath.EXP_TABLE[i - 4] ^\n    QRMath.EXP_TABLE[i - 5] ^\n    QRMath.EXP_TABLE[i - 6] ^\n    QRMath.EXP_TABLE[i - 8];\n}\nfor (let i = 0; i < 255; i++) {\n  QRMath.LOG_TABLE[QRMath.EXP_TABLE[i]] = i;\n}\n\nconst QRUtil = {\n  PATTERN_POSITION_TABLE: [\n    [],\n    [6, 18],\n    [6, 22],\n    [6, 26],\n    [6, 30],\n    [6, 34],\n    [6, 22, 38],\n    [6, 24, 42],\n    [6, 26, 46],\n    [6, 28, 50],\n    [6, 30, 54],\n    [6, 32, 58],\n    [6, 34, 62],\n    [6, 26, 46, 66],\n    [6, 26, 48, 70],\n    [6, 26, 50, 74],\n    [6, 30, 54, 78],\n    [6, 30, 56, 82],\n    [6, 30, 58, 86],\n    [6, 34, 62, 90],\n    [6, 28, 50, 72, 94],\n    [6, 26, 50, 74, 98],\n    [6, 30, 54, 78, 102],\n    [6, 28, 54, 80, 106],\n    [6, 32, 58, 84, 110],\n    [6, 30, 58, 86, 114],\n    [6, 34, 62, 90, 118],\n    [6, 26, 50, 74, 98, 122],\n    [6, 30, 54, 78, 102, 126],\n    [6, 26, 52, 78, 104, 130],\n    [6, 30, 56, 82, 108, 134],\n    [6, 34, 60, 86, 112, 138],\n    [6, 30, 58, 86, 114, 142],\n    [6, 34, 62, 90, 118, 146],\n    [6, 30, 54, 78, 102, 126, 150],\n    [6, 24, 50, 76, 102, 128, 154],\n    [6, 28, 54, 80, 106, 132, 158],\n    [6, 32, 58, 84, 110, 136, 162],\n    [6, 26, 54, 82, 110, 138, 166],\n    [6, 30, 58, 86, 114, 142, 170]\n  ],\n\n  G15:\n    (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0),\n  G18:\n    (1 << 12) |\n    (1 << 11) |\n    (1 << 10) |\n    (1 << 9) |\n    (1 << 8) |\n    (1 << 5) |\n    (1 << 2) |\n    (1 << 0),\n  G15_MASK: (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1),\n\n  getBCHTypeInfo: function (data: number) {\n    let d = data << 10;\n    while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15) >= 0) {\n      d ^=\n        QRUtil.G15 << (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15));\n    }\n    return ((data << 10) | d) ^ QRUtil.G15_MASK;\n  },\n\n  getBCHTypeNumber: function (data: number) {\n    let d = data << 12;\n    while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18) >= 0) {\n      d ^=\n        QRUtil.G18 << (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18));\n    }\n    return (data << 12) | d;\n  },\n\n  getBCHDigit: function (data: number) {\n    let digit = 0;\n\n    while (data != 0) {\n      digit++;\n      data >>>= 1;\n    }\n\n    return digit;\n  },\n\n  getPatternPosition: function (typeNumber: number) {\n    return QRUtil.PATTERN_POSITION_TABLE[typeNumber - 1];\n  },\n\n  getMask: function (maskPattern: number, i: number, j: number) {\n    switch (maskPattern) {\n      case QRMaskPattern.PATTERN000:\n        return (i + j) % 2 == 0;\n      case QRMaskPattern.PATTERN001:\n        return i % 2 == 0;\n      case QRMaskPattern.PATTERN010:\n        return j % 3 == 0;\n      case QRMaskPattern.PATTERN011:\n        return (i + j) % 3 == 0;\n      case QRMaskPattern.PATTERN100:\n        return (Math.floor(i / 2) + Math.floor(j / 3)) % 2 == 0;\n      case QRMaskPattern.PATTERN101:\n        return ((i * j) % 2) + ((i * j) % 3) == 0;\n      case QRMaskPattern.PATTERN110:\n        return (((i * j) % 2) + ((i * j) % 3)) % 2 == 0;\n      case QRMaskPattern.PATTERN111:\n        return (((i * j) % 3) + ((i + j) % 2)) % 2 == 0;\n\n      default:\n        throw new Error(\"bad maskPattern:\" + maskPattern);\n    }\n  },\n\n  getErrorCorrectPolynomial: function (errorCorrectLength: number) {\n    let a = new QRPolynomial([1], 0);\n\n    for (let i = 0; i < errorCorrectLength; i++) {\n      a = a.multiply(new QRPolynomial([1, QRMath.gexp(i)], 0));\n    }\n\n    return a;\n  },\n\n  getLengthInBits: function (mode: number, type: number) {\n    if (1 <= type && type < 10) {\n      // 1 - 9\n\n      switch (mode) {\n        case QRMode.MODE_NUMBER:\n          return 10;\n        case QRMode.MODE_ALPHA_NUM:\n          return 9;\n        case QRMode.MODE_8BIT_BYTE:\n          return 8;\n        case QRMode.MODE_KANJI:\n          return 8;\n        default:\n          throw new Error(\"mode:\" + mode);\n      }\n    } else if (type < 27) {\n      // 10 - 26\n\n      switch (mode) {\n        case QRMode.MODE_NUMBER:\n          return 12;\n        case QRMode.MODE_ALPHA_NUM:\n          return 11;\n        case QRMode.MODE_8BIT_BYTE:\n          return 16;\n        case QRMode.MODE_KANJI:\n          return 10;\n        default:\n          throw new Error(\"mode:\" + mode);\n      }\n    } else if (type < 41) {\n      // 27 - 40\n\n      switch (mode) {\n        case QRMode.MODE_NUMBER:\n          return 14;\n        case QRMode.MODE_ALPHA_NUM:\n          return 13;\n        case QRMode.MODE_8BIT_BYTE:\n          return 16;\n        case QRMode.MODE_KANJI:\n          return 12;\n        default:\n          throw new Error(\"mode:\" + mode);\n      }\n    } else {\n      throw new Error(\"type:\" + type);\n    }\n  },\n\n  getLostPoint: function (qrCode: QRCode) {\n    const moduleCount = qrCode.getModuleCount();\n\n    let lostPoint = 0;\n\n    // LEVEL1\n\n    for (let row = 0; row < moduleCount; row++) {\n      for (let col = 0; col < moduleCount; col++) {\n        let sameCount = 0;\n        const dark = qrCode.isDark(row, col);\n\n        for (let r = -1; r <= 1; r++) {\n          if (row + r < 0 || moduleCount <= row + r) {\n            continue;\n          }\n\n          for (let c = -1; c <= 1; c++) {\n            if (col + c < 0 || moduleCount <= col + c) {\n              continue;\n            }\n\n            if (r == 0 && c == 0) {\n              continue;\n            }\n\n            if (dark == qrCode.isDark(row + r, col + c)) {\n              sameCount++;\n            }\n          }\n        }\n\n        if (sameCount > 5) {\n          lostPoint += 3 + sameCount - 5;\n        }\n      }\n    }\n\n    // LEVEL2\n\n    for (let row = 0; row < moduleCount - 1; row++) {\n      for (let col = 0; col < moduleCount - 1; col++) {\n        let count = 0;\n        if (qrCode.isDark(row, col)) count++;\n        if (qrCode.isDark(row + 1, col)) count++;\n        if (qrCode.isDark(row, col + 1)) count++;\n        if (qrCode.isDark(row + 1, col + 1)) count++;\n        if (count == 0 || count == 4) {\n          lostPoint += 3;\n        }\n      }\n    }\n\n    // LEVEL3\n\n    for (let row = 0; row < moduleCount; row++) {\n      for (let col = 0; col < moduleCount - 6; col++) {\n        if (\n          qrCode.isDark(row, col) &&\n          !qrCode.isDark(row, col + 1) &&\n          qrCode.isDark(row, col + 2) &&\n          qrCode.isDark(row, col + 3) &&\n          qrCode.isDark(row, col + 4) &&\n          !qrCode.isDark(row, col + 5) &&\n          qrCode.isDark(row, col + 6)\n        ) {\n          lostPoint += 40;\n        }\n      }\n    }\n\n    for (let col = 0; col < moduleCount; col++) {\n      for (let row = 0; row < moduleCount - 6; row++) {\n        if (\n          qrCode.isDark(row, col) &&\n          !qrCode.isDark(row + 1, col) &&\n          qrCode.isDark(row + 2, col) &&\n          qrCode.isDark(row + 3, col) &&\n          qrCode.isDark(row + 4, col) &&\n          !qrCode.isDark(row + 5, col) &&\n          qrCode.isDark(row + 6, col)\n        ) {\n          lostPoint += 40;\n        }\n      }\n    }\n\n    // LEVEL4\n\n    let darkCount = 0;\n\n    for (let col = 0; col < moduleCount; col++) {\n      for (let row = 0; row < moduleCount; row++) {\n        if (qrCode.isDark(row, col)) {\n          darkCount++;\n        }\n      }\n    }\n\n    const ratio =\n      Math.abs((100 * darkCount) / moduleCount / moduleCount - 50) / 5;\n    lostPoint += ratio * 10;\n\n    return lostPoint;\n  }\n};\n\nclass QRPolynomial {\n  num: number[];\n\n  constructor(num: number[], shift: number) {\n    if (num.length == undefined) {\n      throw new Error(num.length + \"/\" + shift);\n    }\n    let offset = 0;\n    while (offset < num.length && num[offset] == 0) {\n      offset++;\n    }\n    this.num = new Array(num.length - offset + shift);\n    for (let i = 0; i < num.length - offset; i++) {\n      this.num[i] = num[i + offset];\n    }\n  }\n\n  get(index: number) {\n    return this.num[index];\n  }\n\n  getLength() {\n    return this.num.length;\n  }\n\n  multiply(e: QRPolynomial) {\n    const num = new Array(this.getLength() + e.getLength() - 1);\n\n    for (let i = 0; i < this.getLength(); i++) {\n      for (let j = 0; j < e.getLength(); j++) {\n        num[i + j] ^= QRMath.gexp(\n          QRMath.glog(this.get(i)) + QRMath.glog(e.get(j))\n        );\n      }\n    }\n\n    return new QRPolynomial(num, 0);\n  }\n\n  mod(e: QRPolynomial): QRPolynomial {\n    if (this.getLength() - e.getLength() < 0) {\n      return this;\n    }\n\n    const ratio = QRMath.glog(this.get(0)) - QRMath.glog(e.get(0));\n\n    const num = new Array(this.getLength());\n\n    for (let i = 0; i < this.getLength(); i++) {\n      num[i] = this.get(i);\n    }\n\n    for (let i = 0; i < e.getLength(); i++) {\n      num[i] ^= QRMath.gexp(QRMath.glog(e.get(i)) + ratio);\n    }\n\n    // recursive call\n    return new QRPolynomial(num, 0).mod(e);\n  }\n}\n\nclass QRRSBlock {\n  totalCount: number;\n  dataCount: number;\n\n  constructor(totalCount: number, dataCount: number) {\n    this.totalCount = totalCount;\n    this.dataCount = dataCount;\n  }\n\n  static RS_BLOCK_TABLE = [\n    // L\n    // M\n    // Q\n    // H\n\n    // 1\n    [1, 26, 19],\n    [1, 26, 16],\n    [1, 26, 13],\n    [1, 26, 9],\n\n    // 2\n    [1, 44, 34],\n    [1, 44, 28],\n    [1, 44, 22],\n    [1, 44, 16],\n\n    // 3\n    [1, 70, 55],\n    [1, 70, 44],\n    [2, 35, 17],\n    [2, 35, 13],\n\n    // 4\n    [1, 100, 80],\n    [2, 50, 32],\n    [2, 50, 24],\n    [4, 25, 9],\n\n    // 5\n    [1, 134, 108],\n    [2, 67, 43],\n    [2, 33, 15, 2, 34, 16],\n    [2, 33, 11, 2, 34, 12],\n\n    // 6\n    [2, 86, 68],\n    [4, 43, 27],\n    [4, 43, 19],\n    [4, 43, 15],\n\n    // 7\n    [2, 98, 78],\n    [4, 49, 31],\n    [2, 32, 14, 4, 33, 15],\n    [4, 39, 13, 1, 40, 14],\n\n    // 8\n    [2, 121, 97],\n    [2, 60, 38, 2, 61, 39],\n    [4, 40, 18, 2, 41, 19],\n    [4, 40, 14, 2, 41, 15],\n\n    // 9\n    [2, 146, 116],\n    [3, 58, 36, 2, 59, 37],\n    [4, 36, 16, 4, 37, 17],\n    [4, 36, 12, 4, 37, 13],\n\n    // 10\n    [2, 86, 68, 2, 87, 69],\n    [4, 69, 43, 1, 70, 44],\n    [6, 43, 19, 2, 44, 20],\n    [6, 43, 15, 2, 44, 16],\n\n    // 11\n    [4, 101, 81],\n    [1, 80, 50, 4, 81, 51],\n    [4, 50, 22, 4, 51, 23],\n    [3, 36, 12, 8, 37, 13],\n\n    // 12\n    [2, 116, 92, 2, 117, 93],\n    [6, 58, 36, 2, 59, 37],\n    [4, 46, 20, 6, 47, 21],\n    [7, 42, 14, 4, 43, 15],\n\n    // 13\n    [4, 133, 107],\n    [8, 59, 37, 1, 60, 38],\n    [8, 44, 20, 4, 45, 21],\n    [12, 33, 11, 4, 34, 12],\n\n    // 14\n    [3, 145, 115, 1, 146, 116],\n    [4, 64, 40, 5, 65, 41],\n    [11, 36, 16, 5, 37, 17],\n    [11, 36, 12, 5, 37, 13],\n\n    // 15\n    [5, 109, 87, 1, 110, 88],\n    [5, 65, 41, 5, 66, 42],\n    [5, 54, 24, 7, 55, 25],\n    [11, 36, 12],\n\n    // 16\n    [5, 122, 98, 1, 123, 99],\n    [7, 73, 45, 3, 74, 46],\n    [15, 43, 19, 2, 44, 20],\n    [3, 45, 15, 13, 46, 16],\n\n    // 17\n    [1, 135, 107, 5, 136, 108],\n    [10, 74, 46, 1, 75, 47],\n    [1, 50, 22, 15, 51, 23],\n    [2, 42, 14, 17, 43, 15],\n\n    // 18\n    [5, 150, 120, 1, 151, 121],\n    [9, 69, 43, 4, 70, 44],\n    [17, 50, 22, 1, 51, 23],\n    [2, 42, 14, 19, 43, 15],\n\n    // 19\n    [3, 141, 113, 4, 142, 114],\n    [3, 70, 44, 11, 71, 45],\n    [17, 47, 21, 4, 48, 22],\n    [9, 39, 13, 16, 40, 14],\n\n    // 20\n    [3, 135, 107, 5, 136, 108],\n    [3, 67, 41, 13, 68, 42],\n    [15, 54, 24, 5, 55, 25],\n    [15, 43, 15, 10, 44, 16],\n\n    // 21\n    [4, 144, 116, 4, 145, 117],\n    [17, 68, 42],\n    [17, 50, 22, 6, 51, 23],\n    [19, 46, 16, 6, 47, 17],\n\n    // 22\n    [2, 139, 111, 7, 140, 112],\n    [17, 74, 46],\n    [7, 54, 24, 16, 55, 25],\n    [34, 37, 13],\n\n    // 23\n    [4, 151, 121, 5, 152, 122],\n    [4, 75, 47, 14, 76, 48],\n    [11, 54, 24, 14, 55, 25],\n    [16, 45, 15, 14, 46, 16],\n\n    // 24\n    [6, 147, 117, 4, 148, 118],\n    [6, 73, 45, 14, 74, 46],\n    [11, 54, 24, 16, 55, 25],\n    [30, 46, 16, 2, 47, 17],\n\n    // 25\n    [8, 132, 106, 4, 133, 107],\n    [8, 75, 47, 13, 76, 48],\n    [7, 54, 24, 22, 55, 25],\n    [22, 45, 15, 13, 46, 16],\n\n    // 26\n    [10, 142, 114, 2, 143, 115],\n    [19, 74, 46, 4, 75, 47],\n    [28, 50, 22, 6, 51, 23],\n    [33, 46, 16, 4, 47, 17],\n\n    // 27\n    [8, 152, 122, 4, 153, 123],\n    [22, 73, 45, 3, 74, 46],\n    [8, 53, 23, 26, 54, 24],\n    [12, 45, 15, 28, 46, 16],\n\n    // 28\n    [3, 147, 117, 10, 148, 118],\n    [3, 73, 45, 23, 74, 46],\n    [4, 54, 24, 31, 55, 25],\n    [11, 45, 15, 31, 46, 16],\n\n    // 29\n    [7, 146, 116, 7, 147, 117],\n    [21, 73, 45, 7, 74, 46],\n    [1, 53, 23, 37, 54, 24],\n    [19, 45, 15, 26, 46, 16],\n\n    // 30\n    [5, 145, 115, 10, 146, 116],\n    [19, 75, 47, 10, 76, 48],\n    [15, 54, 24, 25, 55, 25],\n    [23, 45, 15, 25, 46, 16],\n\n    // 31\n    [13, 145, 115, 3, 146, 116],\n    [2, 74, 46, 29, 75, 47],\n    [42, 54, 24, 1, 55, 25],\n    [23, 45, 15, 28, 46, 16],\n\n    // 32\n    [17, 145, 115],\n    [10, 74, 46, 23, 75, 47],\n    [10, 54, 24, 35, 55, 25],\n    [19, 45, 15, 35, 46, 16],\n\n    // 33\n    [17, 145, 115, 1, 146, 116],\n    [14, 74, 46, 21, 75, 47],\n    [29, 54, 24, 19, 55, 25],\n    [11, 45, 15, 46, 46, 16],\n\n    // 34\n    [13, 145, 115, 6, 146, 116],\n    [14, 74, 46, 23, 75, 47],\n    [44, 54, 24, 7, 55, 25],\n    [59, 46, 16, 1, 47, 17],\n\n    // 35\n    [12, 151, 121, 7, 152, 122],\n    [12, 75, 47, 26, 76, 48],\n    [39, 54, 24, 14, 55, 25],\n    [22, 45, 15, 41, 46, 16],\n\n    // 36\n    [6, 151, 121, 14, 152, 122],\n    [6, 75, 47, 34, 76, 48],\n    [46, 54, 24, 10, 55, 25],\n    [2, 45, 15, 64, 46, 16],\n\n    // 37\n    [17, 152, 122, 4, 153, 123],\n    [29, 74, 46, 14, 75, 47],\n    [49, 54, 24, 10, 55, 25],\n    [24, 45, 15, 46, 46, 16],\n\n    // 38\n    [4, 152, 122, 18, 153, 123],\n    [13, 74, 46, 32, 75, 47],\n    [48, 54, 24, 14, 55, 25],\n    [42, 45, 15, 32, 46, 16],\n\n    // 39\n    [20, 147, 117, 4, 148, 118],\n    [40, 75, 47, 7, 76, 48],\n    [43, 54, 24, 22, 55, 25],\n    [10, 45, 15, 67, 46, 16],\n\n    // 40\n    [19, 148, 118, 6, 149, 119],\n    [18, 75, 47, 31, 76, 48],\n    [34, 54, 24, 34, 55, 25],\n    [20, 45, 15, 61, 46, 16]\n  ];\n\n  static getRSBlocks(typeNumber: number, errorCorrectLevel: number) {\n    const rsBlock = QRRSBlock.getRsBlockTable(typeNumber, errorCorrectLevel);\n\n    if (rsBlock == undefined) {\n      throw new Error(\n        \"bad rs block @ typeNumber:\" +\n          typeNumber +\n          \"/errorCorrectLevel:\" +\n          errorCorrectLevel\n      );\n    }\n\n    const length = rsBlock.length / 3;\n\n    const list = [];\n\n    for (let i = 0; i < length; i++) {\n      const count = rsBlock[i * 3 + 0];\n      const totalCount = rsBlock[i * 3 + 1];\n      const dataCount = rsBlock[i * 3 + 2];\n\n      for (let j = 0; j < count; j++) {\n        list.push(new QRRSBlock(totalCount, dataCount));\n      }\n    }\n\n    return list;\n  }\n\n  static getRsBlockTable(typeNumber: number, errorCorrectLevel: number) {\n    switch (errorCorrectLevel) {\n      case QRErrorCorrectLevel.L:\n        return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 0];\n      case QRErrorCorrectLevel.M:\n        return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 1];\n      case QRErrorCorrectLevel.Q:\n        return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 2];\n      case QRErrorCorrectLevel.H:\n        return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 3];\n      default:\n        return undefined;\n    }\n  }\n}\n\nclass QRBitBuffer {\n  buffer: number[];\n  length: number;\n\n  constructor() {\n    this.buffer = [];\n    this.length = 0;\n  }\n\n  get(index: number) {\n    const bufIndex = Math.floor(index / 8);\n    return ((this.buffer[bufIndex] >>> (7 - (index % 8))) & 1) == 1;\n  }\n\n  put(num: number, length: number) {\n    for (let i = 0; i < length; i++) {\n      this.putBit(((num >>> (length - i - 1)) & 1) == 1);\n    }\n  }\n\n  getLengthInBits() {\n    return this.length;\n  }\n\n  putBit(bit: boolean) {\n    const bufIndex = Math.floor(this.length / 8);\n    if (this.buffer.length <= bufIndex) {\n      this.buffer.push(0);\n    }\n\n    if (bit) {\n      this.buffer[bufIndex] |= 0x80 >>> this.length % 8;\n    }\n\n    this.length++;\n  }\n}\n\nclass QR8bitByte {\n  mode: number;\n  data: string;\n  constructor(data: string) {\n    this.mode = QRMode.MODE_8BIT_BYTE;\n    this.data = data;\n  }\n  getLength() {\n    return this.data.length;\n  }\n\n  write(buffer: QRBitBuffer) {\n    for (let i = 0, len = this.data.length; i < len; i++) {\n      // not JIS ...\n      buffer.put(this.data.charCodeAt(i), 8);\n    }\n  }\n}\n\nexport class QRCode {\n  static PAD0 = 0xec;\n  static PAD1 = 0x11;\n\n  typeNumber: number;\n  errorCorrectLevel: any;\n  modules: (null | boolean)[][];\n  moduleCount: number;\n  dataCache: null | number[];\n  dataList: QR8bitByte[];\n\n  constructor(\n    typeNumber: number,\n    errorCorrectLevel: keyof typeof QRErrorCorrectLevel\n  ) {\n    this.typeNumber = typeNumber;\n    this.errorCorrectLevel = QRErrorCorrectLevel[errorCorrectLevel];\n    this.modules = [];\n    this.moduleCount = 0;\n    this.dataCache = null;\n    this.dataList = [];\n  }\n\n  addData(data: string) {\n    const newData = new QR8bitByte(data);\n    this.dataList.push(newData);\n    this.dataCache = null;\n  }\n\n  isDark(row: number, col: number) {\n    if (\n      row < 0 ||\n      this.moduleCount <= row ||\n      col < 0 ||\n      this.moduleCount <= col\n    ) {\n      throw new Error(row + \",\" + col);\n    }\n    return this.modules[row][col];\n  }\n\n  getModuleCount() {\n    return this.moduleCount;\n  }\n\n  make() {\n    // Calculate automatically typeNumber if provided is < 1\n    if (this.typeNumber < 1) {\n      let typeNumber = 1;\n      for (typeNumber = 1; typeNumber < 40; typeNumber++) {\n        const rsBlocks = QRRSBlock.getRSBlocks(\n          typeNumber,\n          this.errorCorrectLevel\n        );\n\n        const buffer = new QRBitBuffer();\n        let totalDataCount = 0;\n        for (let i = 0; i < rsBlocks.length; i++) {\n          totalDataCount += rsBlocks[i].dataCount;\n        }\n\n        for (let i = 0; i < this.dataList.length; i++) {\n          const data = this.dataList[i];\n          buffer.put(data.mode, 4);\n          buffer.put(\n            data.getLength(),\n            QRUtil.getLengthInBits(data.mode, typeNumber)\n          );\n          data.write(buffer);\n        }\n        if (buffer.getLengthInBits() <= totalDataCount * 8) break;\n      }\n      this.typeNumber = typeNumber;\n    }\n    this.makeImpl(false, this.getBestMaskPattern());\n  }\n\n  makeImpl(test: boolean, maskPattern: number) {\n    this.moduleCount = this.typeNumber * 4 + 17;\n    this.modules = new Array(this.moduleCount);\n\n    for (let row = 0; row < this.moduleCount; row++) {\n      this.modules[row] = new Array(this.moduleCount);\n\n      for (let col = 0; col < this.moduleCount; col++) {\n        this.modules[row][col] = null; //(col + row) % 3;\n      }\n    }\n\n    this.setupPositionProbePattern(0, 0);\n    this.setupPositionProbePattern(this.moduleCount - 7, 0);\n    this.setupPositionProbePattern(0, this.moduleCount - 7);\n    this.setupPositionAdjustPattern();\n    this.setupTimingPattern();\n    this.setupTypeInfo(test, maskPattern);\n\n    if (this.typeNumber >= 7) {\n      this.setupTypeNumber(test);\n    }\n\n    if (this.dataCache == null) {\n      this.dataCache = QRCode.createData(\n        this.typeNumber,\n        this.errorCorrectLevel,\n        this.dataList\n      );\n    }\n\n    this.mapData(this.dataCache, maskPattern);\n  }\n\n  setupPositionProbePattern(row: number, col: number) {\n    for (let r = -1; r <= 7; r++) {\n      if (row + r <= -1 || this.moduleCount <= row + r) continue;\n\n      for (let c = -1; c <= 7; c++) {\n        if (col + c <= -1 || this.moduleCount <= col + c) continue;\n\n        if (\n          (0 <= r && r <= 6 && (c == 0 || c == 6)) ||\n          (0 <= c && c <= 6 && (r == 0 || r == 6)) ||\n          (2 <= r && r <= 4 && 2 <= c && c <= 4)\n        ) {\n          this.modules[row + r][col + c] = true;\n        } else {\n          this.modules[row + r][col + c] = false;\n        }\n      }\n    }\n  }\n\n  getBestMaskPattern() {\n    let minLostPoint = 0;\n    let pattern = 0;\n\n    for (let i = 0; i < 8; i++) {\n      this.makeImpl(true, i);\n\n      const lostPoint = QRUtil.getLostPoint(this);\n\n      if (i == 0 || minLostPoint > lostPoint) {\n        minLostPoint = lostPoint;\n        pattern = i;\n      }\n    }\n\n    return pattern;\n  }\n\n  createMovieClip(\n    target_mc: {\n      createEmptyMovieClip: (\n        instance_name: string,\n        depth: number\n      ) => {\n        beginFill(x: number, y: number): void;\n        moveTo(x: number, y: number): void;\n        lineTo(x: number, y: number): void;\n        endFill(): void;\n      };\n    },\n    instance_name: string,\n    depth: number\n  ) {\n    const qr_mc = target_mc.createEmptyMovieClip(instance_name, depth);\n    const cs = 1;\n\n    this.make();\n\n    for (let row = 0; row < this.modules.length; row++) {\n      const y = row * cs;\n\n      for (let col = 0; col < this.modules[row].length; col++) {\n        const x = col * cs;\n        const dark = this.modules[row][col];\n\n        if (dark) {\n          qr_mc.beginFill(0, 100);\n          qr_mc.moveTo(x, y);\n          qr_mc.lineTo(x + cs, y);\n          qr_mc.lineTo(x + cs, y + cs);\n          qr_mc.lineTo(x, y + cs);\n          qr_mc.endFill();\n        }\n      }\n    }\n\n    return qr_mc;\n  }\n\n  setupTimingPattern() {\n    for (let r = 8; r < this.moduleCount - 8; r++) {\n      if (this.modules[r][6] != null) {\n        continue;\n      }\n      this.modules[r][6] = r % 2 == 0;\n    }\n\n    for (let c = 8; c < this.moduleCount - 8; c++) {\n      if (this.modules[6][c] != null) {\n        continue;\n      }\n      this.modules[6][c] = c % 2 == 0;\n    }\n  }\n\n  setupPositionAdjustPattern() {\n    const pos = QRUtil.getPatternPosition(this.typeNumber);\n\n    for (let i = 0; i < pos.length; i++) {\n      for (let j = 0; j < pos.length; j++) {\n        const row = pos[i];\n        const col = pos[j];\n\n        if (this.modules[row][col] != null) {\n          continue;\n        }\n\n        for (let r = -2; r <= 2; r++) {\n          for (let c = -2; c <= 2; c++) {\n            if (r == -2 || r == 2 || c == -2 || c == 2 || (r == 0 && c == 0)) {\n              this.modules[row + r][col + c] = true;\n            } else {\n              this.modules[row + r][col + c] = false;\n            }\n          }\n        }\n      }\n    }\n  }\n\n  setupTypeNumber(test: boolean) {\n    const bits = QRUtil.getBCHTypeNumber(this.typeNumber);\n\n    for (let i = 0; i < 18; i++) {\n      const mod = !test && ((bits >> i) & 1) == 1;\n      this.modules[Math.floor(i / 3)][(i % 3) + this.moduleCount - 8 - 3] = mod;\n    }\n\n    for (let i = 0; i < 18; i++) {\n      const mod = !test && ((bits >> i) & 1) == 1;\n      this.modules[(i % 3) + this.moduleCount - 8 - 3][Math.floor(i / 3)] = mod;\n    }\n  }\n\n  setupTypeInfo(test: boolean, maskPattern: number) {\n    const data = (this.errorCorrectLevel << 3) | maskPattern;\n    const bits = QRUtil.getBCHTypeInfo(data);\n\n    // vertical\n    for (let i = 0; i < 15; i++) {\n      const mod = !test && ((bits >> i) & 1) == 1;\n\n      if (i < 6) {\n        this.modules[i][8] = mod;\n      } else if (i < 8) {\n        this.modules[i + 1][8] = mod;\n      } else {\n        this.modules[this.moduleCount - 15 + i][8] = mod;\n      }\n    }\n\n    // horizontal\n    for (let i = 0; i < 15; i++) {\n      const mod = !test && ((bits >> i) & 1) == 1;\n\n      if (i < 8) {\n        this.modules[8][this.moduleCount - i - 1] = mod;\n      } else if (i < 9) {\n        this.modules[8][15 - i - 1 + 1] = mod;\n      } else {\n        this.modules[8][15 - i - 1] = mod;\n      }\n    }\n\n    // fixed module\n    this.modules[this.moduleCount - 8][8] = !test;\n  }\n\n  mapData(data: number[], maskPattern: number) {\n    let inc = -1;\n    let row = this.moduleCount - 1;\n    let bitIndex = 7;\n    let byteIndex = 0;\n\n    for (let col = this.moduleCount - 1; col > 0; col -= 2) {\n      if (col == 6) col--;\n\n      // eslint-disable-next-line no-constant-condition\n      while (true) {\n        for (let c = 0; c < 2; c++) {\n          if (this.modules[row][col - c] == null) {\n            let dark = false;\n\n            if (byteIndex < data.length) {\n              dark = ((data[byteIndex] >>> bitIndex) & 1) == 1;\n            }\n\n            const mask = QRUtil.getMask(maskPattern, row, col - c);\n\n            if (mask) {\n              dark = !dark;\n            }\n\n            this.modules[row][col - c] = dark;\n            bitIndex--;\n\n            if (bitIndex == -1) {\n              byteIndex++;\n              bitIndex = 7;\n            }\n          }\n        }\n\n        row += inc;\n\n        if (row < 0 || this.moduleCount <= row) {\n          row -= inc;\n          inc = -inc;\n          break;\n        }\n      }\n    }\n  }\n\n  static createData(\n    typeNumber: number,\n    errorCorrectLevel: number,\n    dataList: QR8bitByte[]\n  ) {\n    const rsBlocks = QRRSBlock.getRSBlocks(typeNumber, errorCorrectLevel);\n\n    const buffer = new QRBitBuffer();\n\n    for (let i = 0; i < dataList.length; i++) {\n      const data = dataList[i];\n      buffer.put(data.mode, 4);\n      buffer.put(\n        data.getLength(),\n        QRUtil.getLengthInBits(data.mode, typeNumber)\n      );\n      data.write(buffer);\n    }\n\n    // calc num max data.\n    let totalDataCount = 0;\n    for (let i = 0; i < rsBlocks.length; i++) {\n      totalDataCount += rsBlocks[i].dataCount;\n    }\n\n    if (buffer.getLengthInBits() > totalDataCount * 8) {\n      throw new Error(\n        \"code length overflow. (\" +\n          buffer.getLengthInBits() +\n          \">\" +\n          totalDataCount * 8 +\n          \")\"\n      );\n    }\n\n    // end code\n    if (buffer.getLengthInBits() + 4 <= totalDataCount * 8) {\n      buffer.put(0, 4);\n    }\n\n    // padding\n    while (buffer.getLengthInBits() % 8 != 0) {\n      buffer.putBit(false);\n    }\n\n    // padding\n    // eslint-disable-next-line no-constant-condition\n    while (true) {\n      if (buffer.getLengthInBits() >= totalDataCount * 8) {\n        break;\n      }\n      buffer.put(QRCode.PAD0, 8);\n\n      if (buffer.getLengthInBits() >= totalDataCount * 8) {\n        break;\n      }\n      buffer.put(QRCode.PAD1, 8);\n    }\n\n    return QRCode.createBytes(buffer, rsBlocks);\n  }\n\n  static createBytes(buffer: QRBitBuffer, rsBlocks: QRRSBlock[]) {\n    let offset = 0;\n\n    let maxDcCount = 0;\n    let maxEcCount = 0;\n\n    const dcdata = new Array(rsBlocks.length);\n    const ecdata = new Array(rsBlocks.length);\n\n    for (let r = 0; r < rsBlocks.length; r++) {\n      const dcCount = rsBlocks[r].dataCount;\n      const ecCount = rsBlocks[r].totalCount - dcCount;\n\n      maxDcCount = Math.max(maxDcCount, dcCount);\n      maxEcCount = Math.max(maxEcCount, ecCount);\n\n      dcdata[r] = new Array(dcCount);\n\n      for (let i = 0; i < dcdata[r].length; i++) {\n        dcdata[r][i] = 0xff & buffer.buffer[i + offset];\n      }\n      offset += dcCount;\n\n      const rsPoly = QRUtil.getErrorCorrectPolynomial(ecCount);\n      const rawPoly = new QRPolynomial(dcdata[r], rsPoly.getLength() - 1);\n\n      const modPoly = rawPoly.mod(rsPoly);\n      ecdata[r] = new Array(rsPoly.getLength() - 1);\n      for (let i = 0; i < ecdata[r].length; i++) {\n        const modIndex = i + modPoly.getLength() - ecdata[r].length;\n        ecdata[r][i] = modIndex >= 0 ? modPoly.get(modIndex) : 0;\n      }\n    }\n\n    let totalCodeCount = 0;\n    for (let i = 0; i < rsBlocks.length; i++) {\n      totalCodeCount += rsBlocks[i].totalCount;\n    }\n\n    const data = new Array(totalCodeCount);\n    let index = 0;\n\n    for (let i = 0; i < maxDcCount; i++) {\n      for (let r = 0; r < rsBlocks.length; r++) {\n        if (i < dcdata[r].length) {\n          data[index++] = dcdata[r][i];\n        }\n      }\n    }\n\n    for (let i = 0; i < maxEcCount; i++) {\n      for (let r = 0; r < rsBlocks.length; r++) {\n        if (i < ecdata[r].length) {\n          data[index++] = ecdata[r][i];\n        }\n      }\n    }\n\n    return data as number[];\n  }\n}\n\n// 变量\nconst MathC = Math.ceil;\nconst MathF = Math.floor;\nconst MathR = Math.round;\n\n// 输出为base64\nexport function outputQRCodeBase64(\n  text: string,\n  options?: {\n    ecc?: keyof typeof QRErrorCorrectLevel;\n    size?: number;\n    padding?: number;\n    color?: string;\n    background?: string;\n  }\n) {\n  const txt = utf16to8(text),\n    ecc = options?.ecc || \"H\",\n    size = options?.size || 256,\n    typeNumber = -1,\n    padding = options?.padding || 0,\n    foreground = options?.color || \"#000000\",\n    background = options?.background || \"#ffffff\";\n\n  // create the qrcode itself\n  const qrcode = new QRCode(typeNumber, ecc);\n  qrcode.addData(txt);\n  qrcode.make();\n\n  // calc width\n  const count = qrcode.getModuleCount(),\n    width = (size - padding * 2) / count;\n\n  const min = padding,\n    max = size - padding;\n\n  return outputGifBase64(size, foreground, background, function (x, y) {\n    if (min <= x && x < max && min <= y && y < max) {\n      const c = MathF((x - min) / width);\n      const r = MathF((y - min) / width);\n      return qrcode.isDark(r, c) ? 0 : 1;\n    } else {\n      return 1;\n    }\n  });\n}\n\n// 绘制到canvas\nexport function drawQRCodeToCanvas(\n  text: string,\n  options: {\n    x?: number;\n    y?: number;\n    ctx: CanvasRenderingContext2D;\n    ecc?: keyof typeof QRErrorCorrectLevel;\n    size?: number;\n    padding?: number;\n    color?: string;\n    background?: string;\n  }\n) {\n  const x = options.x || 0,\n    y = options.y || 0,\n    txt = utf16to8(text),\n    ctx = options.ctx,\n    ecc = options.ecc || \"H\",\n    size = typeof options.size === \"number\" ? MathF(options.size) : 256,\n    padding = options.padding || 0,\n    typeNumber = -1,\n    foreground = options.color || \"#000000\",\n    background = options.background || \"#ffffff\";\n\n  // create the qrcode itself\n  const qrcode = new QRCode(typeNumber, ecc);\n  qrcode.addData(txt);\n  qrcode.make();\n\n  // compute width based on size\n  const count = qrcode.getModuleCount(),\n    width = (size - padding * 2) / count;\n\n  // background\n  ctx.fillStyle = background;\n  ctx.fillRect(x, y, size, size);\n\n  // draw in the canvas\n  for (let row = 0; row < count; row++) {\n    for (let col = 0; col < count; col++) {\n      const w = MathC((col + 1) * width) - MathF(col * width);\n      const h = MathC((row + 1) * width) - MathF(row * width);\n\n      ctx.fillStyle = qrcode.isDark(row, col) ? foreground : background;\n\n      ctx.fillRect(\n        x + MathR(col * width) + padding,\n        y + MathR(row * width) + padding,\n        w,\n        h\n      );\n    }\n  }\n}\n","/// 角度单位 degree(deg) radian(rad) turns(turn) gradian(grad)\n/// SVG 默认 deg\n\n/// 判断 CSS 中 transform rotate 旋转方向：\n/// 轻握左手，大拇指指向旋转轴正方向，四指指向的方向就是旋转正方向\n/// x轴正方向向右\n/// y轴正方向向下\n/// z轴正方向向外\n\n// css transform 影响的是视觉渲染，而不是布局\n\n// transform: none;\n// transform-style: flat; // preserve-3d | flat\n\n// transform-origin: center;\n// transform-origin: 50% 50%;\n// HTML element 默认坐标系原点在自身的（50%， 50%）处\n// SVG element 默认坐标系原点在svg画布的原点（0，0）处\n// 实测 SVG element 的 transform-origin 只能设置为百分比，且是相对svg画布的百分比，不是相对 html element 的百分比\n\n// viewBox=\"0 0 width height\"时，svg画布的原点（0，0）在屏幕左上点\n// viewBox=\"x y width height\"时，svg画布的原点（0，0）在屏幕左上点（0-x，0-y）处\n\n// transform  4 种变形方式\n// # 位移\n// \tCSS : translate(tx[, ty=0]) translateX(tx)  translateY(ty)\n// \tSVG : translate(tx[ ty=0])\n//  连续的 translate(tx1 ty1) translate(tx2 ty2) = translate(tx1+tx2 ty1+ty2)\n//  还原 translate(tx ty) = translate(-tx -ty)\n// # 旋转\n// \tCSS : rotate(angle)\n// \tSVG : rotate(angle [centerX centerY])\n//  连续的 rotate(a1) rotate(a2) = rotate(a1+a2)\n//  还原 rotate(a1) = rotate(-a1)\n// # 缩放\n// \tCSS : scale(sx[, sy = sx])  scaleX(sx) scaleY(sy)\n// \tSVG : scale(sx[ sy = sx])\n//  连续的 scale(sx1 sy1) scale(sx2 sy2) = scale(sx1*sx2 sy1*sy2)\n//  还原 scale(sx sy) = scale(1/sx 1/sy)\n// # 倾斜\n// \tCSS : skewX(a) skewY(a)\n// \tSVG : skewX(a) skewY(a)\n// \tskewX(angle) 所有点x坐标变换，y坐标不变，相当于y轴倾斜，任何与x轴平行的边长度保持不变，y轴正方向向x轴正方向靠近为+angle\n// \tskewY(angle) 所有点y坐标变换，x坐标不变，相当于x轴倾斜，任何与y轴平行的边长度保持不变，x轴正方向向y轴正方向靠近为+angle\n// \t连续的 skewX(a1) skewX(a2) != skewX(a1 + a2)\n\n// 使用多个变换函数，每一个变换函数不仅改变了元素，同时也会改变和元素关联的transform坐标系\n// 当变换函数依次执行时，后一个变换函数总是基于前一个变换后的新transform坐标系\n// 即变换函数是通过数学上的矩阵乘法运算完成的，而矩阵的乘法是不满足交换律的\n// transform: scale(0.8, 1.5) rotate(35deg) skew(5deg, 20deg) translate(15px, 25px);\n\n/**\n * CSS 坐标系\n * 0deg = 从下到上\n * 90deg = 从左到右\n *                   [0deg]            [45deg]\n *                      ⬆            ⬈\n *                      *         *\n *                      *     *\n *                      *  *\n *  [-90deg] ⬅ *  *  *  *  *  *  * ⮕  [90deg]\n *                      *\n *                      *\n *                      *\n *                      ⬇\n *                   [180deg]\n */\n\n/**\n * canvas svg Vector 坐标系\n *                [-90° / 270°]\n *                  *\n *                  *\n *                  *\n *  [180°] *  *  *  *  *  *  *  [0°]\n *                  *\n *                  *\n *                  *\n *                [90°]\n */\n\nexport function toRadian(degree: number) {\n  return (degree * Math.PI) / 180;\n}\n\nexport function toDegree(radian: number) {\n  return (radian * 180) / Math.PI;\n}\n\nexport function length(x: number, y: number, z = 0) {\n  return Math.sqrt(x * x + y * y + z * z);\n}\n\nexport function distance(x1: number, y1: number, x2: number, y2: number) {\n  return length(x2 - x1, y2 - y1);\n}\n\n// 返回从原点(0,0) 到 (x,y) 点的线段与 x 轴正方向之间的平面角度(弧度值)\nexport function angle(\n  startX: number,\n  startY: number,\n  endX: number,\n  endY: number\n): number {\n  let radian = Math.atan2(endY - startY, endX - startX);\n  if (radian < 0) {\n    radian += Math.PI * 2;\n  }\n  return radian;\n}\n\nexport function polar(radian: number, length: number) {\n  return {\n    dx: Math.cos(radian) * length,\n    dy: Math.sin(radian) * length\n  };\n}\n\nexport function normalizePoint(x: number, y: number, z?: number) {\n  if (typeof z === \"number\") {\n    const l = length(x, y, z);\n    return {\n      x: (x /= l),\n      y: (y /= l),\n      z: (z /= l)\n    };\n  } else {\n    const l = length(x, y);\n    return {\n      x: (x /= l),\n      y: (y /= l)\n    };\n  }\n}\n\n// 根据起点终点返回方向\nexport function getDirection(\n  startX: number,\n  startY: number,\n  endX: number,\n  endY: number,\n  minDistance = 10\n): \"up\" | \"down\" | \"left\" | \"right\" | \"no\" {\n  // 如果滑动距离太短\n  if (\n    Math.abs(endX - startX) < minDistance &&\n    Math.abs(endY - startY) < minDistance\n  ) {\n    return \"no\";\n  }\n  const degree = toDegree(angle(startX, startY, endX, endY));\n  if (degree >= -135 && degree <= -45) {\n    return \"up\";\n  } else if (degree > 45 && degree < 135) {\n    return \"down\";\n  } else if (\n    (degree >= 135 && degree <= 180) ||\n    (degree >= -180 && degree < -135)\n  ) {\n    return \"left\";\n  } else {\n    // if (degree >= -45 && degree <= 45) {\n    return \"right\";\n  }\n}\n","import { clamp } from \"@zyzgroup/core-common\";\nimport { Euler } from \"./Euler\";\nimport { Matrix4 } from \"./Matrix\";\nimport { Vector3 } from \"./Vector\";\nimport { BufferAttribute } from \"./BufferAttribute\";\n\n/// 四元数 Quaternion\n/// 四元数是一个四维复数 q = w + x * i + y * j + z * k 写成 q=(x,y,z,w) 当 q=1 时表示一个旋转\n\n/// 没有万向锁问题\n/// 适合平滑插值\n\nexport class Quaternion {\n  // x, y, z 表示旋转轴的方向\n  private _x: number;\n  private _y: number;\n  private _z: number;\n  // w 表示旋转角度的余弦值（实际上是 cos(θ/2)）\n  private _w: number;\n\n  constructor(x = 0, y = 0, z = 0, w = 1) {\n    this._x = x;\n    this._y = y;\n    this._z = z;\n    this._w = w;\n  }\n\n  static slerpFlat(\n    dst: number[],\n    dstOffset: number,\n    src0: number[],\n    srcOffset0: number,\n    src1: number[],\n    srcOffset1: number,\n    t: number\n  ) {\n    // fuzz-free, array-based Quaternion SLERP operation\n\n    let x0 = src0[srcOffset0 + 0];\n    let y0 = src0[srcOffset0 + 1];\n    let z0 = src0[srcOffset0 + 2];\n    let w0 = src0[srcOffset0 + 3];\n\n    const x1 = src1[srcOffset1 + 0];\n    const y1 = src1[srcOffset1 + 1];\n    const z1 = src1[srcOffset1 + 2];\n    const w1 = src1[srcOffset1 + 3];\n\n    if (t === 0) {\n      dst[dstOffset + 0] = x0;\n      dst[dstOffset + 1] = y0;\n      dst[dstOffset + 2] = z0;\n      dst[dstOffset + 3] = w0;\n      return;\n    }\n\n    if (t === 1) {\n      dst[dstOffset + 0] = x1;\n      dst[dstOffset + 1] = y1;\n      dst[dstOffset + 2] = z1;\n      dst[dstOffset + 3] = w1;\n      return;\n    }\n\n    if (w0 !== w1 || x0 !== x1 || y0 !== y1 || z0 !== z1) {\n      let s = 1 - t;\n      const cos = x0 * x1 + y0 * y1 + z0 * z1 + w0 * w1;\n      const dir = cos >= 0 ? 1 : -1;\n      const sqrSin = 1 - cos * cos;\n\n      // Skip the Slerp for tiny steps to avoid numeric problems:\n      if (sqrSin > Number.EPSILON) {\n        const sin = Math.sqrt(sqrSin);\n        const len = Math.atan2(sin, cos * dir);\n\n        s = Math.sin(s * len) / sin;\n        t = Math.sin(t * len) / sin;\n      }\n\n      const tDir = t * dir;\n\n      x0 = x0 * s + x1 * tDir;\n      y0 = y0 * s + y1 * tDir;\n      z0 = z0 * s + z1 * tDir;\n      w0 = w0 * s + w1 * tDir;\n\n      // Normalize in case we just did a lerp:\n      if (s === 1 - t) {\n        const f = 1 / Math.sqrt(x0 * x0 + y0 * y0 + z0 * z0 + w0 * w0);\n\n        x0 *= f;\n        y0 *= f;\n        z0 *= f;\n        w0 *= f;\n      }\n    }\n\n    dst[dstOffset] = x0;\n    dst[dstOffset + 1] = y0;\n    dst[dstOffset + 2] = z0;\n    dst[dstOffset + 3] = w0;\n  }\n\n  static multiplyQuaternionsFlat(\n    dst: number[],\n    dstOffset: number,\n    src0: number[],\n    srcOffset0: number,\n    src1: number[],\n    srcOffset1: number\n  ) {\n    const x0 = src0[srcOffset0];\n    const y0 = src0[srcOffset0 + 1];\n    const z0 = src0[srcOffset0 + 2];\n    const w0 = src0[srcOffset0 + 3];\n\n    const x1 = src1[srcOffset1];\n    const y1 = src1[srcOffset1 + 1];\n    const z1 = src1[srcOffset1 + 2];\n    const w1 = src1[srcOffset1 + 3];\n\n    dst[dstOffset] = x0 * w1 + w0 * x1 + y0 * z1 - z0 * y1;\n    dst[dstOffset + 1] = y0 * w1 + w0 * y1 + z0 * x1 - x0 * z1;\n    dst[dstOffset + 2] = z0 * w1 + w0 * z1 + x0 * y1 - y0 * x1;\n    dst[dstOffset + 3] = w0 * w1 - x0 * x1 - y0 * y1 - z0 * z1;\n\n    return dst;\n  }\n\n  get x() {\n    return this._x;\n  }\n\n  set x(value: number) {\n    this._x = value;\n    this._onChangeCallback();\n  }\n\n  get y() {\n    return this._y;\n  }\n\n  set y(value: number) {\n    this._y = value;\n    this._onChangeCallback();\n  }\n\n  get z() {\n    return this._z;\n  }\n\n  set z(value: number) {\n    this._z = value;\n    this._onChangeCallback();\n  }\n\n  get w() {\n    return this._w;\n  }\n\n  set w(value: number) {\n    this._w = value;\n    this._onChangeCallback();\n  }\n\n  set(x = this._x, y = this._y, z = this._z, w = this._w) {\n    this._x = x;\n    this._y = y;\n    this._z = z;\n    this._w = w;\n    this._onChangeCallback();\n    return this;\n  }\n\n  clone() {\n    return new Quaternion(this._x, this._y, this._z, this._w);\n  }\n\n  copy(quaternion: Quaternion) {\n    this._x = quaternion.x;\n    this._y = quaternion.y;\n    this._z = quaternion.z;\n    this._w = quaternion.w;\n    this._onChangeCallback();\n    return this;\n  }\n\n  setFromEuler(euler: Euler, update = true) {\n    const x = euler.x;\n    const y = euler.y;\n    const z = euler.z;\n    const order = euler.order;\n\n    // http://www.mathworks.com/matlabcentral/fileexchange/\n    // \t20696-function-to-convert-between-dcm-euler-angles-quaternions-and-euler-vectors/\n    //\tcontent/SpinCalc.m\n\n    const cos = Math.cos;\n    const sin = Math.sin;\n\n    const c1 = cos(x / 2);\n    const c2 = cos(y / 2);\n    const c3 = cos(z / 2);\n\n    const s1 = sin(x / 2);\n    const s2 = sin(y / 2);\n    const s3 = sin(z / 2);\n\n    switch (order) {\n      case \"XYZ\":\n        this._x = s1 * c2 * c3 + c1 * s2 * s3;\n        this._y = c1 * s2 * c3 - s1 * c2 * s3;\n        this._z = c1 * c2 * s3 + s1 * s2 * c3;\n        this._w = c1 * c2 * c3 - s1 * s2 * s3;\n        break;\n\n      case \"YXZ\":\n        this._x = s1 * c2 * c3 + c1 * s2 * s3;\n        this._y = c1 * s2 * c3 - s1 * c2 * s3;\n        this._z = c1 * c2 * s3 - s1 * s2 * c3;\n        this._w = c1 * c2 * c3 + s1 * s2 * s3;\n        break;\n\n      case \"ZXY\":\n        this._x = s1 * c2 * c3 - c1 * s2 * s3;\n        this._y = c1 * s2 * c3 + s1 * c2 * s3;\n        this._z = c1 * c2 * s3 + s1 * s2 * c3;\n        this._w = c1 * c2 * c3 - s1 * s2 * s3;\n        break;\n\n      case \"ZYX\":\n        this._x = s1 * c2 * c3 - c1 * s2 * s3;\n        this._y = c1 * s2 * c3 + s1 * c2 * s3;\n        this._z = c1 * c2 * s3 - s1 * s2 * c3;\n        this._w = c1 * c2 * c3 + s1 * s2 * s3;\n        break;\n\n      case \"YZX\":\n        this._x = s1 * c2 * c3 + c1 * s2 * s3;\n        this._y = c1 * s2 * c3 + s1 * c2 * s3;\n        this._z = c1 * c2 * s3 - s1 * s2 * c3;\n        this._w = c1 * c2 * c3 - s1 * s2 * s3;\n        break;\n\n      case \"XZY\":\n        this._x = s1 * c2 * c3 - c1 * s2 * s3;\n        this._y = c1 * s2 * c3 - s1 * c2 * s3;\n        this._z = c1 * c2 * s3 + s1 * s2 * c3;\n        this._w = c1 * c2 * c3 + s1 * s2 * s3;\n        break;\n\n      default:\n        console.warn(\n          \"Quaternion: .setFromEuler() encountered an unknown order: \" + order\n        );\n    }\n\n    if (update === true) this._onChangeCallback();\n    return this;\n  }\n\n  setFromAxisAngle(axis: Vector3, angle: number) {\n    // http://www.euclideanspace.com/maths/geometry/rotations/conversions/angleToQuaternion/index.htm\n    // assumes axis is normalized\n    const halfAngle = angle / 2;\n    const s = Math.sin(halfAngle);\n    this._x = axis.x * s;\n    this._y = axis.y * s;\n    this._z = axis.z * s;\n    this._w = Math.cos(halfAngle);\n    this._onChangeCallback();\n    return this;\n  }\n\n  setFromRotationMatrix4(m: Matrix4) {\n    // http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToQuaternion/index.htm\n    // assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n    const te = m.value;\n    const m11 = te[0];\n    const m12 = te[4];\n    const m13 = te[8];\n    const m21 = te[1];\n    const m22 = te[5];\n    const m23 = te[9];\n    const m31 = te[2];\n    const m32 = te[6];\n    const m33 = te[10];\n    const trace = m11 + m22 + m33;\n\n    if (trace > 0) {\n      const s = 0.5 / Math.sqrt(trace + 1.0);\n\n      this._w = 0.25 / s;\n      this._x = (m32 - m23) * s;\n      this._y = (m13 - m31) * s;\n      this._z = (m21 - m12) * s;\n    } else if (m11 > m22 && m11 > m33) {\n      const s = 2.0 * Math.sqrt(1.0 + m11 - m22 - m33);\n\n      this._w = (m32 - m23) / s;\n      this._x = 0.25 * s;\n      this._y = (m12 + m21) / s;\n      this._z = (m13 + m31) / s;\n    } else if (m22 > m33) {\n      const s = 2.0 * Math.sqrt(1.0 + m22 - m11 - m33);\n\n      this._w = (m13 - m31) / s;\n      this._x = (m12 + m21) / s;\n      this._y = 0.25 * s;\n      this._z = (m23 + m32) / s;\n    } else {\n      const s = 2.0 * Math.sqrt(1.0 + m33 - m11 - m22);\n\n      this._w = (m21 - m12) / s;\n      this._x = (m13 + m31) / s;\n      this._y = (m23 + m32) / s;\n      this._z = 0.25 * s;\n    }\n\n    this._onChangeCallback();\n    return this;\n  }\n\n  setFromUnitVectors(vFrom: Vector3, vTo: Vector3) {\n    // assumes direction vectors vFrom and vTo are normalized\n\n    let r = vFrom.dot(vTo) + 1;\n\n    if (r < Number.EPSILON) {\n      // vFrom and vTo point in opposite directions\n\n      r = 0;\n\n      if (Math.abs(vFrom.x) > Math.abs(vFrom.z)) {\n        this._x = -vFrom.y;\n        this._y = vFrom.x;\n        this._z = 0;\n        this._w = r;\n      } else {\n        this._x = 0;\n        this._y = -vFrom.z;\n        this._z = vFrom.y;\n        this._w = r;\n      }\n    } else {\n      // crossVectors( vFrom, vTo ); // inlined to avoid cyclic dependency on Vector3\n\n      this._x = vFrom.y * vTo.z - vFrom.z * vTo.y;\n      this._y = vFrom.z * vTo.x - vFrom.x * vTo.z;\n      this._z = vFrom.x * vTo.y - vFrom.y * vTo.x;\n      this._w = r;\n    }\n\n    return this.normalize();\n  }\n\n  angleTo(q: Quaternion) {\n    return 2 * Math.acos(Math.abs(clamp(this.dot(q), -1, 1)));\n  }\n\n  rotateTowards(q: Quaternion, step: number) {\n    const angle = this.angleTo(q);\n    if (angle === 0) return this;\n    const t = Math.min(1, step / angle);\n    this.slerp(q, t);\n    return this;\n  }\n\n  identity() {\n    return this.set(0, 0, 0, 1);\n  }\n\n  invert() {\n    // quaternion is assumed to have unit length\n    return this.conjugate();\n  }\n\n  conjugate() {\n    this._x *= -1;\n    this._y *= -1;\n    this._z *= -1;\n    this._onChangeCallback();\n    return this;\n  }\n\n  dot(v: Quaternion) {\n    return this._x * v._x + this._y * v._y + this._z * v._z + this._w * v._w;\n  }\n\n  lengthSq() {\n    return (\n      this._x * this._x +\n      this._y * this._y +\n      this._z * this._z +\n      this._w * this._w\n    );\n  }\n\n  length() {\n    return Math.sqrt(\n      this._x * this._x +\n        this._y * this._y +\n        this._z * this._z +\n        this._w * this._w\n    );\n  }\n\n  normalize() {\n    let l = this.length();\n    if (l === 0) {\n      this._x = 0;\n      this._y = 0;\n      this._z = 0;\n      this._w = 1;\n    } else {\n      l = 1 / l;\n      this._x = this._x * l;\n      this._y = this._y * l;\n      this._z = this._z * l;\n      this._w = this._w * l;\n    }\n    this._onChangeCallback();\n    return this;\n  }\n\n  multiply(q: Quaternion) {\n    return this.multiplyQuaternions(this, q);\n  }\n\n  premultiply(q: Quaternion) {\n    return this.multiplyQuaternions(q, this);\n  }\n\n  multiplyQuaternions(a: Quaternion, b: Quaternion) {\n    // from http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/code/index.htm\n\n    const qax = a._x;\n    const qay = a._y;\n    const qaz = a._z;\n    const qaw = a._w;\n    const qbx = b._x;\n    const qby = b._y;\n    const qbz = b._z;\n    const qbw = b._w;\n\n    this._x = qax * qbw + qaw * qbx + qay * qbz - qaz * qby;\n    this._y = qay * qbw + qaw * qby + qaz * qbx - qax * qbz;\n    this._z = qaz * qbw + qaw * qbz + qax * qby - qay * qbx;\n    this._w = qaw * qbw - qax * qbx - qay * qby - qaz * qbz;\n\n    this._onChangeCallback();\n\n    return this;\n  }\n\n  // 插值 t: 0 ~ 1\n  slerp(qb: Quaternion, t: number) {\n    if (t === 0) return this;\n    if (t === 1) return this.copy(qb);\n\n    const x = this._x;\n    const y = this._y;\n    const z = this._z;\n    const w = this._w;\n\n    // http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/slerp/\n\n    let cosHalfTheta = w * qb._w + x * qb._x + y * qb._y + z * qb._z;\n\n    if (cosHalfTheta < 0) {\n      this._w = -qb._w;\n      this._x = -qb._x;\n      this._y = -qb._y;\n      this._z = -qb._z;\n\n      cosHalfTheta = -cosHalfTheta;\n    } else {\n      this.copy(qb);\n    }\n\n    if (cosHalfTheta >= 1.0) {\n      this._w = w;\n      this._x = x;\n      this._y = y;\n      this._z = z;\n\n      return this;\n    }\n\n    const sqrSinHalfTheta = 1.0 - cosHalfTheta * cosHalfTheta;\n\n    if (sqrSinHalfTheta <= Number.EPSILON) {\n      const s = 1 - t;\n      this._w = s * w + t * this._w;\n      this._x = s * x + t * this._x;\n      this._y = s * y + t * this._y;\n      this._z = s * z + t * this._z;\n\n      this.normalize(); // normalize calls _onChangeCallback()\n\n      return this;\n    }\n\n    const sinHalfTheta = Math.sqrt(sqrSinHalfTheta);\n    const halfTheta = Math.atan2(sinHalfTheta, cosHalfTheta);\n    const ratioA = Math.sin((1 - t) * halfTheta) / sinHalfTheta;\n    const ratioB = Math.sin(t * halfTheta) / sinHalfTheta;\n\n    this._w = w * ratioA + this._w * ratioB;\n    this._x = x * ratioA + this._x * ratioB;\n    this._y = y * ratioA + this._y * ratioB;\n    this._z = z * ratioA + this._z * ratioB;\n\n    this._onChangeCallback();\n\n    return this;\n  }\n\n  slerpQuaternions(qa: Quaternion, qb: Quaternion, t: number) {\n    return this.copy(qa).slerp(qb, t);\n  }\n\n  random() {\n    // sets this quaternion to a uniform random unit quaternnion\n\n    // Ken Shoemake\n    // Uniform random rotations\n    // D. Kirk, editor, Graphics Gems III, pages 124-132. Academic Press, New York, 1992.\n\n    const theta1 = 2 * Math.PI * Math.random();\n    const theta2 = 2 * Math.PI * Math.random();\n\n    const x0 = Math.random();\n    const r1 = Math.sqrt(1 - x0);\n    const r2 = Math.sqrt(x0);\n\n    return this.set(\n      r1 * Math.sin(theta1),\n      r1 * Math.cos(theta1),\n      r2 * Math.sin(theta2),\n      r2 * Math.cos(theta2)\n    );\n  }\n\n  equals(quaternion: Quaternion) {\n    return (\n      quaternion._x === this._x &&\n      quaternion._y === this._y &&\n      quaternion._z === this._z &&\n      quaternion._w === this._w\n    );\n  }\n\n  fromArray(array: number[], offset = 0) {\n    this._x = array[offset];\n    this._y = array[offset + 1];\n    this._z = array[offset + 2];\n    this._w = array[offset + 3];\n    this._onChangeCallback();\n    return this;\n  }\n\n  toArray(array: number[] = [], offset = 0) {\n    array[offset] = this._x;\n    array[offset + 1] = this._y;\n    array[offset + 2] = this._z;\n    array[offset + 3] = this._w;\n    return array;\n  }\n\n  fromBufferAttribute(attribute: BufferAttribute, index: number) {\n    this._x = attribute.getX(index);\n    this._y = attribute.getY(index);\n    this._z = attribute.getZ(index);\n    this._w = attribute.getW(index);\n    this._onChangeCallback();\n    return this;\n  }\n\n  toJSON() {\n    return this.toArray();\n  }\n\n  onChange(callback: () => void) {\n    this._onChangeCallback = callback;\n    return this;\n  }\n\n  _onChangeCallback() {}\n\n  *[Symbol.iterator]() {\n    yield this._x;\n    yield this._y;\n    yield this._z;\n    yield this._w;\n  }\n}\n","import { clamp } from \"@zyzgroup/core-common\";\nimport { Matrix3, Matrix4 } from \"./Matrix\";\nimport { BufferAttribute } from \"./BufferAttribute\";\nimport { Quaternion } from \"./Quaternion\";\nimport { Euler } from \"./Euler\";\n\n/// 向量\n\nexport class Vector2 {\n  x = 0;\n  y = 0;\n\n  constructor(x = 0, y = 0) {\n    this.x = x;\n    this.y = y;\n  }\n\n  get width() {\n    return this.x;\n  }\n\n  set width(value: number) {\n    this.x = value;\n  }\n\n  get height() {\n    return this.y;\n  }\n\n  set height(value: number) {\n    this.y = value;\n  }\n\n  set(x = 0, y = 0) {\n    this.x = x;\n    this.y = y;\n    return this;\n  }\n\n  setScalar(scalar: number) {\n    this.x = scalar;\n    this.y = scalar;\n    return this;\n  }\n\n  setX(x: number) {\n    this.x = x;\n    return this;\n  }\n\n  setY(y: number) {\n    this.y = y;\n    return this;\n  }\n\n  setComponent(index: number, value: number) {\n    switch (index) {\n      case 0:\n        this.x = value;\n        break;\n      case 1:\n        this.y = value;\n        break;\n      default:\n        throw new Error(\"index is out of range: \" + index);\n    }\n    return this;\n  }\n\n  getComponent(index: number) {\n    switch (index) {\n      case 0:\n        return this.x;\n      case 1:\n        return this.y;\n      default:\n        throw new Error(\"index is out of range: \" + index);\n    }\n  }\n\n  copy(v: Vector2) {\n    this.x = v.x;\n    this.y = v.y;\n    return this;\n  }\n\n  clone() {\n    return new Vector2(this.x, this.y);\n  }\n\n  /// 交换律：  P + Q = Q + P\n  /// 结合律：  (P + Q) + R =  P + (Q + R)\n  /// 分配率：  a(P + Q) = aP + aQ\n  add(v: Vector2) {\n    this.x += v.x;\n    this.y += v.y;\n    return this;\n  }\n\n  addScalar(s: number) {\n    this.x += s;\n    this.y += s;\n    return this;\n  }\n\n  addVectors(a: Vector2, b: Vector2) {\n    this.x = a.x + b.x;\n    this.y = a.y + b.y;\n    return this;\n  }\n\n  addScaledVector(v: Vector2, s: number) {\n    this.x += v.x * s;\n    this.y += v.y * s;\n    return this;\n  }\n\n  /// P.sub(Q) = 从 Q的终点 到 P的终点\n  sub(v: Vector2) {\n    this.x -= v.x;\n    this.y -= v.y;\n    return this;\n  }\n\n  subScalar(s: number) {\n    this.x -= s;\n    this.y -= s;\n    return this;\n  }\n\n  subVectors(a: Vector2, b: Vector2) {\n    this.x = a.x - b.x;\n    this.y = a.y - b.y;\n    return this;\n  }\n\n  /// 乘积\n  /// 交换律：  P * Q = Q * P\n  /// 结合律：  (ab)P = a(bP)\n  /// 分配率：  (a + b)P = aP + bP\n  multiply(v: Vector2) {\n    this.x *= v.x;\n    this.y *= v.y;\n    return this;\n  }\n\n  multiplyScalar(scalar: number) {\n    this.x *= scalar;\n    this.y *= scalar;\n    return this;\n  }\n\n  divide(v: Vector2) {\n    this.x /= v.x;\n    this.y /= v.y;\n    return this;\n  }\n\n  divideScalar(scalar: number) {\n    return this.multiplyScalar(1 / scalar);\n  }\n\n  applyMatrix3(m: Matrix3) {\n    const x = this.x;\n    const y = this.y;\n    this.x = m.m11 * x + m.m21 * y + m.m31;\n    this.y = m.m12 * x + m.m22 * y + m.m32;\n    return this;\n  }\n\n  min(v: Vector2) {\n    this.x = Math.min(this.x, v.x);\n    this.y = Math.min(this.y, v.y);\n    return this;\n  }\n\n  max(v: Vector2) {\n    this.x = Math.max(this.x, v.x);\n    this.y = Math.max(this.y, v.y);\n    return this;\n  }\n\n  clamp(min: Vector2, max: Vector2) {\n    this.x = clamp(this.x, min.x, max.x);\n    this.y = clamp(this.y, min.y, max.y);\n    return this;\n  }\n\n  clampScalar(minVal: number, maxVal: number) {\n    this.x = clamp(this.x, minVal, maxVal);\n    this.y = clamp(this.y, minVal, maxVal);\n    return this;\n  }\n\n  clampLength(min: number, max: number) {\n    const length = this.length();\n    return this.divideScalar(length || 1).multiplyScalar(\n      clamp(length, min, max)\n    );\n  }\n\n  floor() {\n    this.x = Math.floor(this.x);\n    this.y = Math.floor(this.y);\n    return this;\n  }\n\n  ceil() {\n    this.x = Math.ceil(this.x);\n    this.y = Math.ceil(this.y);\n    return this;\n  }\n\n  round() {\n    this.x = Math.round(this.x);\n    this.y = Math.round(this.y);\n    return this;\n  }\n\n  roundToZero() {\n    this.x = Math.trunc(this.x);\n    this.y = Math.trunc(this.y);\n    return this;\n  }\n\n  negate() {\n    this.x = -this.x;\n    this.y = -this.y;\n    return this;\n  }\n\n  /// 点积、数量积、内积\n  /// 点积的正负号说明2个向量指向同一方向的接近程度\n  /// P.Q = 0  =>  向量P 和 向量Q 互相垂直  =>  向量P 和 向量Q 线性无关\n  /// P.Q = |P| * |Q| * cos(从Q到P的角度差)\n\n  /// P.Q = Q.P\n  /// (aP).Q = a(Q.P)\n  /// P.(Q + R) = P.Q + P.R\n  /// P.P = |P| * |P|\n  /// |P.Q| <= |P| * |Q|\n  dot(v: Vector2) {\n    return this.x * v.x + this.y * v.y;\n  }\n\n  /// 叉积、向量积  =>  新向量垂直于原来两个向量\n  /// 三维向量独有\n  /// 叉积遵循右手法则：右手4指指向 向量P 的方向，手掌掌内指向 向量Q 的方向，则大拇指所指方向就是 叉积 P x Q 的方向\n\n  /// (P x Q).P = (P x Q).Q = 0\n  /// |P x Q| = |P| * |Q| * sin(从Q到P的角度差) = 向量P 和 向量Q 组成的平行四边形的面积\n\n  /// 假设 单位向量i<1,0,0> 指向 x轴正方向，单位向量j<0,1,0> 指向 y轴正方向，单位向量k<0,0,1> 指向 z轴正方向\n  /// 且 i 在 j 之前，j 在 k 之前，k 在 i 之前\n  /// 则\n  /// i x j = k\n  /// j x k = i\n  /// k x i = j\n  /// j x i = -k\n  /// k x j = -i\n  /// i x k = -j\n\n  /// Q x P = -(P x Q)\n  // (aP) x Q = a(P x Q)\n  /// P x (Q + R) = P x Q + P x R\n  /// P x P - O = <0,0,0>\n  /// (P x Q).R = (R x P).Q = (Q x R).P\n  /// P x (Q x R) = P x Q x R = |P| * |P| * Q - (P.Q)P\n  cross(v: Vector2) {\n    return this.x * v.y - this.y * v.x;\n  }\n\n  /// 投影到 v 的向量\n  projectOnVector(v: Vector2) {\n    const denominator = v.lengthSq();\n    if (denominator === 0) {\n      return this.set(0, 0);\n    }\n    const scalar = v.dot(this) / denominator;\n    return this.copy(v).multiplyScalar(scalar);\n  }\n\n  /// 相对于 v 的垂直分量\n  perpendOnVector(v: Vector2) {\n    _v2.copy(this).projectOnVector(v);\n    return this.sub(_v2);\n  }\n\n  /// 模、范数、长度\n  /// |P| >= 0\n  /// |aP| = |a| * |P|\n  /// |P + Q| <= |P| + |Q|\n  length() {\n    return Math.sqrt(this.x * this.x + this.y * this.y);\n  }\n\n  lengthSq() {\n    return this.x * this.x + this.y * this.y;\n  }\n\n  manhattanLength() {\n    return Math.abs(this.x) + Math.abs(this.y);\n  }\n\n  /// 规格化\n  normalize() {\n    return this.divideScalar(this.length() || 1);\n  }\n\n  // computes the angle in radians with respect to the positive x-axis\n  angle() {\n    return Math.atan2(-this.y, -this.x) + Math.PI;\n  }\n\n  angleTo(v: Vector2) {\n    const denominator = Math.sqrt(this.lengthSq() * v.lengthSq());\n    if (denominator === 0) {\n      return Math.PI / 2;\n    }\n    const theta = this.dot(v) / denominator;\n    // clamp, to handle numerical problems\n    return Math.acos(clamp(theta, -1, 1));\n  }\n\n  distanceTo(v: Vector2) {\n    return Math.sqrt(this.distanceToSquared(v));\n  }\n\n  distanceToSquared(v: Vector2) {\n    const dx = this.x - v.x;\n    const dy = this.y - v.y;\n    return dx * dx + dy * dy;\n  }\n\n  manhattanDistanceTo(v: Vector2) {\n    return Math.abs(this.x - v.x) + Math.abs(this.y - v.y);\n  }\n\n  setLength(length: number) {\n    return this.normalize().multiplyScalar(length);\n  }\n\n  lerp(v: Vector2, alpha: number) {\n    this.x += (v.x - this.x) * alpha;\n    this.y += (v.y - this.y) * alpha;\n    return this;\n  }\n\n  lerpVectors(v1: Vector2, v2: Vector2, alpha: number) {\n    this.x = v1.x + (v2.x - v1.x) * alpha;\n    this.y = v1.y + (v2.y - v1.y) * alpha;\n    return this;\n  }\n\n  equals(v: Vector2) {\n    return v.x === this.x && v.y === this.y;\n  }\n\n  fromArray(array: number[], offset = 0) {\n    this.x = array[offset];\n    this.y = array[offset + 1];\n    return this;\n  }\n\n  toArray(array: number[] = [], offset = 0) {\n    array[offset] = this.x;\n    array[offset + 1] = this.y;\n    return array;\n  }\n\n  fromBufferAttribute(attribute: BufferAttribute, index: number) {\n    this.x = attribute.getX(index);\n    this.y = attribute.getY(index);\n    return this;\n  }\n\n  rotateAround(center: Vector2, angle: number) {\n    const c = Math.cos(angle);\n    const s = Math.sin(angle);\n    const x = this.x - center.x;\n    const y = this.y - center.y;\n    this.x = x * c - y * s + center.x;\n    this.y = x * s + y * c + center.y;\n    return this;\n  }\n\n  random() {\n    this.x = Math.random();\n    this.y = Math.random();\n    return this;\n  }\n\n  *[Symbol.iterator]() {\n    yield this.x;\n    yield this.y;\n  }\n}\n\nexport class Vector3 {\n  x = 0;\n  y = 0;\n  z = 0;\n\n  constructor(x = 0, y = 0, z = 0) {\n    this.x = x;\n    this.y = y;\n    this.z = z;\n  }\n\n  set(x = 0, y = 0, z = 0) {\n    this.x = x;\n    this.y = y;\n    this.z = z;\n    return this;\n  }\n\n  setScalar(scalar: number) {\n    this.x = scalar;\n    this.y = scalar;\n    this.z = scalar;\n    return this;\n  }\n\n  setX(x: number) {\n    this.x = x;\n    return this;\n  }\n\n  setY(y: number) {\n    this.y = y;\n    return this;\n  }\n\n  setZ(z: number) {\n    this.z = z;\n    return this;\n  }\n\n  setComponent(index: number, value: number) {\n    switch (index) {\n      case 0:\n        this.x = value;\n        break;\n      case 1:\n        this.y = value;\n        break;\n      case 2:\n        this.z = value;\n        break;\n      default:\n        throw new Error(\"index is out of range: \" + index);\n    }\n    return this;\n  }\n\n  getComponent(index: number) {\n    switch (index) {\n      case 0:\n        return this.x;\n      case 1:\n        return this.y;\n      case 2:\n        return this.z;\n      default:\n        throw new Error(\"index is out of range: \" + index);\n    }\n  }\n\n  clone() {\n    return new Vector3(this.x, this.y, this.z);\n  }\n\n  copy(v: Vector3) {\n    this.x = v.x;\n    this.y = v.y;\n    this.z = v.z;\n    return this;\n  }\n\n  add(v: Vector3) {\n    this.x += v.x;\n    this.y += v.y;\n    this.z += v.z;\n    return this;\n  }\n\n  addScalar(s: number) {\n    this.x += s;\n    this.y += s;\n    this.z += s;\n    return this;\n  }\n\n  addVectors(a: Vector3, b: Vector3) {\n    this.x = a.x + b.x;\n    this.y = a.y + b.y;\n    this.z = a.z + b.z;\n    return this;\n  }\n\n  addScaledVector(v: Vector3, s: number) {\n    this.x += v.x * s;\n    this.y += v.y * s;\n    this.z += v.z * s;\n    return this;\n  }\n\n  sub(v: Vector3) {\n    this.x -= v.x;\n    this.y -= v.y;\n    this.z -= v.z;\n    return this;\n  }\n\n  subScalar(s: number) {\n    this.x -= s;\n    this.y -= s;\n    this.z -= s;\n    return this;\n  }\n\n  subVectors(a: Vector3, b: Vector3) {\n    this.x = a.x - b.x;\n    this.y = a.y - b.y;\n    this.z = a.z - b.z;\n    return this;\n  }\n\n  multiply(v: Vector3) {\n    this.x *= v.x;\n    this.y *= v.y;\n    this.z *= v.z;\n    return this;\n  }\n\n  multiplyScalar(scalar: number) {\n    this.x *= scalar;\n    this.y *= scalar;\n    this.z *= scalar;\n    return this;\n  }\n\n  multiplyVectors(a: Vector3, b: Vector3) {\n    this.x = a.x * b.x;\n    this.y = a.y * b.y;\n    this.z = a.z * b.z;\n    return this;\n  }\n\n  applyEuler(euler: Euler) {\n    return this.applyQuaternion(_quaternion.setFromEuler(euler));\n  }\n\n  applyAxisAngle(axis: Vector3, angle: number) {\n    return this.applyQuaternion(_quaternion.setFromAxisAngle(axis, angle));\n  }\n\n  applyMatrix3(m: Matrix3) {\n    const x = this.x;\n    const y = this.y;\n    const z = this.z;\n    const e = m.value;\n    this.x = e[0] * x + e[3] * y + e[6] * z;\n    this.y = e[1] * x + e[4] * y + e[7] * z;\n    this.z = e[2] * x + e[5] * y + e[8] * z;\n    return this;\n  }\n\n  applyNormalMatrix(m: Matrix3) {\n    return this.applyMatrix3(m).normalize();\n  }\n\n  applyMatrix4(m: Matrix4) {\n    const x = this.x;\n    const y = this.y;\n    const z = this.z;\n    const e = m.value;\n    const w = 1 / (e[3] * x + e[7] * y + e[11] * z + e[15]);\n    this.x = (e[0] * x + e[4] * y + e[8] * z + e[12]) * w;\n    this.y = (e[1] * x + e[5] * y + e[9] * z + e[13]) * w;\n    this.z = (e[2] * x + e[6] * y + e[10] * z + e[14]) * w;\n    return this;\n  }\n\n  applyQuaternion(q: Quaternion) {\n    // quaternion q is assumed to have unit length\n    const vx = this.x;\n    const vy = this.y;\n    const vz = this.z;\n    const qx = q.x;\n    const qy = q.y;\n    const qz = q.z;\n    const qw = q.w;\n    // t = 2 * cross( q.xyz, v );\n    const tx = 2 * (qy * vz - qz * vy);\n    const ty = 2 * (qz * vx - qx * vz);\n    const tz = 2 * (qx * vy - qy * vx);\n    // v + q.w * t + cross( q.xyz, t );\n    this.x = vx + qw * tx + qy * tz - qz * ty;\n    this.y = vy + qw * ty + qz * tx - qx * tz;\n    this.z = vz + qw * tz + qx * ty - qy * tx;\n    return this;\n  }\n\n  // project(camera) {\n  //   return this.applyMatrix4(camera.matrixWorldInverse).applyMatrix4(\n  //     camera.projectionMatrix\n  //   );\n  // }\n\n  // unproject(camera) {\n  //   return this.applyMatrix4(camera.projectionMatrixInverse).applyMatrix4(\n  //     camera.matrixWorld\n  //   );\n  // }\n\n  transformDirection(m: Matrix4) {\n    // input: Matrix4 affine matrix\n    // vector interpreted as a direction\n    const x = this.x;\n    const y = this.y;\n    const z = this.z;\n    const e = m.value;\n    this.x = e[0] * x + e[4] * y + e[8] * z;\n    this.y = e[1] * x + e[5] * y + e[9] * z;\n    this.z = e[2] * x + e[6] * y + e[10] * z;\n    return this.normalize();\n  }\n\n  divide(v: Vector3) {\n    this.x /= v.x;\n    this.y /= v.y;\n    this.z /= v.z;\n    return this;\n  }\n\n  divideScalar(scalar: number) {\n    return this.multiplyScalar(1 / scalar);\n  }\n\n  min(v: Vector3) {\n    this.x = Math.min(this.x, v.x);\n    this.y = Math.min(this.y, v.y);\n    this.z = Math.min(this.z, v.z);\n    return this;\n  }\n\n  max(v: Vector3) {\n    this.x = Math.max(this.x, v.x);\n    this.y = Math.max(this.y, v.y);\n    this.z = Math.max(this.z, v.z);\n    return this;\n  }\n\n  clamp(min: Vector3, max: Vector3) {\n    // assumes min < max, componentwise\n    this.x = clamp(this.x, min.x, max.x);\n    this.y = clamp(this.y, min.y, max.y);\n    this.z = clamp(this.z, min.z, max.z);\n    return this;\n  }\n\n  clampScalar(minVal: number, maxVal: number) {\n    this.x = clamp(this.x, minVal, maxVal);\n    this.y = clamp(this.y, minVal, maxVal);\n    this.z = clamp(this.z, minVal, maxVal);\n    return this;\n  }\n\n  clampLength(min: number, max: number) {\n    const length = this.length();\n    return this.divideScalar(length || 1).multiplyScalar(\n      clamp(length, min, max)\n    );\n  }\n\n  floor() {\n    this.x = Math.floor(this.x);\n    this.y = Math.floor(this.y);\n    this.z = Math.floor(this.z);\n    return this;\n  }\n\n  ceil() {\n    this.x = Math.ceil(this.x);\n    this.y = Math.ceil(this.y);\n    this.z = Math.ceil(this.z);\n    return this;\n  }\n\n  round() {\n    this.x = Math.round(this.x);\n    this.y = Math.round(this.y);\n    this.z = Math.round(this.z);\n    return this;\n  }\n\n  roundToZero() {\n    this.x = Math.trunc(this.x);\n    this.y = Math.trunc(this.y);\n    this.z = Math.trunc(this.z);\n    return this;\n  }\n\n  negate() {\n    this.x = -this.x;\n    this.y = -this.y;\n    this.z = -this.z;\n    return this;\n  }\n\n  dot(v: Vector3) {\n    return this.x * v.x + this.y * v.y + this.z * v.z;\n  }\n\n  lengthSq() {\n    return this.x * this.x + this.y * this.y + this.z * this.z;\n  }\n\n  length() {\n    return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z);\n  }\n\n  manhattanLength() {\n    return Math.abs(this.x) + Math.abs(this.y) + Math.abs(this.z);\n  }\n\n  normalize() {\n    return this.divideScalar(this.length() || 1);\n  }\n\n  setLength(length: number) {\n    return this.normalize().multiplyScalar(length);\n  }\n\n  lerp(v: Vector3, alpha: number) {\n    this.x += (v.x - this.x) * alpha;\n    this.y += (v.y - this.y) * alpha;\n    this.z += (v.z - this.z) * alpha;\n    return this;\n  }\n\n  lerpVectors(v1: Vector3, v2: Vector3, alpha: number) {\n    this.x = v1.x + (v2.x - v1.x) * alpha;\n    this.y = v1.y + (v2.y - v1.y) * alpha;\n    this.z = v1.z + (v2.z - v1.z) * alpha;\n    return this;\n  }\n\n  cross(v: Vector3) {\n    return this.crossVectors(this, v);\n  }\n\n  crossVectors(a: Vector3, b: Vector3) {\n    const ax = a.x;\n    const ay = a.y;\n    const az = a.z;\n    const bx = b.x;\n    const by = b.y;\n    const bz = b.z;\n    this.x = ay * bz - az * by;\n    this.y = az * bx - ax * bz;\n    this.z = ax * by - ay * bx;\n    return this;\n  }\n\n  /// 投影到 v 的向量\n  projectOnVector(v: Vector3) {\n    const denominator = v.lengthSq();\n    if (denominator === 0) {\n      return this.set(0, 0, 0);\n    }\n    const scalar = v.dot(this) / denominator;\n    return this.copy(v).multiplyScalar(scalar);\n  }\n\n  /// 相对于 v 的垂直分量\n  perpendOnVector(v: Vector3) {\n    _v3.copy(this).projectOnVector(v);\n    return this.sub(_v3);\n  }\n\n  projectOnPlane(planeNormal: Vector3) {\n    // _v3.copy(this).projectOnVector(planeNormal);\n    // return this.sub(_v3);\n    return this.perpendOnVector(planeNormal);\n  }\n\n  reflect(normal: Vector3) {\n    // reflect incident vector off plane orthogonal to normal\n    // normal is assumed to have unit length\n    return this.sub(_v3.copy(normal).multiplyScalar(2 * this.dot(normal)));\n  }\n\n  angleTo(v: Vector3) {\n    const denominator = Math.sqrt(this.lengthSq() * v.lengthSq());\n    if (denominator === 0) {\n      return Math.PI / 2;\n    }\n    const theta = this.dot(v) / denominator;\n    // clamp, to handle numerical problems\n    return Math.acos(clamp(theta, -1, 1));\n  }\n\n  distanceTo(v: Vector3) {\n    return Math.sqrt(this.distanceToSquared(v));\n  }\n\n  distanceToSquared(v: Vector3) {\n    const dx = this.x - v.x;\n    const dy = this.y - v.y;\n    const dz = this.z - v.z;\n    return dx * dx + dy * dy + dz * dz;\n  }\n\n  manhattanDistanceTo(v: Vector3) {\n    return (\n      Math.abs(this.x - v.x) + Math.abs(this.y - v.y) + Math.abs(this.z - v.z)\n    );\n  }\n\n  // setFromSpherical(s) {\n  //   return this.setFromSphericalCoords(s.radius, s.phi, s.theta);\n  // }\n\n  // setFromSphericalCoords(radius, phi, theta) {\n  //   const sinPhiRadius = Math.sin(phi) * radius;\n  //   this.x = sinPhiRadius * Math.sin(theta);\n  //   this.y = Math.cos(phi) * radius;\n  //   this.z = sinPhiRadius * Math.cos(theta);\n  //   return this;\n  // }\n\n  // setFromCylindrical(c) {\n  //   return this.setFromCylindricalCoords(c.radius, c.theta, c.y);\n  // }\n\n  // setFromCylindricalCoords(radius, theta, y) {\n  //   this.x = radius * Math.sin(theta);\n  //   this.y = y;\n  //   this.z = radius * Math.cos(theta);\n  //   return this;\n  // }\n\n  setFromMatrix4Position(m: Matrix4) {\n    const e = m.value;\n    this.x = e[12];\n    this.y = e[13];\n    this.z = e[14];\n    return this;\n  }\n\n  setFromMatrix4Scale(m: Matrix4) {\n    const sx = this.setFromMatrix4Column(m, 0).length();\n    const sy = this.setFromMatrix4Column(m, 1).length();\n    const sz = this.setFromMatrix4Column(m, 2).length();\n    this.x = sx;\n    this.y = sy;\n    this.z = sz;\n    return this;\n  }\n\n  setFromMatrix4Column(m: Matrix4, index: number) {\n    return this.fromArray(m.value, index * 4);\n  }\n\n  setFromMatrix3Column(m: Matrix3, index: number) {\n    return this.fromArray(m.value, index * 3);\n  }\n\n  setFromEuler(e: Euler) {\n    this.x = e.x;\n    this.y = e.y;\n    this.z = e.z;\n    return this;\n  }\n\n  // setFromColor(c) {\n  //   this.x = c.r;\n  //   this.y = c.g;\n  //   this.z = c.b;\n  //   return this;\n  // }\n\n  equals(v: Vector3) {\n    return v.x === this.x && v.y === this.y && v.z === this.z;\n  }\n\n  fromArray(array: number[], offset = 0) {\n    this.x = array[offset];\n    this.y = array[offset + 1];\n    this.z = array[offset + 2];\n    return this;\n  }\n\n  toArray(array: number[] = [], offset = 0) {\n    array[offset] = this.x;\n    array[offset + 1] = this.y;\n    array[offset + 2] = this.z;\n    return array;\n  }\n\n  fromBufferAttribute(attribute: BufferAttribute, index: number) {\n    this.x = attribute.getX(index);\n    this.y = attribute.getY(index);\n    this.z = attribute.getZ(index);\n    return this;\n  }\n\n  random() {\n    this.x = Math.random();\n    this.y = Math.random();\n    this.z = Math.random();\n    return this;\n  }\n\n  randomDirection() {\n    // https://mathworld.wolfram.com/SpherePointPicking.html\n    const theta = Math.random() * Math.PI * 2;\n    const u = Math.random() * 2 - 1;\n    const c = Math.sqrt(1 - u * u);\n    this.x = c * Math.cos(theta);\n    this.y = u;\n    this.z = c * Math.sin(theta);\n    return this;\n  }\n\n  *[Symbol.iterator]() {\n    yield this.x;\n    yield this.y;\n    yield this.z;\n  }\n}\n\nexport class Vector4 {\n  x = 0;\n  y = 0;\n  z = 0;\n  w = 1;\n\n  constructor(x = 0, y = 0, z = 0, w = 1) {\n    this.x = x;\n    this.y = y;\n    this.z = z;\n    this.w = w;\n  }\n\n  get width() {\n    return this.z;\n  }\n\n  set width(value) {\n    this.z = value;\n  }\n\n  get height() {\n    return this.w;\n  }\n\n  set height(value) {\n    this.w = value;\n  }\n\n  set(x = 0, y = 0, z = 0, w = 1) {\n    this.x = x;\n    this.y = y;\n    this.z = z;\n    this.w = w;\n    return this;\n  }\n\n  setScalar(scalar: number) {\n    this.x = scalar;\n    this.y = scalar;\n    this.z = scalar;\n    this.w = scalar;\n    return this;\n  }\n\n  setX(x: number) {\n    this.x = x;\n    return this;\n  }\n\n  setY(y: number) {\n    this.y = y;\n    return this;\n  }\n\n  setZ(z: number) {\n    this.z = z;\n    return this;\n  }\n\n  setW(w: number) {\n    this.w = w;\n    return this;\n  }\n\n  setComponent(index: number, value: number) {\n    switch (index) {\n      case 0:\n        this.x = value;\n        break;\n      case 1:\n        this.y = value;\n        break;\n      case 2:\n        this.z = value;\n        break;\n      case 3:\n        this.w = value;\n        break;\n      default:\n        throw new Error(\"index is out of range: \" + index);\n    }\n    return this;\n  }\n\n  getComponent(index: number) {\n    switch (index) {\n      case 0:\n        return this.x;\n      case 1:\n        return this.y;\n      case 2:\n        return this.z;\n      case 3:\n        return this.w;\n      default:\n        throw new Error(\"index is out of range: \" + index);\n    }\n  }\n\n  clone() {\n    return new Vector4(this.x, this.y, this.z, this.w);\n  }\n\n  copy(v: Vector4) {\n    this.x = v.x;\n    this.y = v.y;\n    this.z = v.z;\n    this.w = v.w;\n    return this;\n  }\n\n  add(v: Vector4) {\n    this.x += v.x;\n    this.y += v.y;\n    this.z += v.z;\n    this.w += v.w;\n    return this;\n  }\n\n  addScalar(s: number) {\n    this.x += s;\n    this.y += s;\n    this.z += s;\n    this.w += s;\n    return this;\n  }\n\n  addVectors(a: Vector4, b: Vector4) {\n    this.x = a.x + b.x;\n    this.y = a.y + b.y;\n    this.z = a.z + b.z;\n    this.w = a.w + b.w;\n    return this;\n  }\n\n  addScaledVector(v: Vector4, s: number) {\n    this.x += v.x * s;\n    this.y += v.y * s;\n    this.z += v.z * s;\n    this.w += v.w * s;\n    return this;\n  }\n\n  sub(v: Vector4) {\n    this.x -= v.x;\n    this.y -= v.y;\n    this.z -= v.z;\n    this.w -= v.w;\n    return this;\n  }\n\n  subScalar(s: number) {\n    this.x -= s;\n    this.y -= s;\n    this.z -= s;\n    this.w -= s;\n    return this;\n  }\n\n  subVectors(a: Vector4, b: Vector4) {\n    this.x = a.x - b.x;\n    this.y = a.y - b.y;\n    this.z = a.z - b.z;\n    this.w = a.w - b.w;\n    return this;\n  }\n\n  multiply(v: Vector4) {\n    this.x *= v.x;\n    this.y *= v.y;\n    this.z *= v.z;\n    this.w *= v.w;\n    return this;\n  }\n\n  multiplyScalar(scalar: number) {\n    this.x *= scalar;\n    this.y *= scalar;\n    this.z *= scalar;\n    this.w *= scalar;\n    return this;\n  }\n\n  applyMatrix4(m: Matrix4) {\n    const x = this.x;\n    const y = this.y;\n    const z = this.z;\n    const w = this.w;\n    const e = m.value;\n    this.x = e[0] * x + e[4] * y + e[8] * z + e[12] * w;\n    this.y = e[1] * x + e[5] * y + e[9] * z + e[13] * w;\n    this.z = e[2] * x + e[6] * y + e[10] * z + e[14] * w;\n    this.w = e[3] * x + e[7] * y + e[11] * z + e[15] * w;\n    return this;\n  }\n\n  divide(v: Vector4) {\n    this.x /= v.x;\n    this.y /= v.y;\n    this.z /= v.z;\n    this.w /= v.w;\n    return this;\n  }\n\n  divideScalar(scalar: number) {\n    return this.multiplyScalar(1 / scalar);\n  }\n\n  setAxisAngleFromQuaternion(q: Quaternion) {\n    // http://www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToAngle/index.htm\n    // q is assumed to be normalized\n    this.w = 2 * Math.acos(q.w);\n    const s = Math.sqrt(1 - q.w * q.w);\n    if (s < 0.0001) {\n      this.x = 1;\n      this.y = 0;\n      this.z = 0;\n    } else {\n      this.x = q.x / s;\n      this.y = q.y / s;\n      this.z = q.z / s;\n    }\n    return this;\n  }\n\n  setAxisAngleFromRotationMatrix4(m: Matrix4) {\n    // http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToAngle/index.htm\n    // assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n    let angle, x, y, z; // variables for result\n    const epsilon = 0.01; // margin to allow for rounding errors\n    const epsilon2 = 0.1; // margin to distinguish between 0 and 180 degrees\n    const te = m.value;\n    const m11 = te[0];\n    const m12 = te[4];\n    const m13 = te[8];\n    const m21 = te[1];\n    const m22 = te[5];\n    const m23 = te[9];\n    const m31 = te[2];\n    const m32 = te[6];\n    const m33 = te[10];\n    if (\n      Math.abs(m12 - m21) < epsilon &&\n      Math.abs(m13 - m31) < epsilon &&\n      Math.abs(m23 - m32) < epsilon\n    ) {\n      // singularity found\n      // first check for identity matrix which must have +1 for all terms\n      // in leading diagonal and zero in other terms\n      if (\n        Math.abs(m12 + m21) < epsilon2 &&\n        Math.abs(m13 + m31) < epsilon2 &&\n        Math.abs(m23 + m32) < epsilon2 &&\n        Math.abs(m11 + m22 + m33 - 3) < epsilon2\n      ) {\n        // this singularity is identity matrix so angle = 0\n        this.set(1, 0, 0, 0);\n        return this; // zero angle, arbitrary axis\n      }\n      // otherwise this singularity is angle = 180\n      angle = Math.PI;\n      const xx = (m11 + 1) / 2;\n      const yy = (m22 + 1) / 2;\n      const zz = (m33 + 1) / 2;\n      const xy = (m12 + m21) / 4;\n      const xz = (m13 + m31) / 4;\n      const yz = (m23 + m32) / 4;\n      if (xx > yy && xx > zz) {\n        // m11 is the largest diagonal term\n        if (xx < epsilon) {\n          x = 0;\n          y = 0.707106781;\n          z = 0.707106781;\n        } else {\n          x = Math.sqrt(xx);\n          y = xy / x;\n          z = xz / x;\n        }\n      } else if (yy > zz) {\n        // m22 is the largest diagonal term\n        if (yy < epsilon) {\n          x = 0.707106781;\n          y = 0;\n          z = 0.707106781;\n        } else {\n          y = Math.sqrt(yy);\n          x = xy / y;\n          z = yz / y;\n        }\n      } else {\n        // m33 is the largest diagonal term so base result on this\n        if (zz < epsilon) {\n          x = 0.707106781;\n          y = 0.707106781;\n          z = 0;\n        } else {\n          z = Math.sqrt(zz);\n          x = xz / z;\n          y = yz / z;\n        }\n      }\n      this.set(x, y, z, angle);\n      return this; // return 180 deg rotation\n    }\n    // as we have reached here there are no singularities so we can handle normally\n    let s = Math.sqrt(\n      (m32 - m23) * (m32 - m23) +\n        (m13 - m31) * (m13 - m31) +\n        (m21 - m12) * (m21 - m12)\n    ); // used to normalize\n    if (Math.abs(s) < 0.001) s = 1;\n    // prevent divide by zero, should not happen if matrix is orthogonal and should be\n    // caught by singularity test above, but I've left it in just in case\n    this.x = (m32 - m23) / s;\n    this.y = (m13 - m31) / s;\n    this.z = (m21 - m12) / s;\n    this.w = Math.acos((m11 + m22 + m33 - 1) / 2);\n    return this;\n  }\n\n  setFromMatrix4Position(m: Matrix4) {\n    const e = m.value;\n    this.x = e[12];\n    this.y = e[13];\n    this.z = e[14];\n    this.w = e[15];\n    return this;\n  }\n\n  min(v: Vector4) {\n    this.x = Math.min(this.x, v.x);\n    this.y = Math.min(this.y, v.y);\n    this.z = Math.min(this.z, v.z);\n    this.w = Math.min(this.w, v.w);\n    return this;\n  }\n\n  max(v: Vector4) {\n    this.x = Math.max(this.x, v.x);\n    this.y = Math.max(this.y, v.y);\n    this.z = Math.max(this.z, v.z);\n    this.w = Math.max(this.w, v.w);\n    return this;\n  }\n\n  clamp(min: Vector4, max: Vector4) {\n    // assumes min < max, componentwise\n    this.x = clamp(this.x, min.x, max.x);\n    this.y = clamp(this.y, min.y, max.y);\n    this.z = clamp(this.z, min.z, max.z);\n    this.w = clamp(this.w, min.w, max.w);\n    return this;\n  }\n\n  clampScalar(minVal: number, maxVal: number) {\n    this.x = clamp(this.x, minVal, maxVal);\n    this.y = clamp(this.y, minVal, maxVal);\n    this.z = clamp(this.z, minVal, maxVal);\n    this.w = clamp(this.w, minVal, maxVal);\n    return this;\n  }\n\n  clampLength(min: number, max: number) {\n    const length = this.length();\n    return this.divideScalar(length || 1).multiplyScalar(\n      clamp(length, min, max)\n    );\n  }\n\n  floor() {\n    this.x = Math.floor(this.x);\n    this.y = Math.floor(this.y);\n    this.z = Math.floor(this.z);\n    this.w = Math.floor(this.w);\n    return this;\n  }\n\n  ceil() {\n    this.x = Math.ceil(this.x);\n    this.y = Math.ceil(this.y);\n    this.z = Math.ceil(this.z);\n    this.w = Math.ceil(this.w);\n    return this;\n  }\n\n  round() {\n    this.x = Math.round(this.x);\n    this.y = Math.round(this.y);\n    this.z = Math.round(this.z);\n    this.w = Math.round(this.w);\n    return this;\n  }\n\n  roundToZero() {\n    this.x = Math.trunc(this.x);\n    this.y = Math.trunc(this.y);\n    this.z = Math.trunc(this.z);\n    this.w = Math.trunc(this.w);\n    return this;\n  }\n\n  negate() {\n    this.x = -this.x;\n    this.y = -this.y;\n    this.z = -this.z;\n    this.w = -this.w;\n    return this;\n  }\n\n  dot(v: Vector4) {\n    return this.x * v.x + this.y * v.y + this.z * v.z + this.w * v.w;\n  }\n\n  lengthSq() {\n    return (\n      this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w\n    );\n  }\n\n  length() {\n    return Math.sqrt(\n      this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w\n    );\n  }\n\n  manhattanLength() {\n    return (\n      Math.abs(this.x) + Math.abs(this.y) + Math.abs(this.z) + Math.abs(this.w)\n    );\n  }\n\n  normalize() {\n    return this.divideScalar(this.length() || 1);\n  }\n\n  setLength(length: number) {\n    return this.normalize().multiplyScalar(length);\n  }\n\n  /// 投影到 v 的向量\n  projectOnVector(v: Vector4) {\n    const denominator = v.lengthSq();\n    if (denominator === 0) {\n      return this.set(0, 0, 0, 1);\n    }\n    const scalar = v.dot(this) / denominator;\n    return this.copy(v).multiplyScalar(scalar);\n  }\n\n  // /// 相对于 v 的垂直分量\n  // perpendOnVector(v: Vector4) {\n  //   _v4.copy(this).projectOnVector(v);\n  //   return this.sub(_v4);\n  // }\n\n  lerp(v: Vector4, alpha: number) {\n    this.x += (v.x - this.x) * alpha;\n    this.y += (v.y - this.y) * alpha;\n    this.z += (v.z - this.z) * alpha;\n    this.w += (v.w - this.w) * alpha;\n    return this;\n  }\n\n  lerpVectors(v1: Vector4, v2: Vector4, alpha: number) {\n    this.x = v1.x + (v2.x - v1.x) * alpha;\n    this.y = v1.y + (v2.y - v1.y) * alpha;\n    this.z = v1.z + (v2.z - v1.z) * alpha;\n    this.w = v1.w + (v2.w - v1.w) * alpha;\n    return this;\n  }\n\n  equals(v: Vector4) {\n    return v.x === this.x && v.y === this.y && v.z === this.z && v.w === this.w;\n  }\n\n  fromArray(array: number[], offset = 0) {\n    this.x = array[offset];\n    this.y = array[offset + 1];\n    this.z = array[offset + 2];\n    this.w = array[offset + 3];\n    return this;\n  }\n\n  toArray(array: number[] = [], offset = 0) {\n    array[offset] = this.x;\n    array[offset + 1] = this.y;\n    array[offset + 2] = this.z;\n    array[offset + 3] = this.w;\n    return array;\n  }\n\n  fromBufferAttribute(attribute: BufferAttribute, index: number) {\n    this.x = attribute.getX(index);\n    this.y = attribute.getY(index);\n    this.z = attribute.getZ(index);\n    this.w = attribute.getW(index);\n    return this;\n  }\n\n  random() {\n    this.x = Math.random();\n    this.y = Math.random();\n    this.z = Math.random();\n    this.w = Math.random();\n    return this;\n  }\n\n  *[Symbol.iterator]() {\n    yield this.x;\n    yield this.y;\n    yield this.z;\n    yield this.w;\n  }\n}\n\nconst _v2 = new Vector2();\nconst _v3 = new Vector3();\nconst _v4 = new Vector4();\nconst _quaternion = new Quaternion();\n","// Unpack entities lookup where the numbers are in radix 32 to reduce the size\n// entity mapping courtesy of tinymce\nconst namedEntities = createNamedToNumberedLookup(\n  \"50,nbsp,51,iexcl,52,cent,53,pound,54,curren,55,yen,56,brvbar,57,sect,58,uml,59,copy,\" +\n    \"5a,ordf,5b,laquo,5c,not,5d,shy,5e,reg,5f,macr,5g,deg,5h,plusmn,5i,sup2,5j,sup3,5k,acute,\" +\n    \"5l,micro,5m,para,5n,middot,5o,cedil,5p,sup1,5q,ordm,5r,raquo,5s,frac14,5t,frac12,5u,frac34,\" +\n    \"5v,iquest,60,Agrave,61,Aacute,62,Acirc,63,Atilde,64,Auml,65,Aring,66,AElig,67,Ccedil,\" +\n    \"68,Egrave,69,Eacute,6a,Ecirc,6b,Euml,6c,Igrave,6d,Iacute,6e,Icirc,6f,Iuml,6g,ETH,6h,Ntilde,\" +\n    \"6i,Ograve,6j,Oacute,6k,Ocirc,6l,Otilde,6m,Ouml,6n,times,6o,Oslash,6p,Ugrave,6q,Uacute,\" +\n    \"6r,Ucirc,6s,Uuml,6t,Yacute,6u,THORN,6v,szlig,70,agrave,71,aacute,72,acirc,73,atilde,74,auml,\" +\n    \"75,aring,76,aelig,77,ccedil,78,egrave,79,eacute,7a,ecirc,7b,euml,7c,igrave,7d,iacute,7e,icirc,\" +\n    \"7f,iuml,7g,eth,7h,ntilde,7i,ograve,7j,oacute,7k,ocirc,7l,otilde,7m,ouml,7n,divide,7o,oslash,\" +\n    \"7p,ugrave,7q,uacute,7r,ucirc,7s,uuml,7t,yacute,7u,thorn,7v,yuml,ci,fnof,sh,Alpha,si,Beta,\" +\n    \"sj,Gamma,sk,Delta,sl,Epsilon,sm,Zeta,sn,Eta,so,Theta,sp,Iota,sq,Kappa,sr,Lambda,ss,Mu,\" +\n    \"st,Nu,su,Xi,sv,Omicron,t0,Pi,t1,Rho,t3,Sigma,t4,Tau,t5,Upsilon,t6,Phi,t7,Chi,t8,Psi,\" +\n    \"t9,Omega,th,alpha,ti,beta,tj,gamma,tk,delta,tl,epsilon,tm,zeta,tn,eta,to,theta,tp,iota,\" +\n    \"tq,kappa,tr,lambda,ts,mu,tt,nu,tu,xi,tv,omicron,u0,pi,u1,rho,u2,sigmaf,u3,sigma,u4,tau,\" +\n    \"u5,upsilon,u6,phi,u7,chi,u8,psi,u9,omega,uh,thetasym,ui,upsih,um,piv,812,bull,816,hellip,\" +\n    \"81i,prime,81j,Prime,81u,oline,824,frasl,88o,weierp,88h,image,88s,real,892,trade,89l,alefsym,\" +\n    \"8cg,larr,8ch,uarr,8ci,rarr,8cj,darr,8ck,harr,8dl,crarr,8eg,lArr,8eh,uArr,8ei,rArr,8ej,dArr,\" +\n    \"8ek,hArr,8g0,forall,8g2,part,8g3,exist,8g5,empty,8g7,nabla,8g8,isin,8g9,notin,8gb,ni,8gf,prod,\" +\n    \"8gh,sum,8gi,minus,8gn,lowast,8gq,radic,8gt,prop,8gu,infin,8h0,ang,8h7,and,8h8,or,8h9,cap,8ha,cup,\" +\n    \"8hb,int,8hk,there4,8hs,sim,8i5,cong,8i8,asymp,8j0,ne,8j1,equiv,8j4,le,8j5,ge,8k2,sub,8k3,sup,8k4,\" +\n    \"nsub,8k6,sube,8k7,supe,8kl,oplus,8kn,otimes,8l5,perp,8m5,sdot,8o8,lceil,8o9,rceil,8oa,lfloor,8ob,\" +\n    \"rfloor,8p9,lang,8pa,rang,9ea,loz,9j0,spades,9j3,clubs,9j5,hearts,9j6,diams,ai,OElig,aj,oelig,b0,\" +\n    \"Scaron,b1,scaron,bo,Yuml,m6,circ,ms,tilde,802,ensp,803,emsp,809,thinsp,80c,zwnj,80d,zwj,80e,lrm,\" +\n    \"80f,rlm,80j,ndash,80k,mdash,80o,lsquo,80p,rsquo,80q,sbquo,80s,ldquo,80t,rdquo,80u,bdquo,810,dagger,\" +\n    \"811,Dagger,81g,permil,81p,lsaquo,81q,rsaquo,85c,euro\",\n  32\n);\n\nfunction createNamedToNumberedLookup(itemsString: string, radix = 10) {\n  const lookup = {} as Record<string, string>;\n  const items = itemsString.split(\",\");\n  // Map from named to numbered entities.\n  for (let i = 0; i < items.length; i += 2) {\n    const entity = \"&\" + items[i + 1] + \";\";\n    const base10 = parseInt(items[i], radix);\n    lookup[entity] = \"&#\" + base10 + \";\";\n  }\n  // FF and IE need to create a regex from hex values ie &nbsp; == \\xa0\n  lookup[\"\\\\xa0\"] = \"&#160;\";\n  return lookup;\n}\n\nfunction format(str: string, args: Record<string, string | number>) {\n  const keys = Object.keys(args);\n  for (let i = 0; i < keys.length; i++) {\n    str = str.replace(\n      new RegExp(\"{\" + keys[i] + \"}\", \"gi\"),\n      \"\" + args[keys[i]]\n    );\n  }\n  return str;\n}\n\nfunction randomString(holder: { [x: string]: any }) {\n  let randomstring, i;\n  if (!holder) {\n    throw new Error(\n      \"cannot create a random attribute name for an undefined object\"\n    );\n  }\n  const chars = \"ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz\";\n  randomstring = \"\";\n  do {\n    randomstring = \"\";\n    for (i = 0; i < 12; i++) {\n      randomstring += chars[Math.floor(Math.random() * chars.length)];\n    }\n  } while (holder[randomstring]);\n  return randomstring;\n}\n\n// helper function to map canvas-textAlign to svg-textAnchor\nfunction getTextAnchor(textAlign: string) {\n  // TODO: support rtl languages\n  const mapping = {\n    left: \"start\",\n    right: \"end\",\n    center: \"middle\",\n    start: \"start\",\n    end: \"end\"\n  } as Record<string, string>;\n  return mapping[textAlign] || mapping.start;\n}\n\n// helper function to map canvas-textBaseline to svg-dominantBaseline\nfunction getDominantBaseline(textBaseline: string) {\n  // INFO: not supported in all browsers\n  const mapping = {\n    alphabetic: \"alphabetic\",\n    hanging: \"hanging\",\n    top: \"text-before-edge\",\n    bottom: \"text-after-edge\",\n    middle: \"central\"\n  } as Record<string, string>;\n  return mapping[textBaseline] || mapping.alphabetic;\n}\n\n// Some basic mappings for attributes and default values.\nconst STYLES: Record<\n  string,\n  {\n    svgAttr?: string; // corresponding svg attribute\n    canvas?: string | number | string[] | number[]; // canvas default\n    svg?: string | number | null; // svg default\n    apply?: string; // apply on stroke() or fill()\n  }\n> = {\n  strokeStyle: {\n    svgAttr: \"stroke\",\n    canvas: \"#000000\",\n    svg: \"none\",\n    apply: \"stroke\"\n  },\n  fillStyle: {\n    svgAttr: \"fill\",\n    canvas: \"#000000\",\n    svg: null, // svg default is black, but we need to special case this to handle canvas stroke without fill\n    apply: \"fill\"\n  },\n  lineCap: {\n    svgAttr: \"stroke-linecap\",\n    canvas: \"butt\",\n    svg: \"butt\",\n    apply: \"stroke\"\n  },\n  lineJoin: {\n    svgAttr: \"stroke-linejoin\",\n    canvas: \"miter\",\n    svg: \"miter\",\n    apply: \"stroke\"\n  },\n  miterLimit: {\n    svgAttr: \"stroke-miterlimit\",\n    canvas: 10,\n    svg: 4,\n    apply: \"stroke\"\n  },\n  lineWidth: {\n    svgAttr: \"stroke-width\",\n    canvas: 1,\n    svg: 1,\n    apply: \"stroke\"\n  },\n  globalAlpha: {\n    svgAttr: \"opacity\",\n    canvas: 1,\n    svg: 1,\n    apply: \"fill stroke\"\n  },\n  font: {\n    // font converts to multiple svg attributes, there is custom logic for this\n    canvas: \"10px sans-serif\"\n  },\n  shadowColor: {\n    canvas: \"#000000\"\n  },\n  shadowOffsetX: {\n    canvas: 0\n  },\n  shadowOffsetY: {\n    canvas: 0\n  },\n  shadowBlur: {\n    canvas: 0\n  },\n  textAlign: {\n    canvas: \"start\"\n  },\n  textBaseline: {\n    canvas: \"alphabetic\"\n  },\n  lineDash: {\n    svgAttr: \"stroke-dasharray\",\n    canvas: [],\n    svg: null,\n    apply: \"stroke\"\n  },\n  lineDashOffset: {\n    svgAttr: \"stroke-dashoffset\",\n    canvas: 0,\n    svg: 0,\n    apply: \"stroke\"\n  }\n};\n\nexport class CustomCanvasGradient {\n  __root: SVGElement;\n  __ctx: CustomCanvasContext;\n  constructor(gradientNode: SVGElement, ctx: CustomCanvasContext) {\n    this.__root = gradientNode;\n    this.__ctx = ctx;\n  }\n\n  /**\n   * Adds a color stop to the gradient root\n   */\n  addColorStop(offset: number, color: string) {\n    const stop = this.__ctx.__createElement(\"stop\");\n    stop.setAttribute(\"offset\", \"\" + offset);\n    if (color.indexOf(\"rgba\") !== -1) {\n      // separate alpha value, since webkit can't handle it\n      const regex =\n        /rgba\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d?\\.?\\d*)\\s*\\)/gi;\n      const matches = regex.exec(color);\n      if (matches) {\n        stop.setAttribute(\n          \"stop-color\",\n          format(\"rgb({r},{g},{b})\", {\n            r: matches[1],\n            g: matches[2],\n            b: matches[3]\n          })\n        );\n        stop.setAttribute(\"stop-opacity\", matches[4]);\n      }\n    } else {\n      stop.setAttribute(\"stop-color\", color);\n    }\n    this.__root.appendChild(stop);\n  }\n}\n\nexport class CustomCanvasPattern {\n  __root: SVGElement;\n  __ctx: CustomCanvasContext;\n  constructor(pattern: SVGElement, ctx: CustomCanvasContext) {\n    this.__root = pattern;\n    this.__ctx = ctx;\n  }\n}\n\n/**\n * The mock canvas context\n */\nexport class CustomCanvasContext {\n  [index: keyof typeof STYLES]: any;\n\n  __document: Document = document;\n  __canvas: HTMLCanvasElement;\n  __ctx: CanvasRenderingContext2D;\n  width: number;\n  height: number;\n  __styleStack: Record<string, any>[];\n  __groupStack: SVGElement[];\n  __rootSVG: SVGElement;\n  __ids: Record<string, string>;\n  __SVGdefs: SVGDefsElement;\n  __currentElement: SVGElement;\n  __currentElementsToStyle: {\n    element: SVGElement;\n    children: SVGElement[];\n  } | null = null;\n\n  constructor({\n    canvas,\n    width = 500,\n    height = 500\n  }: {\n    canvas?: HTMLCanvasElement;\n    width?: number;\n    height?: number;\n  }) {\n    if (canvas) {\n      this.__canvas = canvas;\n      this.__ctx = canvas.getContext(\"2d\") as CanvasRenderingContext2D;\n      this.width = canvas.width;\n      this.height = canvas.height;\n    } else {\n      this.__canvas = this.__document.createElement(\"canvas\");\n      this.__ctx = this.__canvas.getContext(\"2d\") as CanvasRenderingContext2D;\n      this.width = width;\n      this.height = height;\n    }\n\n    this.__setDefaultStyles();\n    this.__styleStack = [this.__getStyleState()];\n    this.__groupStack = [];\n\n    this.__rootSVG = this.__document.createElementNS(\n      \"http://www.w3.org/2000/svg\",\n      \"svg\"\n    );\n    this.__rootSVG.setAttribute(\"version\", \"1.1\");\n    this.__rootSVG.setAttribute(\"xmlns\", \"http://www.w3.org/2000/svg\");\n    this.__rootSVG.setAttributeNS(\n      \"http://www.w3.org/2000/xmlns/\",\n      \"xmlns:xlink\",\n      \"http://www.w3.org/1999/xlink\"\n    );\n    this.__rootSVG.setAttribute(\"width\", \"\" + this.width);\n    this.__rootSVG.setAttribute(\"height\", \"\" + this.height);\n\n    // make sure we don't generate the same ids in defs\n    this.__ids = {};\n\n    // defs tag\n    this.__SVGdefs = this.__document.createElementNS(\n      \"http://www.w3.org/2000/svg\",\n      \"defs\"\n    );\n    this.__rootSVG.appendChild(this.__SVGdefs);\n\n    // also add a group child. the svg element can't use the transform attribute\n    this.__currentElement = this.__document.createElementNS(\n      \"http://www.w3.org/2000/svg\",\n      \"g\"\n    );\n    this.__rootSVG.appendChild(this.__currentElement);\n  }\n\n  /**\n   * Applies default canvas styles to the context\n   */\n  __setDefaultStyles() {\n    // default 2d canvas context properties see: http://www.w3.org/TR/2dcontext/\n    const keys = Object.keys(STYLES);\n    for (let i = 0, length = keys.length; i < length; i++) {\n      const key = keys[i];\n      this[key] = STYLES[key].canvas;\n    }\n  }\n\n  /**\n   * Gets the current style state\n   */\n  __getStyleState() {\n    const styleState: Record<string, any> = {};\n    const keys = Object.keys(STYLES);\n    for (let i = 0, length = keys.length; i < length; i++) {\n      const key = keys[i];\n      styleState[key] = this[key];\n    }\n    return styleState;\n  }\n\n  /**\n   * Applies styles on restore\n   */\n  __applyStyleState(styleState: Record<string, any>) {\n    const keys = Object.keys(styleState);\n    for (let i = 0, length = keys.length; i < length; i++) {\n      const key = keys[i];\n      this[key] = styleState[key];\n    }\n  }\n\n  /**\n   * Creates the specified svg element\n   */\n  __createElement(\n    elementName: string,\n    properties: Record<string, any> = {},\n    resetFill = false\n  ) {\n    const element = this.__document.createElementNS(\n      \"http://www.w3.org/2000/svg\",\n      elementName\n    );\n    const keys = Object.keys(properties);\n    if (resetFill) {\n      // if fill or stroke is not specified, the svg element should not display. By default SVG's fill is black.\n      element.setAttribute(\"fill\", \"none\");\n      element.setAttribute(\"stroke\", \"none\");\n    }\n    for (let i = 0; i < keys.length; i++) {\n      const key = keys[i];\n      element.setAttribute(key, properties[key]);\n    }\n    return element;\n  }\n\n  /**\n   * Apples the current styles to the current SVG element. On \"CustomCanvasContext.fill\" or \"CustomCanvasContext.stroke\"\n   */\n  __applyStyleToCurrentElement(type: \"fill\" | \"stroke\") {\n    let currentElement = this.__currentElement;\n    const currentStyleGroup = this.__currentElementsToStyle;\n    if (currentStyleGroup) {\n      currentElement.setAttribute(type, \"\");\n      currentElement = currentStyleGroup.element;\n      currentStyleGroup.children.forEach((node: SVGElement) => {\n        node.setAttribute(type, \"\");\n      });\n    }\n\n    const keys = Object.keys(STYLES);\n    for (let i = 0; i < keys.length; i++) {\n      const style = STYLES[keys[i]];\n      const value = this[keys[i]];\n      if (style.apply) {\n        if (value instanceof CustomCanvasPattern) {\n          if (value.__ctx) {\n            // copy over defs\n            while (value.__ctx.__SVGdefs.childNodes.length) {\n              const id = (\n                value.__ctx.__SVGdefs.childNodes[0] as SVGElement\n              ).getAttribute(\"id\") as string;\n              this.__ids[id] = id;\n              this.__SVGdefs.appendChild(value.__ctx.__SVGdefs.childNodes[0]);\n            }\n          }\n          currentElement.setAttribute(\n            style.apply,\n            format(\"url(#{id})\", {\n              id: value.__root.getAttribute(\"id\") as string\n            })\n          );\n        } else if (value instanceof CustomCanvasGradient) {\n          currentElement.setAttribute(\n            style.apply,\n            format(\"url(#{id})\", {\n              id: value.__root.getAttribute(\"id\") as string\n            })\n          );\n        } else if (style.apply.indexOf(type) !== -1 && style.svg !== value) {\n          if (\n            (style.svgAttr === \"stroke\" || style.svgAttr === \"fill\") &&\n            value.indexOf(\"rgba\") !== -1\n          ) {\n            // separate alpha value, since illustrator can't handle it\n            const regex =\n              /rgba\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d?\\.?\\d*)\\s*\\)/gi;\n            const matches = regex.exec(value);\n            if (matches) {\n              currentElement.setAttribute(\n                style.svgAttr,\n                format(\"rgb({r},{g},{b})\", {\n                  r: matches[1],\n                  g: matches[2],\n                  b: matches[3]\n                })\n              );\n              // should take globalAlpha here\n              let opacity = parseFloat(matches[4]);\n              const globalAlpha = this.globalAlpha;\n              if (globalAlpha != null) {\n                opacity *= globalAlpha;\n              }\n              currentElement.setAttribute(\n                style.svgAttr + \"-opacity\",\n                \"\" + opacity\n              );\n            }\n          } else {\n            let attr = style.svgAttr;\n            if (keys[i] === \"globalAlpha\") {\n              attr = type + \"-\" + style.svgAttr;\n              if (currentElement.getAttribute(attr)) {\n                // fill-opacity or stroke-opacity has already been set by stroke or fill.\n                continue;\n              }\n            }\n            //otherwise only update attribute if right type, and not svg default\n            if (attr) currentElement.setAttribute(attr, value);\n          }\n        }\n      }\n    }\n  }\n\n  /**\n   * Will return the closest group or svg node. May return the current element.\n   */\n  __closestGroupOrSvg(node?: SVGElement | null): SVGElement {\n    node = node || this.__currentElement;\n    if (node.nodeName === \"g\" || node.nodeName === \"svg\") {\n      return node;\n    } else {\n      return this.__closestGroupOrSvg(node.parentNode as unknown as SVGElement);\n    }\n  }\n\n  /**\n   * Returns the serialized value of the svg so far\n   * @param fixNamedEntities - Standalone SVG doesn't support named entities, which document.createTextNode encodes.\n   *                           If true, we attempt to find all named entities and encode it as a numeric entity.\n   * @return serialized svg\n   */\n  getSerializedSvg(fixNamedEntities: boolean) {\n    let serialized = new XMLSerializer().serializeToString(this.__rootSVG);\n\n    // IE search for a duplicate xmnls because they didn't implement setAttributeNS correctly\n    const xmlns =\n      /xmlns=\"http:\\/\\/www\\.w3\\.org\\/2000\\/svg\".+xmlns=\"http:\\/\\/www\\.w3\\.org\\/2000\\/svg/gi;\n    if (xmlns.test(serialized)) {\n      serialized = serialized.replace(\n        'xmlns=\"http://www.w3.org/2000/svg',\n        'xmlns:xlink=\"http://www.w3.org/1999/xlink'\n      );\n    }\n\n    if (fixNamedEntities) {\n      const keys = Object.keys(namedEntities);\n      //loop over each named entity and replace with the proper equivalent.\n      for (let i = 0, length = keys.length; i < length; i++) {\n        const key = keys[i];\n        const value = namedEntities[key];\n        const regexp = new RegExp(key, \"gi\");\n        if (regexp.test(serialized)) {\n          serialized = serialized.replace(regexp, value);\n        }\n      }\n    }\n\n    return serialized;\n  }\n\n  /**\n   * Returns the root svg\n   */\n  getSvg() {\n    return this.__rootSVG;\n  }\n\n  /**\n   * Will generate a group tag\n   */\n  save() {\n    const group = this.__createElement(\"g\");\n    const parent = this.__closestGroupOrSvg();\n    this.__groupStack.push(parent);\n    parent.appendChild(group);\n    this.__currentElement = group;\n    this.__styleStack.push(this.__getStyleState());\n  }\n\n  /**\n   * Sets current element to parent, or just root if already root\n   */\n  restore() {\n    this.__currentElementsToStyle = null;\n    const currentElement = this.__groupStack.pop();\n    // Clearing canvas will make the poped group invalid, currentElement is set to the root group node.\n    if (!currentElement) {\n      this.__currentElement = this.__rootSVG\n        .childNodes[1] as unknown as SVGElement;\n    } else {\n      this.__currentElement = currentElement;\n    }\n    const state = this.__styleStack.pop();\n    if (state) {\n      this.__applyStyleState(state);\n    }\n  }\n\n  /**\n   * Helper method to add transform\n   */\n  __addTransform(t: string) {\n    // if the current element has siblings, add another group\n    const parent = this.__closestGroupOrSvg();\n    if (parent.childNodes.length > 0) {\n      if (this.__currentElement.nodeName === \"path\") {\n        if (!this.__currentElementsToStyle)\n          this.__currentElementsToStyle = { element: parent, children: [] };\n        this.__currentElementsToStyle.children.push(this.__currentElement);\n        this.__applyCurrentDefaultPath();\n      }\n      const group = this.__createElement(\"g\");\n      parent.appendChild(group);\n      this.__currentElement = group;\n    }\n\n    let transform = this.__currentElement.getAttribute(\"transform\");\n    if (transform) {\n      transform += \" \";\n    } else {\n      transform = \"\";\n    }\n    transform += t;\n    this.__currentElement.setAttribute(\"transform\", transform);\n  }\n\n  /**\n   *  scales the current element\n   */\n  scale(x: number, y?: number) {\n    if (y === undefined) {\n      y = x;\n    }\n    this.__addTransform(format(\"scale({x},{y})\", { x: x, y: y }));\n  }\n\n  /**\n   * rotates the current element\n   */\n  rotate(angle: number) {\n    const degrees = (angle * 180) / Math.PI;\n    this.__addTransform(\n      format(\"rotate({angle},{cx},{cy})\", {\n        angle: degrees,\n        cx: 0,\n        cy: 0\n      })\n    );\n  }\n\n  /**\n   * translates the current element\n   */\n  translate(x: number, y: number) {\n    this.__addTransform(format(\"translate({x},{y})\", { x: x, y: y }));\n  }\n\n  /**\n   * applies a transform to the current element\n   */\n  transform(a: number, b: number, c: number, d: number, e: number, f: number) {\n    this.__addTransform(\n      format(\"matrix({a},{b},{c},{d},{e},{f})\", {\n        a: a,\n        b: b,\n        c: c,\n        d: d,\n        e: e,\n        f: f\n      })\n    );\n  }\n\n  /**\n   * Create a new Path Element\n   */\n  beginPath() {\n    // Note that there is only one current default path, it is not part of the drawing state.\n    // See also: https://html.spec.whatwg.org/multipage/scripting.html#current-default-path\n    this.__currentDefaultPath = \"\";\n    this.__currentPosition = {};\n\n    const path = this.__createElement(\"path\", {}, true);\n    const parent = this.__closestGroupOrSvg();\n    parent.appendChild(path);\n    this.__currentElement = path;\n  }\n\n  /**\n   * Helper function to apply currentDefaultPath to current path element\n   */\n  __applyCurrentDefaultPath() {\n    const currentElement = this.__currentElement;\n    if (currentElement.nodeName === \"path\") {\n      currentElement.setAttribute(\"d\", this.__currentDefaultPath);\n    } else {\n      // console.error(\n      //   \"Attempted to apply path command to node\",\n      //   currentElement.nodeName\n      // );\n    }\n  }\n\n  /**\n   * Helper function to add path command\n   */\n  __addPathCommand(command: string) {\n    this.__currentDefaultPath += \" \";\n    this.__currentDefaultPath += command;\n  }\n\n  /**\n   * Adds the move command to the current path element,\n   * if the currentPathElement is not empty create a new path element\n   */\n  moveTo(x: number, y: number) {\n    if (this.__currentElement.nodeName !== \"path\") {\n      this.beginPath();\n    }\n\n    // creates a new subpath with the given point\n    this.__currentPosition = { x: x, y: y };\n    this.__addPathCommand(format(\"M {x} {y}\", this.__currentPosition));\n  }\n\n  /**\n   * Closes the current path\n   */\n  closePath() {\n    if (this.__currentDefaultPath) {\n      this.__addPathCommand(\"Z\");\n    }\n  }\n\n  /**\n   * Adds a line to command\n   */\n  lineTo(x: number, y: number) {\n    this.__currentPosition = { x: x, y: y };\n    if (this.__currentDefaultPath.indexOf(\"M\") > -1) {\n      this.__addPathCommand(format(\"L {x} {y}\", this.__currentPosition));\n    } else {\n      this.__addPathCommand(format(\"M {x} {y}\", this.__currentPosition));\n    }\n  }\n\n  /**\n   * Add a bezier command\n   */\n  bezierCurveTo(\n    cp1x: number,\n    cp1y: number,\n    cp2x: number,\n    cp2y: number,\n    x: number,\n    y: number\n  ) {\n    this.__currentPosition = { x: x, y: y };\n    this.__addPathCommand(\n      format(\"C {cp1x} {cp1y} {cp2x} {cp2y} {x} {y}\", {\n        cp1x: cp1x,\n        cp1y: cp1y,\n        cp2x: cp2x,\n        cp2y: cp2y,\n        x: x,\n        y: y\n      })\n    );\n  }\n\n  /**\n   * Adds a quadratic curve to command\n   */\n  quadraticCurveTo(cpx: number, cpy: number, x: number, y: number) {\n    this.__currentPosition = { x: x, y: y };\n    this.__addPathCommand(\n      format(\"Q {cpx} {cpy} {x} {y}\", { cpx: cpx, cpy: cpy, x: x, y: y })\n    );\n  }\n\n  /**\n   * Return a new normalized vector of given vector\n   */\n  normalize(vector: [number, number]) {\n    const len = Math.sqrt(vector[0] * vector[0] + vector[1] * vector[1]);\n    return [vector[0] / len, vector[1] / len];\n  }\n\n  /**\n   * Adds the arcTo to the current path\n   *\n   * @see http://www.w3.org/TR/2015/WD-2dcontext-20150514/#dom-context-2d-arcto\n   */\n  arcTo(x1: number, y1: number, x2: number, y2: number, radius: number) {\n    // Let the point (x0, y0) be the last point in the subpath.\n    const x0 = this.__currentPosition && this.__currentPosition.x;\n    const y0 = this.__currentPosition && this.__currentPosition.y;\n\n    // First ensure there is a subpath for (x1, y1).\n    if (typeof x0 == \"undefined\" || typeof y0 == \"undefined\") {\n      return;\n    }\n\n    // Negative values for radius must cause the implementation to throw an IndexSizeError exception.\n    if (radius < 0) {\n      throw new Error(\n        \"IndexSizeError: The radius provided (\" + radius + \") is negative.\"\n      );\n    }\n\n    // If the point (x0, y0) is equal to the point (x1, y1),\n    // or if the point (x1, y1) is equal to the point (x2, y2),\n    // or if the radius radius is zero,\n    // then the method must add the point (x1, y1) to the subpath,\n    // and connect that point to the previous point (x0, y0) by a straight line.\n    if ((x0 === x1 && y0 === y1) || (x1 === x2 && y1 === y2) || radius === 0) {\n      this.lineTo(x1, y1);\n      return;\n    }\n\n    // Otherwise, if the points (x0, y0), (x1, y1), and (x2, y2) all lie on a single straight line,\n    // then the method must add the point (x1, y1) to the subpath,\n    // and connect that point to the previous point (x0, y0) by a straight line.\n    const unit_vec_p1_p0 = this.normalize([x0 - x1, y0 - y1]);\n    const unit_vec_p1_p2 = this.normalize([x2 - x1, y2 - y1]);\n    if (\n      unit_vec_p1_p0[0] * unit_vec_p1_p2[1] ===\n      unit_vec_p1_p0[1] * unit_vec_p1_p2[0]\n    ) {\n      this.lineTo(x1, y1);\n      return;\n    }\n\n    // Otherwise, let The Arc be the shortest arc given by circumference of the circle that has radius radius,\n    // and that has one point tangent to the half-infinite line that crosses the point (x0, y0) and ends at the point (x1, y1),\n    // and that has a different point tangent to the half-infinite line that ends at the point (x1, y1), and crosses the point (x2, y2).\n    // The points at which this circle touches these two lines are called the start and end tangent points respectively.\n\n    // note that both vectors are unit vectors, so the length is 1\n    const cos =\n      unit_vec_p1_p0[0] * unit_vec_p1_p2[0] +\n      unit_vec_p1_p0[1] * unit_vec_p1_p2[1];\n    const theta = Math.acos(Math.abs(cos));\n\n    // Calculate origin\n    const unit_vec_p1_origin = this.normalize([\n      unit_vec_p1_p0[0] + unit_vec_p1_p2[0],\n      unit_vec_p1_p0[1] + unit_vec_p1_p2[1]\n    ]);\n    const len_p1_origin = radius / Math.sin(theta / 2);\n    const x = x1 + len_p1_origin * unit_vec_p1_origin[0];\n    const y = y1 + len_p1_origin * unit_vec_p1_origin[1];\n\n    // Calculate start angle and end angle\n    // rotate 90deg clockwise (note that y axis points to its down)\n    const unit_vec_origin_start_tangent = [\n      -unit_vec_p1_p0[1],\n      unit_vec_p1_p0[0]\n    ];\n    // rotate 90deg counter clockwise (note that y axis points to its down)\n    const unit_vec_origin_end_tangent = [unit_vec_p1_p2[1], -unit_vec_p1_p2[0]];\n    const getAngle = function (vector: number[]) {\n      // get angle (clockwise) between vector and (1, 0)\n      const x = vector[0];\n      const y = vector[1];\n      if (y >= 0) {\n        // note that y axis points to its down\n        return Math.acos(x);\n      } else {\n        return -Math.acos(x);\n      }\n    };\n    const startAngle = getAngle(unit_vec_origin_start_tangent);\n    const endAngle = getAngle(unit_vec_origin_end_tangent);\n\n    // Connect the point (x0, y0) to the start tangent point by a straight line\n    this.lineTo(\n      x + unit_vec_origin_start_tangent[0] * radius,\n      y + unit_vec_origin_start_tangent[1] * radius\n    );\n\n    // Connect the start tangent point to the end tangent point by arc\n    // and adding the end tangent point to the subpath.\n    this.arc(x, y, radius, startAngle, endAngle);\n  }\n\n  /**\n   * Sets the stroke property on the current element\n   */\n  stroke() {\n    if (this.__currentElement.nodeName === \"path\") {\n      this.__currentElement.setAttribute(\"paint-order\", \"fill stroke markers\");\n    }\n    this.__applyCurrentDefaultPath();\n    this.__applyStyleToCurrentElement(\"stroke\");\n  }\n\n  /**\n   * Sets fill properties on the current element\n   */\n  fill() {\n    if (this.__currentElement.nodeName === \"path\") {\n      this.__currentElement.setAttribute(\"paint-order\", \"stroke fill markers\");\n    }\n    this.__applyCurrentDefaultPath();\n    this.__applyStyleToCurrentElement(\"fill\");\n  }\n\n  /**\n   *  Adds a rectangle to the path.\n   */\n  rect(x: number, y: number, width: number, height: number) {\n    if (this.__currentElement.nodeName !== \"path\") {\n      this.beginPath();\n    }\n    this.moveTo(x, y);\n    this.lineTo(x + width, y);\n    this.lineTo(x + width, y + height);\n    this.lineTo(x, y + height);\n    this.lineTo(x, y);\n    this.closePath();\n  }\n\n  /**\n   * adds a rectangle element\n   */\n  fillRect(x: number, y: number, width: number, height: number) {\n    const rect = this.__createElement(\n      \"rect\",\n      {\n        x: x,\n        y: y,\n        width: width,\n        height: height\n      },\n      true\n    );\n    const parent = this.__closestGroupOrSvg();\n    parent.appendChild(rect);\n    this.__currentElement = rect;\n    this.__applyStyleToCurrentElement(\"fill\");\n  }\n\n  /**\n   * Draws a rectangle with no fill\n   */\n  strokeRect(x: number, y: number, width: number, height: number) {\n    const rect = this.__createElement(\n      \"rect\",\n      {\n        x: x,\n        y: y,\n        width: width,\n        height: height\n      },\n      true\n    );\n    const parent = this.__closestGroupOrSvg();\n    parent.appendChild(rect);\n    this.__currentElement = rect;\n    this.__applyStyleToCurrentElement(\"stroke\");\n  }\n\n  /**\n   * Clear entire canvas:\n   * 1. save current transforms\n   * 2. remove all the childNodes of the root g element\n   */\n  __clearCanvas() {\n    const current = this.__closestGroupOrSvg();\n    const transform = current.getAttribute(\"transform\");\n    const rootGroup = this.__rootSVG.childNodes[1] as SVGElement;\n    const childNodes = rootGroup.childNodes;\n    for (let i = childNodes.length - 1; i >= 0; i--) {\n      if (childNodes[i]) {\n        rootGroup.removeChild(childNodes[i]);\n      }\n    }\n    this.__currentElement = rootGroup;\n    // reset __groupStack as all the child group nodes are all removed.\n    this.__groupStack = [];\n    if (transform) {\n      this.__addTransform(transform);\n    }\n  }\n\n  /**\n   * \"Clears\" a canvas by just drawing a white rectangle in the current group.\n   */\n  clearRect(x: number, y: number, width: number, height: number) {\n    // clear entire canvas\n    if (x === 0 && y === 0 && width === this.width && height === this.height) {\n      this.__clearCanvas();\n      return;\n    }\n    const parent = this.__closestGroupOrSvg();\n    const rect = this.__createElement(\n      \"rect\",\n      {\n        x: x,\n        y: y,\n        width: width,\n        height: height,\n        fill: \"#FFFFFF\"\n      },\n      true\n    );\n    parent.appendChild(rect);\n  }\n\n  /**\n   * Adds a linear gradient to a defs tag.\n   * Returns a canvas gradient object that has a reference to it's parent def\n   */\n  createLinearGradient(x1: number, y1: number, x2: number, y2: number) {\n    const grad = this.__createElement(\n      \"linearGradient\",\n      {\n        id: randomString(this.__ids),\n        x1: x1 + \"px\",\n        x2: x2 + \"px\",\n        y1: y1 + \"px\",\n        y2: y2 + \"px\",\n        gradientUnits: \"userSpaceOnUse\"\n      },\n      false\n    );\n    this.__SVGdefs.appendChild(grad);\n    return new CustomCanvasGradient(grad as unknown as SVGElement, this);\n  }\n\n  /**\n   * Adds a radial gradient to a defs tag.\n   * Returns a canvas gradient object that has a reference to it's parent def\n   */\n  createRadialGradient(\n    x0: number,\n    y0: number,\n    r0: number,\n    x1: number,\n    y1: number,\n    r1: number\n  ) {\n    const grad = this.__createElement(\n      \"radialGradient\",\n      {\n        id: randomString(this.__ids),\n        cx: x1 + \"px\",\n        cy: y1 + \"px\",\n        r: r1 + \"px\",\n        fx: x0 + \"px\",\n        fy: y0 + \"px\",\n        gradientUnits: \"userSpaceOnUse\"\n      },\n      false\n    );\n    this.__SVGdefs.appendChild(grad);\n    return new CustomCanvasGradient(grad as unknown as SVGElement, this);\n  }\n\n  /**\n   * Parses the font string and returns svg mapping\n   */\n  __parseFont() {\n    const regex =\n      /^\\s*(?=(?:(?:[-a-z]+\\s*){0,2}(italic|oblique))?)(?=(?:(?:[-a-z]+\\s*){0,2}(small-caps))?)(?=(?:(?:[-a-z]+\\s*){0,2}(bold(?:er)?|lighter|[1-9]00))?)(?:(?:normal|\\1|\\2|\\3)\\s*){0,3}((?:xx?-)?(?:small|large)|medium|smaller|larger|[.\\d]+(?:%|in|[cem]m|ex|p[CustomCanvasContext]))(?:\\s*\\/\\s*(normal|[.\\d]+(?:%|in|[cem]m|ex|p[CustomCanvasContext])))?\\s*([-,'\"\\sa-z0-9]+?)\\s*$/i;\n    const fontPart = regex.exec(this.font) as RegExpExecArray;\n    const data = {\n      style: fontPart[1] || \"normal\",\n      size: fontPart[4] || \"10px\",\n      family: fontPart[6] || \"sans-serif\",\n      weight: fontPart[3] || \"normal\",\n      decoration: fontPart[2] || \"normal\",\n      href: null\n    };\n\n    //canvas doesn't support underline natively, but we can pass this attribute\n    if (this.__fontUnderline === \"underline\") {\n      data.decoration = \"underline\";\n    }\n\n    //canvas also doesn't support linking, but we can pass this as well\n    if (this.__fontHref) {\n      data.href = this.__fontHref;\n    }\n\n    return data;\n  }\n\n  /**\n   * Helper to link text fragments\n   */\n  __wrapTextLink(font: { href: string | null }, element: HTMLElement) {\n    if (font.href) {\n      const a = this.__createElement(\"a\");\n      a.setAttributeNS(\"http://www.w3.org/1999/xlink\", \"xlink:href\", font.href);\n      a.appendChild(element);\n      return a;\n    }\n    return element;\n  }\n\n  /**\n   * Fills or strokes text\n   * @param text\n   * @param x\n   * @param y\n   * @param action - stroke or fill\n   */\n  __applyText(text: string, x: number, y: number, action: \"stroke\" | \"fill\") {\n    const font = this.__parseFont(),\n      parent = this.__closestGroupOrSvg(),\n      textElement = this.__createElement(\n        \"text\",\n        {\n          \"font-family\": font.family,\n          \"font-size\": font.size,\n          \"font-style\": font.style,\n          \"font-weight\": font.weight,\n          \"text-decoration\": font.decoration,\n          x: x,\n          y: y,\n          \"text-anchor\": getTextAnchor(this.textAlign),\n          \"dominant-baseline\": getDominantBaseline(this.textBaseline)\n        },\n        true\n      );\n\n    textElement.appendChild(this.__document.createTextNode(text));\n    this.__currentElement = textElement;\n    this.__applyStyleToCurrentElement(action);\n    parent.appendChild(\n      this.__wrapTextLink(font, textElement as unknown as HTMLElement)\n    );\n  }\n\n  /**\n   * Creates a text element\n   * @param text\n   * @param x\n   * @param y\n   */\n  fillText(text: string, x: number, y: number) {\n    this.__applyText(text, x, y, \"fill\");\n  }\n\n  /**\n   * Strokes text\n   * @param text\n   * @param x\n   * @param y\n   */\n  strokeText(text: string, x: number, y: number) {\n    this.__applyText(text, x, y, \"stroke\");\n  }\n\n  /**\n   * No need to implement this for svg.\n   * @param text\n   * @return {TextMetrics}\n   */\n  measureText(text: string) {\n    this.__ctx.font = this.font;\n    return this.__ctx.measureText(text);\n  }\n\n  /**\n   *  Arc command!\n   */\n  arc(\n    x: number,\n    y: number,\n    radius: number,\n    startAngle: number,\n    endAngle: number,\n    counterClockwise?: number\n  ) {\n    // in canvas no circle is drawn if no angle is provided.\n    if (startAngle === endAngle) {\n      return;\n    }\n    startAngle = startAngle % (2 * Math.PI);\n    endAngle = endAngle % (2 * Math.PI);\n    if (startAngle === endAngle) {\n      //circle time! subtract some of the angle so svg is happy (svg elliptical arc can't draw a full circle)\n      endAngle =\n        (endAngle + 2 * Math.PI - 0.001 * (counterClockwise ? -1 : 1)) %\n        (2 * Math.PI);\n    }\n    const endX = x + radius * Math.cos(endAngle),\n      endY = y + radius * Math.sin(endAngle),\n      startX = x + radius * Math.cos(startAngle),\n      startY = y + radius * Math.sin(startAngle),\n      sweepFlag = counterClockwise ? 0 : 1;\n    let largeArcFlag = 0;\n    let diff = endAngle - startAngle;\n\n    // https://github.com/gliffy/canvas2svg/issues/4\n    if (diff < 0) {\n      diff += 2 * Math.PI;\n    }\n\n    if (counterClockwise) {\n      largeArcFlag = diff > Math.PI ? 0 : 1;\n    } else {\n      largeArcFlag = diff > Math.PI ? 1 : 0;\n    }\n\n    this.lineTo(startX, startY);\n    this.__addPathCommand(\n      format(\n        \"A {rx} {ry} {xAxisRotation} {largeArcFlag} {sweepFlag} {endX} {endY}\",\n        {\n          rx: radius,\n          ry: radius,\n          xAxisRotation: 0,\n          largeArcFlag: largeArcFlag,\n          sweepFlag: sweepFlag,\n          endX: endX,\n          endY: endY\n        }\n      )\n    );\n\n    this.__currentPosition = { x: endX, y: endY };\n  }\n\n  /**\n   * Generates a ClipPath from the clip command.\n   */\n  clip() {\n    const group = this.__closestGroupOrSvg(),\n      clipPath = this.__createElement(\"clipPath\"),\n      id = randomString(this.__ids),\n      newGroup = this.__createElement(\"g\");\n\n    this.__applyCurrentDefaultPath();\n    group.removeChild(this.__currentElement);\n    clipPath.setAttribute(\"id\", id);\n    clipPath.appendChild(this.__currentElement);\n\n    this.__SVGdefs.appendChild(clipPath);\n\n    //set the clip path to this group\n    group.setAttribute(\"clip-path\", format(\"url(#{id})\", { id: id }));\n\n    //clip paths can be scaled and transformed, we need to add another wrapper group to avoid later transformations\n    // to this path\n    group.appendChild(newGroup);\n\n    this.__currentElement = newGroup;\n  }\n\n  /**\n   * Draws a canvas, image or mock context to this canvas.\n   * Note that all svg dom manipulation uses node.childNodes rather than node.children for IE support.\n   * http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#dom-context-2d-drawimage\n   */\n  drawImage(...args: any[]) {\n    let image = args[0],\n      dx,\n      dy,\n      dw,\n      dh,\n      sx = 0,\n      sy = 0,\n      sw,\n      sh,\n      svg,\n      defs,\n      group,\n      svgImage,\n      canvas,\n      id;\n\n    if (args.length === 3) {\n      dx = args[1];\n      dy = args[2];\n      sw = image.width;\n      sh = image.height;\n      dw = sw;\n      dh = sh;\n    } else if (args.length === 5) {\n      dx = args[1];\n      dy = args[2];\n      dw = args[3];\n      dh = args[4];\n      sw = image.width;\n      sh = image.height;\n    } else if (args.length === 9) {\n      sx = args[1];\n      sy = args[2];\n      sw = args[3];\n      sh = args[4];\n      dx = args[5];\n      dy = args[6];\n      dw = args[7];\n      dh = args[8];\n    } else {\n      throw new Error(\n        \"Invalid number of arguments passed to drawImage: \" + arguments.length\n      );\n    }\n\n    const parent = this.__closestGroupOrSvg();\n    const currentElement = this.__currentElement;\n    const translateDirective = \"translate(\" + dx + \", \" + dy + \")\";\n    if (image instanceof CustomCanvasContext) {\n      //canvas2svg mock canvas context. In the future we may want to clone nodes instead.\n      //also I'm currently ignoring dw, dh, sw, sh, sx, sy for a mock context.\n      svg = image.getSvg().cloneNode(true);\n      if (svg.childNodes && svg.childNodes.length > 1) {\n        defs = svg.childNodes[0] as SVGElement;\n        while (defs.childNodes.length) {\n          id = (defs.childNodes[0] as SVGElement).getAttribute(\"id\") as string;\n          this.__ids[id] = id;\n          this.__SVGdefs.appendChild(defs.childNodes[0]);\n        }\n        group = svg.childNodes[1] as SVGElement;\n        if (group) {\n          //save original transform\n          const originTransform = group.getAttribute(\"transform\");\n          let transformDirective;\n          if (originTransform) {\n            transformDirective = originTransform + \" \" + translateDirective;\n          } else {\n            transformDirective = translateDirective;\n          }\n          group.setAttribute(\"transform\", transformDirective);\n          parent.appendChild(group);\n        }\n      }\n    } else if (image.nodeName === \"CANVAS\" || image.nodeName === \"IMG\") {\n      //canvas or image\n      svgImage = this.__createElement(\"image\");\n      svgImage.setAttribute(\"width\", dw);\n      svgImage.setAttribute(\"height\", dh);\n      svgImage.setAttribute(\"preserveAspectRatio\", \"none\");\n\n      if (sx || sy || sw !== image.width || sh !== image.height) {\n        //crop the image using a temporary canvas\n        canvas = this.__document.createElement(\"canvas\");\n        canvas.width = dw;\n        canvas.height = dh;\n        const context = canvas.getContext(\"2d\");\n        context?.drawImage(image, sx, sy, sw, sh, 0, 0, dw, dh);\n        image = canvas;\n      }\n      svgImage.setAttribute(\"transform\", translateDirective);\n      svgImage.setAttributeNS(\n        \"http://www.w3.org/1999/xlink\",\n        \"xlink:href\",\n        image.nodeName === \"CANVAS\"\n          ? image.toDataURL()\n          : image.getAttribute(\"src\")\n      );\n      parent.appendChild(svgImage);\n    }\n  }\n\n  /**\n   * Generates a pattern tag\n   */\n  createPattern(\n    image: HTMLImageElement | HTMLCanvasElement | CustomCanvasContext,\n    repetition: number\n  ) {\n    const pattern = this.__document.createElementNS(\n        \"http://www.w3.org/2000/svg\",\n        \"pattern\"\n      ),\n      id = randomString(this.__ids);\n    let img;\n    pattern.setAttribute(\"id\", id);\n\n    if (image.nodeName === \"CANVAS\" || image.nodeName === \"IMG\") {\n      img = this.__document.createElementNS(\n        \"http://www.w3.org/2000/svg\",\n        \"image\"\n      );\n      img.setAttribute(\n        \"width\",\n        \"\" + (image as HTMLImageElement | HTMLCanvasElement).width\n      );\n      img.setAttribute(\n        \"height\",\n        \"\" + (image as HTMLImageElement | HTMLCanvasElement).height\n      );\n      img.setAttributeNS(\n        \"http://www.w3.org/1999/xlink\",\n        \"xlink:href\",\n        image.nodeName === \"CANVAS\"\n          ? (image as HTMLCanvasElement).toDataURL()\n          : image.getAttribute(\"src\")\n      );\n      pattern.appendChild(img);\n      this.__SVGdefs.appendChild(pattern);\n    } else if (image instanceof CustomCanvasContext) {\n      pattern.setAttribute(\"width\", \"\" + (image as CustomCanvasContext).width);\n      pattern.setAttribute(\n        \"height\",\n        \"\" + (image as CustomCanvasContext).height\n      );\n      pattern.appendChild(image.__rootSVG.childNodes[1]);\n      this.__SVGdefs.appendChild(pattern);\n    }\n    return new CustomCanvasPattern(pattern as unknown as SVGElement, this);\n  }\n\n  setLineDash(dashArray: number[]) {\n    if (dashArray && dashArray.length > 0) {\n      this.lineDash = dashArray.join(\",\");\n    } else {\n      this.lineDash = null;\n    }\n  }\n\n  drawFocusRing() {\n    /// Not yet implemented\n  }\n  createImageData() {\n    /// Not yet implemented\n  }\n  getImageData() {\n    /// Not yet implemented\n  }\n  putImageData() {\n    /// Not yet implemented\n  }\n  globalCompositeOperation() {\n    /// Not yet implemented\n  }\n  setTransform() {\n    /// Not yet implemented\n  }\n}\n\nexport default CustomCanvasContext;\n","import {\n  CustomCanvasContext,\n  CustomCanvasGradient\n} from \"./CustomCanvasContext\";\n\n// direction:\"ltr\"\n// filter:\"none\"\n// fontKerning:\"auto\"\n// fontStretch:\"normal\"\n// fontVariantCaps:\"normal\"\n// globalCompositeOperation:\"source-over\"\n// imageSmoothingEnabled:true\n// imageSmoothingQuality:\"low\"\n// letterSpacing:\"0px\"\n// lineCap:\"butt\"\n// lineWidth:1\n// shadowBlur:0\n// shadowColor:\"rgba(0, 0, 0, 0)\"\n// shadowOffsetX:0\n// shadowOffsetY:0\n// textRendering:\"auto\"\n// wordSpacing:\"0px\"\n\n// clip\n// createConicGradient\n// createImageData\n// direction\n// drawFocusIfNeeded\n// filter\n// fontKerning\n// fontStretch\n// fontVariantCaps\n// getContextAttributes\n// getLineDash\n// getTransform\n// globalCompositeOperation\n// imageSmoothingEnabled\n// imageSmoothingQuality\n// isContextLost\n// letterSpacing\n// reset\n// resetTransform\n// roundRect\n// setTransform\n// shadowBlur\n// shadowColor\n// shadowOffsetX\n// shadowOffsetY\n// textRendering\n// wordSpacing\n\nexport class YZCanvasContext {\n  canvas: HTMLCanvasElement;\n\n  context: CanvasRenderingContext2D;\n  // context: CanvasRenderingContext2D\n  // | WebGLRenderingContext\n  // | WebGL2RenderingContext\n  // | GPUCanvasContext\n  // | ImageBitmapRenderingContext\n  customContext?: CustomCanvasContext;\n\n  // https://developer.mozilla.org/en-US/docs/Web/API/Path2D\n  currentPath2D: Path2D = new Path2D();\n  path2Ds: Path2D[] = [];\n\n  // https://developer.mozilla.org/en-US/docs/Web/API/DOMMatrix\n  currentMatrix: DOMMatrix = new DOMMatrix();\n  // currentMatrix = document\n  //   .createElementNS(\"http://www.w3.org/2000/svg\", \"svg\")\n  //   .createSVGMatrix();\n\n  hasSetCustomStrokeStyle = false;\n  hasSetCustomFillStyle = false;\n\n  constructor(\n    canvas: HTMLCanvasElement,\n    width?: number,\n    height?: number,\n    enableCustomContext = false // 性能影响\n  ) {\n    this.canvas = canvas;\n    this.context = canvas.getContext(\"2d\", {\n      willReadFrequently: true\n    }) as CanvasRenderingContext2D;\n    if (enableCustomContext) {\n      this.customContext = new CustomCanvasContext({\n        canvas: this.canvas,\n        width: width || this.canvas.width,\n        height: height || this.canvas.height\n      });\n    }\n  }\n\n  set lineWidth(lineWidth: number) {\n    this.hasSetCustomStrokeStyle = true;\n    this.context.lineWidth = lineWidth;\n    if (this.customContext) this.customContext.lineWidth = lineWidth;\n  }\n\n  get lineWidth(): number {\n    return this.context.lineWidth;\n  }\n\n  set lineCap(lineCap: CanvasLineCap) {\n    this.hasSetCustomStrokeStyle = true;\n    this.context.lineCap = lineCap;\n    if (this.customContext) this.customContext.lineCap = lineCap;\n  }\n\n  get lineCap(): CanvasLineCap {\n    return this.context.lineCap;\n  }\n\n  set lineJoin(lineJoin: CanvasLineJoin) {\n    this.hasSetCustomStrokeStyle = true;\n    this.context.lineJoin = lineJoin;\n    if (this.customContext) this.customContext.lineCap = lineJoin;\n  }\n\n  get lineJoin(): CanvasLineJoin {\n    return this.context.lineJoin;\n  }\n\n  set lineDashOffset(lineDashOffset: number) {\n    this.hasSetCustomStrokeStyle = true;\n    this.context.lineDashOffset = lineDashOffset;\n    if (this.customContext) this.customContext.lineDashOffset = lineDashOffset;\n  }\n\n  get lineDashOffset(): number {\n    return this.context.lineDashOffset;\n  }\n\n  set miterLimit(miterLimit: number) {\n    this.hasSetCustomStrokeStyle = true;\n    this.context.miterLimit = miterLimit;\n    if (this.customContext) this.customContext.miterLimit = miterLimit;\n  }\n\n  get miterLimit(): number {\n    return this.context.miterLimit;\n  }\n\n  set globalAlpha(alpha: number) {\n    this.context.globalAlpha = alpha;\n    if (this.customContext) this.customContext.globalAlpha = alpha;\n  }\n\n  get globalAlpha(): number {\n    return this.context.globalAlpha;\n  }\n\n  // rgb(255,221,0)\n  // rgba(255,221,0,1)\n  // #000000\n  set fillStyle(\n    style:\n      | string\n      | CanvasGradient\n      | CanvasPattern\n      | { gradient: CanvasGradient; gradientCustom: CustomCanvasGradient }\n  ) {\n    this.hasSetCustomFillStyle = true;\n    if (\n      typeof style == \"string\" ||\n      style instanceof CanvasGradient ||\n      style instanceof CanvasPattern\n    ) {\n      this.context.fillStyle = style;\n      if (this.customContext) this.customContext.fillStyle = style;\n    } else {\n      this.context.fillStyle = style.gradient;\n      if (this.customContext)\n        this.customContext.fillStyle = style.gradientCustom;\n    }\n  }\n\n  get fillStyle(): string | CanvasGradient | CanvasPattern {\n    return this.context.fillStyle;\n  }\n\n  set strokeStyle(\n    style:\n      | string\n      | CanvasGradient\n      | CanvasPattern\n      | { gradient: CanvasGradient; gradientCustom: CustomCanvasGradient }\n  ) {\n    this.hasSetCustomStrokeStyle = true;\n    if (\n      typeof style == \"string\" ||\n      style instanceof CanvasGradient ||\n      style instanceof CanvasPattern\n    ) {\n      this.context.strokeStyle = style;\n      if (this.customContext) this.customContext.strokeStyle = style;\n    } else {\n      this.context.strokeStyle = style.gradient;\n      if (this.customContext)\n        this.customContext.strokeStyle = style.gradientCustom;\n    }\n  }\n\n  get strokeStyle(): string | CanvasGradient | CanvasPattern {\n    return this.context.strokeStyle;\n  }\n\n  // font:\"10px sans-serif\"\n  set font(font: string) {\n    this.context.font = font;\n    if (this.customContext) this.customContext.font = font;\n  }\n\n  get font(): string {\n    return this.context.font;\n  }\n\n  set textBaseline(textBaseline: CanvasTextBaseline) {\n    this.context.textBaseline = textBaseline;\n    if (this.customContext) this.customContext.textBaseline = textBaseline;\n  }\n\n  get textBaseline(): CanvasTextBaseline {\n    return this.context.textBaseline;\n  }\n\n  set textAlign(textAlign: CanvasTextAlign) {\n    this.context.textAlign = textAlign;\n    if (this.customContext) this.customContext.textAlign = textAlign;\n  }\n\n  get textAlign(): CanvasTextAlign {\n    return this.context.textAlign;\n  }\n\n  fill(path?: Path2D) {\n    if (path) {\n      this.context.fill(path);\n      /// customContext Not yet implemented\n    } else {\n      this.context.fill();\n      if (this.customContext) this.customContext.fill();\n    }\n    return this;\n  }\n\n  fillRect(x: number, y: number, w: number, h: number) {\n    this.context.fillRect(x, y, w, h);\n    if (this.customContext) this.customContext.fillRect(x, y, w, h);\n    return this;\n  }\n\n  fillText(text: string, x: number, y: number, maxWidth?: number | undefined) {\n    this.hasSetCustomFillStyle = false;\n    this.context.fillText(text, x, y, maxWidth);\n    if (this.customContext) this.customContext.fillText(text, x, y);\n    return this;\n  }\n\n  setLineDash(dashArray: number[]) {\n    this.context.setLineDash(dashArray);\n    if (this.customContext) this.customContext.setLineDash(dashArray);\n    return this;\n  }\n\n  stroke(path?: Path2D) {\n    if (path) {\n      this.context.stroke(path);\n      /// customContext Not yet implemented\n    } else {\n      this.context.stroke();\n      if (this.customContext) this.customContext.stroke();\n    }\n    return this;\n  }\n\n  strokeText(\n    text: string,\n    x: number,\n    y: number,\n    maxWidth?: number | undefined\n  ) {\n    this.context.strokeText(text, x, y, maxWidth);\n    if (this.customContext) this.customContext.strokeText(text, x, y);\n    return this;\n  }\n\n  strokeRect(x: number, y: number, w: number, h: number) {\n    this.context.strokeRect(x, y, w, h);\n    if (this.customContext) this.customContext.strokeRect(x, y, w, h);\n    return this;\n  }\n\n  measureText(text: string): TextMetrics {\n    return this.context.measureText(text);\n    /// customContext Not yet implemented\n  }\n\n  clearRect(x = 0, y = 0, w = this.canvas.width, h = this.canvas.height) {\n    this.context.clearRect(x, y, w, h);\n    if (this.customContext) this.customContext.clearRect(x, y, w, h);\n    return this;\n  }\n\n  save() {\n    this.context.save();\n    if (this.customContext) this.customContext.save();\n    this.currentMatrix = new DOMMatrix();\n    this.path2Ds.push(this.currentPath2D);\n    this.currentPath2D = new Path2D();\n    return this;\n  }\n\n  restore() {\n    this.context.restore();\n    if (this.customContext) this.customContext.restore();\n    this.hasSetCustomStrokeStyle = false;\n    this.hasSetCustomFillStyle = false;\n    this.currentMatrix = new DOMMatrix();\n    this.currentPath2D = this.path2Ds.pop() || new Path2D();\n    return this;\n  }\n\n  beginPath() {\n    this.context.beginPath();\n    if (this.customContext) this.customContext.beginPath();\n    return this;\n  }\n\n  closePath() {\n    this.context.closePath();\n    if (this.customContext) this.customContext.closePath();\n    this.currentPath2D.closePath();\n    return this;\n  }\n\n  changePath2D(path = this.currentPath2D, transform = this.currentMatrix) {\n    const newPath = new Path2D();\n    newPath.addPath(path, transform);\n    this.currentPath2D = newPath;\n  }\n\n  isPointInStroke(path: Path2D, x: number, y: number): boolean;\n  isPointInStroke(x: number, y: number): boolean;\n  isPointInStroke(...args: any[]): boolean {\n    if (args[0] instanceof Path2D) {\n      return this.context.isPointInStroke(args[0], args[1], args[2]);\n    }\n    return this.context.isPointInStroke(args[0], args[1]);\n    /// customContext Not yet implemented\n  }\n\n  isPointInPath(path: Path2D, x: number, y: number): boolean;\n  isPointInPath(x: number, y: number): boolean;\n  isPointInPath(...args: any[]): boolean {\n    if (args[0] instanceof Path2D) {\n      return this.context.isPointInPath(args[0], args[1], args[2]);\n    }\n    return this.context.isPointInPath(args[0], args[1]);\n    /// customContext Not yet implemented\n  }\n\n  // transform(a: number, b: number, c: number, d: number, e: number, f: number) {\n  //   this.context.transform(a, b, c, d, e, f);\n  //   if (this.customContext) this.customContext.transform(a, b, c, d, e, f);\n  //   return this;\n  // }\n\n  translate(x: number, y: number) {\n    this.context.translate(x, y);\n    if (this.customContext) {\n      this.customContext.translate(x, y);\n    }\n    this.currentMatrix.translate(x, y);\n    this.changePath2D();\n    return this;\n  }\n\n  rotate(radian: number, centerX = 0, centerY = 0) {\n    /// 移动的是坐标系\n    this.translate(centerX, centerY);\n    this.context.rotate(radian);\n    if (this.customContext) {\n      this.customContext.rotate(radian);\n    }\n    this.currentMatrix.rotate(radian);\n    this.translate(-centerX, -centerY);\n    this.changePath2D();\n    return this;\n  }\n\n  scale(x: number, y = x, centerX = 0, centerY = 0) {\n    /// 移动的是坐标系\n    this.translate(centerX, centerY);\n    this.context.scale(x, y);\n    if (this.customContext) {\n      this.customContext.scale(x, y);\n    }\n    this.currentMatrix.scale(x, y);\n    this.translate(-centerX, -centerY);\n    this.changePath2D();\n    return this;\n  }\n\n  moveTo(x: number, y: number) {\n    this.context.moveTo(x, y);\n    if (this.customContext) this.customContext.moveTo(x, y);\n    this.currentPath2D.moveTo(x, y);\n    return this;\n  }\n\n  lineTo(x: number, y: number) {\n    this.context.lineTo(x, y);\n    if (this.customContext) this.customContext.lineTo(x, y);\n    this.currentPath2D.lineTo(x, y);\n    return this;\n  }\n\n  arc(\n    x: number,\n    y: number,\n    radius: number,\n    startAngle: number,\n    endAngle: number,\n    counterClockwise?: boolean\n  ) {\n    this.context.arc(x, y, radius, startAngle, endAngle, counterClockwise);\n    if (this.customContext)\n      this.customContext.arc(\n        x,\n        y,\n        radius,\n        startAngle,\n        endAngle,\n        counterClockwise ? -1 : 1\n      );\n    this.currentPath2D.arc(\n      x,\n      y,\n      radius,\n      startAngle,\n      endAngle,\n      counterClockwise\n    );\n    return this;\n  }\n\n  arcTo(x1: number, y1: number, x2: number, y2: number, radius: number) {\n    this.context.arcTo(x1, y1, x2, y2, radius);\n    if (this.customContext) this.customContext.arcTo(x1, y1, x2, y2, radius);\n    this.currentPath2D.arcTo(x1, y1, x2, y2, radius);\n    return this;\n  }\n\n  ellipse(\n    x: number,\n    y: number,\n    radiusX: number,\n    radiusY: number,\n    rotation: number,\n    startAngle: number,\n    endAngle: number,\n    counterClockwise?: boolean\n  ) {\n    this.context.ellipse(\n      x,\n      y,\n      radiusX,\n      radiusY,\n      rotation,\n      startAngle,\n      endAngle,\n      counterClockwise\n    );\n    /// customContext Not yet implemented\n    this.currentPath2D.ellipse(\n      x,\n      y,\n      radiusX,\n      radiusY,\n      rotation,\n      startAngle,\n      endAngle,\n      counterClockwise\n    );\n    return this;\n  }\n\n  quadraticCurveTo(cpx: number, cpy: number, x: number, y: number) {\n    this.context.quadraticCurveTo(cpx, cpy, x, y);\n    if (this.customContext) this.customContext.quadraticCurveTo(cpx, cpy, x, y);\n    this.currentPath2D.quadraticCurveTo(cpx, cpy, x, y);\n    return this;\n  }\n\n  bezierCurveTo(\n    cp1x: number,\n    cp1y: number,\n    cp2x: number,\n    cp2y: number,\n    x: number,\n    y: number\n  ) {\n    this.context.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y);\n    if (this.customContext)\n      this.customContext.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y);\n    this.currentPath2D.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y);\n    return this;\n  }\n\n  rect(x: number, y: number, w: number, h: number) {\n    this.context.rect(x, y, w, h);\n    if (this.customContext) this.customContext.rect(x, y, w, h);\n    this.currentPath2D.rect(x, y, w, h);\n    return this;\n  }\n\n  // { 0: \"#ffffff\", 1: \"#ff0000\" }\n  createLinearGradient(\n    x1: number,\n    y1: number,\n    x2: number,\n    y2: number,\n    colorStops?: Record<number, string>\n  ) {\n    const gradient: CanvasGradient = this.context.createLinearGradient(\n      x1,\n      y1,\n      x2,\n      y2\n    );\n    // const gradientCustom: CustomCanvasGradient =\n    //   this.customContext.createLinearGradient(x1, y1, x2, y2);\n    if (colorStops) {\n      Object.entries(colorStops).forEach(([key, value]) => {\n        gradient.addColorStop(parseFloat(key), value);\n        // gradientCustom.addColorStop(parseFloat(key), value);\n      });\n    }\n    return gradient;\n    // return {\n    //   gradient\n    //   // gradientCustom\n    // };\n  }\n\n  createRadialGradient(\n    x0: number,\n    y0: number,\n    r0: number,\n    x1: number,\n    y1: number,\n    r1: number,\n    colorStops?: Record<number, string>\n  ) {\n    const gradient: CanvasGradient = this.context.createRadialGradient(\n      x0,\n      y0,\n      r0,\n      x1,\n      y1,\n      r1\n    );\n    // const gradientCustom: CustomCanvasGradient =\n    //   this.customContext.createRadialGradient(x0, y0, r0, x1, y1, r1);\n    if (colorStops) {\n      Object.entries(colorStops).forEach(([key, value]) => {\n        gradient.addColorStop(parseFloat(key), value);\n        // gradientCustom.addColorStop(parseFloat(key), value);\n      });\n    }\n    return gradient;\n    // return {\n    //   gradient\n    //   // gradientCustom\n    // };\n  }\n\n  //  const image = new Image();\n  //  image.src = \"../assets/images/picture.jpg\";\n  //  image.onload = function () {\n  //    co.drawImage(image);\n  //  };\n  drawImage(\n    element:\n      | HTMLOrSVGImageElement\n      | HTMLVideoElement\n      | HTMLCanvasElement\n      | ImageBitmap\n      | OffscreenCanvas,\n    ...args: number[]\n  ) {\n    if (args.length === 0) {\n      this.context.drawImage(element, 0, 0);\n    } else if (args.length === 2) {\n      const dx = args[0];\n      const dy = args[1];\n      this.context.drawImage(element, dx, dy);\n    } else if (args.length === 4) {\n      const dx = args[0];\n      const dy = args[1];\n      const dw = args[2];\n      const dh = args[3];\n      this.context.drawImage(element, dx, dy, dw, dh);\n    } else if (args.length === 8) {\n      const sx = args[0];\n      const sy = args[1];\n      const sw = args[2];\n      const sh = args[3];\n      const dx = args[4];\n      const dy = args[5];\n      const dw = args[6];\n      const dh = args[7];\n      this.context.drawImage(element, sx, sy, sw, sh, dx, dy, dw, dh);\n    } else {\n      throw new Error(\n        \"Invalid number of arguments passed to drawImage: \" + args.length\n      );\n    }\n    if (this.customContext) this.customContext.drawImage(element, ...args);\n    return this;\n  }\n\n  getImageData(\n    sx = 0,\n    sy = 0,\n    sw = this.canvas.width,\n    sh = this.canvas.height,\n    settings?: ImageDataSettings | undefined\n  ): ImageData {\n    return this.context.getImageData(sx, sy, sw, sh, settings);\n    /// customContext Not yet implemented\n  }\n\n  putImageData(imageData: ImageData, dx = 0, dy = 0) {\n    return this.context.putImageData(imageData, dx, dy);\n    /// customContext Not yet implemented\n  }\n\n  createPattern(\n    image:\n      | HTMLImageElement\n      | SVGImageElement\n      | HTMLVideoElement\n      | HTMLCanvasElement\n      | ImageBitmap\n      | OffscreenCanvas,\n    repetition: \"repeat\" | \"repeat-x\" | \"repeat-y\" | \"no-repeat\" | null\n  ): CanvasPattern | null {\n    return this.context.createPattern(image, repetition);\n    /// customContext Not yet implemented\n  }\n\n  toRawSVG() {\n    if (this.customContext) {\n      const serializedSVG: string = this.customContext.getSerializedSvg(true);\n      const svgElement: SVGElement = this.customContext.getSvg();\n      return { raw: serializedSVG, element: svgElement };\n    } else {\n      return { raw: \"\", element: null };\n    }\n  }\n}\n\nexport default YZCanvasContext;\n","import { YZCanvasContext } from \"../../canvas\";\nimport { type TSVGParsedPathData } from \"../../svg/DOMSVGUtil\";\nimport { angle } from \"../math\";\n\nexport type TLOptions = {\n  x?: number;\n  y?: number;\n  toX?: number;\n  toY?: number;\n};\n\n/// 配合 PathD 使用，不可单独使用\nexport class L {\n  x: number;\n  y: number;\n  toX: number;\n  toY: number;\n\n  constructor(options?: TLOptions) {\n    this.x = options?.x || 0;\n    this.y = options?.y || 0;\n    this.toX = options?.toX || 0;\n    this.toY = options?.toY || 0;\n  }\n\n  toSVGPathData(): TSVGParsedPathData[] {\n    return [[\"L\", this.toX, this.toY]];\n  }\n\n  toCanvasContext(ctx: YZCanvasContext) {\n    ctx.lineTo(this.toX, this.toY);\n  }\n\n  getBoundingClientRect() {\n    const lineAngle = angle(this.x, this.y, this.toX, this.toY);\n    if (lineAngle === 0) {\n      const minX = Math.min(this.x, this.toX);\n      const minY = Math.min(this.y, this.toY);\n      const maxX = Math.max(this.x, this.toX);\n      const maxY = Math.max(this.y, this.toY);\n      return {\n        x: minX,\n        y: minY,\n        width: maxX - minX,\n        height: maxY - minY\n      };\n    } else {\n      const sin = Math.sin(lineAngle);\n      const cos = Math.cos(lineAngle);\n      const x1r = cos * this.x - sin * this.y;\n      const x2r = cos * this.toX - sin * this.toY;\n      const y1r = cos * this.y + sin * this.x;\n      const y2r = cos * this.toY + sin * this.toX;\n      return {\n        x: Math.min(x1r, x2r),\n        y: Math.min(y1r, y2r),\n        width: Math.max(x1r, x2r) - Math.min(x1r, x2r),\n        height: Math.max(y1r, y2r) - Math.min(y1r, y2r)\n      };\n    }\n  }\n\n  // t : The fraction of the overall duration of the path. (A value from 0.0 to 1.0)\n  interpolate(t: number): { x: number; y: number } {\n    return {\n      x: this.x + t * (this.toX - this.x),\n      y: this.y + t * (this.toY - this.y)\n    };\n  }\n\n  intersection(line: L): { x: number; y: number } | null {\n    const x1 = this.x;\n    const y1 = this.y;\n    const x4 = line.toX;\n    const y4 = line.toY;\n    const dx1 = this.toX - x1;\n    const dx2 = line.x - x4;\n    if (!dx1 && !dx2) {\n      return null;\n    }\n    const m1 = (this.toY - y1) / dx1;\n    const m2 = (line.y - y4) / dx2;\n    if (!dx1) {\n      // infinity\n      return { x: x1, y: m2 * (x1 - x4) + y4 };\n    } else if (!dx2) {\n      // infinity\n      return { x: x4, y: m1 * (x4 - x1) + y1 };\n    }\n    const xInt = (-m2 * x4 + y4 + m1 * x1 - y1) / (m1 - m2);\n    const yInt = m1 * (xInt - x1) + y1;\n    if (isNaN(xInt) || isNaN(yInt)) {\n      return null;\n    }\n    return { x: xInt, y: yInt };\n  }\n}\n\nexport default L;\n","import { TSVGParsedPathData } from \"../../svg/DOMSVGUtil\";\nimport { YZCanvasContext } from \"../../canvas\";\nimport { L, TLOptions } from \"./L\";\n\nexport type TCArcOptions = {\n  rx: number;\n  ry: number;\n  xAxisRotate?: number; // phi\n  largeArcFlag?: number; // fa\n  sweepFlag?: number; //fs\n  toX: number;\n  toY: number;\n} & TLOptions;\n\nexport class Arc extends L {\n  // x方向的半径\n  public rx: number;\n  // y方向的半径\n  public ry: number;\n  // 绕着x轴旋转的角度\n  public xAxisRotate: number;\n  // 0小弧 1大弧\n  public largeArcFlag: number;\n  // 0逆时针方向 1顺时针方向\n  public sweepFlag: number;\n\n  constructor(options: TCArcOptions) {\n    super(options);\n    this.rx = options.rx;\n    this.ry = options.ry;\n    this.xAxisRotate = options?.xAxisRotate ?? 0;\n    this.largeArcFlag = options?.largeArcFlag ?? 1;\n    this.sweepFlag = options?.sweepFlag ?? 1;\n    this.toX = options.toX;\n    this.toY = options.toY;\n  }\n\n  /// A rx,ry xAxisRotate LargeArcFlag,SweepFlag x,y\n  toSVGPathData(): TSVGParsedPathData[] {\n    return [\n      [\n        \"A\",\n        this.rx,\n        this.ry,\n        this.xAxisRotate,\n        this.largeArcFlag,\n        this.sweepFlag,\n        this.toX,\n        this.toY\n      ]\n    ];\n  }\n\n  toCanvasContext(ctx: YZCanvasContext): void {\n    const [cx, cy, rx, ry, xAxisRotate, startAngle, endAngle] = this.convert(\n      this.x,\n      this.y,\n      this.toX,\n      this.toY,\n      this.rx,\n      this.ry,\n      this.xAxisRotate,\n      this.largeArcFlag,\n      this.sweepFlag\n    );\n    ctx.ellipse(\n      cx,\n      cy,\n      rx,\n      ry,\n      xAxisRotate,\n      startAngle,\n      endAngle,\n      !this.sweepFlag\n    );\n    // ctx.scale(this.rx, this.ry);\n    // ctx.arc(0, 0, 1, startAngle, endAngle, !this.sweepFlag);\n  }\n\n  convert(\n    x1: number,\n    y1: number,\n    x2: number,\n    y2: number,\n    rx: number,\n    ry: number,\n    phi: number,\n    fa: number,\n    fs: number\n  ) {\n    const p = (phi / 180) * Math.PI;\n    const x_m = (x1 - x2) / 2;\n    const y_m = (y1 - y2) / 2;\n\n    const x1_d = Math.cos(p) * x_m + Math.sin(p) * y_m;\n    const y1_d = -Math.sin(p) * x_m + Math.cos(p) * y_m;\n\n    const radius_check_value =\n      (x1_d * x1_d) / (rx * rx) + (y1_d * y1_d) / (ry * ry);\n    if (radius_check_value > 1) {\n      // throw \"Radius is too small to build an arc!\";\n\n      // Check out radius correction in the W3C document\n      // https://www.w3.org/TR/SVG11/implnote.html#ArcCorrectionOutOfRangeRadii\n      const r_sq = Math.sqrt(radius_check_value);\n      rx = r_sq * rx;\n      ry = r_sq * ry;\n\n      throw new Error(\n        `Radii are too small to build an arc. Correcting them to ${rx}/${ry}.`\n      );\n    }\n\n    const sq = Math.sqrt(\n      (rx * rx * ry * ry - rx * rx * y1_d * y1_d - ry * ry * x1_d * x1_d) /\n        (rx * rx * y1_d * y1_d + ry * ry * x1_d * x1_d)\n    );\n\n    const s = fa != fs ? 1 : -1;\n    const cx_d = (s * sq * rx * y1_d) / ry;\n    const cy_d = (s * sq * -ry * x1_d) / rx;\n\n    const x_m_d = (x1 + x2) / 2;\n    const y_m_d = (y1 + y2) / 2;\n    const cx = Math.cos(p) * cx_d - Math.sin(p) * cy_d + x_m_d;\n    const cy = Math.sin(p) * cx_d + Math.cos(p) * cy_d + y_m_d;\n\n    const vectorAngle = (ux: number, uy: number, vx: number, vy: number) =>\n      (ux * vy >= uy * vx ? 1 : -1) *\n      Math.acos(\n        (ux * vx + uy * vy) /\n          (Math.sqrt(ux * ux + uy * uy) * Math.sqrt(vx * vx + vy * vy))\n      );\n    const theta_1 = vectorAngle(1, 0, x1 - cx, y1 - cy) - p;\n    const delta_theta = vectorAngle(x1 - cx, y1 - cy, x2 - cx, y2 - cy);\n\n    return [cx, cy, rx, ry, p, theta_1, theta_1 + delta_theta];\n  }\n}\n\nexport default Arc;\n","import { TSVGParsedPathData } from \"../../svg/DOMSVGUtil\";\nimport { YZCanvasContext } from \"../../canvas\";\nimport { L, TLOptions } from \"./L\";\n\nexport type TQuadraticBezierOptions = {\n  cx: number;\n  cy: number;\n  toX?: number;\n  toY?: number;\n  isLineThrough?: boolean;\n} & TLOptions;\n\nexport class QuadraticBezier extends L {\n  public cx: number;\n  public cy: number;\n  public isLineThrough: boolean;\n\n  constructor(options: TQuadraticBezierOptions) {\n    super(options);\n    this.cx = options.cx;\n    this.cy = options.cy;\n    this.isLineThrough =\n      typeof options.isLineThrough == \"boolean\" ? options.isLineThrough : false;\n  }\n\n  /// Q cx,cy x,y\n  /// T x,y\n  toSVGPathData(): TSVGParsedPathData[] {\n    if (this.isLineThrough) {\n      const c1x = this.cx * 2 - (this.x + this.toX) / 2;\n      const c1y = this.cy * 2 - (this.y + this.toY) / 2;\n      return [[\"Q\", c1x, c1y, this.toX, this.toY]];\n    } else {\n      return [[\"Q\", this.cx, this.cy, this.toX, this.toY]];\n    }\n  }\n\n  toCanvasContext(ctx: YZCanvasContext) {\n    if (this.isLineThrough) {\n      const c1x = this.cx * 2 - (this.x + this.toX) / 2;\n      const c1y = this.cy * 2 - (this.y + this.toY) / 2;\n      ctx.quadraticCurveTo(c1x, c1y, this.toX, this.toY);\n    } else {\n      ctx.quadraticCurveTo(this.cx, this.cy, this.toX, this.toY);\n    }\n  }\n\n  getBoundingClientRect() {\n    const xArr = [this.x, this.toX];\n    const yArr = [this.y, this.toY];\n    let a, b, c, t;\n    for (let i = 0; i < 2; ++i) {\n      a =\n        i == 0\n          ? this.x - 2 * this.cx + this.toX\n          : this.y - 2 * this.cy + this.toY;\n      b = i == 0 ? -2 * this.x + 2 * this.cx : -2 * this.y + 2 * this.cy;\n      c = i == 0 ? this.x : this.y;\n      if (Math.abs(a) > 1e-12) {\n        t = -b / (2 * a);\n        if (0 < t && t < 1) {\n          [xArr, yArr][i].push(a * t * t + b * t + c);\n        }\n      }\n    }\n    const min = { x: Math.min.apply(0, xArr), y: Math.min.apply(0, yArr) };\n    const max = { x: Math.max.apply(0, xArr), y: Math.max.apply(0, yArr) };\n    return {\n      x: min.x,\n      y: min.y,\n      width: max.x - min.x,\n      height: max.y - min.y\n    };\n  }\n\n  // t : The fraction of the overall duration of the path. (A value from 0.0 to 1.0)\n  interpolate(t: number): { x: number; y: number } {\n    return {\n      x:\n        (1 - t) * (1 - t) * this.x +\n        2 * (1 - t) * t * this.cx +\n        t * t * this.toX,\n      y:\n        (1 - t) * (1 - t) * this.y +\n        2 * (1 - t) * t * this.cy +\n        t * t * this.toY\n    };\n  }\n}\n\nexport default QuadraticBezier;\n","import DOMSVGUtil, { TSVGParsedPathData } from \"../../svg/DOMSVGUtil\";\nimport { YZCanvasContext } from \"../../canvas\";\nimport { L, TLOptions } from \"./L\";\n\nexport type TCubicBezierOptions = {\n  c1x: number;\n  c1y: number;\n  c2x: number;\n  c2y: number;\n  toX?: number;\n  toY?: number;\n} & TLOptions;\n\nexport class CubicBezier extends L {\n  public c1x: number;\n  public c1y: number;\n  public c2x: number;\n  public c2y: number;\n\n  constructor(options: TCubicBezierOptions) {\n    super(options);\n    this.c1x = options.c1x;\n    this.c1y = options.c1y;\n    this.c2x = options.c2x;\n    this.c2y = options.c2y;\n  }\n\n  /// C c1x,c1y c2x,c2y x,y\n  /// S c2x,c2y x,y\n  toSVGPathData(): TSVGParsedPathData[] {\n    return [[\"C\", this.c1x, this.c1y, this.c2x, this.c2y, this.toX, this.toY]];\n  }\n\n  toCanvasContext(ctx: YZCanvasContext) {\n    ctx.bezierCurveTo(\n      this.c1x,\n      this.c1y,\n      this.c2x,\n      this.c2y,\n      this.toX,\n      this.toY\n    );\n  }\n\n  getBoundingClientRect() {\n    /// 一种方法\n    // const tvalues = [];\n    // const bounds: number[][] = [[], []];\n    // let a, b, c, t, t1, t2, b2ac, sqrtb2ac;\n    // for (let i = 0; i < 2; ++i) {\n    //   if (i === 0) {\n    //     b = 6 * this.x - 12 * this.c1x + 6 * this.c2x;\n    //     a = -3 * this.x + 9 * this.c1x - 9 * this.c2x + 3 * this.toX;\n    //     c = 3 * this.c1x - 3 * this.x;\n    //   } else {\n    //     b = 6 * this.y - 12 * this.c1y + 6 * this.c2y;\n    //     a = -3 * this.y + 9 * this.c1y - 9 * this.c2y + 3 * this.toY;\n    //     c = 3 * this.c1y - 3 * this.y;\n    //   }\n    //   if (Math.abs(a) < 1e-12) {\n    //     if (Math.abs(b) < 1e-12) {\n    //       continue;\n    //     }\n    //     t = -c / b;\n    //     if (t > 0 && t < 1) {\n    //       tvalues.push(t);\n    //     }\n    //     continue;\n    //   }\n    //   b2ac = b * b - 4 * c * a;\n    //   if (b2ac < 0) {\n    //     continue;\n    //   }\n    //   sqrtb2ac = Math.sqrt(b2ac);\n    //   t1 = (-b + sqrtb2ac) / (2 * a);\n    //   if (t1 > 0 && t1 < 1) {\n    //     tvalues.push(t1);\n    //   }\n    //   t2 = (-b - sqrtb2ac) / (2 * a);\n    //   if (t2 > 0 && t2 < 1) {\n    //     tvalues.push(t2);\n    //   }\n    // }\n    // let j = tvalues.length;\n    // let mt;\n    // const jlen = j;\n    // while (j--) {\n    //   t = tvalues[j];\n    //   mt = 1 - t;\n    //   bounds[0][j] =\n    //     mt * mt * mt * this.x +\n    //     3 * mt * mt * t * this.c1x +\n    //     3 * mt * t * t * this.c2x +\n    //     t * t * t * this.toX;\n    //   bounds[1][j] =\n    //     mt * mt * mt * this.y +\n    //     3 * mt * mt * t * this.c1y +\n    //     3 * mt * t * t * this.c2y +\n    //     t * t * t * this.toY;\n    // }\n    // bounds[0][jlen] = this.x;\n    // bounds[1][jlen] = this.y;\n    // bounds[0][jlen + 1] = this.toX;\n    // bounds[1][jlen + 1] = this.toY;\n    // bounds[0].length = bounds[1].length = jlen + 2;\n    // const min = {\n    //   x: Math.min.apply(0, bounds[0]),\n    //   y: Math.min.apply(0, bounds[1])\n    // };\n    // const max = {\n    //   x: Math.max.apply(0, bounds[0]),\n    //   y: Math.max.apply(0, bounds[1])\n    // };\n    // return {\n    //   x: min.x,\n    //   y: min.y,\n    //   width: max.x - min.x,\n    //   height: max.y - min.y\n    // };\n\n    /// 另一种方法\n    let a =\n      this.c2x - 2 * this.c1x + this.x - (this.toX - 2 * this.c2x + this.c1x);\n    let b = 2 * (this.c1x - this.x) - 2 * (this.c2x - this.c1x);\n    let c = this.x - this.c1x;\n    let t1 = (-b + Math.sqrt(b * b - 4 * a * c)) / 2 / a;\n    let t2 = (-b - Math.sqrt(b * b - 4 * a * c)) / 2 / a;\n    const y = [this.y, this.toY];\n    const x = [this.x, this.toX];\n    let dot;\n    const dots = [];\n    Math.abs(t1) > 1e12 && (t1 = 0.5);\n    Math.abs(t2) > 1e12 && (t2 = 0.5);\n    if (t1 >= 0 && t1 <= 1) {\n      dot = this.interpolate(t1);\n      x.push(dot.x);\n      y.push(dot.y);\n      dots.push({ X: dot.x, Y: dot.y });\n    }\n    if (t2 >= 0 && t2 <= 1) {\n      dot = this.interpolate(t2);\n      x.push(dot.x);\n      y.push(dot.y);\n      dots.push({ X: dot.x, Y: dot.y });\n    }\n    a = this.c2y - 2 * this.c1y + this.y - (this.toY - 2 * this.c2y + this.c1y);\n    b = 2 * (this.c1y - this.y) - 2 * (this.c2y - this.c1y);\n    c = this.y - this.c1y;\n    t1 = (-b + Math.sqrt(b * b - 4 * a * c)) / 2 / a;\n    t2 = (-b - Math.sqrt(b * b - 4 * a * c)) / 2 / a;\n    Math.abs(t1) > 1e12 && (t1 = 0.5);\n    Math.abs(t2) > 1e12 && (t2 = 0.5);\n    if (t1 >= 0 && t1 <= 1) {\n      dot = this.interpolate(t1);\n      x.push(dot.x);\n      y.push(dot.y);\n      dots.push({ X: dot.x, Y: dot.y });\n    }\n    if (t2 >= 0 && t2 <= 1) {\n      dot = this.interpolate(t2);\n      x.push(dot.x);\n      y.push(dot.y);\n      dots.push({ X: dot.x, Y: dot.y });\n    }\n    // remove duplicate dots\n    const dots2 = [];\n    const l = dots.length;\n    for (let i = 0; i < l; i++) {\n      for (let j = i + 1; j < l; j++) {\n        if (dots[i].X === dots[j].X && dots[i].Y === dots[j].Y) j = ++i;\n      }\n      dots2.push({ X: dots[i].X, Y: dots[i].Y });\n    }\n    const min = { x: Math.min.apply(Math, x), y: Math.min.apply(Math, y) };\n    const max = { x: Math.max.apply(Math, x), y: Math.max.apply(Math, y) };\n    return {\n      x: min.x,\n      y: min.y,\n      width: max.x - min.x,\n      height: max.y - min.y,\n      dots: dots2 // these are the extrema points\n    };\n  }\n\n  /// t (0.0 to 1.0) : The fraction of the overall duration of the path\n  interpolate(t: number): { x: number; y: number } {\n    return {\n      x:\n        Math.pow(1 - t, 3) * this.x +\n        3 * Math.pow(1 - t, 2) * t * this.c1x +\n        3 * Math.pow(1 - t, 1) * Math.pow(t, 2) * this.c2x +\n        Math.pow(t, 3) * this.toX,\n      y:\n        Math.pow(1 - t, 3) * this.y +\n        3 * Math.pow(1 - t, 2) * t * this.c1y +\n        3 * Math.pow(1 - t, 1) * Math.pow(t, 2) * this.c2y +\n        Math.pow(t, 3) * this.toY\n    };\n  }\n\n  static base3(\n    t: number,\n    p1: number,\n    p2: number,\n    p3: number,\n    p4: number\n  ): number {\n    const t1 = -3 * p1 + 9 * p2 - 9 * p3 + 3 * p4;\n    const t2 = t * t1 + 6 * p1 - 12 * p2 + 6 * p3;\n    return t * t2 - 3 * p1 + 3 * p2;\n  }\n\n  /**\n   * Based on snap.svg bezlen() function\n   * like getTotalLength(), approximate a cubic bézier length\n   * https://github.com/adobe-webplatform/Snap.svg/blob/master/dist/snap.svg.js#L5786\n   */\n  static bezlen(\n    x1: number,\n    y1: number,\n    x2: number,\n    y2: number,\n    x3: number,\n    y3: number,\n    x4: number,\n    y4: number,\n    z = 1 /// length: 0 ~ 1\n  ): number {\n    z = Math.max(0, Math.min(z, 1));\n    const z2 = z / 2;\n    const Tvalues = [\n      -0.1252, 0.1252, -0.3678, 0.3678, -0.5873, 0.5873, -0.7699, 0.7699,\n      -0.9041, 0.9041, -0.9816, 0.9816\n    ];\n    const Cvalues = [\n      0.2491, 0.2491, 0.2335, 0.2335, 0.2032, 0.2032, 0.1601, 0.1601, 0.1069,\n      0.1069, 0.0472, 0.0472\n    ];\n    let sum = 0;\n    /// 12 = Tvalues.length = Cvalues.length\n    for (let i = 0; i < 12; i++) {\n      const ct = z2 * Tvalues[i] + z2;\n      const xbase = this.base3(ct, x1, x2, x3, x4);\n      const ybase = this.base3(ct, y1, y2, y3, y4);\n      sum += Cvalues[i] * Math.sqrt(xbase * xbase + ybase * ybase);\n    }\n    return z2 * sum;\n  }\n\n  length(z = 1): number {\n    return CubicBezier.bezlen(\n      this.x,\n      this.y,\n      this.c1x,\n      this.c1y,\n      this.c2x,\n      this.c2y,\n      this.toX,\n      this.toY,\n      z\n    );\n  }\n\n  /// get position on the curve (0..1)\n  getTatLen(ll: number): number {\n    const x1 = this.x;\n    const y1 = this.y;\n    const x2 = this.c1x;\n    const y2 = this.c1y;\n    const x3 = this.c2x;\n    const y3 = this.c2y;\n    const x4 = this.toX;\n    const y4 = this.toY;\n    if (ll < 0 || CubicBezier.bezlen(x1, y1, x2, y2, x3, y3, x4, y4) < ll) {\n      return 0;\n    }\n    const t = 1;\n    let step = t / 2;\n    let t2 = t - step;\n    let l = CubicBezier.bezlen(x1, y1, x2, y2, x3, y3, x4, y4, t2);\n    while (Math.abs(l - ll) > 0.01) {\n      step /= 2;\n      t2 += (l < ll ? 1 : -1) * step;\n      l = CubicBezier.bezlen(x1, y1, x2, y2, x3, y3, x4, y4, t2);\n    }\n    return t2;\n  }\n\n  /// Find dot coordinates on the given cubic bezier curve at the given t\n  getPointAtSegmentLength(length: number) {\n    const t = this.getTatLen(length);\n    const t1 = 1 - t,\n      t13 = Math.pow(t1, 3),\n      t12 = Math.pow(t1, 2),\n      t2 = t * t,\n      t3 = t2 * t,\n      x =\n        t13 * this.x +\n        t12 * 3 * t * this.c1x +\n        t1 * 3 * t * t * this.c2x +\n        t3 * this.toX,\n      y =\n        t13 * this.y +\n        t12 * 3 * t * this.c1y +\n        t1 * 3 * t * t * this.c2y +\n        t3 * this.toY,\n      mx =\n        this.x +\n        2 * t * (this.c1x - this.x) +\n        t2 * (this.c2x - 2 * this.c1x + this.x),\n      my =\n        this.y +\n        2 * t * (this.c1y - this.y) +\n        t2 * (this.c2y - 2 * this.c1y + this.y),\n      nx =\n        this.c1x +\n        2 * t * (this.c2x - this.c1x) +\n        t2 * (this.toX - 2 * this.c2x + this.c1x),\n      ny =\n        this.c1y +\n        2 * t * (this.c2y - this.c1y) +\n        t2 * (this.toY - 2 * this.c2y + this.c1y),\n      ax = t1 * this.x + t * this.c1x,\n      ay = t1 * this.y + t * this.c1y,\n      cx = t1 * this.c2x + t * this.toX,\n      cy = t1 * this.c2y + t * this.toY,\n      alpha = 90 - (Math.atan2(mx - nx, my - ny) * 180) / Math.PI;\n    // (mx > nx || my < ny) && (alpha += 180);\n    return {\n      x: x, // x coordinate of the point\n      y: y, // y coordinate of the point\n      m: {\n        x: mx, // x coordinate of the left anchor\n        y: my // y coordinate of the left anchor\n      },\n      n: {\n        x: nx, // x coordinate of the right anchor\n        y: ny // y coordinate of the right anchor\n      },\n      start: {\n        x: ax, // x coordinate of the start of the curve\n        y: ay // y coordinate of the start of the curve\n      },\n      end: {\n        x: cx, //  x coordinate of the end of the curve\n        y: cy // y coordinate of the end of the curve\n      },\n      alpha: alpha // degree: angle of the curve derivative at the point\n    };\n  }\n}\n\nexport default CubicBezier;\n","// https://github.com/colinmeinke/svg-arc-to-cubic-bezier\n//\n// Convert an arc to a sequence of cubic bézier curves\n//\n\nconst TAU = Math.PI * 2;\n\n// Calculate an angle between two unit vectors\n//\n// Since we measure angle between radii of circular arcs,\n// we can use simplified math (without length normalization)\n//\nfunction unit_vector_angle(ux: number, uy: number, vx: number, vy: number) {\n  const sign = ux * vy - uy * vx < 0 ? -1 : 1;\n  let dot = ux * vx + uy * vy;\n\n  // Add this to work with arbitrary vectors:\n  // dot /= Math.sqrt(ux * ux + uy * uy) * Math.sqrt(vx * vx + vy * vy);\n\n  // rounding errors, e.g. -1.0000000000000002 can screw up this\n  if (dot > 1.0) {\n    dot = 1.0;\n  }\n  if (dot < -1.0) {\n    dot = -1.0;\n  }\n\n  return sign * Math.acos(dot);\n}\n\n// Convert from endpoint to center parameterization,\n// see http://www.w3.org/TR/SVG11/implnote.html#ArcImplementationNotes\n//\n// Return [cx, cy, theta1, delta_theta]\n//\nfunction get_arc_center(\n  x1: number,\n  y1: number,\n  x2: number,\n  y2: number,\n  fa: number,\n  fs: number,\n  rx: number,\n  ry: number,\n  sin_phi: number,\n  cos_phi: number\n) {\n  // Step 1.\n  //\n  // Moving an ellipse so origin will be the middlepoint between our two\n  // points. After that, rotate it to line up ellipse axes with coordinate\n  // axes.\n  //\n  const x1p = (cos_phi * (x1 - x2)) / 2 + (sin_phi * (y1 - y2)) / 2;\n  const y1p = (-sin_phi * (x1 - x2)) / 2 + (cos_phi * (y1 - y2)) / 2;\n\n  const rx_sq = rx * rx;\n  const ry_sq = ry * ry;\n  const x1p_sq = x1p * x1p;\n  const y1p_sq = y1p * y1p;\n\n  // Step 2.\n  //\n  // Compute coordinates of the centre of this ellipse (cx', cy')\n  // in the new coordinate system.\n  //\n  let radicant = rx_sq * ry_sq - rx_sq * y1p_sq - ry_sq * x1p_sq;\n\n  if (radicant < 0) {\n    // due to rounding errors it might be e.g. -1.3877787807814457e-17\n    radicant = 0;\n  }\n\n  radicant /= rx_sq * y1p_sq + ry_sq * x1p_sq;\n  radicant = Math.sqrt(radicant) * (fa === fs ? -1 : 1);\n\n  const cxp = ((radicant * rx) / ry) * y1p;\n  const cyp = ((radicant * -ry) / rx) * x1p;\n\n  // Step 3.\n  //\n  // Transform back to get centre coordinates (cx, cy) in the original\n  // coordinate system.\n  //\n  const cx = cos_phi * cxp - sin_phi * cyp + (x1 + x2) / 2;\n  const cy = sin_phi * cxp + cos_phi * cyp + (y1 + y2) / 2;\n\n  // Step 4.\n  //\n  // Compute angles (theta1, delta_theta).\n  //\n  const v1x = (x1p - cxp) / rx;\n  const v1y = (y1p - cyp) / ry;\n  const v2x = (-x1p - cxp) / rx;\n  const v2y = (-y1p - cyp) / ry;\n\n  const theta1 = unit_vector_angle(1, 0, v1x, v1y);\n  let delta_theta = unit_vector_angle(v1x, v1y, v2x, v2y);\n\n  if (fs === 0 && delta_theta > 0) {\n    delta_theta -= TAU;\n  }\n  if (fs === 1 && delta_theta < 0) {\n    delta_theta += TAU;\n  }\n\n  return [cx, cy, theta1, delta_theta];\n}\n\n//\n// Approximate one unit arc segment with bézier curves,\n// see http://math.stackexchange.com/questions/873224\n//\nfunction approximate_unit_arc(theta1: number, delta_theta: number) {\n  const alpha = (4 / 3) * Math.tan(delta_theta / 4);\n\n  // // If 90 degree circular arc, use a constant\n  // // as derived from http://spencermortensen.com/articles/bezier-circle\n  // const alpha =\n  //   delta_theta === 1.5707963267948966\n  //     ? 0.551915024494\n  //     : delta_theta === -1.5707963267948966\n  //     ? -0.551915024494\n  //     : (4 / 3) * Math.tan(delta_theta / 4);\n\n  const x1 = Math.cos(theta1);\n  const y1 = Math.sin(theta1);\n  const x2 = Math.cos(theta1 + delta_theta);\n  const y2 = Math.sin(theta1 + delta_theta);\n\n  return [\n    x1,\n    y1,\n    x1 - y1 * alpha,\n    y1 + x1 * alpha,\n    x2 + y2 * alpha,\n    y2 - x2 * alpha,\n    x2,\n    y2\n  ];\n}\n\n// var curves = a2c(\n//   x,\n//   y,\n//   seg[6],x\n//   seg[7],y\n//   seg[4],largeArcFlag\n//   seg[5],sweepFlag\n//   seg[1],rx\n//   seg[2],ry\n//   seg[3],xAxisRotate\n// );\nexport function a2c(\n  x1: number,\n  y1: number,\n  x2: number,\n  y2: number,\n  fa: number,\n  fs: number,\n  rx: number,\n  ry: number,\n  phi: number\n) {\n  const sin_phi = Math.sin((phi * TAU) / 360);\n  const cos_phi = Math.cos((phi * TAU) / 360);\n\n  // Make sure radii are valid\n  //\n  const x1p = (cos_phi * (x1 - x2)) / 2 + (sin_phi * (y1 - y2)) / 2;\n  const y1p = (-sin_phi * (x1 - x2)) / 2 + (cos_phi * (y1 - y2)) / 2;\n\n  if (x1p === 0 && y1p === 0) {\n    // we're asked to draw line to itself\n    return [];\n  }\n\n  if (rx === 0 || ry === 0) {\n    // one of the radii is zero\n    return [];\n  }\n\n  // Compensate out-of-range radii\n  //\n  rx = Math.abs(rx);\n  ry = Math.abs(ry);\n\n  const lambda = (x1p * x1p) / (rx * rx) + (y1p * y1p) / (ry * ry);\n  if (lambda > 1) {\n    rx *= Math.sqrt(lambda);\n    ry *= Math.sqrt(lambda);\n  }\n\n  // Get center parameters (cx, cy, theta1, delta_theta)\n  //\n  const cc = get_arc_center(x1, y1, x2, y2, fa, fs, rx, ry, sin_phi, cos_phi);\n\n  const result = [];\n  let theta1 = cc[2];\n  let delta_theta = cc[3];\n\n  // Split an arc to multiple segments, so each segment\n  // will be less than τ/4 (= 90°)\n  //\n  const segments = Math.max(Math.ceil(Math.abs(delta_theta) / (TAU / 4)), 1);\n\n  // // If 'ang2' == 90.0000000001, then `ratio` will evaluate to\n  // // 1.0000000001. This causes `segments` to be greater than one, which is an\n  // // unecessary split, and adds extra points to the bezier curve. To alleviate\n  // // this issue, we round to 1.0 when the ratio is close to 1.0.\n  // let ratio = Math.abs(delta_theta) / (TAU / 4);\n  // if (Math.abs(1.0 - ratio) < 0.0000001) {\n  //   ratio = 1.0;\n  // }\n  // const segments = Math.max(Math.ceil(ratio), 1);\n\n  delta_theta /= segments;\n\n  for (let i = 0; i < segments; i++) {\n    result.push(approximate_unit_arc(theta1, delta_theta));\n    theta1 += delta_theta;\n  }\n\n  // We have a bezier approximation of a unit circle,\n  // now need to transform back to the original ellipse\n  //\n  return result.map((curve) => {\n    for (let i = 0; i < curve.length; i += 2) {\n      let x = curve[i + 0];\n      let y = curve[i + 1];\n\n      // scale\n      x *= rx;\n      y *= ry;\n\n      // rotate\n      const xp = cos_phi * x - sin_phi * y;\n      const yp = sin_phi * x + cos_phi * y;\n\n      // translate\n      curve[i + 0] = xp + cc[0];\n      curve[i + 1] = yp + cc[1];\n    }\n\n    return curve;\n  });\n}\n\n// for more information of where this math came from visit:\n// http://www.w3.org/TR/SVG11/implnote.html#ArcImplementationNotes\nexport function a2c2(\n  x1: number,\n  y1: number,\n  rx: number,\n  ry: number,\n  angle: number,\n  large_arc_flag: number,\n  sweep_flag: number,\n  x2: number,\n  y2: number,\n  recursive?: number[]\n): number[][] {\n  const _120 = (Math.PI * 120) / 180;\n  const rad = (Math.PI / 180) * (+angle || 0);\n  let res: number[][] = [];\n  let xy;\n  const rotate = function (x: number, y: number, rad: number) {\n    const X = x * Math.cos(rad) - y * Math.sin(rad);\n    const Y = x * Math.sin(rad) + y * Math.cos(rad);\n    return { x: X, y: Y };\n  };\n  let f1: number;\n  let f2: number;\n  let cx: number;\n  let cy: number;\n  if (!recursive) {\n    xy = rotate(x1, y1, -rad);\n    x1 = xy.x;\n    y1 = xy.y;\n    xy = rotate(x2, y2, -rad);\n    x2 = xy.x;\n    y2 = xy.y;\n    const cos = Math.cos((Math.PI / 180) * angle),\n      sin = Math.sin((Math.PI / 180) * angle),\n      x = (x1 - x2) / 2,\n      y = (y1 - y2) / 2;\n    let h = (x * x) / (rx * rx) + (y * y) / (ry * ry);\n    if (h > 1) {\n      h = Math.sqrt(h);\n      rx = h * rx;\n      ry = h * ry;\n    }\n    const rx2 = rx * rx,\n      ry2 = ry * ry,\n      k =\n        (large_arc_flag == sweep_flag ? -1 : 1) *\n        Math.sqrt(\n          Math.abs(\n            (rx2 * ry2 - rx2 * y * y - ry2 * x * x) /\n              (rx2 * y * y + ry2 * x * x)\n          )\n        );\n    cx = (k * rx * y) / ry + (x1 + x2) / 2;\n    cy = (k * -ry * x) / rx + (y1 + y2) / 2;\n    f1 = Math.asin(Number(((y1 - cy) / ry).toFixed(9)));\n    f2 = Math.asin(Number(((y2 - cy) / ry).toFixed(9)));\n\n    f1 = x1 < cx ? Math.PI - f1 : f1;\n    f2 = x2 < cx ? Math.PI - f2 : f2;\n    f1 < 0 && (f1 = Math.PI * 2 + f1);\n    f2 < 0 && (f2 = Math.PI * 2 + f2);\n    if (sweep_flag && f1 > f2) {\n      f1 = f1 - Math.PI * 2;\n    }\n    if (!sweep_flag && f2 > f1) {\n      f2 = f2 - Math.PI * 2;\n    }\n  } else {\n    f1 = recursive[0];\n    f2 = recursive[1];\n    cx = recursive[2];\n    cy = recursive[3];\n  }\n  let df = f2 - f1;\n  if (Math.abs(df) > _120) {\n    const f2old = f2,\n      x2old = x2,\n      y2old = y2;\n    f2 = f1 + _120 * (sweep_flag && f2 > f1 ? 1 : -1);\n    x2 = cx + rx * Math.cos(f2);\n    y2 = cy + ry * Math.sin(f2);\n    res = a2c2(x2, y2, rx, ry, angle, 0, sweep_flag, x2old, y2old, [\n      f2,\n      f2old,\n      cx,\n      cy\n    ]);\n  }\n  df = f2 - f1;\n  const c1 = Math.cos(f1),\n    s1 = Math.sin(f1),\n    c2 = Math.cos(f2),\n    s2 = Math.sin(f2),\n    t = Math.tan(df / 4),\n    hx = (4 / 3) * rx * t,\n    hy = (4 / 3) * ry * t,\n    m1 = [x1, y1],\n    m2 = [x1 + hx * s1, y1 - hy * c1],\n    m3 = [x2 + hx * s2, y2 - hy * c2],\n    m4 = [x2, y2];\n  m2[0] = 2 * m1[0] - m2[0];\n  m2[1] = 2 * m1[1] - m2[1];\n  if (recursive) {\n    return [[...m2, ...m3, ...m4]].concat(res);\n  } else {\n    return [[...m2, ...m3, ...m4]].concat(res).map((r) => {\n      const newres: number[] = [];\n      for (let i = 0, ii = r.length; i < ii; i++) {\n        newres[i] =\n          i % 2 ? rotate(r[i - 1], r[i], rad).y : rotate(r[i], r[i + 1], rad).x;\n      }\n      return newres;\n    });\n  }\n}\n\nexport function q2c(\n  x1: number,\n  y1: number,\n  cx: number,\n  cy: number,\n  x2: number,\n  y2: number\n) {\n  return [\n    x1 / 3 + (2 / 3) * cx,\n    y1 / 3 + (2 / 3) * cy,\n    x2 / 3 + (2 / 3) * cx,\n    y2 / 3 + (2 / 3) * cy,\n    x2,\n    y2\n  ];\n}\n\nexport function l2c(x1: number, y1: number, x2: number, y2: number) {\n  return [x1, y1, x2, y2, x2, y2];\n}\n","/* eslint-disable no-case-declarations */\nimport { extractAllNumbers, generateUUID, toBlob } from \"@zyzgroup/core-common\";\nimport { DOMToBlob, DOMToString } from \"../file\";\nimport { a2c, a2c2, l2c, q2c } from \"./line2c\";\nimport { useAttribute, useClickA } from \"../hooks\";\n\nexport type TSVGParsedPathData = [command: string, ...args: number[]];\n\nexport const SVGParsedPathArgsLength: Record<string, number> = {\n  a: 7, // A rx,ry xAxisRotate LargeArcFlag,SweepFlag x,y\n  c: 6, // C c1x,c1y c2x,c2y x,y\n  s: 4, // S c2x,c2y x,y\n  q: 4, // Q cx,cy x,y\n  t: 2, // T x,y\n  m: 2, // M x,y\n  l: 2, // L x,y\n  h: 1, // H x\n  v: 1, // V y\n  z: 0 // Z\n  // r: 4\n};\n\n// console.log(\n//   DOMSVGUtil.SVGPathDataToD(\n//     DOMSVGUtil.relativeSVGPath(\n//       DOMSVGUtil.parseSVGPath(\n//         \"M17.7722 6.22781C18.0759 6.53155 18.0759 7.02401 17.7722 7.32775L7.32775 17.7722C7.02401 18.0759 6.53155 18.0759 6.22781 17.7722C5.92406 17.4685 5.92407 16.976 6.22781 16.6722L16.6722 6.22781C16.976 5.92406 17.4684 5.92406 17.7722 6.22781Z\"\n//       )\n//     )\n//   )\n// );\n\nexport class DOMSVGUtil {\n  static createSVGElement(\n    tagName = \"path\",\n    attrs?: Record<string, string>\n  ): SVGGeometryElement {\n    const el = document.createElementNS.call(\n      document,\n      \"http://www.w3.org/2000/svg\",\n      tagName\n    ) as SVGGeometryElement;\n    if (attrs) {\n      useAttribute(el, attrs);\n    }\n    return el;\n  }\n\n  static createSvgPath(d: string, id?: string): SVGPathElement {\n    const path = this.createSVGElement(\"path\", { d, id: id || generateUUID() });\n    return path as unknown as SVGPathElement;\n  }\n\n  static downloadFromSVGElement(svgContainer: SVGElement, name = \"shape\") {\n    return useClickA(\n      DOMToBlob(svgContainer as unknown as HTMLElement),\n      `${name}.svg`\n    );\n  }\n\n  static downloadFromSVGString(svgString: string, name = \"shape\") {\n    return useClickA(toBlob(svgString), `${name}.svg`);\n  }\n\n  static getSVGRawStringFromElement(el: HTMLElement) {\n    return DOMToString(el);\n  }\n\n  // https://github.com/dy/is-svg-path\n  // isSVGPath('M0 0L10 20 20 0Z') //true\n  // isSVGPath('M00Z') //false\n  // isSVGPath('xyz') //false\n  static isSVGPath(str: string) {\n    if (typeof str !== \"string\") return false;\n    str = str.trim();\n    // https://www.w3.org/TR/SVG/paths.html#PathDataBNF\n    return (\n      /^[mlhvzaqtcs]\\s*[-+.0-9][^mlhvzaqtcs]+/i.test(str) && /[\\dz]$/i.test(str)\n      // && str.length > 4\n    );\n  }\n\n  static SVGPathDataToD(path: TSVGParsedPathData[]): string {\n    return path\n      .map((item) => {\n        if (!item[0]) {\n          return \"\";\n        }\n        switch (item[0].toLowerCase()) {\n          case \"a\":\n            return `${item[0]} ${item[1]},${item[2]} ${item[3]} ${item[4]},${item[5]} ${item[6]},${item[7]}`;\n          case \"c\":\n            return `${item[0]} ${item[1]},${item[2]} ${item[3]},${item[4]} ${item[5]},${item[6]}`;\n          case \"s\":\n          case \"q\":\n            return `${item[0]} ${item[1]},${item[2]} ${item[3]},${item[4]}`;\n          default:\n            return item[0] + \" \" + item.slice(1).join(\",\");\n        }\n      })\n      .join(\" \");\n  }\n\n  /// parse an svg path data string to `[[command, arg1, arg2, ...], ...]`\n  static parseSVGPath(path: string): TSVGParsedPathData[] {\n    const data: TSVGParsedPathData[] = [];\n    if (!DOMSVGUtil.isSVGPath(path)) {\n      // throw new Error(`parseSVGPath(path = ${path}) is not a SVG path!`);\n      return data;\n    }\n    path.replace(\n      /([mlhvzaqtcs])([^mlhvzaqtcs]*)/gi,\n      (substring: string, command: string, argsString: string): string => {\n        let type = command.toLowerCase();\n        const args: number[] = extractAllNumbers(argsString);\n\n        // overloaded moveTo\n        if (type == \"m\" && args.length > SVGParsedPathArgsLength[type]) {\n          data.push([\n            command,\n            ...args.splice(0, SVGParsedPathArgsLength[type])\n          ]);\n          type = \"l\";\n          command = command == \"m\" ? \"l\" : \"L\";\n        }\n\n        while (args.length) {\n          if (args.length < SVGParsedPathArgsLength[type]) {\n            throw new Error(\n              `parseSVGPath substring:{ ${substring} } command:{ ${command} } args:{ ${args} }`\n            );\n          } else {\n            data.push([\n              command,\n              ...args.splice(0, SVGParsedPathArgsLength[type])\n            ]);\n          }\n        }\n\n        if (type == \"z\") {\n          data.push([command]);\n        }\n\n        return \"\";\n      }\n    );\n    return data;\n  }\n\n  /// https://github.com/jkroso/abs-svg-path\n  static absolutizeSVGPath(path: TSVGParsedPathData[]): TSVGParsedPathData[] {\n    let startX = 0;\n    let startY = 0;\n    let x = 0;\n    let y = 0;\n\n    return path.map(function (seg) {\n      const type = seg[0];\n      const command = type.toUpperCase();\n\n      // is relative\n      if (type != command) {\n        seg[0] = command;\n        switch (type) {\n          case \"a\":\n            seg[6] += x;\n            seg[7] += y;\n            break;\n          case \"v\":\n            seg[1] += y;\n            break;\n          case \"h\":\n            seg[1] += x;\n            break;\n          default:\n            for (let i = 1; i < seg.length; ) {\n              (seg[i++] as number) += x;\n              (seg[i++] as number) += y;\n            }\n        }\n      }\n\n      switch (command) {\n        case \"Z\":\n          x = startX;\n          y = startY;\n          break;\n        case \"H\":\n          x = seg[1];\n          break;\n        case \"V\":\n          y = seg[1];\n          break;\n        case \"M\":\n          x = startX = seg[1];\n          y = startY = seg[2];\n          break;\n        default:\n          x = seg[seg.length - 2] as number;\n          y = seg[seg.length - 1] as number;\n      }\n\n      return seg;\n    });\n  }\n\n  static relativeSVGPath(path: TSVGParsedPathData[]): TSVGParsedPathData[] {\n    let startX = 0;\n    let startY = 0;\n    let x = 0;\n    let y = 0;\n\n    return path.map(function (seg) {\n      const type = seg[0];\n      const command = type.toLowerCase();\n\n      // is absolute\n      if (type != command) {\n        seg[0] = command;\n        switch (type) {\n          case \"A\":\n            seg[6] -= x;\n            seg[7] -= y;\n            break;\n          case \"V\":\n            seg[1] -= y;\n            break;\n          case \"H\":\n            seg[1] -= x;\n            break;\n          default:\n            for (let i = 1; i < seg.length; ) {\n              (seg[i++] as number) -= x;\n              (seg[i++] as number) -= y;\n            }\n        }\n      }\n\n      switch (command) {\n        case \"z\":\n          x = startX;\n          y = startY;\n          break;\n        case \"h\":\n          x += seg[1];\n          break;\n        case \"v\":\n          y += seg[1];\n          break;\n        case \"m\":\n          x += seg[1];\n          y += seg[2];\n          startX += seg[1];\n          startY += seg[2];\n          break;\n        default:\n          x += seg[seg.length - 2] as number;\n          y += seg[seg.length - 1] as number;\n      }\n\n      return seg;\n    });\n  }\n\n  /// 统统变为 CubicBezier\n  /// https://github.com/jkroso/normalize-svg-path\n  static normalizeSVGPath(path: TSVGParsedPathData[]): TSVGParsedPathData[] {\n    const result: TSVGParsedPathData[] = [];\n    let startX = 0;\n    let startY = 0;\n    let x = 0;\n    let y = 0;\n    let quadX = 0;\n    let quadY = 0;\n    let bezierX = 0;\n    let bezierY = 0;\n\n    let prevCommand;\n\n    for (let i = 0, len = path.length; i < len; i++) {\n      let seg = path[i];\n      const command = seg[0];\n\n      switch (command) {\n        case \"M\":\n          startX = seg[1];\n          startY = seg[2];\n          break;\n        case \"A\":\n          const curves = a2c(\n            x,\n            y,\n            seg[6],\n            seg[7],\n            seg[4],\n            seg[5],\n            seg[1],\n            seg[2],\n            seg[3]\n          );\n          // const curves = a2c2(\n          //   x,\n          //   y,\n          //   seg[1],\n          //   seg[2],\n          //   seg[3],\n          //   seg[4],\n          //   seg[5],\n          //   seg[6],\n          //   seg[7]\n          // );\n          if (!curves.length) continue;\n          curves.forEach((curve, j) => {\n            /// a2c\n            const [x0, y0, x1, y1, x2, y2, x3, y3] = curve;\n            /// a2c2\n            // const [x1, y1, x2, y2, x3, y3] = curve;\n            seg = [\"C\", x1, y1, x2, y2, x3, y3];\n            if (j < curves.length - 1) {\n              result.push(seg);\n            }\n          });\n          break;\n        case \"S\":\n          // default control point\n          let cx = x;\n          let cy = y;\n          if (prevCommand == \"C\" || prevCommand == \"S\") {\n            cx += cx - bezierX; // reflect the previous command's control\n            cy += cy - bezierY; // point relative to the current point\n          }\n          seg = [\"C\", cx, cy, seg[1], seg[2], seg[3], seg[4]];\n          break;\n        case \"T\":\n          if (prevCommand == \"Q\" || prevCommand == \"T\") {\n            quadX = x * 2 - quadX; // as with 'S' reflect previous control point\n            quadY = y * 2 - quadY;\n          } else {\n            quadX = x;\n            quadY = y;\n          }\n          seg = [\"C\", ...q2c(x, y, quadX, quadY, seg[1], seg[2])];\n          break;\n        case \"Q\":\n          quadX = seg[1];\n          quadY = seg[2];\n          seg = [\"C\", ...q2c(x, y, seg[1], seg[2], seg[3], seg[4])];\n          break;\n        case \"L\":\n          seg = [\"C\", ...l2c(x, y, seg[1], seg[2])];\n          break;\n        case \"H\":\n          seg = [\"C\", ...l2c(x, y, seg[1], y)];\n          break;\n        case \"V\":\n          seg = [\"C\", ...l2c(x, y, x, seg[1])];\n          break;\n        case \"Z\":\n          seg = [\"C\", ...l2c(x, y, startX, startY)];\n          break;\n      }\n\n      prevCommand = command;\n      x = seg[seg.length - 2] as number;\n      y = seg[seg.length - 1] as number;\n      if (seg.length > 4) {\n        bezierX = seg[seg.length - 4] as number;\n        bezierY = seg[seg.length - 3] as number;\n      } else {\n        bezierX = x;\n        bezierY = y;\n      }\n\n      result.push(seg);\n    }\n\n    return result;\n  }\n\n  /// http://schepers.cc/getting-to-the-point\n  /// Catmull-Rom curves : `R x1,y1 x2,y2 x3,y3`\n  static catmullRom2bezier(crp: number[]): TSVGParsedPathData[] {\n    const d: TSVGParsedPathData[] = [];\n    for (let i = 0, iLen = crp.length; iLen - 2 > i; i += 2) {\n      let p;\n      if (0 == i) {\n        p = [\n          { x: crp[i], y: crp[i + 1] },\n          { x: crp[i], y: crp[i + 1] },\n          { x: crp[i + 2], y: crp[i + 3] },\n          { x: crp[i + 4], y: crp[i + 5] }\n        ];\n      } else if (iLen - 4 == i) {\n        p = [\n          { x: crp[i - 2], y: crp[i - 1] },\n          { x: crp[i], y: crp[i + 1] },\n          { x: crp[i + 2], y: crp[i + 3] },\n          { x: crp[i + 2], y: crp[i + 3] }\n        ];\n      } else {\n        p = [\n          { x: crp[i - 2], y: crp[i - 1] },\n          { x: crp[i], y: crp[i + 1] },\n          { x: crp[i + 2], y: crp[i + 3] },\n          { x: crp[i + 4], y: crp[i + 5] }\n        ];\n      }\n\n      // Catmull-Rom to Cubic Bezier conversion matrix\n      //    0       1       0       0\n      //  -1/6      1      1/6      0\n      //    0      1/6      1     -1/6\n      //    0       0       1       0\n\n      const bp = [\n        { x: p[1].x, y: p[1].y },\n        {\n          x: (-p[0].x + 6 * p[1].x + p[2].x) / 6,\n          y: (-p[0].y + 6 * p[1].y + p[2].y) / 6\n        },\n        {\n          x: (p[1].x + 6 * p[2].x - p[3].x) / 6,\n          y: (p[1].y + 6 * p[2].y - p[3].y) / 6\n        },\n        { x: p[2].x, y: p[2].y }\n      ];\n\n      d.push([\"C\", bp[1].x, bp[1].y, bp[2].x, bp[2].y, bp[3].x, bp[3].y]);\n    }\n\n    return d;\n  }\n\n  // Convert 'Z', 'V' and 'H' segments to 'L' segments\n  static zvhToLSVGPath(path: TSVGParsedPathData[]): TSVGParsedPathData[] {\n    const result: TSVGParsedPathData[] = [];\n    let startPoint: TSVGParsedPathData = [\"L\", 0, 0];\n    let lastPoint: TSVGParsedPathData;\n    for (let i = 0, len = path.length; i < len; i++) {\n      const pt = path[i];\n      switch (pt[0]) {\n        case \"M\":\n          startPoint = [\"L\", pt[1], pt[2]];\n          result.push(pt);\n          break;\n        case \"Z\":\n          result.push(startPoint);\n          break;\n        case \"H\":\n          lastPoint = result[result.length - 1] || [\"L\", 0, 0];\n          result.push([\n            \"L\",\n            pt[1],\n            lastPoint[lastPoint.length - 1]\n          ] as TSVGParsedPathData);\n          break;\n        case \"V\":\n          lastPoint = result[result.length - 1] || [\"L\", 0, 0];\n          result.push([\n            \"L\",\n            lastPoint[lastPoint.length - 2],\n            pt[1]\n          ] as TSVGParsedPathData);\n          break;\n        default:\n          result.push(pt);\n      }\n    }\n    return result;\n  }\n\n  // Expand shorthand curve commands to full versions; mutates the path in place for efficiency\n  // Requires commands have already been converted to absolute versions\n  static longhandSVGPath(path: TSVGParsedPathData[]): TSVGParsedPathData[] {\n    const conversion: Record<string, { to: string; x: number }> = {\n      S: { to: \"C\", x: 3 },\n      T: { to: \"Q\", x: 1 }\n    };\n    let prev;\n    let x1 = 0;\n    let y1 = 0;\n    for (let i = 0, len = path.length; i < len; i++) {\n      const cmd = path[i];\n      const convert = conversion[cmd[0]];\n      if (convert) {\n        cmd[0] = convert.to;\n        if (prev) {\n          if (prev[0] === convert.to) {\n            x1 = 2 * Number(prev[convert.x + 2]) - Number(prev[convert.x]);\n            y1 = 2 * Number(prev[convert.x + 3]) - Number(prev[convert.x + 1]);\n          } else {\n            x1 = Number(prev[prev.length - 2]);\n            y1 = Number(prev[prev.length - 1]);\n          }\n        }\n        cmd.splice(1, 0, x1, y1);\n      }\n      prev = cmd;\n    }\n    return path;\n  }\n}\n\nexport default DOMSVGUtil;\n","import { maxDotNumber } from \"@zyzgroup/core-common\";\nimport { Matrix, Matrix4 } from \"../Matrix\";\nimport { angle, distance, toRadian } from \"../math\";\nimport { YZCanvasContext } from \"../../canvas/YZCanvasContext\";\nimport DOMSVGUtil, { type TSVGParsedPathData } from \"../../svg/DOMSVGUtil\";\nimport { a2c, l2c, q2c } from \"../../svg/line2c\";\nimport L from \"./L\";\nimport CubicBezier from \"./CubicBezier\";\nimport QuadraticBezier from \"./QuadraticBezier\";\nimport Arc from \"./Arc\";\n\n/// 连续的曲线\nexport class PathD {\n  /// cX cY 为相对于自身 (0,0) 点的相对值\n  public cX: number;\n  public cY: number;\n  public x: number;\n  public y: number;\n  public degree: number;\n  public scalarX: number;\n  public scalarY: number;\n\n  /// 绝对值\n  public startPathX = 0;\n  public startPathY = 0;\n  public prevPathX = 0;\n  public prevPathY = 0;\n  public normalizedLines: CubicBezier[] = [];\n\n  // d = \"M0,0\"\n  // d = [['C',1,2,3,4,5,6]]\n  constructor(options?: {\n    d?: string | TSVGParsedPathData[] | PathD;\n    originMatrix?: Matrix | Matrix4 | DOMMatrix;\n    centerX?: number;\n    centerY?: number;\n    x?: number;\n    y?: number;\n    degree?: number;\n    scalar?: number;\n    scalarX?: number;\n    scalarY?: number;\n  }) {\n    this.cX = 0;\n    this.cY = 0;\n    this.x = options?.x || 0;\n    this.y = options?.y || 0;\n    if (\n      typeof options?.centerX == \"number\" &&\n      typeof options?.centerY == \"number\"\n    ) {\n      this.cX = options.centerX - this.x;\n      this.cY = options.centerY - this.y;\n    }\n    this.degree = options?.degree || 0;\n    this.scalarX = 1;\n    this.scalarY = 1;\n    if (options?.scalar !== void 0) {\n      this.scalarX = options.scalar;\n      this.scalarY = options.scalar;\n    }\n    if (options?.scalarX !== void 0) {\n      this.scalarX = options.scalarX;\n    }\n    if (options?.scalarY !== void 0) {\n      this.scalarY = options.scalarY;\n    }\n    this.reset(options?.d, options?.originMatrix);\n  }\n\n  public reset(\n    d?: string | TSVGParsedPathData[] | PathD,\n    originMatrix?: Matrix | Matrix4 | DOMMatrix\n  ) {\n    if (typeof d == \"string\") {\n      this.resetFromSVGPathData(DOMSVGUtil.parseSVGPath(d), originMatrix);\n    } else if (d instanceof PathD) {\n      this.resetFromSVGPathData(d.toSVGPathData(), originMatrix);\n    } else {\n      this.resetFromSVGPathData(d || [], originMatrix);\n    }\n  }\n\n  private resetFromSVGPathData(\n    data: TSVGParsedPathData[],\n    originMatrix?: Matrix | Matrix4 | DOMMatrix\n  ) {\n    this.normalizedLines = [];\n    /// paths 只包含 M 或 C 语句\n    const paths = DOMSVGUtil.normalizeSVGPath(\n      DOMSVGUtil.absolutizeSVGPath(data)\n    );\n    this.prevPathX = this.startPathX = 0;\n    this.prevPathY = this.startPathY = 0;\n    let isResetStart = false;\n    for (let i = 0, count = paths.length; i < count; i++) {\n      const path = paths[i];\n      const command = path[0];\n      if (command == \"M\") {\n        if (!isResetStart) {\n          isResetStart = true;\n          this.startPathX = path[1];\n          this.startPathY = path[2];\n        }\n        this.prevPathX = path[1];\n        this.prevPathY = path[2];\n        continue;\n      }\n      this.appendLine(\n        new CubicBezier({\n          c1x: path[1],\n          c1y: path[2],\n          c2x: path[3],\n          c2y: path[4],\n          toX: path[5],\n          toY: path[6]\n        })\n      );\n    }\n    if (originMatrix) {\n      ({ x: this.startPathX, y: this.startPathY } = originMatrix.transformPoint(\n        {\n          x: this.startPathX,\n          y: this.startPathY\n        }\n      ));\n      ({ x: this.prevPathX, y: this.prevPathY } = originMatrix.transformPoint({\n        x: this.prevPathX,\n        y: this.prevPathY\n      }));\n      this.normalizedLines.forEach((l) => {\n        ({ x: l.x, y: l.y } = originMatrix.transformPoint({ x: l.x, y: l.y }));\n        ({ x: l.c1x, y: l.c1y } = originMatrix.transformPoint({\n          x: l.c1x,\n          y: l.c1y\n        }));\n        ({ x: l.c2x, y: l.c2y } = originMatrix.transformPoint({\n          x: l.c2x,\n          y: l.c2y\n        }));\n        ({ x: l.toX, y: l.toY } = originMatrix.transformPoint({\n          x: l.toX,\n          y: l.toY\n        }));\n      });\n    }\n  }\n\n  static fromPolymorphPoints(points: number[]): PathD {\n    const d = new PathD();\n    d.prevPathX = d.startPathX = points[0] || 0;\n    d.prevPathY = d.startPathY = points[1] || 0;\n    for (let k = 2, count = points.length; k + 5 < count; k += 6) {\n      d.appendLine(\n        new CubicBezier({\n          c1x: points[k],\n          c1y: points[k + 1],\n          c2x: points[k + 2],\n          c2y: points[k + 3],\n          toX: points[k + 4],\n          toY: points[k + 5]\n        })\n      );\n    }\n    return d;\n  }\n\n  static fromLines(lines: L[]): PathD {\n    const d = new PathD();\n    d.prevPathX = d.startPathX = lines[0].x || 0;\n    d.prevPathY = d.startPathY = lines[0].y || 0;\n    for (let i = 0, count = lines.length; i < count; i++) {\n      d.appendLine(lines[i]);\n    }\n    return d;\n  }\n\n  /// 涉及 this.prevPathX + this.prevPathY\n  private appendLine(line: L) {\n    if (line instanceof Arc) {\n      const curves = a2c(\n        this.prevPathX,\n        this.prevPathY,\n        line.toX,\n        line.toY,\n        line.largeArcFlag,\n        line.sweepFlag,\n        line.rx,\n        line.ry,\n        line.xAxisRotate\n      );\n      curves.forEach((curve) => {\n        const [x0, y0, x1, y1, x2, y2, x, y] = curve;\n        this.normalizedLines.push(\n          new CubicBezier({\n            x: this.prevPathX,\n            y: this.prevPathY,\n            c1x: x1,\n            c1y: y1,\n            c2x: x2,\n            c2y: y2,\n            toX: x,\n            toY: y\n          })\n        );\n        this.prevPathX = x;\n        this.prevPathY = y;\n      });\n      return;\n    }\n    let x1, y1, x2, y2, toX, toY;\n    if (line instanceof CubicBezier) {\n      x1 = line.c1x;\n      y1 = line.c1y;\n      x2 = line.c2x;\n      y2 = line.c2y;\n      toX = line.toX;\n      toY = line.toY;\n    } else if (line instanceof QuadraticBezier) {\n      [x1, y1, x2, y2, toX, toY] = q2c(\n        this.prevPathX,\n        this.prevPathY,\n        line.cx,\n        line.cy,\n        line.toX,\n        line.toY\n      );\n    } else {\n      /// L\n      [x1, y1, x2, y2, toX, toY] = l2c(\n        this.prevPathX,\n        this.prevPathY,\n        line.toX,\n        line.toY\n      );\n    }\n    this.normalizedLines.push(\n      new CubicBezier({\n        x: this.prevPathX,\n        y: this.prevPathY,\n        c1x: x1,\n        c1y: y1,\n        c2x: x2,\n        c2y: y2,\n        toX: toX,\n        toY: toY\n      })\n    );\n    this.prevPathX = toX;\n    this.prevPathY = toY;\n  }\n\n  /// 绝对值\n  toSVGPathData(): TSVGParsedPathData[] {\n    const { startPathX, startPathY, normalizedLines } = this.updateTransform();\n    const data: TSVGParsedPathData[] = [];\n    data.push([\"M\", startPathX, startPathY]);\n    for (let i = 0, count = normalizedLines.length; i < count; i++) {\n      data.push(...normalizedLines[i].toSVGPathData());\n    }\n    // data.push([\"z\"]);\n    return data;\n  }\n\n  toSVGPathD(): string {\n    return DOMSVGUtil.SVGPathDataToD(this.toSVGPathData());\n  }\n\n  /// PathD 自己管理 canvas transform\n  toCanvasContext(ctx: YZCanvasContext) {\n    const { startPathX, startPathY, normalizedLines } = this.updateTransform();\n    ctx.beginPath();\n    ctx.moveTo(startPathX, startPathY);\n    normalizedLines.forEach((c) => {\n      c.toCanvasContext(ctx);\n    });\n    // ctx.closePath();\n  }\n\n  /// 绝对值\n  public getBoundingClientRect() {\n    const { normalizedLines } = this.updateTransform();\n    const X: number[] = [];\n    const Y: number[] = [];\n    normalizedLines.forEach((l) => {\n      const rect = l.getBoundingClientRect();\n      X.push(rect.x, rect.x + rect.width);\n      Y.push(rect.y, rect.y + rect.height);\n    });\n    if (X.length == 0 || Y.length == 0) {\n      return { x: 0, y: 0, width: 0, height: 0 };\n    }\n    const xmin = Math.min.apply(0, X);\n    const ymin = Math.min.apply(0, Y);\n    const xmax = Math.max.apply(0, X);\n    const ymax = Math.max.apply(0, Y);\n    return {\n      x: xmin,\n      y: ymin,\n      width: xmax - xmin,\n      height: ymax - ymin\n    };\n  }\n\n  public update(t: {\n    cX?: number;\n    cY?: number;\n    x: number;\n    y: number;\n    degree: number;\n    scalarX: number;\n    scalarY: number;\n  }) {\n    this.cX = typeof t.cX == \"number\" ? t.cX : this.cX;\n    this.cY = typeof t.cY == \"number\" ? t.cY : this.cY;\n    this.x = t.x;\n    this.y = t.y;\n    this.degree = t.degree;\n    this.scalarX = t.scalarX;\n    this.scalarY = t.scalarY;\n  }\n\n  private updateTransform() {\n    /// 移动的是坐标系\n    /// the order of these are important\n    const m = new Matrix();\n\n    /// followMouse 不对\n    // m.translate(\n    //   this.x - this.prevX + this.prevCX,\n    //   this.y - this.prevY + this.prevCY\n    // );\n    // m.scale(1 / this.prevScalarX, 1 / this.prevScalarY);\n    // m.rotate(-this.prevDegree);\n    // m.translate(this.cX - this.prevCX, this.cY - this.prevCY);\n    // m.rotate(this.degree);\n    // m.scale(this.scalarX, this.scalarY);\n    // m.translate(-this.cX, -this.cY);\n\n    /// 连续精度影响 不对\n    // m.scale(\n    //   this.scalarX / this.prevScalarX,\n    //   this.scalarY / this.prevScalarY,\n    //   this.cX + this.x,\n    //   this.cY + this.y\n    // );\n    // m.rotate(this.degree - this.prevDegree, this.cX + this.x, this.cY + this.y);\n    // m.translate(this.x - this.prevX, this.y - this.prevY);\n\n    /// 连续精度影响 不对\n    // m.translate(this.x + this.cX, this.y + this.cY);\n    // m.scale(this.scalarX / this.prevScalarX, this.scalarY / this.prevScalarY);\n    // m.rotate(this.degree - this.prevDegree);\n    // m.translate(-this.prevX - this.cX, -this.prevY - this.cY);\n\n    m.translate(this.x + this.cX, this.y + this.cY);\n    m.rotate(this.degree);\n    m.scale(this.scalarX, this.scalarY);\n    m.translate(-this.cX, -this.cY);\n\n    if (!m.isIdentity) {\n      let startPathX = this.startPathX;\n      let startPathY = this.startPathY;\n      ({ x: startPathX, y: startPathY } = m.transformPoint({\n        x: startPathX,\n        y: startPathY\n      }));\n      const normalizedLines: CubicBezier[] = [];\n      this.normalizedLines.forEach((l) => {\n        let x = l.x;\n        let y = l.y;\n        let c1x = l.c1x;\n        let c1y = l.c1y;\n        let c2x = l.c2x;\n        let c2y = l.c2y;\n        let toX = l.toX;\n        let toY = l.toY;\n        ({ x: x, y: y } = m.transformPoint({ x: x, y: y }));\n        ({ x: c1x, y: c1y } = m.transformPoint({ x: c1x, y: c1y }));\n        ({ x: c2x, y: c2y } = m.transformPoint({ x: c2x, y: c2y }));\n        ({ x: toX, y: toY } = m.transformPoint({ x: toX, y: toY }));\n        normalizedLines.push(\n          new CubicBezier({ x, y, c1x, c1y, c2x, c2y, toX, toY })\n        );\n      });\n      return {\n        startPathX,\n        startPathY,\n        normalizedLines\n      };\n    } else {\n      return {\n        startPathX: this.startPathX,\n        startPathY: this.startPathY,\n        normalizedLines: this.normalizedLines\n      };\n    }\n  }\n\n  /// returns length in pixels\n  getTotalLength(): number {\n    const { normalizedLines } = this.updateTransform();\n    /// 实际值：1718.289461119151\n    return normalizedLines.reduce((acc, l) => (acc += l.length()), 0);\n    /// 实际值：1718.2906494140625\n    // const el = DOMSVGUtil.createSvgPath(this.toSVGPathD());\n    // return el.getTotalLength();\n  }\n\n  getPointAtLength(length: number): {\n    x: number;\n    y: number;\n    alpha: number; // degree: angle of derivative\n  } {\n    const { normalizedLines } = this.updateTransform();\n    /// 实际值：{x: 69.12001660070015, y: 139.8368628028231}\n    let len = 0;\n    const linesCount = normalizedLines.length;\n    for (let i = 0; i < linesCount; i++) {\n      const p = normalizedLines[i];\n      const l = p.length();\n      if (len + l >= length) {\n        return p.getPointAtSegmentLength(length - len);\n      }\n      len += l;\n    }\n    return normalizedLines[linesCount - 1].getPointAtSegmentLength(1);\n    /// 实际值：{x: 69.12151336669922, y: 139.8350830078125}\n    // const el = DOMSVGUtil.createSvgPath(this.toSVGPathD());\n    // return el.getPointAtLength(length);\n  }\n\n  /// 与 getPointAtLength 类似\n  /// t (0.0 to 1.0) : The fraction of the overall duration of the path\n  interpolate(t: number): { x: number; y: number } {\n    const { startPathX, startPathY, normalizedLines } = this.updateTransform();\n    const linesCount = normalizedLines.length;\n    if (linesCount === 0) {\n      return { x: startPathX, y: startPathY };\n    } else if (linesCount === 1) {\n      return normalizedLines[0].interpolate(t);\n    } else {\n      let ratio = t * linesCount;\n      let path = normalizedLines[0];\n      ratio--;\n      if (ratio > 1) {\n        for (let i = 1; i < linesCount; i++) {\n          path = normalizedLines[i];\n          if (ratio > 1) {\n            ratio -= 1;\n          } else {\n            break;\n          }\n        }\n      }\n      return path.interpolate(ratio);\n    }\n  }\n\n  /// from | to  : 0 ~ 1\n  getSubpath(from: number, to: number): PathD {\n    if (this.getTotalLength() - to < 1e-6) {\n      return this.getSubpathsAtLength(this, from);\n    } else {\n      const a = this.getSubpathsAtLength(this, to, 1);\n      return from ? this.getSubpathsAtLength(a, from) : a;\n    }\n  }\n\n  getSubpathsAtLength(path: PathD, length: number, onlystart?: number): PathD {\n    const { startPathX, startPathY, normalizedLines } = path.updateTransform();\n    /// 从 0 到 length 的部分\n    let start: PathD | null = null;\n    let len = 0;\n    // const sp = new PathD({ x: path.x, y: path.y });\n    const sp = new PathD();\n    sp.prevPathX = sp.startPathX = startPathX;\n    sp.prevPathY = sp.startPathY = startPathY;\n    for (let i = 0, ii = normalizedLines.length; i < ii; i++) {\n      const p = normalizedLines[i];\n      const l = p.length();\n      if (len + l > length) {\n        if (!start) {\n          const point = p.getPointAtSegmentLength(length - len);\n          sp.appendLine(\n            new CubicBezier({\n              c1x: point.start.x,\n              c1y: point.start.y,\n              c2x: point.m.x,\n              c2y: point.m.y,\n              toX: point.x,\n              toY: point.y\n            })\n          );\n          if (onlystart) {\n            return sp;\n          }\n          start = sp;\n          /// 从 length 到 end 的部分\n          // sp.prevPathX = point.x;\n          // sp.prevPathY = point.y;\n          sp.appendLine(\n            new CubicBezier({\n              c1x: point.n.x,\n              c1y: point.n.y,\n              c2x: point.end.x,\n              c2y: point.end.y,\n              toX: p.x,\n              toY: p.y\n            })\n          );\n          len += l;\n          continue;\n        }\n      }\n      len += l;\n      sp.appendLine(p);\n    }\n    // sp.updateTransform();\n    return sp;\n  }\n\n  /// drag along path\n  closestPoint(\n    pointX: number,\n    pointY: number\n  ): {\n    point: {\n      x: number;\n      y: number;\n    };\n    rotation: number;\n    distance: number;\n  } {\n    const pathLength = this.getTotalLength();\n    let best = { x: pointX, y: pointY };\n    let bestLength = 0;\n    let bestDistance = Infinity;\n    let precision = 8;\n\n    // linear scan for coarse approximation\n    for (\n      let scanLength = 0;\n      scanLength <= pathLength;\n      scanLength += precision\n    ) {\n      const scan = this.getPointAtLength(scanLength);\n      const scanDistance = Math.pow(\n        distance(scan.x, scan.y, pointX, pointY),\n        2\n      );\n      if (scanDistance < bestDistance) {\n        best = scan;\n        bestLength = scanLength;\n        bestDistance = scanDistance;\n      }\n    }\n\n    // binary search for precise estimate\n    precision /= 2;\n    while (precision > 0.5) {\n      const beforeLength = bestLength - precision;\n      const before = this.getPointAtLength(beforeLength);\n      const beforeDistance = Math.pow(\n        distance(before.x, before.y, pointX, pointY),\n        2\n      );\n      const afterLength = bestLength + precision;\n      const after = this.getPointAtLength(afterLength);\n      const afterDistance = Math.pow(\n        distance(after.x, after.y, pointX, pointY),\n        2\n      );\n      if (beforeLength >= 0 && beforeDistance < bestDistance) {\n        best = before;\n        bestLength = beforeLength;\n        bestDistance = beforeDistance;\n      } else if (afterLength <= pathLength && afterDistance < bestDistance) {\n        best = after;\n        bestLength = afterLength;\n        bestDistance = afterDistance;\n      } else {\n        precision /= 2;\n      }\n    }\n\n    const p = this.getPointAtLength(\n      bestLength + (bestLength === pathLength ? -0.1 : 0.1)\n    );\n\n    return {\n      point: best,\n      rotation:\n        bestLength >= pathLength\n          ? angle(p.x, p.y, best.x, best.y)\n          : angle(best.x, best.y, p.x, p.y),\n      distance: Math.sqrt(bestDistance)\n    };\n  }\n\n  get polymorphPoints(): number[] {\n    const { startPathX, startPathY, normalizedLines } = this.updateTransform();\n    return [startPathX, startPathY].concat(\n      normalizedLines.reduce(\n        (acc, l) => acc.concat([l.c1x, l.c1y, l.c2x, l.c2y, l.toX, l.toY]),\n        [] as number[]\n      )\n    );\n  }\n\n  perimeterPoints(): number {\n    const pts = this.polymorphPoints;\n    const n = pts.length;\n    let x2 = pts[n - 2];\n    let y2 = pts[n - 1];\n    let p = 0;\n    for (let i = 0; i < n; i += 6) {\n      p += distance(pts[i], pts[i + 1], x2, y2);\n      x2 = pts[i];\n      y2 = pts[i + 1];\n    }\n    return Math.floor(p);\n  }\n\n  expendFill(totalLength: number): TSVGParsedPathData[] {\n    const ns = this.polymorphPoints;\n    const nsLength = ns.length;\n    let needAdded = totalLength - nsLength;\n    const ratio = Math.ceil(totalLength / nsLength);\n    const points: TSVGParsedPathData[] = [];\n    points.push([\"M\", ns[0], ns[1]]);\n    let k = 2;\n    while (k + 5 <= nsLength - 1) {\n      const c1x = ns[k++];\n      const c1y = ns[k++];\n      const c2x = ns[k++];\n      const c2y = ns[k++];\n      const x = ns[k++];\n      const y = ns[k++];\n      points.push([\"C\", c1x, c1y, c2x, c2y, x, y]);\n      let f = 0;\n      while (f < ratio && needAdded > 0) {\n        points.push([\"C\", x, y, x, y, x, y]);\n        needAdded -= 6;\n        f++;\n      }\n    }\n    return points;\n  }\n\n  static mixPoints(a: number[], b: number[], o: number): number[] {\n    const alen = a.length;\n    const results = new Array(alen);\n    for (let i = 0; i < alen; i++) {\n      results[i] = maxDotNumber(a[i] + (b[i] - a[i]) * o, 6);\n    }\n    return results;\n  }\n\n  /// offset : 0 ~ 1\n  static getPathInterpolator(\n    left: TSVGParsedPathData[],\n    right: TSVGParsedPathData[]\n  ): (offset: number) => TSVGParsedPathData[] {\n    return (offset: number) => {\n      if (Math.abs(offset - 0) < Number.EPSILON) {\n        // return DOMSVGUtil.SVGPathDataToD(left);\n        return left;\n      }\n      if (Math.abs(offset - 1) < Number.EPSILON) {\n        // return DOMSVGUtil.SVGPathDataToD(right);\n        return right;\n      }\n      const path = PathD.fromPolymorphPoints(\n        PathD.mixPoints(\n          new PathD({ d: left }).polymorphPoints,\n          new PathD({ d: right }).polymorphPoints,\n          offset\n        )\n      );\n      return path.toSVGPathData();\n    };\n  }\n}\n\nexport default PathD;\n","import {\n  generateUUID,\n  deepClone,\n  toKebab,\n  EventBus,\n  EventBusListeners,\n  extractAllNumbers,\n  maxDotNumber,\n  reactive,\n  watchEffect,\n  parseNumber,\n  shallowClone,\n  newConstructor\n  // saveReactiveState,\n  // restoreReactiveState,\n  // getReactiveState\n} from \"@zyzgroup/core-common\";\nimport { distance, angle, polar, toDegree, toRadian } from \"./math\";\nimport { TSVGParsedPathData } from \"../svg/DOMSVGUtil\";\nimport { YZCanvasContext } from \"../canvas/YZCanvasContext\";\nimport { PathD } from \"./line/\";\nimport { Matrix } from \"./Matrix\";\nimport { Timeline, TweenRawOptions, TweenValue } from \"../animate\";\n\nexport type TShapeOptions = {\n  d?: string | TSVGParsedPathData[] | PathD;\n  originMatrix?: Matrix;\n\n  independentTransformInGroup?: boolean;\n\n  /// 坐标系原点\n  /// options 中为相对于画布 (0,0) 点的绝对值\n  /// this    中为相对于自身 (0,0) 点的相对值\n  centerX?: number;\n  centerY?: number;\n\n  // translate\n  x?: number;\n  y?: number;\n\n  // rotate\n  degree?: number;\n\n  // scale\n  scalar?: number;\n  scalarX?: number;\n  scalarY?: number;\n\n  diffXInGroup?: number;\n  diffYInGroup?: number;\n  diffDegreeInGroup?: number;\n  diffScalarXInGroup?: number;\n  diffScalarYInGroup?: number;\n\n  // 速度\n  vx?: number;\n  vy?: number;\n\n  // 加速度\n  ax?: number;\n  ay?: number;\n\n  // 重量\n  mass?: number;\n\n  /// 样式属性\n  attrs?: Record<string, string | CanvasGradient>;\n\n  /// 是否绘制\n  isShow?: boolean;\n\n  /// 是否可拖拽\n  enableDrag?: boolean;\n  alongPath?: PathD;\n\n  /// 是否鼠标放开后运动到target\n  targetToAfterDragFree?: { targetX: number; targetY: number; easing?: number };\n\n  /// 是否跟随mouse移动而移动\n  followMouse?: boolean;\n\n  /// 是否绘制行军蚁边框\n  strokeArmyAnts?: boolean;\n};\n\nexport interface ShapeEventBusListeners extends EventBusListeners {\n  draging(dx: number, dy: number, excludeShapeInGroup?: Shape): void;\n  clicked(shape: Shape): void;\n}\n\nexport type TShapeRunOptions = {\n  gravity?: number; // 重力常量，例如 0.1\n  friction?: number; // 摩擦系数常量，例如 1\n};\nexport type TShapeRunEasingOptions = TShapeRunOptions & {\n  easing?: number; // 例如 0.05\n};\nexport type TShapeRunSpringOptions = TShapeRunOptions & {\n  spring?: number; // 例如 0.03\n};\n\nexport class Shape extends EventBus<ShapeEventBusListeners> {\n  // [index: string | number | symbol]: any;\n\n  public id: string;\n  public originD?: string | TSVGParsedPathData[] | PathD;\n  public originMatrix?: Matrix;\n\n  public independentTransformInGroup: boolean;\n\n  public forceCXY = false;\n\n  /// 相对于自身 (0,0) 点的相对值\n  public cX: number;\n  public cY: number;\n\n  public x: number;\n  public y: number;\n\n  public degree: number;\n\n  public scalarX: number;\n  public scalarY: number;\n\n  public diffXInGroup: number;\n  public diffYInGroup: number;\n  public diffDegreeInGroup: number;\n  public diffScalarXInGroup: number;\n  public diffScalarYInGroup: number;\n\n  public vx: number;\n  public vy: number;\n  public ax: number;\n  public ay: number;\n  public mass: number;\n\n  private attrs: Record<string, string | CanvasGradient>;\n\n  public enableDrag: boolean;\n  public alongPath?: PathD;\n\n  public isDragging = false;\n  public isMouseIn = false;\n\n  public targetToAfterDragFree?: {\n    targetX: number;\n    targetY: number;\n    easing?: number;\n  };\n\n  public followMouse: boolean;\n\n  public strokeArmyAnts: boolean;\n  public strokeArmyAntsOffset = 0;\n  public strokeDashTotalLength = 0;\n\n  public isShow = true;\n  public el?: HTMLElement | SVGElement;\n\n  public pathd?: PathD;\n  public usePathDtoCanvasContext = false;\n\n  public parent?: Shape;\n  public shapes: Shape[] = [];\n\n  constructor(options?: TShapeOptions) {\n    super();\n\n    this.id = generateUUID();\n    if (options?.d) {\n      this.originD = options?.d;\n    }\n    if (options?.originMatrix) {\n      this.originMatrix = options.originMatrix;\n    }\n\n    this.independentTransformInGroup =\n      typeof options?.independentTransformInGroup == \"boolean\"\n        ? options.independentTransformInGroup\n        : false;\n\n    this.x = options?.x || 0;\n    this.y = options?.y || 0;\n\n    this.cX = 0;\n    this.cY = 0;\n    if (\n      typeof options?.centerX == \"number\" &&\n      typeof options?.centerY == \"number\"\n    ) {\n      this.forceSetCXY(options.centerX - this.x, options.centerY - this.y);\n    }\n\n    this.degree = options?.degree || 0;\n\n    this.scalarX = 1;\n    this.scalarY = 1;\n    if (options?.scalar !== void 0) {\n      this.scalarX = options.scalar;\n      this.scalarY = options.scalar;\n    }\n    if (options?.scalarX !== void 0) {\n      this.scalarX = options.scalarX;\n    }\n    if (options?.scalarY !== void 0) {\n      this.scalarY = options.scalarY;\n    }\n\n    this.diffXInGroup = options?.diffXInGroup || 0;\n    this.diffYInGroup = options?.diffYInGroup || 0;\n    this.diffDegreeInGroup = options?.diffDegreeInGroup || 0;\n    this.diffScalarXInGroup = options?.diffScalarXInGroup || 1;\n    this.diffScalarYInGroup = options?.diffScalarYInGroup || 1;\n\n    this.vx = options?.vx || 0;\n    this.vy = options?.vy || 0;\n    this.ax = options?.ax || 0;\n    this.ay = options?.ay || 0;\n    this.mass = options?.mass || 1;\n    this.attrs = {\n      // \"paint-order\": \"markers stroke fill\", // 先 stroke 再 fill\n      // \"paint-order\": \"fill stroke markers\", // default\n      stroke: \"none\",\n      fill: \"none\"\n      // \"pointerEvents\": \"none\",\n    };\n    if (options?.attrs) {\n      this.setAttr(options?.attrs);\n    }\n    this.enableDrag = options?.enableDrag || false;\n    this.alongPath = options?.alongPath;\n    this.targetToAfterDragFree = options?.targetToAfterDragFree;\n    this.followMouse = options?.followMouse || false;\n    this.isShow = typeof options?.isShow == \"boolean\" ? options?.isShow : true;\n    this.strokeArmyAnts = options?.strokeArmyAnts || false;\n\n    if (this.strokeArmyAnts) {\n      const sourceDashArray = this.getAttr(\"stroke-dasharray\", \"4 4\");\n      this.setAttr(\"stroke-dasharray\", sourceDashArray);\n      this.strokeDashTotalLength = extractAllNumbers(\n        sourceDashArray as string\n      ).reduce((acc, d) => acc + d, 0);\n    }\n\n    /// 父类调用时，子类 this.toSVGPathData() 有些值可能还未初始化\n    /// clone() 对象暂时无法执行下面方法！\n    // nextTick(() => {\n    //   this.pathd = this.initPathD();\n    // });\n\n    const proxy = reactive(this);\n    return proxy;\n  }\n\n  /// 强制设置 坐标系原点\n  public forceSetCXY(cX: number, cY: number) {\n    this.cX = cX;\n    this.cY = cY;\n    this.forceCXY = true;\n  }\n\n  /// 子类可覆盖\n  public shapeInit() {\n    // watchEffect(() => {});\n  }\n\n  /// 统一初始化 pathd\n  public initPathD(): PathD {\n    if (!this.pathd) {\n      /// 初始化\n      this.pathd = new PathD();\n      /// Shape其他属性改变，涉及到 pathd.normalizedLines 时，自动更新\n      watchEffect(() => {\n        this.pathd?.reset(\n          this.originD || this.toSVGPathData(),\n          this.originMatrix\n        );\n      });\n      if (this.pathd && !this.forceCXY) {\n        /// 改变 默认坐标系原点 为自身中心点\n        const rect =\n          this.shapes.length == 0\n            ? this.pathd.getBoundingClientRect()\n            : this.getBoundingClientRect();\n        // const rect = this.getBoundingClientRect();\n        if (rect) {\n          this.pathd.cX = this.cX = rect.x + rect.width / 2 - this.pathd.x;\n          this.pathd.cY = this.cY = rect.y + rect.height / 2 - this.pathd.y;\n          // console.log(\"shape\", rect, this.cX, this.cY);\n        }\n      }\n      this.shapeInit();\n    }\n    return this.pathd;\n  }\n\n  public frameStart(mouse?: { x: number; y: number }): void {\n    // this.pathd = this.initPathD();\n  }\n\n  public frameUpdate(\n    mouse?: { x: number; y: number },\n    ctx?: YZCanvasContext\n  ): void {\n    /// 同步 this.pathd 属性\n    this.pathd = this.initPathD();\n    this.pathd.update(this);\n    /// 绘制行军蚁边框\n    if (this.strokeArmyAnts) {\n      if (!this.isMouseIn) {\n        this.setAttr(\"stroke-dashoffset\", String(this.strokeArmyAntsOffset++));\n        if (this.strokeArmyAntsOffset > this.strokeDashTotalLength) {\n          this.strokeArmyAntsOffset = 0;\n        }\n      }\n    }\n  }\n\n  public frameEnd(mouse?: { x: number; y: number }): void {\n    ///\n  }\n\n  /// Shape SVG 使用 PathD transform 系统，使用相对值\n  /// 子类一定要覆盖 toSVGPathData ！\n  /// 唯一例外是 group ，可以不覆盖！\n  /// translate() rotate() scale() 等 transfrom 交给 PathD 处理， YZSVG 不处理\n  /// 属性值自己保存\n  public toSVGPathData(): TSVGParsedPathData[] {\n    // return [[\"m\", 0, 0]];\n    return [];\n  }\n\n  /// 子类不要覆盖 toSVGPathD ！\n  /// 供 YZSVG 调用\n  public toSVGPathD(): string {\n    return this.pathd?.toSVGPathD() || \"\";\n  }\n\n  /// Shape Canvas 使用 PathD transform 系统 或 原生canvas系统\n  /// 如果子类没有覆盖 toCanvasContext , 则默认使用 PathD 的 toCanvasContext\n  ///   - translate() rotate() scale() 等 transfrom 交给 PathD 处理，YZCanvas 不处理\n  ///   - canvas.ctx.createLinearGradient 使用绝对值\n  /// 如果子类覆盖 toCanvasContext , 则使用 原生canvas系统\n  ///   - translate() rotate() scale() 等 transfrom 交给 YZCanvas 处理\n  ///   - canvas.ctx.createLinearGradient 使用相对值\n  /// 不包含 fill() 及 stroke()\n  /// 属性值自己保存\n  public toCanvasContext(\n    ctx: YZCanvasContext\n    // ctx: CanvasRenderingContext2D\n    // | WebGLRenderingContext\n    // | WebGL2RenderingContext\n    // | GPUCanvasContext\n    // | ImageBitmapRenderingContext\n  ): void {\n    this.usePathDtoCanvasContext = true;\n    this.pathd?.toCanvasContext(ctx);\n  }\n\n  /// 目前 仅 Text 无法转换为 PathD, 也就无 getBoundingClientRect\n  /// 子类可覆盖\n  /// 绝对值\n  public getBoundingClientRect(): {\n    x: number;\n    y: number;\n    width: number;\n    height: number;\n  } | null {\n    return this.pathd?.getBoundingClientRect() || null;\n  }\n\n  /// 绝对值\n  public get center(): { x: number; y: number } {\n    const rect = this.getBoundingClientRect();\n    const c = { x: this.x, y: this.y };\n    if (rect) {\n      c.x = rect.x + rect.width / 2;\n      c.y = rect.y + rect.height / 2;\n    }\n    return c;\n  }\n\n  public trim() {\n    if (this.parent) {\n      return;\n    }\n    const rect = this.getBoundingClientRect();\n    if (!rect) {\n      return;\n    }\n    this.shapes.forEach((s) => {\n      const originMatrix = s.originMatrix\n        ? s.originMatrix.clone()\n        : new Matrix();\n      originMatrix.translate(-rect.x + s.x, -rect.y + s.y);\n      s.originMatrix = originMatrix; /// set 引发 自动 watchEffect\n    });\n    const originMatrix = this.originMatrix\n      ? this.originMatrix.clone()\n      : new Matrix();\n    originMatrix.translate(-rect.x + this.x, -rect.y + this.y);\n    this.originMatrix = originMatrix; /// set 引发 自动 watchEffect\n  }\n\n  public isPointInPath(\n    x: number,\n    y: number,\n    ctx: YZCanvasContext | SVGSVGElement\n  ): boolean {\n    if (ctx instanceof YZCanvasContext) {\n      return ctx.isPointInPath(new Path2D(this.toSVGPathD()), x, y);\n    }\n    /// 性能差\n    let point;\n    try {\n      point = new SVGPoint(x, y);\n    } catch (e) {\n      // fallback for browsers that don't support SVGPoint as an argument\n      point = ctx.createSVGPoint();\n      point.x = x;\n      point.y = y;\n    }\n    if (this.el instanceof SVGGeometryElement) {\n      return this.el.isPointInFill(point);\n    } else {\n      const rect = this.getBoundingClientRect();\n      if (rect) {\n        return (\n          x >= rect.x &&\n          x <= rect.x + rect.width &&\n          y >= rect.y &&\n          y <= rect.y + rect.height\n          /// UNSUCCESS\n          // && PathD.interPathHelper(\n          //   this.toSVGPathData(),\n          //   DOMSVGUtil.normalizeSVGPath([\n          //     [\"M\", x, y],\n          //     [\"H\", rect.x + rect.width + 10]\n          //     // [\"l\", rect.width + 10, Math.random()]\n          //   ])\n          // ).length %\n          //   2 ==\n          //   1\n        );\n      }\n    }\n    return false;\n  }\n\n  public isPointInStroke(\n    x: number,\n    y: number,\n    ctx: YZCanvasContext | SVGSVGElement\n  ): boolean {\n    if (ctx instanceof YZCanvasContext) {\n      return ctx.isPointInStroke(new Path2D(this.toSVGPathD()), x, y);\n    }\n    /// 性能差\n    let point;\n    try {\n      point = new SVGPoint(x, y);\n    } catch (e) {\n      // fallback for browsers that don't support SVGPoint as an argument\n      point = ctx.createSVGPoint();\n      point.x = x;\n      point.y = y;\n    }\n    if (this.el instanceof SVGGeometryElement) {\n      return this.el.isPointInStroke(point);\n    }\n    return false;\n    /// UNDO: node-canvas return undefined\n  }\n\n  public clone() {\n    // return deepClone(this);\n    return newConstructor(this).copy(this);\n    // return shallowClone(this).copy(this);\n  }\n\n  public copy(shape: Shape) {\n    this.id = shape.id;\n    this.originD = shape.originD;\n    this.originMatrix = shape.originMatrix;\n    this.independentTransformInGroup = shape.independentTransformInGroup;\n    this.x = shape.x;\n    this.y = shape.y;\n    this.cX = shape.cX;\n    this.cY = shape.cY;\n    this.degree = shape.degree;\n    this.scalarX = shape.scalarX;\n    this.scalarY = shape.scalarY;\n    this.diffXInGroup = shape.diffXInGroup;\n    this.diffYInGroup = shape.diffYInGroup;\n    this.diffDegreeInGroup = shape.diffDegreeInGroup;\n    this.diffScalarXInGroup = shape.diffScalarXInGroup;\n    this.diffScalarYInGroup = shape.diffScalarYInGroup;\n    this.vx = shape.vx;\n    this.vy = shape.vy;\n    this.ax = shape.ax;\n    this.ay = shape.ay;\n    this.mass = shape.mass;\n    this.attrs = {\n      ...shape.attrs\n    };\n    this.enableDrag = shape.enableDrag;\n    this.alongPath = shape.alongPath;\n    this.targetToAfterDragFree = shape.targetToAfterDragFree;\n    this.followMouse = shape.followMouse;\n    this.isShow = shape.isShow;\n    this.strokeArmyAnts = shape.strokeArmyAnts;\n    this.strokeDashTotalLength = shape.strokeDashTotalLength;\n    return this;\n  }\n\n  public save() {\n    /// toRaw Proxy\n    // saveReactiveState(this.raw);\n    // console.log(\"save\", this.raw, getReactiveState(this.raw));\n  }\n\n  public restore() {\n    /// toRaw Proxy\n    // restoreReactiveState(this.raw);\n    // console.log(\"restore\", this.raw, getReactiveState(this.raw));\n  }\n\n  public setAttr(obj: Record<string, string | CanvasGradient>): void;\n  public setAttr(name: string, value: string | CanvasGradient): void;\n  public setAttr(\n    nameOrObj: string | Record<string, string | CanvasGradient>,\n    value?: string | CanvasGradient\n  ): void {\n    if (typeof nameOrObj !== \"string\") {\n      Object.assign(\n        this.attrs,\n        Object.fromEntries(\n          Object.entries(nameOrObj).map(([k, v]) => {\n            return [toKebab(k), v];\n          })\n        )\n      );\n    } else {\n      if (value) {\n        this.attrs[toKebab(nameOrObj)] = value;\n      }\n    }\n  }\n\n  public getAttr(\n    name: string,\n    defaultValue: string | CanvasGradient\n  ): string | CanvasGradient;\n  public getAttr(name: string): string | CanvasGradient | undefined;\n  public getAttr(\n    name: string,\n    defaultValue?: string | CanvasGradient\n  ): string | CanvasGradient | undefined {\n    return this.attrs[name] || this.attrs[toKebab(name)] || defaultValue;\n  }\n\n  public getAttrs(): Record<string, string | CanvasGradient> {\n    return this.attrs;\n  }\n\n  public hasAttr(name: string): boolean {\n    return !!this.attrs[name] || !!this.attrs[toKebab(name)];\n  }\n\n  public distance(target: { x: number; y: number }): number {\n    return distance(this.x, this.y, target.x, target.y);\n  }\n\n  public rotateTo(target: { x: number; y: number }) {\n    this.degree = toDegree(angle(this.x, this.y, target.x, target.y));\n  }\n\n  public followTo(target: { x: number; y: number }, length = 3) {\n    this.rotateTo(target);\n    const { dx: vx, dy: vy } = polar(toRadian(this.degree), length);\n    this.vx = vx;\n    this.vy = vy;\n    this.run();\n  }\n\n  public followAccelerationTo(target: { x: number; y: number }, length = 0.05) {\n    this.rotateTo(target);\n    const { dx: ax, dy: ay } = polar(toRadian(this.degree), length);\n    this.ax = ax;\n    this.ay = ay;\n    this.run();\n  }\n\n  /// 碰撞检测\n  public checkCollision(target: Shape) {\n    /// UNDO\n  }\n\n  /// 回弹\n  public checkWall(options: {\n    wall: { x: number; y: number; width: number; height: number };\n    bounce?: number;\n  }) {\n    /// UNDO\n  }\n\n  /// 物体之间引力\n  public gravitateTo(target: Shape) {\n    const dx = target.x - this.x;\n    const dy = target.y - this.y;\n    const distSQ = dx * dx + dy * dy;\n    const dist = Math.sqrt(distSQ);\n    const force = (this.mass * target.mass) / distSQ;\n    const ax = (force * dx) / dist;\n    const ay = (force * dy) / dist;\n    this.vx += ax / this.mass;\n    this.vy += ay / this.mass;\n    target.vx -= ax / target.mass;\n    target.vy -= ay / target.mass;\n  }\n\n  public run(options?: TShapeRunOptions) {\n    // 加速度\n    this.vx += this.ax;\n    this.vy += this.ay;\n\n    // 重力\n    const gravity = parseNumber(options?.gravity, 0);\n    this.vy += gravity;\n\n    // 摩擦力方式一\n    // const friction = parseNumber(options?.friction, 0);\n    // if (friction > 0) {\n    //   const radian = Math.atan2(this.vy, this.vx);\n    //   let speed = Math.sqrt(this.vx * this.vx + this.vy * this.vy);\n    //   if (speed > friction) {\n    //     speed -= friction;\n    //   } else {\n    //     speed = 0;\n    //   }\n    //   this.vx = Math.cos(radian) * speed;\n    //   this.vy = Math.sin(radian) * speed;\n    // }\n\n    // 摩擦力方式二\n    const friction = parseNumber(options?.friction, 1);\n    this.vx *= friction;\n    this.vy *= friction;\n\n    this.x += this.vx;\n    this.y += this.vy;\n  }\n\n  public runEaseTo(\n    target: { x: number; y: number },\n    options?: TShapeRunEasingOptions\n  ) {\n    const easing = parseNumber(options?.easing, 0.05);\n    const dx = target.x - this.cX - this.x;\n    const dy = target.y - this.cY - this.y;\n    this.vx = dx * easing;\n    this.vy = dy * easing;\n    this.run(options);\n  }\n\n  public runSpringTo(\n    target: { x: number; y: number } | { x: number; y: number }[],\n    options?: TShapeRunSpringOptions\n  ) {\n    const spring = parseNumber(options?.spring, 0.03);\n    (Array.isArray(target) ? target : [target]).forEach((t) => {\n      const dx = t.x - this.cX - this.x;\n      const dy = t.y - this.cY - this.y;\n      const ax = dx * spring;\n      const ay = dy * spring;\n      this.vx += ax;\n      this.vy += ay;\n    });\n    this.run({ friction: 0.9, ...options });\n  }\n\n  public springMassTo(\n    target: Shape,\n    options?: {\n      springLength?: number;\n      spring?: number;\n    }\n  ): number {\n    const springLength = parseNumber(options?.springLength, 100);\n    const spring = parseNumber(options?.spring, 0.0001);\n    const dx = target.x - this.x;\n    const dy = target.y - this.y;\n    const dist = Math.sqrt(dx * dx + dy * dy);\n    if (dist < springLength) {\n      const ax = dx * spring;\n      const ay = dy * spring;\n      this.vx += ax / this.mass;\n      this.vy += ay / this.mass;\n      target.vx -= ax / target.mass;\n      target.vy -= ay / target.mass;\n      return 1 - dist / springLength; /// alpha: 0 ~ 1\n    }\n    return 0;\n  }\n\n  getTotalLength(): number {\n    return this.initPathD().getTotalLength();\n  }\n\n  interpolate(t: number): { x: number; y: number } {\n    return this.initPathD().interpolate(t);\n  }\n\n  getPointAtLength(length: number): {\n    x: number;\n    y: number;\n    alpha: number;\n  } {\n    return this.initPathD().getPointAtLength(length);\n  }\n\n  public trailPath(\n    trail: Shape,\n    progress = 0 // 0 ~ 1\n  ): {\n    x: number;\n    y: number;\n    alpha: number;\n  } {\n    const totalLength = this.getTotalLength();\n    trail.originD = this.initPathD().getSubpath(0, progress * totalLength);\n    return this.getPointAtLength(progress * totalLength);\n  }\n\n  public strokeDashTween(frameDuration = 1000, options?: TweenRawOptions) {\n    const pathd = this.initPathD();\n    const totalLength = maxDotNumber(pathd.getTotalLength(), 0);\n    this.setAttr({\n      strokeDasharray: `${totalLength} ${totalLength}`,\n      strokeDashoffset: `${totalLength}`\n    });\n    const prevOnUpdate = options?.onUpdate;\n    const tl = new Timeline({ frameDuration });\n    tl.addTween(\n      { offset: totalLength },\n      { offset: 0 },\n      Object.assign(options || {}, {\n        onUpdate: (coords: TweenValue, elapsed: number) => {\n          this.setAttr(\"strokeDashoffset\", \"\" + maxDotNumber(coords.offset, 2));\n          prevOnUpdate?.(coords, elapsed);\n        }\n      })\n    );\n    tl.play();\n  }\n}\n\nexport default Shape;\n","import { Shape, TShapeOptions } from \"../Shape\";\nimport { TSVGParsedPathData } from \"../../svg/DOMSVGUtil\";\nimport { YZCanvasContext } from \"../../canvas\";\nimport { rotatePoint } from \"../Matrix\";\nimport { length, toRadian } from \"../math\";\n\nexport type TPoint3DOptions = {\n  x?: number;\n  y?: number;\n  z?: number;\n  fl?: number;\n  vpX?: number;\n  vpY?: number;\n  cX?: number;\n  cY?: number;\n  cZ?: number;\n  radius?: number;\n} & TShapeOptions;\n\nexport class Point3D extends Shape {\n  public x: number;\n  public y: number;\n  public z: number;\n  // public w: number; // perspective\n  public fl: number;\n  public vpX: number;\n  public vpY: number;\n  public cX: number;\n  public cY: number;\n  public cZ: number;\n  public radius: number;\n\n  constructor(options?: TPoint3DOptions) {\n    super(options);\n    this.x = options?.x || 0;\n    this.y = options?.y || 0;\n    this.z = options?.z || 0;\n    this.fl = options?.fl || 250;\n    this.vpX = options?.vpX || 0;\n    this.vpY = options?.vpY || 0;\n    this.cX = options?.cX || 0;\n    this.cY = options?.cY || 0;\n    this.cZ = options?.cZ || 0;\n    this.radius = options?.radius || 0;\n  }\n\n  toSVGPathData(): TSVGParsedPathData[] {\n    if (this.radius) {\n      return [\n        [\"M\", this.getScreenX(), this.getScreenY() - this.radius],\n        [\"a\", this.radius, this.radius, 0, 1, 1, 0, 2 * this.radius],\n        [\"a\", this.radius, this.radius, 0, 1, 1, 0, -2 * this.radius],\n        [\"z\"]\n      ];\n    } else {\n      return [[\"M\", this.getScreenX(), this.getScreenY()]];\n    }\n  }\n\n  toCanvasContext(ctx: YZCanvasContext) {\n    ctx.beginPath();\n    ctx.arc(0, 0, this.radius, 0, Math.PI * 2, true);\n    ctx.closePath();\n  }\n\n  setVanishingPoint(vpX: number, vpY: number) {\n    this.vpX = vpX;\n    this.vpY = vpY;\n  }\n\n  setCenter(cX: number, cY: number, cZ: number) {\n    this.cX = cX;\n    this.cY = cY;\n    this.cZ = cZ;\n  }\n\n  rotateX(degX: number) {\n    ({ x: this.y, y: this.z } = rotatePoint(toRadian(degX), this.y, this.z));\n  }\n\n  rotateY(degY: number) {\n    ({ x: this.x, y: this.z } = rotatePoint(toRadian(degY), this.x, this.z));\n  }\n\n  rotateZ(degZ: number) {\n    ({ x: this.x, y: this.y } = rotatePoint(toRadian(degZ), this.x, this.y));\n  }\n\n  getScreenX() {\n    const scale = this.fl / (this.fl + this.z + this.cZ);\n    return this.vpX + (this.cX + this.x) * scale;\n  }\n\n  getScreenY() {\n    const scale = this.fl / (this.fl + this.z + this.cZ);\n    return this.vpY + (this.cY + this.y) * scale;\n  }\n\n  eq(point: Point3D): boolean {\n    return (\n      this.x === point.x &&\n      this.y === point.y &&\n      this.z === point.z &&\n      this.radius === point.radius &&\n      this.mass === point.mass\n    );\n  }\n\n  length() {\n    return length(this.x, this.y, this.z);\n  }\n\n  distance(pt: Point3D): number {\n    const dx = pt.x - this.x;\n    const dy = pt.y - this.y;\n    const dz = pt.z - this.z;\n    return Math.sqrt(dx * dx + dy * dy + dz * dz);\n  }\n\n  scalar(scale: number) {\n    this.x *= scale;\n    this.y *= scale;\n    this.z *= scale;\n    return this;\n  }\n\n  normalize(len = 1): Point3D {\n    const totalLength = this.length();\n    if (totalLength) {\n      const scale = len / totalLength;\n      this.scalar(scale);\n    }\n    return this;\n  }\n\n  clamp(len: number) {\n    const totalLength = this.length();\n    if (totalLength && totalLength > len) {\n      this.scalar(len / totalLength);\n    }\n    return this;\n  }\n\n  cross(pt: Point3D) {\n    const x = this.x;\n    const y = this.y;\n    const z = this.z;\n    return {\n      x: y * pt.z - z * pt.y,\n      y: z * pt.x - x * pt.z,\n      z: x * pt.y - y * pt.x\n    };\n  }\n\n  multiply(pt: Point3D) {\n    return {\n      x: this.x * pt.x,\n      y: this.y * pt.y,\n      z: this.z * pt.z\n    };\n  }\n\n  div(pt: Point3D) {\n    return {\n      x: this.x / pt.x,\n      y: this.y / pt.y,\n      z: this.z / pt.z\n    };\n  }\n\n  add(pt: Point3D) {\n    return {\n      x: this.x + pt.x,\n      y: this.y + pt.y,\n      z: this.z + pt.z\n    };\n  }\n\n  sub(pt: Point3D) {\n    return {\n      x: this.x - pt.x,\n      y: this.y - pt.y,\n      z: this.z - pt.z\n    };\n  }\n\n  dot(pt: Point3D): number {\n    return this.x * pt.x + this.y * pt.y + this.z * pt.z;\n  }\n\n  reflect(pt: Point3D) {\n    const dp = this.dot(pt);\n    return {\n      x: this.x - 2 * dp * pt.x,\n      y: this.y - 2 * dp * pt.y,\n      z: this.z - 2 * dp * pt.z\n    };\n  }\n}\n\nexport default Point3D;\n","/* eslint-disable @typescript-eslint/adjacent-overload-signatures */\nimport { regMatchAll, maxDotNumber, clamp } from \"@zyzgroup/core-common\";\nimport { toDegree, toRadian } from \"./math\";\nimport Point3D from \"./shapes/Point3D\";\nimport { Vector2, Vector3 } from \"./Vector\";\nimport { Euler } from \"./Euler\";\nimport { Quaternion } from \"./Quaternion\";\n\nexport const WebGLCoordinateSystem = 2000;\nexport const WebGPUCoordinateSystem = 2001;\n\n/// 按列顺序 - 4\nexport type TMatrix2Value = [number, number, number, number];\nconst DEFAULT_MATRIX2_VALUE: TMatrix2Value = [1, 0, 0, 1];\n\n/// 按列顺序 - 6\nexport type TMatrixValue = [number, number, number, number, number, number];\nconst DEFAULT_MATRIX_VALUE: TMatrixValue = [1, 0, 0, 1, 0, 0];\n\n/// 按列顺序 - 9\nexport type TMatrix3Value = [\n  number,\n  number,\n  number,\n  number,\n  number,\n  number,\n  number,\n  number,\n  number\n];\nconst DEFAULT_MATRIX3_VALUE: TMatrix3Value = [1, 0, 0, 0, 1, 0, 0, 0, 1];\n\n/// 按列顺序 - 16\nexport type TMatrix4Value = [\n  number,\n  number,\n  number,\n  number,\n  number,\n  number,\n  number,\n  number,\n  number,\n  number,\n  number,\n  number,\n  number,\n  number,\n  number,\n  number\n];\nconst DEFAULT_MATRIX4_VALUE: TMatrix4Value = [\n  1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1\n];\n\nexport class Matrix2 {\n  /// 按列顺序\n  value: TMatrix2Value;\n\n  constructor(value: TMatrix2Value = DEFAULT_MATRIX2_VALUE) {\n    this.value = Array.from(value) as TMatrix2Value;\n  }\n\n  get m11() {\n    return this.value[0];\n  }\n  get m12() {\n    return this.value[1];\n  }\n  get m21() {\n    return this.value[2];\n  }\n  get m22() {\n    return this.value[3];\n  }\n\n  set m11(v: number) {\n    this.value[0] = v;\n  }\n  set m12(v: number) {\n    this.value[1] = v;\n  }\n  set m21(v: number) {\n    this.value[2] = v;\n  }\n  set m22(v: number) {\n    this.value[3] = v;\n  }\n\n  /// 按行顺序\n  set(n11 = 1, n12 = 0, n21 = 0, n22 = 1) {\n    this.m11 = n11;\n    this.m21 = n12;\n    this.m12 = n21;\n    this.m22 = n22;\n    return this;\n  }\n\n  identity() {\n    this.value = Array.from(DEFAULT_MATRIX2_VALUE) as TMatrix2Value;\n    return this;\n  }\n\n  get isIdentity(): boolean {\n    return this.m11 == 1 && this.m12 == 0 && this.m21 == 0 && this.m22 == 1;\n  }\n\n  copy(m: Matrix2) {\n    this.m11 = m.m11;\n    this.m12 = m.m12;\n    this.m21 = m.m21;\n    this.m22 = m.m22;\n    return this;\n  }\n\n  clone(): Matrix2 {\n    return new Matrix2(this.value);\n  }\n\n  fromArray(array: number[], offset = 0) {\n    for (let i = 0; i < 4; i++) {\n      this.value[i] = array[i + offset];\n    }\n    return this;\n  }\n\n  toArray(array: number[] = [], offset = 0) {\n    array[offset] = this.m11;\n    array[offset + 1] = this.m12;\n    array[offset + 2] = this.m21;\n    array[offset + 3] = this.m22;\n    return array;\n  }\n\n  multiplyMatrices(a: Matrix2, b: Matrix2) {\n    const ae = a.value;\n    const be = b.value;\n    const te = this.value;\n\n    const a11 = ae[0];\n    const a12 = ae[2];\n    const a21 = ae[1];\n    const a22 = ae[3];\n\n    const b11 = be[0];\n    const b12 = be[2];\n    const b21 = be[1];\n    const b22 = be[3];\n\n    te[0] = a11 * b11 + a12 * b21;\n    te[2] = a11 * b12 + a12 * b22;\n\n    te[1] = a21 * b11 + a22 * b21;\n    te[3] = a21 * b12 + a22 * b22;\n\n    return this;\n  }\n\n  multiply(m: Matrix2) {\n    return this.multiplyMatrices(this, m);\n  }\n\n  premultiply(m: Matrix2) {\n    return this.multiplyMatrices(m, this);\n  }\n\n  multiplyScalar(s: number) {\n    this.m11 *= s;\n    this.m12 *= s;\n    this.m21 *= s;\n    this.m22 *= s;\n    return this;\n  }\n\n  /// 行列式\n  determinant(): number {\n    return this.m11 * this.m22 - this.m21 * this.m12;\n  }\n}\n\nexport class Matrix3 {\n  /// 按列顺序\n  value: TMatrix3Value;\n\n  constructor(value: TMatrix3Value = DEFAULT_MATRIX3_VALUE) {\n    this.value = Array.from(value) as TMatrix3Value;\n  }\n\n  get m11() {\n    return this.value[0];\n  }\n  get m12() {\n    return this.value[1];\n  }\n  get m13() {\n    return this.value[2];\n  }\n  get m21() {\n    return this.value[3];\n  }\n  get m22() {\n    return this.value[4];\n  }\n  get m23() {\n    return this.value[5];\n  }\n  get m31() {\n    return this.value[6];\n  }\n  get m32() {\n    return this.value[7];\n  }\n  get m33() {\n    return this.value[8];\n  }\n\n  set m11(v: number) {\n    this.value[0] = v;\n  }\n  set m12(v: number) {\n    this.value[1] = v;\n  }\n  set m13(v: number) {\n    this.value[2] = v;\n  }\n  set m21(v: number) {\n    this.value[3] = v;\n  }\n  set m22(v: number) {\n    this.value[4] = v;\n  }\n  set m23(v: number) {\n    this.value[5] = v;\n  }\n  set m31(v: number) {\n    this.value[6] = v;\n  }\n  set m32(v: number) {\n    this.value[7] = v;\n  }\n  set m33(v: number) {\n    this.value[8] = v;\n  }\n\n  /// 按行顺序\n  set(\n    n11 = 1,\n    n12 = 0,\n    n13 = 0,\n    n21 = 0,\n    n22 = 1,\n    n23 = 0,\n    n31 = 0,\n    n32 = 0,\n    n33 = 1\n  ) {\n    const te = this.value;\n    te[0] = n11;\n    te[1] = n21;\n    te[2] = n31;\n    te[3] = n12;\n    te[4] = n22;\n    te[5] = n32;\n    te[6] = n13;\n    te[7] = n23;\n    te[8] = n33;\n    return this;\n  }\n\n  identity() {\n    this.value = Array.from(DEFAULT_MATRIX3_VALUE) as TMatrix3Value;\n    return this;\n  }\n\n  get isIdentity(): boolean {\n    return (\n      this.m11 == 1 &&\n      this.m12 == 0 &&\n      this.m13 == 0 &&\n      this.m21 == 0 &&\n      this.m22 == 1 &&\n      this.m23 == 0 &&\n      this.m31 == 0 &&\n      this.m32 == 0 &&\n      this.m33 == 1\n    );\n  }\n\n  copy(m: Matrix3) {\n    this.m11 = m.m11;\n    this.m12 = m.m12;\n    this.m13 = m.m13;\n    this.m21 = m.m21;\n    this.m22 = m.m22;\n    this.m23 = m.m23;\n    this.m31 = m.m31;\n    this.m32 = m.m32;\n    this.m33 = m.m33;\n    return this;\n  }\n\n  clone(): Matrix3 {\n    return new Matrix3(this.value);\n  }\n\n  fromArray(array: number[], offset = 0) {\n    for (let i = 0; i < 9; i++) {\n      this.value[i] = array[i + offset];\n    }\n    return this;\n  }\n\n  toArray(array: number[] = [], offset = 0) {\n    array[offset] = this.m11;\n    array[offset + 1] = this.m12;\n    array[offset + 2] = this.m13;\n    array[offset + 3] = this.m21;\n    array[offset + 4] = this.m22;\n    array[offset + 5] = this.m23;\n    array[offset + 6] = this.m31;\n    array[offset + 7] = this.m32;\n    array[offset + 8] = this.m33;\n    return array;\n  }\n\n  extractBasis(xAxis: Vector3, yAxis: Vector3, zAxis: Vector3) {\n    xAxis.setFromMatrix3Column(this, 0);\n    yAxis.setFromMatrix3Column(this, 1);\n    zAxis.setFromMatrix3Column(this, 2);\n    return this;\n  }\n\n  setFromMatrix4(m: Matrix4) {\n    this.set(m.m11, m.m21, m.m31, m.m12, m.m22, m.m32, m.m13, m.m23, m.m33);\n    return this;\n  }\n\n  multiplyMatrices(a: Matrix3, b: Matrix3) {\n    const ae = a.value;\n    const be = b.value;\n    const te = this.value;\n\n    const a11 = ae[0];\n    const a12 = ae[3];\n    const a13 = ae[6];\n    const a21 = ae[1];\n    const a22 = ae[4];\n    const a23 = ae[7];\n    const a31 = ae[2];\n    const a32 = ae[5];\n    const a33 = ae[8];\n\n    const b11 = be[0];\n    const b12 = be[3];\n    const b13 = be[6];\n    const b21 = be[1];\n    const b22 = be[4];\n    const b23 = be[7];\n    const b31 = be[2];\n    const b32 = be[5];\n    const b33 = be[8];\n\n    te[0] = a11 * b11 + a12 * b21 + a13 * b31;\n    te[3] = a11 * b12 + a12 * b22 + a13 * b32;\n    te[6] = a11 * b13 + a12 * b23 + a13 * b33;\n\n    te[1] = a21 * b11 + a22 * b21 + a23 * b31;\n    te[4] = a21 * b12 + a22 * b22 + a23 * b32;\n    te[7] = a21 * b13 + a22 * b23 + a23 * b33;\n\n    te[2] = a31 * b11 + a32 * b21 + a33 * b31;\n    te[5] = a31 * b12 + a32 * b22 + a33 * b32;\n    te[8] = a31 * b13 + a32 * b23 + a33 * b33;\n\n    return this;\n  }\n\n  multiply(m: Matrix3) {\n    return this.multiplyMatrices(this, m);\n  }\n\n  premultiply(m: Matrix3) {\n    return this.multiplyMatrices(m, this);\n  }\n\n  multiplyScalar(s: number) {\n    this.m11 *= s;\n    this.m12 *= s;\n    this.m13 *= s;\n    this.m21 *= s;\n    this.m22 *= s;\n    this.m23 *= s;\n    this.m31 *= s;\n    this.m32 *= s;\n    this.m33 *= s;\n    return this;\n  }\n\n  /// 行列式\n  determinant(): number {\n    const te = this.value;\n    const a = te[0];\n    const b = te[1];\n    const c = te[2];\n    const d = te[3];\n    const e = te[4];\n    const f = te[5];\n    const g = te[6];\n    const h = te[7];\n    const i = te[8];\n    return (\n      a * e * i - a * f * h - b * d * i + b * f * g + c * d * h - c * e * g\n    );\n  }\n\n  inverse() {\n    const te = this.value;\n    const n11 = te[0];\n    const n21 = te[1];\n    const n31 = te[2];\n    const n12 = te[3];\n    const n22 = te[4];\n    const n32 = te[5];\n    const n13 = te[6];\n    const n23 = te[7];\n    const n33 = te[8];\n    const t11 = n33 * n22 - n32 * n23;\n    const t12 = n32 * n13 - n33 * n12;\n    const t13 = n23 * n12 - n22 * n13;\n    const det = n11 * t11 + n21 * t12 + n31 * t13;\n\n    if (det === 0) {\n      return this.set(0, 0, 0, 0, 0, 0, 0, 0, 0);\n    }\n\n    const detInv = 1 / det;\n\n    te[0] = t11 * detInv;\n    te[1] = (n31 * n23 - n33 * n21) * detInv;\n    te[2] = (n32 * n21 - n31 * n22) * detInv;\n\n    te[3] = t12 * detInv;\n    te[4] = (n33 * n11 - n31 * n13) * detInv;\n    te[5] = (n31 * n12 - n32 * n11) * detInv;\n\n    te[6] = t13 * detInv;\n    te[7] = (n21 * n13 - n23 * n11) * detInv;\n    te[8] = (n22 * n11 - n21 * n12) * detInv;\n\n    return this;\n  }\n\n  transpose() {\n    let tmp;\n    const m = this.value;\n\n    tmp = m[1];\n    m[1] = m[3];\n    m[3] = tmp;\n    tmp = m[2];\n    m[2] = m[6];\n    m[6] = tmp;\n    tmp = m[5];\n    m[5] = m[7];\n    m[7] = tmp;\n\n    return this;\n  }\n\n  getNormalMatrix(matrix4: Matrix4) {\n    return this.setFromMatrix4(matrix4).inverse().transpose();\n  }\n\n  transposeIntoArray(r: number[]) {\n    const m = this.value;\n    r[0] = m[0];\n    r[1] = m[3];\n    r[2] = m[6];\n    r[3] = m[1];\n    r[4] = m[4];\n    r[5] = m[7];\n    r[6] = m[2];\n    r[7] = m[5];\n    r[8] = m[8];\n    return this;\n  }\n\n  setUvTransform(\n    tx: number,\n    ty: number,\n    sx: number,\n    sy: number,\n    rotation: number,\n    cx: number,\n    cy: number\n  ) {\n    const c = Math.cos(rotation);\n    const s = Math.sin(rotation);\n    this.set(\n      sx * c,\n      sx * s,\n      -sx * (c * cx + s * cy) + cx + tx,\n      -sy * s,\n      sy * c,\n      -sy * (-s * cx + c * cy) + cy + ty,\n      0,\n      0,\n      1\n    );\n    return this;\n  }\n\n  scale(sx: number, sy: number) {\n    this.premultiply(_m3.makeScale(sx, sy));\n    return this;\n  }\n\n  rotate(theta: number) {\n    this.premultiply(_m3.makeRotation(-theta));\n    return this;\n  }\n\n  translate(tx: number, ty: number) {\n    this.premultiply(_m3.makeTranslation(tx, ty));\n    return this;\n  }\n\n  makeTranslation(x: Vector2 | number, y?: number) {\n    if (typeof x === \"number\") {\n      this.set(1, 0, x, 0, 1, y, 0, 0, 1);\n    } else {\n      this.set(1, 0, x.x, 0, 1, x.y, 0, 0, 1);\n    }\n    return this;\n  }\n\n  // counterclockwise\n  makeRotation(theta: number) {\n    const c = Math.cos(theta);\n    const s = Math.sin(theta);\n    this.set(c, -s, 0, s, c, 0, 0, 0, 1);\n    return this;\n  }\n\n  makeScale(x: number, y: number) {\n    this.set(x, 0, 0, 0, y, 0, 0, 0, 1);\n    return this;\n  }\n\n  equals(matrix: Matrix3) {\n    for (let i = 0; i < 9; i++) {\n      if (this.value[i] !== matrix.value[i]) {\n        return false;\n      }\n    }\n    return true;\n  }\n}\n\nexport class Matrix4 {\n  /// 按列顺序\n  value: TMatrix4Value;\n  is3dSpecial = false;\n\n  constructor(value: TMatrix4Value = DEFAULT_MATRIX4_VALUE) {\n    this.value = Array.from(value) as TMatrix4Value;\n  }\n\n  get m11() {\n    return this.value[0];\n  }\n  get m12() {\n    return this.value[1];\n  }\n  get m13() {\n    return this.value[2];\n  }\n  get m14() {\n    return this.value[3];\n  }\n  get m21() {\n    return this.value[4];\n  }\n  get m22() {\n    return this.value[5];\n  }\n  get m23() {\n    return this.value[6];\n  }\n  get m24() {\n    return this.value[7];\n  }\n  get m31() {\n    return this.value[8];\n  }\n  get m32() {\n    return this.value[9];\n  }\n  get m33() {\n    return this.value[10];\n  }\n  get m34() {\n    return this.value[11];\n  }\n  get m41() {\n    return this.value[12];\n  }\n  get m42() {\n    return this.value[13];\n  }\n  get m43() {\n    return this.value[14];\n  }\n  get m44() {\n    return this.value[15];\n  }\n\n  set m11(v: number) {\n    this.value[0] = v;\n  }\n  set m12(v: number) {\n    this.value[1] = v;\n  }\n  set m13(v: number) {\n    this.value[2] = v;\n  }\n  set m14(v: number) {\n    this.value[3] = v;\n  }\n  set m21(v: number) {\n    this.value[4] = v;\n  }\n  set m22(v: number) {\n    this.value[5] = v;\n  }\n  set m23(v: number) {\n    this.value[6] = v;\n  }\n  set m24(v: number) {\n    this.value[7] = v;\n  }\n  set m31(v: number) {\n    this.value[8] = v;\n  }\n  set m32(v: number) {\n    this.value[9] = v;\n  }\n  set m33(v: number) {\n    this.value[10] = v;\n  }\n  set m34(v: number) {\n    this.value[11] = v;\n  }\n  set m41(v: number) {\n    this.value[12] = v;\n  }\n  set m42(v: number) {\n    this.value[13] = v;\n  }\n  set m43(v: number) {\n    this.value[14] = v;\n  }\n  set m44(v: number) {\n    this.value[15] = v;\n  }\n\n  /// 按行顺序\n  set(\n    n11 = 1,\n    n12 = 0,\n    n13 = 0,\n    n14 = 0,\n    n21 = 0,\n    n22 = 1,\n    n23 = 0,\n    n24 = 0,\n    n31 = 0,\n    n32 = 0,\n    n33 = 1,\n    n34 = 0,\n    n41 = 0,\n    n42 = 0,\n    n43 = 0,\n    n44 = 1\n  ) {\n    const te = this.value;\n    te[0] = n11;\n    te[4] = n12;\n    te[8] = n13;\n    te[12] = n14;\n    te[1] = n21;\n    te[5] = n22;\n    te[9] = n23;\n    te[13] = n24;\n    te[2] = n31;\n    te[6] = n32;\n    te[10] = n33;\n    te[14] = n34;\n    te[3] = n41;\n    te[7] = n42;\n    te[11] = n43;\n    te[15] = n44;\n    return this;\n  }\n\n  is2D(): boolean {\n    return (\n      !this.is3dSpecial &&\n      this.m31 == 0 &&\n      this.m32 == 0 &&\n      this.m33 == 1 &&\n      this.m34 == 0 &&\n      this.m43 == 0 &&\n      this.m44 == 1\n    );\n  }\n\n  is3D(): boolean {\n    return !this.is2D();\n  }\n\n  identity() {\n    this.value = Array.from(DEFAULT_MATRIX4_VALUE) as TMatrix4Value;\n    return this;\n  }\n\n  get isIdentity(): boolean {\n    return (\n      this.m11 == 1 &&\n      this.m12 == 0 &&\n      this.m13 == 0 &&\n      this.m14 == 0 &&\n      this.m21 == 0 &&\n      this.m22 == 1 &&\n      this.m23 == 0 &&\n      this.m24 == 0 &&\n      this.m31 == 0 &&\n      this.m32 == 0 &&\n      this.m33 == 1 &&\n      this.m34 == 0 &&\n      this.m41 == 0 &&\n      this.m42 == 0 &&\n      this.m43 == 0 &&\n      this.m44 == 1\n    );\n  }\n\n  copy(m: Matrix4) {\n    this.m11 = m.m11;\n    this.m12 = m.m12;\n    this.m13 = m.m13;\n    this.m14 = m.m14;\n    this.m21 = m.m21;\n    this.m22 = m.m22;\n    this.m23 = m.m23;\n    this.m24 = m.m24;\n    this.m31 = m.m31;\n    this.m32 = m.m32;\n    this.m33 = m.m33;\n    this.m34 = m.m34;\n    this.m41 = m.m41;\n    this.m42 = m.m42;\n    this.m43 = m.m43;\n    this.m44 = m.m44;\n    return this;\n  }\n\n  clone(): Matrix4 {\n    return new Matrix4(this.value);\n  }\n\n  // matrix4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1)\n  static fromString(s: string) {\n    const m = new Matrix4();\n    const results = regMatchAll(\"number\", s);\n    if (results.length === 16) {\n      results.forEach((result, index) => {\n        if (result.fullMatch) {\n          m.value[index] = parseFloat(result.fullMatch);\n        }\n      });\n    }\n    return m;\n  }\n\n  fromArray(array: number[], offset = 0) {\n    for (let i = 0; i < 16; i++) {\n      this.value[i] = array[i + offset];\n    }\n    return this;\n  }\n\n  toArray(array: number[] = [], offset = 0) {\n    const te = this.value;\n\n    array[offset] = te[0];\n    array[offset + 1] = te[1];\n    array[offset + 2] = te[2];\n    array[offset + 3] = te[3];\n\n    array[offset + 4] = te[4];\n    array[offset + 5] = te[5];\n    array[offset + 6] = te[6];\n    array[offset + 7] = te[7];\n\n    array[offset + 8] = te[8];\n    array[offset + 9] = te[9];\n    array[offset + 10] = te[10];\n    array[offset + 11] = te[11];\n\n    array[offset + 12] = te[12];\n    array[offset + 13] = te[13];\n    array[offset + 14] = te[14];\n    array[offset + 15] = te[15];\n\n    return array;\n  }\n\n  copyPosition(m: Matrix4) {\n    const te = this.value;\n    const me = m.value;\n    te[12] = me[12];\n    te[13] = me[13];\n    te[14] = me[14];\n    return this;\n  }\n\n  setFromMatrix3(m: Matrix3) {\n    const me = m.value;\n    this.set(\n      me[0],\n      me[3],\n      me[6],\n      0,\n      me[1],\n      me[4],\n      me[7],\n      0,\n      me[2],\n      me[5],\n      me[8],\n      0,\n      0,\n      0,\n      0,\n      1\n    );\n    return this;\n  }\n\n  extractBasis(xAxis: Vector3, yAxis: Vector3, zAxis: Vector3) {\n    xAxis.setFromMatrix4Column(this, 0);\n    yAxis.setFromMatrix4Column(this, 1);\n    zAxis.setFromMatrix4Column(this, 2);\n    return this;\n  }\n\n  makeBasis(xAxis: Vector3, yAxis: Vector3, zAxis: Vector3) {\n    this.set(\n      xAxis.x,\n      yAxis.x,\n      zAxis.x,\n      0,\n      xAxis.y,\n      yAxis.y,\n      zAxis.y,\n      0,\n      xAxis.z,\n      yAxis.z,\n      zAxis.z,\n      0,\n      0,\n      0,\n      0,\n      1\n    );\n    return this;\n  }\n\n  normalize() {\n    return this.multiplyScalar(1 / (this.m44 || 0.0001));\n  }\n\n  // w: perspective\n  transformPoint(point: { x: number; y: number; z?: number; w?: number }): {\n    x: number;\n    y: number;\n    z: number;\n    w: number;\n  } {\n    const z = point.z || 1;\n    const w = point.w || 1;\n    return {\n      x: point.x * this.m11 + point.y * this.m21 + z * this.m31 + w * this.m41,\n      y: point.x * this.m12 + point.y * this.m22 + z * this.m32 + w * this.m42,\n      z: point.x * this.m13 + point.y * this.m23 + z * this.m33 + w * this.m43,\n      w: point.x * this.m14 + point.y * this.m24 + z * this.m34 + w * this.m44\n    };\n  }\n\n  toMatrix(matrix?: Matrix) {\n    const { scalarX, scalarY, skewX, skewY, x, y } = this.split();\n    const value: TMatrixValue = [scalarX, skewY, skewX, scalarY, x, y];\n    if (matrix) {\n      matrix.value = value;\n      return matrix;\n    } else {\n      return new Matrix(value);\n    }\n    // if (!matrix) {\n    //   matrix = new Matrix();\n    // }\n    // matrix.m11 = this.m11;\n    // matrix.m12 = this.m12;\n    // matrix.m13 = this.m14;\n    // matrix.m21 = this.m21;\n    // matrix.m22 = this.m22;\n    // matrix.m23 = this.m24;\n    // matrix.m31 = this.m41;\n    // matrix.m32 = this.m42;\n    // matrix.m33 = this.m44;\n    // return matrix;\n  }\n\n  flatten(): Matrix4 {\n    this.m31 = 0;\n    this.m32 = 0;\n    this.m33 = 1;\n    this.m34 = 0;\n    this.m14 = 0;\n    this.m24 = 0;\n    this.m43 = 0;\n    this.m44 = 1;\n    return this;\n  }\n\n  toString(fractionalDigits = 6) {\n    return `matrix3d(${this.value\n      .map((v) => maxDotNumber(v, fractionalDigits))\n      .join(\",\")})`;\n  }\n\n  split() {\n    const scalarX = Math.sqrt(\n      this.m11 * this.m11 + this.m12 * this.m12 + this.m13 * this.m13\n    );\n    const scalarY = Math.sqrt(\n      this.m21 * this.m21 + this.m22 * this.m22 + this.m23 * this.m23\n    );\n    const scalarZ = Math.sqrt(\n      this.m31 * this.m31 + this.m32 * this.m32 + this.m33 * this.m33\n    );\n    const degreeY = toDegree(clamp(Math.asin(-this.m13), -1, 1));\n    let degreeX = toDegree(Math.atan2(this.m23, this.m33));\n    if (Math.cos(toRadian(degreeY)) === 0) {\n      degreeX = toDegree(Math.atan2(-this.m31, this.m22));\n      // degreeZ = 0;\n    }\n    let degreeZ = toDegree(Math.atan2(this.m12, this.m11));\n    if (this.m11 < 0 && this.m22 >= 0) {\n      degreeZ += 180;\n    }\n    return {\n      x: this.m41,\n      y: this.m42,\n      z: this.m43,\n      scalarX,\n      scalarY,\n      scalarZ,\n      degreeX,\n      degreeY,\n      degreeZ,\n      skewX: toDegree(this.m14),\n      skewY: toDegree(this.m24),\n      skewZ: toDegree(this.m34),\n      skewW: this.m44,\n      perspective: this.m34 ? -(1 / this.m34) : 0\n    };\n  }\n\n  extractRotation(m: Matrix4) {\n    // this method does not support reflection matrices\n    const te = this.value;\n    const me = m.value;\n\n    const scaleX = 1 / _v3.setFromMatrix4Column(m, 0).length();\n    const scaleY = 1 / _v3.setFromMatrix4Column(m, 1).length();\n    const scaleZ = 1 / _v3.setFromMatrix4Column(m, 2).length();\n\n    te[0] = me[0] * scaleX;\n    te[1] = me[1] * scaleX;\n    te[2] = me[2] * scaleX;\n    te[3] = 0;\n\n    te[4] = me[4] * scaleY;\n    te[5] = me[5] * scaleY;\n    te[6] = me[6] * scaleY;\n    te[7] = 0;\n\n    te[8] = me[8] * scaleZ;\n    te[9] = me[9] * scaleZ;\n    te[10] = me[10] * scaleZ;\n    te[11] = 0;\n\n    te[12] = 0;\n    te[13] = 0;\n    te[14] = 0;\n    te[15] = 1;\n\n    return this;\n  }\n\n  makeRotationFromEuler(euler: Euler) {\n    const te = this.value;\n\n    const x = euler.x;\n    const y = euler.y;\n    const z = euler.z;\n    const a = Math.cos(x);\n    const b = Math.sin(x);\n    const c = Math.cos(y);\n    const d = Math.sin(y);\n    const e = Math.cos(z);\n    const f = Math.sin(z);\n\n    if (euler.order === \"XYZ\") {\n      const ae = a * e;\n      const af = a * f;\n      const be = b * e;\n      const bf = b * f;\n\n      te[0] = c * e;\n      te[4] = -c * f;\n      te[8] = d;\n\n      te[1] = af + be * d;\n      te[5] = ae - bf * d;\n      te[9] = -b * c;\n\n      te[2] = bf - ae * d;\n      te[6] = be + af * d;\n      te[10] = a * c;\n    } else if (euler.order === \"YXZ\") {\n      const ce = c * e;\n      const cf = c * f;\n      const de = d * e;\n      const df = d * f;\n\n      te[0] = ce + df * b;\n      te[4] = de * b - cf;\n      te[8] = a * d;\n\n      te[1] = a * f;\n      te[5] = a * e;\n      te[9] = -b;\n\n      te[2] = cf * b - de;\n      te[6] = df + ce * b;\n      te[10] = a * c;\n    } else if (euler.order === \"ZXY\") {\n      const ce = c * e;\n      const cf = c * f;\n      const de = d * e;\n      const df = d * f;\n\n      te[0] = ce - df * b;\n      te[4] = -a * f;\n      te[8] = de + cf * b;\n\n      te[1] = cf + de * b;\n      te[5] = a * e;\n      te[9] = df - ce * b;\n\n      te[2] = -a * d;\n      te[6] = b;\n      te[10] = a * c;\n    } else if (euler.order === \"ZYX\") {\n      const ae = a * e;\n      const af = a * f;\n      const be = b * e;\n      const bf = b * f;\n\n      te[0] = c * e;\n      te[4] = be * d - af;\n      te[8] = ae * d + bf;\n\n      te[1] = c * f;\n      te[5] = bf * d + ae;\n      te[9] = af * d - be;\n\n      te[2] = -d;\n      te[6] = b * c;\n      te[10] = a * c;\n    } else if (euler.order === \"YZX\") {\n      const ac = a * c;\n      const ad = a * d;\n      const bc = b * c;\n      const bd = b * d;\n\n      te[0] = c * e;\n      te[4] = bd - ac * f;\n      te[8] = bc * f + ad;\n\n      te[1] = f;\n      te[5] = a * e;\n      te[9] = -b * e;\n\n      te[2] = -d * e;\n      te[6] = ad * f + bc;\n      te[10] = ac - bd * f;\n    } else if (euler.order === \"XZY\") {\n      const ac = a * c;\n      const ad = a * d;\n      const bc = b * c;\n      const bd = b * d;\n\n      te[0] = c * e;\n      te[4] = -f;\n      te[8] = d * e;\n\n      te[1] = ac * f + bd;\n      te[5] = a * e;\n      te[9] = ad * f - bc;\n\n      te[2] = bc * f - ad;\n      te[6] = b * e;\n      te[10] = bd * f + ac;\n    }\n\n    // bottom row\n    te[3] = 0;\n    te[7] = 0;\n    te[11] = 0;\n\n    // last column\n    te[12] = 0;\n    te[13] = 0;\n    te[14] = 0;\n    te[15] = 1;\n\n    return this;\n  }\n\n  makeRotationFromQuaternion(q: Quaternion) {\n    return this.compose(_zero, q, _one);\n  }\n\n  lookAt(eye: Vector3, target: Vector3, up: Vector3) {\n    const te = this.value;\n\n    _z.subVectors(eye, target);\n\n    if (_z.lengthSq() === 0) {\n      // eye and target are in the same position\n      _z.z = 1;\n    }\n\n    _z.normalize();\n    _x.crossVectors(up, _z);\n\n    if (_x.lengthSq() === 0) {\n      // up and z are parallel\n\n      if (Math.abs(up.z) === 1) {\n        _z.x += 0.0001;\n      } else {\n        _z.z += 0.0001;\n      }\n\n      _z.normalize();\n      _x.crossVectors(up, _z);\n    }\n\n    _x.normalize();\n    _y.crossVectors(_z, _x);\n\n    te[0] = _x.x;\n    te[4] = _y.x;\n    te[8] = _z.x;\n    te[1] = _x.y;\n    te[5] = _y.y;\n    te[9] = _z.y;\n    te[2] = _x.z;\n    te[6] = _y.z;\n    te[10] = _z.z;\n\n    return this;\n  }\n\n  multiplyMatrices(a: Matrix4, b: Matrix4) {\n    const ae = a.value;\n    const be = b.value;\n    const te = this.value;\n\n    const a11 = ae[0];\n    const a12 = ae[4];\n    const a13 = ae[8];\n    const a14 = ae[12];\n    const a21 = ae[1];\n    const a22 = ae[5];\n    const a23 = ae[9];\n    const a24 = ae[13];\n    const a31 = ae[2];\n    const a32 = ae[6];\n    const a33 = ae[10];\n    const a34 = ae[14];\n    const a41 = ae[3];\n    const a42 = ae[7];\n    const a43 = ae[11];\n    const a44 = ae[15];\n\n    const b11 = be[0];\n    const b12 = be[4];\n    const b13 = be[8];\n    const b14 = be[12];\n    const b21 = be[1];\n    const b22 = be[5];\n    const b23 = be[9];\n    const b24 = be[13];\n    const b31 = be[2];\n    const b32 = be[6];\n    const b33 = be[10];\n    const b34 = be[14];\n    const b41 = be[3];\n    const b42 = be[7];\n    const b43 = be[11];\n    const b44 = be[15];\n\n    te[0] = a11 * b11 + a12 * b21 + a13 * b31 + a14 * b41;\n    te[4] = a11 * b12 + a12 * b22 + a13 * b32 + a14 * b42;\n    te[8] = a11 * b13 + a12 * b23 + a13 * b33 + a14 * b43;\n    te[12] = a11 * b14 + a12 * b24 + a13 * b34 + a14 * b44;\n\n    te[1] = a21 * b11 + a22 * b21 + a23 * b31 + a24 * b41;\n    te[5] = a21 * b12 + a22 * b22 + a23 * b32 + a24 * b42;\n    te[9] = a21 * b13 + a22 * b23 + a23 * b33 + a24 * b43;\n    te[13] = a21 * b14 + a22 * b24 + a23 * b34 + a24 * b44;\n\n    te[2] = a31 * b11 + a32 * b21 + a33 * b31 + a34 * b41;\n    te[6] = a31 * b12 + a32 * b22 + a33 * b32 + a34 * b42;\n    te[10] = a31 * b13 + a32 * b23 + a33 * b33 + a34 * b43;\n    te[14] = a31 * b14 + a32 * b24 + a33 * b34 + a34 * b44;\n\n    te[3] = a41 * b11 + a42 * b21 + a43 * b31 + a44 * b41;\n    te[7] = a41 * b12 + a42 * b22 + a43 * b32 + a44 * b42;\n    te[11] = a41 * b13 + a42 * b23 + a43 * b33 + a44 * b43;\n    te[15] = a41 * b14 + a42 * b24 + a43 * b34 + a44 * b44;\n\n    return this;\n  }\n\n  multiply(m: Matrix4) {\n    return this.multiplyMatrices(this, m);\n  }\n\n  premultiply(m: Matrix4) {\n    return this.multiplyMatrices(m, this);\n  }\n\n  multiplyScalar(s: number) {\n    this.m11 *= s;\n    this.m12 *= s;\n    this.m13 *= s;\n    this.m14 *= s;\n    this.m21 *= s;\n    this.m22 *= s;\n    this.m23 *= s;\n    this.m24 *= s;\n    this.m31 *= s;\n    this.m32 *= s;\n    this.m33 *= s;\n    this.m34 *= s;\n    return this;\n  }\n\n  /// 行列式\n  determinant() {\n    const te = this.value;\n\n    const n11 = te[0];\n    const n12 = te[4];\n    const n13 = te[8];\n    const n14 = te[12];\n    const n21 = te[1];\n    const n22 = te[5];\n    const n23 = te[9];\n    const n24 = te[13];\n    const n31 = te[2];\n    const n32 = te[6];\n    const n33 = te[10];\n    const n34 = te[14];\n    const n41 = te[3];\n    const n42 = te[7];\n    const n43 = te[11];\n    const n44 = te[15];\n\n    //TODO: make this more efficient\n    //( based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm )\n\n    return (\n      n41 *\n        (+n14 * n23 * n32 -\n          n13 * n24 * n32 -\n          n14 * n22 * n33 +\n          n12 * n24 * n33 +\n          n13 * n22 * n34 -\n          n12 * n23 * n34) +\n      n42 *\n        (+n11 * n23 * n34 -\n          n11 * n24 * n33 +\n          n14 * n21 * n33 -\n          n13 * n21 * n34 +\n          n13 * n24 * n31 -\n          n14 * n23 * n31) +\n      n43 *\n        (+n11 * n24 * n32 -\n          n11 * n22 * n34 -\n          n14 * n21 * n32 +\n          n12 * n21 * n34 +\n          n14 * n22 * n31 -\n          n12 * n24 * n31) +\n      n44 *\n        (-n13 * n22 * n31 -\n          n11 * n23 * n32 +\n          n11 * n22 * n33 +\n          n13 * n21 * n32 -\n          n12 * n21 * n33 +\n          n12 * n23 * n31)\n    );\n  }\n\n  transpose() {\n    const te = this.value;\n    let tmp;\n\n    tmp = te[1];\n    te[1] = te[4];\n    te[4] = tmp;\n    tmp = te[2];\n    te[2] = te[8];\n    te[8] = tmp;\n    tmp = te[6];\n    te[6] = te[9];\n    te[9] = tmp;\n\n    tmp = te[3];\n    te[3] = te[12];\n    te[12] = tmp;\n    tmp = te[7];\n    te[7] = te[13];\n    te[13] = tmp;\n    tmp = te[11];\n    te[11] = te[14];\n    te[14] = tmp;\n\n    return this;\n  }\n\n  setPosition(x: number, y: number, z: number): this;\n  setPosition(x: Vector3): this;\n  setPosition(x: Vector3 | number, y?: number, z?: number): this {\n    const te = this.value;\n    if (x instanceof Vector3) {\n      te[12] = x.x;\n      te[13] = x.y;\n      te[14] = x.z;\n    } else if (\n      typeof x == \"number\" &&\n      typeof y == \"number\" &&\n      typeof z == \"number\"\n    ) {\n      te[12] = x;\n      te[13] = y;\n      te[14] = z;\n    }\n    return this;\n  }\n\n  inverse() {\n    const te = this.value;\n    const n11 = te[0];\n    const n21 = te[1];\n    const n31 = te[2];\n    const n41 = te[3];\n    const n12 = te[4];\n    const n22 = te[5];\n    const n32 = te[6];\n    const n42 = te[7];\n    const n13 = te[8];\n    const n23 = te[9];\n    const n33 = te[10];\n    const n43 = te[11];\n    const n14 = te[12];\n    const n24 = te[13];\n    const n34 = te[14];\n    const n44 = te[15];\n    const t11 =\n      n23 * n34 * n42 -\n      n24 * n33 * n42 +\n      n24 * n32 * n43 -\n      n22 * n34 * n43 -\n      n23 * n32 * n44 +\n      n22 * n33 * n44;\n    const t12 =\n      n14 * n33 * n42 -\n      n13 * n34 * n42 -\n      n14 * n32 * n43 +\n      n12 * n34 * n43 +\n      n13 * n32 * n44 -\n      n12 * n33 * n44;\n    const t13 =\n      n13 * n24 * n42 -\n      n14 * n23 * n42 +\n      n14 * n22 * n43 -\n      n12 * n24 * n43 -\n      n13 * n22 * n44 +\n      n12 * n23 * n44;\n    const t14 =\n      n14 * n23 * n32 -\n      n13 * n24 * n32 -\n      n14 * n22 * n33 +\n      n12 * n24 * n33 +\n      n13 * n22 * n34 -\n      n12 * n23 * n34;\n\n    const det = n11 * t11 + n21 * t12 + n31 * t13 + n41 * t14;\n\n    if (det === 0) {\n      return this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);\n    }\n\n    const detInv = 1 / det;\n\n    te[0] = t11 * detInv;\n    te[1] =\n      (n24 * n33 * n41 -\n        n23 * n34 * n41 -\n        n24 * n31 * n43 +\n        n21 * n34 * n43 +\n        n23 * n31 * n44 -\n        n21 * n33 * n44) *\n      detInv;\n    te[2] =\n      (n22 * n34 * n41 -\n        n24 * n32 * n41 +\n        n24 * n31 * n42 -\n        n21 * n34 * n42 -\n        n22 * n31 * n44 +\n        n21 * n32 * n44) *\n      detInv;\n    te[3] =\n      (n23 * n32 * n41 -\n        n22 * n33 * n41 -\n        n23 * n31 * n42 +\n        n21 * n33 * n42 +\n        n22 * n31 * n43 -\n        n21 * n32 * n43) *\n      detInv;\n\n    te[4] = t12 * detInv;\n    te[5] =\n      (n13 * n34 * n41 -\n        n14 * n33 * n41 +\n        n14 * n31 * n43 -\n        n11 * n34 * n43 -\n        n13 * n31 * n44 +\n        n11 * n33 * n44) *\n      detInv;\n    te[6] =\n      (n14 * n32 * n41 -\n        n12 * n34 * n41 -\n        n14 * n31 * n42 +\n        n11 * n34 * n42 +\n        n12 * n31 * n44 -\n        n11 * n32 * n44) *\n      detInv;\n    te[7] =\n      (n12 * n33 * n41 -\n        n13 * n32 * n41 +\n        n13 * n31 * n42 -\n        n11 * n33 * n42 -\n        n12 * n31 * n43 +\n        n11 * n32 * n43) *\n      detInv;\n\n    te[8] = t13 * detInv;\n    te[9] =\n      (n14 * n23 * n41 -\n        n13 * n24 * n41 -\n        n14 * n21 * n43 +\n        n11 * n24 * n43 +\n        n13 * n21 * n44 -\n        n11 * n23 * n44) *\n      detInv;\n    te[10] =\n      (n12 * n24 * n41 -\n        n14 * n22 * n41 +\n        n14 * n21 * n42 -\n        n11 * n24 * n42 -\n        n12 * n21 * n44 +\n        n11 * n22 * n44) *\n      detInv;\n    te[11] =\n      (n13 * n22 * n41 -\n        n12 * n23 * n41 -\n        n13 * n21 * n42 +\n        n11 * n23 * n42 +\n        n12 * n21 * n43 -\n        n11 * n22 * n43) *\n      detInv;\n\n    te[12] = t14 * detInv;\n    te[13] =\n      (n13 * n24 * n31 -\n        n14 * n23 * n31 +\n        n14 * n21 * n33 -\n        n11 * n24 * n33 -\n        n13 * n21 * n34 +\n        n11 * n23 * n34) *\n      detInv;\n    te[14] =\n      (n14 * n22 * n31 -\n        n12 * n24 * n31 -\n        n14 * n21 * n32 +\n        n11 * n24 * n32 +\n        n12 * n21 * n34 -\n        n11 * n22 * n34) *\n      detInv;\n    te[15] =\n      (n12 * n23 * n31 -\n        n13 * n22 * n31 +\n        n13 * n21 * n32 -\n        n11 * n23 * n32 -\n        n12 * n21 * n33 +\n        n11 * n22 * n33) *\n      detInv;\n    return this;\n  }\n\n  getMaxScaleOnAxis() {\n    const te = this.value;\n    const scaleXSq = te[0] * te[0] + te[1] * te[1] + te[2] * te[2];\n    const scaleYSq = te[4] * te[4] + te[5] * te[5] + te[6] * te[6];\n    const scaleZSq = te[8] * te[8] + te[9] * te[9] + te[10] * te[10];\n    return Math.sqrt(Math.max(scaleXSq, scaleYSq, scaleZSq));\n  }\n\n  makeTranslation(x: Vector3 | number, y?: number, z?: number) {\n    if (x instanceof Vector3) {\n      this.set(1, 0, 0, x.x, 0, 1, 0, x.y, 0, 0, 1, x.z, 0, 0, 0, 1);\n    } else {\n      this.set(1, 0, 0, x, 0, 1, 0, y, 0, 0, 1, z, 0, 0, 0, 1);\n    }\n    return this;\n  }\n\n  makeRotationX(theta: number) {\n    const c = Math.cos(theta);\n    const s = Math.sin(theta);\n    this.set(1, 0, 0, 0, 0, c, -s, 0, 0, s, c, 0, 0, 0, 0, 1);\n    return this;\n  }\n\n  makeRotationY(theta: number) {\n    const c = Math.cos(theta);\n    const s = Math.sin(theta);\n    this.set(c, 0, s, 0, 0, 1, 0, 0, -s, 0, c, 0, 0, 0, 0, 1);\n    return this;\n  }\n\n  makeRotationZ(theta: number) {\n    const c = Math.cos(theta);\n    const s = Math.sin(theta);\n    this.set(c, -s, 0, 0, s, c, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\n    return this;\n  }\n\n  makeRotationAxis(axis: Vector3, angle: number) {\n    // Based on http://www.gamedev.net/reference/articles/article1199.asp\n\n    const c = Math.cos(angle);\n    const s = Math.sin(angle);\n    const t = 1 - c;\n    const x = axis.x;\n    const y = axis.y;\n    const z = axis.z;\n    const tx = t * x;\n    const ty = t * y;\n\n    this.set(\n      tx * x + c,\n      tx * y - s * z,\n      tx * z + s * y,\n      0,\n      tx * y + s * z,\n      ty * y + c,\n      ty * z - s * x,\n      0,\n      tx * z - s * y,\n      ty * z + s * x,\n      t * z * z + c,\n      0,\n      0,\n      0,\n      0,\n      1\n    );\n\n    return this;\n  }\n\n  makeScale(x: number, y: number, z: number) {\n    this.set(x, 0, 0, 0, 0, y, 0, 0, 0, 0, z, 0, 0, 0, 0, 1);\n    return this;\n  }\n\n  makeShear(\n    xy: number,\n    xz: number,\n    yx: number,\n    yz: number,\n    zx: number,\n    zy: number\n  ) {\n    this.set(1, yx, zx, 0, xy, 1, zy, 0, xz, yz, 1, 0, 0, 0, 0, 1);\n    return this;\n  }\n\n  makePerspective(\n    left: number,\n    right: number,\n    top: number,\n    bottom: number,\n    near: number,\n    far: number,\n    coordinateSystem = WebGLCoordinateSystem\n  ) {\n    const te = this.value;\n    const x = (2 * near) / (right - left);\n    const y = (2 * near) / (top - bottom);\n\n    const a = (right + left) / (right - left);\n    const b = (top + bottom) / (top - bottom);\n\n    let c, d;\n\n    if (coordinateSystem === WebGLCoordinateSystem) {\n      c = -(far + near) / (far - near);\n      d = (-2 * far * near) / (far - near);\n    } else if (coordinateSystem === WebGPUCoordinateSystem) {\n      c = -far / (far - near);\n      d = (-far * near) / (far - near);\n    } else {\n      throw new Error(\n        \"Matrix4.makePerspective(): Invalid coordinate system: \" +\n          coordinateSystem\n      );\n    }\n\n    te[0] = x;\n    te[4] = 0;\n    te[8] = a;\n    te[12] = 0;\n    te[1] = 0;\n    te[5] = y;\n    te[9] = b;\n    te[13] = 0;\n    te[2] = 0;\n    te[6] = 0;\n    te[10] = c;\n    te[14] = d;\n    te[3] = 0;\n    te[7] = 0;\n    te[11] = -1;\n    te[15] = 0;\n\n    return this;\n  }\n\n  makeOrthographic(\n    left: number,\n    right: number,\n    top: number,\n    bottom: number,\n    near: number,\n    far: number,\n    coordinateSystem = WebGLCoordinateSystem\n  ) {\n    const te = this.value;\n    const w = 1.0 / (right - left);\n    const h = 1.0 / (top - bottom);\n    const p = 1.0 / (far - near);\n\n    const x = (right + left) * w;\n    const y = (top + bottom) * h;\n\n    let z, zInv;\n\n    if (coordinateSystem === WebGLCoordinateSystem) {\n      z = (far + near) * p;\n      zInv = -2 * p;\n    } else if (coordinateSystem === WebGPUCoordinateSystem) {\n      z = near * p;\n      zInv = -1 * p;\n    } else {\n      throw new Error(\n        \"Matrix4.makeOrthographic(): Invalid coordinate system: \" +\n          coordinateSystem\n      );\n    }\n\n    te[0] = 2 * w;\n    te[4] = 0;\n    te[8] = 0;\n    te[12] = -x;\n    te[1] = 0;\n    te[5] = 2 * h;\n    te[9] = 0;\n    te[13] = -y;\n    te[2] = 0;\n    te[6] = 0;\n    te[10] = zInv;\n    te[14] = -z;\n    te[3] = 0;\n    te[7] = 0;\n    te[11] = 0;\n    te[15] = 1;\n\n    return this;\n  }\n\n  compose(position: Vector3, quaternion: Quaternion, scale: Vector3) {\n    const te = this.value;\n\n    const x = quaternion.x;\n    const y = quaternion.y;\n    const z = quaternion.z;\n    const w = quaternion.w;\n    const x2 = x + x;\n    const y2 = y + y;\n    const z2 = z + z;\n    const xx = x * x2;\n    const xy = x * y2;\n    const xz = x * z2;\n    const yy = y * y2;\n    const yz = y * z2;\n    const zz = z * z2;\n    const wx = w * x2;\n    const wy = w * y2;\n    const wz = w * z2;\n\n    const sx = scale.x;\n    const sy = scale.y;\n    const sz = scale.z;\n\n    te[0] = (1 - (yy + zz)) * sx;\n    te[1] = (xy + wz) * sx;\n    te[2] = (xz - wy) * sx;\n    te[3] = 0;\n\n    te[4] = (xy - wz) * sy;\n    te[5] = (1 - (xx + zz)) * sy;\n    te[6] = (yz + wx) * sy;\n    te[7] = 0;\n\n    te[8] = (xz + wy) * sz;\n    te[9] = (yz - wx) * sz;\n    te[10] = (1 - (xx + yy)) * sz;\n    te[11] = 0;\n\n    te[12] = position.x;\n    te[13] = position.y;\n    te[14] = position.z;\n    te[15] = 1;\n\n    return this;\n  }\n\n  decompose(position: Vector3, quaternion: Quaternion, scale: Vector3) {\n    const te = this.value;\n\n    let sx = _v3.set(te[0], te[1], te[2]).length();\n    const sy = _v3.set(te[4], te[5], te[6]).length();\n    const sz = _v3.set(te[8], te[9], te[10]).length();\n\n    // if determine is negative, we need to invert one scale\n    const det = this.determinant();\n    if (det < 0) sx = -sx;\n\n    position.x = te[12];\n    position.y = te[13];\n    position.z = te[14];\n\n    // scale the rotation part\n    _m4.copy(this);\n\n    const invSX = 1 / sx;\n    const invSY = 1 / sy;\n    const invSZ = 1 / sz;\n\n    _m4.value[0] *= invSX;\n    _m4.value[1] *= invSX;\n    _m4.value[2] *= invSX;\n\n    _m4.value[4] *= invSY;\n    _m4.value[5] *= invSY;\n    _m4.value[6] *= invSY;\n\n    _m4.value[8] *= invSZ;\n    _m4.value[9] *= invSZ;\n    _m4.value[10] *= invSZ;\n\n    quaternion.setFromRotationMatrix4(_m4);\n\n    scale.x = sx;\n    scale.y = sy;\n    scale.z = sz;\n\n    return this;\n  }\n\n  equals(matrix: Matrix4) {\n    for (let i = 0; i < 16; i++) {\n      if (this.value[i] !== matrix.value[i]) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  translate(x = 0, y = 0, z = 0) {\n    return this.multiply(\n      new Matrix4([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, x, y, z, 1])\n    );\n  }\n\n  scale(x = 1, y = 1, z = 1) {\n    return this.multiply(\n      new Matrix4([x, 0, 0, 0, 0, y, 0, 0, 0, 0, z, 0, 0, 0, 0, 1])\n    );\n  }\n\n  scaleVector3(v: Vector3) {\n    const te = this.value;\n    const x = v.x;\n    const y = v.y;\n    const z = v.z;\n\n    te[0] *= x;\n    te[4] *= y;\n    te[8] *= z;\n    te[1] *= x;\n    te[5] *= y;\n    te[9] *= z;\n    te[2] *= x;\n    te[6] *= y;\n    te[10] *= z;\n    te[3] *= x;\n    te[7] *= y;\n    te[11] *= z;\n\n    return this;\n  }\n\n  // rotate(degX = 0, degY = 0, degZ = 0) {\n  //   if (degZ) {\n  //     this.is3dSpecial = true;\n  //   }\n  //   const x = toRadian(degX);\n  //   const y = toRadian(degY);\n  //   const z = toRadian(degZ);\n  //   const a = Math.cos(x);\n  //   const b = Math.sin(x);\n  //   const c = Math.cos(y);\n  //   const d = Math.sin(y);\n  //   const e = Math.cos(z);\n  //   const f = Math.sin(z);\n  //   const ae = a * e;\n  //   const af = a * f;\n  //   const be = b * e;\n  //   const bf = b * f;\n  //   this.m11 = c * e;\n  //   this.m21 = -c * f;\n  //   this.m31 = d;\n  //   this.m12 = af + be * d;\n  //   this.m22 = ae - bf * d;\n  //   this.m32 = -b * c;\n  //   this.m13 = bf - ae * d;\n  //   this.m23 = be + af * d;\n  //   this.m33 = a * c;\n  //   return this;\n  // }\n\n  rotateX(degree: number) {\n    const a = toRadian(degree);\n    const c = Math.cos(a);\n    const s = Math.sin(a);\n    return this.multiply(\n      // new Matrix4([1, 0, 0, 0, 0, c, -s, 0, 0, s, c, 0, 0, 0, 0, 1])\n      new Matrix4([1, 0, 0, 0, 0, c, s, 0, 0, -s, c, 0, 0, 0, 0, 1])\n    );\n  }\n\n  rotateY(degree: number) {\n    const a = toRadian(degree);\n    const c = Math.cos(a);\n    const s = Math.sin(a);\n    return this.multiply(\n      // new Matrix4([c, 0, s, 0, 0, 1, 0, 0, -s, 0, c, 0, 0, 0, 0, 1])\n      new Matrix4([c, 0, -s, 0, 0, 1, 0, 0, s, 0, c, 0, 0, 0, 0, 1])\n    );\n  }\n\n  /// this.multiply([c, s, -s, c, 0, 0]);\n  rotateZ(degree: number) {\n    this.is3dSpecial = true;\n    const a = toRadian(degree);\n    const c = Math.cos(a);\n    const s = Math.sin(a);\n    return this.multiply(\n      // new Matrix4([c, -s, 0, 0, s, c, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1])\n      new Matrix4([c, s, 0, 0, -s, c, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1])\n    );\n  }\n\n  skew(degX = 0, degY = 0, degZ = 0) {\n    return this.multiply(\n      new Matrix4([\n        1,\n        0,\n        0,\n        toRadian(degX),\n        0,\n        1,\n        0,\n        toRadian(degY),\n        0,\n        0,\n        1,\n        toRadian(degZ),\n        0,\n        0,\n        0,\n        1\n      ])\n    );\n  }\n\n  perspective(perspective: number) {\n    return this.multiply(\n      new Matrix4([\n        1,\n        0,\n        0,\n        0,\n        0,\n        1,\n        0,\n        0,\n        0,\n        0,\n        1,\n        perspective ? -(1 / perspective) : 0,\n        0,\n        0,\n        0,\n        1\n      ])\n    );\n  }\n\n  // based on http://code.metager.de/source/xref/mozilla/B2G/gecko/gfx/thebes/gfx3DMatrix.cpp#651\n  unproject(point: { x: number; y: number }) {\n    let x = point.x * this.m11 + point.y * this.m21 + this.m41;\n    let y = point.x * this.m12 + point.y * this.m22 + this.m42;\n    let z = point.x * this.m13 + point.y * this.m23 + this.m43;\n    let w = point.x * this.m14 + point.y * this.m24 + this.m44;\n\n    let qx = x + this.m31;\n    let qy = y + this.m32;\n    let qz = z + this.m33;\n    let qw = w + this.m34;\n\n    if (w == 0) w = 0.0001;\n    x /= w;\n    y /= w;\n    z /= w;\n\n    if (qw == 0) qw = 0.0001;\n    qx /= qw;\n    qy /= qw;\n    qz /= qw;\n\n    // TODO: ....\n    const wz = qz - z;\n    if (wz == 0) {\n      return { x, y, z, mass: w };\n    }\n\n    const t = -z / wz;\n    x += t * (qx - x);\n    y += t * (qy - y);\n\n    return { x, y, z, mass: w };\n  }\n\n  // from homegeneous (euclid) to cartesian FLATTENED!!!! like a projection\n  project(point: Point3D) {\n    const z = point.z;\n    let x = point.x * this.m11 + point.y * this.m21 + z * this.m31 + this.m41;\n    let y = point.x * this.m12 + point.y * this.m22 + z * this.m32 + this.m42;\n    let w = point.x * this.m14 + point.y * this.m24 + z * this.m34 + this.m44;\n\n    if (w == 0) w = 0.0001;\n    x /= w;\n    y /= w;\n\n    // lets call it \"hasenfuss\"\n    // look at the developer tools of firefox and chrome ->\n    // ff and chrome do it wrong: the highlighted bounding box failed to be correct\n    // and getBoundingClientRect also\n\n    // behind the \"camera\" (z > 0)\n    if (w < 0) {\n      x -= this.m41;\n      y -= this.m42;\n      x *= 1 / w;\n      y *= 1 / w;\n      x += this.m41;\n      y += this.m42;\n    }\n    return { x, y, z, mass: w };\n  }\n\n  bounds(\n    x: number,\n    y: number,\n    width: number,\n    height: number\n  ): { x: number; y: number; width: number; height: number } {\n    const ptA = new Point3D({ x, y });\n    const ptB = new Point3D({ x: x + width, y });\n    const ptC = new Point3D({ x: x + width, y: y + height });\n    const ptD = new Point3D({ x, y: y + height });\n\n    ({ x: ptA.x, y: ptA.y, z: ptA.z, mass: ptA.mass } = this.project(ptA));\n    ({ x: ptB.x, y: ptB.y, z: ptB.z, mass: ptB.mass } = this.project(ptB));\n    ({ x: ptC.x, y: ptC.y, z: ptC.z, mass: ptC.mass } = this.project(ptC));\n    ({ x: ptD.x, y: ptD.y, z: ptD.z, mass: ptD.mass } = this.project(ptD));\n\n    const x2 = Math.min(ptA.x, ptB.x, ptC.x, ptD.x);\n    const y2 = Math.min(ptA.y, ptB.y, ptC.y, ptD.y);\n    const width2 = Math.max(ptA.x, ptB.x, ptC.x, ptD.x) - x2;\n    const height2 = Math.max(ptA.y, ptB.y, ptC.y, ptD.y) - y2;\n\n    return { x: x2, y: y2, width: width2, height: height2 };\n  }\n}\n\nexport class Matrix {\n  /// 按列顺序\n  value: TMatrixValue;\n  private _m13 = 0;\n  private _m23 = 0;\n  private _m33 = 1;\n\n  matrix4: Matrix4;\n\n  constructor(value: TMatrixValue = DEFAULT_MATRIX_VALUE) {\n    this.value = Array.from(value) as TMatrixValue;\n    this.matrix4 = this.toMatrix4();\n  }\n\n  get m11() {\n    return this.value[0];\n  }\n  get m12() {\n    return this.value[1];\n  }\n  get m13() {\n    return this._m13;\n  }\n  get m21() {\n    return this.value[2];\n  }\n  get m22() {\n    return this.value[3];\n  }\n  get m23() {\n    return this._m23;\n  }\n  get m31() {\n    return this.value[4];\n  }\n  get m32() {\n    return this.value[5];\n  }\n  get m33() {\n    return this._m33;\n  }\n\n  set m11(v: number) {\n    this.value[0] = v;\n  }\n  set m12(v: number) {\n    this.value[1] = v;\n  }\n  set m13(v: number) {\n    this._m13 = v;\n  }\n  set m21(v: number) {\n    this.value[2] = v;\n  }\n  set m22(v: number) {\n    this.value[3] = v;\n  }\n  set m23(v: number) {\n    this._m23 = v;\n  }\n  set m31(v: number) {\n    this.value[4] = v;\n  }\n  set m32(v: number) {\n    this.value[5] = v;\n  }\n  set m33(v: number) {\n    this._m33 = v;\n  }\n\n  // matrix(1, 0, 0, 1, -50, -50)\n  static fromString(s: string) {\n    const m = new Matrix();\n    const results = regMatchAll(\"number\", s);\n    if (results.length === 6) {\n      results.forEach((result, index) => {\n        if (result.fullMatch) {\n          m.value[index] = parseFloat(result.fullMatch);\n        }\n      });\n    }\n    return m;\n  }\n\n  toMatrix4(matrix4 = this.matrix4) {\n    const value: TMatrix4Value = [\n      this.m11,\n      this.m12,\n      0,\n      this.m13,\n      this.m21,\n      this.m22,\n      0,\n      this.m23,\n      0,\n      0,\n      1,\n      0,\n      this.m31,\n      this.m32,\n      0,\n      this.m33\n    ];\n    if (matrix4) {\n      matrix4.value = value;\n      return matrix4;\n    }\n    return new Matrix4(value);\n  }\n\n  identity() {\n    this.value = Array.from(DEFAULT_MATRIX_VALUE) as TMatrixValue;\n    this.m13 = 0;\n    this.m23 = 0;\n    this.m33 = 1;\n    this.matrix4 = this.toMatrix4();\n    return this;\n  }\n\n  get isIdentity(): boolean {\n    return (\n      this.m11 == 1 &&\n      this.m12 == 0 &&\n      this.m13 == 0 &&\n      this.m21 == 0 &&\n      this.m22 == 1 &&\n      this.m23 == 0 &&\n      this.m31 == 0 &&\n      this.m32 == 0 &&\n      this.m33 == 1\n    );\n  }\n\n  multiplyScalar(s: number) {\n    this.m11 *= s;\n    this.m12 *= s;\n    this.m13 *= s;\n    this.m21 *= s;\n    this.m22 *= s;\n    this.m23 *= s;\n    this.m31 *= s;\n    this.m32 *= s;\n    this.m33 *= s;\n    return this;\n  }\n\n  normalize() {\n    const m33 = this.m33 || 0.0001;\n    return this.multiplyScalar(1 / m33);\n  }\n\n  transformPoint(point: { x: number; y: number; z?: number }): {\n    x: number;\n    y: number;\n    z: number;\n  } {\n    const z = point.z || 1;\n    return {\n      x: point.x * this.m11 + point.y * this.m21 + z * this.m31,\n      y: point.x * this.m12 + point.y * this.m22 + z * this.m32,\n      z: point.x * this.m13 + point.y * this.m23 + z * this.m33\n    };\n  }\n\n  clone(): Matrix {\n    return new Matrix(this.value);\n  }\n\n  multiply(matrix: Matrix | TMatrixValue) {\n    const a = this.clone();\n    const b = matrix instanceof Matrix ? matrix : new Matrix(matrix);\n    this.m11 = b.m11 * a.m11 + b.m12 * a.m21 + b.m13 * a.m31;\n    this.m12 = b.m11 * a.m12 + b.m12 * a.m22 + b.m13 * a.m32;\n    this.m13 = b.m11 * a.m13 + b.m12 * a.m23 + b.m13 * a.m33;\n    this.m21 = b.m21 * a.m11 + b.m22 * a.m21 + b.m23 * a.m31;\n    this.m22 = b.m21 * a.m12 + b.m22 * a.m22 + b.m23 * a.m32;\n    this.m23 = b.m21 * a.m13 + b.m22 * a.m23 + b.m23 * a.m33;\n    this.m31 = b.m31 * a.m11 + b.m32 * a.m21 + b.m33 * a.m31;\n    this.m32 = b.m31 * a.m12 + b.m32 * a.m22 + b.m33 * a.m32;\n    this.m33 = b.m31 * a.m13 + b.m32 * a.m23 + b.m33 * a.m33;\n    return this;\n  }\n\n  append(matrix: Matrix) {\n    return this.multiply(matrix);\n  }\n\n  prepend(matrix: Matrix) {\n    matrix.multiply(this);\n    return this;\n  }\n\n  inverse() {\n    // const m11 = this.m11;\n    // const m12 = this.m12;\n    // const m21 = this.m21;\n    // const m22 = this.m22;\n    // const m31 = this.m31;\n    // const m32 = this.m32;\n    // const n = m11 * m22 - m12 * m21;\n    // this.m11 = m22 / n;\n    // this.m12 = -m12 / n;\n    // this.m21 = -m21 / n;\n    // this.m22 = m11 / n;\n    // this.m31 = (m21 * m32 - m22 * m31) / n;\n    // this.m32 = -(m11 * m32 - m12 * m31) / n;\n    // this.m13 = 0;\n    // this.m23 = 0;\n    // this.m33 = 1;\n    const a00 = this.m11;\n    const a01 = this.m12;\n    const a02 = this.m13;\n    const a10 = this.m21;\n    const a11 = this.m22;\n    const a12 = this.m23;\n    const a20 = this.m31;\n    const a21 = this.m32;\n    const a22 = this.m33;\n\n    const b01 = a22 * a11 - a12 * a21;\n    const b11 = -a22 * a10 + a12 * a20;\n    const b21 = a21 * a10 - a11 * a20;\n\n    // Calculate the determinant\n    let det = a00 * b01 + a01 * b11 + a02 * b21;\n\n    if (!det) {\n      return null;\n    }\n    det = 1.0 / det;\n\n    this.m11 = b01 * det;\n    this.m12 = (-a22 * a01 + a02 * a21) * det;\n    this.m13 = (a12 * a01 - a02 * a11) * det;\n    this.m21 = b11 * det;\n    this.m22 = (a22 * a00 - a02 * a20) * det;\n    this.m23 = (-a12 * a00 + a02 * a10) * det;\n    this.m31 = b21 * det;\n    this.m32 = (-a21 * a00 + a01 * a20) * det;\n    this.m33 = (a11 * a00 - a01 * a10) * det;\n    return this;\n  }\n\n  adjugate(): Matrix {\n    const matrix = new Matrix();\n    matrix.m11 = this.m22 * this.m33 - this.m32 * this.m23;\n    matrix.m12 = this.m32 * this.m13 - this.m12 * this.m33;\n    matrix.m13 = this.m12 * this.m23 - this.m22 * this.m13;\n    matrix.m21 = this.m31 * this.m23 - this.m21 * this.m33;\n    matrix.m22 = this.m11 * this.m33 - this.m31 * this.m13;\n    matrix.m23 = this.m21 * this.m13 - this.m11 * this.m23;\n    matrix.m31 = this.m21 * this.m32 - this.m31 * this.m22;\n    matrix.m32 = this.m31 * this.m12 - this.m11 * this.m32;\n    matrix.m33 = this.m11 * this.m22 - this.m21 * this.m12;\n    return matrix;\n  }\n\n  split() {\n    let degree = toDegree(Math.atan2(this.m12, this.m11));\n    if (this.m11 < 0 && this.m22 >= 0) {\n      degree += 180;\n    }\n    return {\n      x: this.m31,\n      y: this.m32,\n      degree,\n      scaleX: Math.sqrt(this.m11 * this.m11 + this.m12 * this.m12),\n      scaleY: Math.sqrt(this.m21 * this.m21 + this.m22 * this.m22),\n      skewX: toDegree(Math.atan2(-this.m21, this.m22)),\n      skewY: toDegree(Math.atan2(this.m12, this.m11))\n    };\n  }\n\n  getGroupCoords(group: Matrix) {\n    // possible to replace with node * group.inverse()\n    const M = this.value[0],\n      N = this.value[1],\n      O = this.value[2],\n      P = this.value[3],\n      R = this.value[4],\n      S = this.value[5],\n      A = group.value[0],\n      B = group.value[1],\n      C = group.value[2],\n      D = group.value[3],\n      E = group.value[4],\n      F = group.value[5],\n      AD = A * D,\n      BC = B * C,\n      G = (C * N - M * D) / (BC - AD),\n      H = (A * N - M * B) / (AD - BC),\n      I = (C * P - O * D) / (BC - AD),\n      J = (A * P - O * B) / (AD - BC),\n      K = (C * (S - F) + D * (E - R)) / (BC - AD),\n      L = (A * (S - F) + B * (E - R)) / (AD - BC);\n    const matrix = [G, H, I, J, K, L];\n    return new Matrix(matrix as TMatrixValue);\n  }\n\n  toString(fractionalDigits = 6) {\n    if (this.matrix4.is2D()) {\n      return `matrix(${this.value\n        .map((v) => maxDotNumber(v, fractionalDigits))\n        .join(\",\")})`;\n    } else {\n      return this.matrix4.toString();\n    }\n  }\n\n  // toFilter() {\n  //   return (\n  //     \"progid:DXImageTransform.Microsoft.Matrix(M11=\" +\n  //     this.value[0] +\n  //     \", M12=\" +\n  //     this.value[2] +\n  //     \", M21=\" +\n  //     this.value[1] +\n  //     \", M22=\" +\n  //     this.value[3] +\n  //     \", Dx=\" +\n  //     this.value[4] +\n  //     \", Dy=\" +\n  //     this.value[5] +\n  //     \", sizingmethod='auto expand')\"\n  //   );\n  // }\n\n  // 相对值\n  translate(x: number, y: number) {\n    this.multiply([1, 0, 0, 1, x, y]);\n    this.toMatrix4();\n    return this;\n  }\n  // 绝对值\n  translateTo(x: number, y: number) {\n    return this.translate(x - this.m31, y - this.m32);\n  }\n  translateX(x: number) {\n    return this.translate(x, 0);\n  }\n  translateXTo(x: number) {\n    return this.translateTo(x, this.m32);\n  }\n  translateY(y: number) {\n    return this.translate(0, y);\n  }\n  translateYTo(y: number) {\n    return this.translateTo(this.m31, y);\n  }\n  translateZ(z: number) {\n    this.matrix4.translate(0, 0, z);\n    this.matrix4.toMatrix(this);\n    return this;\n  }\n  translateZTo(z: number) {\n    this.translateZ(z - this.matrix4.m43);\n    return this;\n  }\n  translate3d(x: number, y: number, z: number) {\n    this.matrix4.translate(x, y, z);\n    this.matrix4.toMatrix(this);\n    return this;\n  }\n  translate3dTo(x: number, y: number, z: number) {\n    this.translate3d(\n      x - this.matrix4.m41,\n      y - this.matrix4.m42,\n      z - this.matrix4.m43\n    );\n    return this;\n  }\n\n  rotate(deg: number, centerX = 0, centerY = 0) {\n    const rad = toRadian(deg);\n    const c = Math.cos(rad);\n    const s = Math.sin(rad);\n    this.translate(centerX, centerY);\n    this.multiply([c, s, -s, c, 0, 0]);\n    this.translate(-centerX, -centerY);\n    this.toMatrix4();\n    return this;\n  }\n  rotateTo(targetDeg: number, centerX = 0, centerY = 0) {\n    const { degree } = this.split();\n    this.rotate(targetDeg - degree, centerX, centerY);\n    return this;\n  }\n  rotateX(deg: number) {\n    this.matrix4.rotateX(deg);\n    this.matrix4.toMatrix(this);\n    return this;\n  }\n  rotateXTo(targetDeg: number) {\n    const { degreeX } = this.matrix4.split();\n    this.rotateX(targetDeg - degreeX);\n    return this;\n  }\n  rotateY(deg: number) {\n    this.matrix4.rotateY(deg);\n    this.matrix4.toMatrix(this);\n    return this;\n  }\n  rotateYTo(targetDeg: number) {\n    const { degreeY } = this.matrix4.split();\n    this.rotateY(targetDeg - degreeY);\n    return this;\n  }\n\n  rotateZ(deg: number) {\n    this.matrix4.rotateZ(deg);\n    // this.matrix4.rotate(0, 0, deg);\n    this.matrix4.toMatrix(this);\n    return this;\n  }\n  rotateZTo(targetDeg: number) {\n    const { degreeZ } = this.matrix4.split();\n    this.rotateZ(targetDeg - degreeZ);\n    return this;\n  }\n  rotate3d(x: number, y: number, z: number) {\n    // this.matrix4.rotate(x, y, z);\n    this.matrix4.rotateX(x).rotateY(y).rotateZ(z);\n    this.matrix4.toMatrix(this);\n    return this;\n  }\n  rotate3dTo(targetX: number, targetY: number, targetZ: number) {\n    const { degreeX, degreeY, degreeZ } = this.matrix4.split();\n    this.rotate3d(targetX - degreeX, targetY - degreeY, targetZ - degreeZ);\n    return this;\n  }\n\n  scale(sx: number, sy = sx, centerX = 0, centerY = 0) {\n    this.translate(centerX, centerY);\n    this.multiply([sx, 0, 0, sy, 0, 0]);\n    this.translate(-centerX, -centerY);\n    this.toMatrix4();\n    return this;\n  }\n  scaleTo(targetSx: number, targetSy = targetSx, centerX = 0, centerY = 0) {\n    return this.scale(\n      targetSx / this.m11,\n      targetSy / this.m22,\n      centerX,\n      centerY\n    );\n  }\n  scaleX(sx: number) {\n    return this.scale(sx, 1);\n  }\n  scaleXTo(sx: number) {\n    return this.scale(sx / this.m11, 1);\n  }\n  scaleY(sy: number) {\n    return this.scale(1, sy);\n  }\n  scaleYTo(sy: number) {\n    return this.scale(1, sy / this.m22);\n  }\n  scaleZ(sz: number) {\n    this.matrix4.scale(1, 1, sz);\n    this.matrix4.toMatrix(this);\n    return this;\n  }\n  scaleZTo(sz: number) {\n    const { scalarZ } = this.matrix4.split();\n    this.scaleZ(sz / scalarZ);\n    return this;\n  }\n  scale3d(sx: number, sy = sx, sz = sx) {\n    this.matrix4.scale(sx, sy, sz);\n    this.matrix4.toMatrix(this);\n    return this;\n  }\n  scale3dTo(sx: number, sy = sx, sz = sx) {\n    const { scalarX, scalarY, scalarZ } = this.matrix4.split();\n    this.scale3d(sx / scalarX, sy / scalarY, sz / scalarZ);\n    return this;\n  }\n\n  skew(degX: number, degY = degX) {\n    // const tx = Math.tan(toRadian(degX));\n    // const ty = Math.tan(toRadian(degY));\n    // this.multiply([1, ty, tx, 1, 0, 0]);\n    this.multiply([\n      Math.cos(toRadian(degY)),\n      Math.sin(toRadian(degY)),\n      -Math.sin(toRadian(degX)),\n      Math.cos(toRadian(degX)),\n      0,\n      0\n    ]);\n    this.toMatrix4();\n    return this;\n  }\n  skewTo(degX: number, degY = degX) {\n    const { skewX, skewY } = this.split();\n    return this.skew(degX - skewX, degY - skewY);\n  }\n  skewX(deg: number) {\n    const { skewY } = this.split();\n    return this.skew(deg, skewY);\n  }\n  skewXTo(deg: number) {\n    const { skewY } = this.split();\n    return this.skewTo(deg, skewY);\n  }\n  skewY(deg: number) {\n    const { skewX } = this.split();\n    return this.skew(skewX, deg);\n  }\n  skewYTo(deg: number) {\n    const { skewX } = this.split();\n    return this.skewTo(skewX, deg);\n  }\n  skewZ(deg: number) {\n    /// UNDO\n    return this;\n  }\n  skewZTo(deg: number) {\n    /// UNDO\n    return this;\n  }\n  skew3d(degx: number, degy: number, degz: number) {\n    /// UNDO\n    return this;\n  }\n  skew3dTo(degx: number, degy: number, degz: number) {\n    /// UNDO\n    return this;\n  }\n\n  perspective(perspective: number) {\n    this.matrix4.perspective(perspective);\n    this.matrix4.toMatrix(this);\n    return this;\n  }\n}\n\nexport default Matrix;\n\nconst _zero = new Vector3(0, 0, 0);\nconst _one = new Vector3(1, 1, 1);\nconst _x = new Vector3();\nconst _y = new Vector3();\nconst _z = new Vector3();\nconst _v3 = new Vector3();\nconst _m3 = new Matrix3();\nconst _m4 = new Matrix4();\n\n// 矩阵不满足交换律，所以顺序很重要\n// matrix(0.707106781,0.707106781,-0.707106781,0.707106781,-0.7071067810000002,34.648232269)\n// CSS transform: parseTransformToMatrix('rotate(45deg) translate(24px,25px)')\n// SVG Path d : parseTransformToMatrix('r 45 t 24,25')\n// SVG transform : parseTransformToMatrix('rotate(45) translate(24 25)')\n// translate(-50%, -50%) 暂不支持%\nexport function parseTransformToMatrix(t: string) {\n  const matrix = new Matrix();\n  t.replace(\n    // /([a-z]+)\\(?([^)a-z]+)\\)?/gi,\n    /([a-z0-9]+)\\s*\\(?\\s*((-?[0-9]*\\.?[0-9]+(?:e[-+]?\\d+)*[a-z%]*\\s*,?\\s*)+)\\)?/gi,\n    function (all, command, matchString) {\n      if (matchString.indexOf(\",\") >= 0) {\n        matchString = matchString.split(/\\s*,\\s*/);\n      } else {\n        matchString = matchString.split(/\\s+/);\n      }\n      const values: number[] = [];\n      for (let i = 0, count = matchString.length; i < count; i++) {\n        if (matchString[i].trim()) {\n          values.push(parseFloat(\"\" + matchString[i]));\n        }\n      }\n      switch (command.toLowerCase()) {\n        case \"t\":\n        case \"translate\":\n          matrix.translate(values[0], values[1]);\n          break;\n        case \"translatex\":\n          matrix.translateX(values[0]);\n          break;\n        case \"translatey\":\n          matrix.translateY(values[0]);\n          break;\n        case \"translatez\":\n          matrix.translateZ(values[0]);\n          break;\n        case \"translate3d\":\n          matrix.translate3d(values[0], values[1], values[2]);\n          break;\n        case \"r\":\n        case \"rotate\":\n          matrix.rotate(values[0], values[1] ?? 0, values[2] ?? 0);\n          break;\n        case \"rotatex\":\n          matrix.rotateX(values[0]);\n          break;\n        case \"rotatey\":\n          matrix.rotateY(values[0]);\n          break;\n        case \"rotatez\":\n          matrix.rotateZ(values[0]);\n          break;\n        case \"rotate3d\":\n          matrix.rotate3d(values[0], values[1], values[2]);\n          break;\n        case \"s\":\n        case \"scale\":\n          matrix.scale(values[0], values[1] ?? values[0]);\n          break;\n        case \"scalex\":\n          matrix.scaleX(values[0]);\n          break;\n        case \"scaley\":\n          matrix.scaleY(values[0]);\n          break;\n        case \"scalez\":\n          matrix.scaleZ(values[0]);\n          break;\n        case \"scale3d\":\n          matrix.scale3d(values[0], values[1], values[2]);\n          break;\n        case \"skew\":\n          matrix.skew(values[0], values[1] ?? 0);\n          break;\n        case \"skewx\":\n          matrix.skewX(values[0]);\n          break;\n        case \"skewy\":\n          matrix.skewY(values[0]);\n          break;\n        case \"skewz\":\n          matrix.skewZ(values[0]);\n          break;\n        case \"skew3d\":\n          matrix.skew3d(values[0], values[1], values[2]);\n          break;\n        case \"m\":\n        case \"matrix\":\n          matrix.multiply([\n            values[0],\n            values[1],\n            values[2],\n            values[3],\n            values[4],\n            values[5]\n          ]);\n          matrix.toMatrix4();\n          break;\n        case \"matrix3d\":\n          matrix.matrix4.multiply(new Matrix4(values as TMatrix4Value));\n          matrix.matrix4.toMatrix(matrix);\n          break;\n      }\n      return \"\";\n    }\n  );\n  return matrix;\n}\n\nexport function rotatePoint(\n  radian: number,\n  pointX: number,\n  pointY: number\n): { x: number; y: number } {\n  const m = new Matrix();\n  m.rotate(toDegree(radian));\n  return m.transformPoint({ x: pointX, y: pointY });\n}\n\n// see https://developer.mozilla.org/en-US/docs/Web/API/DOMMatrix/DOMMatrix\nexport function getDOMMatrix(options?: {\n  originMatrix?: string | number[];\n  x?: number;\n  y?: number;\n  degree?: number;\n  scalarX?: number;\n  scalarY?: number;\n}): DOMMatrix {\n  const x = typeof options?.x == \"number\" ? options?.x : 0;\n  const y = typeof options?.y == \"number\" ? options?.y : 0;\n  const degree = typeof options?.degree == \"number\" ? options?.degree : 0;\n  const scalarX = typeof options?.scalarX == \"number\" ? options?.scalarX : 1;\n  const scalarY = typeof options?.scalarY == \"number\" ? options?.scalarY : 1;\n  const radian = toRadian(degree);\n  const c = Math.cos(radian);\n  const s = Math.sin(radian);\n  const matrix = new DOMMatrix([\n    c * scalarX,\n    s * scalarX,\n    -s * scalarY,\n    c * scalarY,\n    x,\n    y\n  ]);\n  matrix.multiplySelf(new DOMMatrix(options?.originMatrix || \"\"));\n  return matrix;\n}\n\n// ctx.beginPath();\n// ctx.fill(pathd)\nexport function transformPath2D(\n  pathString: string,\n  options?: {\n    originMatrix?: string | number[];\n    x?: number;\n    y?: number;\n    degree?: number;\n    scalarX?: number;\n    scalarY?: number;\n  }\n): Path2D {\n  // const x = typeof options?.x == \"number\" ? options?.x : 0;\n  // const y = typeof options?.y == \"number\" ? options?.y : 0;\n  // const degree = typeof options?.degree == \"number\" ? options?.degree : 0;\n  // const scalarX = typeof options?.scalarX == \"number\" ? options?.scalarX : 1;\n  // const scalarY = typeof options?.scalarY == \"number\" ? options?.scalarY : 1;\n  // const path2d = new Path2D(pathString);\n  // const t1 = new Path2D();\n  // t1.addPath(path2d, new DOMMatrix(options?.originMatrix || \"\"));\n  // t1.addPath(path2d);\n  // const t2 = new Path2D();\n  // const radian = toRadian(degree);\n  // const c = Math.cos(radian);\n  // const s = Math.sin(radian);\n  // const matrix = new DOMMatrix([\n  //   c * scalarX,\n  //   s * scalarX,\n  //   -s * scalarY,\n  //   c * scalarY,\n  //   x,\n  //   y\n  // ]);\n  // t2.addPath(t1, matrix);\n  // return t2;\n  const path2d = new Path2D(pathString);\n  const t = new Path2D();\n  t.addPath(path2d, getDOMMatrix(options));\n  return t;\n}\n","import {\n  cloneTypedArray,\n  // fromHalfFloat,\n  newConstructor,\n  // toHalfFloat,\n  type TypedArray\n} from \"@zyzgroup/core-common\";\nimport { Matrix3, Matrix4 } from \"./Matrix\";\nimport { Vector2, Vector3 } from \"./Vector\";\n\nconst _v2 = new Vector2();\nconst _v3 = new Vector3();\n\nfunction denormalize(value: number, array: TypedArray): number {\n  switch (array.constructor) {\n    case Float32Array:\n      return value;\n    case Uint32Array:\n      return value / 4294967295.0;\n    case Uint16Array:\n      return value / 65535.0;\n    case Uint8Array:\n      return value / 255.0;\n    case Int32Array:\n      return Math.max(value / 2147483647.0, -1.0);\n    case Int16Array:\n      return Math.max(value / 32767.0, -1.0);\n    case Int8Array:\n      return Math.max(value / 127.0, -1.0);\n    default:\n      throw new Error(\"Invalid component type.\");\n  }\n}\n\nfunction normalize(value: number, array: TypedArray): number {\n  switch (array.constructor) {\n    case Float32Array:\n      return value;\n    case Uint32Array:\n      return Math.round(value * 4294967295.0);\n    case Uint16Array:\n      return Math.round(value * 65535.0);\n    case Uint8Array:\n      return Math.round(value * 255.0);\n    case Int32Array:\n      return Math.round(value * 2147483647.0);\n    case Int16Array:\n      return Math.round(value * 32767.0);\n    case Int8Array:\n      return Math.round(value * 127.0);\n    default:\n      throw new Error(\"Invalid component type.\");\n  }\n}\n\nexport class BufferAttribute {\n  array: TypedArray;\n  itemSize: number;\n  count: number;\n  normalized: boolean;\n  updateRanges: { start: number; count: number }[];\n  version: number;\n\n  constructor(array: TypedArray, itemSize: number, normalized = false) {\n    if (Array.isArray(array)) {\n      throw new TypeError(\"BufferAttribute: array should be a Typed Array.\");\n    }\n    this.array = array;\n    this.itemSize = itemSize;\n    this.count = array.length / itemSize;\n    this.normalized = normalized;\n    this.updateRanges = [];\n    this.version = 0;\n  }\n\n  _onChangeCallback() {}\n\n  set needsUpdate(value: boolean) {\n    if (value === true) this.version++;\n  }\n\n  addUpdateRange(start: number, count: number) {\n    this.updateRanges.push({ start, count });\n  }\n\n  clearUpdateRanges() {\n    this.updateRanges.length = 0;\n  }\n\n  copy(source: BufferAttribute) {\n    // this.array = new source.array.constructor(source.array);\n    this.array = cloneTypedArray(source.array);\n    this.itemSize = source.itemSize;\n    this.count = source.count;\n    this.normalized = source.normalized;\n    return this;\n  }\n\n  copyAt(index1: number, attribute: BufferAttribute, index2: number) {\n    index1 *= this.itemSize;\n    index2 *= attribute.itemSize;\n    for (let i = 0, l = this.itemSize; i < l; i++) {\n      this.array[index1 + i] = attribute.array[index2 + i];\n    }\n    return this;\n  }\n\n  copyArray(array: TypedArray) {\n    this.array.set(array);\n    return this;\n  }\n\n  applyMatrix3(m: Matrix3) {\n    if (this.itemSize === 2) {\n      for (let i = 0, l = this.count; i < l; i++) {\n        _v2.fromBufferAttribute(this, i);\n        _v2.applyMatrix3(m);\n        this.setXY(i, _v2.x, _v2.y);\n      }\n    } else if (this.itemSize === 3) {\n      for (let i = 0, l = this.count; i < l; i++) {\n        _v3.fromBufferAttribute(this, i);\n        _v3.applyMatrix3(m);\n        this.setXYZ(i, _v3.x, _v3.y, _v3.z);\n      }\n    }\n    return this;\n  }\n\n  applyMatrix4(m: Matrix4) {\n    for (let i = 0, l = this.count; i < l; i++) {\n      _v3.fromBufferAttribute(this, i);\n      _v3.applyMatrix4(m);\n      this.setXYZ(i, _v3.x, _v3.y, _v3.z);\n    }\n    return this;\n  }\n\n  applyNormalMatrix(m: Matrix3) {\n    for (let i = 0, l = this.count; i < l; i++) {\n      _v3.fromBufferAttribute(this, i);\n      _v3.applyNormalMatrix(m);\n      this.setXYZ(i, _v3.x, _v3.y, _v3.z);\n    }\n    return this;\n  }\n\n  transformDirection(m: Matrix4) {\n    for (let i = 0, l = this.count; i < l; i++) {\n      _v3.fromBufferAttribute(this, i);\n      _v3.transformDirection(m);\n      this.setXYZ(i, _v3.x, _v3.y, _v3.z);\n    }\n    return this;\n  }\n\n  set(value: ArrayLike<number>, offset = 0) {\n    // Matching BufferAttribute constructor, do not normalize the array.\n    this.array.set(value, offset);\n    return this;\n  }\n\n  getComponent(index: number, component: number) {\n    let value = this.array[index * this.itemSize + component];\n    if (this.normalized) value = denormalize(value, this.array);\n    return value;\n  }\n\n  setComponent(index: number, component: number, value: number) {\n    if (this.normalized) value = normalize(value, this.array);\n    this.array[index * this.itemSize + component] = value;\n    return this;\n  }\n\n  getX(index: number) {\n    let x = this.array[index * this.itemSize];\n    if (this.normalized) x = denormalize(x, this.array);\n    return x;\n  }\n\n  setX(index: number, x: number) {\n    if (this.normalized) x = normalize(x, this.array);\n    this.array[index * this.itemSize] = x;\n    return this;\n  }\n\n  getY(index: number) {\n    let y = this.array[index * this.itemSize + 1];\n    if (this.normalized) y = denormalize(y, this.array);\n    return y;\n  }\n\n  setY(index: number, y: number) {\n    if (this.normalized) y = normalize(y, this.array);\n    this.array[index * this.itemSize + 1] = y;\n    return this;\n  }\n\n  getZ(index: number) {\n    let z = this.array[index * this.itemSize + 2];\n    if (this.normalized) z = denormalize(z, this.array);\n    return z;\n  }\n\n  setZ(index: number, z: number) {\n    if (this.normalized) z = normalize(z, this.array);\n    this.array[index * this.itemSize + 2] = z;\n    return this;\n  }\n\n  getW(index: number) {\n    let w = this.array[index * this.itemSize + 3];\n    if (this.normalized) w = denormalize(w, this.array);\n    return w;\n  }\n\n  setW(index: number, w: number) {\n    if (this.normalized) w = normalize(w, this.array);\n    this.array[index * this.itemSize + 3] = w;\n    return this;\n  }\n\n  setXY(index: number, x: number, y: number) {\n    index *= this.itemSize;\n    if (this.normalized) {\n      x = normalize(x, this.array);\n      y = normalize(y, this.array);\n    }\n    this.array[index + 0] = x;\n    this.array[index + 1] = y;\n    return this;\n  }\n\n  setXYZ(index: number, x: number, y: number, z: number) {\n    index *= this.itemSize;\n    if (this.normalized) {\n      x = normalize(x, this.array);\n      y = normalize(y, this.array);\n      z = normalize(z, this.array);\n    }\n    this.array[index + 0] = x;\n    this.array[index + 1] = y;\n    this.array[index + 2] = z;\n    return this;\n  }\n\n  setXYZW(index: number, x: number, y: number, z: number, w: number) {\n    index *= this.itemSize;\n    if (this.normalized) {\n      x = normalize(x, this.array);\n      y = normalize(y, this.array);\n      z = normalize(z, this.array);\n      w = normalize(w, this.array);\n    }\n    this.array[index + 0] = x;\n    this.array[index + 1] = y;\n    this.array[index + 2] = z;\n    this.array[index + 3] = w;\n    return this;\n  }\n\n  onChange(callback: () => void) {\n    this._onChangeCallback = callback;\n    return this;\n  }\n\n  clone() {\n    // return new this.constructor(this.array, this.itemSize).copy(this);\n    return newConstructor(\n      this,\n      this.array,\n      this.itemSize,\n      this.normalized\n    ).copy(this);\n  }\n\n  toJSON() {\n    return {\n      itemSize: this.itemSize,\n      type: this.array.constructor.name,\n      array: Array.from(this.array),\n      normalized: this.normalized\n    };\n  }\n}\n\nexport class Int8BufferAttribute extends BufferAttribute {\n  constructor(array: number[], itemSize: number, normalized = false) {\n    super(new Int8Array(array), itemSize, normalized);\n  }\n}\n\nexport class Uint8BufferAttribute extends BufferAttribute {\n  constructor(array: number[], itemSize: number, normalized = false) {\n    super(new Uint8Array(array), itemSize, normalized);\n  }\n}\n\nexport class Uint8ClampedBufferAttribute extends BufferAttribute {\n  constructor(array: number[], itemSize: number, normalized = false) {\n    super(new Uint8ClampedArray(array), itemSize, normalized);\n  }\n}\n\nexport class Int16BufferAttribute extends BufferAttribute {\n  constructor(array: number[], itemSize: number, normalized = false) {\n    super(new Int16Array(array), itemSize, normalized);\n  }\n}\n\nexport class Uint16BufferAttribute extends BufferAttribute {\n  constructor(array: number[], itemSize: number, normalized = false) {\n    super(new Uint16Array(array), itemSize, normalized);\n  }\n}\n\nexport class Int32BufferAttribute extends BufferAttribute {\n  constructor(array: number[], itemSize: number, normalized = false) {\n    super(new Int32Array(array), itemSize, normalized);\n  }\n}\n\nexport class Uint32BufferAttribute extends BufferAttribute {\n  constructor(array: number[], itemSize: number, normalized = false) {\n    super(new Uint32Array(array), itemSize, normalized);\n  }\n}\n\n// export class Float16BufferAttribute extends BufferAttribute {\n//   isFloat16BufferAttribute = true;\n\n//   constructor(array: number[], itemSize: number, normalized = false) {\n//     super(new Uint16Array(array), itemSize, normalized);\n//   }\n\n//   getX(index: number) {\n//     let x = fromHalfFloat(this.array[index * this.itemSize]);\n//     if (this.normalized) x = denormalize(x, this.array);\n//     return x;\n//   }\n\n//   setX(index: number, x: number) {\n//     if (this.normalized) x = normalize(x, this.array);\n//     this.array[index * this.itemSize] = toHalfFloat(x);\n//     return this;\n//   }\n\n//   getY(index: number) {\n//     let y = fromHalfFloat(this.array[index * this.itemSize + 1]);\n//     if (this.normalized) y = denormalize(y, this.array);\n//     return y;\n//   }\n\n//   setY(index: number, y: number) {\n//     if (this.normalized) y = normalize(y, this.array);\n//     this.array[index * this.itemSize + 1] = toHalfFloat(y);\n//     return this;\n//   }\n\n//   getZ(index: number) {\n//     let z = fromHalfFloat(this.array[index * this.itemSize + 2]);\n//     if (this.normalized) z = denormalize(z, this.array);\n//     return z;\n//   }\n\n//   setZ(index: number, z: number) {\n//     if (this.normalized) z = normalize(z, this.array);\n//     this.array[index * this.itemSize + 2] = toHalfFloat(z);\n//     return this;\n//   }\n\n//   getW(index: number) {\n//     let w = fromHalfFloat(this.array[index * this.itemSize + 3]);\n//     if (this.normalized) w = denormalize(w, this.array);\n//     return w;\n//   }\n\n//   setW(index: number, w: number) {\n//     if (this.normalized) w = normalize(w, this.array);\n//     this.array[index * this.itemSize + 3] = toHalfFloat(w);\n//     return this;\n//   }\n\n//   setXY(index: number, x: number, y: number) {\n//     index *= this.itemSize;\n//     if (this.normalized) {\n//       x = normalize(x, this.array);\n//       y = normalize(y, this.array);\n//     }\n//     this.array[index + 0] = toHalfFloat(x);\n//     this.array[index + 1] = toHalfFloat(y);\n//     return this;\n//   }\n\n//   setXYZ(index: number, x: number, y: number, z: number) {\n//     index *= this.itemSize;\n//     if (this.normalized) {\n//       x = normalize(x, this.array);\n//       y = normalize(y, this.array);\n//       z = normalize(z, this.array);\n//     }\n//     this.array[index + 0] = toHalfFloat(x);\n//     this.array[index + 1] = toHalfFloat(y);\n//     this.array[index + 2] = toHalfFloat(z);\n//     return this;\n//   }\n\n//   setXYZW(index: number, x: number, y: number, z: number, w: number) {\n//     index *= this.itemSize;\n//     if (this.normalized) {\n//       x = normalize(x, this.array);\n//       y = normalize(y, this.array);\n//       z = normalize(z, this.array);\n//       w = normalize(w, this.array);\n//     }\n//     this.array[index + 0] = toHalfFloat(x);\n//     this.array[index + 1] = toHalfFloat(y);\n//     this.array[index + 2] = toHalfFloat(z);\n//     this.array[index + 3] = toHalfFloat(w);\n//     return this;\n//   }\n// }\n\nexport class Float32BufferAttribute extends BufferAttribute {\n  constructor(array: number[], itemSize: number, normalized = false) {\n    super(new Float32Array(array), itemSize, normalized);\n  }\n}\n","import { canUseBitmap } from \"@zyzgroup/core-common\";\nimport { getDOMMatrix } from \"../math/\";\n\nexport const bitmapMapper = {\n  map: new Map<ImageBitmap, OffscreenCanvas>(),\n\n  // see https://github.com/catdad/canvas-confetti/issues/209\n  // creating canvases is actually pretty expensive, so we should create a\n  // 1:1 map for bitmap:canvas, so that we can animate in\n  // a performant manner, but also not store them forever so that we don't\n  // have a memory leak\n  transform: function (bitmap: ImageBitmap): ImageBitmap | OffscreenCanvas {\n    if (canUseBitmap) {\n      return bitmap;\n    }\n    if (this.map.has(bitmap)) {\n      return this.map.get(bitmap)!;\n    }\n    const canvas = new OffscreenCanvas(bitmap.width, bitmap.height);\n    const ctx = canvas.getContext(\"2d\");\n    ctx?.drawImage(bitmap, 0, 0);\n    this.map.set(bitmap, canvas);\n    return canvas;\n  },\n\n  clear: function () {\n    this.map.clear();\n  }\n};\n\nexport function getBitmapFromCanvas(\n  width: number,\n  height: number,\n  cb: (ctx: OffscreenCanvasRenderingContext2D) => void\n): ImageBitmap | undefined {\n  const canvas = new OffscreenCanvas(width, height);\n  const ctx = canvas.getContext(\"2d\");\n  if (ctx) {\n    cb(ctx);\n    return canvas.transferToImageBitmap();\n  }\n}\n\nexport function drawBitmapInCanvas(\n  ctx: OffscreenCanvasRenderingContext2D | CanvasRenderingContext2D,\n  bitmap: ImageBitmap,\n  options?: {\n    x?: number;\n    y?: number;\n    degree?: number;\n    scaleX?: number;\n    scaleY?: number;\n    originMatrix?: string | number[];\n  }\n) {\n  const pattern = ctx.createPattern(\n    bitmapMapper.transform(bitmap),\n    \"no-repeat\"\n  );\n  if (pattern) {\n    const matrix = getDOMMatrix(options);\n    pattern.setTransform(matrix);\n    ctx.fillStyle = pattern;\n  }\n  // ctx.globalAlpha = 1 - progress;\n  // const width = bitmap.width;\n  // const height = bitmap.height;\n  // const tx = transformOptions?.tx || 0;\n  // const ty = transformOptions?.ty || 0;\n  // ctx.fillRect(tx - width / 2, ty - height / 2, width, height);\n  // ctx.globalAlpha = 1;\n}\n","// eslint-disable-next-line no-debugger\n// debugger;\n\nimport {\n  AnyElement,\n  AnyNode,\n  noop,\n  Cache,\n  ReadInBrowserEnum,\n  toBlob,\n  milliseconds\n} from \"@zyzgroup/core-common\";\nimport { atomWriteStyle, getStyle, setStyle } from \"./useStyle\";\nimport { atomWriteAttribute } from \"./useAttribute\";\nimport { useEventListener } from \"./useEventListener\";\nimport { getImageData } from \"../image\";\nimport { selectFileInBrowser, readFileInBrowser } from \"../file\";\nimport { Easing, EasingFunction, rAF } from \"../animate\";\n\n// document.querySelector(\".element\");\n// document.querySelector(\"#element\");\n// document.querySelector(\"div\");\n// document.querySelector('[name=\"username\"]');\n// document.querySelector(\"div + p > span\");\n// document.querySelectorAll(\"p\");\n// document.getElementById(\"id属性值\");\n// document.getElementsByClassName(\"class属性值\");\n// document.getElementsByTagName(\"标签名\");\n// document.getElementsByName(\"name属性值\");\n// element.querySelector(\"CSS选择器\");\n// element.querySelectorAll(\"CSS选择器\");\n// document.documentElement; // 获取页面中的HTML标签;\n// document.body;\n\n// document.defaultView\n// document.parentWindow\n\n// BOM Browser Object Model\n// BOM 的顶级对象是 window\n\n// const target = document.documentElement || document || window;\n\n// history\n// history.go(3); //向前跳转三个记录\n// history.go(-1); //向后跳转一个记录\n// history.forward() 向前跳转一个页面\n// history.back() 向后跳转一个页面\n// history.length 获取历史记录数\n\n// location.reload(true)\n\n// screen\n\n// const myWin = window.open(\"htttp://www.vue3js.cn\", \"topFrame\");\n// myWin.close();\n\n// 按重要性排序\nexport const domPrefixes = [\"\", \"-webkit-\", \"-moz-\", \"-o-\", \"-ms-\"];\n\nexport function transform(\n  el: AnyElement,\n  options: {\n    x?: number;\n    y?: number;\n    z?: number;\n  }\n) {\n  const x = options.x || 0;\n  const y = options.y || 0;\n  const z = options.z || 0;\n  atomWriteStyle(\n    el,\n    \"transform\",\n    `translate(${x}px, ${y}px) translateZ(${z}px)`\n  );\n}\n\nexport function animate(\n  el: AnyElement,\n  options: {\n    easingFn?: EasingFunction;\n    duration?: number;\n    delay?: number;\n    deltaX: number;\n    deltaY: number;\n  }\n) {\n  const easingFn = options?.easingFn || Easing.Linear.None;\n  const duration = options?.duration || 0;\n  const delay = options?.delay || 0;\n  const startTime = milliseconds();\n  const destTime = startTime + duration;\n  let x = 0;\n  let y = 0;\n  const deltaX = options.deltaX;\n  const deltaY = options.deltaY;\n  function step() {\n    const now = milliseconds();\n    if (now >= destTime) {\n      transform(el, { x: deltaX - x, y: deltaY - y });\n      return;\n    }\n    const t = (now - startTime) / duration;\n    const easing = easingFn(t);\n    const newX = deltaX * easing;\n    const newY = deltaY * easing;\n    transform(el, { x: newX - x, y: newY - y });\n    x = newX;\n    y = newY;\n    rAF(step);\n  }\n  setTimeout(() => {\n    step();\n  }, delay);\n}\n\n// http://stackoverflow.com/a/384380/182183\nexport const isElement =\n  typeof HTMLElement === \"object\"\n    ? function isElementDOM2(obj: any) {\n        return obj instanceof HTMLElement;\n      }\n    : function isElementQuirky(obj: any) {\n        return (\n          obj &&\n          typeof obj === \"object\" &&\n          obj.nodeType === 1 &&\n          typeof obj.nodeName === \"string\"\n        );\n      };\n\nexport function createObjectURL(blob: File | Blob | MediaSource) {\n  return window.URL.createObjectURL(blob);\n}\n\nexport function revokeObjectURL(url: string) {\n  return window.URL.revokeObjectURL(url);\n}\n\n// The DOMContentLoaded event is fired when the document has been completely loaded and parsed,\n// without waiting for stylesheets, images, and subframes to finish loading\n// the load event can be used to detect a fully-loaded page\nexport function onDocumentReady(cb: () => void) {\n  let isCalled = false;\n  function check() {\n    // https://developer.mozilla.org/en-US/docs/Web/API/Document/readyState\n    // loading interactive complete|loaded\n    if (/loaded|complete/.test(document.readyState) && !isCalled) {\n      remove();\n      cb();\n      isCalled = true;\n    }\n  }\n  const remove1 = useEventListener(document, \"DOMContentLoaded\", check);\n  const remove2 = useEventListener(window, \"load\", check);\n  const timer = setInterval(check, 100);\n  const remove = () => {\n    clearInterval(timer);\n    remove1?.();\n    remove2?.();\n  };\n  return remove;\n}\n\nexport function onBeforeUnload(cb: (e: BeforeUnloadEvent) => void) {\n  return useEventListener(window, \"beforeunload\", (e: BeforeUnloadEvent) => {\n    cb(e);\n  });\n}\n\nexport async function useLoadScript(\n  url: string,\n  ms = 60000\n  // onload?: (e: Event) => void,\n  // onerror?: (\n  //   e: Event | string,\n  //   source?: string,\n  //   lineno?: number,\n  //   colno?: number,\n  //   error?: Error\n  // ) => void\n) {\n  return new Promise((resolve, reject) => {\n    const script = document.createElement(\"script\");\n    script.type = \"text/javascript\";\n    // 默认情况下，动态脚本的行为是 async 的\n    script.async = false; // 设置脚本将像 defer 那样\n    script.onload = (e) => {\n      clearTimeout(timeout);\n      // onload?.(e);\n      resolve(e);\n      // avoid memory leaks in IE\n      script.onerror = script.onload = null;\n    };\n    script.onerror = (e) => {\n      clearTimeout(timeout);\n      // onerror?.(e);\n      reject(e);\n    };\n    script.src = url;\n    const timeout: ReturnType<typeof setTimeout> = setTimeout(() => {\n      reject(\"Timeout!\");\n    }, ms);\n    document.body.appendChild(script);\n  });\n}\n\nexport function useClickA(blobOrUrl: Blob | string, fileName: string) {\n  const a = document.createElement(\"a\");\n  a.style.visibility = \"hidden\";\n  a.download = fileName;\n  if (typeof blobOrUrl === \"string\") {\n    a.href = blobOrUrl;\n  } else {\n    a.href = window.URL.createObjectURL(blobOrUrl);\n  }\n  // document.body.appendChild(a);\n  a.click();\n  // document.body.removeChild(a);\n  // window.URL.revokeObjectURL(a.href);\n}\n\n// <link rel=\"stylesheet\" href=\"mystyles.css\" media=\"noexist\" onload=\"this.media='all'\">\n// <link rel=\"alternate stylesheet\" href=\"mystyles.css\" onload=\"this.rel='stylesheet'\">\nexport async function useLoadLink(\n  url: string,\n  parent = document.getElementsByTagName(\"head\")[0],\n  ms = 60000\n  // onload?: (event: Event) => void,\n  // onerror?: (\n  //   event: Event | string,\n  //   source?: string,\n  //   lineno?: number,\n  //   colno?: number,\n  //   error?: Error\n  // ) => void\n) {\n  return new Promise((resolve, reject) => {\n    const link = document.createElement(\"link\");\n    // link.type = \"text/css\";\n    link.setAttribute(\"type\", \"text/css\");\n    // link.rel = \"stylesheet\";\n    link.setAttribute(\"rel\", \"stylesheet\");\n    link.onload = (e) => {\n      clearTimeout(timeout);\n      // onload?.(e);\n      resolve(e);\n      // avoid memory leaks in IE\n      link.onerror = link.onload = null;\n    };\n    link.onerror = (e) => {\n      clearTimeout(timeout);\n      // onerror?.(e);\n      reject(e);\n    };\n    // link.href = url;\n    link.setAttribute(\"href\", url);\n    const timeout: ReturnType<typeof setTimeout> = setTimeout(() => {\n      reject(\"Timeout!\");\n    }, ms);\n    parent.appendChild(link);\n  });\n}\n\n/// 等待样式全部加载完成\nexport function waitForStyleSheetsLoaded() {\n  return new Promise<void>((resolve) => {\n    const links = Array.from(\n      document.querySelectorAll(\"link[rel=stylesheet]\")\n    ) as HTMLLinkElement[];\n    let loadedCount = document.styleSheets.length || 0;\n    const check = () => {\n      if (loadedCount >= links.length) {\n        resolve();\n        return true;\n      }\n      return false;\n    };\n    if (!check()) {\n      links.forEach((stylesheet) => {\n        stylesheet.onload = () => {\n          loadedCount += 1;\n          check();\n        };\n      });\n    }\n  });\n}\n\n// \"https://s3-us-west-2.amazonaws.com/s.cdpn.io/181794/kl-owl.png\"\n// \"https://s3-us-west-2.amazonaws.com/s.cdpn.io/181794/kl-deer.png\"\n// \"https://s3-us-west-2.amazonaws.com/s.cdpn.io/181794/kl-hipster.png\"\n// \"https://s3-us-west-2.amazonaws.com/s.cdpn.io/181794/kl-ram.png\"\n// \"https://s3-us-west-2.amazonaws.com/s.cdpn.io/181794/kl-dog.png\"\n// \"https://s3-us-west-2.amazonaws.com/s.cdpn.io/181794/kl-sideram.png\"\n// \"https://s3-us-west-2.amazonaws.com/s.cdpn.io/181794/kl-multiram.png\"\n// \"https://s3-us-west-2.amazonaws.com/s.cdpn.io/181794/kl-gorilla.png\"\n// \"https://s3-us-west-2.amazonaws.com/s.cdpn.io/181794/kl-bird.png\"\nexport interface RawImageInfo {\n  width: number;\n  height: number;\n  aspectRatio: number;\n  element: HTMLImageElement;\n  imageData?: ImageData;\n}\n\nconst caches = new Cache<RawImageInfo>();\n\n/**\n * 动态获取图片信息\n */\nexport async function useLoadImage(url: string | Blob | File, ms = 60000) {\n  return new Promise<RawImageInfo>((resolve, reject) => {\n    const finalUrl = typeof url === \"string\" ? url : createObjectURL(url);\n    const cached = caches.get(finalUrl);\n    if (cached) {\n      return resolve(cached);\n    }\n    const timeout: ReturnType<typeof setTimeout> = setTimeout(() => {\n      reject(\"Timeout!\");\n    }, ms);\n    // const image = new Image();\n    const image = document.createElement(\"img\");\n    // 注意跨域 CORS ：only works if the remote server sets : Access-Control-Allow-Origin \"*\"\n    // image.crossOrigin = \"Anonymous\";\n    // image.setAttribute(\"crossOrigin\", \"\");\n    image.onload = () => {\n      clearTimeout(timeout);\n      // avoid memory leaks in IE\n      image.onerror = image.onload = null;\n      const width = image.naturalWidth || image.width;\n      const height = image.naturalHeight || image.height;\n      const rawImageInfo = {\n        width,\n        height,\n        aspectRatio: width / height,\n        element: image,\n        imageData: getImageData(image)\n      };\n      caches.set(finalUrl, rawImageInfo);\n      resolve(rawImageInfo);\n    };\n    image.onerror = (e) => {\n      clearTimeout(timeout);\n      reject(e);\n    };\n    image.src = finalUrl;\n\n    // document.body.appendChild(image);\n  });\n}\n\nexport async function useSelectFile<T extends string | ArrayBuffer>(\n  readType: ReadInBrowserEnum = ReadInBrowserEnum.text,\n  accepts: string[] = [\"*\"]\n) {\n  const files = await selectFileInBrowser(accepts);\n  const file = files[0];\n  const data = await readFileInBrowser<T>(file, readType);\n  return {\n    type: file.type,\n    name: file.name,\n    size: file.size,\n    data\n  };\n}\n\nexport async function useSelectFileImage(accepts: string[] = [\"image/*\"]) {\n  const files = await selectFileInBrowser(accepts);\n  const file = files[0];\n  if (!file.type.match(/image\\/*/)) {\n    return new Error(\"Not Image Type!\");\n  }\n  const ab = await readFileInBrowser<ArrayBuffer>(\n    file,\n    ReadInBrowserEnum.arraybuffer\n  );\n  const blob = toBlob(ab);\n  const rawImageInfo = await useLoadImage(blob);\n  return {\n    type: file.type,\n    name: file.name,\n    size: file.size,\n    data: ab,\n    width: rawImageInfo.width,\n    height: rawImageInfo.height,\n    aspectRatio: rawImageInfo.aspectRatio,\n    imageData: rawImageInfo.imageData\n  };\n}\n\nexport function getSelectedText(): string {\n  return window.getSelection()?.toString() || \"\";\n}\n\nexport function setWindowTitle(title: string) {\n  document.getElementsByTagName(\"title\")[0].innerText = title;\n  document.title = title;\n}\n\nexport function vibrate(ms = 200) {\n  if (\"vibrate\" in navigator) {\n    window.navigator.vibrate(ms);\n  } else {\n    console.error(\"Your device is not support vibrate on this browser.\");\n  }\n}\n\nexport async function useClipboard(text: string) {\n  if (navigator.clipboard) {\n    return await navigator.clipboard.writeText(text);\n  } else {\n    const textArea = document.createElement(\"textarea\");\n    textArea.value = text;\n    textArea.style.opacity = \"0\";\n    // avoid scrolling to bottom\n    textArea.style.position = \"fixed\";\n    textArea.style.top = \"0\";\n    textArea.style.left = \"0\";\n    // document.body.appendChild(textArea);\n    textArea.focus();\n    textArea.select();\n    // document.body.removeChild(textArea);\n    return document.execCommand(\"copy\");\n  }\n}\n\n// window.moveBy(x,y) 从当前位置水平移动窗体x个像素，垂直移动窗体y个像素，x为负数，将向左移动窗体，y为负数，将向上移动窗体\n// window.moveTo(x,y) 动窗体左上角到相对于屏幕左上角的(x,y)点\n// window.resizeBy(w,h) 相对窗体当前的大小，宽度调整w个像素，高度调整h个像素。如果参数为负值，将缩小窗体，反之扩大窗体\n// window.resizeTo(w,h) 把窗体宽度调整为w个像素，高度调整为h个像素\n// window.scrollTo(x,y) 如果有滚动条，将横向滚动条移动到相对于窗体宽度为x个像素的位置，将纵向滚动条移动到相对于窗体高度为y个像素的位置\n// window.scrollBy(x,y) 如果有滚动条，将横向滚动条向左移动x个像素，将纵向滚动条向下移动y个像素\nexport function scrollTo(x = 0, y = 0) {\n  window.scrollTo(x, y);\n}\n\nexport function setManualScroll() {\n  let remove1 = noop;\n  let remove2 = noop;\n  if (\"scrollRestoration\" in window.history) {\n    window.history.scrollRestoration = \"manual\";\n    // reset scrollRestoration to auto when leaving page, allowing page reload\n    // and back-navigation from other pages to use the browser to restore the\n    // scrolling position.\n    remove1 = onBeforeUnload(() => {\n      window.history.scrollRestoration = \"auto\";\n    });\n    // Setting scrollRestoration to manual again when returning to this page.\n    remove2 = onDocumentReady(() => {\n      window.history.scrollRestoration = \"manual\";\n    });\n  }\n  return () => {\n    remove1();\n    remove2();\n  };\n}\n\nexport function isRootEl(el: AnyElement) {\n  return /(html|body)/i.test(el.tagName) || el === document.documentElement;\n}\n\nexport const isActiveEl = (el: AnyElement) => {\n  // http://stackoverflow.com/posts/2684561/revisions\n  return (\n    el === document.activeElement && ((el as any).type || (el as any).href)\n  );\n};\n\nexport function getRemSize(): number {\n  return parseFloat(getComputedStyle(document.documentElement).fontSize);\n}\n\nexport function rem2px(rem: number): number {\n  return rem * getRemSize();\n}\n\nexport function getEmSize(el: AnyElement): number {\n  return el.parentElement\n    ? parseFloat(getComputedStyle(el.parentElement).fontSize)\n    : getRemSize();\n}\n\nexport const nearestElement = (el: AnyElement) => {\n  let elm: AnyElement | ParentNode = el;\n  while (elm && elm.nodeType !== 1 /* ELEMENT */) {\n    const parent = elm.parentElement || el.parentNode;\n    if (!parent) {\n      break;\n    }\n    elm = parent;\n  }\n  return elm;\n};\n\nexport const parent = (el: AnyElement) => {\n  return el.parentElement;\n  // return el.parentNode;\n};\n\nexport const parents = (\n  node: AnyElement | null,\n  ps: AnyElement[] = []\n): AnyElement[] => {\n  if (!node || (node.parentElement === null && node.parentNode === null)) {\n    return ps;\n  }\n  // return parents(node.parentElement || el.parentNode, ps.concat([node]));\n  return parents(node.parentElement, ps.concat([node]));\n};\n\nexport function scrollParent(el: AnyElement) {\n  const ps = parents(el);\n  for (let i = 0, n = ps.length; i < n; i++) {\n    if (\n      /(auto|scroll)/.test(\n        getStyle(ps[i], \"overflow\") +\n          getStyle(ps[i], \"overflow-y\") +\n          getStyle(ps[i], \"overflow-x\")\n      )\n    ) {\n      return ps[i];\n    }\n  }\n  return document.scrollingElement || document.documentElement;\n}\n\nexport const containsChild = (el: AnyElement, child: AnyElement) => {\n  if (el.contains) {\n    return el != child && el.contains(child);\n  } else {\n    return !!(el.compareDocumentPosition(child) & 16);\n  }\n};\n\nexport const siblings = (el: AnyElement) => {\n  return Array.prototype.slice\n    .call(el.parentElement?.children)\n    .filter((child) => child !== el);\n};\n\nexport const nextElementSibling = (el: AnyElement) => {\n  return el.nextElementSibling;\n};\n\nexport const previousElementSibling = (el: AnyElement) => {\n  return el.previousElementSibling;\n};\n\nexport const closest = (el: AnyElement, selector: string) => {\n  return el.closest(selector);\n};\n\nexport const shadowRoot = (el: AnyElement) => {\n  return el.shadowRoot;\n};\n\nexport const isInput = (el: AnyElement) => {\n  return el.tagName === \"INPUT\" || el instanceof HTMLInputElement;\n};\n\nexport const isSelect = (el: AnyElement) => {\n  return el.tagName === \"SELECT\" || el instanceof HTMLSelectElement;\n};\n\nexport const isTextArea = (el: AnyElement) => {\n  return el.tagName === \"TEXTAREA\" || el instanceof HTMLTextAreaElement;\n};\n\nexport const isInputCheckbox = (el: AnyElement) => {\n  return isInput(el) && el.getAttribute(\"type\") === \"checkbox\";\n};\n\nexport const isInputRadio = (el: AnyElement) => {\n  return isInput(el) && el.getAttribute(\"type\") === \"radio\";\n};\n\nexport const isInputText = (el: AnyElement) => {\n  return isInput(el) && el.getAttribute(\"type\") === \"text\";\n};\n\nexport const isInputNumber = (el: AnyElement) => {\n  return isInput(el) && el.getAttribute(\"type\") === \"number\";\n};\n\nexport function changeSelected(el: AnyElement, selectedValue: string) {\n  if (isSelect(el)) {\n    const options = (el as HTMLSelectElement).options;\n    for (let i = 0, len = options.length; i < len; i++) {\n      options[i].selected = options[i].value == selectedValue;\n    }\n  }\n}\n\nexport function changeRadioChecked(el: AnyElement, checkedValue: string) {\n  if (isInputRadio(el)) {\n    const options = document.getElementsByName((el as HTMLInputElement).name);\n    for (let i = 0, len = options.length; i < len; i++) {\n      const option = options[i] as HTMLInputElement;\n      option.checked = option.value == checkedValue;\n    }\n  }\n}\n\nexport function changeCheckboxChecked(el: AnyElement, checked: boolean) {\n  if (isInputCheckbox(el)) {\n    (el as HTMLInputElement).checked = checked;\n  }\n}\n\nexport function insert(\n  el: AnyElement,\n  html: string | AnyElement,\n  method:\n    | \"append\"\n    | \"appendChild\"\n    | \"prepend\"\n    | \"after\"\n    | \"before\"\n    | \"replaceWith\" = \"append\"\n) {\n  if (typeof html == \"string\") {\n    el[method](createFragment(html));\n  } else {\n    el[method](html);\n  }\n}\n\nexport function html(el: AnyElement, html: string | AnyElement) {\n  if (typeof html == \"string\") {\n    el.innerHTML = html;\n    const newEl = scriptConvert(el);\n    if (newEl != el) {\n      el = newEl;\n    }\n  } else {\n    insert(html, \"replaceWith\");\n  }\n}\n\nexport const empty = function (el: AnyElement) {\n  html(el, \"\");\n};\n\nexport const text = (el: AnyElement, text: string) => {\n  el.textContent = text;\n};\n\nexport const getInnerText = (el: AnyElement) => {\n  if (el instanceof SVGElement) {\n    return \"\";\n  }\n  let copyText = el.innerText;\n  if (!copyText) {\n    const slots = el.querySelector(\"slot\")?.assignedNodes() || [];\n    let index = 0;\n    while (!copyText && index <= slots.length - 1) {\n      if (\"innerText\" in slots[index]) {\n        copyText = (slots[index] as HTMLElement).innerText;\n      }\n      index++;\n    }\n  }\n  return copyText;\n};\n\nexport const remove = (el: AnyElement) => {\n  return el.remove();\n  // return el.parentElement?.removeChild(el);\n};\n\n// 耗时久\nexport function toggleElDisplay(el: AnyElement, force?: boolean) {\n  if (\n    (getStyle(el, \"display\") == \"none\" && force === undefined) ||\n    force === true\n  ) {\n    showEl(el);\n  } else {\n    hideEl(el);\n  }\n}\n\nexport function showEl(el: AnyElement) {\n  setStyle(\n    el,\n    \"display\",\n    el instanceof HTMLTableRowElement\n      ? \"table-row\"\n      : el instanceof HTMLTableCellElement\n      ? \"table-cell\"\n      : \"block\"\n  );\n}\n\nexport function hideEl(el: AnyElement) {\n  setStyle(el, \"display\", \"none\");\n}\n\nexport function toggleClass(\n  el: AnyElement,\n  className: string,\n  act: \"toggle\" | \"add\" | \"remove\" = \"toggle\"\n) {\n  const classNames = className.split(/[,\\s]+/);\n  if (el.classList) {\n    classNames.forEach((singleClassName) => {\n      const name = singleClassName.trim();\n      if (name !== \"\") {\n        el.classList[act](name);\n      }\n    });\n  } else {\n    const exists = el.className.split(/ +/);\n    let isUpdate = false;\n    classNames.forEach((singleClassName) => {\n      const name = singleClassName.trim();\n      if (name !== \"\") {\n        const index = exists.indexOf(name);\n        switch (act) {\n          case \"add\":\n            if (index === -1) {\n              exists.push(name);\n              isUpdate = true;\n            }\n            break;\n          case \"remove\":\n            if (index !== -1) {\n              exists.splice(index, 1);\n              isUpdate = true;\n            }\n            break;\n          case \"toggle\":\n            if (index === -1) {\n              exists.push(name);\n            } else {\n              exists.splice(index, 1);\n            }\n            isUpdate = true;\n            break;\n        }\n      }\n    });\n    if (isUpdate) {\n      atomWriteAttribute(\n        el,\n        \"class\",\n        exists.join(\" \").replace(/^\\s+/, \"\").replace(/\\s+$/, \"\")\n      );\n    }\n  }\n}\n\nexport function addClass(el: AnyElement, className: string) {\n  toggleClass(el, className, \"add\");\n}\n\nexport function removeClass(el: AnyElement, className: string) {\n  toggleClass(el, className, \"remove\");\n}\n\nexport function hasClass(el: AnyElement, className: string): boolean {\n  return new RegExp(\"(?:^|\\\\s+)\" + className + \"(?:\\\\s+|$)\").test(el.className);\n}\n\n// document.createDocumentFragment()\n// DocumentFragment 接口表示一个没有父级文件的最小文档对象\n// 因为 DocumentFragment 不是真实 DOM 树的一部分，它的变化不会引起 DOM 树的重新渲染的操作（reflow），不会导致性能问题\nexport function createFragment(\n  html: string,\n  convert = false // 性能优化\n): DocumentFragment {\n  const tmpl = document.createElement(\"template\");\n  tmpl.innerHTML = html;\n  if (convert) {\n    tmpl.content.childNodes.forEach((node) => {\n      const newNode = scriptConvert(node as AnyElement);\n      if (newNode != node) {\n        tmpl.content.replaceChild(newNode, node);\n      }\n    });\n  }\n  return tmpl.content;\n}\n\nexport function createElement(tagName: string) {\n  return document.createElement.call(document, tagName);\n}\n\nexport function createElementNS(name: string) {\n  return document.createElementNS(\"http://www.w3.org/1999/xhtml\", name);\n}\n\nexport function createTextNode(data: string) {\n  return document.createTextNode.call(document, data);\n}\n\nfunction scriptConvert(el: AnyElement) {\n  if (el.tagName == \"SCRIPT\") {\n    el = convert(el as HTMLScriptElement);\n  }\n  if (el.querySelectorAll) {\n    el.querySelectorAll(\"script\").forEach((e) => {\n      e.parentNode?.replaceChild(convert(e), e);\n    });\n  }\n  return el;\n}\n\n// innerHTML, append, etc. script tags will not be executed unless they are proper script tags\nfunction convert(el: HTMLScriptElement) {\n  const script = el.ownerDocument.createElement(\"script\");\n  script.text = el.text;\n  const attrs = el.attributes;\n  for (let i = 0, n = attrs.length; i < n; i++) {\n    script.setAttribute(attrs[i].name, attrs[i].value);\n  }\n  return script;\n}\n\n// used for : 单点登录（Single Sign On） SSO\n// 在这个iframe所加载的HTML中绑定一个事件监听器，当事件被触发时，把接收到的token数据写入localStorage\n// window.addEventListener(\n//   \"message\",\n//   function (event) {\n//     localStorage.setItem(\"token\", event.data);\n//   },\n//   false\n// );\nexport function iframePostMessage(\n  message: any,\n  targetOrigin = \"http://test.com/localstorage.html\"\n) {\n  // 动态创建一个不可见的iframe，在iframe中加载一个跨域HTML\n  const iframe = document.createElement(\"iframe\");\n  iframe.src = targetOrigin;\n  document.body.append(iframe);\n  setTimeout(function () {\n    iframe.contentWindow?.postMessage(message, targetOrigin);\n  }, 4000);\n  setTimeout(function () {\n    iframe.remove();\n  }, 6000);\n}\n\n// 沙盒\nexport function runInSandbox(code: string) {\n  const proxyWindow: Window = new Proxy<Window>(window, {\n    get(target, key, receiver) {\n      if (\n        typeof key == \"string\" &&\n        [\"open\", \"location\", \"document\"].includes(key)\n      ) {\n        throw new Error(`禁止访问 key: ${key}`);\n      }\n      if (key === \"window\") {\n        return proxyWindow;\n      }\n      return Reflect.get(target, key, receiver);\n    },\n    set(target, key, value, receiver) {\n      return Reflect.set(target, key, value, receiver);\n    }\n  });\n  new Function(\"window\", `with(window) { ${code} }`)(proxyWindow, null);\n}\n","/* eslint-disable no-case-declarations */\nimport {\n  ReadInBrowserEnum,\n  toKebab,\n  appendURL,\n  formDataToSearch,\n  recordToSearch\n} from \"@zyzgroup/core-common\";\nimport { readFileInBrowser } from \"./file\";\n\n/**\n * method=\"get\"\n * ?foo=bar&baz=The%20first%20line.%0AThe%20second%20line.\n *\n *****************\n *\n * method=\"post\" enctype=\"application/x-www-form-urlencoded\"\n * Content-Type: application/x-www-form-urlencoded\n * foo=bar&baz=The+first+line.%0D%0AThe+second+line.%0D%0A\n *\n *****************\n *\n * method=\"post\" enctype=\"text/plain\"\n * Content-Type: text/plain\n *\n * foo=bar\n * baz=The first line.\n * The second line.\n *\n *****************\n *\n * method=\"post\" enctype=\"multipart/form-data\"\n * Content-Type: multipart/form-data; boundary=---------------------------314911788813839\n *\n * -----------------------------314911788813839\n * Content-Disposition: form-data; name=\"foo\"\n *\n * bar\n * -----------------------------314911788813839\n * Content-Disposition: form-data; name=\"baz\"\n *\n * The first line.\n * The second line.\n *\n * -----------------------------314911788813839\n * Content-Disposition: form-data;name=\"pic\"; filename=\"photo.jpg\"\n * Content-Type: application/octet-stream\n * Content-Transfer-Encoding: binary\n *\n * // ... binary data of the jpg ...\n * -----------------------------314911788813839--\n */\n\nexport function createXMLHttpRequest() {\n  let xhr = null;\n  if (window.ActiveXObject) {\n    const versions = [\n      \"Microsoft.XMLHTTP\",\n      \"MSXML6.XMLHTTP\",\n      \"MSXML5.XMLHTTP\",\n      \"MSXML4.XMLHTTP\",\n      \"MSXML3.XMLHTTP\",\n      \"MSXML2.XMLHTTP\",\n      \"MSXML.XMLHTTP\"\n    ];\n    for (let i = 0, c = versions.length; i < c; i++) {\n      try {\n        xhr = new window.ActiveXObject(versions[i]);\n        break;\n      } catch (e) {\n        continue;\n      }\n    }\n  } else {\n    xhr = new XMLHttpRequest();\n  }\n  return xhr;\n}\n\nexport function ajax(\n  url: string,\n  options?: {\n    method: string; // GET, POST, PUT, DELETE, HEAD\n    data?: Record<string, string> | FormData;\n    multipartFormDataString?: string;\n    boundary?: string;\n    headers?: Record<string, string>;\n    withCredentials?: boolean;\n    responseType?: \"\" | \"json\" | \"arraybuffer\" | \"blob\" | \"document\" | \"text\";\n    timeout?: number;\n    progress?: (e: any, xhr: XMLHttpRequest, percentage: number) => void;\n    load?: (e: any, xhr: XMLHttpRequest) => void;\n    loadstart?: (e: any, xhr: XMLHttpRequest) => void;\n    loadend?: (e: any, xhr: XMLHttpRequest) => void;\n    error?: (e: any, xhr: XMLHttpRequest) => void;\n    abort?: (e: any, xhr: XMLHttpRequest) => void;\n  }\n) {\n  return new Promise((resolve, reject) => {\n    const {\n      method = \"GET\",\n      data = {},\n      multipartFormDataString = \"\",\n      boundary = \"\",\n      headers = {},\n      withCredentials = false,\n      responseType = \"json\",\n      timeout = 30000\n    } = options || {};\n    const xhr = createXMLHttpRequest();\n    xhr.timeout = timeout;\n    xhr.responseType = responseType;\n    xhr.onreadystatechange = function (e: any) {\n      // - 0 代理被创建，但尚未调用 open()方法\n      // - 1 open() 方法已经被调用\n      // - 2 send()方法已经被调用，并且头部和状态已经可获得\n      // - 3 下载中， responseText属性已经包含部分数据\n      // - 4 下载操作已完成\n      if (xhr.readyState === 4) {\n        if (xhr.status === 200) {\n          resolve(xhr.response); // xhr.responseText\n        } else {\n          reject(xhr.statusText);\n        }\n      }\n    };\n    xhr.ontimeout = () => {\n      reject(`${url} is timed out for ${timeout}ms.`);\n    };\n    // xhr.onload\n    xhr.addEventListener(\"load\", (e: any) => options?.load?.(e, xhr), false);\n    xhr.addEventListener(\n      \"loadstart\",\n      (e: any) => options?.loadstart?.(e, xhr),\n      false\n    );\n    xhr.addEventListener(\n      \"loadend\",\n      (e: any) => options?.loadend?.(e, xhr),\n      false\n    );\n    // xhr.upload\n    xhr.addEventListener(\n      \"progress\",\n      (e: any) => {\n        if (e.lengthComputable) {\n          const percentage = Math.round((e.loaded * 100) / e.total);\n          options?.progress?.(e, xhr, percentage);\n        }\n      },\n      false\n    );\n    // xhr.onerror\n    xhr.addEventListener(\"error\", (e: any) => options?.error?.(e, xhr), false);\n    // xhr.onabort\n    xhr.addEventListener(\"abort\", (e: any) => options?.abort?.(e, xhr), false);\n    const methodUpperCase = method.toUpperCase();\n    Object.assign(headers, {\n      Accept: \"*/*\"\n      // \"Access-Control-Request-Headers\": \"authorization\",\n      // \"Access-Control-Request-Method\": \"POST\",\n      // \"Content-Type\": \"application/json;charset=utf-8\",\n    });\n    let isMultipartFormData = false;\n    let isTextPlain = false;\n    let isSendJSON = false;\n    function setHeaders() {\n      // Fixes IE Caching problem\n      xhr.setRequestHeader(\"If-Modified-Since\", \"Sat, 1 Jan 2000 00:00:00 GMT\");\n      if (withCredentials) {\n        xhr.withCredentials = true;\n      }\n      for (const headerType in headers) {\n        if (\n          toKebab(headerType).toLowerCase() == \"content-type\" &&\n          headers[headerType].toLowerCase() == \"multipart/form-data\"\n        ) {\n          isMultipartFormData = true;\n          xhr.setRequestHeader(\n            \"Content-Type\",\n            \"multipart/form-data; boundary=\" + boundary\n          );\n        } else {\n          if (toKebab(headerType).toLowerCase() == \"content-type\") {\n            if (headers[headerType].toLowerCase().indexOf(\"text/plain\") >= 0) {\n              isTextPlain = true;\n              // xhr.overrideMimeType(\"text/plain; charset=x-user-defined-binary\");\n            } else if (\n              headers[headerType].toLowerCase().indexOf(\"application/json\") >= 0\n            ) {\n              isSendJSON = true;\n            }\n          }\n          xhr.setRequestHeader(headerType, headers[headerType]);\n        }\n      }\n    }\n    // 发送请求\n    switch (methodUpperCase) {\n      case \"GET\":\n        let dataString = \"\";\n        if (data instanceof FormData) {\n          dataString = formDataToSearch(data);\n        } else {\n          dataString = recordToSearch(data);\n        }\n        xhr.open(\"GET\", appendURL(url, dataString), true); // true: 异步\n        setHeaders();\n        xhr.send(null);\n        break;\n      default:\n        xhr.open(methodUpperCase, url, true);\n        setHeaders();\n        if (isMultipartFormData) {\n          xhr.sendAsBinary(multipartFormDataString);\n        } else {\n          if (isSendJSON) {\n            xhr.send(JSON.stringify(data));\n          } else if (isTextPlain) {\n            xhr.send(\n              Object.entries(data)\n                .map(([k, v]) => `${k}=${v}`)\n                .join(\"\\r\\n\")\n            );\n          } else {\n            xhr.send(\n              Object.entries(data)\n                .map(\n                  ([k, v]) =>\n                    `${encodeURIComponent(k)}=${encodeURIComponent(v)}`\n                )\n                .join(\"&\")\n            );\n          }\n        }\n        break;\n    }\n    // xhr.abort();\n    // xhr.getAllResponseHeaders();\n    // xhr.getResponseHeader(\"xxx\");\n  });\n}\n\nexport async function getFormSubmitData(formElement: HTMLFormElement) {\n  const result = {\n    url: formElement.action || \"\",\n    data: {} as Record<string, string>,\n    contentType:\n      formElement.method.toLowerCase() === \"post\" && formElement.enctype\n        ? formElement.enctype\n        : \"application/x-www-form-urlencoded\",\n    multipartFormDataString: \"\",\n    boundary: \"---------------------------\" + Date.now().toString(16)\n  };\n  const segments: string[] = [];\n  const isMultipartFormData = result.contentType == \"multipart/form-data\";\n  for (let i = 0; i < formElement.elements.length; i++) {\n    const element = formElement.elements[i];\n    if (!element.hasAttribute(\"name\")) {\n      continue;\n    }\n    const elementType = element.getAttribute(\"type\");\n    const elementInputType =\n      element.nodeName.toUpperCase() === \"INPUT\" && elementType\n        ? elementType.toUpperCase()\n        : \"\";\n    switch (elementInputType) {\n      case \"FILE\":\n        const fileElement = element as HTMLInputElement;\n        if (isMultipartFormData) {\n          /* enctype is multipart/form-data */\n          for (let j = 0, c = fileElement.files?.length || 0; j < c; j++) {\n            const file = fileElement.files?.[j];\n            if (file) {\n              const fileBinaryString = await readFileInBrowser<string>(\n                file,\n                ReadInBrowserEnum.binaryString\n              );\n              segments.push(\n                'Content-Disposition: form-data; name=\"' +\n                  fileElement.name +\n                  '\"; filename=\"' +\n                  file.name +\n                  '\"\\r\\nContent-Type: ' +\n                  file.type +\n                  \"\\r\\n\\r\\n\" +\n                  fileBinaryString +\n                  \"\\r\\n\"\n              );\n            }\n          }\n        } else {\n          /* enctype is application/x-www-form-urlencoded or text/plain or method is GET: files will not be sent! */\n        }\n        break;\n      case \"RADIO\":\n      case \"CHECKBOX\":\n        const inputElement = element as HTMLInputElement;\n        if (inputElement.checked) {\n          /// goto default\n        } else {\n          break;\n        }\n      // eslint-disable-next-line no-fallthrough\n      default:\n        const commonElement = element as\n          | HTMLInputElement\n          | HTMLTextAreaElement\n          | HTMLSelectElement;\n        if (isMultipartFormData) {\n          segments.push(\n            'Content-Disposition: form-data; name=\"' +\n              commonElement.name +\n              '\"\\r\\n\\r\\n' +\n              commonElement.value +\n              \"\\r\\n\"\n          );\n        } else {\n          result.data[commonElement.name] = commonElement.value;\n        }\n        break;\n    }\n  }\n  result.multipartFormDataString =\n    \"--\" +\n    result.boundary +\n    \"\\r\\n\" +\n    segments.join(\"--\" + result.boundary + \"\\r\\n\") +\n    \"--\" +\n    result.boundary +\n    \"--\\r\\n\";\n  return result;\n}\n","/* eslint-disable no-case-declarations */\nimport {\n  type AnyElement,\n  parseNumber,\n  toCamel,\n  toKebab,\n  DomMatrix\n} from \"@zyzgroup/core-common\";\nimport { VNode } from \"../vnode\";\nimport { getVnode, scheduleVnodeAsap, updateVnode } from \"./useVnode\";\nimport { domPrefixes } from \"./useElement\";\nimport { ajax } from \"../ajax\";\n\n// \"transitionend\"\n// \"webkitTransitionEnd\"\n// \"mozTransitionEnd\"\n// \"oTransitionEnd\"\n// \"msTransitionEnd\"\n// \"MSTransitionEnd\" ?\nfunction getPrefixedStyleNames(styleName: string): string[] {\n  const names = [];\n  for (let i = 0, l = domPrefixes.length; i < l; i++) {\n    const name = toKebab(domPrefixes[i] + styleName);\n    names.push(name);\n  }\n  return names;\n}\n\n////// window.getComputedStyle() 可能导致性能问题的一些因素：\n// 1. 计算成本：\n// getComputedStyle 涉及到遍历元素的所有 CSS 规则（包括层叠和继承），计算出每个属性的最终值\n// 对于复杂的 CSS 树结构、大量样式规则或频繁变动的动态样式，这种计算可能较为耗时，尤其是在大型或复杂的网页中\n// 2. DOM 访问：\n// 调用 getComputedStyle 通常伴随着 DOM 元素的访问。频繁地跨 DOM 查询元素，特别是深度嵌套或数量众多的元素，会增加 DOM 访问的成本，导致潜在的性能瓶颈\n// 3. 重排与重绘：\n// 如果 getComputedStyle 被触发在元素样式改变之后，且这些变化影响了布局（如尺寸、位置变化），浏览器可能需要进行重新布局（重排）和/或重新绘制\n// 这些操作通常是昂贵的，尤其是在没有优化的情况下连续触发\n// 4. 内存消耗：\n// getComputedStyle 返回一个 CSSStyleDeclaration 对象，它包含了元素所有计算后的样式属性\n// 频繁调用并保存这些对象可能会增加内存消耗，特别是在循环或定时器中持续查询多个元素时\n// 5. 阻塞主线程：\n// 如果在关键渲染路径（如页面加载或用户交互期间）中同步调用 getComputedStyle，可能会阻塞浏览器主线程，延迟其他重要任务（如脚本执行、布局、绘制等）的处理，从而影响页面响应速度和用户体验\n////// 为了缓解上述潜在的性能问题，可以采取以下策略：\n// 1. 缓存计算结果：如果可能，尽量避免对同一元素的样式进行重复查询。将 getComputedStyle 的结果缓存起来，只有当知道样式确实发生变更时才重新计算\n// 2. 批量处理：如果有多个元素需要查询样式，尝试一次性收集所有元素并批量调用 getComputedStyle，而不是逐个查询，以减少 DOM 访问和计算次数\n// 3. 使用事件监听：对于动态变化的样式，使用 MutationObserver 或相关的事件（如 transitionend、animationend）来监听样式变化，而不是频繁轮询\n// 4. 优化查询时机：\n// 4.1 避免在动画帧、滚动事件等高频率回调中无必要地调用 getComputedStyle\n// 4.2 尽量在微任务中执行，利用浏览器的异步更新机制，减少对主线程的阻塞\n// 5. 减少不必要的样式计算：\n// 5.1 精简 CSS 规则，避免过度复杂和冗余的样式\n// 5.2 使用 CSS Containment 属性（如 contain: layout）来限制样式计算的范围\n\n// 考虑替代方案：\n// 如果只需要检测特定样式属性的变化，可以尝试使用更轻量级的 API，如 elment.getBoundingClientRect()（获取布局信息）或 elment.classList.contains()（检查类名存在）等\n////// elment.getBoundingClientRect() 方法相对于 window.getComputedStyle() 在某些情况下可以被认为是一种性能优化的选择，主要是基于以下几个原因：\n// 1. 更有限的计算范围：\n// getComputedStyle 计算的是元素的所有计算样式属性，包括但不限于尺寸、颜色、字体、边框、定位、背景等，这涉及对整个 CSSOM（CSS Object Model）和样式层叠过程的遍历。\n// 而 getBoundingClientRect() 只关心元素在视口中的几何位置和尺寸（top, right, bottom, left, width, height），计算范围明显更为有限\n// 它直接从布局引擎获取已计算好的布局信息，无需处理样式层叠和解析等复杂过程，因此通常具有较低的计算成本\n// 2. 避免样式计算：\n// getBoundingClientRect() 不涉及样式计算，它返回的是浏览器已经完成布局后，元素在当前视口坐标系统下的实际位置和大小\n// 这意味着即使元素的样式发生变化，只要尚未触发布局更新，该方法的结果不会立即改变\n// 相比之下，getComputedStyle 需要实时反映样式变化，每次调用都可能触发样式计算\n// 3. 非阻塞性：\n// getBoundingClientRect() 不触发重排（reflow）或重绘（repaint）。它提供的信息是布局阶段的副产品，浏览器在渲染过程中已经计算好并存储了这些数据\n// 因此，调用此方法不会直接影响渲染流水线，避免了可能阻塞主线程的操作\n// 4. 更低的内存开销：\n// getComputedStyle 返回一个包含所有计算样式的 CSSStyleDeclaration 对象，如果频繁调用且不及时释放内存，可能会积累大量临时对象\n// 相反，getBoundingClientRect() 返回的是一个相对轻量的 DOMRect 对象，仅包含位置和尺寸信息，内存占用较小\n// 5. 适用场景明确：\n// 当仅需要获取元素的布局相关数据（如位置、尺寸）时，使用 getBoundingClientRect() 直接满足需求，无需处理与当前任务无关的其他样式信息\n// 针对性更强的方法使用可以避免不必要的计算和资源消耗\n// 6. 更好的跨浏览器兼容性：\n// getBoundingClientRect() 是一个历史悠久且广泛支持的 API，其性能表现和行为在各主流浏览器中通常更为一致，减少了因浏览器差异带来的潜在性能问题\n\n// 对外接口\nexport function getStyle(\n  el: AnyElement | any,\n  prop?: string,\n  pseudo?: string // :before\n) {\n  // 利用 vnode 缓存 style\n  const vnode = getVnode(el);\n  vnode.props.style = vnode.props.style || {};\n  if (!prop) {\n    // read all\n    // return atomReadStyles(el);\n    return vnode.props.style;\n  } else {\n    // read single\n    // return atomReadStyle(el, prop, pseudo);\n    return (\n      vnode.props.style[prop] ||\n      vnode.props.style[toCamel(prop)] ||\n      vnode.props.style[toKebab(prop)] ||\n      \"\"\n    );\n  }\n}\n\n// 对外接口\nexport function setStyle(\n  el: HTMLElement | any,\n  prop: string | Record<string, string | CanvasGradient>,\n  value?: string\n) {\n  updateVnode(el, (vnode: VNode) => {\n    vnode.props.style = vnode.props.style || {};\n    if (typeof prop == \"string\" && value) {\n      vnode.props.style[prop] = value;\n    } else if (prop instanceof Object) {\n      Object.keys(prop).forEach((key: string) => {\n        vnode.props.style[key] = prop[key];\n      });\n    }\n  });\n  scheduleVnodeAsap();\n}\n\nexport function atomReadStyles(\n  el: HTMLElement | any,\n  justInlineStyle = false // 是否只读内联样式\n): Record<string, string> {\n  const styles: Record<string, string> = {};\n  if (!justInlineStyle) {\n    if (getComputedStyle) {\n      const s = getComputedStyle(el);\n      for (let i = 0, n = s.length; i < n; i++) {\n        const prop = s[i];\n        styles[prop] = s.getPropertyValue(prop);\n      }\n    } else {\n      // 兼容 内联样式 和 IE\n      const s = el.style || el.currentStyle;\n      for (const prop in s) {\n        if (Object.prototype.hasOwnProperty.call(s, prop)) {\n          styles[prop] = s[prop];\n        }\n      }\n    }\n  }\n  // 内联样式\n  if (el.style.cssText) {\n    el.style.cssText\n      .split(\";\")\n      .filter((a: string) => !!a) // filter: non-empty\n      .forEach((a: string) => {\n        const [k, v] = a.split(\":\").map((s) => s.trim());\n        if (k && v) {\n          styles[k] = v;\n        }\n      });\n  }\n  return styles;\n}\n\nexport function readStyleFromStyles(\n  styles: Record<string, string>,\n  prop: string\n): string {\n  const prefixedProps = getPrefixedStyleNames(prop);\n  const prefixedPropsCount = prefixedProps.length;\n  let value = \"\";\n  for (let i = 0; i < prefixedPropsCount; i++) {\n    const prefixedProp = prefixedProps[i];\n    value = styles[prefixedProp] || \"\";\n    if (value) {\n      return value;\n    }\n  }\n  return value;\n}\n\nexport function atomReadStyle(\n  el: HTMLElement | any,\n  prop: string,\n  pseudo?: string // :before\n): string {\n  const prefixedProps = getPrefixedStyleNames(prop);\n  const prefixedPropsCount = prefixedProps.length;\n  let value = \"\";\n  for (let i = 0; i < prefixedPropsCount; i++) {\n    const prefixedProp = prefixedProps[i];\n    value =\n      (\"style\" in el && el.style[prefixedProp]) ||\n      (\"currentStyle\" in el && el.currentStyle[prefixedProp]) ||\n      \"\";\n    if (value) {\n      return value;\n    }\n  }\n  if (getComputedStyle) {\n    const style = getComputedStyle(el, pseudo);\n    for (let i = 0; i < prefixedPropsCount; i++) {\n      const prefixedProp = prefixedProps[i];\n      // const priority = style.getPropertyPriority(prefixedProp);\n      // value =\n      //   style.getPropertyValue(prefixedProp).trim() +\n      //   (priority ? \"!\" + priority : \"\");\n      value = style.getPropertyValue(prefixedProp).trim();\n      if (value) {\n        return value;\n      }\n    }\n  }\n  return value;\n}\n\nexport function atomWriteStyle(\n  el: HTMLElement | any,\n  prop: string | Record<string, string>,\n  value?: string\n) {\n  if (!prop) {\n    return;\n  }\n  if (typeof prop == \"string\" && value) {\n    try {\n      el.style.setProperty(\n        prop,\n        value.replace(/!important/i, \"\"),\n        value.toLowerCase().includes(\"!important\") ? \"important\" : \"\"\n      );\n    } catch (e) {\n      el.style[prop] = value;\n    }\n  } else if (prop instanceof Object) {\n    Object.keys(prop).forEach((k: string) => {\n      atomWriteStyle(el, k, prop[k]);\n    });\n  }\n}\n\nexport function atomRemoveStyle(\n  el: HTMLElement | any,\n  prop: string | Record<string, string>\n) {\n  if (typeof prop == \"string\") {\n    el.style.removeProperty(toKebab(prop));\n  } else {\n    Object.keys(prop).forEach((key: string) => {\n      atomRemoveStyle(el, key);\n    });\n  }\n}\n\n// `\n// :root {}\n// :host {}\n// `\n// :root, :host {\n//   --color-primary: #5A82F0;\n//   --linear-gradient-blue: linear-gradient(to right, #50c8fa, var(--color-primary));\n//   --linear-gradient-red: linear-gradient(to right, #ff9696, var(--color-red));\n//   --linear-gradient-green: linear-gradient(to right, #50f096, var(--color-green));\n// }\nexport function injectStyle(\n  styleSheetInnerText: string,\n  el?: AnyElement | string\n) {\n  let dom: Element | ShadowRoot | null;\n  if (typeof el === \"string\") {\n    const shadowRoot = document.querySelector(el)?.shadowRoot;\n    if (shadowRoot) {\n      dom = shadowRoot;\n    } else {\n      dom = document.querySelector(el);\n    }\n  } else {\n    dom = el || document.getElementsByTagName(\"head\")[0];\n  }\n  if (dom) {\n    const style = document.createElement(\"style\");\n    style.innerHTML = styleSheetInnerText;\n    dom.appendChild(style);\n    return () => {\n      if (dom instanceof HTMLElement || dom instanceof ShadowRoot) {\n        dom.removeChild(style);\n      }\n    };\n  } else {\n    // The first CSS rule is : document.styleSheets[0].cssRules[0].cssText\n\n    // const sheet = new CSSStyleSheet();\n    // sheet.replaceSync(`.color { color: pink }`);\n    // host.shadowRoot.adoptedStyleSheets.push(sheet);\n\n    const position = document.styleSheets[0].insertRule(styleSheetInnerText);\n\n    return () => {\n      document.styleSheets[0].deleteRule(position);\n    };\n  }\n}\n\nclass CSSRule {\n  public selector: string;\n  public name: string;\n  public value: string;\n\n  constructor(selector: string, name: string, value: string) {\n    this.selector = selector;\n    this.name = name;\n    this.value = value;\n  }\n\n  public toString() {\n    return `${this.selector} { ${this.name}: ${this.value} }`;\n  }\n}\n\nclass RuleList {\n  public propertyName: string;\n  public values: CSSRule[] = [];\n\n  constructor(propertyName: string) {\n    this.propertyName = propertyName;\n  }\n\n  public add(selector: string, value: string) {\n    this.values.push(new CSSRule(selector, this.propertyName, value));\n  }\n}\n\nexport async function getStyleSheets() {\n  const styleSheets: string[] = [];\n  const styleNodes = document.querySelectorAll(\"style, link\");\n  for (let i = 0, c = styleNodes.length; i < c; i++) {\n    const node = styleNodes[i];\n    let sheetCssText = node.innerHTML;\n    switch (node.nodeName.toLowerCase()) {\n      case \"style\":\n        // does not work with inline styles because IE doesn't allow you to get the text content of a STYLE element\n        // if (\n        //   sheetCssText.indexOf(\"-->\") != -1 &&\n        //   sheetCssText.indexOf(\"<!--\") != -1\n        // ) {\n        //   sheetCssText.replace(\"<!--\", \"\").replace(\"-->\", \"\");\n        // }\n        break;\n      case \"link\":\n        sheetCssText = (await ajax((node as any).href, {\n          method: \"GET\",\n          responseType: \"text\"\n        })) as string;\n        break;\n    }\n    sheetCssText = sheetCssText\n      .replace(/\\/\\/.+?(?=\\n|\\r|$)|\\/\\*[\\s\\S]+?\\*\\//g, \"\") // MultiLineComment\n      .replace(/@[^{};]*;|@[^{};]*\\{[^}]*\\}/g, \"\") // AtRule\n      .replace(/[\\\\n\\n]+(?<=[\\\\n\\n]+)\\s+/g, \"\");\n    styleSheets.push(sheetCssText);\n  }\n  return styleSheets;\n}\n\nexport async function getRules() {\n  const ruleLists: { [index: string]: RuleList } = {};\n  const styleSheets = await getStyleSheets();\n  for (let i = 0, n = styleSheets.length; i < n; i++) {\n    const sheet = styleSheets[i];\n    const rules = sheet.match(/[^{]*{[^}]*}/g);\n    if (!rules) {\n      continue;\n    }\n    for (let j = 0, c = rules.length; j < c; j++) {\n      const parsedRule = rules[j].split(/[{}]/g);\n      const selector = parsedRule[0].trim();\n      const propertiesStr = parsedRule[1];\n      const properties = propertiesStr.split(\";\");\n      for (let k = 0; k < properties.length; k++) {\n        if (properties[k].trim() != \"\") {\n          const splitProperty = properties[k].split(\":\");\n          const name = splitProperty[0].trim().toLowerCase();\n          const value = splitProperty[1];\n          if (!ruleLists[name]) {\n            ruleLists[name] = new RuleList(name);\n          }\n          if (value) {\n            ruleLists[name].add(selector, value.trim());\n          }\n        }\n      }\n    }\n  }\n  return ruleLists;\n}\n","import { type AnyElement, toKebab } from \"@zyzgroup/core-common\";\nimport { VNode } from \"../vnode\";\nimport { scheduleVnodeAsap, updateVnode } from \"./useVnode\";\nimport { atomReadStyles, setStyle } from \"./useStyle\";\nimport { YZCanvasContext } from \"./useDraw/canvas\";\n\n/// attribute 直接改变 HTML 的属性\n\n// 对外接口\nexport function useAttribute(\n  el: AnyElement,\n  prop?: string | Record<string, any>,\n  value?: string\n) {\n  /// read all\n  if (prop === undefined && value === undefined) {\n    return atomReadAttributes(el);\n  }\n  /// read single\n  if (typeof prop == \"string\" && value === undefined) {\n    return atomReadAttribute(el, prop);\n  }\n  // let obj: Record<string, string> = {};\n  if (typeof prop == \"object\") {\n    /// write all\n    // obj = prop;\n    updateVnode(el, (vnode: VNode) => {\n      for (const k in prop) {\n        if (k == \"style\") {\n          setStyle(el, k, prop[k]);\n        } else {\n          if (Object.prototype.hasOwnProperty.call(prop, k)) {\n            vnode.props[k] = \"\" + prop[k];\n          }\n        }\n      }\n    });\n  } else if (typeof prop == \"string\" && typeof value == \"string\") {\n    /// write single\n    // obj[prop] = \"\" + value;\n    if (prop == \"style\") {\n      setStyle(el, prop, value);\n    } else {\n      updateVnode(el, (vnode: VNode) => {\n        vnode.props[prop] = \"\" + value;\n      });\n    }\n  }\n  /// 性能原因，el.setAttribute() 耗时久, 改为使用虚拟DOM\n  // Object.entries(obj).forEach(([prop, val]) => {\n  //   el.setAttribute(toKebab(prop), val);\n  // });\n  scheduleVnodeAsap();\n}\n\nexport function atomReadAttributes(el: AnyElement) {\n  const obj: Record<string, string | Record<string, string>> = {};\n  for (let i = 0, attrs = el.attributes, n = attrs.length; i < n; i++) {\n    const attr = attrs[i];\n    if (attr.nodeName && attr.nodeValue) {\n      if (attr.nodeName === \"style\") {\n        obj[attr.nodeName] = atomReadStyles(el, true);\n      } else {\n        obj[attr.nodeName] = attr.nodeValue;\n      }\n    }\n  }\n  return obj;\n}\n\nexport function atomReadAttribute(el: AnyElement, prop: string) {\n  if (prop === \"style\") {\n    return atomReadStyles(el, true);\n  } else {\n    return el.getAttribute(toKebab(prop));\n  }\n}\n\nexport function atomWriteAttribute(\n  el: AnyElement,\n  prop: string,\n  value: string\n) {\n  return el.setAttribute(toKebab(prop), \"\" + value);\n}\n\nexport function atomRemoveAttribute(el: AnyElement, attrs: string) {\n  attrs.split(/[,\\s]+/i).forEach((attr) => {\n    const a = toKebab(attr.trim());\n    if (a != \"\") {\n      el.removeAttribute(a);\n    }\n  });\n}\n\n// convert css or svg attrs to canvas attrs\nexport function cssAttrsToCanvasAttrs(\n  ctx: YZCanvasContext,\n  attrs: Record<string, string | CanvasGradient>\n) {\n  // \"fill-opacity\": number;\n  // \"opacity\": number;\n  // \"letter-spacing\": number;\n  for (const key in attrs) {\n    const value = attrs[key];\n    switch (key) {\n      case \"fill\":\n        // fill: \"none\"\n        if (value !== \"none\") {\n          ctx.fillStyle = value;\n        }\n        break;\n      case \"stroke\":\n        // stroke: \"none\"\n        if (value !== \"none\") {\n          ctx.strokeStyle = value;\n        }\n        break;\n      case \"stroke-width\":\n      case \"strokeWidth\":\n        ctx.lineWidth = Number(value);\n        break;\n      case \"stroke-linecap\":\n      case \"strokeLinecap\":\n        // 线段的端点样式\n        // butt | round | square\n        ctx.lineCap = value as CanvasLineCap;\n        break;\n      case \"stroke-linejoin\":\n      case \"strokeLinejoin\":\n        switch (value) {\n          case \"round\":\n          case \"bevel\":\n          case \"miter\":\n            ctx.lineJoin = value as CanvasLineJoin;\n            break;\n          default: // arcs | miter-clip\n            ctx.lineJoin = \"miter\";\n            break;\n        }\n        break;\n      case \"stroke-miterlimit\":\n      case \"strokeMiterlimit\":\n        // 角重合长度, 角重合长度超过这个比例的部分会被cut\n        ctx.miterLimit = Number(value);\n        break;\n      case \"stroke-opacity\":\n      case \"strokeOpacity\":\n        break;\n      case \"stroke-dashoffset\":\n      case \"strokeDashoffset\":\n        ctx.lineDashOffset = Number(value);\n        break;\n      case \"stroke-dasharray\":\n      case \"strokeDasharray\":\n        // stroke-dasharray: 100 100;\n        if (typeof value === \"string\") {\n          ctx.setLineDash(value.split(/\\s+/).map((s) => Number(s)));\n        }\n        break;\n      case \"cursor\":\n        break;\n      case \"font\":\n        if (typeof value === \"string\") {\n          ctx.font = value;\n        }\n        break;\n      case \"font-size\":\n      case \"fontSize\":\n        ctx.font += ` ${value}`;\n        break;\n      case \"font-family\":\n      case \"fontFamily\":\n        ctx.font += ` ${value}`;\n        break;\n      case \"font-weight\":\n      case \"fontWeight\":\n        break;\n      case \"font-style\":\n      case \"fontStyle\":\n        break;\n      case \"text-anchor\":\n      case \"textAnchor\":\n        switch (value) {\n          case \"middle\":\n            ctx.textAlign = \"center\";\n            break;\n          case \"end\":\n            // ctx.textAlign = \"right\";\n            ctx.textAlign = \"end\";\n            break;\n          case \"start\":\n            // ctx.textAlign = \"left\";\n            ctx.textAlign = \"start\";\n            break;\n        }\n        break;\n      case \"alignment-baseline\":\n      case \"alignmentBaseline\":\n        switch (value) {\n          case \"middle\":\n          case \"bottom\":\n          case \"top\":\n          case \"alphabetic\":\n          case \"hanging\":\n          case \"ideographic\":\n            ctx.textBaseline = value;\n            break;\n          default: // auto | baseline | before-edge | text-before-edge  | central | after-edge | text-after-edge  | mathematical | center |\n            ctx.textBaseline = \"alphabetic\";\n            break;\n        }\n        break;\n      /// UNFINISH\n    }\n  }\n}\n","import { AnyElement, ReadInBrowserEnum, clamp } from \"@zyzgroup/core-common\";\nimport {\n  EMPTY,\n  Observable,\n  combineLatest,\n  firstValueFrom,\n  from,\n  fromEventPattern,\n  iif,\n  merge,\n  of,\n  race\n} from \"rxjs\";\nimport {\n  concatMap,\n  distinctUntilChanged,\n  exhaustMap,\n  filter,\n  map,\n  skipWhile,\n  startWith,\n  switchAll,\n  switchMap,\n  takeUntil,\n  tap,\n  throttleTime,\n  windowToggle\n} from \"rxjs/operators\";\nimport Hammer from \"hammerjs\";\nimport {\n  useEvent$,\n  HTMLEventObservable,\n  stopPropagation,\n  preventDefault\n} from \"./useEventListener\";\nimport { atomWriteAttribute } from \"./useAttribute\";\nimport { useSelectFile } from \"./useElement\";\nimport { atomReadStyle, atomReadStyles, readStyleFromStyles } from \"./useStyle\";\n\ndeclare const document: Document & {\n  attachEvent: any;\n  createEventObject: any;\n  onmousewheel: any;\n};\n\nexport function isSupportTouch(): boolean {\n  return (\n    \"ontouchstart\" in window ||\n    \"ontouchend\" in document ||\n    navigator.maxTouchPoints > 0\n  );\n}\n\nexport function isSupportPointer(): boolean {\n  // return !!(window.PointerEvent || (window as any).MSPointerEvent); // IE10 is prefixed\n  return !!window.PointerEvent;\n}\n\n/*\n * Detects whether the event \"eventName\" is supported on a tag with name\n * \"nodeName\".  Based on code from\n * http://perfectionkills.com/detecting-event-support-without-browser-sniffing/\n */\nexport function isSupportEvent(nodeName: any, eventName: string): boolean {\n  let el = document.createElement(nodeName);\n  eventName = \"on\" + eventName;\n  let isSupported = eventName in el;\n  if (!isSupported) {\n    el.setAttribute(eventName, \"return;\");\n    isSupported = typeof el[eventName] == \"function\";\n  }\n  el = null;\n  return isSupported;\n}\n\nexport type MousePoint = {\n  x: number;\n  y: number;\n  isDown: boolean; // 是否已按下\n};\n\nexport type MousePointGroup = {\n  start: MousePoint;\n  current: MousePoint;\n};\n\nexport function createDefaultMousePoint() {\n  return {\n    x: 0,\n    y: 0,\n    isDown: false\n  };\n}\n\nexport function useMousePoint() {\n  const startMousePoint: MousePoint = createDefaultMousePoint();\n  const currentMousePoint: MousePoint = createDefaultMousePoint();\n\n  return {\n    start: startMousePoint,\n    current: currentMousePoint,\n\n    setStart: function (\n      p: { x: number; y: number; isDown?: boolean },\n      isDown?: boolean\n    ) {\n      startMousePoint.x = p.x;\n      startMousePoint.y = p.y;\n      startMousePoint.isDown =\n        typeof isDown == \"boolean\"\n          ? isDown\n          : typeof p.isDown == \"boolean\"\n          ? p.isDown\n          : false;\n      this.setCurrent(p, isDown);\n    },\n\n    setCurrent: (\n      p: { x: number; y: number; isDown?: boolean },\n      isDown?: boolean\n    ) => {\n      currentMousePoint.x = p.x;\n      currentMousePoint.y = p.y;\n      currentMousePoint.isDown =\n        typeof isDown == \"boolean\"\n          ? isDown\n          : typeof p.isDown == \"boolean\"\n          ? p.isDown\n          : false;\n    }\n  };\n}\n\n// ** Mouse Events **\nexport function mouseMove$(\n  el: HTMLEventObservable = document.documentElement,\n  useCapture = false\n): Observable<MouseEvent> {\n  return useEvent$(el, \"mousemove\", useCapture);\n}\nexport function mouseDown$(\n  el: HTMLEventObservable = document.documentElement,\n  useCapture = false\n): Observable<MouseEvent> {\n  return useEvent$(el, \"mousedown\", useCapture);\n}\nexport function mouseUp$(\n  el: HTMLEventObservable = document.documentElement,\n  useCapture = false\n): Observable<MouseEvent> {\n  return useEvent$(el, \"mouseup\", useCapture);\n}\nexport function mouseOver$(\n  el: HTMLEventObservable = document.documentElement,\n  useCapture = false\n): Observable<MouseEvent> {\n  return useEvent$(el, \"mouseover\", useCapture);\n}\nexport function mouseOut$(\n  el: HTMLEventObservable = document.documentElement,\n  useCapture = false\n): Observable<MouseEvent> {\n  return useEvent$(el, \"mouseout\", useCapture);\n}\nexport function mouseEnter$(\n  el: HTMLEventObservable = document.documentElement,\n  useCapture = false\n): Observable<MouseEvent> {\n  return useEvent$(el, \"mouseenter\", useCapture);\n}\nexport function mouseLeave$(\n  el: HTMLEventObservable = document.documentElement,\n  useCapture = false\n): Observable<MouseEvent> {\n  return useEvent$(el, \"mouseleave\", useCapture);\n}\nexport function mouseClick$(\n  el: HTMLEventObservable = document.documentElement,\n  useCapture = false\n): Observable<MouseEvent> {\n  return useEvent$(el, \"click\", useCapture);\n}\nexport function mouseDoubleClick$(\n  el: HTMLEventObservable = document.documentElement,\n  useCapture = false\n): Observable<MouseEvent> {\n  return useEvent$(el, \"dblclick\", useCapture);\n}\nexport function mouseWheel$(\n  el: HTMLEventObservable = document.documentElement,\n  useCapture = false\n): Observable<MouseEvent> {\n  return useEvent$(\n    el,\n    \"onwheel\" in document.createElement(\"div\")\n      ? \"wheel\" // modern browsers\n      : document.onmousewheel !== undefined\n      ? \"mousewheel\" // Webkit and IE\n      : \"DOMMouseScroll\", // older Firefox\n    useCapture\n  );\n}\nexport function mouseContextMenu$(\n  el: HTMLEventObservable = document.documentElement,\n  useCapture = false\n): Observable<MouseEvent> {\n  return useEvent$(el, \"contextmenu\", useCapture);\n}\n\n// ** Touch Events **\nexport function touchMove$(\n  el: HTMLEventObservable = document.documentElement,\n  useCapture = false\n): Observable<TouchEvent> {\n  return useEvent$(el, \"touchmove\", useCapture);\n}\nexport function touchStart$(\n  el: HTMLEventObservable = document.documentElement,\n  useCapture = false\n): Observable<TouchEvent> {\n  return useEvent$(el, \"touchstart\", useCapture);\n}\nexport function touchEnd$(\n  el: HTMLEventObservable = document.documentElement,\n  useCapture = false\n): Observable<TouchEvent> {\n  return useEvent$(el, \"touchend\", useCapture);\n}\nexport function touchCancel$(\n  el: HTMLEventObservable = document.documentElement,\n  useCapture = false\n): Observable<TouchEvent> {\n  return useEvent$(el, \"touchcancel\", useCapture);\n}\n\n// ** Pointer Events **\nexport function pointerMove$(\n  el: HTMLEventObservable = document.documentElement,\n  useCapture = false\n): Observable<PointerEvent> {\n  return useEvent$(el, \"pointermove\", useCapture);\n}\nexport function pointerDown$(\n  el: HTMLEventObservable = document.documentElement,\n  useCapture = false\n): Observable<PointerEvent> {\n  return useEvent$(el, \"pointerdown\", useCapture);\n}\nexport function pointerUp$(\n  el: HTMLEventObservable = document.documentElement,\n  useCapture = false\n): Observable<PointerEvent> {\n  return useEvent$(el, \"pointerup\", useCapture);\n}\nexport function pointerCancel$(\n  el: HTMLEventObservable = document.documentElement,\n  useCapture = false\n): Observable<PointerEvent> {\n  return useEvent$(el, \"pointercancel\", useCapture);\n}\n\n// ** Hammer Events **  https://hammerjs.github.io/\n// Pan : Recognized when the pointer is down and moved in the allowed direction.\nexport function pan$(\n  el: HTMLEventObservable = document.documentElement\n): Observable<HammerInput> {\n  const hammer = new Hammer(el);\n  return fromEventPattern(\n    (next) => {\n      hammer.on(\"pan\", next);\n    },\n    (next) => {\n      hammer.off(\"pan\", next);\n    }\n  );\n  // return new Observable((observer) => {\n  //   const pan = (e: HammerInput) => {\n  //     observer.next(e);\n  //   };\n  //   hammer.on(\"pan\", pan);\n  //   return () => {\n  //     hammer.off(\"pan\", pan);\n  //   };\n  // });\n}\nexport function panMove$(\n  el: HTMLEventObservable = document.documentElement\n): Observable<HammerInput> {\n  const hammer = new Hammer(el);\n  return fromEventPattern(\n    (next) => {\n      hammer.on(\"panmove\", next);\n    },\n    (next) => {\n      hammer.off(\"panmove\", next);\n    }\n  );\n}\nexport function panStart$(\n  el: HTMLEventObservable = document.documentElement\n): Observable<HammerInput> {\n  const hammer = new Hammer(el);\n  return fromEventPattern(\n    (next) => {\n      hammer.on(\"panstart\", next);\n    },\n    (next) => {\n      hammer.off(\"panstart\", next);\n    }\n  );\n}\nexport function panEnd$(\n  el: HTMLEventObservable = document.documentElement\n): Observable<HammerInput> {\n  const hammer = new Hammer(el);\n  return fromEventPattern(\n    (next) => {\n      hammer.on(\"panend\", next);\n    },\n    (next) => {\n      hammer.off(\"panend\", next);\n    }\n  );\n}\nexport function panCancel$(\n  el: HTMLEventObservable = document.documentElement\n): Observable<HammerInput> {\n  const hammer = new Hammer(el);\n  return fromEventPattern(\n    (next) => {\n      hammer.on(\"pancancel\", next);\n    },\n    (next) => {\n      hammer.off(\"pancancel\", next);\n    }\n  );\n}\nexport function panLeft$(\n  el: HTMLEventObservable = document.documentElement\n): Observable<HammerInput> {\n  const hammer = new Hammer(el);\n  return fromEventPattern(\n    (next) => {\n      hammer.on(\"panleft\", next);\n    },\n    (next) => {\n      hammer.off(\"panleft\", next);\n    }\n  );\n}\nexport function panRight$(\n  el: HTMLEventObservable = document.documentElement\n): Observable<HammerInput> {\n  const hammer = new Hammer(el);\n  return fromEventPattern(\n    (next) => {\n      hammer.on(\"panright\", next);\n    },\n    (next) => {\n      hammer.off(\"panright\", next);\n    }\n  );\n}\nexport function panUp$(\n  el: HTMLEventObservable = document.documentElement\n): Observable<HammerInput> {\n  const hammer = new Hammer(el);\n  return fromEventPattern(\n    (next) => {\n      hammer.on(\"panup\", next);\n    },\n    (next) => {\n      hammer.off(\"panup\", next);\n    }\n  );\n}\nexport function panDown$(\n  el: HTMLEventObservable = document.documentElement\n): Observable<HammerInput> {\n  const hammer = new Hammer(el);\n  return fromEventPattern(\n    (next) => {\n      hammer.on(\"pandown\", next);\n    },\n    (next) => {\n      hammer.off(\"pandown\", next);\n    }\n  );\n}\n// 缩放 Pinch : Recognized when two or more pointers are moving toward (zoom-in) or away from each other (zoom-out).\nexport function pinch$(\n  el: HTMLEventObservable = document.documentElement\n): Observable<HammerInput> {\n  const hammer = new Hammer(el);\n  return fromEventPattern(\n    (next) => {\n      hammer.on(\"pinch\", next);\n    },\n    (next) => {\n      hammer.off(\"pinch\", next);\n    }\n  );\n}\nexport function pinchIn$(\n  el: HTMLEventObservable = document.documentElement\n): Observable<HammerInput> {\n  const hammer = new Hammer(el);\n  return fromEventPattern(\n    (next) => {\n      hammer.on(\"pinchin\", next);\n    },\n    (next) => {\n      hammer.off(\"pinchin\", next);\n    }\n  );\n}\nexport function pinchOut$(\n  el: HTMLEventObservable = document.documentElement\n): Observable<HammerInput> {\n  const hammer = new Hammer(el);\n  return fromEventPattern(\n    (next) => {\n      hammer.on(\"pinchout\", next);\n    },\n    (next) => {\n      hammer.off(\"pinchout\", next);\n    }\n  );\n}\n// 长按 Press : Recognized when the pointer is down for x ms without any movement.\nexport function press$(\n  el: HTMLEventObservable = document.documentElement\n): Observable<HammerInput> {\n  const hammer = new Hammer(el);\n  return fromEventPattern(\n    (next) => {\n      hammer.on(\"press\", next);\n    },\n    (next) => {\n      hammer.off(\"press\", next);\n    }\n  );\n}\n// 旋转 Rotate : Recognized when two or more pointer are moving in a circular motion.\nexport function rotate$(\n  el: HTMLEventObservable = document.documentElement\n): Observable<HammerInput> {\n  const hammer = new Hammer(el);\n  return fromEventPattern(\n    (next) => {\n      hammer.on(\"rotate\", next);\n    },\n    (next) => {\n      hammer.off(\"rotate\", next);\n    }\n  );\n}\n// Swipe : Recognized when the pointer is moving fast (velocity), with enough distance in the allowed direction.\nexport function swipe$(\n  el: HTMLEventObservable = document.documentElement\n): Observable<HammerInput> {\n  const hammer = new Hammer(el);\n  return fromEventPattern(\n    (next) => {\n      hammer.on(\"swipe\", next);\n    },\n    (next) => {\n      hammer.off(\"swipe\", next);\n    }\n  );\n}\nexport function swipeLeft$(\n  el: HTMLEventObservable = document.documentElement\n): Observable<HammerInput> {\n  const hammer = new Hammer(el);\n  return fromEventPattern(\n    (next) => {\n      hammer.on(\"swipeleft\", next);\n    },\n    (next) => {\n      hammer.off(\"swipeleft\", next);\n    }\n  );\n}\nexport function swipeRight$(\n  el: HTMLEventObservable = document.documentElement\n): Observable<HammerInput> {\n  const hammer = new Hammer(el);\n  return fromEventPattern(\n    (next) => {\n      hammer.on(\"swiperight\", next);\n    },\n    (next) => {\n      hammer.off(\"swiperight\", next);\n    }\n  );\n}\nexport function swipeUp$(\n  el: HTMLEventObservable = document.documentElement\n): Observable<HammerInput> {\n  const hammer = new Hammer(el);\n  return fromEventPattern(\n    (next) => {\n      hammer.on(\"swipeup\", next);\n    },\n    (next) => {\n      hammer.off(\"swipeup\", next);\n    }\n  );\n}\nexport function swipeDown$(\n  el: HTMLEventObservable = document.documentElement\n): Observable<HammerInput> {\n  const hammer = new Hammer(el);\n  return fromEventPattern(\n    (next) => {\n      hammer.on(\"swipedown\", next);\n    },\n    (next) => {\n      hammer.off(\"swipedown\", next);\n    }\n  );\n}\n// Tap : Recognized when the pointer is doing a small tap/click.\nexport function tap$(\n  el: HTMLEventObservable = document.documentElement\n): Observable<HammerInput> {\n  const hammer = new Hammer(el);\n  return fromEventPattern(\n    (next) => {\n      hammer.on(\"tap\", next);\n    },\n    (next) => {\n      hammer.off(\"tap\", next);\n    }\n  );\n}\n// 在 el 之外点击\nexport function tapOutSide$(\n  el: HTMLEventObservable = document.documentElement\n): Observable<HammerInput> {\n  const hammer = new Hammer(document.documentElement);\n  return fromEventPattern(\n    (next) => {\n      const handler = (e: HammerInput) => {\n        if (!e.target || el == e.target || el.contains(e.target as Node)) {\n          return;\n        }\n        next(e);\n      };\n      hammer.on(\"tap\", handler);\n      return handler;\n    },\n    (next, handler) => {\n      hammer.off(\"tap\", handler);\n    }\n  );\n}\n\n// ** Transition Events **\nexport function transitionStart$(\n  el: HTMLEventObservable = document.documentElement,\n  useCapture = false\n): Observable<TransitionEvent> {\n  return useEvent$(el, \"transitionstart\", useCapture);\n}\nexport function transitionEnd$(\n  el: HTMLEventObservable = document.documentElement,\n  useCapture = false\n): Observable<TransitionEvent> {\n  return merge(\n    useEvent$(el, \"transitionend\", useCapture) as Observable<TransitionEvent>,\n    useEvent$(\n      el,\n      \"webkitTransitionEnd\",\n      useCapture\n    ) as Observable<TransitionEvent>,\n    useEvent$(el, \"oTransitionEnd\", useCapture) as Observable<TransitionEvent>,\n    useEvent$(el, \"MSTransitionEnd\", useCapture) as Observable<TransitionEvent>\n  );\n}\n\n// ** Animation Events **\nexport function animationStart$(\n  el: HTMLEventObservable = document.documentElement,\n  useCapture = false\n): Observable<AnimationEvent> {\n  return useEvent$(el, \"animationstart\", useCapture);\n}\nexport function animationEnd$(\n  el: HTMLEventObservable = document.documentElement,\n  useCapture = false\n): Observable<AnimationEvent> {\n  return useEvent$(el, \"animationend\", useCapture);\n}\n\n// ** Drag Drop Events **\nexport function drag$(\n  el: HTMLEventObservable = document.documentElement,\n  useCapture = false\n): Observable<DragEvent> {\n  return useEvent$(el, \"drag\", useCapture);\n}\nexport function dragStart$(\n  el: HTMLEventObservable = document.documentElement,\n  useCapture = false\n): Observable<DragEvent> {\n  return useEvent$(el, \"dragstart\", useCapture);\n}\nexport function dragEnd$(\n  el: HTMLEventObservable = document.documentElement,\n  useCapture = false\n): Observable<DragEvent> {\n  return useEvent$(el, \"dragend\", useCapture);\n}\nexport function drop$(\n  el: HTMLEventObservable = document.documentElement,\n  useCapture = false\n): Observable<DragEvent> {\n  return useEvent$(el, \"drop\", useCapture);\n}\nexport function dragEnter$(\n  el: HTMLEventObservable = document.documentElement,\n  useCapture = false\n): Observable<DragEvent> {\n  return useEvent$(el, \"dragenter\", useCapture);\n}\nexport function dragLeave$(\n  el: HTMLEventObservable = document.documentElement,\n  useCapture = false\n): Observable<DragEvent> {\n  return useEvent$(el, \"dragleave\", useCapture);\n}\nexport function dragOver$(\n  el: HTMLEventObservable = document.documentElement,\n  useCapture = false\n): Observable<DragEvent> {\n  return useEvent$(el, \"dragover\", useCapture);\n}\n\n// ** Keyboard Events **\nexport function keyDown$(\n  el: HTMLEventObservable = document.documentElement,\n  useCapture = false\n): Observable<KeyboardEvent> {\n  return useEvent$(el, \"keydown\", useCapture);\n}\nexport function keyUp$(\n  el: HTMLEventObservable = document.documentElement,\n  useCapture = false\n): Observable<KeyboardEvent> {\n  return useEvent$(el, \"keyup\", useCapture);\n}\nexport function keyPress$(\n  el: HTMLEventObservable = document.documentElement,\n  useCapture = false\n): Observable<KeyboardEvent> {\n  return useEvent$(el, \"keypress\", useCapture);\n}\n\n////////////////////// Mouse 或 Touch 或 Pointer 或 hammer //////////////////////\n\ntype MousePointMoveOptions = {\n  start?: (e: MousePointEvent, mpg: MousePointGroup) => void;\n  end?: (e: MousePointEvent, mpg: MousePointGroup) => void;\n  useMousePoint?: ReturnType<typeof useMousePoint>;\n};\n\nexport function useMouseMovePoint$(\n  el: HTMLElement = document.documentElement,\n  options?: Pick<MousePointMoveOptions, \"useMousePoint\">\n): Observable<MousePointGroup> {\n  const mpg = options?.useMousePoint || useMousePoint();\n  return mouseMove$(el).pipe(\n    map((e) => {\n      mpg.setCurrent(getMousePositionInElement(e, el));\n      return mpg;\n    })\n  );\n}\n\nexport function useMouseDownMovePoint$(\n  el: HTMLElement = document.documentElement,\n  options?: MousePointMoveOptions\n): Observable<MousePointGroup> {\n  const mpg = options?.useMousePoint || useMousePoint();\n  return mouseMove$(el).pipe(\n    windowToggle(\n      mouseDown$(el).pipe(\n        tap((e) => {\n          mpg.setStart(getMousePositionInElement(e, el), true);\n          options?.start?.(e, mpg);\n        })\n      ),\n      () =>\n        mouseUp$(el).pipe(\n          tap((e) => {\n            mpg.setCurrent(getMousePositionInElement(e, el), false);\n            options?.end?.(e, mpg);\n          })\n        )\n    ),\n    switchAll(),\n    map((e) => {\n      mpg.setCurrent(getMousePositionInElement(e, el), true);\n      return mpg;\n    })\n  );\n}\n\nexport function useTouchDownMovePoint$(\n  el: HTMLElement = document.documentElement,\n  options?: MousePointMoveOptions\n): Observable<MousePointGroup> {\n  const mpg = options?.useMousePoint || useMousePoint();\n  return touchStart$(el).pipe(\n    tap((e) => {\n      const touch = e.changedTouches[0]; // first touch\n      mpg.setStart(getMousePositionInElement(touch, el), true);\n      options?.start?.(touch, mpg);\n    }),\n    switchMap(() =>\n      touchMove$(el).pipe(\n        takeUntil(\n          race(touchEnd$(el), touchCancel$(el)).pipe(\n            tap((e) => {\n              const touch = e.changedTouches[0]; // first touch\n              mpg.setCurrent(getMousePositionInElement(touch, el), false);\n              options?.end?.(touch, mpg);\n            })\n          )\n        )\n      )\n    ),\n    map((e) => {\n      const touch = e.changedTouches[0]; // first touch\n      mpg.setCurrent(getMousePositionInElement(touch, el), true);\n      return mpg;\n    })\n  );\n}\n\n// 在 mobile 下似乎 pointerUp$ pointerCancel$ 会提前触发？\nexport function usePointerDownMovePoint$(\n  el: HTMLElement = document.documentElement,\n  options?: MousePointMoveOptions\n): Observable<MousePointGroup> {\n  const mpg = options?.useMousePoint || useMousePoint();\n  return pointerDown$(el).pipe(\n    tap((e) => {\n      mpg.setStart(getMousePositionInElement(e, el), true);\n      options?.start?.(e, mpg);\n    }),\n    switchMap(() =>\n      pointerMove$(el).pipe(\n        takeUntil(\n          race(pointerUp$(el), pointerCancel$(el)).pipe(\n            tap((e) => {\n              mpg.setCurrent(getMousePositionInElement(e, el), false);\n              options?.end?.(e, mpg);\n            })\n          )\n        )\n      )\n    ),\n    map((e) => {\n      mpg.setCurrent(getMousePositionInElement(e, el), true);\n      return mpg;\n    })\n  );\n}\n\n// 大一统\nexport function useCompatableDownMovePoint$(\n  el: HTMLElement = document.documentElement,\n  options?: MousePointMoveOptions\n): Observable<MousePointGroup> {\n  return race(\n    useMouseDownMovePoint$(el, options),\n    useTouchDownMovePoint$(el, options)\n    // usePointerDownMovePoint$(el, options),\n  );\n}\n\nexport function useMouseAndPointerDownMovePoint$(\n  el: HTMLElement = document.documentElement,\n  options?: MousePointMoveOptions\n): Observable<MousePointGroup> {\n  const mpg = options?.useMousePoint || useMousePoint();\n  return merge(mouseMove$(el), pointerDown$(el)).pipe(\n    exhaustMap((e) => {\n      if (e instanceof PointerEvent) {\n        // pointerDown\n        mpg.setStart(getMousePositionInElement(e, el), true);\n        options?.start?.(e, mpg);\n        return pointerMove$(el).pipe(\n          takeUntil(\n            race(pointerUp$(el), pointerCancel$(el)).pipe(\n              tap((e) => {\n                mpg.setCurrent(getMousePositionInElement(e, el), false);\n                options?.end?.(e, mpg);\n              })\n            )\n          )\n        );\n      } else if (e instanceof MouseEvent) {\n        // mouseMove\n        return of(e);\n      } else {\n        return EMPTY;\n      }\n    }),\n    map((e) => {\n      mpg.setCurrent(\n        getMousePositionInElement(e, el),\n        e instanceof PointerEvent\n      );\n      return mpg;\n    })\n  );\n}\n\n/**\n * 下拉刷新 pull-downing dStartY > 0\n * 上拉加载 pull-uping dStartY < 0\n */\nexport function usePull$(el: HTMLElement): Observable<number> {\n  return new Observable<number>((observer) => {\n    const subscription = usePointerDownMovePoint$(el, {\n      start: () => {\n        observer.next(0);\n      }\n    }).subscribe((mpg) => {\n      observer.next(mpg.current.y - mpg.start.y);\n    });\n    return subscription.unsubscribe;\n  }).pipe(distinctUntilChanged());\n}\n\n// <div draggable=\"true\" ondragstart=\"dragstart\" ondragend=\"dragend\">Draggable-Item</div>\nexport function useDraggable(\n  el: HTMLElement,\n  options?: {\n    onStart?: (e: DragEvent) => void;\n    onDrag?: (e: DragEvent) => void;\n    onEnd?: (e: DragEvent) => void;\n  }\n): () => void {\n  atomWriteAttribute(el, \"draggable\", \"true\");\n\n  const dragStartSubscription = dragStart$(el, true).subscribe(\n    (e: DragEvent) => {\n      preventDefault(e);\n      stopPropagation(e);\n      const dt = e.dataTransfer;\n      if (dt) {\n        dt.effectAllowed = \"move\";\n        // you must set some data in order to drag an arbitrary block element like a <div>\n        dt.setData(\"text/plain\", \"some-data\");\n        // const coords = { x: e.offsetX, y: e.offsetY };\n        // if (dt.setDragImage) {\n        //   dt.setDragImage(el, coords.x, coords.y);\n        // }\n      }\n      options?.onStart?.(e);\n    }\n  );\n\n  const dragSubscription = drag$(el).subscribe((e: DragEvent) => {\n    preventDefault(e);\n    options?.onDrag?.(e);\n  });\n\n  const dragEndSubscription = dragEnd$(el).subscribe((e: DragEvent) => {\n    preventDefault(e);\n    options?.onEnd?.(e);\n  });\n\n  return () => {\n    dragStartSubscription.unsubscribe();\n    dragSubscription.unsubscribe();\n    dragEndSubscription.unsubscribe();\n  };\n}\n\n// <div ondragenter=\"dragenter\" ondragleave=\"dragleave\" ondragover=\"dragover\" ondrop=\"drop\">Drop-Zone</div>\nexport function useDrop(\n  el: HTMLElement,\n  options?: {\n    onEnter?: (e: DragEvent) => void;\n    onLeave?: (e: DragEvent) => void;\n    onOver?: (e: DragEvent) => void;\n    onDrop?: (e: DragEvent, files: File[]) => void;\n  }\n): () => void {\n  const dragEnterSubscription = dragEnter$(el).subscribe((e: DragEvent) => {\n    preventDefault(e);\n    options?.onEnter?.(e);\n  });\n\n  const dragOverSubscription = dragOver$(el).subscribe((e: DragEvent) => {\n    preventDefault(e);\n    const dt = e.dataTransfer;\n    if (dt) {\n      dt.dropEffect = \"move\";\n    }\n    options?.onOver?.(e);\n  });\n\n  const dragLeaveSubscription = dragLeave$(el).subscribe((e: DragEvent) => {\n    preventDefault(e);\n    options?.onLeave?.(e);\n  });\n\n  const dropSubscription = drop$(el).subscribe((e: DragEvent) => {\n    preventDefault(e);\n    const dt = e.dataTransfer;\n    if (!dt) {\n      options?.onDrop?.(e, []);\n      return;\n    }\n    options?.onDrop?.(e, [...dt.files]);\n    // const data = dt.getData(\"text\");\n    // dt.clearData();\n    // for (const item of dt.items) {\n    //   if (item.kind === \"string\") {\n    //     if (item.type.match(\"^text/plain\")) {\n    //       item.getAsString((s) => {\n    //         // string\n    //       });\n    //     } else if (item.type.match(\"^text/html\")) {\n    //       // HTML\n    //     } else if (item.type.match(\"^text/uri-list\")) {\n    //       // URI\n    //     }\n    //   } else if (item.kind === \"file\") {\n    //     if (item.type.match(\"^image/\")) {\n    //       // image file\n    //     }\n    //     const f = item.getAsFile();\n    //   }\n    // }\n  });\n\n  return () => {\n    dragEnterSubscription.unsubscribe();\n    dragOverSubscription.unsubscribe();\n    dragLeaveSubscription.unsubscribe();\n    dropSubscription.unsubscribe();\n  };\n}\n\n////////////////////// Global Events //////////////////////\n\nexport function useScroll$(time = 10): Observable<Event> {\n  // window.scrollX;\n  // window.scrollY;\n  return useEvent$(window, \"scroll\", true).pipe(throttleTime(time));\n}\n\nexport function useDocumentVisible$(): Observable<boolean> {\n  return useEvent$(document, \"visibilitychange\", true).pipe(\n    map(() => {\n      // return !document.hidden;\n      return document.visibilityState === \"visible\";\n    }),\n    distinctUntilChanged()\n  );\n  // return combineLatest([\n  //   useEvent$(window, \"focus\", true),\n  //   useEvent$(window, \"pagehide\", true),\n  //   useEvent$(window, \"blur\", true)\n  // ]).pipe(\n  //   map(([_, __, ___]) => {\n  //     return !document.hidden;\n  //   }),\n  //   distinctUntilChanged()\n  // );\n}\n\n// 监听 localStorage , storageEvent.key == localStorage.key\nexport function storage$(): Observable<StorageEvent> {\n  return useEvent$<StorageEvent>(window, \"storage\", false);\n}\n\n////////////////////// Position //////////////////////\n\nexport function getWindow() {\n  return {\n    screenWidth: window.screen.width,\n    screenHeight: window.screen.height,\n    innerWidth: window.innerWidth, // 浏览器窗口的宽度（不包括滚动条）\n    innerHeight: window.innerHeight, // 浏览器窗口的高度（不包括滚动条）\n    screenX: window.screenX,\n    screenY: window.screenY, // window.screenY + (window.outerHeight - window.innerHeight)\n    pageXOffset: window.pageXOffset, // 当前页面水平滚动的像素数\n    pageYOffset: window.pageYOffset // 当前页面垂直滚动的像素数\n  };\n}\n\n// For any non-empty HTML document, documentElement will always be an <html> element.\n// For any non-empty XML document, documentElement will always be whatever element is the root element of the document.\n// The Document.body property represents the <body> or <frameset> node of the current document, or null if no such element exists.\nexport function getDocumentElement() {\n  const el = document.documentElement || document.body;\n  // // IE浏览器\n  // if (document.compatMode === \"CSS1Compat\") {\n  //   // 标准模式\n  // } else {\n  //   // 怪异模式\n  // }\n  return {\n    el,\n\n    // 不包括边框大小，只包含内容和内边距\n    clientWidth: el.clientWidth,\n    clientHeight: el.clientHeight,\n    clientTop: el.clientTop,\n    clientLeft: el.clientLeft,\n\n    // const contentWidth =\n    //   [...el.children].reduce(\n    //     (a, e) => Math.max(a, e.getBoundingClientRect().right),\n    //     0\n    //   ) - el.getBoundingClientRect().x;\n\n    // 元素的内容区域加上它的内边距再加上任何溢出内容的尺寸\n    // 当内容没有溢出时，scrollWidth == clientWidth , scrollHeight == clientHeight\n    // 当内容溢出时，   scrollWidth >  clientWidth , scrollHeight >  clientHeight\n    scrollWidth: el.scrollWidth,\n    scrollHeight: el.scrollHeight,\n    scrollTop: el.scrollTop,\n    scrollLeft: el.scrollLeft,\n\n    // 返回元素的实际大小，包括边框、内边距和滚动条\n    offsetWidth: el.offsetWidth,\n    offsetHeight: el.offsetHeight,\n    offsetTop: el.offsetTop,\n    offsetLeft: el.offsetLeft,\n\n    offsetParent: el.offsetParent\n  };\n}\n\n// 获取可视区域\nexport function getViewport() {\n  const { clientWidth, clientHeight, scrollLeft, scrollTop } =\n    getDocumentElement();\n  return {\n    width: window.innerWidth || clientWidth,\n    height: window.innerHeight || clientHeight,\n    x: window.pageXOffset || scrollLeft,\n    y: window.pageYOffset || scrollTop\n  };\n}\n\n// 获取页面整体\nexport function getPage() {\n  const { scrollWidth, scrollHeight, scrollLeft, scrollTop } =\n    getDocumentElement();\n  return {\n    width: scrollWidth,\n    height: scrollHeight,\n    scrollX: window.pageXOffset || scrollLeft,\n    scrollY: window.pageYOffset || scrollTop\n  };\n}\n\nexport function getElementPositionInViewport(el: HTMLElement) {\n  return el.getBoundingClientRect();\n}\n\nexport function getRelativeBoundingClientRect(child: HTMLElement) {\n  return {\n    x: child.offsetLeft,\n    y: child.offsetTop,\n    width: child.offsetWidth,\n    height: child.offsetHeight\n  };\n}\n\nexport function getElementPositionInPage(\n  el: HTMLElement | SVGElement | Element\n) {\n  const { top, left, width, height } = el.getBoundingClientRect();\n  const { scrollLeft, scrollTop } = getDocumentElement();\n  return {\n    x: left + scrollLeft,\n    y: top + scrollTop,\n    width,\n    height\n  };\n}\n\nexport function getElementPositionInPage2(el: HTMLElement) {\n  let elem: HTMLElement | null = el;\n  let actualLeft = 0;\n  let actualTop = 0;\n  while (elem !== null) {\n    actualLeft += elem.offsetLeft;\n    actualTop += elem.offsetTop;\n    if (elem.offsetParent instanceof HTMLElement) {\n      elem = elem.offsetParent;\n    } else {\n      elem = null;\n    }\n  }\n  return {\n    x: actualLeft,\n    y: actualTop,\n    width: el.offsetWidth,\n    height: el.offsetHeight\n  };\n}\n\nexport function getVerticalScrollTopPercentInPage() {\n  const { clientHeight, scrollTop, scrollHeight } = getDocumentElement();\n  const height = scrollHeight - clientHeight;\n  const percent = height <= 0 ? 0 : (scrollTop / height) * 100;\n  return percent;\n}\n\n// 判断元素是否在视口内\nexport function isInViewport(el: HTMLElement): boolean {\n  const viewport = getViewport();\n  const rect = getElementPositionInViewport(el);\n  return (\n    rect.bottom >= 0 &&\n    rect.top <= viewport.height &&\n    rect.right >= 0 &&\n    rect.left <= viewport.width\n  );\n}\n\n// export function getComputedPosition(el: HTMLElement) {\n//   const styles = atomReadStyles(el);\n//   const transform = readStyleFromStyles(styles, \"transform\");\n//   let x = 0;\n//   let y = 0;\n//   if (transform && transform !== \"none\") {\n//     // 匹配 matrix() matrix3d()\n//     const matrixValues = transform.match(/matrix[^()]*\\(([^()]+)\\)/);\n//     if (matrixValues && matrixValues[1]) {\n//       const matrix = matrixValues[1].split(\", \").map(Number);\n//       x = +(matrix[12] || matrix[4]) || 0;\n//       y = +(matrix[13] || matrix[5]) || 0;\n//     }\n\n//     // 匹配 translateX() 和 translateY()\n//     const translateX = transform.match(/translateX\\((-?[\\d.]+)px\\)/);\n//     const translateY = transform.match(/translateY\\((-?[\\d.]+)px\\)/);\n//     if (translateX) {\n//       x = parseFloat(translateX[1]);\n//     }\n//     if (translateY) {\n//       y = parseFloat(translateY[1]);\n//     }\n\n//     // 匹配 translate()\n//     const translate = transform.match(\n//       /translate\\((-?[\\d.]+)px, (-?[\\d.]+)px\\)/\n//     );\n//     if (translate) {\n//       x = parseFloat(translate[1]);\n//       y = parseFloat(translate[2]);\n//     }\n\n//     // 匹配 scaleX() 和 scaleY()\n//     // const scaleX = transform.match(/scaleX\\((-?[\\d.]+)\\)/);\n//     // const scaleY = transform.match(/scaleY\\((-?[\\d.]+)\\)/);\n\n//     // 匹配 rotate()\n//     // const rotate = transform.match(/rotate\\((-?[\\d.]+)deg\\)/);\n//   } else {\n//     x = +styles.left.replace(/[^-\\d.]/g, \"\") || 0;\n//     y = +styles.top.replace(/[^-\\d.]/g, \"\") || 0;\n//   }\n//   return { x: x, y: y };\n// }\n\n////////////////////// Position : Mouse 或 Touch 或 Pointer 或 hammer //////////////////////\n\nexport type MousePointEvent = MouseEvent | Touch | PointerEvent | HammerInput;\n\nexport function getMousePositionInViewport(ev: MousePointEvent) {\n  if (\"center\" in ev) {\n    const center = (ev as HammerInput).center;\n    const rect = getElementPositionInViewport(ev.target);\n    return {\n      x: center.x - rect.x,\n      y: center.y - rect.y\n    };\n  }\n  return {\n    x: ev.clientX,\n    y: ev.clientY\n  };\n}\n\nexport function getMousePositionInPage(ev: MousePointEvent) {\n  if (\"center\" in ev) {\n    return (ev as HammerInput).center;\n  }\n  if (typeof ev.pageX == \"number\" && typeof ev.pageY == \"number\") {\n    return {\n      x: ev.pageX,\n      y: ev.pageY\n    };\n  }\n  const { scrollLeft, scrollTop } = getDocumentElement();\n  return {\n    x: ev.clientX + scrollLeft,\n    y: ev.clientY + scrollTop\n  };\n}\n\nexport function getMousePositionInElement(\n  ev: MousePointEvent,\n  element?: AnyElement\n) {\n  const r = {\n    x: 0,\n    y: 0\n  };\n  if (!element) {\n    /// 原 offset 只是相对于直接父类\n    let fixedOffsetX = 0;\n    let fixedOffsetY = 0;\n    if (\n      \"currentTarget\" in ev &&\n      ev.currentTarget &&\n      ev.target &&\n      ev.currentTarget != ev.target\n      // ev.target: Refers to the actual element where the event occurred\n      // ev.currentTarget: Refers to the element to which the event handler is attached\n    ) {\n      const currentTargetRect = (\n        ev.currentTarget as AnyElement\n      ).getBoundingClientRect();\n      const targetRect = (ev.target as AnyElement).getBoundingClientRect();\n      fixedOffsetX = targetRect.left - currentTargetRect.left;\n      fixedOffsetY = targetRect.top - currentTargetRect.top;\n    }\n    if (\"offsetX\" in ev) {\n      r.x = ev.offsetX + fixedOffsetX;\n      r.y = ev.offsetY + fixedOffsetY;\n    } else {\n      const mouse = getMousePositionInPage(ev);\n      const p = getElementPositionInPage(ev.target as AnyElement);\n      r.x = clamp(mouse.x - p.x + fixedOffsetX, 0, p.width);\n      r.y = clamp(mouse.y - p.y + fixedOffsetY, 0, p.height);\n    }\n  } else {\n    const mouse = getMousePositionInPage(ev);\n    const p = getElementPositionInPage(element);\n    r.x = clamp(mouse.x - p.x, 0, p.width);\n    r.y = clamp(mouse.y - p.y, 0, p.height);\n  }\n  return r;\n}\n\n/**\n * Given a mouse scroll wheel event, get the \"delta\" of how fast it moved.\n * @param {Object} e - a DOM Event Object.\n * @return {int} - the mouse wheel's delta.  It is greater than 0, the\n * scroll wheel was spun upwards; if less than 0, downwards.\n */\nexport function getScrollWheelDelta(e: any) {\n  let delta = 0;\n  if (!e) /* For IE. */ e = window.event;\n  if (e.wheelDelta) {\n    /* IE/Opera. */\n    delta = e.wheelDelta / 120;\n    /** In Opera 9, delta differs in sign as compared to IE.\n     */\n    if ((window as any).opera) {\n      delta = -delta;\n    }\n  } else if (e.detail) {\n    /** Mozilla case. */\n    /** In Mozilla, sign of delta is different than in IE.\n     * Also, delta is multiple of 3.\n     */\n    delta = -e.detail / 3;\n  }\n  return delta;\n}\n\n// 0 — Left Button (the default)\n// 1 — Middle Button (currently unsupported)\n// 2 — Right Button\n// 3 — X1 (Back) Button\n// 4 — X2 (Forward) Button\nexport function getMouseButton(event: MouseEvent) {\n  if (document.implementation.hasFeature(\"MouseEvents\", \"2.0\")) {\n    return event.button;\n  } else {\n    switch (event.button) {\n      case 0:\n      case 1:\n      case 3:\n      case 5:\n      case 7:\n        return 0; // 左键\n      case 2:\n      case 6:\n        return 2; // 右键\n      case 4:\n        return 1; // 中键\n    }\n  }\n}\n\n////////////////////// Keyboard //////////////////////\n\nexport const CommonKeyCode = {\n  BACKSPACE: 8,\n  TAB: 9,\n  COMMA: 188,\n  DELETE: 46,\n  END: 35,\n  ENTER: 13,\n  ESCAPE: 27,\n  HOME: 36,\n  LEFT: 37,\n  UP: 38,\n  DOWN: 40,\n  PAGE_DOWN: 34,\n  PAGE_UP: 33,\n  PERIOD: 190,\n  RIGHT: 39,\n  SPACE: 32\n};\n\n/**\n * Representations of pressable keys that aren't text.  These are stored in\n * the Unicode PUA (Private Use Area) code points, 0xE000-0xF8FF.  Refer to\n * http://www.google.com.au/search?&q=unicode+pua&btnK=Search\n *\n * @enum {string}\n * @see <https://www.w3.org/TR/webdriver/#keyboard-actions>\n */\nexport const Key = {\n  NULL: \"\\uE000\",\n  CANCEL: \"\\uE001\", // ^break\n  HELP: \"\\uE002\",\n  BACK_SPACE: \"\\uE003\",\n  TAB: \"\\uE004\",\n  CLEAR: \"\\uE005\",\n  RETURN: \"\\uE006\",\n  ENTER: \"\\uE007\",\n  SHIFT: \"\\uE008\",\n  CONTROL: \"\\uE009\",\n  ALT: \"\\uE00A\",\n  PAUSE: \"\\uE00B\",\n  ESCAPE: \"\\uE00C\",\n  SPACE: \"\\uE00D\",\n  PAGE_UP: \"\\uE00E\",\n  PAGE_DOWN: \"\\uE00F\",\n  END: \"\\uE010\",\n  HOME: \"\\uE011\",\n  ARROW_LEFT: \"\\uE012\",\n  LEFT: \"\\uE012\",\n  ARROW_UP: \"\\uE013\",\n  UP: \"\\uE013\",\n  ARROW_RIGHT: \"\\uE014\",\n  RIGHT: \"\\uE014\",\n  ARROW_DOWN: \"\\uE015\",\n  DOWN: \"\\uE015\",\n  INSERT: \"\\uE016\",\n  DELETE: \"\\uE017\",\n  SEMICOLON: \"\\uE018\",\n  EQUALS: \"\\uE019\",\n\n  NUMPAD0: \"\\uE01A\", // number pad keys\n  NUMPAD1: \"\\uE01B\",\n  NUMPAD2: \"\\uE01C\",\n  NUMPAD3: \"\\uE01D\",\n  NUMPAD4: \"\\uE01E\",\n  NUMPAD5: \"\\uE01F\",\n  NUMPAD6: \"\\uE020\",\n  NUMPAD7: \"\\uE021\",\n  NUMPAD8: \"\\uE022\",\n  NUMPAD9: \"\\uE023\",\n  MULTIPLY: \"\\uE024\",\n  ADD: \"\\uE025\",\n  SEPARATOR: \"\\uE026\",\n  SUBTRACT: \"\\uE027\",\n  DECIMAL: \"\\uE028\",\n  DIVIDE: \"\\uE029\",\n\n  F1: \"\\uE031\", // function keys\n  F2: \"\\uE032\",\n  F3: \"\\uE033\",\n  F4: \"\\uE034\",\n  F5: \"\\uE035\",\n  F6: \"\\uE036\",\n  F7: \"\\uE037\",\n  F8: \"\\uE038\",\n  F9: \"\\uE039\",\n  F10: \"\\uE03A\",\n  F11: \"\\uE03B\",\n  F12: \"\\uE03C\",\n\n  COMMAND: \"\\uE03D\", // Apple command key\n  META: \"\\uE03D\", // alias for Windows key\n\n  /**\n   * Japanese modifier key for switching between full- and half-width\n   * characters.\n   * @see <https://en.wikipedia.org/wiki/Language_input_keys>\n   */\n  ZENKAKU_HANKAKU: \"\\uE040\"\n};\n\nexport function getKeyCode(e: KeyboardEvent) {\n  if (e.key) {\n    return e.key; // e.key='u' | e.code='KeyU'\n  } else if (e.keyCode) {\n    return e.keyCode;\n  } else if (e.which) {\n    return e.which;\n  }\n}\n\n// 注意：不要与浏览器系统快捷键重合！\nexport interface HotKeyOptions {\n  keys: string[];\n  ctrl?: boolean;\n  shift?: boolean;\n  alt?: boolean;\n  target?: EventTarget;\n}\n\n/// UNDO 判断多个 keys 同时按下\nfunction matchHotKeyScheme(\n  event: KeyboardEvent, // WheelEvent | KeyboardEvent\n  options: HotKeyOptions\n): boolean {\n  const ctrlKey = options.ctrl || false;\n  const shiftKey = options.shift || false;\n  const altKey = options.alt || false;\n  return (\n    (ctrlKey === event.metaKey || ctrlKey === event.ctrlKey) &&\n    shiftKey === event.shiftKey &&\n    altKey === event.altKey &&\n    options.keys.map((k) => k.toLowerCase()).includes(event.key.toLowerCase())\n  );\n}\n\n// UNDO pause\n// UNDO resume\n\n// 注意：不要与浏览器系统快捷键重合！\nexport function useHotKeyDown$(options: HotKeyOptions): Observable<void> {\n  return keyDown$(options.target || document || window).pipe(\n    filter((e: KeyboardEvent) => matchHotKeyScheme(e, options)),\n    map((e: KeyboardEvent) => {\n      e.stopPropagation();\n      e.preventDefault();\n      return;\n    })\n  );\n}\n\n// 注意：不要与浏览器系统快捷键重合！\nexport function useHotKeyUp$(options: HotKeyOptions): Observable<void> {\n  return keyUp$(options.target || document || window).pipe(\n    filter((e: KeyboardEvent) => matchHotKeyScheme(e, options)),\n    map((e: KeyboardEvent) => {\n      e.stopPropagation();\n      e.preventDefault();\n      return;\n    })\n  );\n}\n\n// 注意：不要与浏览器系统快捷键重合！\nexport function useHotKeyFile$(\n  hotKeyOptions: HotKeyOptions = { keys: [\"o\"] },\n  type: ReadInBrowserEnum = ReadInBrowserEnum.text\n) {\n  return useHotKeyDown$(hotKeyOptions).pipe(\n    // 方法1：使用 switchMap 调用异步函数\n    switchMap(async () => {\n      return await useSelectFile(type);\n    })\n    // 方法2：将 Promise 转为 Observable\n    // switchMap(() => {\n    //   return from(useSelectFile(type));\n    // })\n  );\n}\n\n// 注意：不要与浏览器系统快捷键重合！\nexport async function useHotKeyFile(\n  hotKeyOptions: HotKeyOptions = { keys: [\"o\"] },\n  type: ReadInBrowserEnum = ReadInBrowserEnum.text\n) {\n  return firstValueFrom(useHotKeyFile$(hotKeyOptions, type)); // 将 Observable 转为 Promise\n}\n","import { Observable, merge } from \"rxjs\";\nimport { map, skipWhile, startWith } from \"rxjs/operators\";\nimport { type AnyElement } from \"@zyzgroup/core-common\";\nimport { useEvent$ } from \"./useEventListener\";\nimport { useIntersection$ } from \"./useIntersection\";\nimport { useMutation$ } from \"./useMutation\";\nimport { isIE } from \"../env\";\n\nexport async function useResize(el: AnyElement, cb: (r: DOMRect) => void) {\n  return new Promise<() => void>((resolve) => {\n    const observer = new ResizeObserver((entries: ResizeObserverEntry[]) => {\n      // const entry = entries[0];\n      // const rect = entry.contentRect;\n      const rect = el.getBoundingClientRect();\n      cb(rect);\n      resolve(() => {\n        observer.unobserve(el);\n      });\n    });\n    observer.observe(el);\n  });\n}\n\n// 监听元素可见区域（content-box）尺寸的变化\nexport function useResize$(\n  el: AnyElement = document.documentElement,\n  options?: ResizeObserverOptions\n): Observable<DOMRect> {\n  return new Observable((observer) => {\n    // 起码要执行一次，类似 BehaviorSubject\n    const rect = el.getBoundingClientRect();\n    let prevX = rect.x;\n    let prevY = rect.y;\n    let prevWidth = rect.width;\n    let prevHeight = rect.height;\n    observer.next(rect);\n    const ro = new ResizeObserver((entries: ResizeObserverEntry[]) => {\n      // const entry = entries[0];\n      // const rect = entry.contentRect; // 有时 rect.x == 0 ？\n      const rect = el.getBoundingClientRect();\n      if (\n        prevX != rect.x ||\n        prevY != rect.y ||\n        prevWidth != rect.width ||\n        prevHeight != rect.height\n      ) {\n        prevX = rect.x;\n        prevY = rect.y;\n        prevWidth = rect.width;\n        prevHeight = rect.height;\n        observer.next(rect);\n      }\n    });\n    ro.observe(el, options);\n    return () => {\n      ro.unobserve(el);\n      ro.disconnect();\n    };\n  });\n}\n\nexport function useWindowResize$(): Observable<{\n  width: number;\n  height: number;\n}> {\n  return useEvent$(\n    window,\n    \"orientationchange\" in window ? \"orientationchange\" : \"resize\"\n  ).pipe(\n    map((e: Event | UIEvent) => {\n      return {\n        width: (e.target as Window).innerWidth,\n        height: (e.target as Window).innerHeight\n      };\n    }),\n    startWith({\n      width: window.innerWidth,\n      height: window.innerHeight\n    })\n  );\n}\n\n// 结果不准\n// export function useDocumentContentChange$(): Observable<{\n//   width: number;\n//   height: number;\n// }> {\n//   let prevWidth: number;\n//   let prevHeight: number;\n//   return merge(\n//     useResize$(document.documentElement),\n//     useMutation$(document.body)\n//   ).pipe(\n//     map(() => ({\n//       width: document.documentElement.offsetWidth,\n//       height: document.documentElement.offsetHeight\n//     })),\n//     skipWhile((rect) => {\n//       const _prevWidth = prevWidth;\n//       const _prevHeight = prevHeight;\n//       prevWidth = rect.width;\n//       prevHeight = rect.height;\n//       return _prevWidth == rect.width && _prevHeight == rect.height;\n//     })\n//   );\n// }\n","import { EventBus, EventBusListeners } from \"@zyzgroup/core-common\";\nimport Hammer from \"hammerjs\";\nimport { useEventListener } from \"./useEventListener\";\nimport {\n  MousePointEvent,\n  getMousePositionInElement,\n  isSupportTouch\n} from \"./useElementEvents\";\nimport { useResize } from \"./useResize\";\n\n// deprecated 已过时！建议切换至：./useElementEvents.ts\n\ndeclare const document: Document & {\n  attachEvent: any;\n  createEventObject: any;\n  onmousewheel: any;\n};\n\ntype MousePoint = {\n  x: number;\n  y: number;\n  dx: number;\n  dy: number;\n  dStartX: number;\n  dStartY: number;\n  isDown: boolean; // 是否已按下\n};\n\nfunction useMousePoint() {\n  const startMousePoint: MousePoint = {\n    x: 0,\n    y: 0,\n    dx: 0,\n    dy: 0,\n    dStartX: 0,\n    dStartY: 0,\n    isDown: false\n  };\n\n  const currentMousePoint: MousePoint = {\n    x: 0,\n    y: 0,\n    dx: 0,\n    dy: 0,\n    dStartX: 0,\n    dStartY: 0,\n    isDown: false\n  };\n\n  return {\n    mousePoint: currentMousePoint,\n\n    setStartMousePoint: function (\n      p: { x: number; y: number },\n      isDown?: boolean\n    ) {\n      startMousePoint.x = p.x;\n      startMousePoint.y = p.y;\n      startMousePoint.isDown = typeof isDown == \"boolean\" ? isDown : false;\n      this.setCurrentMousePoint(p, isDown);\n    },\n\n    setCurrentMousePoint: (p: { x: number; y: number }, isDown?: boolean) => {\n      const prevX = currentMousePoint.x;\n      const prevY = currentMousePoint.y;\n      currentMousePoint.x = p.x;\n      currentMousePoint.y = p.y;\n      currentMousePoint.dx = currentMousePoint.x - prevX;\n      currentMousePoint.dy = currentMousePoint.y - prevY;\n      currentMousePoint.dStartX = currentMousePoint.x - startMousePoint.x;\n      currentMousePoint.dStartY = currentMousePoint.y - startMousePoint.y;\n      currentMousePoint.isDown = typeof isDown == \"boolean\" ? isDown : false;\n    }\n  };\n}\n\nexport interface ElementEventBusListeners extends EventBusListeners {\n  mouseDown(e: MouseEvent): void;\n  mouseUp(e: MouseEvent): void;\n  mouseMove(e: MouseEvent): void;\n  mouseOver(e: MouseEvent): void;\n  mouseOut(e: MouseEvent): void;\n  mouseEnter(e: MouseEvent): void;\n  mouseLeave(e: MouseEvent): void;\n  mouseClick(e: MouseEvent): void;\n  mouseDoubleClick(e: MouseEvent): void;\n  mouseWheel(e: WheelEvent): void;\n  mouseContextMenu(e: MouseEvent): void;\n\n  touchStart(e: TouchEvent): void;\n  touchEnd(e: TouchEvent): void;\n  touchCancel(e: TouchEvent): void;\n  touchMove(e: TouchEvent): void;\n\n  pointerDown(e: PointerEvent): void;\n  pointerUp(e: PointerEvent): void;\n  pointerCancel(e: PointerEvent): void;\n  pointerMove(e: PointerEvent): void;\n\n  /// https://hammerjs.github.io/\n  // Pan : Recognized when the pointer is down and moved in the allowed direction.\n  pan(e: HammerInput): void;\n  panStart(e: HammerInput): void;\n  panMove(e: HammerInput): void;\n  panEnd(e: HammerInput): void;\n  panCancel(e: HammerInput): void;\n  panLeft(e: HammerInput): void;\n  panRight(e: HammerInput): void;\n  panUp(e: HammerInput): void;\n  panDown(e: HammerInput): void;\n\n  // 缩放 Pinch : Recognized when two or more pointers are moving toward (zoom-in) or away from each other (zoom-out).\n  pinch(e: HammerInput): void;\n  pinchin(e: HammerInput): void;\n  pinchout(e: HammerInput): void;\n\n  // 长按 Press : Recognized when the pointer is down for x ms without any movement.\n  press(e: HammerInput): void;\n\n  // 旋转 Rotate : Recognized when two or more pointer are moving in a circular motion.\n  rotate(e: HammerInput): void;\n\n  // Swipe : Recognized when the pointer is moving fast (velocity), with enough distance in the allowed direction.\n  swipe(e: HammerInput): void;\n  swipeLeft(e: HammerInput): void;\n  swipeRight(e: HammerInput): void;\n  swipeUp(e: HammerInput): void;\n  swipeDown(e: HammerInput): void;\n\n  // Tap : Recognized when the pointer is doing a small tap/click.\n  tap(e: HammerInput): void;\n\n  // 在 el 之外点击\n  tapOutSide(e: Event): void;\n\n  transitionstart(e: TransitionEvent): void;\n  transitionend(e: TransitionEvent): void;\n  animationstart(e: AnimationEvent): void;\n  animationend(e: AnimationEvent): void;\n\n  resize: (rect: DOMRect) => void;\n}\n\nexport type ElementEventBus = EventBus<ElementEventBusListeners>;\n\nexport type ElementEventBusController = ReturnType<typeof useElementEventBus>;\n\nexport function useElementEventBus(el: HTMLElement = document.documentElement) {\n  const eb = new EventBus<ElementEventBusListeners>();\n  const hammer = new Hammer(el);\n  let removes: (() => void)[] = [];\n\n  const ump = useMousePoint();\n  const mousePoint = ump.mousePoint;\n\n  const mouseDown = (e: MouseEvent) => {\n    // 影响性能\n    // el.style.userSelect = \"none\"; // if there's text\n    eb.emit(\"mouseDown\", e);\n  };\n  const mouseUp = (e: MouseEvent) => {\n    // 影响性能\n    // el.style.userSelect = \"\";\n    eb.emit(\"mouseUp\", e);\n  };\n  const mouseMove = (e: MouseEvent) => {\n    if (!mousePoint.isDown) {\n      ump.setCurrentMousePoint(getMousePositionInElement(e, el));\n    }\n    eb.emit(\"mouseMove\", e);\n  };\n  /// 如果触发的元素内部有其他的元素的时候当鼠标移上的时候会反复的触发 mouseover 和 mouseout 事件\n  /// 因为内部元素在鼠标移上的时候会向它的父对象派发事件，所以外面元素相当于也触发了mouseover 事件\n  const mouseOver = (e: MouseEvent) => {\n    eb.emit(\"mouseOver\", e);\n  };\n  const mouseOut = (e: MouseEvent) => {\n    eb.emit(\"mouseOut\", e);\n  };\n  const mouseEnter = (e: MouseEvent) => {\n    eb.emit(\"mouseEnter\", e);\n  };\n  const mouseLeave = (e: MouseEvent) => {\n    eb.emit(\"mouseLeave\", e);\n  };\n  const mouseClick = (e: MouseEvent) => {\n    eb.emit(\"mouseClick\", e);\n  };\n  const mouseDoubleClick = (e: MouseEvent) => {\n    eb.emit(\"mouseDoubleClick\", e);\n  };\n  const mouseWheel = (e: WheelEvent) => {\n    // const delta = e.deltaY || -e.wheelDelta || e.detail;\n    eb.emit(\"mouseWheel\", e);\n  };\n  const mouseContextMenu = (e: MouseEvent) => {\n    eb.emit(\"mouseContextMenu\", e);\n  };\n\n  const touchStart = (e: TouchEvent) => {\n    // const touch = e.changedTouches[0]; // first touch\n    eb.emit(\"touchStart\", e);\n  };\n  const touchEnd = (e: TouchEvent) => {\n    // const touch = e.changedTouches[0]; // first touch\n    eb.emit(\"touchEnd\", e);\n  };\n  const touchCancel = (e: TouchEvent) => {\n    // const touch = e.changedTouches[0]; // first touch\n    eb.emit(\"touchCancel\", e);\n  };\n  const touchMove = (e: TouchEvent) => {\n    // e.preventDefault(); // prevent scroll\n    const touch = e.changedTouches[0]; // first touch\n    if (!mousePoint.isDown) {\n      ump.setCurrentMousePoint(getMousePositionInElement(touch, el));\n    }\n    eb.emit(\"touchMove\", e);\n  };\n\n  const pointerDown = (e: PointerEvent) => {\n    // el.setPointerCapture(e.pointerId); // 捕获后续 pointermove / pointerup\n    eb.emit(\"pointerDown\", e);\n  };\n  const pointerUp = (e: PointerEvent) => {\n    // el.releasePointerCapture(e.pointerId);\n    eb.emit(\"pointerUp\", e);\n  };\n  const pointerCancel = (e: PointerEvent) => {\n    // el.releasePointerCapture(e.pointerId);\n    eb.emit(\"pointerCancel\", e);\n  };\n  const pointerMove = (e: PointerEvent) => {\n    eb.emit(\"pointerMove\", e);\n  };\n\n  const pan = (e: HammerInput) => {\n    eb.emit(\"pan\", e);\n  };\n  const panStart = (e: HammerInput) => {\n    eb.emit(\"panStart\", e);\n  };\n  const panMove = (e: HammerInput) => {\n    eb.emit(\"panMove\", e);\n  };\n  const panEnd = (e: HammerInput) => {\n    eb.emit(\"panEnd\", e);\n  };\n  const panCancel = (e: HammerInput) => {\n    eb.emit(\"panCancel\", e);\n  };\n  const panLeft = (e: HammerInput) => {\n    eb.emit(\"panLeft\", e);\n  };\n  const panRight = (e: HammerInput) => {\n    eb.emit(\"panRight\", e);\n  };\n  const panUp = (e: HammerInput) => {\n    eb.emit(\"panUp\", e);\n  };\n  const panDown = (e: HammerInput) => {\n    eb.emit(\"panDown\", e);\n  };\n\n  const pinch = (e: HammerInput) => {\n    eb.emit(\"pinch\", e);\n  };\n  const pinchin = (e: HammerInput) => {\n    eb.emit(\"pinchin\", e);\n  };\n  const pinchout = (e: HammerInput) => {\n    eb.emit(\"pinchout\", e);\n  };\n\n  const press = (e: HammerInput) => {\n    eb.emit(\"press\", e);\n  };\n\n  const rotate = (e: HammerInput) => {\n    eb.emit(\"rotate\", e);\n  };\n\n  const swipe = (e: HammerInput) => {\n    eb.emit(\"swipe\", e);\n  };\n  const swipeLeft = (e: HammerInput) => {\n    eb.emit(\"swipeLeft\", e);\n  };\n  const swipeRight = (e: HammerInput) => {\n    eb.emit(\"swipeRight\", e);\n  };\n  const swipeUp = (e: HammerInput) => {\n    eb.emit(\"swipeUp\", e);\n  };\n  const swipeDown = (e: HammerInput) => {\n    eb.emit(\"swipeDown\", e);\n  };\n\n  const tap = (e: HammerInput) => {\n    eb.emit(\"tap\", e);\n  };\n\n  const tapOutSide = (e: Event) => {\n    if (!e.target || el == e.target || el.contains(e.target as Node)) {\n      return;\n    }\n    eb.emit(\"tapOutSide\", e);\n  };\n\n  const transitionstart = (e: TransitionEvent) => {\n    eb.emit(\"transitionstart\", e);\n  };\n  const transitionend = (e: TransitionEvent) => {\n    eb.emit(\"transitionend\", e);\n  };\n  const animationstart = (e: AnimationEvent) => {\n    eb.emit(\"animationstart\", e);\n  };\n  const animationend = (e: AnimationEvent) => {\n    eb.emit(\"animationend\", e);\n  };\n\n  let _rect = {\n    ...el.getBoundingClientRect(),\n    width: el.offsetWidth,\n    height: el.offsetHeight\n  };\n\n  return {\n    el,\n    get rect() {\n      return _rect;\n    },\n    mousePoint,\n    eb,\n    start: async function () {\n      removes.push(useEventListener(el, \"mousedown\", mouseDown));\n      removes.push(useEventListener(el, \"mouseup\", mouseUp));\n      removes.push(useEventListener(el, \"mousemove\", mouseMove));\n      removes.push(useEventListener(el, \"mouseover\", mouseOver));\n      removes.push(useEventListener(el, \"mouseout\", mouseOut));\n      removes.push(useEventListener(el, \"mouseenter\", mouseEnter));\n      removes.push(useEventListener(el, \"mouseleave\", mouseLeave));\n      removes.push(useEventListener(el, \"click\", mouseClick));\n      removes.push(useEventListener(el, \"dblclick\", mouseDoubleClick));\n      removes.push(\n        useEventListener(\n          el,\n          \"onwheel\" in document.createElement(\"div\")\n            ? \"wheel\" // modern browsers\n            : document.onmousewheel !== undefined\n            ? \"mousewheel\" // Webkit and IE\n            : \"DOMMouseScroll\", // older Firefox\n          mouseWheel\n        )\n      );\n      removes.push(useEventListener(el, \"contextmenu\", mouseContextMenu));\n\n      removes.push(useEventListener(el, \"touchstart\", touchStart));\n      removes.push(useEventListener(el, \"touchend\", touchEnd));\n      removes.push(useEventListener(el, \"touchcancel\", touchCancel));\n      removes.push(useEventListener(el, \"touchmove\", touchMove));\n\n      removes.push(useEventListener(el, \"pointerdown\", pointerDown));\n      removes.push(useEventListener(el, \"pointerup\", pointerUp));\n      removes.push(useEventListener(el, \"pointercancel\", pointerCancel));\n      removes.push(useEventListener(el, \"pointermove\", pointerMove));\n\n      hammer.on(\"pan\", pan);\n      hammer.on(\"panstart\", panStart);\n      hammer.on(\"panmove\", panMove);\n      hammer.on(\"panend\", panEnd);\n      hammer.on(\"pancancel\", panCancel);\n      hammer.on(\"panleft\", panLeft);\n      hammer.on(\"panright\", panRight);\n      hammer.on(\"panup\", panUp);\n      hammer.on(\"pandown\", panDown);\n\n      hammer.on(\"pinch\", pinch);\n      hammer.on(\"pinchin\", pinchin);\n      hammer.on(\"pinchout\", pinchout);\n\n      hammer.on(\"press\", press);\n\n      hammer.on(\"rotate\", rotate);\n\n      hammer.on(\"swipe\", swipe);\n      hammer.on(\"swipeleft\", swipeLeft);\n      hammer.on(\"swiperight\", swipeRight);\n      hammer.on(\"swipeup\", swipeUp);\n      hammer.on(\"swipedown\", swipeDown);\n\n      hammer.on(\"tap\", tap);\n\n      // tapOutSide\n      removes.push(useEventListener(document, \"pointerdown\", tapOutSide));\n      // if (isSupportTouch()) {\n      //   removes.push(useEventListener(document, \"touchstart\", tapOutSide));\n      // } else {\n      //   removes.push(useEventListener(document, \"mousedown\", tapOutSide));\n      // }\n\n      // transition + animation\n      removes.push(useEventListener(el, \"transitionstart\", transitionstart));\n      removes.push(useEventListener(el, \"transitionend\", transitionend));\n      removes.push(useEventListener(el, \"animationstart\", animationstart));\n      removes.push(useEventListener(el, \"animationend\", animationend));\n\n      // resize\n      const end = await useResize(el, (rect) => {\n        _rect = rect;\n        eb.emit(\"resize\", rect);\n      });\n      removes.push(end);\n\n      // mousePoint 鼠标相对el的位置\n      removes.push(\n        usePressDownMove(this, {\n          start: (e) => {\n            ump.setStartMousePoint(getMousePositionInElement(e, el), true);\n          },\n          move: (e) => {\n            ump.setCurrentMousePoint(getMousePositionInElement(e, el));\n          },\n          end: (e) => {\n            ump.setCurrentMousePoint(getMousePositionInElement(e, el), false);\n          }\n        })\n      );\n    },\n    end: () => {\n      eb.removeAllListeners();\n\n      removes.forEach((r) => r());\n      removes = [];\n\n      hammer.off(\"pan\", pan);\n      hammer.off(\"panstart\", panStart);\n      hammer.off(\"panmove\", panMove);\n      hammer.off(\"panend\", panEnd);\n      hammer.off(\"pancancel\", panCancel);\n      hammer.off(\"panleft\", panLeft);\n      hammer.off(\"panright\", panRight);\n      hammer.off(\"panup\", panUp);\n      hammer.off(\"pandown\", panDown);\n\n      hammer.off(\"pinch\", pinch);\n      hammer.off(\"pinchin\", pinchin);\n      hammer.off(\"pinchout\", pinchout);\n\n      hammer.off(\"press\", press);\n\n      hammer.off(\"rotate\", rotate);\n\n      hammer.off(\"swipe\", swipe);\n      hammer.off(\"swipeleft\", swipeLeft);\n      hammer.off(\"swiperight\", swipeRight);\n      hammer.off(\"swipeup\", swipeUp);\n      hammer.off(\"swipedown\", swipeDown);\n\n      hammer.off(\"tap\", tap);\n    }\n  };\n}\n\ntype Options = {\n  start?: (e: MousePointEvent) => void;\n  move?: (e: MousePointEvent) => void;\n  end?: (e: MousePointEvent) => void;\n};\n\nexport function usePressDownMove(\n  controller: ElementEventBusController,\n  options?: Options\n): () => void {\n  return usePressDownMoveWithPointer(controller, options);\n  // if (isSupportTouch()) {\n  //   return usePressDownMoveWithTouch(controller, options);\n  // } else {\n  //   return usePressDownMoveWithMouse(controller, options);\n  // }\n}\n\nexport function usePressDownMoveWithPointer(\n  controller: ElementEventBusController,\n  options?: Options\n): () => void {\n  const eb = controller.eb;\n\n  const start = (e: PointerEvent) => {\n    // e.preventDefault();\n    // e.stopPropagation();\n    eb.on(\"pointerMove\", move);\n    eb.on(\"pointerUp\", end);\n    eb.on(\"pointerCancel\", end);\n    options?.start?.(e);\n  };\n\n  const end = (e: PointerEvent) => {\n    // e.preventDefault();\n    // e.stopPropagation();\n    eb.off(\"pointerMove\", move);\n    eb.off(\"pointerUp\", end);\n    eb.off(\"pointerCancel\", end);\n    options?.end?.(e);\n  };\n\n  const move = (e: PointerEvent) => {\n    // e.preventDefault();\n    // e.stopPropagation();\n    options?.move?.(e);\n  };\n\n  eb.on(\"pointerDown\", start);\n\n  return () => eb.off(\"pointerDown\", start);\n}\n\nexport function usePressDownMoveWithMouse(\n  controller: ElementEventBusController,\n  options?: Options\n): () => void {\n  const eb = controller.eb;\n\n  const start = (e: MouseEvent) => {\n    // e.preventDefault();\n    // e.stopPropagation();\n    document.addEventListener(\"mousemove\", move, false);\n    document.addEventListener(\"mouseup\", end, false);\n    options?.start?.(e);\n  };\n\n  const end = (e: MouseEvent) => {\n    // e.preventDefault();\n    // e.stopPropagation();\n    document.removeEventListener(\"mousemove\", move, false);\n    document.removeEventListener(\"mouseup\", end, false);\n    options?.end?.(e);\n  };\n\n  const move = (e: MouseEvent) => {\n    // e.preventDefault();\n    // e.stopPropagation();\n    options?.move?.(e);\n  };\n\n  eb.on(\"mouseDown\", start);\n\n  return () => eb.off(\"mouseDown\", start);\n}\n\nexport function usePressDownMoveWithTouch(\n  controller: ElementEventBusController,\n  options?: Options\n): () => void {\n  const eb = controller.eb;\n\n  const start = (e: TouchEvent) => {\n    // e.preventDefault();\n    // e.stopPropagation();\n    eb.on(\"touchMove\", move);\n    eb.on(\"touchEnd\", end);\n    eb.on(\"touchCancel\", end);\n    const touch = e.changedTouches[0]; // first touch\n    options?.start?.(touch);\n  };\n\n  const end = (e: TouchEvent) => {\n    // e.preventDefault();\n    // e.stopPropagation();\n    eb.off(\"touchMove\", move);\n    eb.off(\"touchEnd\", end);\n    eb.off(\"touchCancel\", end);\n    const touch = e.changedTouches[0]; // first touch\n    options?.end?.(touch);\n  };\n\n  const move = (e: TouchEvent) => {\n    // e.preventDefault();\n    // e.stopPropagation();\n    const touch = e.changedTouches[0]; // first touch\n    options?.move?.(touch);\n  };\n\n  eb.on(\"touchStart\", start);\n\n  return () => eb.off(\"touchStart\", start);\n}\n","import { YZCanvasContext } from \"../canvas\";\nimport { type SVGParsedPathData } from \"../svg\";\nimport { angle } from \"../../../math\";\nimport { maxDotNumber } from \"@zyzgroup/core-common\";\n\nexport type LOptions = {\n  x?: number;\n  y?: number;\n  toX?: number;\n  toY?: number;\n};\n\n// Line 基类，使用绝对值\nexport class L {\n  x: number;\n  y: number;\n  toX: number;\n  toY: number;\n\n  constructor(options?: LOptions) {\n    this.x = maxDotNumber(options?.x || 0, 2);\n    this.y = maxDotNumber(options?.y || 0, 2);\n    this.toX = maxDotNumber(options?.toX || 0, 2);\n    this.toY = maxDotNumber(options?.toY || 0, 2);\n  }\n\n  // 使用绝对值!\n  public toSVGPathData(): SVGParsedPathData[] {\n    return [[\"L\", this.toX, this.toY]];\n  }\n\n  // 使用绝对值!\n  public toCanvasContext(ctx: YZCanvasContext) {\n    ctx.lineTo(this.toX, this.toY);\n  }\n\n  public getBoundingClientRect(e = 2) {\n    const lineAngle = angle(this.x, this.y, this.toX, this.toY);\n    if (lineAngle === 0) {\n      const minX = Math.min(this.x, this.toX);\n      const minY = Math.min(this.y, this.toY);\n      const maxX = Math.max(this.x, this.toX);\n      const maxY = Math.max(this.y, this.toY);\n      return {\n        x: minX,\n        y: minY,\n        width: maxX - minX,\n        height: maxY - minY\n      };\n    } else {\n      const sin = Math.sin(lineAngle);\n      const cos = Math.cos(lineAngle);\n      const x1r = cos * this.x - sin * this.y;\n      const x2r = cos * this.toX - sin * this.toY;\n      const y1r = cos * this.y + sin * this.x;\n      const y2r = cos * this.toY + sin * this.toX;\n      return {\n        x: maxDotNumber(Math.min(x1r, x2r), e),\n        y: maxDotNumber(Math.min(y1r, y2r), e),\n        width: maxDotNumber(Math.max(x1r, x2r) - Math.min(x1r, x2r), e),\n        height: maxDotNumber(Math.max(y1r, y2r) - Math.min(y1r, y2r), e)\n      };\n    }\n  }\n\n  // t (0.0 to 1.0) : The fraction of the overall duration of the path\n  public interpolate(t: number): { x: number; y: number } {\n    return {\n      x: this.x + t * (this.toX - this.x),\n      y: this.y + t * (this.toY - this.y)\n    };\n  }\n\n  public intersection(line: L): { x: number; y: number } | null {\n    const x1 = this.x;\n    const y1 = this.y;\n    const x4 = line.toX;\n    const y4 = line.toY;\n    const dx1 = this.toX - x1;\n    const dx2 = line.x - x4;\n    if (!dx1 && !dx2) {\n      return null;\n    }\n    const m1 = (this.toY - y1) / dx1;\n    const m2 = (line.y - y4) / dx2;\n    if (!dx1) {\n      // infinity\n      return { x: x1, y: m2 * (x1 - x4) + y4 };\n    } else if (!dx2) {\n      // infinity\n      return { x: x4, y: m1 * (x4 - x1) + y1 };\n    }\n    const xInt = (-m2 * x4 + y4 + m1 * x1 - y1) / (m1 - m2);\n    const yInt = m1 * (xInt - x1) + y1;\n    if (isNaN(xInt) || isNaN(yInt)) {\n      return null;\n    }\n    return { x: xInt, y: yInt };\n  }\n}\n\nexport default L;\n","import { maxDotNumber } from \"@zyzgroup/core-common\";\nimport { YZCanvasContext } from \"../canvas\";\nimport { type SVGParsedPathData } from \"../svg\";\nimport { L, LOptions } from \"./L\";\n\nexport type ArcOptions = {\n  rx: number; // x方向的半径\n  ry: number; // y方向的半径\n  xAxisRotate?: number; // phi 绕着x轴旋转的角度\n  largeArcFlag?: number; // fa 0小弧 1大弧\n  sweepFlag?: number; // fs 0逆时针方向 1顺时针方向\n  toX: number;\n  toY: number;\n} & LOptions;\n\nexport class Arc extends L {\n  public rx: number;\n  public ry: number;\n  public xAxisRotate: number;\n  public largeArcFlag: number;\n  public sweepFlag: number;\n\n  constructor(options: ArcOptions) {\n    super(options);\n    this.rx = maxDotNumber(options.rx, 2);\n    this.ry = maxDotNumber(options.ry, 2);\n    this.xAxisRotate =\n      typeof options?.xAxisRotate == \"number\" ? options?.xAxisRotate : 0;\n    this.largeArcFlag =\n      typeof options?.largeArcFlag == \"number\" ? options?.largeArcFlag : 1;\n    this.sweepFlag =\n      typeof options?.sweepFlag == \"number\" ? options?.sweepFlag : 1;\n  }\n\n  /// A rx,ry xAxisRotate LargeArcFlag,SweepFlag x,y\n  public toSVGPathData(): SVGParsedPathData[] {\n    return [\n      [\n        \"A\",\n        this.rx,\n        this.ry,\n        this.xAxisRotate,\n        this.largeArcFlag,\n        this.sweepFlag,\n        this.toX,\n        this.toY\n      ]\n    ];\n  }\n\n  public toCanvasContext(ctx: YZCanvasContext): void {\n    const [cx, cy, rx, ry, xAxisRotate, startAngle, endAngle] = this.convert(\n      this.x,\n      this.y,\n      this.toX,\n      this.toY,\n      this.rx,\n      this.ry,\n      this.xAxisRotate,\n      this.largeArcFlag,\n      this.sweepFlag\n    );\n    ctx.ellipse(\n      cx,\n      cy,\n      rx,\n      ry,\n      xAxisRotate,\n      startAngle,\n      endAngle,\n      !this.sweepFlag\n    );\n    // ctx.scale(this.rx, this.ry);\n    // ctx.arc(0, 0, 1, startAngle, endAngle, !this.sweepFlag);\n  }\n\n  private convert(\n    x1: number,\n    y1: number,\n    x2: number,\n    y2: number,\n    rx: number,\n    ry: number,\n    phi: number,\n    fa: number,\n    fs: number\n  ) {\n    const p = (phi / 180) * Math.PI;\n    const x_m = (x1 - x2) / 2;\n    const y_m = (y1 - y2) / 2;\n\n    const x1_d = Math.cos(p) * x_m + Math.sin(p) * y_m;\n    const y1_d = -Math.sin(p) * x_m + Math.cos(p) * y_m;\n\n    const radius_check_value =\n      (x1_d * x1_d) / (rx * rx) + (y1_d * y1_d) / (ry * ry);\n    if (radius_check_value > 1) {\n      // throw \"Radius is too small to build an arc!\";\n\n      // Check out radius correction in the W3C document\n      // https://www.w3.org/TR/SVG11/implnote.html#ArcCorrectionOutOfRangeRadii\n      const r_sq = Math.sqrt(radius_check_value);\n      rx = r_sq * rx;\n      ry = r_sq * ry;\n\n      throw new Error(\n        `Radii are too small to build an arc. Correcting them to ${rx}/${ry}.`\n      );\n    }\n\n    const sq = Math.sqrt(\n      (rx * rx * ry * ry - rx * rx * y1_d * y1_d - ry * ry * x1_d * x1_d) /\n        (rx * rx * y1_d * y1_d + ry * ry * x1_d * x1_d)\n    );\n\n    const s = fa != fs ? 1 : -1;\n    const cx_d = (s * sq * rx * y1_d) / ry;\n    const cy_d = (s * sq * -ry * x1_d) / rx;\n\n    const x_m_d = (x1 + x2) / 2;\n    const y_m_d = (y1 + y2) / 2;\n    const cx = Math.cos(p) * cx_d - Math.sin(p) * cy_d + x_m_d;\n    const cy = Math.sin(p) * cx_d + Math.cos(p) * cy_d + y_m_d;\n\n    const vectorAngle = (ux: number, uy: number, vx: number, vy: number) =>\n      (ux * vy >= uy * vx ? 1 : -1) *\n      Math.acos(\n        (ux * vx + uy * vy) /\n          (Math.sqrt(ux * ux + uy * uy) * Math.sqrt(vx * vx + vy * vy))\n      );\n    const theta_1 = vectorAngle(1, 0, x1 - cx, y1 - cy) - p;\n    const delta_theta = vectorAngle(x1 - cx, y1 - cy, x2 - cx, y2 - cy);\n\n    return [cx, cy, rx, ry, p, theta_1, theta_1 + delta_theta];\n  }\n}\n\nexport default Arc;\n","import { maxDotNumber } from \"@zyzgroup/core-common\";\nimport { YZCanvasContext } from \"../canvas\";\nimport { type SVGParsedPathData } from \"../svg\";\nimport { L, LOptions } from \"./L\";\n\nexport type QuadraticBezierOptions = {\n  cx: number;\n  cy: number;\n  toX?: number;\n  toY?: number;\n  isLineThrough?: boolean;\n} & LOptions;\n\nexport class QuadraticBezier extends L {\n  public cx: number;\n  public cy: number;\n  public isLineThrough: boolean;\n\n  constructor(options: QuadraticBezierOptions) {\n    super(options);\n    this.cx = maxDotNumber(options.cx, 2);\n    this.cy = maxDotNumber(options.cy, 2);\n    this.isLineThrough =\n      typeof options.isLineThrough == \"boolean\" ? options.isLineThrough : false;\n  }\n\n  /// Q cx,cy x,y\n  /// T x,y\n  public toSVGPathData(): SVGParsedPathData[] {\n    if (this.isLineThrough) {\n      const c1x = this.cx * 2 - (this.x + this.toX) / 2;\n      const c1y = this.cy * 2 - (this.y + this.toY) / 2;\n      return [[\"Q\", c1x, c1y, this.toX, this.toY]];\n    } else {\n      return [[\"Q\", this.cx, this.cy, this.toX, this.toY]];\n    }\n  }\n\n  public toCanvasContext(ctx: YZCanvasContext) {\n    if (this.isLineThrough) {\n      const c1x = this.cx * 2 - (this.x + this.toX) / 2;\n      const c1y = this.cy * 2 - (this.y + this.toY) / 2;\n      ctx.quadraticCurveTo(c1x, c1y, this.toX, this.toY);\n    } else {\n      ctx.quadraticCurveTo(this.cx, this.cy, this.toX, this.toY);\n    }\n  }\n\n  public getBoundingClientRect(e = 2) {\n    const xArr = [this.x, this.toX];\n    const yArr = [this.y, this.toY];\n    let a, b, c, t;\n    for (let i = 0; i < 2; ++i) {\n      a =\n        i == 0\n          ? this.x - 2 * this.cx + this.toX\n          : this.y - 2 * this.cy + this.toY;\n      b = i == 0 ? -2 * this.x + 2 * this.cx : -2 * this.y + 2 * this.cy;\n      c = i == 0 ? this.x : this.y;\n      if (Math.abs(a) > 1e-12) {\n        t = -b / (2 * a);\n        if (0 < t && t < 1) {\n          [xArr, yArr][i].push(a * t * t + b * t + c);\n        }\n      }\n    }\n    const min = { x: Math.min(0, ...xArr), y: Math.min(0, ...yArr) };\n    const max = { x: Math.max(0, ...xArr), y: Math.max(0, ...yArr) };\n    return {\n      x: maxDotNumber(min.x, e),\n      y: maxDotNumber(min.y, e),\n      width: maxDotNumber(max.x - min.x, e),\n      height: maxDotNumber(max.y - min.y, e)\n    };\n  }\n\n  // t (0.0 to 1.0) : The fraction of the overall duration of the path\n  public interpolate(t: number): { x: number; y: number } {\n    return {\n      x:\n        (1 - t) * (1 - t) * this.x +\n        2 * (1 - t) * t * this.cx +\n        t * t * this.toX,\n      y:\n        (1 - t) * (1 - t) * this.y +\n        2 * (1 - t) * t * this.cy +\n        t * t * this.toY\n    };\n  }\n}\n\nexport default QuadraticBezier;\n","import { maxDotNumber } from \"@zyzgroup/core-common\";\nimport { YZCanvasContext } from \"../canvas\";\nimport { type SVGParsedPathData } from \"../svg\";\nimport { L, LOptions } from \"./L\";\n\nexport type CubicBezierOptions = {\n  c1x: number;\n  c1y: number;\n  c2x: number;\n  c2y: number;\n  toX?: number;\n  toY?: number;\n} & LOptions;\n\nexport class CubicBezier extends L {\n  public c1x: number;\n  public c1y: number;\n  public c2x: number;\n  public c2y: number;\n\n  constructor(options: CubicBezierOptions) {\n    super(options);\n    this.c1x = maxDotNumber(options.c1x, 2);\n    this.c1y = maxDotNumber(options.c1y, 2);\n    this.c2x = maxDotNumber(options.c2x, 2);\n    this.c2y = maxDotNumber(options.c2y, 2);\n  }\n\n  public clone(): CubicBezier {\n    return new CubicBezier({\n      x: this.x,\n      y: this.y,\n      c1x: this.c1x,\n      c1y: this.c1y,\n      c2x: this.c2x,\n      c2y: this.c2y,\n      toX: this.toX,\n      toY: this.toY\n    });\n  }\n\n  /// C c1x,c1y c2x,c2y x,y\n  /// S c2x,c2y x,y\n  public toSVGPathData(): SVGParsedPathData[] {\n    return [[\"C\", this.c1x, this.c1y, this.c2x, this.c2y, this.toX, this.toY]];\n  }\n\n  public toCanvasContext(ctx: YZCanvasContext) {\n    ctx.bezierCurveTo(\n      this.c1x,\n      this.c1y,\n      this.c2x,\n      this.c2y,\n      this.toX,\n      this.toY\n    );\n  }\n\n  public getBoundingClientRect(e = 2) {\n    /// 一种方法\n    // const tvalues = [];\n    // const bounds: number[][] = [[], []];\n    // let a, b, c, t, t1, t2, b2ac, sqrtb2ac;\n    // for (let i = 0; i < 2; ++i) {\n    //   if (i === 0) {\n    //     b = 6 * this.x - 12 * this.c1x + 6 * this.c2x;\n    //     a = -3 * this.x + 9 * this.c1x - 9 * this.c2x + 3 * this.toX;\n    //     c = 3 * this.c1x - 3 * this.x;\n    //   } else {\n    //     b = 6 * this.y - 12 * this.c1y + 6 * this.c2y;\n    //     a = -3 * this.y + 9 * this.c1y - 9 * this.c2y + 3 * this.toY;\n    //     c = 3 * this.c1y - 3 * this.y;\n    //   }\n    //   if (Math.abs(a) < 1e-12) {\n    //     if (Math.abs(b) < 1e-12) {\n    //       continue;\n    //     }\n    //     t = -c / b;\n    //     if (t > 0 && t < 1) {\n    //       tvalues.push(t);\n    //     }\n    //     continue;\n    //   }\n    //   b2ac = b * b - 4 * c * a;\n    //   if (b2ac < 0) {\n    //     continue;\n    //   }\n    //   sqrtb2ac = Math.sqrt(b2ac);\n    //   t1 = (-b + sqrtb2ac) / (2 * a);\n    //   if (t1 > 0 && t1 < 1) {\n    //     tvalues.push(t1);\n    //   }\n    //   t2 = (-b - sqrtb2ac) / (2 * a);\n    //   if (t2 > 0 && t2 < 1) {\n    //     tvalues.push(t2);\n    //   }\n    // }\n    // let j = tvalues.length;\n    // let mt;\n    // const jlen = j;\n    // while (j--) {\n    //   t = tvalues[j];\n    //   mt = 1 - t;\n    //   bounds[0][j] =\n    //     mt * mt * mt * this.x +\n    //     3 * mt * mt * t * this.c1x +\n    //     3 * mt * t * t * this.c2x +\n    //     t * t * t * this.toX;\n    //   bounds[1][j] =\n    //     mt * mt * mt * this.y +\n    //     3 * mt * mt * t * this.c1y +\n    //     3 * mt * t * t * this.c2y +\n    //     t * t * t * this.toY;\n    // }\n    // bounds[0][jlen] = this.x;\n    // bounds[1][jlen] = this.y;\n    // bounds[0][jlen + 1] = this.toX;\n    // bounds[1][jlen + 1] = this.toY;\n    // bounds[0].length = bounds[1].length = jlen + 2;\n    // const min = {\n    //   x: Math.min.apply(0, bounds[0]),\n    //   y: Math.min.apply(0, bounds[1])\n    // };\n    // const max = {\n    //   x: Math.max.apply(0, bounds[0]),\n    //   y: Math.max.apply(0, bounds[1])\n    // };\n    // return {\n    //   x: maxDotNumber(min.x, e),\n    //   y: maxDotNumber(min.y, e),\n    //   width: maxDotNumber(max.x - min.x, e),\n    //   height: maxDotNumber(max.y - min.y, e)\n    // };\n\n    /// 另一种方法\n    let a =\n      this.c2x - 2 * this.c1x + this.x - (this.toX - 2 * this.c2x + this.c1x);\n    let b = 2 * (this.c1x - this.x) - 2 * (this.c2x - this.c1x);\n    let c = this.x - this.c1x;\n    let t1 = (-b + Math.sqrt(b * b - 4 * a * c)) / 2 / a;\n    let t2 = (-b - Math.sqrt(b * b - 4 * a * c)) / 2 / a;\n    const y = [this.y, this.toY];\n    const x = [this.x, this.toX];\n    let dot;\n    const dots = [];\n    Math.abs(t1) > 1e12 && (t1 = 0.5);\n    Math.abs(t2) > 1e12 && (t2 = 0.5);\n    if (t1 >= 0 && t1 <= 1) {\n      dot = this.interpolate(t1);\n      x.push(dot.x);\n      y.push(dot.y);\n      dots.push({ X: dot.x, Y: dot.y });\n    }\n    if (t2 >= 0 && t2 <= 1) {\n      dot = this.interpolate(t2);\n      x.push(dot.x);\n      y.push(dot.y);\n      dots.push({ X: dot.x, Y: dot.y });\n    }\n    a = this.c2y - 2 * this.c1y + this.y - (this.toY - 2 * this.c2y + this.c1y);\n    b = 2 * (this.c1y - this.y) - 2 * (this.c2y - this.c1y);\n    c = this.y - this.c1y;\n    t1 = (-b + Math.sqrt(b * b - 4 * a * c)) / 2 / a;\n    t2 = (-b - Math.sqrt(b * b - 4 * a * c)) / 2 / a;\n    Math.abs(t1) > 1e12 && (t1 = 0.5);\n    Math.abs(t2) > 1e12 && (t2 = 0.5);\n    if (t1 >= 0 && t1 <= 1) {\n      dot = this.interpolate(t1);\n      x.push(dot.x);\n      y.push(dot.y);\n      dots.push({ X: dot.x, Y: dot.y });\n    }\n    if (t2 >= 0 && t2 <= 1) {\n      dot = this.interpolate(t2);\n      x.push(dot.x);\n      y.push(dot.y);\n      dots.push({ X: dot.x, Y: dot.y });\n    }\n    // remove duplicate dots\n    const dots2 = [];\n    const l = dots.length;\n    for (let i = 0; i < l; i++) {\n      for (let j = i + 1; j < l; j++) {\n        if (dots[i].X === dots[j].X && dots[i].Y === dots[j].Y) j = ++i;\n      }\n      dots2.push({ X: dots[i].X, Y: dots[i].Y });\n    }\n    const min = { x: Math.min(...x), y: Math.min(...y) };\n    const max = { x: Math.max(...x), y: Math.max(...y) };\n    return {\n      x: maxDotNumber(min.x, e),\n      y: maxDotNumber(min.y, e),\n      width: maxDotNumber(max.x - min.x, e),\n      height: maxDotNumber(max.y - min.y, e),\n      dots: dots2 // these are the extrema points\n    };\n  }\n\n  static base3(\n    t: number,\n    p1: number,\n    p2: number,\n    p3: number,\n    p4: number\n  ): number {\n    const t1 = -3 * p1 + 9 * p2 - 9 * p3 + 3 * p4;\n    const t2 = t * t1 + 6 * p1 - 12 * p2 + 6 * p3;\n    return t * t2 - 3 * p1 + 3 * p2;\n  }\n\n  /**\n   * Based on snap.svg bezlen() function\n   * like getTotalLength(), approximate a cubic bézier length\n   * https://github.com/adobe-webplatform/Snap.svg/blob/master/dist/snap.svg.js#L5786\n   */\n  static bezlen(\n    x1: number,\n    y1: number,\n    x2: number,\n    y2: number,\n    x3: number,\n    y3: number,\n    x4: number,\n    y4: number,\n    z = 1 /// length: 0 ~ 1\n  ): number {\n    z = Math.max(0, Math.min(z, 1));\n    const z2 = z / 2;\n    const Tvalues = [\n      -0.1252, 0.1252, -0.3678, 0.3678, -0.5873, 0.5873, -0.7699, 0.7699,\n      -0.9041, 0.9041, -0.9816, 0.9816\n    ];\n    const Cvalues = [\n      0.2491, 0.2491, 0.2335, 0.2335, 0.2032, 0.2032, 0.1601, 0.1601, 0.1069,\n      0.1069, 0.0472, 0.0472\n    ];\n    let sum = 0;\n    /// 12 = Tvalues.length = Cvalues.length\n    for (let i = 0; i < 12; i++) {\n      const ct = z2 * Tvalues[i] + z2;\n      const xbase = CubicBezier.base3(ct, x1, x2, x3, x4);\n      const ybase = CubicBezier.base3(ct, y1, y2, y3, y4);\n      sum += Cvalues[i] * Math.sqrt(xbase * xbase + ybase * ybase);\n    }\n    return z2 * sum;\n  }\n\n  // returns length in pixels\n  public length(z = 1): number {\n    return CubicBezier.bezlen(\n      this.x,\n      this.y,\n      this.c1x,\n      this.c1y,\n      this.c2x,\n      this.c2y,\n      this.toX,\n      this.toY,\n      z\n    );\n  }\n\n  // Find dot coordinates on the given cubic bezier curve at the given length\n  public getPointAtSegmentLength(length: number) {\n    const t = this.getTatLen(length);\n    const t1 = 1 - t,\n      t13 = Math.pow(t1, 3),\n      t12 = Math.pow(t1, 2),\n      t2 = t * t,\n      t3 = t2 * t,\n      x =\n        t13 * this.x +\n        t12 * 3 * t * this.c1x +\n        t1 * 3 * t * t * this.c2x +\n        t3 * this.toX,\n      y =\n        t13 * this.y +\n        t12 * 3 * t * this.c1y +\n        t1 * 3 * t * t * this.c2y +\n        t3 * this.toY,\n      mx =\n        this.x +\n        2 * t * (this.c1x - this.x) +\n        t2 * (this.c2x - 2 * this.c1x + this.x),\n      my =\n        this.y +\n        2 * t * (this.c1y - this.y) +\n        t2 * (this.c2y - 2 * this.c1y + this.y),\n      nx =\n        this.c1x +\n        2 * t * (this.c2x - this.c1x) +\n        t2 * (this.toX - 2 * this.c2x + this.c1x),\n      ny =\n        this.c1y +\n        2 * t * (this.c2y - this.c1y) +\n        t2 * (this.toY - 2 * this.c2y + this.c1y),\n      ax = t1 * this.x + t * this.c1x,\n      ay = t1 * this.y + t * this.c1y,\n      cx = t1 * this.c2x + t * this.toX,\n      cy = t1 * this.c2y + t * this.toY,\n      alpha = 90 - (Math.atan2(mx - nx, my - ny) * 180) / Math.PI;\n    // (mx > nx || my < ny) && (alpha += 180);\n    return {\n      x: x, // x coordinate of the point\n      y: y, // y coordinate of the point\n      m: {\n        x: mx, // x coordinate of the left anchor\n        y: my // y coordinate of the left anchor\n      },\n      n: {\n        x: nx, // x coordinate of the right anchor\n        y: ny // y coordinate of the right anchor\n      },\n      start: {\n        x: ax, // x coordinate of the start of the curve\n        y: ay // y coordinate of the start of the curve\n      },\n      end: {\n        x: cx, //  x coordinate of the end of the curve\n        y: cy // y coordinate of the end of the curve\n      },\n      alpha: alpha // degree: angle of the curve derivative at the point\n    };\n  }\n\n  // 将 length 转为 t (0.0 to 1.0)\n  public getTatLen(length: number): number {\n    const x1 = this.x;\n    const y1 = this.y;\n    const x2 = this.c1x;\n    const y2 = this.c1y;\n    const x3 = this.c2x;\n    const y3 = this.c2y;\n    const x4 = this.toX;\n    const y4 = this.toY;\n    if (\n      length < 0 ||\n      CubicBezier.bezlen(x1, y1, x2, y2, x3, y3, x4, y4) < length\n    ) {\n      return 0;\n    }\n    const t = 1;\n    let step = t / 2;\n    let t2 = t - step;\n    let l = CubicBezier.bezlen(x1, y1, x2, y2, x3, y3, x4, y4, t2);\n    while (Math.abs(l - length) > 0.01) {\n      step /= 2;\n      t2 += (l < length ? 1 : -1) * step;\n      l = CubicBezier.bezlen(x1, y1, x2, y2, x3, y3, x4, y4, t2);\n    }\n    return t2;\n  }\n\n  // t (0.0 to 1.0) : The fraction of the overall duration of the path\n  public interpolate(t: number): { x: number; y: number } {\n    return {\n      x:\n        Math.pow(1 - t, 3) * this.x +\n        3 * Math.pow(1 - t, 2) * t * this.c1x +\n        3 * Math.pow(1 - t, 1) * Math.pow(t, 2) * this.c2x +\n        Math.pow(t, 3) * this.toX,\n      y:\n        Math.pow(1 - t, 3) * this.y +\n        3 * Math.pow(1 - t, 2) * t * this.c1y +\n        3 * Math.pow(1 - t, 1) * Math.pow(t, 2) * this.c2y +\n        Math.pow(t, 3) * this.toY\n    };\n  }\n}\n\nexport default CubicBezier;\n","// https://github.com/colinmeinke/svg-arc-to-cubic-bezier\n//\n// Convert an arc to a sequence of cubic bézier curves\n//\n\nconst TAU = Math.PI * 2;\n\n// Calculate an angle between two unit vectors\n//\n// Since we measure angle between radii of circular arcs,\n// we can use simplified math (without length normalization)\n//\nfunction unit_vector_angle(ux: number, uy: number, vx: number, vy: number) {\n  const sign = ux * vy - uy * vx < 0 ? -1 : 1;\n  let dot = ux * vx + uy * vy;\n\n  // Add this to work with arbitrary vectors:\n  // dot /= Math.sqrt(ux * ux + uy * uy) * Math.sqrt(vx * vx + vy * vy);\n\n  // rounding errors, e.g. -1.0000000000000002 can screw up this\n  if (dot > 1.0) {\n    dot = 1.0;\n  }\n  if (dot < -1.0) {\n    dot = -1.0;\n  }\n\n  return sign * Math.acos(dot);\n}\n\n// Convert from endpoint to center parameterization,\n// see http://www.w3.org/TR/SVG11/implnote.html#ArcImplementationNotes\n//\n// Return [cx, cy, theta1, delta_theta]\n//\nfunction get_arc_center(\n  x1: number,\n  y1: number,\n  x2: number,\n  y2: number,\n  fa: number,\n  fs: number,\n  rx: number,\n  ry: number,\n  sin_phi: number,\n  cos_phi: number\n) {\n  // Step 1.\n  //\n  // Moving an ellipse so origin will be the middlepoint between our two\n  // points. After that, rotate it to line up ellipse axes with coordinate\n  // axes.\n  //\n  const x1p = (cos_phi * (x1 - x2)) / 2 + (sin_phi * (y1 - y2)) / 2;\n  const y1p = (-sin_phi * (x1 - x2)) / 2 + (cos_phi * (y1 - y2)) / 2;\n\n  const rx_sq = rx * rx;\n  const ry_sq = ry * ry;\n  const x1p_sq = x1p * x1p;\n  const y1p_sq = y1p * y1p;\n\n  // Step 2.\n  //\n  // Compute coordinates of the centre of this ellipse (cx', cy')\n  // in the new coordinate system.\n  //\n  let radicant = rx_sq * ry_sq - rx_sq * y1p_sq - ry_sq * x1p_sq;\n\n  if (radicant < 0) {\n    // due to rounding errors it might be e.g. -1.3877787807814457e-17\n    radicant = 0;\n  }\n\n  radicant /= rx_sq * y1p_sq + ry_sq * x1p_sq;\n  radicant = Math.sqrt(radicant) * (fa === fs ? -1 : 1);\n\n  const cxp = ((radicant * rx) / ry) * y1p;\n  const cyp = ((radicant * -ry) / rx) * x1p;\n\n  // Step 3.\n  //\n  // Transform back to get centre coordinates (cx, cy) in the original\n  // coordinate system.\n  //\n  const cx = cos_phi * cxp - sin_phi * cyp + (x1 + x2) / 2;\n  const cy = sin_phi * cxp + cos_phi * cyp + (y1 + y2) / 2;\n\n  // Step 4.\n  //\n  // Compute angles (theta1, delta_theta).\n  //\n  const v1x = (x1p - cxp) / rx;\n  const v1y = (y1p - cyp) / ry;\n  const v2x = (-x1p - cxp) / rx;\n  const v2y = (-y1p - cyp) / ry;\n\n  const theta1 = unit_vector_angle(1, 0, v1x, v1y);\n  let delta_theta = unit_vector_angle(v1x, v1y, v2x, v2y);\n\n  if (fs === 0 && delta_theta > 0) {\n    delta_theta -= TAU;\n  }\n  if (fs === 1 && delta_theta < 0) {\n    delta_theta += TAU;\n  }\n\n  return [cx, cy, theta1, delta_theta];\n}\n\n//\n// Approximate one unit arc segment with bézier curves,\n// see http://math.stackexchange.com/questions/873224\n//\nfunction approximate_unit_arc(theta1: number, delta_theta: number) {\n  const alpha = (4 / 3) * Math.tan(delta_theta / 4);\n\n  // // If 90 degree circular arc, use a constant\n  // // as derived from http://spencermortensen.com/articles/bezier-circle\n  // const alpha =\n  //   delta_theta === 1.5707963267948966\n  //     ? 0.551915024494\n  //     : delta_theta === -1.5707963267948966\n  //     ? -0.551915024494\n  //     : (4 / 3) * Math.tan(delta_theta / 4);\n\n  const x1 = Math.cos(theta1);\n  const y1 = Math.sin(theta1);\n  const x2 = Math.cos(theta1 + delta_theta);\n  const y2 = Math.sin(theta1 + delta_theta);\n\n  return [\n    x1,\n    y1,\n    x1 - y1 * alpha,\n    y1 + x1 * alpha,\n    x2 + y2 * alpha,\n    y2 - x2 * alpha,\n    x2,\n    y2\n  ];\n}\n\n// var curves = a2c(\n//   x,\n//   y,\n//   seg[6],x\n//   seg[7],y\n//   seg[4],largeArcFlag\n//   seg[5],sweepFlag\n//   seg[1],rx\n//   seg[2],ry\n//   seg[3],xAxisRotate\n// );\nexport function a2c(\n  x1: number,\n  y1: number,\n  x2: number,\n  y2: number,\n  fa: number,\n  fs: number,\n  rx: number,\n  ry: number,\n  phi: number\n) {\n  const sin_phi = Math.sin((phi * TAU) / 360);\n  const cos_phi = Math.cos((phi * TAU) / 360);\n\n  // Make sure radii are valid\n  //\n  const x1p = (cos_phi * (x1 - x2)) / 2 + (sin_phi * (y1 - y2)) / 2;\n  const y1p = (-sin_phi * (x1 - x2)) / 2 + (cos_phi * (y1 - y2)) / 2;\n\n  if (x1p === 0 && y1p === 0) {\n    // we're asked to draw line to itself\n    return [];\n  }\n\n  if (rx === 0 || ry === 0) {\n    // one of the radii is zero\n    return [];\n  }\n\n  // Compensate out-of-range radii\n  //\n  rx = Math.abs(rx);\n  ry = Math.abs(ry);\n\n  const lambda = (x1p * x1p) / (rx * rx) + (y1p * y1p) / (ry * ry);\n  if (lambda > 1) {\n    rx *= Math.sqrt(lambda);\n    ry *= Math.sqrt(lambda);\n  }\n\n  // Get center parameters (cx, cy, theta1, delta_theta)\n  //\n  const cc = get_arc_center(x1, y1, x2, y2, fa, fs, rx, ry, sin_phi, cos_phi);\n\n  const result = [];\n  let theta1 = cc[2];\n  let delta_theta = cc[3];\n\n  // Split an arc to multiple segments, so each segment\n  // will be less than τ/4 (= 90°)\n  //\n  const segments = Math.max(Math.ceil(Math.abs(delta_theta) / (TAU / 4)), 1);\n\n  // // If 'ang2' == 90.0000000001, then `ratio` will evaluate to\n  // // 1.0000000001. This causes `segments` to be greater than one, which is an\n  // // unecessary split, and adds extra points to the bezier curve. To alleviate\n  // // this issue, we round to 1.0 when the ratio is close to 1.0.\n  // let ratio = Math.abs(delta_theta) / (TAU / 4);\n  // if (Math.abs(1.0 - ratio) < 0.0000001) {\n  //   ratio = 1.0;\n  // }\n  // const segments = Math.max(Math.ceil(ratio), 1);\n\n  delta_theta /= segments;\n\n  for (let i = 0; i < segments; i++) {\n    result.push(approximate_unit_arc(theta1, delta_theta));\n    theta1 += delta_theta;\n  }\n\n  // We have a bezier approximation of a unit circle,\n  // now need to transform back to the original ellipse\n  //\n  return result.map((curve) => {\n    for (let i = 0; i < curve.length; i += 2) {\n      let x = curve[i + 0];\n      let y = curve[i + 1];\n\n      // scale\n      x *= rx;\n      y *= ry;\n\n      // rotate\n      const xp = cos_phi * x - sin_phi * y;\n      const yp = sin_phi * x + cos_phi * y;\n\n      // translate\n      curve[i + 0] = xp + cc[0];\n      curve[i + 1] = yp + cc[1];\n    }\n\n    return curve;\n  });\n}\n\n// for more information of where this math came from visit:\n// http://www.w3.org/TR/SVG11/implnote.html#ArcImplementationNotes\nexport function a2c2(\n  x1: number,\n  y1: number,\n  rx: number,\n  ry: number,\n  angle: number,\n  large_arc_flag: number,\n  sweep_flag: number,\n  x2: number,\n  y2: number,\n  recursive?: number[]\n): number[][] {\n  const _120 = (Math.PI * 120) / 180;\n  const rad = (Math.PI / 180) * (+angle || 0);\n  let res: number[][] = [];\n  let xy;\n  const rotate = function (x: number, y: number, rad: number) {\n    const X = x * Math.cos(rad) - y * Math.sin(rad);\n    const Y = x * Math.sin(rad) + y * Math.cos(rad);\n    return { x: X, y: Y };\n  };\n  let f1: number;\n  let f2: number;\n  let cx: number;\n  let cy: number;\n  if (!recursive) {\n    xy = rotate(x1, y1, -rad);\n    x1 = xy.x;\n    y1 = xy.y;\n    xy = rotate(x2, y2, -rad);\n    x2 = xy.x;\n    y2 = xy.y;\n    const cos = Math.cos((Math.PI / 180) * angle),\n      sin = Math.sin((Math.PI / 180) * angle),\n      x = (x1 - x2) / 2,\n      y = (y1 - y2) / 2;\n    let h = (x * x) / (rx * rx) + (y * y) / (ry * ry);\n    if (h > 1) {\n      h = Math.sqrt(h);\n      rx = h * rx;\n      ry = h * ry;\n    }\n    const rx2 = rx * rx,\n      ry2 = ry * ry,\n      k =\n        (large_arc_flag == sweep_flag ? -1 : 1) *\n        Math.sqrt(\n          Math.abs(\n            (rx2 * ry2 - rx2 * y * y - ry2 * x * x) /\n              (rx2 * y * y + ry2 * x * x)\n          )\n        );\n    cx = (k * rx * y) / ry + (x1 + x2) / 2;\n    cy = (k * -ry * x) / rx + (y1 + y2) / 2;\n    f1 = Math.asin(Number(((y1 - cy) / ry).toFixed(9)));\n    f2 = Math.asin(Number(((y2 - cy) / ry).toFixed(9)));\n\n    f1 = x1 < cx ? Math.PI - f1 : f1;\n    f2 = x2 < cx ? Math.PI - f2 : f2;\n    f1 < 0 && (f1 = Math.PI * 2 + f1);\n    f2 < 0 && (f2 = Math.PI * 2 + f2);\n    if (sweep_flag && f1 > f2) {\n      f1 = f1 - Math.PI * 2;\n    }\n    if (!sweep_flag && f2 > f1) {\n      f2 = f2 - Math.PI * 2;\n    }\n  } else {\n    f1 = recursive[0];\n    f2 = recursive[1];\n    cx = recursive[2];\n    cy = recursive[3];\n  }\n  let df = f2 - f1;\n  if (Math.abs(df) > _120) {\n    const f2old = f2,\n      x2old = x2,\n      y2old = y2;\n    f2 = f1 + _120 * (sweep_flag && f2 > f1 ? 1 : -1);\n    x2 = cx + rx * Math.cos(f2);\n    y2 = cy + ry * Math.sin(f2);\n    res = a2c2(x2, y2, rx, ry, angle, 0, sweep_flag, x2old, y2old, [\n      f2,\n      f2old,\n      cx,\n      cy\n    ]);\n  }\n  df = f2 - f1;\n  const c1 = Math.cos(f1),\n    s1 = Math.sin(f1),\n    c2 = Math.cos(f2),\n    s2 = Math.sin(f2),\n    t = Math.tan(df / 4),\n    hx = (4 / 3) * rx * t,\n    hy = (4 / 3) * ry * t,\n    m1 = [x1, y1],\n    m2 = [x1 + hx * s1, y1 - hy * c1],\n    m3 = [x2 + hx * s2, y2 - hy * c2],\n    m4 = [x2, y2];\n  m2[0] = 2 * m1[0] - m2[0];\n  m2[1] = 2 * m1[1] - m2[1];\n  if (recursive) {\n    return [[...m2, ...m3, ...m4]].concat(res);\n  } else {\n    return [[...m2, ...m3, ...m4]].concat(res).map((r) => {\n      const newres: number[] = [];\n      for (let i = 0, ii = r.length; i < ii; i++) {\n        newres[i] =\n          i % 2 ? rotate(r[i - 1], r[i], rad).y : rotate(r[i], r[i + 1], rad).x;\n      }\n      return newres;\n    });\n  }\n}\n\nexport function q2c(\n  x1: number,\n  y1: number,\n  cx: number,\n  cy: number,\n  x2: number,\n  y2: number\n) {\n  return [\n    x1 / 3 + (2 / 3) * cx,\n    y1 / 3 + (2 / 3) * cy,\n    x2 / 3 + (2 / 3) * cx,\n    y2 / 3 + (2 / 3) * cy,\n    x2,\n    y2\n  ];\n}\n\nexport function l2c(x1: number, y1: number, x2: number, y2: number) {\n  return [x1, y1, x2, y2, x2, y2];\n}\n","/* eslint-disable no-case-declarations */\nimport {\n  extractAllNumbers,\n  generateUUID,\n  maxDotNumber,\n  toBlob,\n  toKebab\n} from \"@zyzgroup/core-common\";\nimport { DOMToBlob, DOMToString } from \"../../../file\";\nimport { useAttribute } from \"../../useAttribute\";\nimport { useClickA } from \"../../useElement\";\nimport { a2c, a2c2, l2c, q2c } from \"./line2c\";\n\nexport type SVGParsedPathData = [command: string, ...args: number[]];\n\nexport const SVGParsedPathArgsLength: Record<string, number> = {\n  a: 7, // A rx,ry xAxisRotate LargeArcFlag,SweepFlag x,y\n  c: 6, // C c1x,c1y c2x,c2y x,y\n  s: 4, // S c2x,c2y x,y\n  q: 4, // Q cx,cy x,y\n  t: 2, // T x,y\n  m: 2, // M x,y\n  l: 2, // L x,y\n  h: 1, // H x\n  v: 1, // V y\n  z: 0 // Z\n  // r: 4\n};\n\n// console.log(\n//   SVGPathDataToD(\n//     relativeSVGPath(\n//       parseSVGPath(\n//         \"M17.7722 6.22781C18.0759 6.53155 18.0759 7.02401 17.7722 7.32775L7.32775 17.7722C7.02401 18.0759 6.53155 18.0759 6.22781 17.7722C5.92406 17.4685 5.92407 16.976 6.22781 16.6722L16.6722 6.22781C16.976 5.92406 17.4684 5.92406 17.7722 6.22781Z\"\n//       )\n//     )\n//   )\n// );\n\nexport function createSVGElement(tagName = \"path\"): SVGGeometryElement {\n  const el = document.createElementNS.call(\n    document,\n    \"http://www.w3.org/2000/svg\",\n    tagName\n  ) as SVGGeometryElement;\n  return el;\n}\n\nexport function createSvgPath(): SVGPathElement {\n  const path = createSVGElement(\"path\");\n  return path as unknown as SVGPathElement;\n}\n\nexport const isSVGElementPath = (el: any) => {\n  return el instanceof SVGElement && el.tagName === \"path\";\n};\n\nexport function downloadFromSVGElement(\n  svgContainer: SVGElement,\n  name = \"shape\"\n) {\n  return useClickA(\n    DOMToBlob(svgContainer as unknown as HTMLElement),\n    `${name}.svg`\n  );\n}\n\nexport function downloadFromSVGString(svgString: string, name = \"shape\") {\n  return useClickA(toBlob(svgString), `${name}.svg`);\n}\n\nexport function getSVGRawStringFromElement(el: HTMLElement) {\n  return DOMToString(el);\n}\n\n// https://github.com/dy/is-svg-path\n// isSVGPath('M0 0L10 20 20 0Z') //true\n// isSVGPath('M00Z') //false\n// isSVGPath('xyz') //false\nexport function isSVGPath(str: string) {\n  if (typeof str !== \"string\") return false;\n  str = str.trim();\n  // https://www.w3.org/TR/SVG/paths.html#PathDataBNF\n  return (\n    /^[mlhvzaqtcs]\\s*[-+.0-9][^mlhvzaqtcs]+/i.test(str) && /[\\dz]$/i.test(str)\n    // && str.length > 4\n  );\n}\n\nexport function SVGPathDataToD(path: SVGParsedPathData[]): string {\n  return path\n    .map((item) => {\n      if (!item[0]) {\n        return \"\";\n      }\n      switch (item[0].toLowerCase()) {\n        case \"a\":\n          return `${item[0]} ${item[1]},${item[2]} ${item[3]} ${item[4]},${item[5]} ${item[6]},${item[7]}`;\n        case \"c\":\n          return `${item[0]} ${item[1]},${item[2]} ${item[3]},${item[4]} ${item[5]},${item[6]}`;\n        case \"s\":\n        case \"q\":\n          return `${item[0]} ${item[1]},${item[2]} ${item[3]},${item[4]}`;\n        default:\n          return item[0] + \" \" + item.slice(1).join(\",\");\n      }\n    })\n    .join(\" \");\n}\n\n/// parse an svg path data string to `[[command, arg1, arg2, ...], ...]`\nexport function parseSVGPath(path: string): SVGParsedPathData[] {\n  const data: SVGParsedPathData[] = [];\n  if (!isSVGPath(path)) {\n    // throw new Error(`parseSVGPath(path = ${path}) is not a SVG path!`);\n    return data;\n  }\n  path.replace(\n    /([mlhvzaqtcs])([^mlhvzaqtcs]*)/gi,\n    (substring: string, command: string, argsString: string): string => {\n      let type = command.toLowerCase();\n      const args: number[] = extractAllNumbers(argsString);\n\n      // overloaded moveTo\n      if (type == \"m\" && args.length > SVGParsedPathArgsLength[type]) {\n        data.push([command, ...args.splice(0, SVGParsedPathArgsLength[type])]);\n        type = \"l\";\n        command = command == \"m\" ? \"l\" : \"L\";\n      }\n\n      while (args.length) {\n        if (args.length < SVGParsedPathArgsLength[type]) {\n          throw new Error(\n            `parseSVGPath substring:{ ${substring} } command:{ ${command} } args:{ ${args} }`\n          );\n        } else {\n          data.push([\n            command,\n            ...args.splice(0, SVGParsedPathArgsLength[type])\n          ]);\n        }\n      }\n\n      if (type == \"z\") {\n        data.push([command]);\n      }\n\n      return \"\";\n    }\n  );\n  return data;\n}\n\n/// https://github.com/jkroso/abs-svg-path\nexport function absolutizeSVGPath(\n  path: SVGParsedPathData[]\n): SVGParsedPathData[] {\n  let startX = 0;\n  let startY = 0;\n  let x = 0;\n  let y = 0;\n\n  return path.map(function (seg) {\n    const type = seg[0];\n    const command = type.toUpperCase();\n\n    // is relative\n    if (type != command) {\n      seg[0] = command;\n      switch (type) {\n        case \"a\":\n          seg[6] += x;\n          seg[7] += y;\n          break;\n        case \"v\":\n          seg[1] += y;\n          break;\n        case \"h\":\n          seg[1] += x;\n          break;\n        default:\n          for (let i = 1; i < seg.length; ) {\n            (seg[i++] as number) += x;\n            (seg[i++] as number) += y;\n          }\n      }\n    }\n\n    switch (command) {\n      case \"Z\":\n        x = startX;\n        y = startY;\n        break;\n      case \"H\":\n        x = seg[1];\n        break;\n      case \"V\":\n        y = seg[1];\n        break;\n      case \"M\":\n        x = startX = seg[1];\n        y = startY = seg[2];\n        break;\n      default:\n        x = seg[seg.length - 2] as number;\n        y = seg[seg.length - 1] as number;\n    }\n\n    return seg;\n  });\n}\n\nexport function relativeSVGPath(\n  path: SVGParsedPathData[]\n): SVGParsedPathData[] {\n  let startX = 0;\n  let startY = 0;\n  let x = 0;\n  let y = 0;\n\n  return path.map(function (seg) {\n    const type = seg[0];\n    const command = type.toLowerCase();\n\n    // is absolute\n    if (type != command) {\n      seg[0] = command;\n      switch (type) {\n        case \"A\":\n          seg[6] -= x;\n          seg[7] -= y;\n          break;\n        case \"V\":\n          seg[1] -= y;\n          break;\n        case \"H\":\n          seg[1] -= x;\n          break;\n        default:\n          for (let i = 1; i < seg.length; ) {\n            (seg[i++] as number) -= x;\n            (seg[i++] as number) -= y;\n          }\n      }\n    }\n\n    switch (command) {\n      case \"z\":\n        x = startX;\n        y = startY;\n        break;\n      case \"h\":\n        x += seg[1];\n        break;\n      case \"v\":\n        y += seg[1];\n        break;\n      case \"m\":\n        x += seg[1];\n        y += seg[2];\n        startX += seg[1];\n        startY += seg[2];\n        break;\n      default:\n        x += seg[seg.length - 2] as number;\n        y += seg[seg.length - 1] as number;\n    }\n\n    return seg;\n  });\n}\n\n/// 统统变为 CubicBezier\n/// https://github.com/jkroso/normalize-svg-path\nexport function normalizeSVGPath(\n  path: SVGParsedPathData[]\n): SVGParsedPathData[] {\n  const result: SVGParsedPathData[] = [];\n  let startX = 0;\n  let startY = 0;\n  let x = 0;\n  let y = 0;\n  let quadX = 0;\n  let quadY = 0;\n  let bezierX = 0;\n  let bezierY = 0;\n\n  let prevCommand;\n\n  for (let i = 0, len = path.length; i < len; i++) {\n    let seg = path[i];\n    const command = seg[0];\n\n    switch (command) {\n      case \"M\":\n        startX = seg[1];\n        startY = seg[2];\n        break;\n      case \"A\":\n        const curves = a2c(\n          x,\n          y,\n          seg[6],\n          seg[7],\n          seg[4],\n          seg[5],\n          seg[1],\n          seg[2],\n          seg[3]\n        );\n        // const curves = a2c2(\n        //   x,\n        //   y,\n        //   seg[1],\n        //   seg[2],\n        //   seg[3],\n        //   seg[4],\n        //   seg[5],\n        //   seg[6],\n        //   seg[7]\n        // );\n        if (!curves.length) continue;\n        curves.forEach((curve, j) => {\n          /// a2c\n          const [x0, y0, x1, y1, x2, y2, x3, y3] = curve;\n          /// a2c2\n          // const [x1, y1, x2, y2, x3, y3] = curve;\n          seg = [\"C\", x1, y1, x2, y2, x3, y3];\n          if (j < curves.length - 1) {\n            result.push(seg);\n          }\n        });\n        break;\n      case \"S\":\n        // default control point\n        let cx = x;\n        let cy = y;\n        if (prevCommand == \"C\" || prevCommand == \"S\") {\n          cx += cx - bezierX; // reflect the previous command's control\n          cy += cy - bezierY; // point relative to the current point\n        }\n        seg = [\"C\", cx, cy, seg[1], seg[2], seg[3], seg[4]];\n        break;\n      case \"T\":\n        if (prevCommand == \"Q\" || prevCommand == \"T\") {\n          quadX = x * 2 - quadX; // as with 'S' reflect previous control point\n          quadY = y * 2 - quadY;\n        } else {\n          quadX = x;\n          quadY = y;\n        }\n        seg = [\"C\", ...q2c(x, y, quadX, quadY, seg[1], seg[2])];\n        break;\n      case \"Q\":\n        quadX = seg[1];\n        quadY = seg[2];\n        seg = [\"C\", ...q2c(x, y, seg[1], seg[2], seg[3], seg[4])];\n        break;\n      case \"L\":\n        seg = [\"C\", ...l2c(x, y, seg[1], seg[2])];\n        break;\n      case \"H\":\n        seg = [\"C\", ...l2c(x, y, seg[1], y)];\n        break;\n      case \"V\":\n        seg = [\"C\", ...l2c(x, y, x, seg[1])];\n        break;\n      case \"Z\":\n        seg = [\"C\", ...l2c(x, y, startX, startY)];\n        break;\n    }\n\n    prevCommand = command;\n    x = seg[seg.length - 2] as number;\n    y = seg[seg.length - 1] as number;\n    if (seg.length > 4) {\n      bezierX = seg[seg.length - 4] as number;\n      bezierY = seg[seg.length - 3] as number;\n    } else {\n      bezierX = x;\n      bezierY = y;\n    }\n\n    result.push(seg);\n  }\n\n  return result;\n}\n\n/// http://schepers.cc/getting-to-the-point\n/// Catmull-Rom curves : `R x1,y1 x2,y2 x3,y3`\nexport function catmullRom2bezier(crp: number[]): SVGParsedPathData[] {\n  const d: SVGParsedPathData[] = [];\n  for (let i = 0, iLen = crp.length; iLen - 2 > i; i += 2) {\n    let p;\n    if (0 == i) {\n      p = [\n        { x: crp[i], y: crp[i + 1] },\n        { x: crp[i], y: crp[i + 1] },\n        { x: crp[i + 2], y: crp[i + 3] },\n        { x: crp[i + 4], y: crp[i + 5] }\n      ];\n    } else if (iLen - 4 == i) {\n      p = [\n        { x: crp[i - 2], y: crp[i - 1] },\n        { x: crp[i], y: crp[i + 1] },\n        { x: crp[i + 2], y: crp[i + 3] },\n        { x: crp[i + 2], y: crp[i + 3] }\n      ];\n    } else {\n      p = [\n        { x: crp[i - 2], y: crp[i - 1] },\n        { x: crp[i], y: crp[i + 1] },\n        { x: crp[i + 2], y: crp[i + 3] },\n        { x: crp[i + 4], y: crp[i + 5] }\n      ];\n    }\n\n    // Catmull-Rom to Cubic Bezier conversion matrix\n    //    0       1       0       0\n    //  -1/6      1      1/6      0\n    //    0      1/6      1     -1/6\n    //    0       0       1       0\n\n    const bp = [\n      { x: p[1].x, y: p[1].y },\n      {\n        x: (-p[0].x + 6 * p[1].x + p[2].x) / 6,\n        y: (-p[0].y + 6 * p[1].y + p[2].y) / 6\n      },\n      {\n        x: (p[1].x + 6 * p[2].x - p[3].x) / 6,\n        y: (p[1].y + 6 * p[2].y - p[3].y) / 6\n      },\n      { x: p[2].x, y: p[2].y }\n    ];\n\n    d.push([\"C\", bp[1].x, bp[1].y, bp[2].x, bp[2].y, bp[3].x, bp[3].y]);\n  }\n\n  return d;\n}\n\n// Convert 'Z', 'V' and 'H' segments to 'L' segments\nexport function zvhToLSVGPath(path: SVGParsedPathData[]): SVGParsedPathData[] {\n  const result: SVGParsedPathData[] = [];\n  let startPoint: SVGParsedPathData = [\"L\", 0, 0];\n  let lastPoint: SVGParsedPathData;\n  for (let i = 0, len = path.length; i < len; i++) {\n    const pt = path[i];\n    switch (pt[0]) {\n      case \"M\":\n        startPoint = [\"L\", pt[1], pt[2]];\n        result.push(pt);\n        break;\n      case \"Z\":\n        result.push(startPoint);\n        break;\n      case \"H\":\n        lastPoint = result[result.length - 1] || [\"L\", 0, 0];\n        result.push([\n          \"L\",\n          pt[1],\n          lastPoint[lastPoint.length - 1]\n        ] as SVGParsedPathData);\n        break;\n      case \"V\":\n        lastPoint = result[result.length - 1] || [\"L\", 0, 0];\n        result.push([\n          \"L\",\n          lastPoint[lastPoint.length - 2],\n          pt[1]\n        ] as SVGParsedPathData);\n        break;\n      default:\n        result.push(pt);\n    }\n  }\n  return result;\n}\n\n// Expand shorthand curve commands to full versions; mutates the path in place for efficiency\n// Requires commands have already been converted to absolute versions\nexport function longhandSVGPath(\n  path: SVGParsedPathData[]\n): SVGParsedPathData[] {\n  const conversion: Record<string, { to: string; x: number }> = {\n    S: { to: \"C\", x: 3 },\n    T: { to: \"Q\", x: 1 }\n  };\n  let prev;\n  let x1 = 0;\n  let y1 = 0;\n  for (let i = 0, len = path.length; i < len; i++) {\n    const cmd = path[i];\n    const convert = conversion[cmd[0]];\n    if (convert) {\n      cmd[0] = convert.to;\n      if (prev) {\n        if (prev[0] === convert.to) {\n          x1 = 2 * Number(prev[convert.x + 2]) - Number(prev[convert.x]);\n          y1 = 2 * Number(prev[convert.x + 3]) - Number(prev[convert.x + 1]);\n        } else {\n          x1 = Number(prev[prev.length - 2]);\n          y1 = Number(prev[prev.length - 1]);\n        }\n      }\n      cmd.splice(1, 0, x1, y1);\n    }\n    prev = cmd;\n  }\n  return path;\n}\n","export class DOMVideo {\n  video: HTMLVideoElement | HTMLAudioElement;\n\n  constructor(video: HTMLVideoElement | HTMLAudioElement) {\n    this.video = video;\n  }\n\n  setSrcObject(mediaStream: MediaStream) {\n    this.video.addEventListener(\"loadedmetadata\", (e) => {\n      const video = e.target as HTMLVideoElement | HTMLAudioElement;\n      if (video instanceof HTMLVideoElement) {\n        // video.id\n        // video.videoWidth\n        // video.videoHeight\n        // video.currentTime\n        // video.readyState == video.HAVE_ENOUGH_DATA\n      }\n    });\n    this.video.srcObject = mediaStream;\n  }\n\n  captureWebCamera() {\n    navigator.mediaDevices\n      .getUserMedia({\n        video: true\n      })\n      .then((stream) => {\n        this.setSrcObject(stream);\n      });\n  }\n\n  // feature test for native video media switching media\n  static async videoMediaChangeSupport() {\n    return new Promise<boolean>((resolve) => {\n      const iframe = document.createElement(\"iframe\");\n      const video = document.createElement(\"video\");\n      const source = document.createElement(\"source\");\n      const mediaSource = new MediaSource();\n      mediaSource.addEventListener(\"sourceopen\", () => resolve(true));\n      source.src = URL.createObjectURL(mediaSource);\n      source.media = \"(min-width:10px)\";\n      video.append(source);\n      iframe.width = \"5\";\n      iframe.style.cssText = `position: absolute; visibility: hidden;`;\n      document.documentElement.append(iframe);\n      iframe.contentDocument?.body.append(video);\n      setTimeout(() => {\n        iframe.width = \"15\";\n      });\n      setTimeout(() => {\n        iframe.remove();\n        resolve(false);\n      }, 1000);\n    });\n  }\n\n  static tryAutoPlayOrAutoPlayAfterClick(\n    video: HTMLVideoElement | HTMLAudioElement\n  ) {\n    return new Promise<boolean>((resolve) => {\n      video\n        .play()\n        .then(() => {\n          video.autoplay = true;\n          resolve(true);\n        })\n        .catch(() => {\n          DOMVideo.setAutoPlayWhenClick(video);\n          resolve(false);\n        });\n    });\n  }\n\n  // 监听页面的点击事件，一旦点过了就能autoplay了\n  static setAutoPlayWhenClick(video: HTMLVideoElement | HTMLAudioElement) {\n    function setAutoPlay() {\n      video.autoplay = true;\n      video.play();\n      document.removeEventListener(\"click\", setAutoPlay);\n      document.removeEventListener(\"touchend\", setAutoPlay);\n    }\n    document.addEventListener(\"click\", setAutoPlay);\n    document.addEventListener(\"touchend\", setAutoPlay);\n  }\n}\n\nexport default DOMVideo;\n","import {\n  stringLength,\n  charAt,\n  EventBus,\n  EventBusListeners,\n  regTest\n} from \"@zyzgroup/core-common\";\n\nexport interface DOMParseListeners extends EventBusListeners {\n  newline(): void;\n  special(text: string): void;\n  cdata(text: string): void;\n  comment(text: string): void;\n\n  text(text: string): void;\n\n  tag(tagname: string, attrs: Record<string, string>): void;\n  \"/tag\"(tagname: string, attrs: Record<string, string>): void;\n\n  /// 结束\n  finish(): void;\n}\n\nexport class DOMParse extends EventBus<DOMParseListeners> {\n  source: string;\n\n  raw = \"\";\n  mode = \"text\";\n  tagname = \"\";\n  nodename = \"\";\n  textchunk = \"\";\n  entity = \"\";\n  quote = \"\";\n  attrs: Record<string, string> = {};\n\n  constructor(sourceString: string) {\n    super();\n    this.source = sourceString;\n  }\n\n  parse() {\n    const length = stringLength(this.source);\n    if (length === 0) {\n      this.emit(\"finish\");\n      return;\n    }\n    let prev;\n    let current;\n    let next = charAt(this.source, 0);\n    for (let i = 1; i < length; i++) {\n      prev = current;\n      current = next;\n      next = charAt(this.source, i);\n      this.raw += current;\n      if (current) {\n        this.step(current, next, prev);\n      }\n    }\n    if (next) {\n      this.step(next, undefined, current);\n    }\n    this.emit(\"finish\");\n  }\n\n  step(c: string, n?: string, p?: string) {\n    c == \"\\n\" && this.emit(\"newline\");\n    this.act(c, n, p);\n  }\n\n  act(c: string, n?: string, p?: string) {\n    switch (this.mode) {\n      case \"text\":\n        switch (c) {\n          case \"<\":\n          case \"eof\":\n            this.nodename = \"\";\n            this.attrs = {};\n            this.mode = \"tag name start\";\n            this.raw = this.raw.slice(0, -1);\n            this.textchunk && this.emit(\"text\", this.textchunk);\n            this.raw += c;\n            this.textchunk = \"\";\n            break;\n          case \"&\":\n            this.mode = \"entity\";\n            this.entity = \"\";\n            break;\n          default:\n            this.textchunk += c;\n            break;\n        }\n        break;\n\n      case \"entity\":\n        if (regTest(\"whitespace\", c)) {\n          this.textchunk += entity2text(this.entity);\n          this.mode = \"text\";\n        } else if (c == \";\") {\n          this.textchunk += entity2text(this.entity + c);\n          this.mode = \"text\";\n        } else {\n          this.entity += c;\n        }\n        break;\n\n      case \"special\":\n        if (p == \"!\" && c == \"-\" && n == \"-\") {\n          this.mode = \"comment start\";\n          break;\n        }\n        if (this.textchunk == \"[CDATA\" && c == \"[\") {\n          this.mode = \"cdata\";\n          this.textchunk = \"\";\n          break;\n        }\n        if (c == \">\" || c == \"eof\") {\n          this.emit(\"special\", this.textchunk);\n          this.mode = \"text\";\n          this.textchunk = \"\";\n          break;\n        }\n        this.textchunk += c;\n        break;\n\n      case \"cdata\":\n        if (p == \"]\" && c == \"]\" && n == \">\") {\n          this.mode = \"cdata end\";\n          this.textchunk = this.textchunk.slice(0, -1);\n          break;\n        }\n        if (c == \"eof\") {\n          this.mode = \"cdata end\";\n          this.act(c, n, p);\n        }\n        this.textchunk += c;\n        break;\n\n      case \"cdata end\":\n        this.emit(\"cdata\", this.textchunk);\n        this.textchunk = \"\";\n        this.mode = \"text\";\n        break;\n\n      case \"comment start\":\n        if (n == \">\" || c == \"eof\") {\n          this.emit(\"comment\", \"\");\n          this.mode = \"skip\";\n        } else {\n          this.mode = \"comment\";\n        }\n        break;\n\n      case \"skip\":\n        this.mode = \"text\";\n        break;\n\n      case \"comment\":\n        if (c == \"-\" && p == \"-\" && n == \">\") {\n          this.mode = \"comment end\";\n          this.textchunk = this.textchunk.slice(0, -1);\n        } else if (c == \"eof\") {\n          this.emit(\"comment\", this.textchunk);\n        } else {\n          this.textchunk += c;\n        }\n        break;\n\n      case \"comment end\":\n        this.emit(\"comment\", this.textchunk);\n        this.textchunk = \"\";\n        this.mode = \"text\";\n        break;\n\n      case \"declaration\":\n        if (c == \"?\" && n == \">\") {\n          this.mode = \"declaration end\";\n          break;\n        }\n        if (c == \"eof\") {\n          this.emit(\"comment\", this.textchunk);\n        }\n        this.textchunk += c;\n        break;\n\n      case \"declaration end\":\n        this.emit(\"comment\", this.textchunk);\n        this.textchunk = \"\";\n        this.mode = \"text\";\n        break;\n\n      case \"tag name start\":\n        if (c == \"eof\") {\n          this.emit(\"text\", \"<\");\n          break;\n        }\n        if (!regTest(\"whitespace\", c)) {\n          this.mode = \"tag name\";\n          if (c == \"/\") {\n            this.mode = \"close tag name start\";\n            break;\n          } else if (c == \"!\") {\n            this.mode = \"special\";\n            this.textchunk = \"\";\n            break;\n          } else if (c == \"?\") {\n            this.mode = \"declaration\";\n            break;\n          }\n          this.act(c, n, p);\n        }\n        break;\n\n      case \"close tag name start\":\n        if (!regTest(\"whitespace\", c)) {\n          this.mode = \"close tag name\";\n          this.tagname = \"\";\n          this.nodename = \"\";\n          this.act(c, n, p);\n        }\n        break;\n\n      case \"close tag name\":\n        if (regTest(\"whitespace\", c)) {\n          this.tagname = this.nodename;\n        } else\n          switch (c) {\n            case \">\":\n              this.emit(\"/tag\", this.tagname || this.nodename, this.attrs);\n              this.mode = \"text\";\n              break;\n            default:\n              !this.tagname && (this.nodename += c);\n              break;\n          }\n        break;\n\n      case \"tag name\":\n        if (regTest(\"whitespace\", c)) {\n          this.tagname = this.nodename;\n          this.nodename = \"\";\n          this.mode = \"attr start\";\n        } else\n          switch (c) {\n            case \">\":\n              this.emit(\"tag\", this.nodename, this.attrs);\n              this.mode = \"text\";\n              break;\n            case \"/\":\n              this.raw += n;\n              this.emit(\"tag\", this.nodename, this.attrs);\n              this.emit(\"/tag\", this.nodename, this.attrs);\n              this.mode = \"skip\";\n              break;\n            default:\n              this.nodename += c;\n              break;\n          }\n        break;\n\n      case \"attr start\":\n        if (!regTest(\"whitespace\", c)) {\n          this.mode = \"attr\";\n          this.nodename = \"\";\n          this.act(c, n, p);\n        }\n        break;\n\n      case \"attr\":\n        if (regTest(\"whitespace\", c) || c == \"=\") {\n          this.attrs[this.nodename] = \"\";\n          this.mode = \"attr value start\";\n        } else\n          switch (c) {\n            case \">\":\n              if (this.nodename == \"/\") {\n                delete this.attrs[\"/\"];\n                this.emit(\"tag\", this.tagname, this.attrs);\n                this.emit(\"/tag\", this.tagname, this.attrs);\n              } else {\n                this.nodename && (this.attrs[this.nodename] = \"\");\n                this.emit(\"tag\", this.tagname, this.attrs);\n              }\n              this.mode = \"text\";\n              break;\n            default:\n              this.nodename += c;\n              break;\n          }\n        break;\n\n      case \"attr value start\":\n        if (!regTest(\"whitespace\", c)) {\n          this.mode = \"attr value\";\n          this.quote = \"\";\n          if (c == \"'\" || c == '\"') {\n            this.quote = c;\n            return;\n          }\n          this.act(c, n, p);\n        }\n        break;\n\n      case \"attr value\":\n        if (regTest(\"whitespace\", c) && !this.quote) {\n          this.mode = \"attr start\";\n        } else if (c == \">\" && !this.quote) {\n          this.emit(\"tag\", this.tagname, this.attrs);\n          this.mode = \"text\";\n        } else\n          switch (c) {\n            case '\"':\n            case \"'\":\n              if (this.quote == c && p != \"\\\\\") {\n                this.mode = \"attr start\";\n              }\n              break;\n            default:\n              this.attrs[this.nodename] += c;\n              break;\n          }\n        break;\n    }\n  }\n}\n\nexport default DOMParse;\n\n// &nbsp; &#160;\nfunction entity2text(entity: string) {\n  const entities: Record<string, number> = {\n    lt: 60,\n    \"lt;\": 60,\n    \"AMP;\": 38,\n    AMP: 38,\n    \"GT;\": 62,\n    GT: 62,\n    \"QUOT;\": 34,\n    QUOT: 34,\n    \"apos;\": 39,\n    \"bull;\": 8226,\n    \"bullet;\": 8226,\n    \"copy;\": 169,\n    copy: 169,\n    \"deg;\": 176,\n    deg: 176\n  };\n  let code;\n  if (entity.charAt(0) == \"#\") {\n    if (entity.charAt(1).toLowerCase() == \"x\") {\n      code = parseInt(entity.substring(2), 16);\n    } else {\n      code = parseInt(entity.substring(1), 10);\n    }\n  } else {\n    code = entities[entity];\n  }\n  return code ? String.fromCharCode(code) : \"&\" + entity;\n}\n","// http://www.w3.org/TR/CSS21/grammar.html\n\n// https://github.com/visionmedia/css-parse/pull/49#issuecomment-30088027\nvar commentre = /\\/\\*[^*]*\\*+([^/*][^*]*\\*+)*\\//g;\n\nexport function parseCSS(css, options = {}) {\n  /**\n   * Positional.\n   */\n\n  var lineno = 1;\n  var column = 1;\n\n  /**\n   * Update lineno and column based on `str`.\n   */\n\n  function updatePosition(str) {\n    var lines = str.match(/\\n/g);\n    if (lines) lineno += lines.length;\n    var i = str.lastIndexOf(\"\\n\");\n    column = ~i ? str.length - i : column + str.length;\n  }\n\n  /**\n   * Mark position and patch `node.position`.\n   */\n\n  function position() {\n    var start = { line: lineno, column: column };\n    return function (node) {\n      node.position = new Position(start);\n      whitespace();\n      return node;\n    };\n  }\n\n  /**\n   * Store position information for a node\n   */\n\n  function Position(start) {\n    this.start = start;\n    this.end = { line: lineno, column: column };\n    this.source = options.source;\n  }\n\n  /**\n   * Non-enumerable source string\n   */\n\n  Position.prototype.content = css;\n\n  /**\n   * Error `msg`.\n   */\n\n  var errorsList = [];\n\n  function error(msg) {\n    var err = new Error(\n      options.source + \":\" + lineno + \":\" + column + \": \" + msg\n    );\n    err.reason = msg;\n    err.filename = options.source;\n    err.line = lineno;\n    err.column = column;\n    err.source = css;\n\n    if (options.silent) {\n      errorsList.push(err);\n    } else {\n      throw err;\n    }\n  }\n\n  /**\n   * Parse stylesheet.\n   */\n\n  function stylesheet() {\n    var rulesList = rules();\n\n    return {\n      type: \"stylesheet\",\n      stylesheet: {\n        source: options.source,\n        rules: rulesList,\n        parsingErrors: errorsList\n      }\n    };\n  }\n\n  /**\n   * Opening brace.\n   */\n\n  function open() {\n    return match(/^{\\s*/);\n  }\n\n  /**\n   * Closing brace.\n   */\n\n  function close() {\n    return match(/^}/);\n  }\n\n  /**\n   * Parse ruleset.\n   */\n\n  function rules() {\n    var node;\n    var rules = [];\n    whitespace();\n    comments(rules);\n    while (css.length && css.charAt(0) != \"}\" && (node = atrule() || rule())) {\n      if (node !== false) {\n        rules.push(node);\n        comments(rules);\n      }\n    }\n    return rules;\n  }\n\n  /**\n   * Match `re` and return captures.\n   */\n\n  function match(re) {\n    var m = re.exec(css);\n    if (!m) return;\n    var str = m[0];\n    updatePosition(str);\n    css = css.slice(str.length);\n    return m;\n  }\n\n  /**\n   * Parse whitespace.\n   */\n\n  function whitespace() {\n    match(/^\\s*/);\n  }\n\n  /**\n   * Parse comments;\n   */\n\n  function comments(rules) {\n    var c;\n    rules = rules || [];\n    while ((c = comment())) {\n      if (c !== false) {\n        rules.push(c);\n      }\n    }\n    return rules;\n  }\n\n  /**\n   * Parse comment.\n   */\n\n  function comment() {\n    var pos = position();\n    if (\"/\" != css.charAt(0) || \"*\" != css.charAt(1)) return;\n\n    var i = 2;\n    while (\n      \"\" != css.charAt(i) &&\n      (\"*\" != css.charAt(i) || \"/\" != css.charAt(i + 1))\n    )\n      ++i;\n    i += 2;\n\n    if (\"\" === css.charAt(i - 1)) {\n      return error(\"End of comment missing\");\n    }\n\n    var str = css.slice(2, i - 2);\n    column += 2;\n    updatePosition(str);\n    css = css.slice(i);\n    column += 2;\n\n    return pos({\n      type: \"comment\",\n      comment: str\n    });\n  }\n\n  /**\n   * Parse selector.\n   */\n\n  function selector() {\n    var m = match(/^([^{]+)/);\n    if (!m) return;\n    /* @fix Remove all comments from selectors\n     * http://ostermiller.org/findcomment.html */\n    return trim(m[0])\n      .replace(/\\/\\*([^*]|[\\r\\n]|(\\*+([^*/]|[\\r\\n])))*\\*\\/+/g, \"\")\n      .replace(/\"(?:\\\\\"|[^\"])*\"|'(?:\\\\'|[^'])*'/g, function (m) {\n        return m.replace(/,/g, \"\\u200C\");\n      })\n      .split(/\\s*(?![^(]*\\)),\\s*/)\n      .map(function (s) {\n        return s.replace(/\\u200C/g, \",\");\n      });\n  }\n\n  /**\n   * Parse declaration.\n   */\n\n  function declaration() {\n    var pos = position();\n\n    // prop\n    var prop = match(/^(\\*?[-#/*\\\\\\w]+(\\[[0-9a-z_-]+\\])?)\\s*/);\n    if (!prop) return;\n    prop = trim(prop[0]);\n\n    // :\n    if (!match(/^:\\s*/)) return error(\"property missing ':'\");\n\n    // val\n    var val = match(/^((?:'(?:\\\\'|.)*?'|\"(?:\\\\\"|.)*?\"|\\([^)]*?\\)|[^};])+)/);\n\n    var ret = pos({\n      type: \"declaration\",\n      property: prop.replace(commentre, \"\"),\n      value: val ? trim(val[0]).replace(commentre, \"\") : \"\"\n    });\n\n    // ;\n    match(/^[;\\s]*/);\n\n    return ret;\n  }\n\n  /**\n   * Parse declarations.\n   */\n\n  function declarations() {\n    var decls = [];\n\n    if (!open()) return error(\"missing '{'\");\n    comments(decls);\n\n    // declarations\n    var decl;\n    while ((decl = declaration())) {\n      if (decl !== false) {\n        decls.push(decl);\n        comments(decls);\n      }\n    }\n\n    if (!close()) return error(\"missing '}'\");\n    return decls;\n  }\n\n  /**\n   * Parse keyframe.\n   */\n\n  function keyframe() {\n    var m;\n    var vals = [];\n    var pos = position();\n\n    while ((m = match(/^((\\d+\\.\\d+|\\.\\d+|\\d+)%?|[a-z]+)\\s*/))) {\n      vals.push(m[1]);\n      match(/^,\\s*/);\n    }\n\n    if (!vals.length) return;\n\n    return pos({\n      type: \"keyframe\",\n      values: vals,\n      declarations: declarations()\n    });\n  }\n\n  /**\n   * Parse keyframes.\n   */\n\n  function atkeyframes() {\n    var pos = position();\n    var m = match(/^@([-\\w]+)?keyframes\\s*/);\n\n    if (!m) return;\n    var vendor = m[1];\n\n    // identifier\n    m = match(/^([-\\w]+)\\s*/);\n    if (!m) return error(\"@keyframes missing name\");\n    var name = m[1];\n\n    if (!open()) return error(\"@keyframes missing '{'\");\n\n    var frame;\n    var frames = comments();\n    while ((frame = keyframe())) {\n      frames.push(frame);\n      frames = frames.concat(comments());\n    }\n\n    if (!close()) return error(\"@keyframes missing '}'\");\n\n    return pos({\n      type: \"keyframes\",\n      name: name,\n      vendor: vendor,\n      keyframes: frames\n    });\n  }\n\n  /**\n   * Parse supports.\n   */\n\n  function atsupports() {\n    var pos = position();\n    var m = match(/^@supports *([^{]+)/);\n\n    if (!m) return;\n    var supports = trim(m[1]);\n\n    if (!open()) return error(\"@supports missing '{'\");\n\n    var style = comments().concat(rules());\n\n    if (!close()) return error(\"@supports missing '}'\");\n\n    return pos({\n      type: \"supports\",\n      supports: supports,\n      rules: style\n    });\n  }\n\n  /**\n   * Parse host.\n   */\n\n  function athost() {\n    var pos = position();\n    var m = match(/^@host\\s*/);\n\n    if (!m) return;\n\n    if (!open()) return error(\"@host missing '{'\");\n\n    var style = comments().concat(rules());\n\n    if (!close()) return error(\"@host missing '}'\");\n\n    return pos({\n      type: \"host\",\n      rules: style\n    });\n  }\n\n  /**\n   * Parse media.\n   */\n\n  function atmedia() {\n    var pos = position();\n    var m = match(/^@media *([^{]+)/);\n\n    if (!m) return;\n    var media = trim(m[1]);\n\n    if (!open()) return error(\"@media missing '{'\");\n\n    var style = comments().concat(rules());\n\n    if (!close()) return error(\"@media missing '}'\");\n\n    return pos({\n      type: \"media\",\n      media: media,\n      rules: style\n    });\n  }\n\n  /**\n   * Parse custom-media.\n   */\n\n  function atcustommedia() {\n    var pos = position();\n    var m = match(/^@custom-media\\s+(--[^\\s]+)\\s*([^{;]+);/);\n    if (!m) return;\n\n    return pos({\n      type: \"custom-media\",\n      name: trim(m[1]),\n      media: trim(m[2])\n    });\n  }\n\n  /**\n   * Parse paged media.\n   */\n\n  function atpage() {\n    var pos = position();\n    var m = match(/^@page */);\n    if (!m) return;\n\n    var sel = selector() || [];\n\n    if (!open()) return error(\"@page missing '{'\");\n    var decls = comments();\n\n    // declarations\n    var decl;\n    while ((decl = declaration())) {\n      decls.push(decl);\n      decls = decls.concat(comments());\n    }\n\n    if (!close()) return error(\"@page missing '}'\");\n\n    return pos({\n      type: \"page\",\n      selectors: sel,\n      declarations: decls\n    });\n  }\n\n  /**\n   * Parse document.\n   */\n\n  function atdocument() {\n    var pos = position();\n    var m = match(/^@([-\\w]+)?document *([^{]+)/);\n    if (!m) return;\n\n    var vendor = trim(m[1]);\n    var doc = trim(m[2]);\n\n    if (!open()) return error(\"@document missing '{'\");\n\n    var style = comments().concat(rules());\n\n    if (!close()) return error(\"@document missing '}'\");\n\n    return pos({\n      type: \"document\",\n      document: doc,\n      vendor: vendor,\n      rules: style\n    });\n  }\n\n  /**\n   * Parse font-face.\n   */\n\n  function atfontface() {\n    var pos = position();\n    var m = match(/^@font-face\\s*/);\n    if (!m) return;\n\n    if (!open()) return error(\"@font-face missing '{'\");\n    var decls = comments();\n\n    // declarations\n    var decl;\n    while ((decl = declaration())) {\n      decls.push(decl);\n      decls = decls.concat(comments());\n    }\n\n    if (!close()) return error(\"@font-face missing '}'\");\n\n    return pos({\n      type: \"font-face\",\n      declarations: decls\n    });\n  }\n\n  /**\n   * Parse import\n   */\n\n  var atimport = _compileAtrule(\"import\");\n\n  /**\n   * Parse charset\n   */\n\n  var atcharset = _compileAtrule(\"charset\");\n\n  /**\n   * Parse namespace\n   */\n\n  var atnamespace = _compileAtrule(\"namespace\");\n\n  /**\n   * Parse non-block at-rules\n   */\n\n  function _compileAtrule(name) {\n    var re = new RegExp(\"^@\" + name + \"\\\\s*([^;]+);\");\n    return function () {\n      var pos = position();\n      var m = match(re);\n      if (!m) return;\n      var ret = { type: name };\n      ret[name] = m[1].trim();\n      return pos(ret);\n    };\n  }\n\n  /**\n   * Parse at rule.\n   */\n\n  function atrule() {\n    if (css[0] != \"@\") return;\n\n    return (\n      atkeyframes() ||\n      atmedia() ||\n      atcustommedia() ||\n      atsupports() ||\n      atimport() ||\n      atcharset() ||\n      atnamespace() ||\n      atdocument() ||\n      atpage() ||\n      athost() ||\n      atfontface()\n    );\n  }\n\n  /**\n   * Parse rule.\n   */\n\n  function rule() {\n    var pos = position();\n    var sel = selector();\n\n    if (!sel) return error(\"selector missing\");\n    comments();\n\n    return pos({\n      type: \"rule\",\n      selectors: sel,\n      declarations: declarations()\n    });\n  }\n\n  return addParent(stylesheet());\n}\n\nexport default parseCSS;\n\nfunction trim(str) {\n  return str ? str.replace(/^\\s+|\\s+$/g, \"\") : \"\";\n}\n\n/**\n * Adds non-enumerable parent node reference to each node.\n */\nfunction addParent(obj, parent) {\n  var isNode = obj && typeof obj.type === \"string\";\n  var childParent = isNode ? obj : parent;\n\n  for (var k in obj) {\n    var value = obj[k];\n    if (Array.isArray(value)) {\n      value.forEach(function (v) {\n        addParent(v, childParent);\n      });\n    } else if (value && typeof value === \"object\") {\n      addParent(value, childParent);\n    }\n  }\n\n  if (isNode) {\n    Object.defineProperty(obj, \"parent\", {\n      configurable: true,\n      writable: true,\n      enumerable: false,\n      value: parent || null\n    });\n  }\n\n  return obj;\n}\n","/* eslint-disable no-case-declarations */\nimport { DOMParse, parseCSS } from \"../../../dom\";\n\n// 合并 DOMParseListeners\ninterface DOMParseListeners {\n  result(items: Record<string, string>[]): void;\n}\n\nexport class SVGParse extends DOMParse {\n  currentItem: Record<string, string> = {};\n  items: Record<string, string>[] = [];\n\n  groups: Record<string, string>[] = [];\n\n  globalStyles: Record<string, string[]> = {};\n\n  grad: Record<string, any> = {};\n  idtops: Record<string, string> = {};\n  text = \"\";\n\n  constructor(sourceString: string) {\n    super(sourceString);\n\n    this.on(\"tag\", (tagname: string, attrs: Record<string, string>) => {\n      this.text = \"\";\n      this.currentItem = { type: tagname };\n      switch (tagname) {\n        case \"g\":\n          this.groups.push(this.currentItem);\n          break;\n      }\n      this.processAttrs(tagname, attrs);\n    });\n\n    this.on(\"text\", (text: string) => {\n      if (this.currentItem.type == \"style\") {\n        try {\n          const parsedCSS = parseCSS(text);\n          for (const rule of parsedCSS.stylesheet.rules) {\n            for (const declaration of rule.declarations) {\n              for (const selector of rule.selectors) {\n                this.globalStyles[selector] = this.globalStyles[selector] || [];\n                this.globalStyles[selector].push(\n                  `${declaration.property}:${declaration.value}`\n                );\n              }\n            }\n          }\n          // console.log(this.globalStyles);\n        } catch (e) {\n          console.error(\"CAN'T parse css text: \" + text);\n        }\n        return;\n      }\n      this.text += text;\n    });\n\n    this.on(\"/tag\", (tagname: string, attrs: Record<string, string>) => {\n      /// *.attrend\n      let i = this.groups.length;\n      while (i--) {\n        if (this.groups[i] != this.currentItem) {\n          let groupTransform = \"\";\n          let groupStyle = \"\";\n          for (const key in this.groups[i]) {\n            if (key == \"transform\") {\n              groupTransform = this.groups[i].transform as string;\n            } else if (\n              key == \"class\" &&\n              this.globalStyles[\".\" + this.groups[i][key]]\n            ) {\n              groupStyle =\n                this.globalStyles[\".\" + this.groups[i][key]].join(\";\") +\n                \";\" +\n                groupStyle;\n            } else if (\n              key == \"id\" &&\n              this.globalStyles[\"#\" + this.groups[i][key]]\n            ) {\n              groupStyle =\n                this.globalStyles[\"#\" + this.groups[i][key]].join(\";\") +\n                \";\" +\n                groupStyle;\n            } else if (typeof this.currentItem[key] === \"undefined\") {\n              // 除 transform 和 style , 使用group属性\n              this.currentItem[key] = this.groups[i][key];\n            }\n          }\n          if (typeof this.currentItem.transform === \"undefined\") {\n            this.currentItem.transform = groupTransform;\n          } else {\n            this.currentItem.transform += \" \" + groupTransform;\n          }\n          /// add group style\n          if (typeof this.currentItem.style === \"undefined\") {\n            this.currentItem.style = groupStyle;\n          } else {\n            this.currentItem.style = groupStyle + this.currentItem.style;\n          }\n          /// add self global style\n          if (\n            this.currentItem.class &&\n            this.globalStyles[\".\" + this.currentItem.class]\n          ) {\n            this.currentItem.style =\n              this.globalStyles[\".\" + this.currentItem.class].join(\";\") +\n              \";\" +\n              this.currentItem.style;\n          } else if (\n            this.currentItem.id &&\n            this.globalStyles[\"#\" + this.currentItem.id]\n          ) {\n            this.currentItem.style =\n              this.globalStyles[\"#\" + this.currentItem.id].join(\";\") +\n              \";\" +\n              this.currentItem.style;\n          }\n          applyStyle(\n            this.currentItem.style,\n            this.currentItem,\n            SVGAttributeRange\n          );\n        }\n      }\n\n      this.processAttrs(tagname, attrs);\n\n      switch (tagname) {\n        case \"g\":\n          this.groups.pop();\n          break;\n        case \"cirlce\":\n          this.addToItems();\n          break;\n        case \"ellipse\":\n          this.addToItems();\n          break;\n        case \"polygon\":\n          this.addToItems();\n          break;\n        case \"path\":\n          this.addToItems();\n          break;\n        case \"line\":\n          this.addToItems();\n          break;\n        case \"rect\":\n          this.addToItems();\n          break;\n        case \"image\":\n          this.addToItems();\n          break;\n        case \"text\":\n          this.currentItem.text = this.text;\n          this.currentItem[\"text-anchor\"] =\n            this.currentItem[\"text-anchor\"] || \"start\";\n          this.addToItems();\n          break;\n      }\n    });\n\n    this.on(\"finish\", () => {\n      this.emit(\"result\", this.items);\n    });\n  }\n\n  parse() {\n    super.parse();\n    return this.items;\n  }\n\n  processAttrs(tagname: string, attrs: Record<string, string>) {\n    let s: any[] = [];\n    let stop: any;\n\n    switch (tagname) {\n      case \"svg\":\n        let width = \"\";\n        let height = \"\";\n        if (attrs.width && attrs.height) {\n          width = attrs.width;\n          height = attrs.height;\n        } else if (attrs.viewBox) {\n          const viewBoxs = attrs.viewBox.split(/\\s+/gi);\n          if (viewBoxs.length == 4) {\n            width = String(parseFloat(viewBoxs[2]) - parseFloat(viewBoxs[0]));\n            height = String(parseFloat(viewBoxs[3]) - parseFloat(viewBoxs[1]));\n          }\n        }\n        if (width && height) {\n          this.items.push({\n            type: \"viewbox\",\n            width,\n            height\n          });\n        }\n        break;\n      case \"line\":\n        if (\n          typeof attrs.x1 == \"number\" &&\n          typeof attrs.y1 == \"number\" &&\n          typeof attrs.x2 == \"number\" &&\n          typeof attrs.y2 == \"number\"\n        ) {\n          this.currentItem.path =\n            \"M\" + [attrs.x1, attrs.y1, attrs.x2, attrs.y2];\n        }\n        break;\n      case \"stop\":\n        stop = {};\n        if (attrs.style) {\n          applyStyle(attrs.style, stop);\n        }\n        stop.offset = stop.offset || attrs.offset;\n        stop.color = stop[\"stop-color\"] || attrs[\"stop-color\"];\n        stop.opacity = stop[\"stop-opacity\"] || attrs[\"stop-opacity\"];\n        if (~(stop.offset + \"\").indexOf(\"%\")) {\n          stop.offset = parseFloat(stop.offset);\n        } else {\n          stop.offset = parseFloat(stop.offset) * 100;\n        }\n        stop.offset = +stop.offset.toFixed(2);\n        this.grad.stops.push(stop);\n        break;\n      case \"linearGradient\":\n        this.grad.angle = (\n          360 +\n          angle(\n            parseFloat(attrs.x1),\n            parseFloat(attrs.y1),\n            parseFloat(attrs.x2),\n            parseFloat(attrs.y2),\n            parseFloat(attrs.x1) + 100,\n            parseFloat(attrs.y1)\n          )\n        ).toFixed(2);\n        s = [this.grad.angle];\n        for (let i = 0, ii = this.grad.stops.length; i < ii; i++) {\n          stop = this.grad.stops[i];\n          if (i && i != ii - 1) {\n            s.push(stop.color + \":\" + stop.offset);\n          } else {\n            s.push(stop.color);\n          }\n        }\n        this.idtops[this.grad.id] = s.join(\"-\");\n        this.items.forEach((item) => {\n          if (item.fillid == this.grad.id) {\n            item.fill = this.idtops[this.grad.id];\n          }\n        });\n        break;\n      case \"radialGradient\":\n        s = [];\n        for (let i = 0, ii = this.grad.stops.length; i < ii; i++) {\n          stop = this.grad.stops[i];\n          if (i && i != ii - 1) {\n            s.push(stop.color + \":\" + stop.offset);\n          } else {\n            s.push(stop.color);\n          }\n        }\n        this.idtops[this.grad.id] = s.join(\"-\");\n        this.items.forEach((item) => {\n          if (item.fillid == this.grad.id) {\n            item.fill = this.idtops[this.grad.id];\n          }\n        });\n        break;\n    }\n\n    for (const key in attrs) {\n      const value = attrs[key];\n      /// 复制attribute\n      if (SVGAttributeRange.includes(key)) {\n        this.currentItem[key] = value;\n      }\n      if (key === \"id\") {\n        if (this.currentItem.type === \"linearGradient\") {\n          this.grad = {\n            id: key,\n            stops: []\n          };\n        }\n        if (this.currentItem.type === \"radialGradient\") {\n          this.grad = {\n            id: key,\n            stops: []\n          };\n        }\n      }\n      if (key === \"style\") {\n        /// 设置 svg element 样式\n        applyStyle(value, this.currentItem, SVGAttributeRange);\n      }\n      if (key === \"transform\") {\n        this.currentItem.transform =\n          value + (this.currentItem.transform || \" \");\n      }\n      if (key === \"fill\") {\n        const result = value.match(/url\\(#([^)]+)\\)/);\n        if (result) {\n          const id = result[1];\n          this.currentItem.fillid = id;\n          if (this.idtops[id]) {\n            this.currentItem.fill = this.idtops[id];\n          }\n        }\n      }\n      if (key === \"points\") {\n        if (this.currentItem.type == \"polygon\") {\n          this.currentItem.path = \"M\" + value + \"z\";\n        }\n      }\n      if (key === \"d\") {\n        if (this.currentItem.type == \"path\") {\n          this.currentItem.path = value;\n        }\n      }\n      if (key === \"xlink:href\") {\n        if (this.currentItem.type == \"image\") {\n          this.currentItem.src = value;\n        }\n      }\n    }\n  }\n\n  addToItems() {\n    this.items.push(this.currentItem);\n  }\n}\n\nexport default SVGParse;\n\nfunction angle(\n  x1: number,\n  y1: number,\n  x2: number,\n  y2: number,\n  x3?: number,\n  y3?: number\n): number {\n  if (typeof x3 == \"undefined\" || typeof y3 == \"undefined\") {\n    const x = x1 - x2;\n    const y = y1 - y2;\n    if (!x && !y) {\n      return 0;\n    }\n    return (180 + (Math.atan2(-y, -x) * 180) / Math.PI + 360) % 360;\n  } else {\n    return angle(x1, y1, x3, y3) - angle(x2, y2, x3, y3);\n  }\n}\n\nfunction applyStyle(\n  css: string,\n  el: { [index: string]: any },\n  SVGAttributeRange?: string[]\n) {\n  const rules = (css + \"\").split(\";\");\n  const trim = /^\\s+|\\s+$/g;\n  for (let i = 0, ii = rules.length; i < ii; i++) {\n    const pair = rules[i].split(\":\");\n    const key = pair[0].replace(trim, \"\").replace(/[A-Z]/g, function (letter) {\n      return \"-\" + letter.toLowerCase();\n    });\n    if (!SVGAttributeRange || SVGAttributeRange.includes(key)) {\n      el[key] = pair[1].replace(trim, \"\");\n    }\n  }\n}\n\nconst SVGAttributeRange: string[] = [\n  \"id\",\n  \"class\",\n  \"viewBox\",\n  \"width\",\n  \"height\",\n  \"x\",\n  \"y\",\n  \"cx\",\n  \"cy\",\n  \"r\",\n  \"rx\",\n  \"ry\",\n\n  \"cursor\",\n  \"opacity\",\n  \"src\",\n\n  \"fill\",\n  \"fill-opacity\",\n\n  \"stroke\",\n  \"stroke-dasharray\",\n  \"stroke-linecap\",\n  \"stroke-linejoin\",\n  \"stroke-miterlimit\",\n  \"stroke-opacity\",\n  \"stroke-width\",\n\n  \"text-anchor\",\n\n  \"font\",\n  \"font-family\",\n  \"font-size\",\n  \"font-style\",\n  \"font-weight\",\n  \"letter-spacing\"\n];\n","import {\n  lerps,\n  maxDotNumber,\n  withinErrorMarginNumber\n} from \"@zyzgroup/core-common\";\nimport { Matrix, angle, distance } from \"../../../math\";\nimport { YZCanvasContext } from \"../canvas\";\nimport {\n  absolutizeSVGPath,\n  normalizeSVGPath,\n  parseSVGPath,\n  SVGPathDataToD,\n  type SVGParsedPathData,\n  a2c,\n  l2c,\n  q2c\n} from \"../svg\";\nimport L from \"./L\";\nimport CubicBezier from \"./CubicBezier\";\nimport QuadraticBezier from \"./QuadraticBezier\";\nimport Arc from \"./Arc\";\n\n// 连续的曲线，在坐标系的绝对值\nexport class PathD {\n  // 在坐标系的绝对值\n  public prevPathX = 0;\n  public prevPathY = 0;\n\n  // 提高性能, 没更新时使用缓存值\n  private isUpdatedSVGPathData = true;\n  private isUpdatedSVGPathD = true;\n  private isUpdatedBoundingClientRect = true;\n  private isUpdatedPolymorphPoints = true;\n  private isUpdatedTotalLength = true;\n\n  public normalizedLines: CubicBezier[] = [];\n\n  // d = \"M0,0\"\n  // d = [['C',1,2,3,4,5,6]]\n  constructor(d?: string | SVGParsedPathData[]) {\n    const data = typeof d == \"string\" ? parseSVGPath(d) : d || [];\n    /// paths 只包含 M 或 C 语句\n    const paths = normalizeSVGPath(absolutizeSVGPath(data));\n    for (let i = 0, count = paths.length; i < count; i++) {\n      const path = paths[i];\n      const command = path[0];\n      if (command == \"M\") {\n        this.prevPathX = path[1];\n        this.prevPathY = path[2];\n      } else {\n        this._appendLine(\n          new CubicBezier({\n            x: this.prevPathX,\n            y: this.prevPathY,\n            c1x: path[1],\n            c1y: path[2],\n            c2x: path[3],\n            c2y: path[4],\n            toX: path[5],\n            toY: path[6]\n          })\n        );\n      }\n    }\n  }\n\n  private _appendLine(line: L) {\n    this.isUpdatedSVGPathData = true;\n    this.isUpdatedSVGPathD = true;\n    this.isUpdatedBoundingClientRect = true;\n    this.isUpdatedPolymorphPoints = true;\n    this.isUpdatedTotalLength = true;\n    if (line instanceof Arc) {\n      const curves = a2c(\n        this.prevPathX,\n        this.prevPathY,\n        line.toX,\n        line.toY,\n        line.largeArcFlag,\n        line.sweepFlag,\n        line.rx,\n        line.ry,\n        line.xAxisRotate\n      );\n      curves.forEach((curve) => {\n        const [x0, y0, x1, y1, x2, y2, x, y] = curve;\n        this.normalizedLines.push(\n          new CubicBezier({\n            x: this.prevPathX,\n            y: this.prevPathY,\n            c1x: x1,\n            c1y: y1,\n            c2x: x2,\n            c2y: y2,\n            toX: x,\n            toY: y\n          })\n        );\n        this.prevPathX = x;\n        this.prevPathY = y;\n      });\n      return;\n    }\n    if (line instanceof CubicBezier) {\n      this.normalizedLines.push(line.clone());\n      this.prevPathX = line.toX;\n      this.prevPathY = line.toY;\n      return;\n    }\n    let x1, y1, x2, y2, toX, toY;\n    if (line instanceof QuadraticBezier) {\n      [x1, y1, x2, y2, toX, toY] = q2c(\n        this.prevPathX,\n        this.prevPathY,\n        line.cx,\n        line.cy,\n        line.toX,\n        line.toY\n      );\n    } else {\n      // L\n      [x1, y1, x2, y2, toX, toY] = l2c(\n        this.prevPathX,\n        this.prevPathY,\n        line.toX,\n        line.toY\n      );\n    }\n    this.normalizedLines.push(\n      new CubicBezier({\n        x: this.prevPathX,\n        y: this.prevPathY,\n        c1x: x1,\n        c1y: y1,\n        c2x: x2,\n        c2y: y2,\n        toX: toX,\n        toY: toY\n      })\n    );\n    this.prevPathX = toX;\n    this.prevPathY = toY;\n  }\n\n  public static fromPolymorphPoints(points: number[]): PathD {\n    const d = new PathD();\n    const count = points.length;\n    if (count) {\n      d.prevPathX = points[0];\n      d.prevPathY = points[1];\n      for (let k = 2; k + 5 < count; k += 6) {\n        d._appendLine(\n          new CubicBezier({\n            x: d.prevPathX,\n            y: d.prevPathY,\n            c1x: points[k],\n            c1y: points[k + 1],\n            c2x: points[k + 2],\n            c2y: points[k + 3],\n            toX: points[k + 4],\n            toY: points[k + 5]\n          })\n        );\n      }\n    }\n    return d;\n  }\n\n  public static fromLines(lines: L[]): PathD {\n    const d = new PathD();\n    const count = lines.length;\n    if (count) {\n      d.prevPathX = lines[0].x;\n      d.prevPathY = lines[0].y;\n      for (let i = 0; i < count; i++) {\n        d._appendLine(lines[i]);\n      }\n    }\n    return d;\n  }\n\n  public clone(): PathD {\n    return PathD.fromLines(this.normalizedLines);\n  }\n\n  // 在坐标系的绝对值\n  private cachedSVGPathData: SVGParsedPathData[] = [];\n  public toSVGPathData(): SVGParsedPathData[] {\n    if (this.isUpdatedSVGPathData) {\n      const data: SVGParsedPathData[] = [];\n      for (let i = 0, count = this.normalizedLines.length; i < count; i++) {\n        const line = this.normalizedLines[i];\n        if (i == 0) {\n          data.push([\"M\", line.x, line.y]);\n        }\n        data.push(...line.toSVGPathData());\n      }\n      // data.push([\"z\"]);\n      this.cachedSVGPathData = data;\n      this.isUpdatedSVGPathData = false;\n    }\n    return this.cachedSVGPathData;\n  }\n\n  // 外部使用\n  private cachedSVGPathD = \"\";\n  public toSVGPathD(): string {\n    if (this.isUpdatedSVGPathD) {\n      this.cachedSVGPathD = SVGPathDataToD(this.toSVGPathData());\n      this.isUpdatedSVGPathD = false;\n    }\n    return this.cachedSVGPathD;\n  }\n\n  // 外部使用\n  public toCanvasContext(ctx: YZCanvasContext) {\n    ctx.beginPath();\n    for (let i = 0, count = this.normalizedLines.length; i < count; i++) {\n      const line = this.normalizedLines[i];\n      if (i == 0) {\n        ctx.moveTo(line.x, line.y);\n      }\n      line.toCanvasContext(ctx);\n    }\n    // ctx.closePath();\n  }\n\n  // 外部使用\n  // 相对坐标系原点 - 坐标系没有考虑 transform : translate rotate scale\n  private cachedBoundingClientRect = {\n    x: 0,\n    y: 0,\n    width: 0,\n    height: 0\n  };\n  public getBoundingClientRect(dot = 2) {\n    if (this.isUpdatedBoundingClientRect) {\n      const X: number[] = [];\n      const Y: number[] = [];\n      this.normalizedLines.forEach((l) => {\n        const rect = l.getBoundingClientRect(dot);\n        X.push(rect.x, rect.x + rect.width);\n        Y.push(rect.y, rect.y + rect.height);\n      });\n      if (X.length == 0 || Y.length == 0) {\n        this.cachedBoundingClientRect = { x: 0, y: 0, width: 0, height: 0 };\n      } else {\n        const xmin = Math.min(...X);\n        const ymin = Math.min(...Y);\n        const xmax = Math.max(...X);\n        const ymax = Math.max(...Y);\n        this.cachedBoundingClientRect = {\n          x: maxDotNumber(xmin, dot),\n          y: maxDotNumber(ymin, dot),\n          width: maxDotNumber(xmax - xmin, dot),\n          height: maxDotNumber(ymax - ymin, dot)\n        };\n      }\n      this.isUpdatedBoundingClientRect = false;\n    }\n    return this.cachedBoundingClientRect;\n  }\n\n  // 相对坐标系原点 - 坐标系没有考虑 transform : translate rotate scale\n  public getBoundingClientRectCenter(dot = 2) {\n    const rect = this.getBoundingClientRect(dot);\n    return {\n      x: maxDotNumber(rect.x + rect.width * 0.5, dot),\n      y: maxDotNumber(rect.y + rect.height * 0.5, dot)\n    };\n  }\n\n  // 通过 DrawContext shape.m 获得 新的 PathD\n  public transform(options: {\n    m?: Matrix | DOMMatrix;\n    x?: number;\n    y?: number;\n    centerX?: number;\n    centerY?: number;\n    degree?: number;\n    scaleX?: number;\n    scaleY?: number;\n  }): PathD {\n    let m: Matrix | DOMMatrix;\n    if (options.m) {\n      m = options.m;\n    } else {\n      // 移动的是坐标系\n      // the order of these are important\n      m = new Matrix();\n      m.translate(options.x || 0, options.y || 0);\n      m.rotate(options.degree || 0, options.centerX, options.centerY);\n      m.scale(\n        options.scaleX || 1,\n        options.scaleY || 1,\n        options.centerX,\n        options.centerY\n      );\n    }\n    if (!m.isIdentity) {\n      return PathD.fromLines(\n        this.normalizedLines.map((l) => {\n          let x = l.x;\n          let y = l.y;\n          let c1x = l.c1x;\n          let c1y = l.c1y;\n          let c2x = l.c2x;\n          let c2y = l.c2y;\n          let toX = l.toX;\n          let toY = l.toY;\n          ({ x: x, y: y } = m.transformPoint({ x: x, y: y }));\n          ({ x: c1x, y: c1y } = m.transformPoint({ x: c1x, y: c1y }));\n          ({ x: c2x, y: c2y } = m.transformPoint({ x: c2x, y: c2y }));\n          ({ x: toX, y: toY } = m.transformPoint({ x: toX, y: toY }));\n          return new CubicBezier({ x, y, c1x, c1y, c2x, c2y, toX, toY });\n        })\n      );\n    } else {\n      return this.clone();\n      // return this;\n    }\n  }\n\n  // returns length in pixels\n  private cachedTotalLength?: number;\n  public getTotalLength(): number {\n    if (\n      !(typeof this.cachedTotalLength == \"number\") ||\n      this.isUpdatedTotalLength\n    ) {\n      this.cachedTotalLength = Math.round(\n        this.normalizedLines.reduce((acc, l) => (acc += l.length()), 0)\n      ); // 实际测试值：1718.289461119151\n      // const el = createSvgPath(this.toSVGPathD());\n      // return el.getTotalLength(); // 实际测试值：1718.2906494140625\n      this.isUpdatedTotalLength = false;\n    }\n    return this.cachedTotalLength;\n  }\n\n  // 获取插值方法1\n  public getPointAtLength(length: number): {\n    x: number;\n    y: number;\n    alpha: number; // degree: angle of derivative\n  } {\n    let len = 0;\n    let l = 0;\n    const linesCount = this.normalizedLines.length;\n    for (let i = 0; i < linesCount; i++) {\n      const p = this.normalizedLines[i];\n      l = p.length();\n      if (len + l >= length) {\n        return p.getPointAtSegmentLength(length - len);\n      }\n      len += l;\n    }\n    return this.normalizedLines[linesCount - 1].getPointAtSegmentLength(l); // 实际测试值：{x: 69.12001660070015, y: 139.8368628028231}\n    // const el = createSvgPath(this.toSVGPathD());\n    // return el.getPointAtLength(length); // 实际测试值：{x: 69.12151336669922, y: 139.8350830078125}\n  }\n\n  // 获取插值方法2 t (0.0 to 1.0) : The fraction of the overall duration of the path\n  public interpolate(t: number): { x: number; y: number } {\n    const linesCount = this.normalizedLines.length;\n    if (linesCount === 0) {\n      return { x: 0, y: 0 };\n    } else if (linesCount === 1) {\n      return this.normalizedLines[0].interpolate(t);\n    } else {\n      let ratio = t * linesCount;\n      let path = this.normalizedLines[0];\n      ratio--;\n      if (ratio > 1) {\n        for (let i = 1; i < linesCount; i++) {\n          path = this.normalizedLines[i];\n          if (ratio > 1) {\n            ratio -= 1;\n          } else {\n            break;\n          }\n        }\n      }\n      return path.interpolate(ratio);\n    }\n  }\n\n  public getSubPathD(\n    fromLength: number,\n    toLength: number,\n    margin = 1e-6\n  ): PathD {\n    const p = this.getSubPathDAtLength(toLength, true);\n    if (withinErrorMarginNumber(margin)(fromLength, 0)) {\n      return p;\n    } else {\n      return p.getSubPathDAtLength(fromLength, false);\n    }\n  }\n\n  private getSubPathDAtLength(\n    length: number, // 以 length 为点 一分为二\n    getStart = false // 返回 一分为二的 前面一部分 还是 后面一部分\n  ): PathD {\n    const sp = new PathD();\n    let len = 0;\n    let isReached = false;\n    for (let i = 0, ii = this.normalizedLines.length; i < ii; i++) {\n      const line = this.normalizedLines[i];\n      if (i == 0) {\n        sp.prevPathX = line.x;\n        sp.prevPathY = line.y;\n      }\n      const l = line.length();\n      if (len + l > length && !isReached) {\n        // 从 0 到 length 的 开头部分\n        isReached = true;\n        const point = line.getPointAtSegmentLength(length - len);\n        sp._appendLine(\n          new CubicBezier({\n            x: sp.prevPathX,\n            y: sp.prevPathY,\n            c1x: point.start.x,\n            c1y: point.start.y,\n            c2x: point.m.x,\n            c2y: point.m.y,\n            toX: point.x,\n            toY: point.y\n          })\n        );\n        if (getStart) {\n          return sp;\n        }\n        // 从 length 到 end 的 结尾部分\n        sp.normalizedLines = [];\n        sp._appendLine(\n          new CubicBezier({\n            x: sp.prevPathX,\n            y: sp.prevPathY,\n            c1x: point.n.x,\n            c1y: point.n.y,\n            c2x: point.end.x,\n            c2y: point.end.y,\n            toX: line.toX,\n            toY: line.toY\n          })\n        );\n        len += l;\n        continue;\n      }\n      sp._appendLine(line);\n      len += l;\n    }\n    return sp;\n  }\n\n  public closestPoint(\n    pointX: number,\n    pointY: number\n  ): {\n    point: {\n      x: number;\n      y: number;\n    };\n    rotation: number;\n    distance: number;\n  } {\n    const pathLength = this.getTotalLength();\n    let best = { x: pointX, y: pointY };\n    let bestLength = 0;\n    let bestDistance = Infinity;\n    let precision = 8;\n\n    // linear scan for coarse approximation\n    for (\n      let scanLength = 0;\n      scanLength <= pathLength;\n      scanLength += precision\n    ) {\n      const scan = this.getPointAtLength(scanLength);\n      const scanDistance =\n        (pointX - scan.x) * (pointX - scan.x) +\n        (pointY - scan.y) * (pointY - scan.y);\n      if (scanDistance < bestDistance) {\n        best = scan;\n        bestLength = scanLength;\n        bestDistance = scanDistance;\n      }\n    }\n\n    // binary search for precise estimate\n    precision /= 2;\n    while (precision > 0.5) {\n      const beforeLength = bestLength - precision;\n      const before = this.getPointAtLength(beforeLength);\n      const beforeDistance =\n        (pointX - before.x) * (pointX - before.x) +\n        (pointY - before.y) * (pointY - before.y);\n      const afterLength = bestLength + precision;\n      const after = this.getPointAtLength(afterLength);\n      const afterDistance =\n        (pointX - after.x) * (pointX - after.x) +\n        (pointY - after.y) * (pointY - after.y);\n      if (beforeLength >= 0 && beforeDistance < bestDistance) {\n        best = before;\n        bestLength = beforeLength;\n        bestDistance = beforeDistance;\n      } else if (afterLength <= pathLength && afterDistance < bestDistance) {\n        best = after;\n        bestLength = afterLength;\n        bestDistance = afterDistance;\n      } else {\n        precision /= 2;\n      }\n    }\n\n    const p = this.getPointAtLength(\n      bestLength + (bestLength === pathLength ? -0.1 : 0.1)\n    );\n\n    return {\n      point: best,\n      rotation:\n        bestLength >= pathLength\n          ? angle(p.x, p.y, best.x, best.y)\n          : angle(best.x, best.y, p.x, p.y),\n      distance: Math.sqrt(bestDistance)\n    };\n  }\n\n  // 获得 Polymorph 要用的所有的点\n  private cachedPolymorphPoints: number[] = [];\n  public getPolymorphPoints(): number[] {\n    if (this.isUpdatedPolymorphPoints) {\n      if (this.normalizedLines.length) {\n        const firstLine = this.normalizedLines[0];\n        this.cachedPolymorphPoints = [firstLine.x, firstLine.y].concat(\n          this.normalizedLines.reduce(\n            (acc, l) => acc.concat([l.c1x, l.c1y, l.c2x, l.c2y, l.toX, l.toY]),\n            [] as number[]\n          )\n        );\n      }\n      this.isUpdatedPolymorphPoints = false;\n    }\n    return [...this.cachedPolymorphPoints];\n  }\n\n  public getPolymorphPointsPerimeter(): number {\n    let p = 0;\n    const pts = this.getPolymorphPoints();\n    const n = pts.length;\n    if (n) {\n      let x2 = pts[n - 2];\n      let y2 = pts[n - 1];\n      for (let i = 0; i < n; i += 6) {\n        p += distance(pts[i], pts[i + 1], x2, y2);\n        x2 = pts[i];\n        y2 = pts[i + 1];\n      }\n    }\n    return Math.floor(p);\n  }\n\n  // 扩充 PolymorphPoints 到对应数量的点，返回新 PathD\n  public expendToPolymorphPoints(maxPoints: number[]): PathD {\n    const maxCount = maxPoints.length;\n    const ns = this.getPolymorphPoints();\n    const nsLength = ns.length;\n    if (nsLength) {\n      const points: SVGParsedPathData[] = [];\n      let needAddedCount = maxCount - nsLength;\n      const ratio = Math.ceil(maxCount / nsLength);\n      points.push([\"M\", ns[0], ns[1]]);\n      let k = 2;\n      while (k + 5 <= nsLength - 1) {\n        const c1x = ns[k++];\n        const c1y = ns[k++];\n        const c2x = ns[k++];\n        const c2y = ns[k++];\n        const x = ns[k++];\n        const y = ns[k++];\n        points.push([\"C\", c1x, c1y, c2x, c2y, x, y]);\n        let f = 0;\n        while (f < ratio && needAddedCount > 0) {\n          points.push([\"C\", x, y, x, y, x, y]);\n          needAddedCount -= 6;\n          f++;\n        }\n      }\n      return new PathD(points);\n    } else {\n      return PathD.fromPolymorphPoints(maxPoints);\n    }\n  }\n\n  // 返回 从 leftPathD 到 rightPathD 的 插值函数\n  public static getInterpolator(\n    left: PathD,\n    right: PathD\n  ): (\n    t: number // t (0.0 to 1.0)\n  ) => PathD {\n    return (t: number) => {\n      const m = withinErrorMarginNumber(Number.EPSILON);\n      if (m(t, 0)) {\n        return left.clone();\n      }\n      if (m(t, 1)) {\n        return right.clone();\n      }\n      return PathD.fromPolymorphPoints(\n        lerps(left.getPolymorphPoints(), right.getPolymorphPoints(), t).map(\n          (n) => maxDotNumber(n, 2)\n        )\n      );\n    };\n  }\n}\n\nexport default PathD;\n","// Unpack entities lookup where the numbers are in radix 32 to reduce the size\n// entity mapping courtesy of tinymce\nconst namedEntities = createNamedToNumberedLookup(\n  \"50,nbsp,51,iexcl,52,cent,53,pound,54,curren,55,yen,56,brvbar,57,sect,58,uml,59,copy,\" +\n    \"5a,ordf,5b,laquo,5c,not,5d,shy,5e,reg,5f,macr,5g,deg,5h,plusmn,5i,sup2,5j,sup3,5k,acute,\" +\n    \"5l,micro,5m,para,5n,middot,5o,cedil,5p,sup1,5q,ordm,5r,raquo,5s,frac14,5t,frac12,5u,frac34,\" +\n    \"5v,iquest,60,Agrave,61,Aacute,62,Acirc,63,Atilde,64,Auml,65,Aring,66,AElig,67,Ccedil,\" +\n    \"68,Egrave,69,Eacute,6a,Ecirc,6b,Euml,6c,Igrave,6d,Iacute,6e,Icirc,6f,Iuml,6g,ETH,6h,Ntilde,\" +\n    \"6i,Ograve,6j,Oacute,6k,Ocirc,6l,Otilde,6m,Ouml,6n,times,6o,Oslash,6p,Ugrave,6q,Uacute,\" +\n    \"6r,Ucirc,6s,Uuml,6t,Yacute,6u,THORN,6v,szlig,70,agrave,71,aacute,72,acirc,73,atilde,74,auml,\" +\n    \"75,aring,76,aelig,77,ccedil,78,egrave,79,eacute,7a,ecirc,7b,euml,7c,igrave,7d,iacute,7e,icirc,\" +\n    \"7f,iuml,7g,eth,7h,ntilde,7i,ograve,7j,oacute,7k,ocirc,7l,otilde,7m,ouml,7n,divide,7o,oslash,\" +\n    \"7p,ugrave,7q,uacute,7r,ucirc,7s,uuml,7t,yacute,7u,thorn,7v,yuml,ci,fnof,sh,Alpha,si,Beta,\" +\n    \"sj,Gamma,sk,Delta,sl,Epsilon,sm,Zeta,sn,Eta,so,Theta,sp,Iota,sq,Kappa,sr,Lambda,ss,Mu,\" +\n    \"st,Nu,su,Xi,sv,Omicron,t0,Pi,t1,Rho,t3,Sigma,t4,Tau,t5,Upsilon,t6,Phi,t7,Chi,t8,Psi,\" +\n    \"t9,Omega,th,alpha,ti,beta,tj,gamma,tk,delta,tl,epsilon,tm,zeta,tn,eta,to,theta,tp,iota,\" +\n    \"tq,kappa,tr,lambda,ts,mu,tt,nu,tu,xi,tv,omicron,u0,pi,u1,rho,u2,sigmaf,u3,sigma,u4,tau,\" +\n    \"u5,upsilon,u6,phi,u7,chi,u8,psi,u9,omega,uh,thetasym,ui,upsih,um,piv,812,bull,816,hellip,\" +\n    \"81i,prime,81j,Prime,81u,oline,824,frasl,88o,weierp,88h,image,88s,real,892,trade,89l,alefsym,\" +\n    \"8cg,larr,8ch,uarr,8ci,rarr,8cj,darr,8ck,harr,8dl,crarr,8eg,lArr,8eh,uArr,8ei,rArr,8ej,dArr,\" +\n    \"8ek,hArr,8g0,forall,8g2,part,8g3,exist,8g5,empty,8g7,nabla,8g8,isin,8g9,notin,8gb,ni,8gf,prod,\" +\n    \"8gh,sum,8gi,minus,8gn,lowast,8gq,radic,8gt,prop,8gu,infin,8h0,ang,8h7,and,8h8,or,8h9,cap,8ha,cup,\" +\n    \"8hb,int,8hk,there4,8hs,sim,8i5,cong,8i8,asymp,8j0,ne,8j1,equiv,8j4,le,8j5,ge,8k2,sub,8k3,sup,8k4,\" +\n    \"nsub,8k6,sube,8k7,supe,8kl,oplus,8kn,otimes,8l5,perp,8m5,sdot,8o8,lceil,8o9,rceil,8oa,lfloor,8ob,\" +\n    \"rfloor,8p9,lang,8pa,rang,9ea,loz,9j0,spades,9j3,clubs,9j5,hearts,9j6,diams,ai,OElig,aj,oelig,b0,\" +\n    \"Scaron,b1,scaron,bo,Yuml,m6,circ,ms,tilde,802,ensp,803,emsp,809,thinsp,80c,zwnj,80d,zwj,80e,lrm,\" +\n    \"80f,rlm,80j,ndash,80k,mdash,80o,lsquo,80p,rsquo,80q,sbquo,80s,ldquo,80t,rdquo,80u,bdquo,810,dagger,\" +\n    \"811,Dagger,81g,permil,81p,lsaquo,81q,rsaquo,85c,euro\",\n  32\n);\n\nfunction createNamedToNumberedLookup(itemsString: string, radix = 10) {\n  const lookup = {} as Record<string, string>;\n  const items = itemsString.split(\",\");\n  // Map from named to numbered entities.\n  for (let i = 0; i < items.length; i += 2) {\n    const entity = \"&\" + items[i + 1] + \";\";\n    const base10 = parseInt(items[i], radix);\n    lookup[entity] = \"&#\" + base10 + \";\";\n  }\n  // FF and IE need to create a regex from hex values ie &nbsp; == \\xa0\n  lookup[\"\\\\xa0\"] = \"&#160;\";\n  return lookup;\n}\n\nfunction format(str: string, args: Record<string, string | number>) {\n  const keys = Object.keys(args);\n  for (let i = 0; i < keys.length; i++) {\n    str = str.replace(\n      new RegExp(\"{\" + keys[i] + \"}\", \"gi\"),\n      \"\" + args[keys[i]]\n    );\n  }\n  return str;\n}\n\nfunction randomString(holder: { [x: string]: any }) {\n  let randomstring, i;\n  if (!holder) {\n    throw new Error(\n      \"cannot create a random attribute name for an undefined object\"\n    );\n  }\n  const chars = \"ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz\";\n  randomstring = \"\";\n  do {\n    randomstring = \"\";\n    for (i = 0; i < 12; i++) {\n      randomstring += chars[Math.floor(Math.random() * chars.length)];\n    }\n  } while (holder[randomstring]);\n  return randomstring;\n}\n\n// helper function to map canvas-textAlign to svg-textAnchor\nfunction getTextAnchor(textAlign: string) {\n  // TODO: support rtl languages\n  const mapping = {\n    left: \"start\",\n    right: \"end\",\n    center: \"middle\",\n    start: \"start\",\n    end: \"end\"\n  } as Record<string, string>;\n  return mapping[textAlign] || mapping.start;\n}\n\n// helper function to map canvas-textBaseline to svg-dominantBaseline\nfunction getDominantBaseline(textBaseline: string) {\n  // INFO: not supported in all browsers\n  const mapping = {\n    alphabetic: \"alphabetic\",\n    hanging: \"hanging\",\n    top: \"text-before-edge\",\n    bottom: \"text-after-edge\",\n    middle: \"central\"\n  } as Record<string, string>;\n  return mapping[textBaseline] || mapping.alphabetic;\n}\n\n// Some basic mappings for attributes and default values.\nconst STYLES: Record<\n  string,\n  {\n    svgAttr?: string; // corresponding svg attribute\n    canvas?: string | number | string[] | number[]; // canvas default\n    svg?: string | number | null; // svg default\n    apply?: string; // apply on stroke() or fill()\n  }\n> = {\n  strokeStyle: {\n    svgAttr: \"stroke\",\n    canvas: \"#000000\",\n    svg: \"none\",\n    apply: \"stroke\"\n  },\n  fillStyle: {\n    svgAttr: \"fill\",\n    canvas: \"#000000\",\n    svg: null, // svg default is black, but we need to special case this to handle canvas stroke without fill\n    apply: \"fill\"\n  },\n  lineCap: {\n    svgAttr: \"stroke-linecap\",\n    canvas: \"butt\",\n    svg: \"butt\",\n    apply: \"stroke\"\n  },\n  lineJoin: {\n    svgAttr: \"stroke-linejoin\",\n    canvas: \"miter\",\n    svg: \"miter\",\n    apply: \"stroke\"\n  },\n  miterLimit: {\n    svgAttr: \"stroke-miterlimit\",\n    canvas: 10,\n    svg: 4,\n    apply: \"stroke\"\n  },\n  lineWidth: {\n    svgAttr: \"stroke-width\",\n    canvas: 1,\n    svg: 1,\n    apply: \"stroke\"\n  },\n  globalAlpha: {\n    svgAttr: \"opacity\",\n    canvas: 1,\n    svg: 1,\n    apply: \"fill stroke\"\n  },\n  font: {\n    // font converts to multiple svg attributes, there is custom logic for this\n    canvas: \"10px sans-serif\"\n  },\n  shadowColor: {\n    canvas: \"#000000\"\n  },\n  shadowOffsetX: {\n    canvas: 0\n  },\n  shadowOffsetY: {\n    canvas: 0\n  },\n  shadowBlur: {\n    canvas: 0\n  },\n  textAlign: {\n    canvas: \"start\"\n  },\n  textBaseline: {\n    canvas: \"alphabetic\"\n  },\n  lineDash: {\n    svgAttr: \"stroke-dasharray\",\n    canvas: [],\n    svg: null,\n    apply: \"stroke\"\n  },\n  lineDashOffset: {\n    svgAttr: \"stroke-dashoffset\",\n    canvas: 0,\n    svg: 0,\n    apply: \"stroke\"\n  }\n};\n\nexport class CustomCanvasGradient {\n  __root: SVGElement;\n  __ctx: CustomCanvasContext;\n  constructor(gradientNode: SVGElement, ctx: CustomCanvasContext) {\n    this.__root = gradientNode;\n    this.__ctx = ctx;\n  }\n\n  /**\n   * Adds a color stop to the gradient root\n   */\n  addColorStop(offset: number, color: string) {\n    const stop = this.__ctx.__createElement(\"stop\");\n    stop.setAttribute(\"offset\", \"\" + offset);\n    if (color.indexOf(\"rgba\") !== -1) {\n      // separate alpha value, since webkit can't handle it\n      const regex =\n        /rgba\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d?\\.?\\d*)\\s*\\)/gi;\n      const matches = regex.exec(color);\n      if (matches) {\n        stop.setAttribute(\n          \"stop-color\",\n          format(\"rgb({r},{g},{b})\", {\n            r: matches[1],\n            g: matches[2],\n            b: matches[3]\n          })\n        );\n        stop.setAttribute(\"stop-opacity\", matches[4]);\n      }\n    } else {\n      stop.setAttribute(\"stop-color\", color);\n    }\n    this.__root.appendChild(stop);\n  }\n}\n\nexport class CustomCanvasPattern {\n  __root: SVGElement;\n  __ctx: CustomCanvasContext;\n  constructor(pattern: SVGElement, ctx: CustomCanvasContext) {\n    this.__root = pattern;\n    this.__ctx = ctx;\n  }\n}\n\n/**\n * The mock canvas context\n */\nexport class CustomCanvasContext {\n  [index: keyof typeof STYLES]: any;\n\n  __document: Document = document;\n  __canvas: HTMLCanvasElement;\n  __ctx: CanvasRenderingContext2D;\n  width: number;\n  height: number;\n  __styleStack: Record<string, any>[];\n  __groupStack: SVGElement[];\n  __rootSVG: SVGElement;\n  __ids: Record<string, string>;\n  __SVGdefs: SVGDefsElement;\n  __currentElement: SVGElement;\n  __currentElementsToStyle: {\n    element: SVGElement;\n    children: SVGElement[];\n  } | null = null;\n\n  constructor({\n    canvas,\n    width = 500,\n    height = 500\n  }: {\n    canvas?: HTMLCanvasElement;\n    width?: number;\n    height?: number;\n  }) {\n    if (canvas) {\n      this.__canvas = canvas;\n      this.__ctx = canvas.getContext(\"2d\") as CanvasRenderingContext2D;\n    } else {\n      this.__canvas = this.__document.createElement(\"canvas\");\n      this.__ctx = this.__canvas.getContext(\"2d\") as CanvasRenderingContext2D;\n    }\n\n    this.width = width || canvas?.width || 0;\n    this.height = height || canvas?.height || 0;\n\n    this.__setDefaultStyles();\n    this.__styleStack = [this.__getStyleState()];\n    this.__groupStack = [];\n\n    this.__rootSVG = this.__document.createElementNS(\n      \"http://www.w3.org/2000/svg\",\n      \"svg\"\n    );\n    this.__rootSVG.setAttribute(\"version\", \"1.1\");\n    this.__rootSVG.setAttribute(\"xmlns\", \"http://www.w3.org/2000/svg\");\n    this.__rootSVG.setAttributeNS(\n      \"http://www.w3.org/2000/xmlns/\",\n      \"xmlns:xlink\",\n      \"http://www.w3.org/1999/xlink\"\n    );\n    this.__rootSVG.setAttribute(\"width\", \"\" + this.width);\n    this.__rootSVG.setAttribute(\"height\", \"\" + this.height);\n\n    // make sure we don't generate the same ids in defs\n    this.__ids = {};\n\n    // defs tag\n    this.__SVGdefs = this.__document.createElementNS(\n      \"http://www.w3.org/2000/svg\",\n      \"defs\"\n    );\n    this.__rootSVG.appendChild(this.__SVGdefs);\n\n    // also add a group child. the svg element can't use the transform attribute\n    this.__currentElement = this.__document.createElementNS(\n      \"http://www.w3.org/2000/svg\",\n      \"g\"\n    );\n    this.__rootSVG.appendChild(this.__currentElement);\n  }\n\n  /**\n   * Applies default canvas styles to the context\n   */\n  __setDefaultStyles() {\n    // default 2d canvas context properties see: http://www.w3.org/TR/2dcontext/\n    const keys = Object.keys(STYLES);\n    for (let i = 0, length = keys.length; i < length; i++) {\n      const key = keys[i];\n      this[key] = STYLES[key].canvas;\n    }\n  }\n\n  /**\n   * Gets the current style state\n   */\n  __getStyleState() {\n    const styleState: Record<string, any> = {};\n    const keys = Object.keys(STYLES);\n    for (let i = 0, length = keys.length; i < length; i++) {\n      const key = keys[i];\n      styleState[key] = this[key];\n    }\n    return styleState;\n  }\n\n  /**\n   * Applies styles on restore\n   */\n  __applyStyleState(styleState: Record<string, any>) {\n    const keys = Object.keys(styleState);\n    for (let i = 0, length = keys.length; i < length; i++) {\n      const key = keys[i];\n      this[key] = styleState[key];\n    }\n  }\n\n  /**\n   * Creates the specified svg element\n   */\n  __createElement(\n    elementName: string,\n    properties: Record<string, any> = {},\n    resetFill = false\n  ) {\n    const element = this.__document.createElementNS(\n      \"http://www.w3.org/2000/svg\",\n      elementName\n    );\n    const keys = Object.keys(properties);\n    if (resetFill) {\n      // if fill or stroke is not specified, the svg element should not display. By default SVG's fill is black.\n      element.setAttribute(\"fill\", \"none\");\n      element.setAttribute(\"stroke\", \"none\");\n    }\n    for (let i = 0; i < keys.length; i++) {\n      const key = keys[i];\n      element.setAttribute(key, properties[key]);\n    }\n    return element;\n  }\n\n  /**\n   * Apples the current styles to the current SVG element. On \"CustomCanvasContext.fill\" or \"CustomCanvasContext.stroke\"\n   */\n  __applyStyleToCurrentElement(type: \"fill\" | \"stroke\") {\n    let currentElement = this.__currentElement;\n    const currentStyleGroup = this.__currentElementsToStyle;\n    if (currentStyleGroup) {\n      currentElement.setAttribute(type, \"\");\n      currentElement = currentStyleGroup.element;\n      currentStyleGroup.children.forEach((node: SVGElement) => {\n        node.setAttribute(type, \"\");\n      });\n    }\n\n    const keys = Object.keys(STYLES);\n    for (let i = 0; i < keys.length; i++) {\n      const style = STYLES[keys[i]];\n      const value = this[keys[i]];\n      if (style.apply) {\n        if (value instanceof CustomCanvasPattern) {\n          if (value.__ctx) {\n            // copy over defs\n            while (value.__ctx.__SVGdefs.childNodes.length) {\n              const id = (\n                value.__ctx.__SVGdefs.childNodes[0] as SVGElement\n              ).getAttribute(\"id\") as string;\n              this.__ids[id] = id;\n              this.__SVGdefs.appendChild(value.__ctx.__SVGdefs.childNodes[0]);\n            }\n          }\n          currentElement.setAttribute(\n            style.apply,\n            format(\"url(#{id})\", {\n              id: value.__root.getAttribute(\"id\") as string\n            })\n          );\n        } else if (value instanceof CustomCanvasGradient) {\n          currentElement.setAttribute(\n            style.apply,\n            format(\"url(#{id})\", {\n              id: value.__root.getAttribute(\"id\") as string\n            })\n          );\n        } else if (style.apply.indexOf(type) !== -1 && style.svg !== value) {\n          if (\n            (style.svgAttr === \"stroke\" || style.svgAttr === \"fill\") &&\n            value.indexOf(\"rgba\") !== -1\n          ) {\n            // separate alpha value, since illustrator can't handle it\n            const regex =\n              /rgba\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d?\\.?\\d*)\\s*\\)/gi;\n            const matches = regex.exec(value);\n            if (matches) {\n              currentElement.setAttribute(\n                style.svgAttr,\n                format(\"rgb({r},{g},{b})\", {\n                  r: matches[1],\n                  g: matches[2],\n                  b: matches[3]\n                })\n              );\n              // should take globalAlpha here\n              let opacity = parseFloat(matches[4]);\n              const globalAlpha = this.globalAlpha;\n              if (globalAlpha != null) {\n                opacity *= globalAlpha;\n              }\n              currentElement.setAttribute(\n                style.svgAttr + \"-opacity\",\n                \"\" + opacity\n              );\n            }\n          } else {\n            let attr = style.svgAttr;\n            if (keys[i] === \"globalAlpha\") {\n              attr = type + \"-\" + style.svgAttr;\n              if (currentElement.getAttribute(attr)) {\n                // fill-opacity or stroke-opacity has already been set by stroke or fill.\n                continue;\n              }\n            }\n            //otherwise only update attribute if right type, and not svg default\n            if (attr) currentElement.setAttribute(attr, value);\n          }\n        }\n      }\n    }\n  }\n\n  /**\n   * Will return the closest group or svg node. May return the current element.\n   */\n  __closestGroupOrSvg(node?: SVGElement | null): SVGElement {\n    node = node || this.__currentElement;\n    if (node.nodeName === \"g\" || node.nodeName === \"svg\") {\n      return node;\n    } else {\n      return this.__closestGroupOrSvg(node.parentNode as unknown as SVGElement);\n    }\n  }\n\n  /**\n   * Returns the serialized value of the svg so far\n   * @param fixNamedEntities - Standalone SVG doesn't support named entities, which document.createTextNode encodes.\n   *                           If true, we attempt to find all named entities and encode it as a numeric entity.\n   * @return serialized svg\n   */\n  getSerializedSvg(fixNamedEntities: boolean) {\n    let serialized = new XMLSerializer().serializeToString(this.__rootSVG);\n\n    // IE search for a duplicate xmnls because they didn't implement setAttributeNS correctly\n    const xmlns =\n      /xmlns=\"http:\\/\\/www\\.w3\\.org\\/2000\\/svg\".+xmlns=\"http:\\/\\/www\\.w3\\.org\\/2000\\/svg/gi;\n    if (xmlns.test(serialized)) {\n      serialized = serialized.replace(\n        'xmlns=\"http://www.w3.org/2000/svg',\n        'xmlns:xlink=\"http://www.w3.org/1999/xlink'\n      );\n    }\n\n    if (fixNamedEntities) {\n      const keys = Object.keys(namedEntities);\n      //loop over each named entity and replace with the proper equivalent.\n      for (let i = 0, length = keys.length; i < length; i++) {\n        const key = keys[i];\n        const value = namedEntities[key];\n        const regexp = new RegExp(key, \"gi\");\n        if (regexp.test(serialized)) {\n          serialized = serialized.replace(regexp, value);\n        }\n      }\n    }\n\n    return serialized;\n  }\n\n  /**\n   * Returns the root svg\n   */\n  getSvg() {\n    return this.__rootSVG;\n  }\n\n  /**\n   * Will generate a group tag\n   */\n  save() {\n    const group = this.__createElement(\"g\");\n    const parent = this.__closestGroupOrSvg();\n    this.__groupStack.push(parent);\n    parent.appendChild(group);\n    this.__currentElement = group;\n    this.__styleStack.push(this.__getStyleState());\n  }\n\n  /**\n   * Sets current element to parent, or just root if already root\n   */\n  restore() {\n    this.__currentElementsToStyle = null;\n    const currentElement = this.__groupStack.pop();\n    // Clearing canvas will make the poped group invalid, currentElement is set to the root group node.\n    if (!currentElement) {\n      this.__currentElement = this.__rootSVG\n        .childNodes[1] as unknown as SVGElement;\n    } else {\n      this.__currentElement = currentElement;\n    }\n    const state = this.__styleStack.pop();\n    if (state) {\n      this.__applyStyleState(state);\n    }\n  }\n\n  /**\n   * Helper method to add transform\n   */\n  __addTransform(t: string) {\n    // if the current element has siblings, add another group\n    const parent = this.__closestGroupOrSvg();\n    if (parent.childNodes.length > 0) {\n      if (this.__currentElement.nodeName === \"path\") {\n        if (!this.__currentElementsToStyle)\n          this.__currentElementsToStyle = { element: parent, children: [] };\n        this.__currentElementsToStyle.children.push(this.__currentElement);\n        this.__applyCurrentDefaultPath();\n      }\n      const group = this.__createElement(\"g\");\n      parent.appendChild(group);\n      this.__currentElement = group;\n    }\n\n    let transform = this.__currentElement.getAttribute(\"transform\");\n    if (transform) {\n      transform += \" \";\n    } else {\n      transform = \"\";\n    }\n    transform += t;\n    this.__currentElement.setAttribute(\"transform\", transform);\n  }\n\n  /**\n   *  scales the current element\n   */\n  scale(x: number, y?: number) {\n    if (y === undefined) {\n      y = x;\n    }\n    this.__addTransform(format(\"scale({x},{y})\", { x: x, y: y }));\n  }\n\n  /**\n   * rotates the current element\n   */\n  rotate(angle: number) {\n    const degrees = (angle * 180) / Math.PI;\n    this.__addTransform(\n      format(\"rotate({angle},{cx},{cy})\", {\n        angle: degrees,\n        cx: 0,\n        cy: 0\n      })\n    );\n  }\n\n  /**\n   * translates the current element\n   */\n  translate(x: number, y: number) {\n    this.__addTransform(format(\"translate({x},{y})\", { x: x, y: y }));\n  }\n\n  /**\n   * applies a transform to the current element\n   */\n  transform(a: number, b: number, c: number, d: number, e: number, f: number) {\n    this.__addTransform(\n      format(\"matrix({a},{b},{c},{d},{e},{f})\", {\n        a: a,\n        b: b,\n        c: c,\n        d: d,\n        e: e,\n        f: f\n      })\n    );\n  }\n\n  /**\n   * Create a new Path Element\n   */\n  beginPath() {\n    // Note that there is only one current default path, it is not part of the drawing state.\n    // See also: https://html.spec.whatwg.org/multipage/scripting.html#current-default-path\n    this.__currentDefaultPath = \"\";\n    this.__currentPosition = {};\n\n    const path = this.__createElement(\"path\", {}, true);\n    const parent = this.__closestGroupOrSvg();\n    parent.appendChild(path);\n    this.__currentElement = path;\n  }\n\n  /**\n   * Helper function to apply currentDefaultPath to current path element\n   */\n  __applyCurrentDefaultPath() {\n    const currentElement = this.__currentElement;\n    if (currentElement.nodeName === \"path\") {\n      currentElement.setAttribute(\"d\", this.__currentDefaultPath);\n    } else {\n      // console.error(\n      //   \"Attempted to apply path command to node\",\n      //   currentElement.nodeName\n      // );\n    }\n  }\n\n  /**\n   * Helper function to add path command\n   */\n  __addPathCommand(command: string) {\n    this.__currentDefaultPath += \" \";\n    this.__currentDefaultPath += command;\n  }\n\n  /**\n   * Adds the move command to the current path element,\n   * if the currentPathElement is not empty create a new path element\n   */\n  moveTo(x: number, y: number) {\n    if (this.__currentElement.nodeName !== \"path\") {\n      this.beginPath();\n    }\n\n    // creates a new subpath with the given point\n    this.__currentPosition = { x: x, y: y };\n    this.__addPathCommand(format(\"M {x} {y}\", this.__currentPosition));\n  }\n\n  /**\n   * Closes the current path\n   */\n  closePath() {\n    if (this.__currentDefaultPath) {\n      this.__addPathCommand(\"Z\");\n    }\n  }\n\n  /**\n   * Adds a line to command\n   */\n  lineTo(x: number, y: number) {\n    this.__currentPosition = { x: x, y: y };\n    if (this.__currentDefaultPath.indexOf(\"M\") > -1) {\n      this.__addPathCommand(format(\"L {x} {y}\", this.__currentPosition));\n    } else {\n      this.__addPathCommand(format(\"M {x} {y}\", this.__currentPosition));\n    }\n  }\n\n  /**\n   * Add a bezier command\n   */\n  bezierCurveTo(\n    cp1x: number,\n    cp1y: number,\n    cp2x: number,\n    cp2y: number,\n    x: number,\n    y: number\n  ) {\n    this.__currentPosition = { x: x, y: y };\n    this.__addPathCommand(\n      format(\"C {cp1x} {cp1y} {cp2x} {cp2y} {x} {y}\", {\n        cp1x: cp1x,\n        cp1y: cp1y,\n        cp2x: cp2x,\n        cp2y: cp2y,\n        x: x,\n        y: y\n      })\n    );\n  }\n\n  /**\n   * Adds a quadratic curve to command\n   */\n  quadraticCurveTo(cpx: number, cpy: number, x: number, y: number) {\n    this.__currentPosition = { x: x, y: y };\n    this.__addPathCommand(\n      format(\"Q {cpx} {cpy} {x} {y}\", { cpx: cpx, cpy: cpy, x: x, y: y })\n    );\n  }\n\n  /**\n   * Return a new normalized vector of given vector\n   */\n  normalize(vector: [number, number]) {\n    const len = Math.sqrt(vector[0] * vector[0] + vector[1] * vector[1]);\n    return [vector[0] / len, vector[1] / len];\n  }\n\n  /**\n   * Adds the arcTo to the current path\n   *\n   * @see http://www.w3.org/TR/2015/WD-2dcontext-20150514/#dom-context-2d-arcto\n   */\n  arcTo(x1: number, y1: number, x2: number, y2: number, radius: number) {\n    // Let the point (x0, y0) be the last point in the subpath.\n    const x0 = this.__currentPosition && this.__currentPosition.x;\n    const y0 = this.__currentPosition && this.__currentPosition.y;\n\n    // First ensure there is a subpath for (x1, y1).\n    if (typeof x0 == \"undefined\" || typeof y0 == \"undefined\") {\n      return;\n    }\n\n    // Negative values for radius must cause the implementation to throw an IndexSizeError exception.\n    if (radius < 0) {\n      throw new Error(\n        \"IndexSizeError: The radius provided (\" + radius + \") is negative.\"\n      );\n    }\n\n    // If the point (x0, y0) is equal to the point (x1, y1),\n    // or if the point (x1, y1) is equal to the point (x2, y2),\n    // or if the radius radius is zero,\n    // then the method must add the point (x1, y1) to the subpath,\n    // and connect that point to the previous point (x0, y0) by a straight line.\n    if ((x0 === x1 && y0 === y1) || (x1 === x2 && y1 === y2) || radius === 0) {\n      this.lineTo(x1, y1);\n      return;\n    }\n\n    // Otherwise, if the points (x0, y0), (x1, y1), and (x2, y2) all lie on a single straight line,\n    // then the method must add the point (x1, y1) to the subpath,\n    // and connect that point to the previous point (x0, y0) by a straight line.\n    const unit_vec_p1_p0 = this.normalize([x0 - x1, y0 - y1]);\n    const unit_vec_p1_p2 = this.normalize([x2 - x1, y2 - y1]);\n    if (\n      unit_vec_p1_p0[0] * unit_vec_p1_p2[1] ===\n      unit_vec_p1_p0[1] * unit_vec_p1_p2[0]\n    ) {\n      this.lineTo(x1, y1);\n      return;\n    }\n\n    // Otherwise, let The Arc be the shortest arc given by circumference of the circle that has radius radius,\n    // and that has one point tangent to the half-infinite line that crosses the point (x0, y0) and ends at the point (x1, y1),\n    // and that has a different point tangent to the half-infinite line that ends at the point (x1, y1), and crosses the point (x2, y2).\n    // The points at which this circle touches these two lines are called the start and end tangent points respectively.\n\n    // note that both vectors are unit vectors, so the length is 1\n    const cos =\n      unit_vec_p1_p0[0] * unit_vec_p1_p2[0] +\n      unit_vec_p1_p0[1] * unit_vec_p1_p2[1];\n    const theta = Math.acos(Math.abs(cos));\n\n    // Calculate origin\n    const unit_vec_p1_origin = this.normalize([\n      unit_vec_p1_p0[0] + unit_vec_p1_p2[0],\n      unit_vec_p1_p0[1] + unit_vec_p1_p2[1]\n    ]);\n    const len_p1_origin = radius / Math.sin(theta / 2);\n    const x = x1 + len_p1_origin * unit_vec_p1_origin[0];\n    const y = y1 + len_p1_origin * unit_vec_p1_origin[1];\n\n    // Calculate start angle and end angle\n    // rotate 90deg clockwise (note that y axis points to its down)\n    const unit_vec_origin_start_tangent = [\n      -unit_vec_p1_p0[1],\n      unit_vec_p1_p0[0]\n    ];\n    // rotate 90deg counter clockwise (note that y axis points to its down)\n    const unit_vec_origin_end_tangent = [unit_vec_p1_p2[1], -unit_vec_p1_p2[0]];\n    const getAngle = function (vector: number[]) {\n      // get angle (clockwise) between vector and (1, 0)\n      const x = vector[0];\n      const y = vector[1];\n      if (y >= 0) {\n        // note that y axis points to its down\n        return Math.acos(x);\n      } else {\n        return -Math.acos(x);\n      }\n    };\n    const startAngle = getAngle(unit_vec_origin_start_tangent);\n    const endAngle = getAngle(unit_vec_origin_end_tangent);\n\n    // Connect the point (x0, y0) to the start tangent point by a straight line\n    this.lineTo(\n      x + unit_vec_origin_start_tangent[0] * radius,\n      y + unit_vec_origin_start_tangent[1] * radius\n    );\n\n    // Connect the start tangent point to the end tangent point by arc\n    // and adding the end tangent point to the subpath.\n    this.arc(x, y, radius, startAngle, endAngle);\n  }\n\n  /**\n   * Sets the stroke property on the current element\n   */\n  stroke() {\n    if (this.__currentElement.nodeName === \"path\") {\n      this.__currentElement.setAttribute(\"paint-order\", \"fill stroke markers\");\n    }\n    this.__applyCurrentDefaultPath();\n    this.__applyStyleToCurrentElement(\"stroke\");\n  }\n\n  /**\n   * Sets fill properties on the current element\n   */\n  fill() {\n    if (this.__currentElement.nodeName === \"path\") {\n      this.__currentElement.setAttribute(\"paint-order\", \"stroke fill markers\");\n    }\n    this.__applyCurrentDefaultPath();\n    this.__applyStyleToCurrentElement(\"fill\");\n  }\n\n  /**\n   *  Adds a rectangle to the path.\n   */\n  rect(x: number, y: number, width: number, height: number) {\n    if (this.__currentElement.nodeName !== \"path\") {\n      this.beginPath();\n    }\n    this.moveTo(x, y);\n    this.lineTo(x + width, y);\n    this.lineTo(x + width, y + height);\n    this.lineTo(x, y + height);\n    this.lineTo(x, y);\n    this.closePath();\n  }\n\n  /**\n   * adds a rectangle element\n   */\n  fillRect(x: number, y: number, width: number, height: number) {\n    const rect = this.__createElement(\n      \"rect\",\n      {\n        x: x,\n        y: y,\n        width: width,\n        height: height\n      },\n      true\n    );\n    const parent = this.__closestGroupOrSvg();\n    parent.appendChild(rect);\n    this.__currentElement = rect;\n    this.__applyStyleToCurrentElement(\"fill\");\n  }\n\n  /**\n   * Draws a rectangle with no fill\n   */\n  strokeRect(x: number, y: number, width: number, height: number) {\n    const rect = this.__createElement(\n      \"rect\",\n      {\n        x: x,\n        y: y,\n        width: width,\n        height: height\n      },\n      true\n    );\n    const parent = this.__closestGroupOrSvg();\n    parent.appendChild(rect);\n    this.__currentElement = rect;\n    this.__applyStyleToCurrentElement(\"stroke\");\n  }\n\n  /**\n   * Clear entire canvas:\n   * 1. save current transforms\n   * 2. remove all the childNodes of the root g element\n   */\n  __clearCanvas() {\n    const current = this.__closestGroupOrSvg();\n    const transform = current.getAttribute(\"transform\");\n    const rootGroup = this.__rootSVG.childNodes[1] as SVGElement;\n    const childNodes = rootGroup.childNodes;\n    for (let i = childNodes.length - 1; i >= 0; i--) {\n      if (childNodes[i]) {\n        rootGroup.removeChild(childNodes[i]);\n      }\n    }\n    this.__currentElement = rootGroup;\n    // reset __groupStack as all the child group nodes are all removed.\n    this.__groupStack = [];\n    if (transform) {\n      this.__addTransform(transform);\n    }\n  }\n\n  /**\n   * \"Clears\" a canvas by just drawing a white rectangle in the current group.\n   */\n  clearRect(x: number, y: number, width: number, height: number) {\n    // clear entire canvas\n    if (x === 0 && y === 0 && width === this.width && height === this.height) {\n      this.__clearCanvas();\n      return;\n    }\n    const parent = this.__closestGroupOrSvg();\n    const rect = this.__createElement(\n      \"rect\",\n      {\n        x: x,\n        y: y,\n        width: width,\n        height: height,\n        fill: \"#FFFFFF\"\n      },\n      true\n    );\n    parent.appendChild(rect);\n  }\n\n  /**\n   * Adds a linear gradient to a defs tag.\n   * Returns a canvas gradient object that has a reference to it's parent def\n   */\n  createLinearGradient(x1: number, y1: number, x2: number, y2: number) {\n    const grad = this.__createElement(\n      \"linearGradient\",\n      {\n        id: randomString(this.__ids),\n        x1: x1 + \"px\",\n        x2: x2 + \"px\",\n        y1: y1 + \"px\",\n        y2: y2 + \"px\",\n        gradientUnits: \"userSpaceOnUse\"\n      },\n      false\n    );\n    this.__SVGdefs.appendChild(grad);\n    return new CustomCanvasGradient(grad as unknown as SVGElement, this);\n  }\n\n  /**\n   * Adds a radial gradient to a defs tag.\n   * Returns a canvas gradient object that has a reference to it's parent def\n   */\n  createRadialGradient(\n    x0: number,\n    y0: number,\n    r0: number,\n    x1: number,\n    y1: number,\n    r1: number\n  ) {\n    const grad = this.__createElement(\n      \"radialGradient\",\n      {\n        id: randomString(this.__ids),\n        cx: x1 + \"px\",\n        cy: y1 + \"px\",\n        r: r1 + \"px\",\n        fx: x0 + \"px\",\n        fy: y0 + \"px\",\n        gradientUnits: \"userSpaceOnUse\"\n      },\n      false\n    );\n    this.__SVGdefs.appendChild(grad);\n    return new CustomCanvasGradient(grad as unknown as SVGElement, this);\n  }\n\n  /**\n   * Parses the font string and returns svg mapping\n   */\n  __parseFont() {\n    const regex =\n      /^\\s*(?=(?:(?:[-a-z]+\\s*){0,2}(italic|oblique))?)(?=(?:(?:[-a-z]+\\s*){0,2}(small-caps))?)(?=(?:(?:[-a-z]+\\s*){0,2}(bold(?:er)?|lighter|[1-9]00))?)(?:(?:normal|\\1|\\2|\\3)\\s*){0,3}((?:xx?-)?(?:small|large)|medium|smaller|larger|[.\\d]+(?:%|in|[cem]m|ex|p[CustomCanvasContext]))(?:\\s*\\/\\s*(normal|[.\\d]+(?:%|in|[cem]m|ex|p[CustomCanvasContext])))?\\s*([-,'\"\\sa-z0-9]+?)\\s*$/i;\n    const fontPart = regex.exec(this.font) as RegExpExecArray;\n    const data = {\n      style: fontPart[1] || \"normal\",\n      size: fontPart[4] || \"10px\",\n      family: fontPart[6] || \"sans-serif\",\n      weight: fontPart[3] || \"normal\",\n      decoration: fontPart[2] || \"normal\",\n      href: null\n    };\n\n    //canvas doesn't support underline natively, but we can pass this attribute\n    if (this.__fontUnderline === \"underline\") {\n      data.decoration = \"underline\";\n    }\n\n    //canvas also doesn't support linking, but we can pass this as well\n    if (this.__fontHref) {\n      data.href = this.__fontHref;\n    }\n\n    return data;\n  }\n\n  /**\n   * Helper to link text fragments\n   */\n  __wrapTextLink(font: { href: string | null }, element: HTMLElement) {\n    if (font.href) {\n      const a = this.__createElement(\"a\");\n      a.setAttributeNS(\"http://www.w3.org/1999/xlink\", \"xlink:href\", font.href);\n      a.appendChild(element);\n      return a;\n    }\n    return element;\n  }\n\n  /**\n   * Fills or strokes text\n   * @param text\n   * @param x\n   * @param y\n   * @param action - stroke or fill\n   */\n  __applyText(text: string, x: number, y: number, action: \"stroke\" | \"fill\") {\n    const font = this.__parseFont(),\n      parent = this.__closestGroupOrSvg(),\n      textElement = this.__createElement(\n        \"text\",\n        {\n          \"font-family\": font.family,\n          \"font-size\": font.size,\n          \"font-style\": font.style,\n          \"font-weight\": font.weight,\n          \"text-decoration\": font.decoration,\n          x: x,\n          y: y,\n          \"text-anchor\": getTextAnchor(this.textAlign),\n          \"dominant-baseline\": getDominantBaseline(this.textBaseline)\n        },\n        true\n      );\n\n    textElement.appendChild(this.__document.createTextNode(text));\n    this.__currentElement = textElement;\n    this.__applyStyleToCurrentElement(action);\n    parent.appendChild(\n      this.__wrapTextLink(font, textElement as unknown as HTMLElement)\n    );\n  }\n\n  /**\n   * Creates a text element\n   * @param text\n   * @param x\n   * @param y\n   */\n  fillText(text: string, x: number, y: number) {\n    this.__applyText(text, x, y, \"fill\");\n  }\n\n  /**\n   * Strokes text\n   * @param text\n   * @param x\n   * @param y\n   */\n  strokeText(text: string, x: number, y: number) {\n    this.__applyText(text, x, y, \"stroke\");\n  }\n\n  /**\n   * No need to implement this for svg.\n   * @param text\n   * @return {TextMetrics}\n   */\n  measureText(text: string) {\n    this.__ctx.font = this.font;\n    return this.__ctx.measureText(text);\n  }\n\n  /**\n   *  Arc command!\n   */\n  arc(\n    x: number,\n    y: number,\n    radius: number,\n    startAngle: number,\n    endAngle: number,\n    counterClockwise?: number\n  ) {\n    // in canvas no circle is drawn if no angle is provided.\n    if (startAngle === endAngle) {\n      return;\n    }\n    startAngle = startAngle % (2 * Math.PI);\n    endAngle = endAngle % (2 * Math.PI);\n    if (startAngle === endAngle) {\n      //circle time! subtract some of the angle so svg is happy (svg elliptical arc can't draw a full circle)\n      endAngle =\n        (endAngle + 2 * Math.PI - 0.001 * (counterClockwise ? -1 : 1)) %\n        (2 * Math.PI);\n    }\n    const endX = x + radius * Math.cos(endAngle),\n      endY = y + radius * Math.sin(endAngle),\n      startX = x + radius * Math.cos(startAngle),\n      startY = y + radius * Math.sin(startAngle),\n      sweepFlag = counterClockwise ? 0 : 1;\n    let largeArcFlag = 0;\n    let diff = endAngle - startAngle;\n\n    // https://github.com/gliffy/canvas2svg/issues/4\n    if (diff < 0) {\n      diff += 2 * Math.PI;\n    }\n\n    if (counterClockwise) {\n      largeArcFlag = diff > Math.PI ? 0 : 1;\n    } else {\n      largeArcFlag = diff > Math.PI ? 1 : 0;\n    }\n\n    this.lineTo(startX, startY);\n    this.__addPathCommand(\n      format(\n        \"A {rx} {ry} {xAxisRotation} {largeArcFlag} {sweepFlag} {endX} {endY}\",\n        {\n          rx: radius,\n          ry: radius,\n          xAxisRotation: 0,\n          largeArcFlag: largeArcFlag,\n          sweepFlag: sweepFlag,\n          endX: endX,\n          endY: endY\n        }\n      )\n    );\n\n    this.__currentPosition = { x: endX, y: endY };\n  }\n\n  /**\n   * Generates a ClipPath from the clip command.\n   */\n  clip() {\n    const group = this.__closestGroupOrSvg(),\n      clipPath = this.__createElement(\"clipPath\"),\n      id = randomString(this.__ids),\n      newGroup = this.__createElement(\"g\");\n\n    this.__applyCurrentDefaultPath();\n    group.removeChild(this.__currentElement);\n    clipPath.setAttribute(\"id\", id);\n    clipPath.appendChild(this.__currentElement);\n\n    this.__SVGdefs.appendChild(clipPath);\n\n    //set the clip path to this group\n    group.setAttribute(\"clip-path\", format(\"url(#{id})\", { id: id }));\n\n    //clip paths can be scaled and transformed, we need to add another wrapper group to avoid later transformations\n    // to this path\n    group.appendChild(newGroup);\n\n    this.__currentElement = newGroup;\n  }\n\n  /**\n   * Draws a canvas, image or mock context to this canvas.\n   * Note that all svg dom manipulation uses node.childNodes rather than node.children for IE support.\n   * http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#dom-context-2d-drawimage\n   */\n  drawImage(...args: any[]) {\n    let image = args[0],\n      dx,\n      dy,\n      dw,\n      dh,\n      sx = 0,\n      sy = 0,\n      sw,\n      sh,\n      svg,\n      defs,\n      group,\n      svgImage,\n      canvas,\n      id;\n\n    if (args.length === 3) {\n      dx = args[1];\n      dy = args[2];\n      sw = image.width;\n      sh = image.height;\n      dw = sw;\n      dh = sh;\n    } else if (args.length === 5) {\n      dx = args[1];\n      dy = args[2];\n      dw = args[3];\n      dh = args[4];\n      sw = image.width;\n      sh = image.height;\n    } else if (args.length === 9) {\n      sx = args[1];\n      sy = args[2];\n      sw = args[3];\n      sh = args[4];\n      dx = args[5];\n      dy = args[6];\n      dw = args[7];\n      dh = args[8];\n    } else {\n      throw new Error(\n        \"Invalid number of arguments passed to drawImage: \" + arguments.length\n      );\n    }\n\n    const parent = this.__closestGroupOrSvg();\n    const currentElement = this.__currentElement;\n    const translateDirective = \"translate(\" + dx + \", \" + dy + \")\";\n    if (image instanceof CustomCanvasContext) {\n      //canvas2svg mock canvas context. In the future we may want to clone nodes instead.\n      //also I'm currently ignoring dw, dh, sw, sh, sx, sy for a mock context.\n      svg = image.getSvg().cloneNode(true);\n      if (svg.childNodes && svg.childNodes.length > 1) {\n        defs = svg.childNodes[0] as SVGElement;\n        while (defs.childNodes.length) {\n          id = (defs.childNodes[0] as SVGElement).getAttribute(\"id\") as string;\n          this.__ids[id] = id;\n          this.__SVGdefs.appendChild(defs.childNodes[0]);\n        }\n        group = svg.childNodes[1] as SVGElement;\n        if (group) {\n          //save original transform\n          const originTransform = group.getAttribute(\"transform\");\n          let transformDirective;\n          if (originTransform) {\n            transformDirective = originTransform + \" \" + translateDirective;\n          } else {\n            transformDirective = translateDirective;\n          }\n          group.setAttribute(\"transform\", transformDirective);\n          parent.appendChild(group);\n        }\n      }\n    } else if (image.nodeName === \"CANVAS\" || image.nodeName === \"IMG\") {\n      //canvas or image\n      svgImage = this.__createElement(\"image\");\n      svgImage.setAttribute(\"width\", dw);\n      svgImage.setAttribute(\"height\", dh);\n      svgImage.setAttribute(\"preserveAspectRatio\", \"none\");\n\n      if (sx || sy || sw !== image.width || sh !== image.height) {\n        //crop the image using a temporary canvas\n        canvas = this.__document.createElement(\"canvas\");\n        canvas.width = dw;\n        canvas.height = dh;\n        const context = canvas.getContext(\"2d\");\n        context?.drawImage(image, sx, sy, sw, sh, 0, 0, dw, dh);\n        image = canvas;\n      }\n      svgImage.setAttribute(\"transform\", translateDirective);\n      svgImage.setAttributeNS(\n        \"http://www.w3.org/1999/xlink\",\n        \"xlink:href\",\n        image.nodeName === \"CANVAS\"\n          ? image.toDataURL()\n          : image.getAttribute(\"src\")\n      );\n      parent.appendChild(svgImage);\n    }\n  }\n\n  /**\n   * Generates a pattern tag\n   */\n  createPattern(\n    image: HTMLImageElement | HTMLCanvasElement | CustomCanvasContext,\n    repetition: number\n  ) {\n    const pattern = this.__document.createElementNS(\n        \"http://www.w3.org/2000/svg\",\n        \"pattern\"\n      ),\n      id = randomString(this.__ids);\n    let img;\n    pattern.setAttribute(\"id\", id);\n\n    if (image.nodeName === \"CANVAS\" || image.nodeName === \"IMG\") {\n      img = this.__document.createElementNS(\n        \"http://www.w3.org/2000/svg\",\n        \"image\"\n      );\n      img.setAttribute(\n        \"width\",\n        \"\" + (image as HTMLImageElement | HTMLCanvasElement).width\n      );\n      img.setAttribute(\n        \"height\",\n        \"\" + (image as HTMLImageElement | HTMLCanvasElement).height\n      );\n      img.setAttributeNS(\n        \"http://www.w3.org/1999/xlink\",\n        \"xlink:href\",\n        image.nodeName === \"CANVAS\"\n          ? (image as HTMLCanvasElement).toDataURL()\n          : image.getAttribute(\"src\")\n      );\n      pattern.appendChild(img);\n      this.__SVGdefs.appendChild(pattern);\n    } else if (image instanceof CustomCanvasContext) {\n      pattern.setAttribute(\"width\", \"\" + (image as CustomCanvasContext).width);\n      pattern.setAttribute(\n        \"height\",\n        \"\" + (image as CustomCanvasContext).height\n      );\n      pattern.appendChild(image.__rootSVG.childNodes[1]);\n      this.__SVGdefs.appendChild(pattern);\n    }\n    return new CustomCanvasPattern(pattern as unknown as SVGElement, this);\n  }\n\n  setLineDash(dashArray: number[]) {\n    if (dashArray && dashArray.length > 0) {\n      this.lineDash = dashArray.join(\",\");\n    } else {\n      this.lineDash = null;\n    }\n  }\n\n  drawFocusRing() {\n    /// Not yet implemented\n  }\n  createImageData() {\n    /// Not yet implemented\n  }\n  getImageData() {\n    /// Not yet implemented\n  }\n  putImageData() {\n    /// Not yet implemented\n  }\n  globalCompositeOperation() {\n    /// Not yet implemented\n  }\n  setTransform() {\n    /// Not yet implemented\n  }\n}\n\nexport default CustomCanvasContext;\n","import {\n  CustomCanvasContext,\n  CustomCanvasGradient\n} from \"./CustomCanvasContext\";\n\nexport const canUsePaths =\n  typeof Path2D === \"function\" && typeof DOMMatrix === \"function\";\n\n// direction:\"ltr\"\n// filter:\"none\"\n// fontKerning:\"auto\"\n// fontStretch:\"normal\"\n// fontVariantCaps:\"normal\"\n// globalCompositeOperation:\"source-over\"\n// imageSmoothingEnabled:true\n// imageSmoothingQuality:\"low\"\n// letterSpacing:\"0px\"\n// lineCap:\"butt\"\n// lineWidth:1\n// shadowBlur:0\n// shadowColor:\"rgba(0, 0, 0, 0)\"\n// shadowOffsetX:0\n// shadowOffsetY:0\n// textRendering:\"auto\"\n// wordSpacing:\"0px\"\n\n// clip\n// createConicGradient\n// createImageData\n// direction\n// drawFocusIfNeeded\n// filter\n// fontKerning\n// fontStretch\n// fontVariantCaps\n// getContextAttributes\n// getLineDash\n// getTransform\n// globalCompositeOperation\n// imageSmoothingEnabled\n// imageSmoothingQuality\n// isContextLost\n// letterSpacing\n// reset\n// resetTransform\n// roundRect\n// setTransform\n// shadowBlur\n// shadowColor\n// shadowOffsetX\n// shadowOffsetY\n// textRendering\n// wordSpacing\n\nexport class YZCanvasContext {\n  canvas: HTMLCanvasElement;\n\n  context: CanvasRenderingContext2D;\n  // context: CanvasRenderingContext2D\n  // | WebGLRenderingContext\n  // | WebGL2RenderingContext\n  // | GPUCanvasContext\n  // | ImageBitmapRenderingContext\n  customContext?: CustomCanvasContext;\n\n  // https://developer.mozilla.org/en-US/docs/Web/API/Path2D\n  enablePath2D = false;\n  currentPath2D: Path2D = new Path2D();\n  path2Ds: Path2D[] = [];\n\n  // https://developer.mozilla.org/en-US/docs/Web/API/DOMMatrix\n  currentMatrix: DOMMatrix = new DOMMatrix();\n  // currentMatrix = document\n  //   .createElementNS(\"http://www.w3.org/2000/svg\", \"svg\")\n  //   .createSVGMatrix();\n\n  hasSetCustomStrokeStyle = false;\n  hasSetCustomFillStyle = false;\n\n  constructor(\n    canvas: HTMLCanvasElement,\n    width?: number,\n    height?: number,\n    enableCustomContext = false, // 性能影响\n    enablePath2D = false // 性能影响\n  ) {\n    this.canvas = canvas;\n    this.context = canvas.getContext(\"2d\", {\n      willReadFrequently: true\n    }) as CanvasRenderingContext2D;\n    if (enableCustomContext) {\n      this.customContext = new CustomCanvasContext({\n        canvas: this.canvas,\n        width: width || this.canvas.width,\n        height: height || this.canvas.height\n      });\n    }\n    this.enablePath2D = typeof enablePath2D == \"boolean\" ? enablePath2D : false;\n  }\n\n  set lineWidth(lineWidth: number) {\n    this.hasSetCustomStrokeStyle = true;\n    this.context.lineWidth = lineWidth;\n    if (this.customContext) this.customContext.lineWidth = lineWidth;\n  }\n\n  get lineWidth(): number {\n    return this.context.lineWidth;\n  }\n\n  set lineCap(lineCap: CanvasLineCap) {\n    this.hasSetCustomStrokeStyle = true;\n    this.context.lineCap = lineCap;\n    if (this.customContext) this.customContext.lineCap = lineCap;\n  }\n\n  get lineCap(): CanvasLineCap {\n    return this.context.lineCap;\n  }\n\n  set lineJoin(lineJoin: CanvasLineJoin) {\n    this.hasSetCustomStrokeStyle = true;\n    this.context.lineJoin = lineJoin;\n    if (this.customContext) this.customContext.lineCap = lineJoin;\n  }\n\n  get lineJoin(): CanvasLineJoin {\n    return this.context.lineJoin;\n  }\n\n  set lineDashOffset(lineDashOffset: number) {\n    this.hasSetCustomStrokeStyle = true;\n    this.context.lineDashOffset = lineDashOffset;\n    if (this.customContext) this.customContext.lineDashOffset = lineDashOffset;\n  }\n\n  get lineDashOffset(): number {\n    return this.context.lineDashOffset;\n  }\n\n  set miterLimit(miterLimit: number) {\n    this.hasSetCustomStrokeStyle = true;\n    this.context.miterLimit = miterLimit;\n    if (this.customContext) this.customContext.miterLimit = miterLimit;\n  }\n\n  get miterLimit(): number {\n    return this.context.miterLimit;\n  }\n\n  set globalAlpha(alpha: number) {\n    this.context.globalAlpha = alpha;\n    if (this.customContext) this.customContext.globalAlpha = alpha;\n  }\n\n  get globalAlpha(): number {\n    return this.context.globalAlpha;\n  }\n\n  // rgb(255,221,0)\n  // rgba(255,221,0,1)\n  // #000000\n  set fillStyle(\n    style:\n      | string\n      | CanvasGradient\n      | CanvasPattern\n      | { gradient: CanvasGradient; gradientCustom: CustomCanvasGradient }\n  ) {\n    this.hasSetCustomFillStyle = true;\n    if (\n      typeof style == \"string\" ||\n      style instanceof CanvasGradient ||\n      style instanceof CanvasPattern\n    ) {\n      this.context.fillStyle = style;\n      if (this.customContext) this.customContext.fillStyle = style;\n    } else {\n      this.context.fillStyle = style.gradient;\n      if (this.customContext)\n        this.customContext.fillStyle = style.gradientCustom;\n    }\n  }\n\n  get fillStyle(): string | CanvasGradient | CanvasPattern {\n    return this.context.fillStyle;\n  }\n\n  set strokeStyle(\n    style:\n      | string\n      | CanvasGradient\n      | CanvasPattern\n      | { gradient: CanvasGradient; gradientCustom: CustomCanvasGradient }\n  ) {\n    this.hasSetCustomStrokeStyle = true;\n    if (\n      typeof style == \"string\" ||\n      style instanceof CanvasGradient ||\n      style instanceof CanvasPattern\n    ) {\n      this.context.strokeStyle = style;\n      if (this.customContext) this.customContext.strokeStyle = style;\n    } else {\n      this.context.strokeStyle = style.gradient;\n      if (this.customContext)\n        this.customContext.strokeStyle = style.gradientCustom;\n    }\n  }\n\n  get strokeStyle(): string | CanvasGradient | CanvasPattern {\n    return this.context.strokeStyle;\n  }\n\n  // font:\"10px sans-serif\"\n  set font(font: string) {\n    this.context.font = font;\n    if (this.customContext) this.customContext.font = font;\n  }\n\n  get font(): string {\n    return this.context.font;\n  }\n\n  set textBaseline(textBaseline: CanvasTextBaseline) {\n    this.context.textBaseline = textBaseline;\n    if (this.customContext) this.customContext.textBaseline = textBaseline;\n  }\n\n  get textBaseline(): CanvasTextBaseline {\n    return this.context.textBaseline;\n  }\n\n  set textAlign(textAlign: CanvasTextAlign) {\n    this.context.textAlign = textAlign;\n    if (this.customContext) this.customContext.textAlign = textAlign;\n  }\n\n  get textAlign(): CanvasTextAlign {\n    return this.context.textAlign;\n  }\n\n  fill(path?: Path2D) {\n    if (path) {\n      this.context.fill(path);\n      /// customContext Not yet implemented\n    } else {\n      this.context.fill();\n      if (this.customContext) this.customContext.fill();\n    }\n    return this;\n  }\n\n  fillRect(x: number, y: number, w: number, h: number) {\n    this.context.fillRect(x, y, w, h);\n    if (this.customContext) this.customContext.fillRect(x, y, w, h);\n    return this;\n  }\n\n  fillText(text: string, x: number, y: number, maxWidth?: number | undefined) {\n    this.hasSetCustomFillStyle = false;\n    this.context.fillText(text, x, y, maxWidth);\n    if (this.customContext) this.customContext.fillText(text, x, y);\n    return this;\n  }\n\n  setLineDash(dashArray: number[]) {\n    this.context.setLineDash(dashArray);\n    if (this.customContext) this.customContext.setLineDash(dashArray);\n    return this;\n  }\n\n  stroke(path?: Path2D) {\n    if (path) {\n      this.context.stroke(path);\n      /// customContext Not yet implemented\n    } else {\n      this.context.stroke();\n      if (this.customContext) this.customContext.stroke();\n    }\n    return this;\n  }\n\n  strokeText(\n    text: string,\n    x: number,\n    y: number,\n    maxWidth?: number | undefined\n  ) {\n    this.context.strokeText(text, x, y, maxWidth);\n    if (this.customContext) this.customContext.strokeText(text, x, y);\n    return this;\n  }\n\n  strokeRect(x: number, y: number, w: number, h: number) {\n    this.context.strokeRect(x, y, w, h);\n    if (this.customContext) this.customContext.strokeRect(x, y, w, h);\n    return this;\n  }\n\n  measureText(text: string): TextMetrics {\n    return this.context.measureText(text);\n    /// customContext Not yet implemented\n  }\n\n  clearRect(x = 0, y = 0, w = this.canvas.width, h = this.canvas.height) {\n    this.context.clearRect(x, y, w, h);\n    if (this.customContext) this.customContext.clearRect(x, y, w, h);\n    return this;\n  }\n\n  save() {\n    this.context.save();\n    if (this.customContext) {\n      this.customContext.save();\n    }\n    this.currentMatrix = new DOMMatrix();\n    if (this.enablePath2D) {\n      this.path2Ds.push(this.currentPath2D);\n      this.currentPath2D = new Path2D();\n    }\n    return this;\n  }\n\n  restore() {\n    this.context.restore();\n    if (this.customContext) {\n      this.customContext.restore();\n    }\n    this.hasSetCustomStrokeStyle = false;\n    this.hasSetCustomFillStyle = false;\n    this.currentMatrix = new DOMMatrix();\n    if (this.enablePath2D) {\n      this.currentPath2D = this.path2Ds.pop() || new Path2D();\n    }\n    return this;\n  }\n\n  beginPath() {\n    this.context.beginPath();\n    if (this.customContext) this.customContext.beginPath();\n    return this;\n  }\n\n  closePath() {\n    this.context.closePath();\n    if (this.customContext) this.customContext.closePath();\n    if (this.enablePath2D) {\n      this.currentPath2D.closePath();\n    }\n    return this;\n  }\n\n  changePath2D(path = this.currentPath2D, transform = this.currentMatrix) {\n    if (this.enablePath2D) {\n      const newPath = new Path2D();\n      newPath.addPath(path, transform);\n      this.currentPath2D = newPath;\n    }\n  }\n\n  isPointInStroke(path: Path2D, x: number, y: number): boolean;\n  isPointInStroke(x: number, y: number): boolean;\n  isPointInStroke(...args: any[]): boolean {\n    if (args[0] instanceof Path2D) {\n      return this.context.isPointInStroke(args[0], args[1], args[2]);\n    }\n    return this.context.isPointInStroke(args[0], args[1]);\n    /// customContext Not yet implemented\n  }\n\n  isPointInPath(path: Path2D, x: number, y: number): boolean;\n  isPointInPath(x: number, y: number): boolean;\n  isPointInPath(...args: any[]): boolean {\n    if (args[0] instanceof Path2D) {\n      return this.context.isPointInPath(args[0], args[1], args[2]);\n    }\n    return this.context.isPointInPath(args[0], args[1]);\n    /// customContext Not yet implemented\n  }\n\n  // transform(a: number, b: number, c: number, d: number, e: number, f: number) {\n  //   this.context.transform(a, b, c, d, e, f);\n  //   if (this.customContext) this.customContext.transform(a, b, c, d, e, f);\n  //   return this;\n  // }\n\n  translate(x: number, y: number) {\n    this.context.translate(x, y);\n    if (this.customContext) {\n      this.customContext.translate(x, y);\n    }\n    this.currentMatrix = this.currentMatrix.translate(x, y);\n    this.changePath2D();\n    return this;\n  }\n\n  rotate(radian: number, centerX = 0, centerY = 0) {\n    /// 移动的是坐标系\n    this.translate(centerX, centerY);\n    this.context.rotate(radian);\n    if (this.customContext) {\n      this.customContext.rotate(radian);\n    }\n    this.currentMatrix = this.currentMatrix.rotate(radian);\n    this.translate(-centerX, -centerY);\n    this.changePath2D();\n    return this;\n  }\n\n  scale(x: number, y = x, centerX = 0, centerY = 0) {\n    /// 移动的是坐标系\n    this.translate(centerX, centerY);\n    this.context.scale(x, y);\n    if (this.customContext) {\n      this.customContext.scale(x, y);\n    }\n    this.currentMatrix = this.currentMatrix.scale(x, y);\n    this.translate(-centerX, -centerY);\n    this.changePath2D();\n    return this;\n  }\n\n  moveTo(x: number, y: number) {\n    this.context.moveTo(x, y);\n    if (this.customContext) this.customContext.moveTo(x, y);\n    if (this.enablePath2D) {\n      this.currentPath2D.moveTo(x, y);\n    }\n    return this;\n  }\n\n  lineTo(x: number, y: number) {\n    this.context.lineTo(x, y);\n    if (this.customContext) this.customContext.lineTo(x, y);\n    if (this.enablePath2D) {\n      this.currentPath2D.lineTo(x, y);\n    }\n    return this;\n  }\n\n  arc(\n    x: number,\n    y: number,\n    radius: number,\n    startAngle: number,\n    endAngle: number,\n    counterClockwise?: boolean\n  ) {\n    this.context.arc(x, y, radius, startAngle, endAngle, counterClockwise);\n    if (this.customContext)\n      this.customContext.arc(\n        x,\n        y,\n        radius,\n        startAngle,\n        endAngle,\n        counterClockwise ? -1 : 1\n      );\n    if (this.enablePath2D) {\n      this.currentPath2D.arc(\n        x,\n        y,\n        radius,\n        startAngle,\n        endAngle,\n        counterClockwise\n      );\n    }\n    return this;\n  }\n\n  arcTo(x1: number, y1: number, x2: number, y2: number, radius: number) {\n    this.context.arcTo(x1, y1, x2, y2, radius);\n    if (this.customContext) this.customContext.arcTo(x1, y1, x2, y2, radius);\n    if (this.enablePath2D) {\n      this.currentPath2D.arcTo(x1, y1, x2, y2, radius);\n    }\n    return this;\n  }\n\n  ellipse(\n    x: number,\n    y: number,\n    radiusX: number,\n    radiusY: number,\n    rotation: number,\n    startAngle: number,\n    endAngle: number,\n    counterClockwise?: boolean\n  ) {\n    this.context.ellipse(\n      x,\n      y,\n      radiusX,\n      radiusY,\n      rotation,\n      startAngle,\n      endAngle,\n      counterClockwise\n    );\n    /// customContext Not yet implemented\n    if (this.enablePath2D) {\n      this.currentPath2D.ellipse(\n        x,\n        y,\n        radiusX,\n        radiusY,\n        rotation,\n        startAngle,\n        endAngle,\n        counterClockwise\n      );\n    }\n    return this;\n  }\n\n  quadraticCurveTo(cpx: number, cpy: number, x: number, y: number) {\n    this.context.quadraticCurveTo(cpx, cpy, x, y);\n    if (this.customContext) this.customContext.quadraticCurveTo(cpx, cpy, x, y);\n    if (this.enablePath2D) {\n      this.currentPath2D.quadraticCurveTo(cpx, cpy, x, y);\n    }\n    return this;\n  }\n\n  bezierCurveTo(\n    cp1x: number,\n    cp1y: number,\n    cp2x: number,\n    cp2y: number,\n    x: number,\n    y: number\n  ) {\n    this.context.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y);\n    if (this.customContext)\n      this.customContext.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y);\n    if (this.enablePath2D) {\n      this.currentPath2D.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y);\n    }\n    return this;\n  }\n\n  rect(x: number, y: number, w: number, h: number) {\n    this.context.rect(x, y, w, h);\n    if (this.customContext) this.customContext.rect(x, y, w, h);\n    if (this.enablePath2D) {\n      this.currentPath2D.rect(x, y, w, h);\n    }\n    return this;\n  }\n\n  // { 0: \"#ffffff\", 1: \"#ff0000\" }\n  createLinearGradient(\n    x1: number,\n    y1: number,\n    x2: number,\n    y2: number,\n    colorStops?: Record<number, string>\n  ) {\n    const gradient: CanvasGradient = this.context.createLinearGradient(\n      x1,\n      y1,\n      x2,\n      y2\n    );\n    // const gradientCustom: CustomCanvasGradient =\n    //   this.customContext.createLinearGradient(x1, y1, x2, y2);\n    if (colorStops) {\n      Object.entries(colorStops).forEach(([key, value]) => {\n        gradient.addColorStop(parseFloat(key), value);\n        // gradientCustom.addColorStop(parseFloat(key), value);\n      });\n    }\n    return gradient;\n    // return {\n    //   gradient\n    //   // gradientCustom\n    // };\n  }\n\n  createRadialGradient(\n    x0: number,\n    y0: number,\n    r0: number,\n    x1: number,\n    y1: number,\n    r1: number,\n    colorStops?: Record<number, string>\n  ) {\n    const gradient: CanvasGradient = this.context.createRadialGradient(\n      x0,\n      y0,\n      r0,\n      x1,\n      y1,\n      r1\n    );\n    // const gradientCustom: CustomCanvasGradient =\n    //   this.customContext.createRadialGradient(x0, y0, r0, x1, y1, r1);\n    if (colorStops) {\n      Object.entries(colorStops).forEach(([key, value]) => {\n        gradient.addColorStop(parseFloat(key), value);\n        // gradientCustom.addColorStop(parseFloat(key), value);\n      });\n    }\n    return gradient;\n    // return {\n    //   gradient\n    //   // gradientCustom\n    // };\n  }\n\n  //  const image = new Image();\n  //  image.src = \"../assets/images/picture.jpg\";\n  //  image.onload = function () {\n  //    co.drawImage(image);\n  //  };\n  drawImage(\n    element:\n      | HTMLOrSVGImageElement\n      | HTMLVideoElement\n      | HTMLCanvasElement\n      | ImageBitmap\n      | OffscreenCanvas,\n    ...args: number[]\n  ) {\n    if (args.length === 0) {\n      this.context.drawImage(element, 0, 0);\n    } else if (args.length === 2) {\n      const dx = args[0];\n      const dy = args[1];\n      this.context.drawImage(element, dx, dy);\n    } else if (args.length === 4) {\n      const dx = args[0];\n      const dy = args[1];\n      const dw = args[2];\n      const dh = args[3];\n      this.context.drawImage(element, dx, dy, dw, dh);\n    } else if (args.length === 8) {\n      const sx = args[0];\n      const sy = args[1];\n      const sw = args[2];\n      const sh = args[3];\n      const dx = args[4];\n      const dy = args[5];\n      const dw = args[6];\n      const dh = args[7];\n      this.context.drawImage(element, sx, sy, sw, sh, dx, dy, dw, dh);\n    } else {\n      throw new Error(\n        \"Invalid number of arguments passed to drawImage: \" + args.length\n      );\n    }\n    if (this.customContext) this.customContext.drawImage(element, ...args);\n    return this;\n  }\n\n  getImageData(\n    sx = 0,\n    sy = 0,\n    sw = this.canvas.width,\n    sh = this.canvas.height,\n    settings?: ImageDataSettings | undefined\n  ): ImageData {\n    return this.context.getImageData(sx, sy, sw, sh, settings);\n    /// customContext Not yet implemented\n  }\n\n  putImageData(imageData: ImageData, dx = 0, dy = 0) {\n    return this.context.putImageData(imageData, dx, dy);\n    /// customContext Not yet implemented\n  }\n\n  createPattern(\n    image:\n      | HTMLImageElement\n      | SVGImageElement\n      | HTMLVideoElement\n      | HTMLCanvasElement\n      | ImageBitmap\n      | OffscreenCanvas,\n    repetition: \"repeat\" | \"repeat-x\" | \"repeat-y\" | \"no-repeat\" | null\n  ): CanvasPattern | null {\n    return this.context.createPattern(image, repetition);\n    /// customContext Not yet implemented\n  }\n\n  toRawSVG() {\n    if (this.customContext) {\n      const serializedSVG: string = this.customContext.getSerializedSvg(true);\n      const svgElement: SVGElement = this.customContext.getSvg();\n      return { raw: serializedSVG, element: svgElement };\n    } else {\n      return { raw: \"\", element: null };\n    }\n  }\n}\n\nexport default YZCanvasContext;\n","import { Subject } from \"rxjs\";\nimport {\n  extractNumber,\n  generateUUID,\n  maxDotNumber,\n  toKebab,\n  toObjectString,\n  withinErrorMarginNumber\n} from \"@zyzgroup/core-common\";\nimport { Arc, L, PathD } from \"./line\";\nimport {\n  SVGParse,\n  SVGParsedPathData,\n  absolutizeSVGPath,\n  isSVGPath,\n  parseSVGPath,\n  relativeSVGPath\n} from \"./svg\";\nimport { YZCanvasContext } from \"./canvas\";\nimport {\n  distance,\n  angle,\n  polar,\n  toDegree,\n  toRadian,\n  parseTransformToMatrix,\n  Matrix,\n  rotatePoint\n} from \"../../math\";\nimport Timeline, { TweenRawOptions, TweenValue } from \"../../animate/Timeline\";\nimport { Color } from \"../../color\";\nimport { MousePointGroup } from \"../useElementEvents\";\n\nexport type ShapeBaseOptions = {\n  // 强制设置 SVG path d, 优先级比 toSVGPathData() 高\n  // 传入 initD ，即代表为 静态Shape\n  initD?: string | SVGParsedPathData[] | PathD;\n};\n\nexport type ShapeAttributeOptions = {\n  // 属性\n  attrs?: Record<string, string | CanvasGradient>;\n  // 样式\n  style?: Record<string, string>;\n};\n\nexport type ShapeTransformOptions = {\n  // transform origin: 相对于自身（0,0）的坐标\n  centerX?: number;\n  centerY?: number;\n\n  // translate: 相对于自身（0,0）的坐标\n  x?: number;\n  y?: number;\n\n  // rotate: 相对于自身\n  degree?: number;\n\n  // scale: 相对于自身\n  scale?: number;\n  scaleX?: number;\n  scaleY?: number;\n};\n\nexport type ShapeAnimateOptions = {\n  // 速度\n  vx?: number;\n  vy?: number;\n\n  // 加速度\n  ax?: number;\n  ay?: number;\n\n  // 重量\n  mass?: number;\n};\nexport type ShapeAnimateConstantOptions = {\n  // 重力常量，例如 0.1 0.5\n  gravity?: number;\n  // 是否开启万有引力\n  enableGravityBetweenObjects?: boolean;\n\n  // 摩擦系数常量，例如 1\n  friction?: number;\n\n  // 例如 0.05\n  easing?: number;\n\n  // 例如 0.03 0.0005\n  spring?: number;\n  // 例如 100\n  springLength?: number;\n\n  // 回弹检测\n  wall?: {\n    x: number;\n    y: number;\n    width: number;\n    height: number;\n    cycle?: boolean;\n    // 回弹常量，例如 -1\n    bounce?: number;\n  };\n\n  // 是否开启碰撞检测\n  enableCollision?: boolean;\n\n  enableSpringMassAlpha?: boolean;\n};\n\nexport type ShapeDrawOptions = {\n  // 是否可交互: 性能影响，可关闭检测 isMouseIn\n  interactive?: boolean;\n\n  // 是否可拖拽\n  drag?: {\n    enable?: boolean;\n    // 如果 parent.combo.shapes 其中一个 drag 了，自己也跟着 move\n    followSibling?: boolean;\n    // 拖拽时沿的路线，相对值\n    alongPath?: PathD;\n  };\n};\n\nexport type ShapeOptions = ShapeBaseOptions &\n  ShapeAttributeOptions &\n  ShapeTransformOptions &\n  ShapeAnimateOptions &\n  ShapeDrawOptions;\n\nexport class Shape {\n  [index: string | number | symbol]: any;\n\n  // this.shouldUpdatePathD 交给子类变更\n  public shouldUpdatePathD = false;\n  public shouldUpdateTransformPathD = false;\n  public shouldUpdateSVGElInDraw = false;\n  public shouldUpdateMInDraw = true;\n  public shouldUpdateAttrsInDraw = true;\n  public shouldUpdateStyleInDraw = true;\n\n  public id: string;\n  public initD?: string | SVGParsedPathData[] | PathD;\n  public d?: PathD;\n  public parent?: {\n    combo: ShapeCombo;\n    dX: number;\n    dY: number;\n    dDegree: number;\n    dScaleX: number;\n    dScaleY: number;\n  };\n\n  public attrs: Record<string, string | CanvasGradient> = {};\n  public style: Record<string, string> = {};\n\n  private initCenterX?: number;\n  private initCenterY?: number;\n\n  private _x: number;\n  private _y: number;\n\n  private _degree: number;\n\n  private _scaleX: number;\n  private _scaleY: number;\n\n  public vx: number;\n  public vy: number;\n  public ax: number;\n  public ay: number;\n  public mass: number;\n\n  public interactive: boolean;\n  public drag?: ShapeDrawOptions[\"drag\"];\n\n  public transform$ = new Subject<{\n    dX?: number;\n    dY?: number;\n    dDegree?: number;\n    dScaleX?: number;\n    dScaleY?: number;\n  }>();\n  private transformSubscription: any;\n\n  // DrawContext 动态注入参数\n  public isMouseIn = false;\n  public isDragging = false;\n  public m?: Matrix | DOMMatrix;\n  public el?: HTMLElement | SVGElement;\n\n  constructor(options?: ShapeOptions) {\n    this.id = generateUUID(4);\n    this.initD = options?.initD;\n\n    this.setAttr({\n      // \"paint-order\": \"markers stroke fill\", // 先 stroke 再 fill\n      // \"paint-order\": \"fill stroke markers\", // default\n      stroke: \"none\",\n      fill: \"none\"\n      // \"pointerEvents\": \"none\",\n    });\n    if (options?.attrs) {\n      this.setAttr(options.attrs);\n    }\n    if (options?.style) {\n      this.setStyle(options.style);\n    }\n\n    this.initCenterX = options?.centerX;\n    this.initCenterY = options?.centerY;\n\n    this._x = options?.x || 0;\n    this._y = options?.y || 0;\n\n    this._degree = options?.degree || 0;\n\n    this._scaleX = 1;\n    this._scaleY = 1;\n    if (options?.scale !== void 0) {\n      this._scaleX = options.scale;\n      this._scaleY = options.scale;\n    }\n    if (options?.scaleX !== void 0) {\n      this._scaleX = options.scaleX;\n    }\n    if (options?.scaleY !== void 0) {\n      this._scaleY = options.scaleY;\n    }\n\n    this.vx = options?.vx || 0;\n    this.vy = options?.vy || 0;\n    this.ax = options?.ax || 0;\n    this.ay = options?.ay || 0;\n    this.mass = options?.mass || 1;\n\n    this.interactive =\n      typeof options?.interactive == \"boolean\" ? options?.interactive : true;\n    this.drag = options?.drag;\n\n    // return new Proxy(this, {\n    //   set(target, prop, value) {\n    //     // console.log(`Property ${String(prop)} is being set to ${value}`);\n    //     if (\n    //       prop == \"_x\" ||\n    //       prop == \"_y\" ||\n    //       prop == \"_degree\" ||\n    //       prop == \"_scaleX\" ||\n    //       prop == \"_scaleY\"\n    //     ) {\n    //       // console.log(`transform 不变更 PathD`);\n    //     } else {\n    //       // console.log(`Should Change PathD!`);\n    //       (this as Shape).shouldUpdatePathD = true;\n    //     }\n    //     target[prop] = value;\n    //     return true;\n    //   }\n    // });\n\n    this.transformSubscription = this.transform$.subscribe(() => {\n      // 提升性能：延迟到使用时再计算\n      this.shouldUpdateTransformPathD = true;\n      this.shouldUpdateMInDraw = true;\n    });\n  }\n\n  public destroy() {\n    this.transformSubscription.unsubscribe();\n  }\n\n  // 基操\n  public moveTo(x: number, y: number) {\n    const prevX = this._x;\n    const prevY = this._y;\n    if (prevX !== x || prevY !== y) {\n      this._x = x;\n      this._y = y;\n      this.transform$.next({ dX: x - prevX, dY: y - prevY });\n    }\n  }\n  public move(dx: number, dy = 0) {\n    this.moveTo(this._x + dx, this._y + dy);\n  }\n  public moveXTo(x: number) {\n    this.moveTo(x, this._y);\n  }\n  public moveX(dx: number) {\n    this.moveTo(this._x + dx, this._y);\n  }\n  public moveYTo(y: number) {\n    this.moveTo(this._x, y);\n  }\n  public moveY(dy: number) {\n    this.moveTo(this._x, this._y + dy);\n  }\n  public get x(): number {\n    return this._x;\n  }\n  // 基操\n  public set x(v: number) {\n    if (this._x !== v) {\n      this.transform$.next({ dX: v - this._x });\n      this._x = v;\n    }\n  }\n  public get y(): number {\n    return this._y;\n  }\n  // 基操\n  public set y(v: number) {\n    if (this._y !== v) {\n      this.transform$.next({ dY: v - this._y });\n      this._y = v;\n    }\n  }\n  // 基操\n  public rotateTo(degree: number) {\n    if (this._degree !== degree) {\n      this.transform$.next({ dDegree: degree - this._degree });\n      this._degree = degree;\n    }\n  }\n  public rotate(degree: number) {\n    this.rotateTo(this._degree + degree);\n  }\n  public get degree(): number {\n    return this._degree;\n  }\n  // 基操\n  public set degree(v: number) {\n    if (this._degree !== v) {\n      this.transform$.next({ dDegree: v - this._degree });\n      this._degree = v;\n    }\n  }\n  // 基操\n  public scaleTo(scaleX: number, scaleY?: number) {\n    const prevScaleX = this._scaleX;\n    const prevScaleY = this._scaleY;\n    if (this._scaleX !== scaleX || this._scaleY !== (scaleY || scaleX)) {\n      this._scaleX = scaleX;\n      this._scaleY = scaleY || scaleX;\n      this.transform$.next({\n        dScaleX: this._scaleX / prevScaleX,\n        dScaleY: this._scaleY / prevScaleY\n      });\n    }\n  }\n  public scale(scaleX: number, scaleY?: number) {\n    this.scaleTo(this._scaleX * scaleX, this._scaleY * (scaleY || scaleX));\n  }\n  public get scaleX(): number {\n    return this._scaleX;\n  }\n  // 基操\n  public set scaleX(v: number) {\n    if (this._scaleX !== v) {\n      this.transform$.next({\n        dScaleX: v / this._scaleX\n      });\n      this._scaleX = v;\n    }\n  }\n  public get scaleY(): number {\n    return this._scaleY;\n  }\n  // 基操\n  public set scaleY(v: number) {\n    if (this._scaleY !== v) {\n      this.transform$.next({\n        dScaleY: v / this._scaleY\n      });\n      this._scaleY = v;\n    }\n  }\n\n  // 无法在 constructor 中获得 子类.toSVGPathData()\n  public pathD(force?: PathD): PathD {\n    if (force) {\n      this.d = force;\n      this.shouldUpdateTransformPathD = true;\n      this.shouldUpdateSVGElInDraw = true;\n    } else if (this.initD) {\n      // 静态-Shape 可以缓存\n      if (!this.d) {\n        this.d =\n          this.initD instanceof PathD ? this.initD : new PathD(this.initD);\n      }\n    } else {\n      // 解决性能瓶颈：加入缓存, 减少计算, transform 不变更 PathD\n      // this.shouldUpdatePathD 交给子类变更\n      if (!this.d || this.shouldUpdatePathD) {\n        // 子类.toSVGPathData() 可能会动态变化， 所以间歇缓存\n        this.d = new PathD(this.toSVGPathData());\n        this.shouldUpdatePathD = false;\n        this.shouldUpdateTransformPathD = true;\n        this.shouldUpdateSVGElInDraw = true;\n      }\n    }\n    return this.d;\n  }\n\n  protected cachedTransformedPathD?: PathD;\n  public transformPathD(): PathD {\n    if (!this.m) {\n      // 初次计算，与 DrawContext 内一致\n      // transform origin - 不缓存, 直接使用 getBoundingClientRectCenter， 间接使用 getBoundingClientRect\n      const { x: centerX, y: centerY } = this.transformOrigin();\n      let centerXSelf = 0;\n      let centerYSelf = 0;\n      if (\n        this.parent?.dDegree ||\n        this.parent?.dScaleX !== 1 ||\n        this.parent?.dScaleY !== 1\n      ) {\n        const tos = this.transformOrigin(true);\n        centerXSelf = tos.x;\n        centerYSelf = tos.y;\n      }\n      // 移动的是坐标系 the order of these are important !\n      const m = new Matrix();\n      // 公共\n      m.translate(\n        this.x + (this.parent?.dX || 0),\n        this.y + (this.parent?.dY || 0)\n      );\n      m.rotate(this.degree, centerX, centerY);\n      m.scale(this.scaleX, this.scaleY, centerX, centerY);\n      // 自己\n      if (this.parent?.dDegree) {\n        m.rotate(this.parent.dDegree, centerXSelf, centerYSelf);\n      }\n      if (this.parent?.dScaleX !== 1 || this.parent?.dScaleY !== 1) {\n        m.scale(\n          this.parent?.dScaleX || 1,\n          this.parent?.dScaleY || 1,\n          centerXSelf,\n          centerYSelf\n        );\n      }\n      // 缓存计算结果\n      this.m = m;\n    }\n    if (this.shouldUpdateTransformPathD || !this.cachedTransformedPathD) {\n      this.cachedTransformedPathD = this.pathD().transform({ m: this.m });\n      this.shouldUpdateTransformPathD = false;\n    }\n    return this.cachedTransformedPathD;\n  }\n\n  public getBaseOptions() {\n    return {\n      initD: this.initD,\n\n      attrs: { ...this.attrs },\n      style: { ...this.style },\n\n      centerX: this.initCenterX,\n      centerY: this.initCenterY,\n\n      x: this._x,\n      y: this._y,\n\n      degree: this._degree,\n\n      scaleX: this._scaleX,\n      scaleY: this._scaleY,\n\n      vx: this.vx,\n      vy: this.vy,\n      ax: this.ax,\n      ay: this.ay,\n      mass: this.mass,\n\n      interactive: this.interactive,\n      drag: { ...this.drag }\n    };\n  }\n\n  public clone() {\n    const shape = this.cloneShape();\n    // if (this.parent) {\n    //   shape.parent = { ...this.parent };\n    // }\n    return shape;\n  }\n\n  // 子类需覆盖！\n  protected cloneShape() {\n    return new Shape(this.getBaseOptions());\n  }\n\n  // 供外部使用：基本属性变更\n  public update(options?: Partial<ShapeOptions>) {\n    this.shouldUpdatePathD = true;\n  }\n\n  // 优先级比 toSVGPathData() 高\n  // 使用相对值! transform 交给 DrawContext\n  public toSVGEl(): SVGElement | null {\n    // SVGElement = 子类覆盖!\n    return null;\n  }\n\n  // shape 内部定义\n  // 使用相对值! transform 交给 DrawContext\n  public toSVGPathData(): SVGParsedPathData[] {\n    // 子类需覆盖!\n    return [];\n  }\n\n  // 外部使用\n  // 使用相对值!\n  public toSVGPathD(): string {\n    return this.pathD().toSVGPathD();\n  }\n\n  // 使用相对值! transform 交给 DrawContext\n  // ctx.createLinearGradient 使用相对值\n  // 如果子类没有覆盖 toCanvasContext , 默认使用 PathD 的 toCanvasContext\n  // 如果子类覆盖 toCanvasContext , 则使用 原生canvas系统\n  public toCanvasContext(ctx: YZCanvasContext): void {\n    this.pathD().toCanvasContext(ctx);\n  }\n\n  // 子类可覆盖\n  // 相对坐标系原点 - 坐标系没有考虑 transform : translate rotate scale\n  public getBoundingClientRect(dot = 2) {\n    return this.pathD().getBoundingClientRect(dot);\n  }\n\n  // 相对坐标系原点 - 坐标系加入考虑 transform : translate rotate scale\n  public getRealBoundingClientRect(dot = 2) {\n    return this.transformPathD().getBoundingClientRect(dot);\n  }\n\n  // 相对坐标系原点 - 坐标系没有考虑 transform : translate rotate scale\n  public getBoundingClientRectCenter(dot = 2) {\n    return this.pathD().getBoundingClientRectCenter(dot);\n  }\n\n  // 相对坐标系原点 - 坐标系加入考虑 transform : translate rotate scale\n  public getRealBoundingClientRectCenter(dot = 2) {\n    return this.transformPathD().getBoundingClientRectCenter(dot);\n  }\n\n  // transform origin - 不缓存, 直接使用 getBoundingClientRectCenter， 间接使用 getBoundingClientRect\n  // 相对坐标系原点 - 坐标系没有考虑 transform : translate rotate scale\n  public transformOrigin(forceSelf = false, dot = 2): { x: number; y: number } {\n    let x = 0;\n    let y = 0;\n    if (this.parent && !forceSelf) {\n      const parentRectCenter =\n        this.parent.combo.getBoundingClientRectCenter(dot);\n      x = parentRectCenter.x - this.parent.dX;\n      y = parentRectCenter.y - this.parent.dY;\n    } else {\n      if (\n        typeof this.initCenterX == \"undefined\" &&\n        typeof this.initCenterY == \"undefined\"\n      ) {\n        // 没有强制设置 transform origin 时，默认为 中心点\n        const selfRectCenter = this.getBoundingClientRectCenter(dot);\n        x = selfRectCenter.x;\n        y = selfRectCenter.y;\n      } else {\n        // 强制设置 transform origin\n        x = this.initCenterX || 0;\n        y = this.initCenterY || 0;\n      }\n    }\n    return { x, y };\n  }\n\n  public isPointInPath(\n    ctx: YZCanvasContext | SVGElement,\n    x: number,\n    y: number\n  ): boolean {\n    // Canvas\n    if (ctx instanceof YZCanvasContext) {\n      return ctx.isPointInPath(new Path2D(this.toSVGPathD()), x, y);\n    }\n    // SVG\n    if (this.el instanceof SVGGeometryElement) {\n      // 以下也是可用的，但性能未知\n      const matrix = this.el.getCTM();\n      if (matrix) {\n        const invertedMatrix = matrix.inverse();\n        return this.el.isPointInFill({\n          x: invertedMatrix.a * x + invertedMatrix.c * y + invertedMatrix.e,\n          y: invertedMatrix.b * x + invertedMatrix.d * y + invertedMatrix.f\n        });\n      }\n      // 以下也是可用的，但性能未知\n      // if (this.m) {\n      //   const invertedMatrix =\n      //     this.m instanceof Matrix\n      //       ? this.m.clone().inverse()\n      //       : this.m.inverse();\n      //   if (invertedMatrix) {\n      //     return this.el.isPointInFill(invertedMatrix.transformPoint({ x, y }));\n      //   }\n      // }\n    }\n    return false;\n  }\n\n  public isPointInStroke(\n    ctx: YZCanvasContext | SVGElement,\n    x: number,\n    y: number\n  ): boolean {\n    // Canvas\n    if (ctx instanceof YZCanvasContext) {\n      return ctx.isPointInStroke(new Path2D(this.toSVGPathD()), x, y);\n    }\n    // SVG\n    if (this.el instanceof SVGGeometryElement) {\n      // 以下也是可用的，但性能未知\n      const matrix = this.el.getCTM();\n      if (matrix) {\n        const invertedMatrix = matrix.inverse();\n        return this.el.isPointInStroke({\n          x: invertedMatrix.a * x + invertedMatrix.c * y + invertedMatrix.e,\n          y: invertedMatrix.b * x + invertedMatrix.d * y + invertedMatrix.f\n        });\n      }\n      // 以下也是可用的，但性能未知\n      // if (this.m) {\n      //   const invertedMatrix =\n      //     this.m instanceof Matrix\n      //       ? this.m.clone().inverse()\n      //       : this.m.inverse();\n      //   if (invertedMatrix) {\n      //     return this.el.isPointInStroke(\n      //       invertedMatrix.transformPoint({ x, y })\n      //     );\n      //   }\n      // }\n    }\n    // UNDO: node-canvas return undefined\n    return false;\n  }\n\n  public setStyle(obj: Record<string, string>): void {\n    Object.assign(this.style, obj);\n    this.shouldUpdateStyleInDraw = true;\n  }\n\n  public setAttr(obj: Record<string, string | CanvasGradient>): void;\n  public setAttr(name: string, value: string | CanvasGradient): void;\n  public setAttr(\n    nameOrObj: string | Record<string, string | CanvasGradient>,\n    value?: string | CanvasGradient\n  ): void {\n    if (typeof nameOrObj !== \"string\") {\n      for (const k in nameOrObj) {\n        const v = nameOrObj[k];\n        if (v && v != this.getAttr(k)) {\n          this.attrs[toKebab(k)] = v;\n          this.shouldUpdateAttrsInDraw = true;\n        }\n      }\n    } else {\n      if (value && value != this.getAttr(nameOrObj)) {\n        this.attrs[toKebab(nameOrObj)] = value;\n        this.shouldUpdateAttrsInDraw = true;\n      }\n    }\n  }\n\n  public getAttr(\n    name: string,\n    defaultValue: string | CanvasGradient\n  ): string | CanvasGradient;\n  public getAttr(name: string): string | CanvasGradient | undefined;\n  public getAttr(\n    name: string,\n    defaultValue?: string | CanvasGradient\n  ): string | CanvasGradient | undefined {\n    return this.attrs[name] || this.attrs[toKebab(name)] || defaultValue;\n  }\n\n  public hasAttr(name: string): boolean {\n    return !!this.getAttr(name);\n  }\n\n  public animate(\n    options?: Pick<ShapeAnimateConstantOptions, \"gravity\" | \"friction\">\n  ) {\n    // 加速度\n    this.vx += this.ax;\n    this.vy += this.ay;\n\n    // 重力\n    const gravity = options?.gravity || 0;\n    this.vy += gravity;\n\n    // 摩擦力方式一\n    // const friction = options?.friction || 0;\n    // if (friction > 0) {\n    //   const radian = Math.atan2(this.vy, this.vx);\n    //   let speed = Math.sqrt(this.vx * this.vx + this.vy * this.vy);\n    //   if (speed > friction) {\n    //     speed -= friction;\n    //   } else {\n    //     speed = 0;\n    //   }\n    //   this.vx = Math.cos(radian) * speed;\n    //   this.vy = Math.sin(radian) * speed;\n    // }\n\n    // 摩擦力方式二\n    const friction = options?.friction || 1;\n    this.vx *= friction;\n    this.vy *= friction;\n\n    this.move(this.vx, this.vy);\n  }\n\n  public animateEaseTo(\n    target: { x: number; y: number },\n    options?: Pick<\n      ShapeAnimateConstantOptions,\n      \"easing\" | \"gravity\" | \"friction\"\n    >\n  ) {\n    const easing = options?.easing || 0.05;\n    const dx = target.x - this.x;\n    const dy = target.y - this.y;\n    this.vx = dx * easing;\n    this.vy = dy * easing;\n    this.animate(options);\n  }\n\n  public animateSpringTo(\n    target: { x: number; y: number } | { x: number; y: number }[],\n    options?: Pick<\n      ShapeAnimateConstantOptions,\n      \"spring\" | \"gravity\" | \"friction\"\n    >\n  ) {\n    const spring = options?.spring || 0.03;\n    (Array.isArray(target) ? target : [target]).forEach((t) => {\n      const dx = t.x - this.x;\n      const dy = t.y - this.y;\n      const ax = dx * spring;\n      const ay = dy * spring;\n      this.vx += ax;\n      this.vy += ay;\n    });\n    this.animate({ friction: 0.9, ...options });\n  }\n\n  public getSpringMassAlphaTo(\n    target: Shape,\n    options?: Pick<\n      ShapeAnimateConstantOptions,\n      \"spring\" | \"springLength\" | \"gravity\" | \"friction\"\n    >\n  ): number {\n    const springLength = options?.springLength || 100;\n    const spring = options?.spring || 0.0005;\n    const dx = target.x - this.x;\n    const dy = target.y - this.y;\n    const dist = Math.sqrt(dx * dx + dy * dy);\n    if (dist < springLength) {\n      const ax = dx * spring;\n      const ay = dy * spring;\n      this.vx += ax / this.mass;\n      this.vy += ay / this.mass;\n      target.vx -= ax / target.mass;\n      target.vy -= ay / target.mass;\n      return 1 - dist / springLength; // alpha: 0 ~ 1\n    }\n    return 0;\n  }\n\n  public followTo(target: { x: number; y: number }, length = 3) {\n    this.rotateTo(toDegree(angle(this.x, this.y, target.x, target.y)));\n    const { dx: vx, dy: vy } = polar(toRadian(this.degree), length);\n    this.vx = vx;\n    this.vy = vy;\n    this.animate();\n  }\n\n  public followAccelerationTo(target: { x: number; y: number }, length = 0.05) {\n    this.rotateTo(toDegree(angle(this.x, this.y, target.x, target.y)));\n    const { dx: ax, dy: ay } = polar(toRadian(this.degree), length);\n    this.ax = ax;\n    this.ay = ay;\n    this.animate();\n  }\n\n  // 物体之间引力\n  public gravitateTo(target: Shape) {\n    const dx = target.x - this.x;\n    const dy = target.y - this.y;\n    const distSQ = dx * dx + dy * dy;\n    const dist = Math.sqrt(distSQ);\n    const force = (this.mass * target.mass) / distSQ;\n    const ax = (force * dx) / dist;\n    const ay = (force * dy) / dist;\n    this.vx += ax / this.mass;\n    this.vy += ay / this.mass;\n    target.vx -= ax / target.mass;\n    target.vy -= ay / target.mass;\n  }\n\n  // 碰撞检测\n  public checkCollision(target: Shape) {\n    // 子类按需重写\n    const dx = target.x - this.x;\n    const dy = target.y - this.y;\n    const dist = Math.sqrt(dx * dx + dy * dy);\n    const {\n      x: targetX,\n      y: targetY,\n      width: targetWidth,\n      height: targetHeight\n    } = target.getBoundingClientRect();\n    const { x: targetCenterX, y: targetCenterY } =\n      target.getBoundingClientRectCenter();\n    const { x, y, width, height } = this.getBoundingClientRect();\n    const { x: centerX, y: centerY } = this.getBoundingClientRectCenter();\n    // if (dist < this.ballRadius + target.ballRadius) {\n    if (\n      dist < Math.abs(targetCenterX - targetX) + Math.abs(centerX - x) ||\n      dist < Math.abs(targetCenterY - targetY) + Math.abs(centerY - y)\n    ) {\n      const radian = Math.atan2(dy, dx);\n      // rotate ball0's position\n      const pos0 = { x: 0, y: 0 };\n      // rotate ball1's position\n      const pos1 = rotatePoint(-radian, dx, dy);\n      // rotate ball0's velocity\n      const vel0 = rotatePoint(-radian, this.vx, this.vy);\n      // rotate ball1's velocity\n      const vel1 = rotatePoint(-radian, target.vx, target.vy);\n      // collision reaction\n      const vxTotal = vel0.x - vel1.x;\n      vel0.x =\n        ((this.mass - target.mass) * vel0.x + 2 * target.mass * vel1.x) /\n        (this.mass + target.mass);\n      vel1.x = vxTotal + vel0.x;\n      // update position - to avoid objects becoming stuck together\n      const absV = Math.abs(vel0.x) + Math.abs(vel1.x);\n      const overlap =\n        this.ballRadius + target.ballRadius - Math.abs(pos0.x - pos1.x);\n      pos0.x += (vel0.x / absV) * overlap;\n      pos1.x += (vel1.x / absV) * overlap;\n      // rotate positions back\n      const pos0F = rotatePoint(radian, pos0.x, pos0.y);\n      const pos1F = rotatePoint(radian, pos1.x, pos1.y);\n      // adjust positions to actual screen positions\n      target.moveTo(this.x + pos1F.x, this.y + pos1F.y);\n      this.moveTo(this.x + pos0F.x, this.y + pos0F.y);\n      // rotate velocities back\n      const vel0F = rotatePoint(radian, vel0.x, vel0.y);\n      const vel1F = rotatePoint(radian, vel1.x, vel1.y);\n      this.vx = vel0F.x;\n      this.vy = vel0F.y;\n      target.vx = vel1F.x;\n      target.vy = vel1F.y;\n    }\n  }\n\n  // 回弹检测 或 重回检测\n  public checkWall(options?: ShapeAnimateConstantOptions) {\n    // 子类按需重写\n    if (!options?.wall) {\n      return;\n    }\n    const bounce =\n      typeof options.wall.bounce == \"number\" ? options.wall.bounce : -1;\n    const left = options.wall.x;\n    const top = options.wall.y;\n    const right = options.wall.x + options.wall.width;\n    const bottom = options.wall.y + options.wall.height;\n    const { x, y, width, height } = this.getBoundingClientRect();\n    // 碰撞后是 回弹 还是 重回\n    const isCycle = options.wall.cycle || false;\n    if (!isCycle) {\n      // 回弹检测\n      if (this.x + x + width > right) {\n        this.moveXTo(right - (x + width));\n        this.vx *= bounce;\n      } else if (this.x + x < left) {\n        this.moveXTo(left + (x + width));\n        this.vx *= bounce;\n      }\n      if (this.y + y + height > bottom) {\n        this.moveYTo(bottom - (y + height));\n        this.vy *= bounce;\n      } else if (this.y + y < top) {\n        this.moveYTo(top + (y + height));\n        this.vy *= bounce;\n      }\n      // if (this.x + this.ballRadius > right) {\n      //   this.moveXTo(right - this.ballRadius);\n      //   this.vx *= bounce;\n      // } else if (this.x - this.ballRadius < left) {\n      //   this.moveXTo(left + this.ballRadius);\n      //   this.vx *= bounce;\n      // }\n      // if (this.y + this.ballRadius > bottom) {\n      //   this.moveYTo(bottom - this.ballRadius);\n      //   this.vy *= bounce;\n      // } else if (this.y - this.ballRadius < top) {\n      //   this.moveYTo(top + this.ballRadius);\n      //   this.vy *= bounce;\n      // }\n    } else {\n      // 重回视野\n      if (this.x + x > right) {\n        this.moveXTo(left - (x + width));\n      } else if (this.x + x + width < left) {\n        this.moveXTo(right - x);\n      }\n      if (this.y + y > bottom) {\n        this.moveYTo(top - (y + height));\n      } else if (this.y + y + height < top) {\n        this.moveYTo(bottom - y);\n      }\n    }\n  }\n\n  // 相对坐标系原点 - 坐标系没有考虑 transform : translate rotate scale\n  public getTotalLength(): number {\n    return this.transformPathD().getTotalLength();\n  }\n\n  // 相对坐标系原点 - 坐标系没有考虑 transform : translate rotate scale\n  // 获取插值方法1\n  public getPointAtLength(length: number): {\n    x: number;\n    y: number;\n    alpha: number;\n  } {\n    return this.transformPathD().getPointAtLength(length);\n  }\n\n  // 相对坐标系原点 - 坐标系没有考虑 transform : translate rotate scale\n  // 获取插值方法2 t (0.0 to 1.0)\n  public interpolate(t: number): { x: number; y: number } {\n    return this.transformPathD().interpolate(t);\n  }\n\n  // t (0.0 to 1.0)\n  public trailPath(st = 0, et = 1) {\n    const totalLength = this.getTotalLength();\n    const fromLength = st * totalLength;\n    const toLength = et * totalLength;\n    return {\n      subPathD: this.transformPathD().getSubPathD(fromLength, toLength),\n      point: this.getPointAtLength(toLength)\n    };\n  }\n\n  // frameDuration 1帧运行时间\n  public strokeDashTween(frameDuration = 1000, options?: TweenRawOptions) {\n    // 未 transform 之前的 totalLength\n    const totalLength = this.pathD().getTotalLength();\n    this.setAttr({\n      strokeDasharray: `${totalLength} ${totalLength}`,\n      strokeDashoffset: `${totalLength}`\n    });\n    const prevOnUpdate = options?.onUpdate;\n    const tl = new Timeline({ frameDuration });\n    tl.addTween(\n      { offset: totalLength },\n      { offset: 0 },\n      Object.assign(options || {}, {\n        onUpdate: (coords: TweenValue, elapsed: number) => {\n          this.setAttr(\"strokeDashoffset\", \"\" + maxDotNumber(coords.offset, 2));\n          prevOnUpdate?.(coords, elapsed);\n        }\n      })\n    );\n    tl.play();\n  }\n\n  // const rosetta = Shape.generateRosetta(120, 120, 55, 35, 6);\n  public static generateRosetta(\n    x: number,\n    y: number,\n    rx: number,\n    ry: number,\n    n: number\n  ): Shape {\n    if (n == 0) {\n      throw new Error(\"no dividing by zero, please\");\n    }\n    const lines: L[] = [];\n    const angle = 360 / n; // negative values of n are fine\n    for (let c = 0; c < n; c += 1) {\n      // need angle for each leaf of rosetta in radians\n      const theta = (angle * c * Math.PI) / 180;\n      // coords of farthest point from center for this leaf\n      const dx = x + 2 * rx * Math.cos(theta);\n      const dy = y + 2 * rx * Math.sin(theta);\n      lines.push(\n        new Arc({\n          x: x,\n          y: y,\n          rx,\n          ry,\n          xAxisRotate: angle * c,\n          largeArcFlag: 1,\n          sweepFlag: 1,\n          toX: dx,\n          toY: dy\n        })\n      );\n      lines.push(\n        new Arc({\n          x: dx,\n          y: dy,\n          rx,\n          ry,\n          xAxisRotate: angle * c,\n          largeArcFlag: 1,\n          sweepFlag: 1,\n          toX: x,\n          toY: y\n        })\n      );\n    }\n    return new Shape({ initD: PathD.fromLines(lines) });\n  }\n}\n\nexport type ShapeComboOptions = {\n  svg?: string;\n  forceWidth?: number;\n} & ShapeAttributeOptions &\n  ShapeTransformOptions &\n  ShapeDrawOptions;\n\nexport class ShapeCombo {\n  public shapes: Shape[] = [];\n\n  public svg?: string;\n  public forceWidth?: number;\n\n  public attrs: Record<string, string | CanvasGradient> = {};\n  public style: Record<string, string> = {};\n\n  public initCenterX?: number;\n  public initCenterY?: number;\n\n  public x: number;\n  public y: number;\n\n  public degree: number;\n\n  public scaleX: number;\n  public scaleY: number;\n\n  public interactive: boolean;\n  public drag?: ShapeDrawOptions[\"drag\"];\n\n  constructor(options?: ShapeComboOptions) {\n    this.initCenterX = options?.centerX;\n    this.initCenterY = options?.centerY;\n\n    this.x = options?.x || 0;\n    this.y = options?.y || 0;\n\n    this.degree = options?.degree || 0;\n\n    this.scaleX = 1;\n    this.scaleY = 1;\n    if (options?.scale !== void 0) {\n      this.scaleX = options.scale;\n      this.scaleY = options.scale;\n    }\n    if (options?.scaleX !== void 0) {\n      this.scaleX = options.scaleX;\n    }\n    if (options?.scaleY !== void 0) {\n      this.scaleY = options.scaleY;\n    }\n\n    if (options?.attrs) {\n      this.setAttr(options.attrs);\n    }\n    if (options?.style) {\n      this.setStyle(options.style);\n    }\n\n    // UNDO：陆续添加到 getBaseOptions() addShape()\n    this.interactive =\n      typeof options?.interactive == \"boolean\" ? options?.interactive : true;\n    this.drag = options?.drag;\n\n    this.svg = options?.svg;\n    this.forceWidth = options?.forceWidth;\n\n    // get ShapeCombo from parse svg\n    if (options?.svg) {\n      // SVG LinePicture 强制中心点为（0,0）\n      this.initCenterX = 0;\n      this.initCenterY = 0;\n      let svgWidth = 0;\n      let svgHeight = 0;\n      let width = 0;\n      let height = 0;\n      const items = new SVGParse(options.svg).parse();\n      for (let i = 0, count = items.length; i < count; i++) {\n        const item = items[i];\n\n        if (item.type == \"viewbox\" && item.width && item.height) {\n          svgWidth = parseFloat(item.width);\n          svgHeight = parseFloat(item.height);\n          if (options.forceWidth) {\n            const aspectRatio = svgWidth / svgHeight;\n            width = options.forceWidth;\n            height = width / aspectRatio;\n          } else {\n            width = svgWidth;\n            height = svgHeight;\n          }\n          continue;\n        }\n\n        // 暂时只支持解析 path\n        if (item.type != \"path\") {\n          continue;\n        }\n        if (!isSVGPath(item.path)) {\n          continue;\n        }\n\n        const attrs: Record<string, string> = {};\n        for (const key in item) {\n          if (key === \"type\" || key === \"path\" || key === \"transform\") {\n            continue;\n          }\n          attrs[key] = item[key];\n        }\n\n        const pathDatas = absolutizeSVGPath(parseSVGPath(item.path));\n        // const pathDatas = relativeSVGPath(parseSVGPath(item.path));\n        const ds: SVGParsedPathData[][] = [];\n        let d: SVGParsedPathData[] = [];\n        for (let j = 0, allCount = pathDatas.length; j < allCount; j++) {\n          const data = pathDatas[j];\n          d.push(data);\n          // 每遇到一个 Z 就生成一个新的 PathD\n          if (data[0].toLowerCase() == \"z\") {\n            ds.push(d);\n            d = [];\n          }\n        }\n        if (d.length) {\n          ds.push(d);\n        }\n        ds.forEach((d) => {\n          const shape = new Shape({\n            attrs,\n            initD: d\n          });\n          if (item.transform) {\n            const matrix = parseTransformToMatrix(item.transform);\n            const s = matrix.split();\n            shape.moveTo(s.x, s.y);\n            shape.rotateTo(s.degree);\n            shape.scaleTo(s.scaleX, s.scaleY);\n          }\n          this.addShape(shape);\n        });\n      }\n\n      if (width && svgWidth && height && svgHeight) {\n        this.comboScale(width / svgWidth, height / svgHeight, true);\n      }\n    }\n  }\n\n  public destroy() {\n    this.shapes.forEach((s) => s.destroy());\n  }\n\n  public getBaseOptions() {\n    return {\n      svg: this.svg,\n      forceWidth: this.forceWidth,\n\n      attrs: { ...this.attrs },\n      style: { ...this.style },\n\n      centerX: this.initCenterX,\n      centerY: this.initCenterY,\n\n      x: this.x,\n      y: this.y,\n\n      degree: this.degree,\n\n      scaleX: this.scaleX,\n      scaleY: this.scaleY,\n\n      interactive: this.interactive,\n      drag: { ...this.drag }\n    };\n  }\n\n  public clone() {\n    const shapeCombo = this.cloneShapeCombo();\n\n    // shapeCombo.shapes 一般在 constructor 中以 addShape() 初始化了?\n    shapeCombo.shapes = this.shapes.map((s) => {\n      // s.clone()可以改写，用以复制「自定义属性」\n      const c = s.clone();\n      if (s.parent) {\n        c.parent = { ...s.parent, combo: shapeCombo };\n      }\n      return c;\n    });\n\n    return shapeCombo;\n  }\n\n  // 子类需覆盖！\n  protected cloneShapeCombo() {\n    return new ShapeCombo(this.getBaseOptions());\n  }\n\n  // 供外部使用：基本属性变更\n  public update(options?: Partial<ShapeComboOptions>) {\n    this.shapes.forEach((s) => s.update(options));\n  }\n\n  public addShape(\n    shape: Shape,\n    options?: {\n      dX?: number;\n      dY?: number;\n      dDegree?: number;\n      dScaleX?: number;\n      dScaleY?: number;\n      notCopyFromCombo?: boolean;\n    }\n  ) {\n    if (options?.notCopyFromCombo !== true) {\n      shape.setAttr(this.attrs);\n      shape.setStyle(this.style);\n      shape.interactive = shape.interactive || this.interactive;\n      shape.drag = { ...this.drag, ...shape.drag };\n    }\n    shape.parent = {\n      combo: this,\n      dX: options?.dX || 0,\n      dY: options?.dY || 0,\n      dDegree: options?.dDegree || 0,\n      dScaleX: options?.dScaleX || 1,\n      dScaleY: options?.dScaleY || 1\n    };\n    this.shapes.push(shape);\n  }\n\n  public comboMove(dx: number, dy: number, justChild = false) {\n    if (!justChild) {\n      this.x += dx;\n      this.y += dy;\n    }\n    this.shapes.forEach((s) => {\n      s.move(dx, dy);\n    });\n  }\n  public comboRotate(degree: number, justChild = false) {\n    if (!justChild) {\n      this.degree += degree;\n    }\n    this.shapes.forEach((s) => {\n      s.rotate(degree);\n    });\n  }\n  public comboScale(scaleX: number, scaleY?: number, justChild = false) {\n    if (!justChild) {\n      this.scaleX *= scaleX;\n      this.scaleY *= scaleY || scaleX;\n    }\n    this.shapes.forEach((s) => {\n      s.scale(scaleX, scaleY);\n    });\n  }\n\n  public comboTransform(\n    options?: {\n      x?: number;\n      y?: number;\n      degree?: number;\n      scale?: number;\n      scaleX?: number;\n      scaleY?: number;\n    },\n    justChild = false\n  ) {\n    if (typeof options?.x == \"number\" || typeof options?.y == \"number\") {\n      this.comboMove(options?.x || 0, options?.y || 0, justChild);\n    }\n    if (typeof options?.degree == \"number\") {\n      this.comboRotate(options?.degree || 0, justChild);\n    }\n    if (\n      typeof options?.scale == \"number\" ||\n      typeof options?.scaleX == \"number\" ||\n      typeof options?.scaleY == \"number\"\n    ) {\n      this.comboScale(\n        options?.scaleX || options?.scale || 1,\n        options?.scaleY || options?.scale || 1,\n        justChild\n      );\n    }\n  }\n\n  // 子类可覆盖\n  // 相对坐标系原点 - 坐标系没有考虑 transform : translate rotate scale\n  public getBoundingClientRect(dot = 2) {\n    const X: number[] = [];\n    const Y: number[] = [];\n    this.shapes.forEach((s) => {\n      const rect = s.getBoundingClientRect(dot);\n      X.push(rect.x, rect.x + rect.width);\n      Y.push(rect.y, rect.y + rect.height);\n    });\n    if (X.length == 0 || Y.length == 0) {\n      return { x: 0, y: 0, width: 0, height: 0 };\n    }\n    const xmin = Math.min(...X);\n    const ymin = Math.min(...Y);\n    const xmax = Math.max(...X);\n    const ymax = Math.max(...Y);\n    return {\n      x: maxDotNumber(xmin, dot),\n      y: maxDotNumber(ymin, dot),\n      width: maxDotNumber(xmax - xmin, dot),\n      height: maxDotNumber(ymax - ymin, dot)\n    };\n  }\n\n  // 相对坐标系原点 - 坐标系没有考虑 transform : translate rotate scale\n  public getBoundingClientRectCenter(dot = 2): { x: number; y: number } {\n    if (\n      typeof this.initCenterX == \"number\" &&\n      typeof this.initCenterY == \"number\"\n    ) {\n      // 强制设置了中心点\n      return { x: this.initCenterX, y: this.initCenterY };\n    }\n    const rect = this.getBoundingClientRect(dot);\n    return {\n      x: maxDotNumber(rect.x + rect.width * 0.5, dot),\n      y: maxDotNumber(rect.y + rect.height * 0.5, dot)\n    };\n  }\n\n  public setStyle(obj: Record<string, string>): void {\n    Object.assign(this.style, obj);\n    this.shapes.forEach((s) => {\n      s.setStyle(obj);\n    });\n  }\n\n  public setAttr(obj: Record<string, string | CanvasGradient>): void;\n  public setAttr(name: string, value: string | CanvasGradient): void;\n  public setAttr(\n    nameOrObj: string | Record<string, string | CanvasGradient>,\n    value?: string | CanvasGradient\n  ) {\n    if (typeof nameOrObj !== \"string\") {\n      for (const k in nameOrObj) {\n        const v = nameOrObj[k];\n        if (v && v != this.getAttr(k)) {\n          this.attrs[toKebab(k)] = v;\n        }\n      }\n      this.shapes.forEach((s) => {\n        s.setAttr(nameOrObj);\n      });\n    } else {\n      if (value && value != this.getAttr(nameOrObj)) {\n        this.attrs[toKebab(nameOrObj)] = value;\n        this.shapes.forEach((s) => {\n          s.setAttr(nameOrObj, value);\n        });\n      }\n    }\n  }\n\n  public getAttr(\n    name: string,\n    defaultValue: string | CanvasGradient\n  ): string | CanvasGradient;\n  public getAttr(name: string): string | CanvasGradient | undefined;\n  public getAttr(\n    name: string,\n    defaultValue?: string | CanvasGradient\n  ): string | CanvasGradient | undefined {\n    return this.attrs[name] || this.attrs[toKebab(name)] || defaultValue;\n  }\n\n  public hasAttr(name: string): boolean {\n    return !!this.getAttr(name);\n  }\n\n  // 从小到大排序\n  public sort(): void {\n    this.shapes\n      .map((shape) => {\n        return {\n          shape,\n          perimeter: shape.transformPathD().getPolymorphPointsPerimeter()\n        };\n      })\n      .sort((a, b) => b.perimeter - a.perimeter)\n      .map((a) => a.shape);\n  }\n\n  public expendTo(larger: ShapeCombo): void {\n    const largeLen = larger.shapes.length;\n    const smallLen = this.shapes.length;\n    if (largeLen < smallLen) {\n      return larger.expendTo(this);\n    }\n    for (let i = smallLen; i < largeLen; i++) {\n      const shape = larger.shapes[i];\n      // this.addShape(\n      //   new Shape({\n      //     initD: shape.transformPathD().clone()\n      //   }),\n      //   { notCopyFromCombo: true }\n      // );\n      this.addShape(\n        new Shape({\n          initD: shape.pathD().clone()\n        }),\n        {\n          dX: shape.x - this.x,\n          dY: shape.y - this.y,\n          dDegree: shape.degree - this.degree,\n          dScaleX: shape.scaleX / this.scaleX,\n          dScaleY: shape.scaleY / this.scaleY,\n          notCopyFromCombo: true\n        }\n      );\n    }\n  }\n\n  public strokeDashTween(\n    frameDuration?: number,\n    options?: Omit<TweenRawOptions, \"onStart\" | \"onUpdate\" | \"onComplete\"> & {\n      type?: \"parallel\" | \"sequence\";\n      onGroupStart?: () => void;\n      onGroupUpdate?: () => void;\n      onGroupComplete?: () => void;\n    }\n  ): void {\n    switch (options?.type) {\n      case \"sequence\":\n        this.shapes.forEach((s, i) => {\n          s.strokeDashTween(frameDuration, {\n            ...options, // 注意 options 浅拷贝\n            delay: i,\n            onStart: () => {\n              if (i == 0) {\n                options?.onGroupStart?.();\n              }\n            },\n            onUpdate: () => {\n              options?.onGroupUpdate?.();\n            },\n            onComplete: () => {\n              if (i == this.shapes.length - 1) {\n                options?.onGroupComplete?.();\n              }\n            }\n          });\n        });\n        break;\n      case \"parallel\":\n      default:\n        // eslint-disable-next-line no-case-declarations\n        const tl = new Timeline({ frameDuration });\n        // eslint-disable-next-line no-case-declarations\n        const from: TweenValue = {};\n        // eslint-disable-next-line no-case-declarations\n        const to: TweenValue = {};\n        this.shapes.forEach((s, i) => {\n          // 未 transform 之前的 totalLength\n          const totalLength = s.pathD().getTotalLength();\n          from[`offset_${i}`] = totalLength;\n          to[`offset_${i}`] = 0;\n          s.setAttr({\n            strokeDasharray: `${totalLength} ${totalLength}`,\n            strokeDashoffset: `${totalLength}`\n          });\n        });\n        tl.addTween(\n          from,\n          to,\n          Object.assign(options || {}, {\n            onStart: () => {\n              options?.onGroupStart?.();\n            },\n            onUpdate: (coords: TweenValue, elapsed: number) => {\n              for (const c in coords) {\n                const index = extractNumber(c).number;\n                this.shapes[index].setAttr(\n                  \"strokeDashoffset\",\n                  \"\" + maxDotNumber(coords[c], 2)\n                );\n              }\n              options?.onGroupUpdate?.();\n            },\n            onComplete: () => {\n              options?.onGroupComplete?.();\n            }\n          })\n        );\n        tl.play();\n        break;\n    }\n  }\n}\n\n// 跟随鼠标\nexport function followMouseShape(\n  shape: Shape,\n  mpg: MousePointGroup,\n  margin = 5\n) {\n  const m = withinErrorMarginNumber(margin);\n  if (!m(shape.x, mpg.current.x) || !m(shape.y, mpg.current.y)) {\n    shape.followTo(mpg.current);\n  }\n}\n\n// 鼠标放开后运动到 target\nexport function targetToAfterDropShape(\n  shape: Shape,\n  target: { x: number; y: number },\n  options?: ShapeAnimateConstantOptions\n) {\n  if (shape.drag && shape.drag.enable && !shape.isDragging) {\n    shape.animateEaseTo(target, options);\n  }\n}\n\n// 运动[加速度+重力+摩擦力] +碰撞检测 (+回弹检测) (+万有引力)\nexport function animateShapes(\n  shapes: Shape[],\n  options?: ShapeAnimateConstantOptions\n): number[][] {\n  const alphas: number[][] = []; // [fromX, fromY, toX, toY, alpha][]\n  const numParticles = shapes.length;\n  for (let i = 0; i < numParticles; i++) {\n    const s = shapes[i];\n    if (options?.springLength) {\n      // SpringConnect\n      const springLength = options?.springLength || 100;\n      if (!s.isDragging) {\n        shapes\n          .filter((_s) => _s.id !== s.id)\n          .forEach((_s) => {\n            const radian = angle(s.x, s.y, _s.x, _s.y);\n            s.animateSpringTo(\n              {\n                x: _s.x - Math.cos(radian) * springLength,\n                y: _s.y - Math.sin(radian) * springLength\n              },\n              options\n            );\n          });\n      }\n    } else if (options?.spring) {\n      // Spring\n      if (i > 0) {\n        s.animateSpringTo(shapes[i - 1], options);\n      }\n    } else {\n      s.animate(options);\n    }\n    if (options?.wall) {\n      s.checkWall(options);\n    }\n    if (\n      options?.enableCollision ||\n      options?.enableGravityBetweenObjects ||\n      options?.enableSpringMassAlpha\n    ) {\n      for (let j = i + 1; j < numParticles; j++) {\n        if (options?.enableCollision) {\n          s.checkCollision(shapes[j]);\n        }\n        if (options?.enableGravityBetweenObjects) {\n          s.gravitateTo(shapes[j]);\n        }\n        if (options?.enableSpringMassAlpha) {\n          alphas.push([\n            s.x,\n            s.y,\n            shapes[j].x,\n            shapes[j].y,\n            s.getSpringMassAlphaTo(shapes[j], options)\n          ]);\n        }\n      }\n    }\n  }\n  return alphas;\n}\n\nfunction getShapesInterpolator(shapes: Shape[]): (\n  offset: number // offset (0.0 to 1.0)\n) => Shape {\n  if (shapes.length < 2) {\n    throw new Error(\"shapes个数必须大于等于2\");\n  }\n  const hlen = shapes.length - 1;\n  const ds = new Array(hlen);\n  for (let h = 0; h < hlen; h++) {\n    const pathd1 = shapes[h].transformPathD();\n    const pathd2 = shapes[h + 1].transformPathD();\n    const pathd1Points = pathd1.getPolymorphPoints();\n    const pathd2Points = pathd2.getPolymorphPoints();\n    const maxPoints =\n      pathd1Points.length >= pathd2Points.length ? pathd1Points : pathd2Points;\n    ds[h] = PathD.getInterpolator(\n      pathd1.expendToPolymorphPoints(maxPoints),\n      pathd2.expendToPolymorphPoints(maxPoints)\n    );\n  }\n  // 该 shape 无 toSVGEl()，所以可以放心 Polymorph\n  const shape = new Shape({ initD: \"\" });\n  return (offset: number): Shape => {\n    const d = maxDotNumber(hlen * offset, 6);\n    const flr = Math.min(Math.floor(d), hlen - 1);\n    const t = maxDotNumber(d - flr, 6);\n    shape.pathD(ds[flr](t));\n    shape.setAttr(shapes[flr + 1].attrs);\n    // const fill1Style = shapes[flr].getAttr(\"fill\", \"none\");\n    // const fill2Style = shapes[flr + 1].getAttr(\"fill\", \"none\");\n    // if (typeof fill1Style == \"string\" && typeof fill2Style == \"string\") {\n    //   shape.setAttr(\n    //     \"fill\",\n    //     Color.gradient(fill1Style, fill2Style, t).toString()\n    //   );\n    // }\n    // const stroke1Style = shapes[flr].getAttr(\"stroke\", \"none\");\n    // const stroke2Style = shapes[flr + 1].getAttr(\"stroke\", \"none\");\n    // if (typeof stroke1Style == \"string\" && typeof stroke2Style == \"string\") {\n    //   shape.setAttr(\n    //     \"stroke\",\n    //     Color.gradient(stroke1Style, stroke2Style, t).toString()\n    //   );\n    // }\n    return shape;\n  };\n}\n\nfunction getShapeCombosInterpolator(shapeCombos: (Shape | ShapeCombo)[]): (\n  offset: number // offset (0.0 to 1.0)\n) => ShapeCombo {\n  if (shapeCombos.length < 2) {\n    throw new Error(\"shapeCombos个数必须大于等于2\");\n  }\n  let maxShapeCombo: ShapeCombo;\n  const combos: ShapeCombo[] = [];\n  shapeCombos.forEach((c) => {\n    let combo: ShapeCombo;\n    if (c instanceof ShapeCombo) {\n      combo = c;\n      combo.sort();\n    } else {\n      combo = new ShapeCombo();\n      combo.addShape(c);\n    }\n    combos.push(combo);\n    if (!maxShapeCombo || maxShapeCombo.shapes.length < combo.shapes.length) {\n      maxShapeCombo = combo;\n    }\n  });\n  const shapess: Shape[][] = [];\n  combos.forEach((c, i) => {\n    if (c !== maxShapeCombo) {\n      c.expendTo(maxShapeCombo);\n    }\n    c.shapes.forEach((s, j) => {\n      shapess[j] = shapess[j] || [];\n      shapess[j][i] = s;\n    });\n  });\n  const interpolators: ((offset: number) => Shape)[] = [];\n  shapess.forEach((shapes) => {\n    interpolators.push(getShapesInterpolator(shapes));\n  });\n  const combo = new ShapeCombo();\n  interpolators.forEach((interpolator) => {\n    combo.addShape(interpolator(0));\n  });\n  return (offset: number): ShapeCombo => {\n    interpolators.forEach((interpolator) => {\n      interpolator(offset);\n    });\n    return combo;\n  };\n}\n\nexport function polymorphTween(\n  shapes: (Shape | ShapeCombo)[],\n  frameDuration = 6000,\n  options?: TweenRawOptions & {\n    shapeOrCombo?: (s: Shape | ShapeCombo, offset: number) => void;\n  }\n): Shape | ShapeCombo {\n  const interpolator =\n    shapes.findIndex((s) => s instanceof ShapeCombo) >= 0\n      ? getShapeCombosInterpolator(shapes)\n      : getShapesInterpolator(shapes as Shape[]);\n  const shapeOrCombo = interpolator(0);\n  const prevOnUpdate = options?.onUpdate;\n  const tl = new Timeline({ frameDuration });\n  tl.addTween(\n    { t: 0 },\n    { t: 1 },\n    Object.assign(options || {}, {\n      onUpdate: (coords: TweenValue, elapsed: number) => {\n        prevOnUpdate?.(coords, elapsed);\n        interpolator(coords.t);\n        options?.shapeOrCombo?.(shapeOrCombo, coords.t);\n      }\n    })\n  );\n  tl.play();\n  return shapeOrCombo;\n}\n","import {\n  clamp,\n  euclideanModulo,\n  lerp,\n  maxDotNumber,\n  parseNumber\n} from \"@zyzgroup/core-common\";\nimport { BufferAttribute, Matrix3, Vector3 } from \"./math\";\n\nexport const COLOR_NAMES: Record<string, number> = {\n  1: 0x0ac2d2, // rgb(10,194,210)\n  2: 0x7bb7fa, // rgb(123,183,250)\n  3: 0x60d7a9, // rgb(96,215,169)\n  4: 0xfdc162, // rgb(253,193,98)\n  5: 0xfd6a62, // rgb(253,106,98)\n  6: 0xf68dbb, // rgb(246,141,187)\n  7: 0x26ccff,\n  8: 0xa25afd,\n  9: 0xff5e7e,\n  10: 0x88ff5a,\n  11: 0xfcff42,\n  12: 0xffa62d,\n  13: 0xff36ff,\n  14: 0xdc4916,\n  15: 0x6871b1,\n  16: 0xd1b935,\n  17: 0x1bbc9b,\n  18: 0xff7f50,\n  19: 0x4bbfc3,\n  20: 0xff9900,\n  d: 0xdddddd, // rgb(221,221,221)\n  aliceblue: 0xf0f8ff, // rgb(240,248,255)\n  antiquewhite: 0xfaebd7, // rgb(250,235,215)\n  aqua: 0x00ffff, // rgb(0,255,255)\n  aquamarine: 0x7fffd4, // rgb(127,255,212)\n  azure: 0xf0ffff,\n  beige: 0xf5f5dc,\n  bisque: 0xffe4c4,\n  black: 0x000000, // rgb(0,0,0)\n  blanchedalmond: 0xffebcd,\n  blue: 0x0000ff, // rgb(0,0,255)\n  blueviolet: 0x8a2be2,\n  brown: 0xa52a2a,\n  burlywood: 0xdeb887,\n  cadetblue: 0x5f9ea0,\n  chartreuse: 0x7fff00,\n  chocolate: 0xd2691e,\n  coral: 0xff7f50,\n  cornflowerblue: 0x6495ed,\n  cornsilk: 0xfff8dc,\n  crimson: 0xdc143c,\n  cyan: 0x00ffff,\n  darkblue: 0x00008b,\n  darkcyan: 0x008b8b,\n  darkgoldenrod: 0xb8860b,\n  darkgray: 0xa9a9a9,\n  darkgreen: 0x006400,\n  darkgrey: 0xa9a9a9,\n  darkkhaki: 0xbdb76b,\n  darkmagenta: 0x8b008b,\n  darkolivegreen: 0x556b2f,\n  darkorange: 0xff8c00,\n  darkorchid: 0x9932cc,\n  darkred: 0x8b0000,\n  darksalmon: 0xe9967a,\n  darkseagreen: 0x8fbc8f,\n  darkslateblue: 0x483d8b,\n  darkslategray: 0x2f4f4f,\n  darkslategrey: 0x2f4f4f,\n  darkturquoise: 0x00ced1,\n  darkviolet: 0x9400d3,\n  deeppink: 0xff1493,\n  deepskyblue: 0x00bfff,\n  dimgray: 0x696969,\n  dimgrey: 0x696969,\n  dodgerblue: 0x1e90ff,\n  firebrick: 0xb22222,\n  floralwhite: 0xfffaf0,\n  forestgreen: 0x228b22,\n  fuchsia: 0xff00ff,\n  gainsboro: 0xdcdcdc,\n  ghostwhite: 0xf8f8ff,\n  gold: 0xffd700,\n  goldenrod: 0xdaa520,\n  gray: 0x808080,\n  green: 0x008000,\n  greenyellow: 0xadff2f,\n  grey: 0x808080,\n  honeydew: 0xf0fff0,\n  hotpink: 0xff69b4,\n  indianred: 0xcd5c5c,\n  indigo: 0x4b0082,\n  ivory: 0xfffff0,\n  khaki: 0xf0e68c,\n  lavender: 0xe6e6fa,\n  lavenderblush: 0xfff0f5,\n  lawngreen: 0x7cfc00,\n  lemonchiffon: 0xfffacd,\n  lightblue: 0xadd8e6,\n  lightcoral: 0xf08080,\n  lightcyan: 0xe0ffff,\n  lightgoldenrodyellow: 0xfafad2,\n  lightgray: 0xd3d3d3,\n  lightgreen: 0x90ee90,\n  lightgrey: 0xd3d3d3,\n  lightpink: 0xffb6c1,\n  lightsalmon: 0xffa07a,\n  lightseagreen: 0x20b2aa,\n  lightskyblue: 0x87cefa,\n  lightslategray: 0x778899,\n  lightslategrey: 0x778899,\n  lightsteelblue: 0xb0c4de,\n  lightyellow: 0xffffe0,\n  lime: 0x00ff00,\n  limegreen: 0x32cd32,\n  linen: 0xfaf0e6,\n  magenta: 0xff00ff,\n  maroon: 0x800000,\n  mediumaquamarine: 0x66cdaa,\n  mediumblue: 0x0000cd,\n  mediumorchid: 0xba55d3,\n  mediumpurple: 0x9370db,\n  mediumseagreen: 0x3cb371,\n  mediumslateblue: 0x7b68ee,\n  mediumspringgreen: 0x00fa9a,\n  mediumturquoise: 0x48d1cc,\n  mediumvioletred: 0xc71585,\n  midnightblue: 0x191970,\n  mintcream: 0xf5fffa,\n  mistyrose: 0xffe4e1,\n  moccasin: 0xffe4b5,\n  navajowhite: 0xffdead,\n  navy: 0x000080,\n  oldlace: 0xfdf5e6,\n  olive: 0x808000,\n  olivedrab: 0x6b8e23,\n  orange: 0xffa500,\n  orangered: 0xff4500,\n  orchid: 0xda70d6,\n  palegoldenrod: 0xeee8aa,\n  palegreen: 0x98fb98,\n  paleturquoise: 0xafeeee,\n  palevioletred: 0xdb7093,\n  papayawhip: 0xffefd5,\n  peachpuff: 0xffdab9,\n  peru: 0xcd853f,\n  pink: 0xffc0cb,\n  plum: 0xdda0dd,\n  powderblue: 0xb0e0e6,\n  purple: 0x800080,\n  rebeccapurple: 0x663399,\n  red: 0xff0000, // rgb(255,0,0)\n  rosybrown: 0xbc8f8f,\n  royalblue: 0x4169e1,\n  saddlebrown: 0x8b4513,\n  salmon: 0xfa8072,\n  sandybrown: 0xf4a460,\n  seagreen: 0x2e8b57,\n  seashell: 0xfff5ee,\n  sienna: 0xa0522d,\n  silver: 0xc0c0c0,\n  skyblue: 0x87ceeb,\n  slateblue: 0x6a5acd,\n  slategray: 0x708090,\n  slategrey: 0x708090,\n  snow: 0xfffafa,\n  springgreen: 0x00ff7f,\n  steelblue: 0x4682b4,\n  tan: 0xd2b48c,\n  teal: 0x008080,\n  thistle: 0xd8bfd8,\n  tomato: 0xff6347,\n  turquoise: 0x40e0d0,\n  violet: 0xee82ee,\n  wheat: 0xf5deb3,\n  white: 0xffffff, // rgb(255,255,255)\n  whitesmoke: 0xf5f5f5,\n  yellow: 0xffff00, // rgb(255,255,0)\n  yellowgreen: 0x9acd32 // rgb(154,205,50)\n};\n\n// 透明度合成\nfunction alphaBlend(\n  // 前景色\n  foreground: {\n    r: 0; // 0 ~ 255\n    g: 0; // 0 ~ 255\n    b: 0; // 0 ~ 255\n    a: 1; // 0 ~ 1\n  },\n  // 背景色\n  background: {\n    r: 0; // 0 ~ 255\n    g: 0; // 0 ~ 255\n    b: 0; // 0 ~ 255\n  }\n) {\n  // 计算合成的颜色\n  return {\n    r: Math.round(\n      foreground.a * foreground.r + (1 - foreground.a) * background.r\n    ),\n    g: Math.round(\n      foreground.a * foreground.g + (1 - foreground.a) * background.g\n    ),\n    b: Math.round(\n      foreground.a * foreground.b + (1 - foreground.a) * background.b\n    )\n  };\n}\n\nexport class Color {\n  private _color = {\n    r: 0, // 0 ~ 255\n    g: 0, // 0 ~ 255\n    b: 0, // 0 ~ 255\n    a: 1 // 0 ~ 1\n  };\n\n  constructor(color?: any, forceAlpha?: number) {\n    if (color) {\n      this.setColor(color);\n    }\n    this.setAlpha(forceAlpha);\n  }\n\n  get color() {\n    return this._color;\n  }\n  set color(color: any) {\n    const ErrMsg = `Color: Unknown color(${color}) type(${typeof color})`;\n    if (typeof color === \"number\") {\n      // hex\n      this.setHEX(color);\n    } else if (typeof color === \"string\") {\n      // string\n      let m;\n      if ((m = /^(\\w+)\\(([^)]*)\\)/.exec(color))) {\n        // rgb / hsl\n        const components = m[2];\n        let matches;\n        switch (m[1]) {\n          case \"rgb\":\n          case \"rgba\":\n            if (\n              (matches =\n                /^\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec(\n                  components\n                ))\n            ) {\n              // rgb(255,0,0) rgba(255,0,0,0.5)\n              this.r = parseInt(matches[1], 10);\n              this.g = parseInt(matches[2], 10);\n              this.b = parseInt(matches[3], 10);\n              this.a = matches[4] ? parseFloat(matches[4]) : 1;\n            } else if (\n              (matches =\n                /^\\s*(\\d+)%\\s*,\\s*(\\d+)%\\s*,\\s*(\\d+)%\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec(\n                  components\n                ))\n            ) {\n              // rgb(100%,0%,0%) rgba(100%,0%,0%,0.5)\n              this.r = (clamp(parseFloat(matches[1]), 0, 100) * 255) / 100;\n              this.g = (clamp(parseFloat(matches[2]), 0, 100) * 255) / 100;\n              this.b = (clamp(parseFloat(matches[3]), 0, 100) * 255) / 100;\n              this.a = matches[4] ? parseFloat(matches[4]) : 1;\n            } else {\n              // throw new Error(ErrMsg);\n              console.warn(ErrMsg);\n            }\n            break;\n          case \"hsl\":\n          case \"hsla\":\n            if (\n              (matches =\n                /^\\s*(\\d*\\.?\\d+)\\s*,\\s*(\\d*\\.?\\d+)%\\s*,\\s*(\\d*\\.?\\d+)%\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec(\n                  components\n                ))\n            ) {\n              // hsl(120,50%,50%) hsla(120,60.00%,1.00%,0.50)\n              this.setHSL(\n                parseFloat(matches[1]) / 360,\n                parseFloat(matches[2]) / 100,\n                parseFloat(matches[3]) / 100,\n                matches[4] ? parseFloat(matches[4]) : 1\n              );\n            } else {\n              // throw new Error(ErrMsg);\n              console.warn(ErrMsg);\n            }\n            break;\n          case \"hsv\":\n          case \"hsva\":\n          case \"hsb\":\n          case \"hsba\":\n            if (\n              (matches =\n                /^\\s*(\\d*\\.?\\d+)\\s*,\\s*(\\d*\\.?\\d+)%\\s*,\\s*(\\d*\\.?\\d+)%\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec(\n                  components\n                ))\n            ) {\n              // hsv(120,50%,50%) hsva(120,60.00%,1.00%,0.50)\n              // hsb(120,50%,50%) hsba(120,60.00%,1.00%,0.50)\n              this.setHSV(\n                parseFloat(matches[1]) / 360,\n                parseFloat(matches[2]) / 100,\n                parseFloat(matches[3]) / 100,\n                matches[4] ? parseFloat(matches[4]) : 1\n              );\n            } else {\n              // throw new Error(ErrMsg);\n              console.warn(ErrMsg);\n            }\n            break;\n          default:\n            // throw new Error(ErrMsg);\n            console.warn(ErrMsg);\n        }\n      } else if ((m = /#([A-Fa-f0-9]+)/.exec(color))) {\n        // #RGB #RRGGBB #RRGGBBAA\n        const hex = m[1];\n        const size = hex.length;\n        if (size === 3) {\n          // #RGB\n          this.setRGB(\n            parseInt(hex.charAt(0), 16),\n            parseInt(hex.charAt(1), 16),\n            parseInt(hex.charAt(2), 16),\n            1\n          );\n        } else if (size === 6 || size === 8) {\n          // #RRGGBB #RRGGBBAA\n          this.setHEX(parseInt(hex, 16));\n        } else {\n          // throw new Error(ErrMsg);\n          console.warn(ErrMsg);\n        }\n      } else if (color && color.length > 0) {\n        try {\n          this.setColorName(color);\n        } catch (e) {\n          // throw new Error(ErrMsg);\n          console.warn(ErrMsg);\n        }\n      } else {\n        // throw new Error(ErrMsg);\n        console.warn(ErrMsg);\n      }\n    } else if (color instanceof Color) {\n      this.setRGB(color.r, color.g, color.b, color.a);\n    } else if (\n      Object.prototype.hasOwnProperty.call(color, \"r\") &&\n      Object.prototype.hasOwnProperty.call(color, \"g\") &&\n      Object.prototype.hasOwnProperty.call(color, \"b\")\n    ) {\n      this.setRGB(\n        color.r,\n        color.g,\n        color.b,\n        Object.prototype.hasOwnProperty.call(color, \"a\") ? color.a : 1\n      );\n    } else if (\n      Object.prototype.hasOwnProperty.call(color, \"h\") &&\n      Object.prototype.hasOwnProperty.call(color, \"s\") &&\n      Object.prototype.hasOwnProperty.call(color, \"l\")\n    ) {\n      this.setHSL(\n        color.h,\n        color.s,\n        color.l,\n        Object.prototype.hasOwnProperty.call(color, \"a\") ? color.a : 1\n      );\n    } else if (\n      Object.prototype.hasOwnProperty.call(color, \"h\") &&\n      Object.prototype.hasOwnProperty.call(color, \"s\") &&\n      Object.prototype.hasOwnProperty.call(color, \"v\")\n    ) {\n      this.setHSV(\n        color.h,\n        color.s,\n        color.v,\n        Object.prototype.hasOwnProperty.call(color, \"a\") ? color.a : 1\n      );\n    } else if (\n      Object.prototype.hasOwnProperty.call(color, \"h\") &&\n      Object.prototype.hasOwnProperty.call(color, \"s\") &&\n      Object.prototype.hasOwnProperty.call(color, \"b\")\n    ) {\n      this.setHSV(\n        color.h,\n        color.s,\n        color.b,\n        Object.prototype.hasOwnProperty.call(color, \"a\") ? color.a : 1\n      );\n    } else {\n      // throw new Error(ErrMsg);\n      console.warn(ErrMsg);\n    }\n  }\n  setColor(color: any) {\n    this.color = color;\n    return this;\n  }\n  set(color: any) {\n    return this.setColor(color);\n  }\n\n  get r() {\n    return this._color.r;\n  }\n  set r(v: any) {\n    this._color.r = clamp(Math.round(parseNumber(v, this.r)), 0, 255);\n  }\n\n  get g() {\n    return this._color.g;\n  }\n  set g(v: any) {\n    this._color.g = clamp(Math.round(parseNumber(v, this.g)), 0, 255);\n  }\n\n  get b() {\n    return this._color.b;\n  }\n  set b(v: any) {\n    this._color.b = clamp(Math.round(parseNumber(v, this.b)), 0, 255);\n  }\n\n  get a() {\n    return this._color.a;\n  }\n  set a(a: any) {\n    this._color.a = clamp(parseNumber(a, this.a), 0, 1);\n  }\n  setAlpha(a: any) {\n    this.a = a;\n    return this;\n  }\n\n  setFromVector3(v: Vector3) {\n    this.r = v.x;\n    this.g = v.y;\n    this.b = v.z;\n    return this;\n  }\n\n  applyMatrix3(m: Matrix3) {\n    const r = this.r;\n    const g = this.g;\n    const b = this.b;\n    const e = m.value;\n    this.r = e[0] * r + e[3] * g + e[6] * b;\n    this.g = e[1] * r + e[4] * g + e[7] * b;\n    this.b = e[2] * r + e[5] * g + e[8] * b;\n    return this;\n  }\n\n  fromBufferAttribute(attribute: BufferAttribute, index: number) {\n    this.r = attribute.getX(index);\n    this.g = attribute.getY(index);\n    this.b = attribute.getZ(index);\n    return this;\n  }\n\n  fromArray(array: number[], offset = 0) {\n    this.r = array[offset];\n    this.g = array[offset + 1];\n    this.b = array[offset + 2];\n    this.a = array[offset + 3];\n    return this;\n  }\n\n  toArray(array: number[] = [], offset = 0) {\n    array[offset] = this.r;\n    array[offset + 1] = this.g;\n    array[offset + 2] = this.b;\n    array[offset + 3] = this.a;\n    return array;\n  }\n\n  toRGBString(): string {\n    if (this.a === 1) {\n      return `rgb(${this.r},${this.g},${this.b})`;\n    } else {\n      return `rgba(${this.r},${this.g},${this.b},${maxDotNumber(this.a, 6)})`;\n    }\n  }\n\n  toHexString(): string {\n    if (this.a === 1) {\n      return (\"000000\" + this.hex.toString(16)).slice(-6);\n    } else {\n      return (\"00000000\" + this.hex.toString(16)).slice(-8);\n    }\n  }\n\n  toString(): string {\n    if (this.a === 1) {\n      return \"#\" + this.toHexString();\n    } else {\n      return this.toRGBString();\n    }\n  }\n\n  toColorSpaceString(colorSpace = SRGBColorSpace): string {\n    ColorManagement.fromWorkingColorSpace(__color.copy(this), colorSpace);\n    const r = __color.r;\n    const g = __color.g;\n    const b = __color.b;\n    if (colorSpace !== SRGBColorSpace) {\n      // Requires CSS Color Module Level 4 (https://www.w3.org/TR/css-color-4/).\n      return `color(${colorSpace} ${r.toFixed(3)} ${g.toFixed(3)} ${b.toFixed(\n        3\n      )})`;\n    } else {\n      return this.toRGBString();\n    }\n  }\n\n  *[Symbol.iterator]() {\n    yield this.r;\n    yield this.g;\n    yield this.b;\n    yield this.a;\n  }\n\n  clone(): Color {\n    return new Color(this.color);\n  }\n\n  copy(c: Color) {\n    this.setColor(c.color);\n    return this;\n  }\n\n  copySRGBToLinear(color: Color) {\n    this.r = SRGBToLinear(color.r);\n    this.g = SRGBToLinear(color.g);\n    this.b = SRGBToLinear(color.b);\n    // this.a = SRGBToLinear(color.a);\n    return this;\n  }\n\n  copyLinearToSRGB(color: Color) {\n    this.r = LinearToSRGB(color.r);\n    this.g = LinearToSRGB(color.g);\n    this.b = LinearToSRGB(color.b);\n    // this.a = LinearToSRGB(color.a);\n    return this;\n  }\n\n  convertSRGBToLinear() {\n    this.copySRGBToLinear(this);\n    return this;\n  }\n\n  convertLinearToSRGB() {\n    this.copyLinearToSRGB(this);\n    return this;\n  }\n\n  equals(c: Color) {\n    return c.r === this.r && c.g === this.g && c.b === this.b && c.a === this.a;\n  }\n\n  add(color: Color) {\n    this.r = this.r + color.r;\n    this.g = this.g + color.g;\n    this.b = this.b + color.b;\n    return this;\n  }\n\n  addColors(color1: Color, color2: Color) {\n    this.r = color1.r + color2.r;\n    this.g = color1.g + color2.g;\n    this.b = color1.b + color2.b;\n    return this;\n  }\n\n  addScalar(s: number) {\n    this.r = this.r + s;\n    this.g = this.g + s;\n    this.b = this.b + s;\n    return this;\n  }\n\n  setScalar(scalar: number) {\n    this.r = scalar;\n    this.g = scalar;\n    this.b = scalar;\n    return this;\n  }\n\n  sub(color: Color) {\n    this.r = this.r - color.r;\n    this.g = this.g - color.g;\n    this.b = this.b - color.b;\n    return this;\n  }\n\n  multiply(color: Color) {\n    this.r = this.r * color.r;\n    this.g = this.g * color.g;\n    this.b = this.b * color.b;\n    return this;\n  }\n\n  multiplyScalar(s: number) {\n    this.r = this.r * s;\n    this.g = this.g * s;\n    this.b = this.b * s;\n    return this;\n  }\n\n  opposite(\n    bw = true, // whether to invert to black or white\n    blackColor = \"#000000\",\n    whiteColor = \"#ffffff\"\n  ) {\n    if (bw) {\n      // https://stackoverflow.com/a/3943023/112731\n      return this.setColor(\n        this.r * 0.299 + this.g * 0.587 + this.b * 0.114 > 186\n          ? blackColor\n          : whiteColor\n      );\n    } else {\n      const { r, g, b } = this.color;\n      this.r = 255 - r;\n      this.g = 255 - g;\n      this.b = 255 - b;\n      return this;\n    }\n  }\n\n  closet(blackColor = \"#000000\", whiteColor = \"#ffffff\") {\n    return this.opposite(true, blackColor, whiteColor).opposite(\n      true,\n      blackColor,\n      whiteColor\n    );\n  }\n\n  // t: 0 ~ 1\n  lighten(t: number) {\n    t = clamp(t, 0, 1);\n    const { r, g, b, a } = this.color;\n    if (a == 0) {\n      this.a = t;\n    } else {\n      this.r = r + (255 - r) * t;\n      this.g = g + (255 - g) * t;\n      this.b = b + (255 - b) * t;\n    }\n    return this;\n  }\n\n  // t: 0 ~ 1\n  darken(t: number) {\n    t = clamp(t, 0, 1);\n    const { r, g, b, a } = this.color;\n    if (a == 0) {\n      this.a = t;\n    } else {\n      this.r = r * (1 - t);\n      this.g = g * (1 - t);\n      this.b = b * (1 - t);\n    }\n    return this;\n  }\n\n  // 渐变色\n  // t: 0 ~ 1\n  lerp(color: Color, t: number) {\n    t = clamp(t, 0, 1);\n    const { r, g, b } = this.color;\n    this.r = r + (color.r - r) * t;\n    this.g = g + (color.g - g) * t;\n    this.b = b + (color.b - b) * t;\n    return this;\n  }\n\n  // 渐变色\n  // t: 0 ~ 1\n  lerpColors(start: Color, end: Color, t: number) {\n    t = clamp(t, 0, 1);\n    this.r = start.r + (end.r - start.r) * t;\n    this.g = start.g + (end.g - start.g) * t;\n    this.b = start.b + (end.b - start.b) * t;\n    return this;\n  }\n\n  // 渐变色\n  // t: 0 ~ 1\n  static gradient(start: string, end: string, t: number): string {\n    try {\n      return __color.lerpColors(new Color(start), new Color(end), t).toString();\n    } catch (e) {\n      return end;\n    }\n  }\n\n  static random(): string {\n    return __color.setHEX(Math.random() * 0xffffff).toString();\n  }\n\n  static nextIndex = 0;\n  static next(startIndex = Color.nextIndex): string {\n    Color.nextIndex = startIndex;\n    const keys = Object.keys(COLOR_NAMES);\n    const length = keys.length;\n    return __color\n      .setHEX(COLOR_NAMES[keys[Color.nextIndex++ % length]])\n      .toString();\n  }\n\n  setColorName(style: string) {\n    const hex = COLOR_NAMES[style.toLowerCase()];\n    if (hex !== undefined) {\n      this.setHEX(hex);\n    } else if (style === \"none\") {\n      this.a = 0;\n    } else {\n      this.a = 1;\n      // throw new Error(\"Color.setColorName: Unknown color \" + style);\n      console.warn(\"Color.setColorName: Unknown color \" + style);\n    }\n    return this;\n  }\n  static getColors(): string[] {\n    return Object.values(COLOR_NAMES).map((v) => {\n      return __color.setHEX(v).toString();\n    });\n  }\n\n  setRGB(r: number, g: number, b: number, a = 1) {\n    this.r = r;\n    this.g = g;\n    this.b = b;\n    this.a = a;\n    return this;\n  }\n\n  get rgb() {\n    return {\n      r: this.r,\n      g: this.g,\n      b: this.b,\n      a: this.a\n    };\n  }\n\n  // RRGGBB(AA)\n  setHEX(hex: number) {\n    hex = Math.floor(hex);\n    // 16777216 = Math.pow(2, 24)\n    if (hex < 16777216) {\n      this.r = (hex >> 16) & 0xff;\n      this.g = (hex >> 8) & 0xff;\n      this.b = hex & 0xff;\n      this.a = 1;\n    } else {\n      this.r = (hex >> 24) & 0xff;\n      this.g = (hex >> 16) & 0xff;\n      this.b = (hex >> 8) & 0xff;\n      this.a = (hex & 0xff) / 255;\n    }\n    return this;\n  }\n\n  get hex(): number {\n    let hex = (this.r << 16) + (this.g << 8) + this.b;\n    if (this.a !== 1) {\n      // hex += Math.round(this.a * 255) << 24;\n      hex = hex << 8;\n      hex += Math.round(this.a * 255);\n    }\n    return hex;\n  }\n\n  /// hsl(a) : hue 色相 + saturation 饱和度 + lightness luminosity 亮度\n  /// h,s,l ranges are in 0.0 ~ 1.0\n  setHSL(_h: number, _s: number, _l: number, a = 1) {\n    const h = euclideanModulo(_h, 1);\n    const s = clamp(_s, 0, 1);\n    const l = clamp(_l, 0, 1);\n    if (s === 0) {\n      this.r = l * 255;\n      this.g = l * 255;\n      this.b = l * 255;\n    } else {\n      const p = l <= 0.5 ? l * (1 + s) : l + s - l * s;\n      const q = 2 * l - p;\n      this.r = hue2rgb(q, p, h + 1 / 3) * 255;\n      this.g = hue2rgb(q, p, h) * 255;\n      this.b = hue2rgb(q, p, h - 1 / 3) * 255;\n    }\n    this.a = a;\n    return this;\n  }\n\n  getHSL(target?: Color) {\n    const r = this.r;\n    const g = this.g;\n    const b = this.b;\n    const max = Math.max(r, g, b) / 255;\n    const min = Math.min(r, g, b) / 255;\n    let hue, saturation;\n    const lightness = (min + max) / 2.0;\n    if (min === max) {\n      hue = 0;\n      saturation = 0;\n    } else {\n      const delta = max - min;\n      saturation =\n        lightness <= 0.5 ? delta / (max + min) : delta / (2 - max - min);\n      switch (max) {\n        case r:\n          hue = (g - b) / delta + (g < b ? 6 : 0);\n          break;\n        case g:\n          hue = (b - r) / delta + 2;\n          break;\n        case b:\n        default:\n          hue = (r - g) / delta + 4;\n          break;\n      }\n      hue /= 6;\n    }\n    if (target) {\n      target.setHSL(hue, saturation, lightness, this.a);\n    }\n    return {\n      h: hue,\n      s: saturation,\n      l: lightness,\n      a: this.a\n    };\n  }\n\n  offsetHSL(h: number, s: number, l: number) {\n    const hsl = this.getHSL();\n    return this.setHSL(hsl.h + h, hsl.s + s, hsl.l + l);\n  }\n\n  lerpHSL(color: Color, t: number) {\n    const hsla = this.getHSL();\n    const hslb = color.getHSL();\n    const h = lerp(hsla.h, hslb.h, t);\n    const s = lerp(hsla.s, hslb.s, t);\n    const l = lerp(hsla.l, hslb.l, t);\n    this.setHSL(h, s, l);\n    return this;\n  }\n\n  /// hsv(a) / hsb(a) : hue 色相 + saturation 饱和度 + value or brightness 明度\n  /// h,s,v ranges are in 0.0 ~ 1.0\n  setHSV(_h: number, _s: number, _v: number, a = 1) {\n    const h = clamp(_h, 0, 1) * 360;\n    const s = clamp(_s, 0, 1);\n    const v = clamp(_v, 0, 1);\n    const hi = Math.floor(h / 60) % 6;\n    const f = h / 60 - Math.floor(h / 60);\n    const p = v * (1.0 - s);\n    const q = v * (1.0 - f * s);\n    const t = v * (1.0 - (1.0 - f) * s);\n    const c = [\n      [v, t, p],\n      [q, v, p],\n      [p, v, t],\n      [p, q, v],\n      [t, p, v],\n      [v, p, q]\n    ][hi];\n    this.r = c[0] * 255;\n    this.g = c[1] * 255;\n    this.b = c[2] * 255;\n    this.a = a;\n    return this;\n  }\n  setHSB(_h: number, _s: number, _b: number, a = 1) {\n    this.setHSV(_h, _s, _b, a);\n  }\n\n  getHSV(target?: Color) {\n    const { r, g, b, a } = this.color;\n    const max = Math.max(r, g, b);\n    const min = Math.min(r, g, b);\n    const delta = max - min;\n    let h;\n    if (r === max) {\n      h = (g - b) / delta;\n    } else if (g === max) {\n      h = 2 + (b - r) / delta;\n    } else {\n      h = 4 + (r - g) / delta;\n    }\n    h /= 6;\n    if (h < 0) {\n      h += 1;\n    }\n    const _h = delta == 0 ? 0 : h;\n    const _s = max === 0 ? 0 : delta / max;\n    const _v = max / 255;\n    if (target) {\n      target.setHSV(_h, _s, _v, a);\n    }\n    return {\n      h: _h,\n      s: _s,\n      v: _v,\n      a: a\n    };\n  }\n  getHSB(target?: Color) {\n    const { h, s, v, a } = this.getHSV(target);\n    return {\n      h,\n      s,\n      b: v,\n      a\n    };\n  }\n}\n\n// 全局可复用的对象\nexport const __color = new Color();\n\n// Color space string identifiers, matching CSS Color Module Level 4 and WebGPU names where available.\nexport const NoColorSpace = \"\";\nexport const SRGBColorSpace = \"srgb\";\nexport const LinearSRGBColorSpace = \"srgb-linear\";\n\nexport const LinearTransfer = \"linear\";\nexport const SRGBTransfer = \"srgb\";\n\nexport function SRGBToLinear(c: number): number {\n  return c < 0.04045\n    ? c * 0.0773993808\n    : Math.pow(c * 0.9478672986 + 0.0521327014, 2.4);\n}\n\nexport function LinearToSRGB(c: number): number {\n  return c < 0.0031308 ? c * 12.92 : 1.055 * Math.pow(c, 0.41666) - 0.055;\n}\n\nconst LINEAR_REC709_TO_XYZ: Matrix3 = new Matrix3().set(\n  0.4123908,\n  0.3575843,\n  0.1804808,\n  0.212639,\n  0.7151687,\n  0.0721923,\n  0.0193308,\n  0.1191948,\n  0.9505322\n);\nconst XYZ_TO_LINEAR_REC709: Matrix3 = new Matrix3().set(\n  3.2409699,\n  -1.5373832,\n  -0.4986108,\n  -0.9692436,\n  1.8759675,\n  0.0415551,\n  0.0556301,\n  -0.203977,\n  1.0569715\n);\nconst REC709_PRIMARIES = [0.64, 0.33, 0.3, 0.6, 0.15, 0.06];\nconst REC709_LUMINANCE_COEFFICIENTS = [0.2126, 0.7152, 0.0722];\nconst D65 = [0.3127, 0.329];\n\nexport const ColorManagement = {\n  enabled: true,\n\n  workingColorSpace: LinearSRGBColorSpace,\n\n  /**\n   * Implementations of supported color spaces.\n   *\n   * Required:\n   *\t- primaries: chromaticity coordinates [ rx ry gx gy bx by ]\n   *\t- whitePoint: reference white [ x y ]\n   *\t- transfer: transfer function (pre-defined)\n   *\t- toXYZ: Matrix3 RGB to XYZ transform\n   *\t- fromXYZ: Matrix3 XYZ to RGB transform\n   *\t- luminanceCoefficients: RGB luminance coefficients\n   *\n   * Optional:\n   *  - outputColorSpaceConfig: { drawingBufferColorSpace: ColorSpace }\n   *  - workingColorSpaceConfig: { unpackColorSpace: ColorSpace }\n   *\n   * Reference:\n   * - https://www.russellcottrell.com/photo/matrixCalculator.htm\n   */\n  spaces: {} as Record<string, Record<string, any>>,\n\n  convert: function (\n    color: Color,\n    sourceColorSpace: string,\n    targetColorSpace: string\n  ): Color {\n    if (\n      this.enabled === false ||\n      sourceColorSpace === targetColorSpace ||\n      !sourceColorSpace ||\n      !targetColorSpace\n    ) {\n      return color;\n    }\n\n    if (this.spaces[sourceColorSpace].transfer === SRGBTransfer) {\n      color.r = SRGBToLinear(color.r);\n      color.g = SRGBToLinear(color.g);\n      color.b = SRGBToLinear(color.b);\n      // color.a = SRGBToLinear(color.a);\n    }\n\n    if (\n      this.spaces[sourceColorSpace].primaries !==\n      this.spaces[targetColorSpace].primaries\n    ) {\n      color.applyMatrix3(this.spaces[sourceColorSpace].toXYZ);\n      color.applyMatrix3(this.spaces[targetColorSpace].fromXYZ);\n    }\n\n    if (this.spaces[targetColorSpace].transfer === SRGBTransfer) {\n      color.r = LinearToSRGB(color.r);\n      color.g = LinearToSRGB(color.g);\n      color.b = LinearToSRGB(color.b);\n      // color.a = LinearToSRGB(color.a);\n    }\n\n    return color;\n  },\n\n  fromWorkingColorSpace: function (color: Color, targetColorSpace: string) {\n    return this.convert(color, this.workingColorSpace, targetColorSpace);\n  },\n\n  toWorkingColorSpace: function (color: Color, sourceColorSpace: string) {\n    return this.convert(color, sourceColorSpace, this.workingColorSpace);\n  },\n\n  getPrimaries: function (colorSpace: string) {\n    return this.spaces[colorSpace].primaries;\n  },\n\n  getTransfer: function (colorSpace: string) {\n    if (colorSpace === NoColorSpace) {\n      return LinearTransfer;\n    }\n    return this.spaces[colorSpace].transfer;\n  },\n\n  getLuminanceCoefficients: function (\n    this: any,\n    target: Color,\n    colorSpace = this.workingColorSpace\n  ) {\n    return target.fromArray(this.spaces[colorSpace].luminanceCoefficients);\n  },\n\n  define: function (colorSpaces: Record<string, Record<string, any>>) {\n    Object.assign(this.spaces, colorSpaces);\n  },\n\n  // Internal APIs\n\n  _getMatrix: function (\n    targetMatrix: Matrix3,\n    sourceColorSpace: string,\n    targetColorSpace: string\n  ) {\n    return targetMatrix\n      .copy(this.spaces[sourceColorSpace].toXYZ)\n      .multiply(this.spaces[targetColorSpace].fromXYZ);\n  },\n\n  _getDrawingBufferColorSpace: function (colorSpace: string) {\n    return this.spaces[colorSpace].outputColorSpaceConfig\n      .drawingBufferColorSpace;\n  },\n\n  _getUnpackColorSpace: function (\n    this: any,\n    colorSpace = this.workingColorSpace\n  ) {\n    return this.spaces[colorSpace].workingColorSpaceConfig.unpackColorSpace;\n  }\n};\n\nColorManagement.define({\n  [LinearSRGBColorSpace]: {\n    primaries: REC709_PRIMARIES,\n    whitePoint: D65,\n    transfer: LinearTransfer,\n    toXYZ: LINEAR_REC709_TO_XYZ,\n    fromXYZ: XYZ_TO_LINEAR_REC709,\n    luminanceCoefficients: REC709_LUMINANCE_COEFFICIENTS,\n    workingColorSpaceConfig: { unpackColorSpace: SRGBColorSpace },\n    outputColorSpaceConfig: { drawingBufferColorSpace: SRGBColorSpace }\n  },\n\n  [SRGBColorSpace]: {\n    primaries: REC709_PRIMARIES,\n    whitePoint: D65,\n    transfer: SRGBTransfer,\n    toXYZ: LINEAR_REC709_TO_XYZ,\n    fromXYZ: XYZ_TO_LINEAR_REC709,\n    luminanceCoefficients: REC709_LUMINANCE_COEFFICIENTS,\n    outputColorSpaceConfig: { drawingBufferColorSpace: SRGBColorSpace }\n  }\n});\n\nfunction hue2rgb(p: number, q: number, t: number) {\n  if (t < 0) t += 1;\n  if (t > 1) t -= 1;\n  if (t < 1 / 6) return p + (q - p) * 6 * t;\n  if (t < 1 / 2) return q;\n  if (t < 2 / 3) return p + (q - p) * 6 * (2 / 3 - t);\n  return p;\n}\n","import { flushArray, isEmptyObject } from \"@zyzgroup/core-common\";\nimport { HTMLEventObservable } from \"../useEventListener\";\nimport { createElement, empty, insert } from \"../useElement\";\nimport {\n  tap$,\n  useMouseAndPointerDownMovePoint$,\n  useMousePoint,\n  usePointerDownMovePoint$\n} from \"../useElementEvents\";\nimport {\n  atomWriteAttribute,\n  cssAttrsToCanvasAttrs,\n  useAttribute\n} from \"../useAttribute\";\nimport { Shape, ShapeCombo } from \"./Shape\";\nimport {\n  createSVGElement,\n  createSvgPath,\n  downloadFromSVGElement,\n  isSVGElementPath\n} from \"./svg\";\nimport { YZCanvasContext } from \"./canvas\";\nimport { Matrix, toRadian } from \"../../math\";\nimport { Color } from \"../../color\";\nimport { BehaviorSubject } from \"rxjs\";\nimport { useResize$ } from \"../useResize\";\nimport { setStyle } from \"../useStyle\";\nimport { waitElementAddedInDOM } from \"../useMutation\";\n\n// d3\n// https://jsfiddle.net/user/raphaeljs/fiddles\n\nexport type DrawShape = Shape | ShapeCombo;\n\nexport type DrawType = \"svg\" | \"canvas\" | \"div\";\n\nexport class DrawContext {\n  public PARENT_EL: HTMLEventObservable;\n\n  public SVG_EL: SVGElement | null = null;\n\n  public CANVAS_EL: HTMLCanvasElement | null = null;\n  public ctx: YZCanvasContext | null = null;\n\n  public rect = {\n    x: 0,\n    y: 0,\n    width: 0,\n    height: 0\n  };\n  public size$ = new BehaviorSubject<DOMRect | null>(null);\n  private resizeSubscription: any;\n\n  public mpg = useMousePoint();\n  private mouseSubscription: any;\n\n  public shapes: Shape[] = [];\n\n  public shapeTap$ = new BehaviorSubject<Shape | null>(null);\n  private tapSubscription: any;\n\n  private lastMouseInShapeId = \"\";\n  // 一旦拖拽开始，不释放时，可以一直触发\n  private draggingShapeId = \"\";\n  private prevCursor = \"default\";\n\n  constructor(\n    PARENT_EL: HTMLEventObservable = document.documentElement,\n    type: DrawType = \"canvas\",\n    enableCustomContext = false // true 影响性能\n  ) {\n    this.PARENT_EL = PARENT_EL;\n\n    if (type == \"svg\" || type == \"canvas\") {\n      empty(this.PARENT_EL);\n    }\n\n    if (type == \"svg\") {\n      this.SVG_EL = createSVGElement(\"svg\") as unknown as SVGElement;\n      insert(this.PARENT_EL, this.SVG_EL);\n    }\n\n    if (type == \"canvas\") {\n      this.CANVAS_EL = createElement(\"canvas\") as unknown as HTMLCanvasElement;\n      insert(this.PARENT_EL, this.CANVAS_EL);\n    }\n\n    this.resizeSubscription = useResize$(this.PARENT_EL).subscribe(\n      (r: DOMRect) => {\n        this.rect.x = r.x;\n        this.rect.y = r.y;\n        this.rect.width = r.width;\n        this.rect.height = r.height;\n        if (this.SVG_EL) {\n          useAttribute(this.SVG_EL, {\n            viewBox: `0 0 ${this.rect.width} ${this.rect.height}`,\n            width: `${this.rect.width}`,\n            height: `${this.rect.height}`\n          });\n        }\n        if (this.CANVAS_EL) {\n          useAttribute(this.CANVAS_EL, {\n            width: `${this.rect.width}`,\n            height: `${this.rect.height}`\n          });\n          this.ctx = new YZCanvasContext(\n            this.CANVAS_EL,\n            this.rect.width,\n            this.rect.height,\n            enableCustomContext\n          );\n        }\n        this.size$.next(r);\n      }\n    );\n\n    this.mouseSubscription = useMouseAndPointerDownMovePoint$(\n      this.SVG_EL || this.CANVAS_EL || this.PARENT_EL,\n      {\n        useMousePoint: this.mpg\n      }\n    ).subscribe(() => {});\n\n    this.tapSubscription = tap$(this.PARENT_EL).subscribe((e) => {\n      for (const shape of this.shapes) {\n        if (shape.isMouseIn) {\n          this.shapeTap$.next(shape);\n          // if (shape.parent) {\n          //   shape.parent.combo.shapes.forEach((s) => {\n          //     if (s !== shape) {\n          //       this.shapeTap$.next(s);\n          //     }\n          //   });\n          // }\n          break;\n        }\n      }\n    });\n  }\n\n  public destroy() {\n    this.resizeSubscription.unsubscribe();\n    this.mouseSubscription.unsubscribe();\n    this.tapSubscription.unsubscribe();\n  }\n\n  private setCursor(\n    cursor: \"default\" | \"pointer\" | \"grab\" | \"grabbing\" = \"default\"\n  ) {\n    if (cursor != this.prevCursor) {\n      this.PARENT_EL.style.cursor = cursor;\n      this.prevCursor = cursor;\n    }\n  }\n\n  // requestAnimationFrameCycle()\n  public draw(...ss: DrawShape[]) {\n    // 传入空数组：保持原 shapes 以提高性能\n    if (ss.length) {\n      const frameShapes: Shape[] = [];\n      ss.forEach((s) => {\n        if (s instanceof ShapeCombo) {\n          frameShapes.push(...s.shapes);\n        } else {\n          frameShapes.push(s);\n        }\n      });\n\n      // 删除不需要的 shape el\n      if (this.SVG_EL) {\n        this.shapes\n          .filter(\n            (shape) => frameShapes.findIndex((s) => s.id == shape.id) == -1\n          )\n          .forEach((shape) => {\n            if (shape.el) {\n              shape.el.remove();\n              delete shape.el;\n            }\n          });\n      }\n\n      flushArray(this.shapes, frameShapes);\n    }\n\n    if (this.ctx) {\n      // draw in Canvas\n      this.ctx.clearRect();\n    }\n\n    this.lastMouseInShapeId = \"\";\n    if (!this.mpg.current.isDown) {\n      this.draggingShapeId = \"\";\n    }\n\n    for (const shape of this.shapes) {\n      // transform origin - 不缓存, 直接使用 getBoundingClientRectCenter， 间接使用 getBoundingClientRect\n      const { x: centerX, y: centerY } = shape.transformOrigin();\n      let centerXSelf = 0;\n      let centerYSelf = 0;\n      if (\n        shape.parent?.dDegree ||\n        shape.parent?.dScaleX !== 1 ||\n        shape.parent?.dScaleY !== 1\n      ) {\n        const tos = shape.transformOrigin(true);\n        centerXSelf = tos.x;\n        centerYSelf = tos.y;\n      }\n\n      if (shape.shouldUpdatePathD) {\n        // 强制更新\n        shape.pathD();\n      }\n\n      if (this.SVG_EL) {\n        // draw in SVG\n        if (!shape.el || shape.shouldUpdateSVGElInDraw) {\n          const newEl = shape.toSVGEl();\n          if (!shape.el) {\n            // 新增\n            shape.el = newEl || createSvgPath();\n            insert(this.SVG_EL, shape.el);\n            useAttribute(shape.el, { id: shape.id });\n            // 异步更新问题未解决！\n            // waitElementAddedInDOM(this.SVG_EL, shape.el).then(() => {\n            //   console.log(shape.id, \"added to DOM!\");\n            // });\n          } else {\n            // 只更新 toSVGEl()\n            if (newEl) {\n              shape.el.remove();\n              shape.el = newEl;\n              insert(this.SVG_EL, shape.el);\n              useAttribute(shape.el, { id: shape.id });\n            }\n          }\n          if (isSVGElementPath(shape.el)) {\n            useAttribute(shape.el, { d: shape.toSVGPathD() });\n          }\n          shape.shouldUpdateSVGElInDraw = false;\n          shape.shouldUpdateAttrsInDraw = true;\n          shape.shouldUpdateStyleInDraw = true;\n          shape.shouldUpdateMInDraw = true;\n        }\n        if (shape.shouldUpdateAttrsInDraw) {\n          if (!isEmptyObject(shape.attrs)) {\n            useAttribute(shape.el, shape.attrs);\n          }\n          shape.shouldUpdateAttrsInDraw = false;\n        }\n        if (shape.shouldUpdateStyleInDraw) {\n          if (!isEmptyObject(shape.style)) {\n            setStyle(shape.el, shape.style);\n          }\n          shape.shouldUpdateStyleInDraw = false;\n        }\n        // 性能瓶颈\n        if (shape.shouldUpdateMInDraw || !shape.m) {\n          // 移动的是坐标系 the order of these are important !\n          const m = new Matrix();\n          // 公共\n          m.translate(\n            shape.x + (shape.parent?.dX || 0),\n            shape.y + (shape.parent?.dY || 0)\n          );\n          m.rotate(shape.degree, centerX, centerY);\n          m.scale(shape.scaleX, shape.scaleY, centerX, centerY);\n          // 自己\n          if (shape.parent?.dDegree) {\n            m.rotate(shape.parent.dDegree, centerXSelf, centerYSelf);\n          }\n          if (shape.parent?.dScaleX !== 1 || shape.parent?.dScaleY !== 1) {\n            m.scale(\n              shape.parent?.dScaleX || 1,\n              shape.parent?.dScaleY || 1,\n              centerXSelf,\n              centerYSelf\n            );\n          }\n          useAttribute(shape.el, { transform: m.toString() });\n          // 缓存计算结果\n          shape.m = m;\n          shape.shouldUpdateMInDraw = false;\n        }\n      }\n      if (this.ctx) {\n        // draw in Canvas\n        this.ctx.save();\n        // 移动的是坐标系 the order of these are important !\n        // 公共\n        this.ctx.translate(\n          shape.x + (shape.parent?.dX || 0),\n          shape.y + (shape.parent?.dY || 0)\n        );\n        this.ctx.rotate(toRadian(shape.degree), centerX, centerY);\n        this.ctx.scale(shape.scaleX, shape.scaleY, centerX, centerY);\n        // 自己\n        if (shape.parent?.dDegree) {\n          this.ctx.rotate(\n            toRadian(shape.parent.dDegree),\n            centerXSelf,\n            centerYSelf\n          );\n        }\n        if (shape.parent?.dScaleX !== 1 || shape.parent?.dScaleY !== 1) {\n          this.ctx.scale(\n            shape.parent?.dScaleX || 1,\n            shape.parent?.dScaleY || 1,\n            centerXSelf,\n            centerYSelf\n          );\n        }\n        // 缓存计算结果\n        shape.m = this.ctx.currentMatrix;\n        cssAttrsToCanvasAttrs(this.ctx, shape.attrs);\n        shape.toCanvasContext(this.ctx);\n        if (this.ctx.hasSetCustomStrokeStyle) {\n          this.ctx.stroke();\n        }\n        if (this.ctx.hasSetCustomFillStyle) {\n          this.ctx.fill();\n        }\n        // // 画出本次 path2d\n        // this.ctx.save();\n        // this.ctx.lineWidth = 4;\n        // this.ctx.strokeStyle = \"#ff0000\";\n        // this.const path2d = ctx.currentPath2D;\n        // this.ctx.stroke(path2d);\n        // this.ctx.restore();\n      }\n\n      // 性能影响，可关闭检测\n      if (shape.interactive) {\n        // isMouseIn\n        if (this.SVG_EL) {\n          shape.isMouseIn =\n            shape.isPointInPath(\n              this.SVG_EL,\n              this.mpg.current.x,\n              this.mpg.current.y\n            ) ||\n            shape.isPointInStroke(\n              this.SVG_EL,\n              this.mpg.current.x,\n              this.mpg.current.y\n            );\n        } else if (this.ctx) {\n          shape.isMouseIn =\n            shape.isPointInPath(\n              this.ctx,\n              this.mpg.current.x,\n              this.mpg.current.y\n            ) ||\n            shape.isPointInStroke(\n              this.ctx,\n              this.mpg.current.x,\n              this.mpg.current.y\n            );\n        } else {\n          shape.isMouseIn = false;\n        }\n      } else {\n        shape.isMouseIn = false;\n      }\n\n      if (shape.isMouseIn) {\n        this.setCursor(\"pointer\");\n        this.lastMouseInShapeId = shape.id;\n      }\n\n      // isDragging\n      shape.isDragging = shape.id == this.draggingShapeId;\n      if (\n        this.mpg.current.isDown &&\n        (shape.isDragging ||\n          (!this.draggingShapeId &&\n            shape.isMouseIn &&\n            shape.drag &&\n            shape.drag.enable))\n      ) {\n        this.setCursor(\"grabbing\");\n        shape.isDragging = true;\n        this.draggingShapeId = shape.id;\n        let dx = this.mpg.current.x - this.mpg.start.x;\n        let dy = this.mpg.current.y - this.mpg.start.y;\n        if (dx || dy) {\n          if (shape.drag && shape.drag.enable && shape.drag.alongPath) {\n            const closestPoint = shape.drag.alongPath\n              .transform({ m: shape.m })\n              .closestPoint(this.mpg.current.x, this.mpg.current.y);\n            dx = closestPoint.point.x - shape.x;\n            dy = closestPoint.point.y - shape.y;\n          }\n          if (dx || dy) {\n            shape.move(dx, dy);\n            shape.parent?.combo.shapes.forEach((s) => {\n              if (s.drag?.followSibling && s !== shape) {\n                s.move(dx, dy);\n              }\n            });\n          }\n        }\n        this.mpg.setStart(this.mpg.current);\n      } else if (shape.isMouseIn && shape.drag && shape.drag.enable) {\n        this.setCursor(\"grab\");\n      }\n\n      if (this.ctx) {\n        this.ctx.restore();\n      }\n    }\n\n    if (!this.lastMouseInShapeId && !this.draggingShapeId) {\n      this.setCursor(\"default\");\n    }\n  }\n\n  public clear() {\n    this.shapes.forEach((shape) => {\n      if (shape.el) {\n        shape.el.remove();\n        delete shape.el;\n      }\n    });\n    if (this.ctx) {\n      this.ctx.clearRect();\n    }\n    this.shapes = [];\n  }\n\n  public drawMouseMoveLine(options?: {\n    brushSize?: number;\n    brushColor?: string;\n  }) {\n    const brushSize = options?.brushSize || 4;\n    const brushColor = options?.brushColor || \"#000000\";\n    let hasSetMoveTo = false;\n    const s = usePointerDownMovePoint$(\n      this.SVG_EL || this.CANVAS_EL || this.PARENT_EL,\n      {\n        start: () => {\n          hasSetMoveTo = false;\n          if (this.ctx) {\n            this.ctx.save();\n            this.ctx.lineWidth = brushSize;\n            this.ctx.strokeStyle = brushColor;\n            this.ctx.beginPath();\n          }\n        },\n        end: () => {\n          if (this.ctx) {\n            // this.ctx.closePath();\n            this.ctx.restore();\n          }\n        }\n      }\n    ).subscribe((mpg) => {\n      if (this.ctx) {\n        if (!hasSetMoveTo) {\n          hasSetMoveTo = true;\n          this.ctx.moveTo(mpg.current.x, mpg.current.y);\n        } else {\n          this.ctx.lineTo(mpg.current.x, mpg.current.y);\n        }\n        this.ctx.stroke();\n      }\n    });\n    return () => {\n      s.unsubscribe();\n    };\n  }\n\n  public drawMouseMoveBrush(options?: {\n    brushSize?: number;\n    brushDensity?: number;\n    brushColor?: string;\n  }) {\n    const brushSize = options?.brushSize || 10;\n    const brushDensity = options?.brushDensity || 50;\n    const brushColor = options?.brushColor || \"#000000\";\n    const brushColorNumber = new Color(brushColor);\n    const r = brushColorNumber.r;\n    const g = brushColorNumber.g;\n    const b = brushColorNumber.b;\n    const s = usePointerDownMovePoint$(\n      this.SVG_EL || this.CANVAS_EL || this.PARENT_EL\n    ).subscribe((mpg) => {\n      if (this.ctx) {\n        const imageData = this.ctx.getImageData(\n          0,\n          0,\n          this.ctx.canvas.width,\n          this.ctx.canvas.height\n        );\n        const pixels = imageData.data;\n        for (let i = 0; i < brushDensity; i++) {\n          const angle = Math.random() * Math.PI * 2;\n          const radius = Math.random() * brushSize;\n          const xpos = (mpg.current.x + Math.cos(angle) * radius) | 0;\n          const ypos = (mpg.current.y + Math.sin(angle) * radius) | 0;\n          const offset = (xpos + ypos * imageData.width) * 4; // array index of canvas coordinate\n          // set the color of a pixel using its component colors: r,g,b,a (0-255)\n          pixels[offset] = r; // red\n          pixels[offset + 1] = g; // green\n          pixels[offset + 2] = b; // blue\n          pixels[offset + 3] = 255; // alpha\n        }\n        this.ctx.putImageData(imageData);\n      }\n    });\n    return () => {\n      s.unsubscribe();\n    };\n  }\n\n  public downloadSVG = () => {\n    if (this.SVG_EL) {\n      downloadFromSVGElement(this.SVG_EL);\n    }\n  };\n}\n","import { Shape, ShapeOptions } from \"../Shape\";\nimport { SVGParsedPathData } from \"../svg\";\nimport { YZCanvasContext } from \"../canvas\";\nimport { angle, distance, polar, toDegree, toRadian } from \"../../../math\";\n\nexport type LineShapeOptions = {\n  lineLength?: number;\n  // 渐变色\n  startColor?: string;\n  endColor?: string;\n} & ShapeOptions;\n\n/**\n * canvas svg Vector 坐标系\n *                [-90° / 270°]\n *                  *\n *                  *\n *                  *\n *  [180°] *  *  *  *  *  *  *  [0°]\n *                  *\n *                  *\n *                  *\n *                [90°]\n */\n\n// 直线：默认以 （0,0）为起点， 0° 划线\nexport class LineShape extends Shape {\n  public lineLength: number;\n  public startColor?: string;\n  public endColor?: string;\n\n  constructor(options?: LineShapeOptions) {\n    // transformOrigin 为（0,0）\n    super({ ...options, centerX: 0, centerY: 0 });\n    this.lineLength = options?.lineLength || 0;\n    this.startColor = options?.startColor;\n    this.endColor = options?.endColor;\n    this.setAttr({\n      strokeWidth: this.getAttr(\"strokeWidth\") || \"1\",\n      stroke: this.startColor || this.getAttr(\"stroke\") || \"#000000\"\n    });\n  }\n\n  protected cloneShape(): LineShape {\n    const shape = new LineShape({\n      ...super.getBaseOptions(),\n      lineLength: this.lineLength,\n      startColor: this.startColor,\n      endColor: this.endColor\n    });\n    return shape;\n  }\n\n  // 供外部变更\n  public lineToAbsolutePoint(point: { x: number; y: number }) {\n    const degree = toDegree(angle(this.x, this.y, point.x, point.y));\n    const lineLength = distance(this.x, this.y, point.x, point.y);\n    if (degree != this.degree || lineLength != this.lineLength) {\n      if (degree != this.degree) {\n        this.rotateTo(degree);\n      }\n      if (lineLength != this.lineLength) {\n        this.lineLength = lineLength;\n      }\n      this.shouldUpdatePathD = true;\n    }\n  }\n\n  public enableGradient(startColor: string, endColor: string) {\n    this.startColor = startColor;\n    this.endColor = endColor;\n    this.setAttr({\n      stroke: this.startColor\n    });\n    // 在 toCanvasContext 或 toSVGPathData 里设置渐变\n  }\n  public disableGradient(startColor: string) {\n    this.startColor = startColor;\n    this.endColor = undefined;\n    this.setAttr({\n      stroke: this.startColor\n    });\n  }\n\n  public getBoundingClientRect() {\n    return {\n      x: 0,\n      y: 0,\n      width: this.lineLength,\n      height: parseFloat(this.getAttr(\"strokeWidth\") as string)\n    };\n  }\n\n  public toSVGPathData(): SVGParsedPathData[] {\n    return [\n      [\"m\", 0, 0],\n      [\"l\", this.lineLength, 0]\n    ];\n  }\n\n  public toCanvasContext(ctx: YZCanvasContext): void {\n    if (this.startColor && this.endColor) {\n      // canvas 支持渐变色\n      this.setAttr({\n        stroke: ctx.createLinearGradient(0, 0, this.lineLength, 0, {\n          0: this.startColor,\n          1: this.endColor\n        })\n      });\n    }\n    ctx.beginPath();\n    ctx.moveTo(0, 0);\n    ctx.lineTo(this.lineLength, 0);\n  }\n\n  // 绝对值 - 考虑 transform : translate rotate scale\n  public intersection(line: LineShape): { x: number; y: number } | null {\n    const l1 = this.transformPathD().normalizedLines[0];\n    const l2 = line.transformPathD().normalizedLines[0];\n    return l1.intersection(l2);\n  }\n}\n\nexport default LineShape;\n","import { Shape, ShapeOptions } from \"../Shape\";\nimport { SVGParsedPathData } from \"../svg\";\nimport { YZCanvasContext } from \"../canvas\";\n\nexport type CurveShapeOptions = {\n  cx?: number; // 相对于自身（0,0）的坐标\n  cy?: number; // 相对于自身（0,0）的坐标\n  toX?: number; // 相对于自身（0,0）的坐标\n  toY?: number; // 相对于自身（0,0）的坐标\n  isLineThrough?: boolean;\n} & ShapeOptions;\n\n// 曲线\nexport class CurveShape extends Shape {\n  public cx: number;\n  public cy: number;\n  public toX: number;\n  public toY: number;\n  public isLineThrough: boolean;\n\n  constructor(options?: CurveShapeOptions) {\n    super(options);\n    this.cx = options?.cx || 0;\n    this.cy = options?.cy || 0;\n    this.toX = options?.toX || 0;\n    this.toY = options?.toY || 0;\n    this.isLineThrough =\n      typeof options?.isLineThrough == \"boolean\"\n        ? options.isLineThrough\n        : false;\n    this.setAttr({\n      strokeWidth: this.getAttr(\"strokeWidth\") || \"1\",\n      stroke: this.getAttr(\"stroke\") || \"#000000\"\n    });\n  }\n\n  protected cloneShape(): CurveShape {\n    const shape = new CurveShape({\n      ...super.getBaseOptions(),\n      cx: this.cx,\n      cy: this.cy,\n      toX: this.toX,\n      toY: this.toY,\n      isLineThrough: this.isLineThrough\n    });\n    return shape;\n  }\n\n  // 供外部变更\n  public update(options: Partial<CurveShapeOptions>) {\n    if (typeof options.cx == \"number\") {\n      this.cx = options.cx;\n      this.shouldUpdatePathD = true;\n    }\n    if (typeof options.cy == \"number\") {\n      this.cy = options.cy;\n      this.shouldUpdatePathD = true;\n    }\n    if (typeof options.toX == \"number\") {\n      this.toX = options.toX;\n      this.shouldUpdatePathD = true;\n    }\n    if (typeof options.toY == \"number\") {\n      this.toY = options.toY;\n      this.shouldUpdatePathD = true;\n    }\n    if (typeof options.isLineThrough == \"boolean\") {\n      this.isLineThrough = options.isLineThrough;\n      this.shouldUpdatePathD = true;\n    }\n  }\n\n  public toSVGPathData(): SVGParsedPathData[] {\n    if (this.isLineThrough) {\n      const c1x = this.cx * 2 - (0 + this.toX) / 2;\n      const c1y = this.cy * 2 - (0 + this.toY) / 2;\n      return [\n        [\"m\", 0, 0],\n        [\"q\", c1x, c1y, this.toX, this.toY]\n      ];\n    } else {\n      return [\n        [\"m\", 0, 0],\n        [\"q\", this.cx, this.cy, this.toX, this.toY]\n      ];\n    }\n  }\n\n  public toCanvasContext(ctx: YZCanvasContext): void {\n    ctx.beginPath();\n    ctx.moveTo(0, 0);\n    if (this.isLineThrough) {\n      const c1x = this.cx * 2 - (0 + this.toX) / 2;\n      const c1y = this.cy * 2 - (0 + this.toY) / 2;\n      ctx.quadraticCurveTo(c1x, c1y, this.toX, this.toY);\n    } else {\n      ctx.quadraticCurveTo(this.cx, this.cy, this.toX, this.toY);\n    }\n  }\n}\n\nexport default CurveShape;\n","import { Shape, ShapeOptions } from \"../Shape\";\nimport { SVGParsedPathData } from \"../svg\";\nimport { YZCanvasContext } from \"../canvas\";\nimport { polar } from \"../../../math\";\n\nexport type PointsShapeOptions = {\n  points?: { x: number; y: number }[]; // 相对于自身（0,0）的坐标\n  isStraight?: boolean;\n} & ShapeOptions;\n\n// 封闭式多边形\n// Polygon\n// Polyline\n// Triangle\nexport class PointsShape extends Shape {\n  private points: { x: number; y: number }[];\n  public isStraight: boolean;\n\n  constructor(options?: PointsShapeOptions) {\n    super(options);\n    this.points = options?.points || [];\n    this.isStraight =\n      typeof options?.isStraight == \"boolean\" ? options.isStraight : true;\n    this.setAttr({\n      strokeWidth: this.getAttr(\"strokeWidth\") || \"1\",\n      stroke: this.getAttr(\"stroke\") || \"#000000\"\n    });\n  }\n\n  protected cloneShape(): PointsShape {\n    const shape = new PointsShape({\n      ...super.getBaseOptions(),\n      points: [...this.points],\n      isStraight: this.isStraight\n    });\n    return shape;\n  }\n\n  // 供外部变更\n  public update(options: Partial<PointsShapeOptions>) {\n    if (\"points\" in options) {\n      this.points = [...(options.points || this.points)];\n      this.shouldUpdatePathD = true;\n    }\n    if (typeof options.isStraight == \"boolean\") {\n      this.isStraight = options.isStraight;\n      this.shouldUpdatePathD = true;\n    }\n  }\n\n  public toSVGPathData(): SVGParsedPathData[] {\n    const data: SVGParsedPathData[] = [];\n    if (this.points.length < 3) {\n      // throw new Error(\"PointsShape.points length must >= 3\");\n      return data;\n    }\n    const numPoints = this.points.length;\n    if (this.isStraight) {\n      data.push([\"m\", this.points[0].x, this.points[0].y]);\n      for (let i = 1; i <= numPoints - 1; i++) {\n        data.push([\n          \"l\",\n          this.points[i].x - this.points[i - 1].x,\n          this.points[i].y - this.points[i - 1].y\n        ]);\n      }\n      data.push([\"z\"]);\n    } else {\n      // find the first midpoint and move to it\n      const ctrlPoint1X = (this.points[0].x + this.points[numPoints - 1].x) / 2;\n      const ctrlPoint1Y = (this.points[0].y + this.points[numPoints - 1].y) / 2;\n      let prevX = ctrlPoint1X;\n      let prevY = ctrlPoint1Y;\n      data.push([\"m\", prevX, prevY]);\n      // curve through the rest, stopping at each midpoint\n      for (let i = 0; i < numPoints - 1; i++) {\n        const ctrlPointX = (this.points[i].x + this.points[i + 1].x) / 2;\n        const ctrlPointY = (this.points[i].y + this.points[i + 1].y) / 2;\n        data.push([\n          \"q\",\n          this.points[i].x - prevX,\n          this.points[i].y - prevY,\n          ctrlPointX - prevX,\n          ctrlPointY - prevY\n        ]);\n        prevX = ctrlPointX;\n        prevY = ctrlPointY;\n      }\n      // curve through the last point, back to the first midpoint\n      data.push([\n        \"q\",\n        this.points[numPoints - 1].x - prevX,\n        this.points[numPoints - 1].y - prevY,\n        ctrlPoint1X - prevX,\n        ctrlPoint1Y - prevY\n      ]);\n    }\n    return data;\n  }\n\n  public toCanvasContext(ctx: YZCanvasContext): void {\n    if (this.points.length < 3) {\n      // throw new Error(\"PointsShape.points length must >= 3\");\n      return;\n    }\n    ctx.beginPath();\n    const numPoints = this.points.length;\n    if (this.isStraight) {\n      ctx.moveTo(this.points[0].x, this.points[0].y);\n      for (let i = 1; i <= numPoints - 1; i++) {\n        ctx.lineTo(this.points[i].x, this.points[i].y);\n      }\n      ctx.closePath();\n    } else {\n      // find the first midpoint and move to it\n      const ctrlPoint1X = (this.points[0].x + this.points[numPoints - 1].x) / 2;\n      const ctrlPoint1Y = (this.points[0].y + this.points[numPoints - 1].y) / 2;\n      ctx.moveTo(ctrlPoint1X, ctrlPoint1Y);\n      // curve through the rest, stopping at each midpoint\n      for (let i = 0; i < numPoints - 1; i++) {\n        const ctrlPointX = (this.points[i].x + this.points[i + 1].x) / 2;\n        const ctrlPointY = (this.points[i].y + this.points[i + 1].y) / 2;\n        ctx.quadraticCurveTo(\n          this.points[i].x,\n          this.points[i].y,\n          ctrlPointX,\n          ctrlPointY\n        );\n      }\n      // curve through the last point, back to the first midpoint\n      ctx.quadraticCurveTo(\n        this.points[numPoints - 1].x,\n        this.points[numPoints - 1].y,\n        ctrlPoint1X,\n        ctrlPoint1Y\n      );\n    }\n  }\n\n  public isPointInShape(point: { x: number; y: number }) {\n    const count = this.points.length;\n    let isInside = false;\n    const precision = 2e-10;\n\n    for (let i = 0, j = count - 1; i < count; j = i, i++) {\n      const x1 = this.points[i].x;\n      const y1 = this.points[i].y;\n      const x2 = this.points[j].x;\n      const y2 = this.points[j].y;\n\n      if (\n        (x1 === point.x && y1 === point.y) ||\n        (x2 === point.x && y2 === point.y)\n      ) {\n        return true;\n      }\n\n      if (point.y === y1 && point.y === y2) {\n        return true;\n      }\n\n      if ((point.y >= y1 && point.y < y2) || (point.y < y1 && point.y >= y2)) {\n        const k = (x2 - x1) / (y2 - y1);\n        const _x = x1 + k * (point.y - y1);\n\n        if (_x === point.x) {\n          return true;\n        }\n\n        if (Math.abs(_x - point.x) < precision) {\n          return true;\n        }\n\n        if (_x > point.x) {\n          isInside = !isInside;\n        }\n      }\n    }\n\n    return isInside;\n  }\n\n  public [Symbol.iterator]() {\n    let index = -1;\n    return {\n      next: () => ({\n        value:\n          index <= this.points.length - 1 ? this.points[++index] : undefined,\n        done: index >= this.points.length\n      })\n    };\n  }\n\n  public static generate(\n    centerX: number,\n    centerY: number,\n    sideDistance: number, // 中心到边的直线距离\n    sideCount: number\n  ): PointsShape {\n    const points: { x: number; y: number }[] = [];\n    for (let i = 0; i < sideCount; i++) {\n      const theta = (i / sideCount) * 2 * Math.PI;\n      const { dx, dy } = polar(theta, sideDistance);\n      points.push({ x: centerX + dx, y: centerY + dy });\n    }\n    return new PointsShape({ points });\n  }\n}\n\nexport default PointsShape;\n","import { ShapeCombo, ShapeComboOptions } from \"../Shape\";\nimport LineShape from \"./LineShape\";\n\nexport class TreeShapeCombo extends ShapeCombo {\n  private length = 100;\n\n  constructor(options?: ShapeComboOptions) {\n    super(options);\n\n    const line1 = new LineShape({\n      drag: {\n        followSibling: true\n      },\n      lineLength: this.length\n    });\n    this.addShape(line1);\n\n    const line2 = new LineShape({\n      drag: {\n        followSibling: true\n      },\n      lineLength: 20 + Math.random() * 20\n    });\n    this.addShape(line2, {\n      dX: 90 - Math.random() * 40,\n      dDegree: Math.random() * 70\n    });\n\n    const line3 = new LineShape({\n      drag: {\n        followSibling: true\n      },\n      lineLength: 20 + Math.random() * 20\n    });\n    this.addShape(line3, {\n      dX: 90 - Math.random() * 40,\n      dDegree: -Math.random() * 70\n    });\n\n    this.comboRotate(-90, true);\n  }\n\n  protected cloneShapeCombo(): TreeShapeCombo {\n    const shapeCombo = new TreeShapeCombo(super.getBaseOptions());\n    return shapeCombo;\n  }\n}\n\nexport default TreeShapeCombo;\n","import { Shape, ShapeOptions } from \"../Shape\";\nimport { SVGParsedPathData, createSVGElement } from \"../svg\";\nimport { YZCanvasContext } from \"../canvas\";\nimport { length } from \"../../../math\";\n\nexport type BallShapeOptions = {\n  ballRadius?: number; // 半径\n} & ShapeOptions;\n\nexport class BallShape extends Shape {\n  public ballRadius: number;\n\n  constructor(options?: BallShapeOptions) {\n    super(options);\n    this.ballRadius = options?.ballRadius || 0;\n  }\n\n  protected cloneShape(): BallShape {\n    const shape = new BallShape({\n      ...super.getBaseOptions(),\n      ballRadius: this.ballRadius\n    });\n    return shape;\n  }\n\n  // 供外部使用：基本属性变更\n  public update(options: Partial<BallShapeOptions>) {\n    if (typeof options.ballRadius == \"number\") {\n      this.ballRadius = options.ballRadius;\n      this.shouldUpdatePathD = true;\n    }\n  }\n\n  public getBoundingClientRect() {\n    return {\n      x: -this.ballRadius,\n      y: -this.ballRadius,\n      width: this.ballRadius * 2,\n      height: this.ballRadius * 2\n    };\n  }\n\n  public toSVGEl(): SVGElement {\n    const el = createSVGElement(\"circle\");\n    this.setAttr({\n      cx: \"0\",\n      cy: \"0\",\n      r: String(this.ballRadius)\n    });\n    return el;\n  }\n\n  public toSVGPathData(): SVGParsedPathData[] {\n    if (this.ballRadius) {\n      return [\n        [\"m\", 0, -this.ballRadius],\n        [\n          \"a\",\n          this.ballRadius,\n          this.ballRadius,\n          0,\n          1,\n          1,\n          0,\n          2 * this.ballRadius\n        ],\n        [\n          \"a\",\n          this.ballRadius,\n          this.ballRadius,\n          0,\n          1,\n          1,\n          0,\n          -2 * this.ballRadius\n        ],\n        [\"z\"]\n      ];\n    } else {\n      return [[\"m\", 0, 0]];\n    }\n  }\n\n  public toCanvasContext(ctx: YZCanvasContext) {\n    ctx.beginPath();\n    ctx.arc(0, 0, this.ballRadius, 0, Math.PI * 2, true);\n    ctx.closePath();\n  }\n\n  public eq(ball: BallShape): boolean {\n    return (\n      this.x === ball.x &&\n      this.y === ball.y &&\n      this.ballRadius === ball.ballRadius &&\n      this.mass === ball.mass\n    );\n  }\n\n  public midPointBtw(ball: BallShape) {\n    return {\n      x: this.x + (ball.x - this.x) / 2,\n      y: this.y + (ball.y - this.y) / 2\n    };\n  }\n\n  public length() {\n    return length(this.x, this.y);\n  }\n\n  public scalar(scale: number) {\n    this.moveTo(this.x * scale, this.y * scale);\n    return this;\n  }\n\n  public normalize(len = 1): BallShape {\n    const totalLength = this.length();\n    if (totalLength) {\n      const scale = len / totalLength;\n      this.scalar(scale);\n    }\n    return this;\n  }\n\n  public clamp(len: number) {\n    const totalLength = this.length();\n    if (totalLength && totalLength > len) {\n      this.scalar(len / totalLength);\n    }\n    return this;\n  }\n\n  public cross(pt: { x: number; y: number }) {\n    const x = this.x;\n    const y = this.y;\n    return {\n      x: y * pt.x - x * pt.y,\n      y: x * pt.y - y * pt.x\n    };\n  }\n\n  public multiply(pt: { x: number; y: number }) {\n    return {\n      x: this.x * pt.x,\n      y: this.y * pt.y\n    };\n  }\n\n  public div(pt: { x: number; y: number }) {\n    return {\n      x: this.x / pt.x,\n      y: this.y / pt.y\n    };\n  }\n\n  public add(pt: { x: number; y: number }) {\n    return {\n      x: this.x + pt.x,\n      y: this.y + pt.y\n    };\n  }\n\n  public sub(pt: { x: number; y: number }) {\n    return {\n      x: this.x - pt.x,\n      y: this.y - pt.y\n    };\n  }\n\n  public dot(pt: { x: number; y: number }): number {\n    return this.x * pt.x + this.y * pt.y;\n  }\n\n  public reflect(pt: { x: number; y: number }) {\n    const dp = this.dot(pt);\n    return {\n      x: this.x - 2 * dp * pt.x,\n      y: this.y - 2 * dp * pt.y\n    };\n  }\n}\n\nexport default BallShape;\n","import { Shape, ShapeOptions } from \"../Shape\";\nimport { SVGParsedPathData } from \"../svg\";\nimport { YZCanvasContext } from \"../canvas\";\n\nexport class ArrowShape extends Shape {\n  constructor(options?: ShapeOptions) {\n    super(options);\n  }\n\n  protected cloneShape(): ArrowShape {\n    const shape = new ArrowShape({\n      ...super.getBaseOptions()\n    });\n    return shape;\n  }\n\n  public toSVGPathData(): SVGParsedPathData[] {\n    return [\n      [\"m\", -50, -25],\n      [\"l\", 50, 0],\n      [\"l\", 0, -25],\n      [\"l\", 50, 50],\n      [\"l\", -50, 50],\n      [\"l\", 0, -25],\n      [\"l\", -50, 0],\n      [\"l\", 0, -50],\n      [\"z\"]\n    ];\n  }\n\n  public toCanvasContext(ctx: YZCanvasContext) {\n    ctx.beginPath();\n    ctx.moveTo(-50, -25);\n    ctx.lineTo(0, -25);\n    ctx.lineTo(0, -50);\n    ctx.lineTo(50, 0);\n    ctx.lineTo(0, 50);\n    ctx.lineTo(0, 25);\n    ctx.lineTo(-50, 25);\n    ctx.lineTo(-50, -25);\n    ctx.closePath();\n  }\n}\n\nexport default ArrowShape;\n","import { Shape, ShapeOptions } from \"../Shape\";\nimport { SVGParsedPathData, createSVGElement } from \"../svg\";\nimport { YZCanvasContext } from \"../canvas\";\nimport { CubicBezier } from \"../line/\";\n\nexport type RectShapeOptions = {\n  rectWidth?: number;\n  rectHeight?: number;\n  rectBorderRadius?: number; // x y rectWidth rectHeight 包含 rectBorderRadius\n} & ShapeOptions;\n\nexport class RectShape extends Shape {\n  rectWidth: number;\n  rectHeight: number;\n  rectBorderRadius: number;\n\n  constructor(options: RectShapeOptions) {\n    super(options);\n    this.rectWidth = options.rectWidth || 0;\n    this.rectHeight = options.rectHeight || 0;\n    this.rectBorderRadius = options.rectBorderRadius || 0;\n  }\n\n  protected cloneShape(): RectShape {\n    const shape = new RectShape({\n      ...super.getBaseOptions(),\n      rectWidth: this.rectWidth,\n      rectHeight: this.rectHeight,\n      rectBorderRadius: this.rectBorderRadius\n    });\n    return shape;\n  }\n\n  // 供外部使用：基本属性变更\n  public update(options: Partial<RectShapeOptions>) {\n    if (typeof options.rectWidth == \"number\") {\n      this.rectWidth = options.rectWidth;\n      this.shouldUpdatePathD = true;\n    }\n    if (typeof options.rectHeight == \"number\") {\n      this.rectHeight = options.rectHeight;\n      this.shouldUpdatePathD = true;\n    }\n    if (typeof options.rectBorderRadius == \"number\") {\n      this.rectBorderRadius = options.rectBorderRadius;\n      this.shouldUpdatePathD = true;\n    }\n  }\n\n  public getBoundingClientRect() {\n    return {\n      x: 0,\n      y: 0,\n      width: this.rectWidth,\n      height: this.rectHeight\n    };\n  }\n\n  public toSVGEl(): SVGElement | null {\n    const el = createSVGElement(\"rect\");\n    this.setAttr({\n      x: \"0\",\n      y: \"0\",\n      width: String(this.rectWidth),\n      height: String(this.rectHeight),\n      rx: String(this.rectBorderRadius),\n      ry: String(this.rectBorderRadius)\n    });\n    return el;\n  }\n\n  public toSVGPathData(): SVGParsedPathData[] {\n    if (!this.rectBorderRadius) {\n      return [\n        [\"m\", 0, 0],\n        [\"l\", this.rectWidth, 0],\n        [\"l\", 0, this.rectHeight],\n        [\"l\", -this.rectWidth, 0],\n        [\"z\"]\n      ];\n    } else {\n      return [\n        [\"m\", this.rectBorderRadius, 0],\n        [\"l\", this.rectWidth - this.rectBorderRadius * 2, 0],\n        [\n          \"a\",\n          this.rectBorderRadius,\n          this.rectBorderRadius,\n          0,\n          0,\n          1,\n          this.rectBorderRadius,\n          this.rectBorderRadius\n        ],\n        [\"l\", 0, this.rectHeight - this.rectBorderRadius * 2],\n        [\n          \"a\",\n          this.rectBorderRadius,\n          this.rectBorderRadius,\n          0,\n          0,\n          1,\n          -this.rectBorderRadius,\n          this.rectBorderRadius\n        ],\n        [\"l\", this.rectBorderRadius * 2 - this.rectWidth, 0],\n        [\n          \"a\",\n          this.rectBorderRadius,\n          this.rectBorderRadius,\n          0,\n          0,\n          1,\n          -this.rectBorderRadius,\n          -this.rectBorderRadius\n        ],\n        [\"l\", 0, this.rectBorderRadius * 2 - this.rectHeight],\n        [\n          \"a\",\n          this.rectBorderRadius,\n          this.rectBorderRadius,\n          0,\n          0,\n          1,\n          this.rectBorderRadius,\n          -this.rectBorderRadius\n        ],\n        [\"z\"]\n      ];\n    }\n  }\n\n  public toCanvasContext(ctx: YZCanvasContext) {\n    ctx.beginPath();\n    if (this.rectBorderRadius <= 0) {\n      ctx.rect(0, 0, this.rectWidth, this.rectHeight);\n    } else {\n      ctx.moveTo(0, this.rectBorderRadius);\n      ctx.lineTo(0, this.rectHeight - this.rectBorderRadius);\n      ctx.quadraticCurveTo(\n        0,\n        this.rectHeight,\n        this.rectBorderRadius,\n        this.rectHeight\n      );\n      ctx.lineTo(this.rectWidth - this.rectBorderRadius, this.rectHeight);\n      ctx.quadraticCurveTo(\n        this.rectWidth,\n        this.rectHeight,\n        this.rectWidth,\n        this.rectHeight - this.rectBorderRadius\n      );\n      ctx.lineTo(this.rectWidth, this.rectBorderRadius);\n      ctx.quadraticCurveTo(\n        this.rectWidth,\n        0,\n        this.rectWidth - this.rectBorderRadius,\n        0\n      );\n      ctx.lineTo(this.rectBorderRadius, 0);\n      ctx.quadraticCurveTo(0, 0, 0, this.rectBorderRadius);\n    }\n    ctx.closePath();\n  }\n\n  public static fromCubicBezier(\n    p1x: number,\n    p1y: number,\n    c1x: number,\n    c1y: number,\n    c2x: number,\n    c2y: number,\n    p2x: number,\n    p2y: number\n  ): RectShape {\n    const cubicBezier = new CubicBezier({\n      x: p1x,\n      y: p1y,\n      c1x,\n      c1y,\n      c2x,\n      c2y,\n      toX: p2x,\n      toY: p2y\n    });\n    const rect = cubicBezier.getBoundingClientRect();\n    return new RectShape({\n      x: rect.x,\n      y: rect.y,\n      rectWidth: rect.width,\n      rectHeight: rect.height\n    });\n  }\n\n  public eq(rect: RectShape): boolean {\n    return (\n      this.x === rect.x &&\n      this.y === rect.y &&\n      this.rectWidth === rect.rectWidth &&\n      this.rectHeight === rect.rectHeight &&\n      this.rectBorderRadius === rect.rectBorderRadius\n    );\n  }\n\n  public intersection(rect: RectShape): boolean {\n    return !(\n      this.x + this.rectWidth < rect.x ||\n      rect.x + rect.rectWidth < this.x ||\n      this.y + this.rectHeight < rect.y ||\n      rect.y + rect.rectHeight < this.y\n    );\n  }\n\n  public isPointInShape(p: { x: number; y: number }) {\n    return (\n      p.x >= this.x &&\n      p.x <= this.x + this.rectWidth &&\n      p.y >= this.y &&\n      p.y <= this.y + this.rectHeight\n    );\n  }\n}\n\nexport default RectShape;\n","import { Shape, ShapeOptions } from \"../Shape\";\nimport { SVGParsedPathData } from \"../svg\";\nimport { YZCanvasContext } from \"../canvas\";\n\nexport type HeartShapeOptions = {\n  heartRx?: number;\n  heartRy?: number;\n} & ShapeOptions;\n\nexport class HeartShape extends Shape {\n  rx: number;\n  ry: number;\n\n  constructor(options?: HeartShapeOptions) {\n    super(options);\n    this.rx = options?.heartRx || 10;\n    this.ry = options?.heartRy || 10;\n  }\n\n  protected cloneShape(): HeartShape {\n    const shape = new HeartShape({\n      ...super.getBaseOptions(),\n      heartRx: this.rx,\n      heartRy: this.ry\n    });\n    return shape;\n  }\n\n  public toSVGPathData(): SVGParsedPathData[] {\n    return [\n      [\"m\", 0, 0],\n      // bottom right curve\n      [\"l\", this.rx * 2.4, -this.ry * 3.14],\n      // top right curve\n      [\"a\", this.rx / 2, this.ry / 2, 0, 0, 0, -this.rx * 2.4, -this.ry * 1.5],\n      // top left curve\n      [\"a\", this.rx / 2, this.ry / 2, 0, 0, 0, -this.rx * 2.4, this.ry * 1.5],\n      // bottom left curve\n      [\"l\", this.rx * 2.4, this.ry * 3.14],\n      [\"z\"]\n    ];\n  }\n}\n\nexport default HeartShape;\n","import { Shape, ShapeOptions } from \"../Shape\";\nimport { SVGParsedPathData } from \"../svg\";\nimport { YZCanvasContext } from \"../canvas\";\n\nexport type HeartVariantShapeOptions = {\n  heartRx?: number;\n  heartRy?: number;\n} & ShapeOptions;\n\nexport class HeartVariantShape extends Shape {\n  rx: number;\n  ry: number;\n\n  constructor(options?: HeartVariantShapeOptions) {\n    super(options);\n    this.rx = options?.heartRx || 50;\n    this.ry = options?.heartRy || 50;\n  }\n\n  protected cloneShape(): HeartVariantShape {\n    const shape = new HeartVariantShape({\n      ...super.getBaseOptions(),\n      heartRx: this.rx,\n      heartRy: this.ry\n    });\n    return shape;\n  }\n\n  public toSVGPathData(): SVGParsedPathData[] {\n    return [\n      [\"m\", 0, 0 + this.ry * 0.3],\n      // top left curve\n      [\"C\", 0, 0, 0 - this.rx / 2, 0, 0 - this.rx / 2, 0 + this.ry * 0.3],\n      // bottom left curve\n      [\n        \"C\",\n        0 - this.rx / 2,\n        0 + (this.ry + this.ry * 0.3) / 2,\n        0,\n        0 + (this.ry + this.ry * 0.3) / 1.4,\n        0,\n        0 + this.ry\n      ],\n      // bottom right curve\n      [\n        \"C\",\n        0,\n        0 + (this.ry + this.ry * 0.3) / 1.8,\n        0 + this.rx / 2,\n        0 + (this.ry + this.ry * 0.3) / 2,\n        0 + this.rx / 2,\n        0 + this.ry * 0.3\n      ],\n      // top right curve\n      [\"C\", 0 + this.rx / 2, 0, 0, 0, 0, 0 + this.ry * 0.3],\n      [\"z\"]\n    ];\n  }\n}\n\nexport default HeartVariantShape;\n","import { Shape, ShapeOptions } from \"../Shape\";\nimport { SVGParsedPathData } from \"../svg\";\nimport { YZCanvasContext } from \"../canvas\";\nimport { toRadian } from \"../../../math\";\n\nexport type StarShapeOptions = {\n  starR?: number;\n} & ShapeOptions;\n\nexport class StarShape extends Shape {\n  r: number;\n\n  constructor(options?: StarShapeOptions) {\n    super(options);\n    this.r = options?.starR || 20;\n  }\n\n  protected cloneShape(): StarShape {\n    const shape = new StarShape({\n      ...super.getBaseOptions(),\n      starR: this.r\n    });\n    return shape;\n  }\n\n  public toSVGPathData(): SVGParsedPathData[] {\n    const data: SVGParsedPathData[] = [[\"m\", 0, -this.r]];\n    for (let c = 0; c < 6; c += 1) {\n      /// +18 摆正 StarShape\n      const degree = 18 + 270 + c * 144;\n      const rx = this.r * Math.cos(toRadian(degree));\n      const ry = this.r * Math.sin(toRadian(degree));\n      data.push([\"l\", rx, ry]);\n    }\n    return data;\n  }\n}\n\nexport default StarShape;\n","import { Shape, ShapeOptions } from \"../Shape\";\nimport { SVGParsedPathData } from \"../svg\";\nimport { YZCanvasContext } from \"../canvas\";\n\nexport class FoxShape extends Shape {\n  constructor(options?: ShapeOptions) {\n    super(options);\n  }\n\n  protected cloneShape(): FoxShape {\n    const shape = new FoxShape({\n      ...super.getBaseOptions()\n    });\n    return shape;\n  }\n\n  public toSVGPathData(): SVGParsedPathData[] {\n    return [\n      [\"m\", 4, 24],\n      [\"l\", 4, -8],\n      [\"l\", 6, -6],\n      [\"l\", 1, -10],\n      [\"l\", -6, -10],\n      [\"l\", -7, 10],\n      [\"l\", -4, 0],\n      [\"l\", -7, -10],\n      [\"l\", -6, 10],\n      [\"l\", 1, 10],\n      [\"l\", 6, 6],\n      [\"l\", 4, 8],\n      [\"z\"]\n    ];\n  }\n\n  public toCanvasContext(ctx: YZCanvasContext) {\n    ctx.beginPath();\n    ctx.moveTo(4, 24);\n    ctx.lineTo(8, 16);\n    ctx.lineTo(14, 10);\n    ctx.lineTo(15, 0);\n    ctx.lineTo(9, -10);\n    ctx.lineTo(2, 0);\n    ctx.lineTo(-2, 0);\n    ctx.lineTo(-9, -10);\n    ctx.lineTo(-15, 0);\n    ctx.lineTo(-14, 10);\n    ctx.lineTo(-8, 16);\n    ctx.lineTo(-4, 24);\n    ctx.closePath();\n  }\n}\n\nexport default FoxShape;\n","import { Shape, ShapeOptions } from \"../Shape\";\nimport { SVGParsedPathData } from \"../svg\";\nimport { YZCanvasContext } from \"../canvas\";\n\nexport class RabbitShape extends Shape {\n  constructor(options?: ShapeOptions) {\n    super(options);\n  }\n\n  protected cloneShape(): RabbitShape {\n    const shape = new RabbitShape({\n      ...super.getBaseOptions()\n    });\n    return shape;\n  }\n\n  public toSVGPathData(): SVGParsedPathData[] {\n    return [\n      [\"M\", 0, 0],\n      [\"C\", 15, 0, 15, -40, 5, -30],\n      [\"L\", 0, 0],\n      [\"C\", -15, 0, -15, -40, -5, -30],\n      [\"L\", 0, 0],\n      [\"a\", 15, 15, 0, 1, 1, 0, 2 * 15],\n      [\"a\", 15, 15, 0, 1, 1, 0, -2 * 15]\n    ];\n  }\n}\n\nexport default RabbitShape;\n","import { Shape, ShapeOptions } from \"../Shape\";\nimport { SVGParsedPathData } from \"../svg\";\nimport { YZCanvasContext } from \"../canvas\";\n\nexport class CrossShape extends Shape {\n  constructor(options?: ShapeOptions) {\n    super({\n      ...options,\n      initD: `m5.068 9.267-3.08-.77a.512.512 0 0 1 0-.994l3.08-.77a2.289 2.289 0 0 0 1.665-1.665l.77-3.08a.512.512 0 0 1 .994 0l.77 3.08c.205.82.845 1.46 1.665 1.665l3.08.77a.512.512 0 0 1 0 .994l-3.08.77a2.29 2.29 0 0 0-1.665 1.665l-.77 3.08a.512.512 0 0 1-.994 0l-.77-3.08a2.289 2.289 0 0 0-1.665-1.665Z`\n    });\n  }\n\n  protected cloneShape(): CrossShape {\n    const shape = new CrossShape({\n      ...super.getBaseOptions()\n    });\n    return shape;\n  }\n}\n\nexport default CrossShape;\n","import { Shape, ShapeOptions } from \"../Shape\";\nimport { SVGParsedPathData, createSVGElement } from \"../svg\";\nimport { YZCanvasContext } from \"../canvas\";\n\nexport type EllipseShapeOptions = {\n  // 半径\n  rx?: number;\n  ry?: number;\n} & ShapeOptions;\n\nexport class EllipseShape extends Shape {\n  public rx: number;\n  public ry: number;\n\n  constructor(options: EllipseShapeOptions) {\n    super(options);\n    this.rx = options?.rx || 0;\n    this.ry = options?.ry || 0;\n  }\n\n  protected cloneShape(): EllipseShape {\n    const shape = new EllipseShape({\n      ...super.getBaseOptions(),\n      rx: this.rx,\n      ry: this.ry\n    });\n    return shape;\n  }\n\n  public getBoundingClientRect() {\n    return {\n      x: this.x - this.rx,\n      y: this.y - this.ry,\n      width: this.rx * 2,\n      height: this.ry * 2\n    };\n  }\n\n  public toSVGEl(): SVGElement {\n    const el = createSVGElement(\"ellipse\");\n    this.setAttr({\n      cx: \"0\",\n      cy: \"0\",\n      rx: String(this.rx),\n      ry: String(this.ry)\n    });\n    return el;\n  }\n\n  public toSVGPathData(): SVGParsedPathData[] {\n    return [\n      [\"m\", 0, -this.ry],\n      [\"a\", this.rx, this.ry, 0, 1, 1, 0, 2 * this.ry],\n      [\"a\", this.rx, this.ry, 0, 1, 1, 0, -2 * this.ry],\n      [\"z\"]\n    ];\n  }\n\n  public toCanvasContext(ctx: YZCanvasContext) {\n    ctx.beginPath();\n    /// 方法1\n    // ctx.scale(this.rx, this.ry);\n    // ctx.arc(0, 0, 1, 0, 2 * Math.PI, true);\n    /// 方法2\n    ctx.ellipse(0, 0, this.rx, this.ry, 0, 0, 2 * Math.PI, true);\n    ctx.closePath();\n  }\n}\n\nexport default EllipseShape;\n","import { Shape, ShapeCombo, ShapeComboOptions } from \"../Shape\";\n\nexport type ShipShapeComboOptions = {\n  showFlame?: boolean;\n} & ShapeComboOptions;\n\nexport class ShipShapeCombo extends ShapeCombo {\n  protected showFlame: boolean;\n  protected flame: Shape;\n  protected ship: Shape;\n\n  constructor(options?: ShipShapeComboOptions) {\n    super(options);\n\n    this.showFlame =\n      typeof options?.showFlame == \"boolean\" ? options?.showFlame : true;\n\n    this.flame = new Shape({\n      initD: [[\"M\", -15, 0], [\"L\", -2.5, -5], [\"L\", -2.5, 5], [\"Z\"]],\n      drag: {\n        followSibling: true\n      }\n    });\n    if (this.showFlame) {\n      this.addShape(this.flame);\n    }\n\n    this.ship = new Shape({\n      initD: [\n        [\"M\", 10, 0],\n        [\"L\", -10, 10],\n        [\"L\", -5, 0],\n        [\"L\", -10, -10],\n        [\"L\", 10, 0],\n        [\"Z\"]\n      ],\n      drag: {\n        followSibling: true\n      }\n    });\n    this.addShape(this.ship);\n  }\n\n  protected cloneShapeCombo(): ShipShapeCombo {\n    const shapeCombo = new ShipShapeCombo({\n      ...super.getBaseOptions(),\n      showFlame: this.showFlame\n    });\n    return shapeCombo;\n  }\n\n  // 供外部使用：基本属性变更\n  public update(options: ShipShapeComboOptions) {\n    if (typeof options?.showFlame == \"boolean\") {\n      this.shapes = [];\n      this.showFlame = options?.showFlame;\n      if (this.showFlame) {\n        this.addShape(this.flame);\n      }\n      this.addShape(this.ship);\n    }\n  }\n}\n\nexport default ShipShapeCombo;\n","import { ShapeCombo, ShapeComboOptions } from \"../Shape\";\nimport BallShape from \"./BallShape\";\nimport RectShape from \"./RectShape\";\nimport { toRadian } from \"../../../math\";\n\nexport type SegmentShapeComboOptions = {\n  segmentWidth: number; // 2个控制点之间的距离\n  segmentHeight: number;\n  segmentCornerRadius?: number;\n} & ShapeComboOptions;\n\nexport class SegmentShapeCombo extends ShapeCombo {\n  width: number;\n  height: number;\n  cornerRadius: number;\n\n  constructor(options: SegmentShapeComboOptions) {\n    super(options);\n\n    this.width = options.segmentWidth;\n    this.height = options.segmentHeight;\n\n    this.cornerRadius =\n      typeof options.segmentCornerRadius == \"number\"\n        ? options.segmentCornerRadius\n        : this.height * 0.5;\n\n    // 圆柱体\n    const mainRect = new RectShape({\n      drag: {\n        followSibling: true\n      },\n      rectWidth: this.width + this.cornerRadius * 2,\n      rectHeight: this.height,\n      rectBorderRadius: this.cornerRadius\n    });\n    this.addShape(mainRect, {\n      dX: 0 - this.cornerRadius,\n      dY: 0 - this.height * 0.5\n    });\n\n    // 左点 - 控制点\n    const controlPoint = new BallShape({\n      drag: {\n        followSibling: true\n      },\n      ballRadius: 2\n    });\n    this.addShape(controlPoint);\n\n    // 右点\n    const rightPoint = new BallShape({\n      drag: {\n        followSibling: true\n      },\n      ballRadius: 2\n    });\n    this.addShape(rightPoint, { dX: 0 + this.width });\n  }\n\n  protected cloneShapeCombo(): SegmentShapeCombo {\n    const shapeCombo = new SegmentShapeCombo({\n      ...super.getBaseOptions(),\n      segmentWidth: this.width,\n      segmentHeight: this.height,\n      segmentCornerRadius: this.cornerRadius\n    });\n    return shapeCombo;\n  }\n\n  // 重写覆盖\n  public getBoundingClientRectCenter() {\n    return {\n      x: 0,\n      y: 0\n    };\n  }\n\n  // 绝对值\n  getPin() {\n    const controlPoint = this.shapes[1];\n    return {\n      x: controlPoint.x + Math.cos(toRadian(controlPoint.degree)) * this.width,\n      y: controlPoint.y + Math.sin(toRadian(controlPoint.degree)) * this.width\n    };\n  }\n}\n\nexport default SegmentShapeCombo;\n","import { Subject } from \"rxjs\";\nimport { clamp, stepMap } from \"@zyzgroup/core-common\";\nimport { ShapeCombo, ShapeComboOptions } from \"../Shape\";\nimport BallShape from \"./BallShape\";\nimport RectShape from \"./RectShape\";\nimport { PathD } from \"../line\";\n\nexport type SliderShapeComboOptions = {\n  sliderMin?: number;\n  sliderMax?: number;\n  sliderStep?: number;\n  sliderDefaultValue?: number;\n  sliderWidth?: number;\n  sliderHeight?: number;\n  sliderBackgroundColor?: string;\n  sliderForegroundColor?: string;\n} & ShapeComboOptions;\n\nexport class SliderShapeCombo extends ShapeCombo {\n  protected options?: SliderShapeComboOptions;\n  public value$: Subject<number> = new Subject<number>();\n  public subscription: any;\n\n  constructor(options?: SliderShapeComboOptions) {\n    super(options);\n    this.options = options;\n\n    const min = options?.sliderMin || 0;\n    const max = options?.sliderMax || 100;\n    const step = options?.sliderStep || 1;\n\n    const stepFunc = stepMap(min, max, step);\n\n    const value = stepFunc(\n      typeof options?.sliderDefaultValue == \"number\"\n        ? clamp(options.sliderDefaultValue, min, max)\n        : min\n    );\n    this.value$.next(value);\n\n    const percent = value / (max - min);\n\n    const rectWidth = options?.sliderWidth || 100;\n    const rectHeight = options?.sliderHeight || 4;\n    const rectBorderRadius = rectHeight * 0.5;\n    const ballRadius = rectHeight * 2.5;\n\n    const backgroundColor = options?.sliderBackgroundColor || \"#f5f5f5\";\n    const foregroundColor = options?.sliderForegroundColor || \"#5a82f0\";\n\n    const backgroundRect = new RectShape({\n      rectWidth,\n      rectHeight,\n      rectBorderRadius,\n      attrs: {\n        fill: backgroundColor\n      },\n      drag: {\n        enable: false\n      }\n    });\n    this.addShape(backgroundRect);\n\n    const occupyRect = new RectShape({\n      rectWidth: rectWidth * percent,\n      rectHeight: rectHeight,\n      rectBorderRadius,\n      attrs: {\n        fill: foregroundColor\n      },\n      drag: {\n        enable: false\n      }\n    });\n    this.addShape(occupyRect);\n\n    const handle = new BallShape({\n      x: rectWidth * percent,\n      y: rectBorderRadius,\n      ballRadius,\n      attrs: {\n        fill: foregroundColor\n      },\n      drag: {\n        enable: true,\n        alongPath: new PathD([\n          [\"m\", 0, 0],\n          [\"l\", rectWidth, 0]\n        ])\n      }\n    });\n    this.addShape(handle);\n\n    this.subscription = handle.transform$.subscribe(({ dX }) => {\n      console.log(dX);\n      const percent = (handle.x - backgroundRect.x) / rectWidth;\n      occupyRect.update({\n        rectWidth: rectWidth * percent\n      });\n      this.value$.next(stepFunc(percent * (max - min) + min));\n    });\n  }\n\n  public destroy() {\n    super.destroy();\n    this.subscription.unsubscribe();\n  }\n\n  protected cloneShapeCombo(): SliderShapeCombo {\n    const shapeCombo = new SliderShapeCombo({\n      ...super.getBaseOptions(),\n      ...this.options\n    });\n    return shapeCombo;\n  }\n}\n\nexport default SliderShapeCombo;\n","import { Shape, ShapeOptions } from \"../Shape\";\nimport { SVGParsedPathData } from \"../svg\";\nimport { YZCanvasContext } from \"../canvas\";\nimport { polar, toRadian } from \"../../../math\";\n\n/**\n * CSS 坐标系\n * 0deg = 从下到上\n * 90deg = 从左到右\n *                   [0deg]            [45deg]\n *                      ⬆            ⬈\n *                      *         *\n *                      *     *\n *                      *  *\n *  [-90deg] ⬅ *  *  *  *  *  *  * ⮕  [90deg]\n *                      *\n *                      *\n *                      *\n *                      ⬇\n *                   [180deg]\n */\n\n/**\n * canvas svg Vector 坐标系\n *                [-90° / 270°]\n *                  *\n *                  *\n *                  *\n *  [180°] *  *  *  *  *  *  *  [0°]\n *                  *\n *                  *\n *                  *\n *                [90°]\n */\n\nexport type RingShapeOptions = {\n  half?: boolean; // 半圆 或 全圆\n  lineWidth: number; // 圆环宽度\n  radius?: number;\n  width?: number;\n  height?: number;\n  forceCoordinate?: boolean;\n  startDegree: number; // CSS 坐标系 half=true 时，左右两边比180°水平线多出的角度，范围 +90 ~ 0 ~ -90，设计图建议 +15°\n  endDegree: number; // CSS 坐标系 half=true 时，左右两边比180°水平线多出的角度，范围 +90 ~ 0 ~ -90，设计图建议 +15°\n  // bgColor?: CanvasGradient | string;\n  // 渐变色\n  startColor?: string;\n  endColor?: string;\n  percent?: number;\n} & ShapeOptions;\n\n// 圆环\nexport class RingShape extends Shape {\n  public half: boolean;\n  public lineWidth: number;\n\n  public radius: number;\n\n  public startDegree: number;\n  public endDegree: number;\n\n  public percent = 0;\n  public percentDegree = 0;\n\n  // public bgColor?: CanvasGradient | string;\n  public startColor?: string;\n  public endColor?: string;\n\n  constructor(options: RingShapeOptions) {\n    super(options);\n\n    this.half = typeof options?.half == \"boolean\" ? options?.half : false;\n    this.lineWidth = options.lineWidth;\n\n    const width = options.width || 0;\n    const height = options.height || 0;\n    const extendDegree = (options.endDegree - options.startDegree - 180) / 2;\n\n    // 圆半径\n    if (options.radius) {\n      this.radius = options.radius;\n    } else if (this.half) {\n      // 半圆\n      const min = Math.min(width / 2, height) - this.lineWidth;\n      this.radius = Math.max(0, min - min * Math.sin(toRadian(extendDegree)));\n    } else {\n      // 全圆\n      this.radius = Math.max(\n        0,\n        Math.min(width / 2, height / 2) - this.lineWidth\n      );\n    }\n\n    // 圆心 x 坐标 自动移动到画布中心\n    if (!options.x) {\n      this.x = width / 2;\n    }\n\n    // 圆心 y 坐标 自动移动到画布中心\n    if (!options.y) {\n      if (this.half) {\n        this.y =\n          height -\n          this.lineWidth -\n          this.radius * Math.sin(toRadian(extendDegree));\n      } else {\n        this.y = height / 2;\n      }\n    }\n\n    if (options.forceCoordinate) {\n      // clone\n      this.startDegree = options.startDegree;\n      this.endDegree = options.endDegree;\n    } else {\n      // css坐标系 切换成 画布坐标系\n      this.startDegree = -90 + options.startDegree;\n      this.endDegree = -90 + options.endDegree;\n    }\n\n    // this.bgColor = options.bgColor;\n    this.startColor = options?.startColor;\n    this.endColor = options?.endColor;\n    this.setAttr({\n      \"stroke-linecap\": \"round\",\n      \"stroke-width\": String(this.lineWidth),\n      stroke: this.startColor || \"#000000\" || \"none\"\n    });\n\n    // 默认 100%\n    this.setPercent(options.percent || 1);\n  }\n\n  protected cloneShape(): RingShape {\n    const shape = new RingShape({\n      ...super.getBaseOptions(),\n      half: this.half,\n      lineWidth: this.lineWidth,\n      radius: this.radius,\n      forceCoordinate: true,\n      startDegree: this.startDegree,\n      endDegree: this.endDegree,\n      startColor: this.startColor,\n      endColor: this.endColor,\n      percent: this.percent\n    });\n    return shape;\n  }\n\n  // 提供外部变更\n  public setPercent(percent: number) {\n    this.percent = Math.max(0, percent);\n    this.percentDegree =\n      this.startDegree + (this.endDegree - this.startDegree) * percent;\n  }\n\n  public enableGradient(startColor: string, endColor: string) {\n    this.startColor = startColor;\n    this.endColor = endColor;\n    this.setAttr({\n      stroke: this.startColor\n    });\n    // 在 toCanvasContext 或 toSVGPathData 里设置渐变\n  }\n  public disableGradient(startColor: string) {\n    this.startColor = startColor;\n    this.endColor = undefined;\n    this.setAttr({\n      stroke: this.startColor\n    });\n  }\n\n  public toSVGPathData(): SVGParsedPathData[] {\n    const { dx: fromX, dy: fromY } = polar(\n      toRadian(this.startDegree),\n      this.radius\n    );\n    const { dx: endX, dy: endY } = polar(\n      toRadian(this.percentDegree),\n      this.radius\n    );\n    return [\n      [\"m\", fromX, fromY],\n      [\n        \"a\",\n        this.radius,\n        this.radius,\n        0,\n        Math.abs(this.percentDegree - this.startDegree) >= 180 ? 1 : 0,\n        1,\n        endX - fromX,\n        endY - fromY\n      ]\n    ];\n  }\n\n  public toCanvasContext(ctx: YZCanvasContext) {\n    if (this.startColor && this.endColor) {\n      // canvas 支持渐变色\n      let gradient;\n      if (this.half) {\n        const dX = this.radius - this.radius * Math.cos(Math.PI * this.percent);\n        const dY = this.radius * Math.sin(Math.PI * this.percent);\n        gradient = ctx.createLinearGradient(\n          -this.radius,\n          0,\n          -this.radius + dX,\n          -dY,\n          {\n            0: this.startColor,\n            1: this.endColor\n          }\n        );\n      } else {\n        const dX = this.radius * Math.sin(2 * Math.PI * this.percent);\n        const dY = this.radius * Math.cos(2 * Math.PI * this.percent);\n        gradient = ctx.createLinearGradient(0, -this.radius, dX, -dY, {\n          0: this.startColor,\n          1: this.endColor\n        });\n      }\n      this.setAttr({\n        stroke: gradient\n      });\n    }\n    ctx.beginPath();\n    ctx.arc(\n      0,\n      0,\n      this.radius,\n      toRadian(this.startDegree),\n      toRadian(this.percentDegree),\n      false\n    );\n  }\n}\n\nexport default RingShape;\n","import { ShapeCombo, ShapeComboOptions, ShapeOptions } from \"../Shape\";\nimport RingShape from \"./RingShape\";\nimport LineShape from \"./LineShape\";\nimport { toRadian } from \"../../../math\";\n\n/**\n * CSS 坐标系\n * 0deg = 从下到上\n * 90deg = 从左到右\n *                   [0deg]            [45deg]\n *                      ⬆            ⬈\n *                      *         *\n *                      *     *\n *                      *  *\n *  [-90deg] ⬅ *  *  *  *  *  *  * ⮕  [90deg]\n *                      *\n *                      *\n *                      *\n *                      ⬇\n *                   [180deg]\n */\n\n/**\n * canvas svg Vector 坐标系\n *                [-90° / 270°]\n *                  *\n *                  *\n *                  *\n *  [180°] *  *  *  *  *  *  *  [0°]\n *                  *\n *                  *\n *                  *\n *                [90°]\n */\n\nexport type RingIndicatorShapeComboOptions = {\n  half?: boolean; // 半圆 或 全圆\n  lineWidth?: number;\n  width: number;\n  height: number;\n  startDegree?: number;\n  endDegree?: number;\n  bgColor: string;\n  startColor: string;\n  endColor: string;\n  percent?: number;\n} & ShapeComboOptions;\n\nexport class RingIndicatorShapeCombo extends ShapeCombo {\n  public half: boolean;\n  public lineWidth: number;\n  public width: number;\n  public height: number;\n\n  public bgColor: string;\n  public startColor: string;\n  public endColor: string;\n\n  public startDegree: number;\n  public endDegree: number;\n\n  public percent = 0;\n\n  public ringBg: RingShape;\n  public ring: RingShape;\n  public lines: LineShape[] = [];\n  public indicatorLineCount: number;\n\n  constructor(options: RingIndicatorShapeComboOptions) {\n    super(options);\n\n    this.half = typeof options?.half == \"boolean\" ? options?.half : false;\n    this.lineWidth = options?.lineWidth || 12;\n    this.width = options.width;\n    this.height = options.height;\n\n    this.bgColor = options?.bgColor;\n    this.startColor = options?.startColor;\n    this.endColor = options?.endColor;\n\n    if (this.half) {\n      this.startDegree = options?.startDegree || -90 - 15;\n      this.endDegree = options?.endDegree || 90 + 15;\n    } else {\n      this.startDegree = options?.startDegree || 0;\n      this.endDegree = options?.endDegree || 360;\n    }\n\n    this.percent = options?.percent || 0;\n\n    this.ringBg = new RingShape({\n      half: this.half,\n      lineWidth: this.lineWidth,\n      width: options.width,\n      height: options.height,\n      startDegree: this.startDegree,\n      endDegree: this.endDegree,\n      startColor: this.bgColor,\n      percent: 1\n    });\n    this.addShape(this.ringBg);\n\n    this.ring = new RingShape({\n      half: this.half,\n      lineWidth: this.lineWidth,\n      width: options.width,\n      height: options.height,\n      startDegree: this.startDegree,\n      endDegree: this.endDegree,\n      startColor: this.startColor,\n      endColor: this.endColor,\n      percent: 0\n    });\n    this.addShape(this.ring);\n\n    this.indicatorLineCount = 22 + 1;\n\n    if (this.half) {\n      const indicatorLineToRingDistance = 20;\n      const indicatorLineHeight = 17;\n      const indicatorLineWidth = 2;\n      const length =\n        this.ringBg.radius - indicatorLineToRingDistance - indicatorLineHeight;\n      for (let i = 0; i < this.indicatorLineCount; i++) {\n        const line = new LineShape({\n          lineLength: indicatorLineHeight,\n          startColor: this.startColor,\n          endColor: this.endColor,\n          attrs: {\n            \"stroke-linecap\": \"round\",\n            \"stroke-width\": String(indicatorLineWidth),\n            stroke: this.bgColor\n          }\n        });\n        this.lines.push(line);\n        const lineDegree =\n          -90 +\n          this.startDegree +\n          ((this.endDegree - this.startDegree) /\n            (this.indicatorLineCount - 1)) *\n            i;\n        this.addShape(line, {\n          dX: this.ringBg.x + Math.cos(toRadian(lineDegree)) * length,\n          dY: this.ringBg.y + Math.sin(toRadian(lineDegree)) * length,\n          dDegree: lineDegree\n        });\n      }\n    }\n\n    // 默认 0%\n    this.setPercent(options.percent || 0);\n  }\n\n  protected cloneShapeCombo(): RingIndicatorShapeCombo {\n    const shapeCombo = new RingIndicatorShapeCombo({\n      ...super.getBaseOptions(),\n      half: this.half,\n      lineWidth: this.lineWidth,\n      width: this.width,\n      height: this.height,\n      bgColor: this.bgColor,\n      startColor: this.startColor,\n      endColor: this.endColor,\n      startDegree: this.startDegree,\n      endDegree: this.endDegree,\n      percent: this.percent\n    });\n    return shapeCombo;\n  }\n\n  // 提供外部变更\n  public setPercent(percent: number) {\n    this.percent = Math.max(0, percent);\n    this.ring.setPercent(percent);\n    if (this.half) {\n      for (let i = 0; i < this.indicatorLineCount; i++) {\n        const isInPercent = i / (this.indicatorLineCount - 1) <= this.percent;\n        if (isInPercent) {\n          this.lines[i].enableGradient(this.startColor, this.endColor);\n        } else {\n          this.lines[i].disableGradient(this.bgColor);\n        }\n      }\n    }\n  }\n}\n\nexport default RingIndicatorShapeCombo;\n","import { Shape, ShapeOptions } from \"../Shape\";\nimport { SVGParsedPathData, createSVGElement } from \"../svg\";\nimport { YZCanvasContext } from \"../canvas\";\nimport { extractNumber } from \"@zyzgroup/core-common\";\n\nexport type TextShapeOptions = {\n  text: string;\n} & ShapeOptions;\n\nexport class TextShape extends Shape {\n  public text: string;\n  public width = 0;\n  public height = 0;\n\n  constructor(options: TextShapeOptions) {\n    super(options);\n    this.text = options.text;\n\n    this.setAttr({\n      // default attributes\n      fontSize: \"10px\",\n      fontFamily: `system-ui, Inter, -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"PingFang SC\", Roboto, Oxygen, Ubuntu, Cantarell, \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", sans-serif`,\n      // see https://nolanlawson.com/2022/04/08/the-struggle-of-using-native-emoji-on-the-web/\n      emojiFontFamily:\n        '\"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\", \"EmojiOne Color\", \"Android Emoji\", \"Twemoji Mozilla\", \"system emoji\", sans-serif',\n      fill: \"#666666\",\n      stroke: \"none\",\n      \"alignment-baseline\": \"middle\",\n      textAnchor: \"start\", // start | end\n      // custom attributes\n      ...this.attrs\n    });\n\n    const fontSize = extractNumber(this.getAttr(\"fontSize\"), 10).number;\n    const fontWeight = extractNumber(this.getAttr(\"fontWeight\"), 400).number;\n    const mt = TextShape.measureText(this.text, fontSize, fontWeight);\n    this.width = mt.width;\n    this.height = mt.height;\n  }\n\n  protected cloneShape(): TextShape {\n    const shape = new TextShape({\n      ...super.getBaseOptions(),\n      text: this.text\n    });\n    return shape;\n  }\n\n  public toSVGEl(): SVGElement {\n    const el = createSVGElement(\"text\");\n    el.setAttribute(\"x\", \"0\");\n    el.setAttribute(\"y\", \"0\");\n    el.style.alignmentBaseline = \"middle\";\n    const texts = this.text.split(\"\\n\");\n    if (texts.length <= 1) {\n      el.innerHTML = this.text;\n    } else {\n      const lineHeight = this.getAttr(\"line-height\", \"1.2em\") as string;\n      texts.forEach((t, index) => {\n        if (t.trim()) {\n          const tspan = createSVGElement(\"tspan\");\n          tspan.setAttribute(\"x\", \"0\");\n          tspan.setAttribute(\"dy\", index > 0 ? lineHeight : \"0\");\n          tspan.innerHTML = t.trim();\n          tspan.style.alignmentBaseline = \"middle\";\n          el.append(tspan);\n        }\n      });\n    }\n    return el;\n  }\n\n  public toSVGPathData(): SVGParsedPathData[] {\n    return [];\n  }\n\n  public toCanvasContext(ctx: YZCanvasContext) {\n    const texts = this.text.split(\"\\n\");\n    if (texts.length <= 1) {\n      ctx.fillText(this.text, 0, 0);\n    } else {\n      const metrics: TextMetrics = ctx.measureText(this.text);\n      const height =\n        metrics.actualBoundingBoxAscent + metrics.actualBoundingBoxDescent;\n      const lineHeight =\n        height * parseFloat(this.getAttr(\"line-height\", \"1.2em\") as string);\n      let y = 0;\n      texts.forEach((t, index) => {\n        if (t.trim()) {\n          y += index > 0 ? lineHeight : 0;\n          ctx.fillText(t.trim(), 0, y);\n        }\n      });\n    }\n  }\n\n  public static measureText(\n    text: string,\n    fontSize = 12,\n    fontWeight = 400\n  ): { width: number; height: number } {\n    const span = document.createElement(\"span\");\n    span.style.visibility = \"hidden\";\n    span.style.margin = \"0\";\n    span.style.padding = \"0\";\n    span.style.inset = \"0\";\n    span.style.whiteSpace = \"nowrap\";\n    span.style.overflow = \"visible\";\n    span.style.fontSize = fontSize + \"px\";\n    span.style.fontWeight = fontWeight.toString();\n    span.innerText = text;\n    document.body.appendChild(span);\n    const width = span.offsetWidth;\n    const height = span.offsetHeight;\n    document.body.removeChild(span);\n    return { width, height };\n    // const canvas = new OffscreenCanvas(fontSize, fontSize);\n    // const ctx = canvas.getContext(\"2d\");\n    // const metrics: TextMetrics = ctx.measureText(this.text);\n  }\n\n  /**\n   * 获取固定宽度的字符串，如果传入的text的宽度不够width,则返回原字符串\n   * @text   将要被提取的原字符串\n   * @width  想要提取的字符串长度\n   * @fontSize  字符串显示时的字符大小，支持>=12\n   * @fontWeight  字符串显示时的字符粗细\n   * @isNeedEllipsis   当text的宽度大于width时是否需要省略号\n   */\n  public static getFixedWidthText(\n    text: string,\n    width: number,\n    fontSize = 12,\n    fontWeight = 400,\n    gap = \"...\"\n  ) {\n    let returnText = \"\";\n    if (!text || width < fontSize) {\n      return returnText;\n    }\n    const arr = text.split(\"\");\n    let nowWidth = gap\n      ? TextShape.measureText(gap, fontSize, fontWeight).width\n      : 0;\n    for (let i = 0, l = arr.length; i < l; i++) {\n      nowWidth += TextShape.measureText(arr[i], fontSize, fontWeight).width;\n      if (nowWidth > width) {\n        if (gap) {\n          returnText += gap;\n        }\n        break;\n      } else {\n        returnText += arr[i];\n      }\n    }\n    return returnText;\n  }\n}\n\nexport default TextShape;\n","import { Shape, ShapeCombo, ShapeComboOptions } from \"../Shape\";\nimport { Color } from \"../../../color\";\nimport { toDegree, toRadian } from \"../../../math\";\nimport RectShape from \"./RectShape\";\n// import StarShape from \"./StarShape\";\n\n// https://www.kirilv.com/canvas-confetti/\n// https://github.com/catdad/canvas-confetti\n\nexport type ConfettiShapeComboOptions = Partial<{\n  shapeCreator: () => Shape;\n  width: number;\n  height: number;\n  x: number;\n  y: number;\n  particleCount: number;\n  angle: number;\n  spread: number;\n  startVelocity: number;\n  decay: number;\n  gravity: number;\n  drift: number;\n  ticks: number;\n  colors: string[];\n  scalar: number;\n  flat: boolean;\n}> &\n  ShapeComboOptions;\n\nexport class ConfettiShapeCombo extends ShapeCombo {\n  private options: ConfettiShapeComboOptions;\n\n  constructor(options: ConfettiShapeComboOptions) {\n    super(options);\n\n    this.options = options;\n\n    const {\n      shapeCreator,\n      width,\n      height,\n      x,\n      y,\n      particleCount,\n      angle,\n      spread,\n      startVelocity,\n      decay,\n      gravity,\n      drift,\n      ticks,\n      colors,\n      scalar,\n      flat\n    } = Object.assign(\n      {\n        shapeCreator: () => new RectShape({ rectWidth: 10, rectHeight: 10 }),\n        width: 100,\n        height: 100,\n        x: 0.5,\n        y: 0.6,\n        particleCount: 100,\n        angle: 90,\n        spread: 70,\n        startVelocity: 45,\n        decay: 0.9,\n        gravity: 1,\n        drift: 0,\n        ticks: 200,\n        colors: Color.getColors(),\n        scalar: 1,\n        flat: false\n      },\n      options || {}\n    );\n    const addShapeAttributes = (s: Shape, temp: number) => {\n      // 通用属性\n      s.x = width * x;\n      s.y = height * y;\n      s.scaleX = scalar;\n      s.scaleY = scalar;\n      const fillColor = colors[temp % colors.length];\n      s.setAttr({\n        fill: fillColor\n      });\n      s.interactive = false;\n      // 自定义属性\n      s.wobble = Math.random() * 10;\n      s.wobbleSpeed = Math.min(0.11, Math.random() * 0.1 + 0.05);\n      s.velocity = startVelocity * 0.5 + Math.random() * startVelocity;\n      s.angle2D = -radAngle + (0.5 * radSpread - Math.random() * radSpread);\n      s.tiltAngle = (Math.random() * (0.75 - 0.25) + 0.25) * Math.PI;\n      s.tick = 0;\n      s.totalTicks = ticks;\n      s.decay = decay;\n      s.drift = drift;\n      s.random = Math.random() + 2;\n      s.tiltSin = 0;\n      s.tiltCos = 0;\n      s.wobbleX = 0;\n      s.wobbleY = 0;\n      s.gravity = gravity * 3;\n      s.scalar = scalar;\n      s.flat = flat;\n      s.color = new Color(fillColor);\n    };\n    const radAngle = toRadian(angle);\n    const radSpread = toRadian(spread);\n    let temp = particleCount;\n    while (temp) {\n      const s = shapeCreator();\n      addShapeAttributes(s, temp);\n      // s.clone()可以改写，用以复制「自定义属性」\n      s.clone = ((temp) => () => {\n        const sc = shapeCreator();\n        addShapeAttributes(sc, temp);\n        return sc;\n      })(temp);\n      this.addShape(s);\n      temp--;\n    }\n  }\n\n  protected cloneShapeCombo(): ConfettiShapeCombo {\n    const shapeCombo = new ConfettiShapeCombo(this.options);\n    return shapeCombo;\n  }\n\n  // 提供外部变更\n  public update() {\n    this.shapes = this.shapes.filter((fetti) => {\n      fetti.x += Math.cos(fetti.angle2D) * fetti.velocity + fetti.drift;\n      fetti.y += Math.sin(fetti.angle2D) * fetti.velocity + fetti.gravity;\n      fetti.velocity *= fetti.decay;\n\n      if (fetti.flat) {\n        fetti.wobble = 0;\n        fetti.wobbleX = fetti.x + 10 * fetti.scalar;\n        fetti.wobbleY = fetti.y + 10 * fetti.scalar;\n        fetti.tiltSin = 0;\n        fetti.tiltCos = 0;\n        fetti.random = 1;\n      } else {\n        fetti.wobble += fetti.wobbleSpeed;\n        fetti.wobbleX = fetti.x + 10 * fetti.scalar * Math.cos(fetti.wobble);\n        fetti.wobbleY = fetti.y + 10 * fetti.scalar * Math.sin(fetti.wobble);\n        fetti.tiltAngle += 0.1;\n        fetti.tiltSin = Math.sin(fetti.tiltAngle);\n        fetti.tiltCos = Math.cos(fetti.tiltAngle);\n        fetti.random = Math.random() + 2;\n      }\n\n      const progress = fetti.tick++ / fetti.totalTicks;\n      const x1 = fetti.x + fetti.random * fetti.tiltCos;\n      const y1 = fetti.y + fetti.random * fetti.tiltSin;\n      const x2 = fetti.wobbleX + fetti.random * fetti.tiltCos;\n      const y2 = fetti.wobbleY + fetti.random * fetti.tiltSin;\n\n      fetti.setAttr(\"fill\", fetti.color.setAlpha(1 - progress).toString());\n      fetti.degree = toDegree((Math.PI / 10) * fetti.wobble);\n      fetti.scaleX = Math.abs(x2 - x1) * 0.1;\n      fetti.scaleY = Math.abs(y2 - y1) * 0.1;\n\n      return fetti.tick < fetti.totalTicks;\n    });\n\n    // if can continue\n    return this.shapes.length > 0;\n  }\n}\n\nexport default ConfettiShapeCombo;\n","import { Observable } from \"rxjs\";\nimport { type AnyElement } from \"@zyzgroup/core-common\";\n\n// 监控 DOM 改变\nexport function useMutation$(\n  el: AnyElement | Document,\n  options: MutationObserverInit = {\n    attributes: true,\n    childList: true,\n    subtree: true\n  }\n): Observable<MutationRecord[]> {\n  return new Observable((observer) => {\n    const mo = new MutationObserver(\n      (records: MutationRecord[], _: MutationObserver) => {\n        // for (const mutation of records) {\n        //   if (mutation.type === \"childList\") {\n        //     mutation.addedNodes.forEach((node) => {\n        //       if (node.id === \"targetElement\") {\n        //         // 目标元素已经插入到 DOM 中\n        //         o.disconnect(); // 停止监听\n        //       }\n        //     });\n        //   }\n        // }\n        observer.next(records);\n      }\n    );\n    mo.observe(el, options);\n    return () => {\n      mo.disconnect(); // 停止监听\n    };\n  });\n}\n\n// 目标元素是否已经插入到 DOM\nexport function waitElementAddedInDOM(\n  parent: AnyElement | Document,\n  child: AnyElement\n): Promise<boolean> {\n  return new Promise((resolve) => {\n    const observer = new MutationObserver((mutationsList, observer) => {\n      for (const mutation of mutationsList) {\n        if (mutation.type === \"childList\") {\n          mutation.addedNodes.forEach((node) => {\n            if (node.isEqualNode(child)) {\n              observer.disconnect();\n              resolve(true);\n            }\n          });\n        }\n      }\n    });\n    observer.observe(parent, { childList: true });\n  });\n}\n","import { type AnyElement } from \"@zyzgroup/core-common\";\nimport { Observable } from \"rxjs\";\n\n// 跟踪元素的位置变化，如果 被观察元素 占 父元素 的 threshold 不变，则不会触发\nexport function useIntersection$(\n  el: AnyElement,\n  options: IntersectionObserverInit = {\n    root: null // default browser viewport 必须是目标元素的父级元素\n    // threshold: 0.5, // 表示重叠面积占被观察者的比例，从 0 - 1 取值，1 表示完全被包含\n  }\n): Observable<IntersectionObserverEntry> {\n  return new Observable((observer) => {\n    const io = new IntersectionObserver(\n      (entries: IntersectionObserverEntry[], _: IntersectionObserver) => {\n        // entry.time; // 触发的时间\n        // entry.rootBounds; // 视窗位置矩形\n        // entry.boundingClientRect; // 被观察者的位置矩形\n        // entry.intersectionRect; // 重叠区域的位置矩形\n        // entry.intersectionRatio; // 重叠区域占被观察者面积的比例（被观察者不是矩形时也按照矩形计算）\n        // entry.target; // 被观察者\n        if (entries.length) {\n          // const entry = entries.find(\n          //   // browsers can report isIntersecting as true, but intersectionRatio as 0, when something very slowly enters the viewport\n          //   (e, i) => e.isIntersecting\n          //   // &&\n          //   // e.intersectionRatio >=\n          //   //   (options?.threshold\n          //   //     ? typeof options.threshold == \"number\"\n          //   //       ? options.threshold\n          //   //       : options.threshold[i]\n          //   //     : 0.5)\n          // );\n          const entry = entries[entries.length - 1];\n          if (entry) {\n            observer.next(entry);\n          }\n        }\n      },\n      options\n    );\n    io.observe(el);\n    return () => {\n      io.unobserve(el);\n      io.disconnect();\n    };\n  });\n}\n","import { Observable, distinctUntilChanged, map, startWith } from \"rxjs\";\nimport { type AnyElement } from \"@zyzgroup/core-common\";\nimport { useScroll$, getViewport } from \"./useElementEvents\";\nimport { useIntersection$ } from \"./useIntersection\";\n\nexport function useVisibleSimple$(\n  el: AnyElement,\n  options?: { root?: HTMLElement }\n): Observable<boolean> {\n  return useScroll$().pipe(\n    startWith(null),\n    map(() => {\n      const { width, height } =\n        options?.root?.getBoundingClientRect() || getViewport();\n      const { top, left, right, bottom } = el.getBoundingClientRect();\n      return (\n        ((top >= 0 && top <= height) || (bottom >= 0 && bottom <= height)) &&\n        ((left >= 0 && left <= width) || (right >= 0 && right <= width))\n      );\n    }),\n    distinctUntilChanged()\n  );\n}\n\nexport function useVisible$(\n  el: AnyElement,\n  options?: {\n    threshold?: number; // 表示重叠面积占被观察者的比例，从 0 - 1 取值，1 表示完全被包含\n    root?: HTMLElement; // 必须是目标元素的父级元素\n  }\n): Observable<boolean> {\n  const threshold =\n    typeof options?.threshold == \"number\" ? options.threshold : 0.5;\n  return useIntersection$(el, {\n    threshold: threshold,\n    root: options?.root\n  }).pipe(\n    map((entry: IntersectionObserverEntry) => {\n      // browsers can report isIntersecting as true, but intersectionRatio as 0, when something very slowly enters the viewport\n      return entry.isIntersecting && entry.intersectionRatio >= threshold;\n    }),\n    distinctUntilChanged()\n  );\n}\n","import { Observable, asyncScheduler } from \"rxjs\";\nimport { map, subscribeOn } from \"rxjs/operators\";\nimport { compareVersion } from \"@zyzgroup/core-common\";\nimport { injectStyle } from \"./useStyle\";\nimport { useResize$ } from \"./useResize\";\nimport { isIOS, getOperatingSystemVersion } from \"../env\";\n\nlet isInjected = false;\nfunction inject() {\n  if (isInjected) {\n    return;\n  }\n  isInjected = true;\n  // <meta name=\"viewport\" content=\"viewport-fit=cover\" />\n  // iPhoneX 可能有问题\n  // 注意注入时：--xxx:后面不要有空格\n  // if (isIOS() && compareVersion(getOperatingSystemVersion(), \"11.2\") < 0) {\n  //   // iOS < 11.2\n  //   injectStyle(`\n  //     :root {\n  //       --sat:constant(safe-area-inset-top, 0px);\n  //       --sar:constant(safe-area-inset-right, 0px);\n  //       --sab:constant(safe-area-inset-bottom, 0px);\n  //       --sal:constant(safe-area-inset-left, 0px);\n  //     }\n  //     :host {\n  //       --sat:constant(safe-area-inset-top, 0px);\n  //       --sar:constant(safe-area-inset-right, 0px);\n  //       --sab:constant(safe-area-inset-bottom, 0px);\n  //       --sal:constant(safe-area-inset-left, 0px);\n  //     }\n  //   `);\n  // } else {\n  // iOS > 11.2\n  injectStyle(`\n    :root {\n      --sat:env(safe-area-inset-top, 0px);\n      --sar:env(safe-area-inset-right, 0px);\n      --sab:env(safe-area-inset-bottom, 0px);\n      --sal:env(safe-area-inset-left, 0px);\n    }\n    :host {\n      --sat:env(safe-area-inset-top, 0px);\n      --sar:env(safe-area-inset-right, 0px);\n      --sab:env(safe-area-inset-bottom, 0px);\n      --sal:env(safe-area-inset-left, 0px);\n    }\n  `);\n  // }\n}\n\ninject();\n\nexport function useSafeArea$(): Observable<{\n  bottom: string;\n  top: string;\n  right: string;\n  left: string;\n}> {\n  return useResize$(document.documentElement).pipe(\n    subscribeOn(asyncScheduler), // next tick\n    map(() => {\n      const declaration = getComputedStyle(document.documentElement);\n      return {\n        bottom: declaration.getPropertyValue(\"--sab\"),\n        top: declaration.getPropertyValue(\"--sat\"),\n        right: declaration.getPropertyValue(\"--sar\"),\n        left: declaration.getPropertyValue(\"--sal\")\n      };\n    })\n  );\n}\n","import { Observable } from \"rxjs\";\n\nexport function useCoords$(\n  options: PositionOptions = {\n    enableHighAccuracy: true, // 使用高精度模式\n    timeout: 5000, // 设置最大超时时间\n    maximumAge: 0 // 每次都获取新的位置\n  }\n): Observable<{\n  longitude: number;\n  latitude: number;\n}> {\n  return new Observable((observer) => {\n    if (!(\"geolocation\" in navigator)) {\n      return observer.error(\"navigator.geolocation is not available.\");\n    }\n    let watchId: number;\n    new Promise<void>((resolve, reject) => {\n      navigator.geolocation.getCurrentPosition(\n        (position) => {\n          observer.next({\n            longitude: position.coords.longitude,\n            latitude: position.coords.latitude\n          });\n          resolve();\n        },\n        (error) => {\n          reject(error);\n        }\n      );\n    })\n      .then(() => {\n        watchId = navigator.geolocation.watchPosition(\n          (position) => {\n            observer.next({\n              longitude: position.coords.longitude,\n              latitude: position.coords.latitude\n            });\n          },\n          (error) => {\n            observer.error(error);\n          },\n          options\n        );\n      })\n      .catch((error) => {\n        observer.error(error);\n      });\n    return () => {\n      if (typeof watchId == \"number\") {\n        navigator.geolocation.clearWatch(watchId);\n      }\n    };\n  });\n}\n","import { Observable } from \"rxjs\";\nimport { distinctUntilChanged, map, startWith } from \"rxjs/operators\";\nimport { useEvent$ } from \"./useEventListener\";\n\n// (min-width: 600px)\n// (prefers-reduced-motion: reduce)\n// (prefers-color-scheme: light)\n// (prefers-color-scheme: dark)\nexport function useMatchMedia$(\n  query = \"(prefers-color-scheme: dark)\"\n): Observable<boolean> {\n  const mediaQueryList = window.matchMedia(query);\n  return useEvent$(mediaQueryList, \"change\").pipe(\n    map((e: MediaQueryListEvent) => e.matches),\n    startWith(mediaQueryList.matches),\n    distinctUntilChanged()\n  );\n}\n","import {\n  stringify,\n  parse,\n  useTimestampValue,\n  TimestampValue,\n  type TimestampValueOptions\n} from \"@zyzgroup/core-common\";\n\n// sessionStorage 存储会话数据\n// sessionStorage 只能被当前标签页访问\n// 即便是相同域名下的两个页面，只要它们 不在同一个浏览器窗口中 打开，那么它们的 Session Storage 内容也无法共享\n\n// 为什么 sessionStorage 在不同 Tab 页不共享？\n// 这是由 W3C 标准明确设计的,sessionStorage 的设计初衷就是为了“隔离”，而不是“共享”。\n// 在 sessionStorage 的语境下，“Session（会话）”的定义范围被严格限制在当前标签页（Tab）或当前窗口（Window）中。\n// LocalStorage 的范围： 同源（Same Origin） + 浏览器实例，只要域名一样，所有 Tab 共享数据\n// SessionStorage 的范围： 同源 + 顶级浏览上下文（Top-level Browsing Context） , 即：一个 Tab 就是一个独立的 Session\n\n// 设计目的：为了“多窗口并行操作”, 防止多窗口之间的数据干扰\n\n// 举个场景例子：假设你在一个订票网站上，同时打开了两个 Tab：\n// Tab A： 正在帮张三买去北京的票\n// Tab B： 正在帮李四买去上海的票\n\n// 如果 sessionStorage 是跨 Tab 共享的：\n// 你在 Tab A 选择了“北京”，存入 Storage\n// 你在 Tab B 选择了“上海”，数据被覆盖了\n// 回到 Tab A 点击提交，结果系统读取的是最新的“上海”，导致张三买错票\n\n// 因为有了 sessionStorage 的隔离特性：\n// Tab A 和 Tab B 拥有完全独立的存储空间，互不干扰\n// 这使得用户可以在同一个网站上同时进行多个独立的业务流程，而不用担心状态串台\n\n// 关闭 浏览器 或 标签页, 清除 sessionStorage\n\n// 刷新 标签页 或 恢复浏览器页面, 保留 sessionStorage\n\n// 复制标签页（浏览器标签右键菜单中的复制标签页，非复制 URL）或者在脚本中使用 window.open() 打开同源页面 时会复制当前 sessionStorage 到新的标签页中\n// 但是！ 这仅仅是拷贝（Copy） ，不是同步（Sync）\n// 复制完成后，两个 Tab 的数据就断开了联系, 你在新 Tab 修改数据，旧 Tab 不会变；反之亦然。\n\n// BroadcastChannel 专门用于同源下的跨上下文通信（Tab、Iframe、Worker）\n// // Tab A\n// const channel = new BroadcastChannel('app_channel');\n// channel.postMessage('Hello Tab B');\n// // Tab B\n// const channel = new BroadcastChannel('app_channel');\n// channel.onmessage = (msg) => {\n//   console.log(msg.data); // 收到 'Hello Tab B'\n// };\n\nexport function useSessionStorage(\n  key: string | symbol,\n  options?: TimestampValueOptions\n) {\n  const k = typeof key == \"string\" ? key : key.toString();\n\n  const getInDom = () => {\n    try {\n      const fromLocal = window.sessionStorage.getItem(k);\n      if (fromLocal) {\n        return parse(fromLocal);\n      }\n    } catch (e) {\n      // do nothing\n    }\n    return undefined;\n  };\n\n  // write or remove\n  const setInDom = (timestampValue: TimestampValue) => {\n    try {\n      if (typeof timestampValue.value != \"undefined\") {\n        window.sessionStorage.setItem(k, stringify(timestampValue));\n      } else {\n        window.sessionStorage.removeItem(k);\n      }\n    } catch (e) {\n      // do nothing\n    }\n  };\n\n  const get = () => {\n    const { get: getTimestampValue } = useTimestampValue(getInDom(), options);\n    const timestampValue = getTimestampValue();\n    return timestampValue.value;\n  };\n\n  const set = (v: any) => {\n    const { set: setTimestampValue } = useTimestampValue(getInDom(), options);\n    const value = setTimestampValue(v);\n    setInDom(value);\n  };\n\n  return {\n    get,\n    set\n  };\n}\n\nexport function clearSessionStorage() {\n  window.sessionStorage.clear();\n}\n","import { Observable } from \"rxjs\";\nimport { distinctUntilChanged, map, startWith } from \"rxjs/operators\";\nimport { useEvent$ } from \"./useEventListener\";\nimport { useMutation$ } from \"./useMutation\";\nimport { useSessionStorage } from \"./useSessionStorage\";\nimport { clamp, State } from \"@zyzgroup/core-common\";\n\nexport function useLocation$(): Observable<Location> {\n  return useMutation$(document).pipe(\n    map(() => location), // const { pathname, search } = location;\n    startWith(location)\n  );\n}\n\nexport function useUrlChange$(): Observable<string> {\n  return useLocation$().pipe(\n    map((location) => location.href),\n    startWith(location.href),\n    distinctUntilChanged()\n  );\n}\n\nexport function useHashChange$(): Observable<string> {\n  return useEvent$(window, \"hashchange\").pipe(\n    map((hashEvent: HashChangeEvent) =>\n      (hashEvent.target as Window).location.hash.replace(\"#\", \"\")\n    ),\n    startWith(window.location.hash.replace(\"#\", \"\")),\n    distinctUntilChanged()\n  );\n}\n\n// 浏览器维护一个“历史记录栈”，每访问一个页面或状态，就像往栈里“压入”一条记录 = 浏览器的“时间机”\n// - 用户点击浏览器的 前进/后退 按钮，实际上就是在这个栈里移动指针\n// - 当前页面 = 栈中的当前指针位置\n// - history.back() / history.go(-1) = 指针向前一个页面移动，相当于用户点击浏览器“后退”按钮\n// - history.forward() / history.go(1) = 指针向下一个页面移动，相当于用户点击浏览器“前进”按钮\n\n// window.history.pushState(state, title = \"\", url)\n// - 在不刷新页面的情况下向历史记录栈中“压入新状态”\n// - URL 地址栏更新为 url\n// - 页面内容不会自动刷新\n// - pushState 不会触发 popstate\n// - 如果有多个源头对同一个url进行 pushState 操作，浏览器会合并多个源头的 state\n\n// window.history.replaceState(state, title = \"\", url)\n// - 在不刷新页面的情况下向历史记录栈中“替换新状态”\n// - 页面内容不会自动刷新\n// - replaceState 不会触发 popstate\n\n// SPA 历史管理示意图\n// 历史栈: [page1] -> [page2] -> [page3]\n//           ↑       ↑        ↑\n//           |       |        |\n//         当前指针   pushState   pushState\n// 操作流程：\n// 1. 初始状态：当前指针指向 page1\n// 2. window.history.pushState({page:2}, \"\", \"/page2\")\n//    -> 栈中新增 page2，指针移动到 page2\n//    -> 不触发 popstate\n// 3. window.history.pushState({page:3}, \"\", \"/page3\")\n//    -> 栈中新增 page3，指针移动到 page3\n//    -> 不触发 popstate\n// 4. window.history.back()\n//    -> 指针回到 page2\n//    -> 触发 popstate, event.state = {page:2}\n// 5. window.history.back()\n//    -> 指针回到 page1\n//    -> 触发 popstate, event.state = {page:1}\n// 6. window.history.forward()\n//    -> 指针前进到 page2\n//    -> 触发 popstate, event.state = {page:2}\n\n// nameInState = state 中用于判断的 当前url 的字段名称，例如 vue-router 的 pop-state = {\n//   back: \"/\",\n//   current: \"/lot?n=739\",\n//   forward: \"/result\",\n//   position: 18,\n//   replaced: false,\n//   scroll: {left: 0, top: 0}\n// }\n// 监听：浏览器历史栈指针变化：\n// - 用户点击浏览器 后退/前进 按钮\n// - 或 history.back() / history.forward() / history.go(-1) / history.go(1) 时触发的 popstate 事件\nexport function usePopStateChange$(nameInState = \"current\"): Observable<any> {\n  return useEvent$(window, \"popstate\").pipe(\n    // 注意：当页面刷新时，history.state（最近一次 pushState/replaceState 的 state对象） 可能为 null\n    // 即：浏览器可能不会自动恢复 state 对象\n    // startWith(null),\n    map((popStateEvent: PopStateEvent) => popStateEvent.state || {}),\n    map((state) => ({\n      ...state,\n      // pop-state 转换为 标准输出-state\n      [nameInState]:\n        state[nameInState] ||\n        window.location.pathname + window.location.search + window.location.hash\n    })),\n    distinctUntilChanged((a, b) => a[nameInState] === b[nameInState])\n  );\n  // window.dispatchEvent(new PopStateEvent(\"name\", { state }));\n}\n\n// 问题现象描述\n// 1. 用户在页面 A → 页面 B → 页面 C 进行了多次导航\n// 2. 浏览器刷新页面 C\n// 3. 浏览器的 返回按钮 仍可用，说明浏览器的原生 session history 还在\n// 4. 但是在本地维护的访问记录（比如 JS 的栈或历史数组）被清空了\n// 5. 结果导致 SPA 的页面切换动画逻辑认为是 push 操作（forward），而不是 back 操作，所以动画不符合预期\n// 解决方案：动画方向应基于 浏览器历史记录，而非内存栈\n\nexport type FeRouteDirection = \"forward\" | \"backward\" | \"keep\";\n\n/**\n *\n * @param nameInState state 中用于判断的 当前url 的字段名称\n * @param alreadyPushState 是否第三方库已自动 pushState，例如 Vue-Router 已自动操作 pushState\n * @returns\n */\nexport function useFeRoute(\n  options: { nameInState: string; alreadyPushState?: boolean } = {\n    nameInState: \"current\",\n    alreadyPushState: true\n  }\n) {\n  const nameInState = options.nameInState;\n  const alreadyPushState =\n    typeof options.alreadyPushState == \"boolean\"\n      ? options.alreadyPushState\n      : true;\n\n  type FeRouteState = { [nameInState]: string } & State;\n\n  // 历史记录内存栈 初始化为 浏览器历史记录\n  const { get: getHistoryInSession, set: setHistoryInSession } =\n    useSessionStorage(\"fe-route-history\");\n  const history: FeRouteState[] = getHistoryInSession() || [];\n\n  // 当前历史记录栈指针\n  const { get: getHistoryIndexInSession, set: setHistoryIndexInSession } =\n    useSessionStorage(\"fe-route-history-index\");\n  const initIndex = getHistoryIndexInSession();\n  let currentIndex =\n    typeof initIndex == \"number\" ? initIndex : history.length - 1;\n\n  function findIndexInHistory(state: FeRouteState) {\n    const index = history.findIndex(\n      (s) => s[nameInState] === state[nameInState]\n    );\n    return index;\n  }\n\n  // 路由变化\n  const route: {\n    currentIndex: number;\n    to?: string;\n    from?: string;\n    direction?: FeRouteDirection;\n    delta?: number;\n  } = { currentIndex };\n\n  function setCurrent(index: number) {\n    // console.log(\"before currentIndex: \", currentIndex);\n    index = clamp(index, -1, history.length - 1);\n    if (currentIndex < 0) {\n      // 无历史记录，第一次进入\n      route.direction = \"keep\";\n      route.delta = 0;\n    } else {\n      if (index < currentIndex) {\n        route.direction = \"backward\";\n      } else if (index > currentIndex) {\n        route.direction = \"forward\";\n      } else {\n        route.direction = \"keep\";\n      }\n      route.delta = index - currentIndex;\n    }\n    route.from = route.to;\n    route.to = history[index]?.[nameInState];\n    currentIndex = index;\n    route.currentIndex = currentIndex;\n    setHistoryIndexInSession(currentIndex);\n    // console.log(\"after currentIndex: \", currentIndex);\n  }\n\n  // 初始化\n  setCurrent(currentIndex);\n\n  function pushHistory(state: FeRouteState) {\n    history.push(state);\n    setHistoryInSession(history);\n    setCurrent(history.length - 1);\n  }\n  function replaceHistory(state: FeRouteState) {\n    const index = findIndexInHistory(state);\n    if (index >= 0) {\n      history.splice(index, 1, state);\n      setHistoryInSession(history);\n    } else {\n      pushHistory(state);\n    }\n  }\n  function pushState(url: string, origin: State) {\n    const state = { ...origin, [nameInState]: url };\n    window.history.pushState(state, \"\", url);\n    pushHistory(state);\n  }\n  function replaceState(url: string, origin: State) {\n    const state = { ...origin, [nameInState]: url };\n    window.history.replaceState(state, \"\", url);\n    replaceHistory(state);\n  }\n\n  // 前进或后退\n  function gotoHistory(state: FeRouteState, isPushedState = alreadyPushState) {\n    const index = findIndexInHistory(state);\n    if (index < 0) {\n      // 如果栈中没有，说明是 前进 或 刷新 或 直接访问URL，插入栈\n      if (currentIndex >= 0) {\n        // 与浏览器行为保持一致：删除部分记录\n        history.splice(currentIndex + 1);\n        setHistoryInSession(history);\n      }\n      isPushedState ? pushHistory(state) : pushState(state[nameInState], state);\n      return;\n    }\n    if (index == currentIndex) {\n      // 已是当前，忽略\n      return;\n    }\n    // 后退\n    // 与浏览器行为保持一致：不删除记录\n    setCurrent(index);\n  }\n\n  const popstate$ = usePopStateChange$().subscribe((state) => {\n    // console.log(\"popstate\", state);\n    // 前进或后退\n    gotoHistory(state, true);\n  });\n\n  return {\n    history,\n    route,\n    // 统一对外接口：前进或后退\n    // 注意与 popstate$ 的前后调用顺序\n    navigate: (url: string, origin: State) => {\n      gotoHistory({ ...origin, [nameInState]: url }, alreadyPushState);\n    },\n    go(delta: number) {\n      window.history.go(delta);\n    },\n    back() {\n      window.history.back();\n    },\n    forward() {\n      window.history.forward();\n    },\n    destroy: () => {\n      popstate$.unsubscribe();\n    }\n  };\n}\n","import { type AnyElement, toCamel } from \"@zyzgroup/core-common\";\n\nexport function useDataset(\n  el: AnyElement,\n  key?: string | Record<string, any>,\n  value?: string\n) {\n  if (typeof key === \"string\") {\n    key = toCamel(key);\n  }\n  if ((typeof key === \"string\" || key === undefined) && value === undefined) {\n    // read\n    const data = Object.assign({}, el.dataset);\n    Object.keys(data).forEach((key) => {\n      if (data[key]?.startsWith(\"[\") || data[key]?.startsWith(\"{\")) {\n        try {\n          data[key] = JSON.parse(data[key] || \"\");\n        } catch (e) {\n          ///\n        }\n      }\n    });\n    return typeof key === \"string\" ? data[key] : data;\n  } else {\n    // write\n    let obj: Record<string, any> = {};\n    if (typeof key == \"object\") {\n      obj = key;\n    } else if (typeof key == \"string\") {\n      obj[key] = value;\n    }\n    Object.entries(obj).forEach(([name, val]) => {\n      if (val) {\n        el.dataset[name] = val instanceof Object ? JSON.stringify(val) : val;\n      } else {\n        delete el.dataset[name];\n      }\n    });\n  }\n}\n\nexport function atomRemoveDataset(el: AnyElement, key: string) {\n  key.split(/[,\\s]+/).forEach((k) => {\n    if (k.trim() != \"\") {\n      delete el.dataset[k.trim()];\n    }\n  });\n}\n","import {\n  stringify,\n  parse,\n  useTimestampValue,\n  TimestampValue,\n  type TimestampValueOptions\n} from \"@zyzgroup/core-common\";\n\n// localStorage 存储的数据可以跨浏览器会话访问\n// LocalStorage 的范围： 同源（Same Origin） + 浏览器实例，只要域名一样，所有 Tab 共享数据\n\n// 存储量 5MB\n\n// 不会带到 HTTP 请求中，仅位于浏览器端，不与服务端发生通信\n\nexport function useLocalStorage(\n  key: string | symbol,\n  options?: TimestampValueOptions\n) {\n  const k = typeof key == \"string\" ? key : key.toString();\n\n  const getInDom = () => {\n    try {\n      const fromLocal = window.localStorage.getItem(k);\n      if (fromLocal) {\n        return parse(fromLocal);\n      }\n    } catch (e) {\n      // do nothing\n    }\n    return undefined;\n  };\n\n  // write or remove\n  const setInDom = (timestampValue: TimestampValue) => {\n    try {\n      if (typeof timestampValue.value != \"undefined\") {\n        window.localStorage.setItem(k, stringify(timestampValue));\n      } else {\n        window.localStorage.removeItem(k);\n      }\n    } catch (e) {\n      // do nothing\n    }\n  };\n\n  const get = () => {\n    const { get: getTimestampValue } = useTimestampValue(getInDom(), options);\n    const timestampValue = getTimestampValue();\n    return timestampValue.value;\n  };\n\n  const set = (v: any) => {\n    const { set: setTimestampValue } = useTimestampValue(getInDom(), options);\n    const value = setTimestampValue(v);\n    setInDom(value);\n  };\n\n  return {\n    get,\n    set\n  };\n}\n\nexport function clearLocalStorage() {\n  window.localStorage.clear();\n}\n","import { Observable, Subject, combineLatest } from \"rxjs\";\nimport { map, startWith } from \"rxjs/operators\";\nimport { createSymbol } from \"@zyzgroup/core-common\";\nimport { useLocalStorage } from \"./useLocalStorage\";\nimport { useMatchMedia$ } from \"./useMatchMedia\";\nimport { atomWriteAttribute } from \"./useAttribute\";\n\n// import \"@zyzgroup/core-web/dist/theme.css\";\n// xg-blue:信鸽蓝 xg-red:信鸽红 xg-green:信鸽绿 ks-green:昆山绿 yz-green:扬州绿\nexport type ColorPattern =\n  | \"xg-blue\"\n  | \"xg-red\"\n  | \"xg-green\"\n  | \"ks-green\"\n  | \"yz-green\";\n\nexport type ThemeType = \"dark\" | \"light\";\n\nconst { get: getLocalStorage, set: setLocalStorage } = useLocalStorage(\n  createSymbol(\"theme\")\n);\n\nconst localBi$ = new Subject<ThemeType | undefined>();\nconst local$ = localBi$.pipe(startWith(undefined));\n\nfunction setThemeInDOM(theme: ThemeType) {\n  switch (theme) {\n    case \"dark\":\n      document.documentElement.classList.add(\"dark\");\n      atomWriteAttribute(document.documentElement, \"data-theme\", \"dark\");\n      break;\n    case \"light\":\n    default:\n      document.documentElement.classList.remove(\"dark\");\n      atomWriteAttribute(document.documentElement, \"data-theme\", \"light\");\n      break;\n  }\n}\n\nexport function setTheme(theme: ThemeType): ThemeType {\n  setLocalStorage(theme);\n  setThemeInDOM(theme);\n  localBi$.next(theme);\n  return theme;\n}\n\nexport function toggleTheme(): ThemeType {\n  return setTheme(getLocalStorage() == \"dark\" ? \"light\" : \"dark\");\n}\n\nexport function getTheme$(): Observable<ThemeType> {\n  return combineLatest([\n    local$,\n    useMatchMedia$(\"(prefers-color-scheme: dark)\")\n  ]).pipe(\n    map(([theme, matchMediaDark]) => {\n      if (theme) {\n        return theme;\n      }\n      theme = getLocalStorage();\n      if (!theme) {\n        // 如果用户没有初始设置过：浏览器会获取「系统默认设置」\n        theme = matchMediaDark ? \"dark\" : \"light\";\n      }\n      setLocalStorage(theme);\n      setThemeInDOM(theme);\n      return theme;\n    })\n  );\n}\n\nexport function getCSSVar(name: string, defaultValue = \"\"): string {\n  return (\n    getComputedStyle(document.documentElement).getPropertyValue(name) ||\n    defaultValue\n  );\n}\n\nexport function setCSSVar(name: string, value: string): void {\n  // getComputedStyle(document.documentElement).setProperty(name, value);\n  document.documentElement.style.setProperty(name, value);\n}\n","// https://www.w3.org/TR/webdriver1/#cookies\n\n// Cookie 就是一个存储在浏览器里的一个文本文件\n// 通常由服务端生成，发送到客户端\n// 不占用服务器资源\n// HTTP Header : Set-Cookie: name=xxx; domain=xxx.com\n\n// 同一个域名下的所有请求，都会携带 Cookie\n// 过量的 Cookie 会带来巨大的性能浪费\n\n// cookie 大小限制在 4KB\n// 复杂场景不够用\n\nexport function useCookie(\n  name: string,\n  options?: {\n    value?: any;\n    days?: number;\n    path?: string;\n    domain?: string;\n    secure?: boolean;\n  }\n) {\n  let value = options?.value || \"\";\n\n  if (!value) {\n    const c = `; ${document.cookie}`\n      .split(`; ${name}=`)\n      .pop()\n      ?.split(\";\")\n      .shift();\n    if (c) {\n      value = decodeURIComponent(c);\n    }\n  }\n\n  const get = () => value;\n\n  const set = (v: any) => {\n    value = v;\n    if (value) {\n      const domain = options?.domain ? \"; domain=\" + options.domain : \"\";\n      const path = options?.path ? \"; path=\" + options.path : \"\";\n      const secureString = options?.secure == true ? \"; secure\" : \"\";\n      let cookie =\n        name + \"=\" + encodeURIComponent(value) + domain + path + secureString;\n      if (options?.days) {\n        const expires =\n          \"; expires=\" +\n          new Date(Date.now() + options.days * 864e5).toUTCString();\n        cookie += expires;\n      }\n      document.cookie = cookie;\n    }\n  };\n\n  set(value);\n\n  return {\n    get,\n    set\n  };\n}\n\nexport function clearCookies() {\n  // document.cookie\n  //   .split(\";\")\n  //   .forEach(\n  //     (cookie) =>\n  //       (document.cookie = cookie\n  //         .replace(/^ +/, \"\")\n  //         .replace(/=.\\*/, `=;expires=${new Date(0).toUTCString()};path=/`))\n  //   );\n  const cookies = document.cookie.split(\"; \");\n  for (let c = 0; c < cookies.length; c++) {\n    const d = window.location.hostname.split(\".\");\n    while (d.length > 0) {\n      const cookieBase =\n        encodeURIComponent(cookies[c].split(\";\")[0].split(\"=\")[0]) +\n        \"=; expires=Thu, 01-Jan-1970 00:00:01 GMT; domain=\" +\n        d.join(\".\") +\n        \" ;path=\";\n      const p = location.pathname.split(\"/\");\n      document.cookie = cookieBase + \"/\";\n      while (p.length > 0) {\n        document.cookie = cookieBase + p.join(\"/\");\n        p.pop();\n      }\n      d.shift();\n    }\n  }\n}\n","// IndexDB 是一个运行在浏览器上的非关系型数据库\n\n// 使用索引实现对数据的高性能搜索，使用上接近于数据库\n// 能够解决 Web Storage 在存储 大量的结构化数据时存储容量小，搜索速度慢等问题\n\n// 理论上来说，IndexDB 是没有存储上限的（一般来说不会小于 250M）\n\n// 遵守同源策略\n\n// 支持二进制存储：不仅可以存储字符串，也可以存储 File 或 Blob 对象\n\n// IndexedDB 操作默认为异步操作\n\n// 创建表\nfunction ensureTable(db: IDBDatabase, tableName: string) {\n  let objectStore;\n  if (!db.objectStoreNames.contains(tableName)) {\n    objectStore = db.createObjectStore(tableName, { keyPath: \"id\" });\n  }\n  return objectStore;\n}\n\nexport function createIndexDB(\n  dbName: string,\n  dbVersion = 1,\n  tableName: string\n) {\n  return new Promise((resolve, reject) => {\n    let db: IDBDatabase;\n    const request: IDBOpenDBRequest = window.indexedDB.open(dbName, dbVersion);\n    request.onerror = () => {\n      reject(\"无法使用IndexDB!\");\n    };\n    request.onsuccess = (e) => {\n      db = (e.target as IDBRequest).result;\n      ensureTable(db, tableName);\n      resolve(db);\n    };\n    // 在 初始化数据库 / 版本发生更新时被调用\n    // request.onupgradeneeded = request.onsuccess;\n  });\n}\n\nexport function writeToIndexDB(\n  db: IDBDatabase,\n  tableName: string,\n  json: Record<string, string | number> = { id: 1, name: \"xxx\" }\n) {\n  return new Promise((resolve, reject) => {\n    const transaction: IDBTransaction = db.transaction(\n      [tableName],\n      \"readwrite\"\n    );\n    const objectStore: IDBObjectStore = transaction.objectStore(tableName);\n    objectStore.add(json);\n    transaction.oncomplete = (e) => {\n      resolve(e);\n    };\n    transaction.onerror = (e) => {\n      reject(e);\n    };\n  });\n}\n","import {\n  Cache,\n  objectSignature,\n  warnLog,\n  cache,\n  retry,\n  HttpError\n} from \"@zyzgroup/core-common\";\n\ntype FetchResponseType = \"arraybuffer\" | \"blob\" | \"text\" | \"json\";\n\ntype FetchRequestOptions = RequestInit & {\n  responseType?: FetchResponseType;\n  onProgress?: (e: ProgressEvent) => void;\n  timeout?: number;\n  // headers?: HeadersInit;\n};\n\nconst cancels = new Cache<AbortController>();\n\nexport function getFetchId(url: string, options: FetchRequestOptions) {\n  return objectSignature({ url, ...options });\n}\n\n// options = { cache: \"no-store\" }\nexport async function useFetch(url: string, options: FetchRequestOptions) {\n  if (typeof fetch === \"undefined\") {\n    throw new Error(\"fetch() not supported!\");\n  }\n  if (typeof AbortController === \"undefined\") {\n    throw new Error(\"AbortController not supported!\");\n  }\n\n  try {\n    const id = getFetchId(url, options);\n    const controller = new AbortController();\n    cancels.set(id, controller);\n\n    const { responseType, onProgress, timeout } = {\n      responseType: \"json\",\n      timeout: 60000,\n      ...options\n    };\n\n    const timeoutId = setTimeout(() => {\n      controller.abort(); // AbortError\n      // throw new Error(`${timeout} ms Timeout!`);\n    }, timeout);\n\n    let response: Response = await fetch(\n      new Request(url, {\n        ...options,\n        signal: controller.signal\n        // signal: AbortSignal.timeout(timeout) // TimeoutError\n        // headers: new Headers(headers),\n        // credentials: \"include\" || \"same-origin\"\n      })\n    );\n\n    cancels.delete(id);\n    clearTimeout(timeoutId);\n\n    // if (!response.ok) {\n    //   throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n    // }\n\n    if (response.status === 200 || response.status === 0) {\n      // Some browsers return HTTP Status 0 when using non-http protocol\n      // e.g. 'file://' or 'data://'. Handle as success.\n      if (response.status === 0) {\n        warnLog(\"useFetch: HTTP Status 0 received.\");\n      }\n\n      // Workaround: Checking if response.body === undefined for Alipay browser #23548\n      // periodically read data into the new stream tracking while download progress\n      if (\n        onProgress &&\n        typeof ReadableStream !== \"undefined\" &&\n        response.body &&\n        response.body.getReader\n      ) {\n        const reader = response.body.getReader();\n        // Nginx needs X-File-Size check\n        // https://serverfault.com/questions/482875/why-does-nginx-remove-content-length-header-for-chunked-content\n        const contentLength =\n          response.headers.get(\"X-File-Size\") ||\n          response.headers.get(\"Content-Length\");\n        const total = contentLength ? parseInt(contentLength) : 0;\n        const lengthComputable = total !== 0;\n        let loaded = 0;\n        const stream = new ReadableStream({\n          start(controller) {\n            function read() {\n              reader\n                .read()\n                .then(({ done, value }) => {\n                  if (done) {\n                    controller.close();\n                  } else {\n                    loaded += value.byteLength;\n                    onProgress?.(\n                      new ProgressEvent(\"progress\", {\n                        lengthComputable,\n                        loaded,\n                        total\n                      })\n                    );\n                    controller.enqueue(value);\n                    read();\n                  }\n                })\n                .catch((e) => {\n                  controller.error(e);\n                });\n            }\n            read();\n          }\n        });\n        response = new Response(stream);\n      }\n\n      switch (responseType) {\n        case \"arraybuffer\":\n          return await response.arrayBuffer();\n        case \"blob\":\n          return await response.blob();\n        case \"json\":\n          return await response.json();\n        case \"text\":\n        default:\n          return await response.text();\n      }\n    } else {\n      throw new HttpError(\n        `useFetch for \"${response.url}\" responded with ${response.status}: ${response.statusText}`,\n        response\n      );\n    }\n  } catch (error: any) {\n    if (error.name === \"AbortError\") {\n      throw new Error(\"Request timed out\");\n    } else if (error.name === \"TimeoutError\") {\n      throw new Error(\"Request timed out\");\n    }\n    throw error;\n  }\n}\n\nexport function cancelFetch(url: string, options: FetchRequestOptions) {\n  const cancel = cancels.get(getFetchId(url, options));\n  if (cancel) {\n    cancel.abort();\n  }\n}\n\nexport function useFetchRetry(maxRetries = 3, retryDelay?: number) {\n  // async\n  return retry(useFetch, maxRetries, retryDelay);\n}\n\nexport function useFetchCache(ttlMs = 60000) {\n  // async\n  return cache(useFetch, ttlMs);\n}\n\nexport function useFetchRetryCache(\n  ttlMs = 60000,\n  maxRetries = 3,\n  retryDelay?: number\n) {\n  // async\n  return cache(retry(useFetch, maxRetries, retryDelay), ttlMs);\n}\n","// Chinese (China) [zh-cn]\n\nexport default {\n  name: \"zh-cn\",\n  weekdays: \"星期日_星期一_星期二_星期三_星期四_星期五_星期六\".split(\"_\"),\n  weekdaysShort: \"周日_周一_周二_周三_周四_周五_周六\".split(\"_\"),\n  weekdaysMin: \"日_一_二_三_四_五_六\".split(\"_\"),\n  months:\n    \"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月\".split(\n      \"_\"\n    ),\n  monthsShort: \"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月\".split(\"_\"),\n  ordinal: (number: number, period: string) => {\n    switch (period) {\n      case \"W\":\n        return `${number}周`;\n      default:\n        return `${number}日`;\n    }\n  },\n  weekStart: 1,\n  yearStart: 4,\n  formats: {\n    LT: \"HH:mm\",\n    LTS: \"HH:mm:ss\",\n    L: \"YYYY/MM/DD\",\n    LL: \"YYYY年M月D日\",\n    LLL: \"YYYY年M月D日Ah点mm分\",\n    LLLL: \"YYYY年M月D日ddddAh点mm分\",\n    l: \"YYYY/M/D\",\n    ll: \"YYYY年M月D日\",\n    lll: \"YYYY年M月D日 HH:mm\",\n    llll: \"YYYY年M月D日dddd HH:mm\"\n  },\n  relativeTime: {\n    future: \"%s内\",\n    past: \"%s前\",\n    s: \"几秒\",\n    m: \"1 分钟\",\n    mm: \"%d 分钟\",\n    h: \"1 小时\",\n    hh: \"%d 小时\",\n    d: \"1 天\",\n    dd: \"%d 天\",\n    M: \"1 个月\",\n    MM: \"%d 个月\",\n    y: \"1 年\",\n    yy: \"%d 年\"\n  },\n  meridiem: (hour: number, minute: number) => {\n    const hm = hour * 100 + minute;\n    if (hm < 600) {\n      return \"凌晨\";\n    } else if (hm < 900) {\n      return \"早上\";\n    } else if (hm < 1100) {\n      return \"上午\";\n    } else if (hm < 1300) {\n      return \"中午\";\n    } else if (hm < 1800) {\n      return \"下午\";\n    }\n    return \"晚上\";\n  }\n};\n","// English [en]\nexport default {\n  name: \"en\",\n  weekdays: \"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\n    \"_\"\n  ),\n  months:\n    \"January_February_March_April_May_June_July_August_September_October_November_December\".split(\n      \"_\"\n    ),\n  ordinal: (n: number) => {\n    const s = [\"th\", \"st\", \"nd\", \"rd\"];\n    const v = n % 100;\n    return `[${n}${s[(v - 20) % 10] || s[v] || s[0]}]`;\n  }\n};\n","import { Cache } from \"@zyzgroup/core-common\";\nimport zh from \"./locales/zh-cn\";\nimport en from \"./locales/en\";\n\n// global loaded locale\nexport const Ls = new Cache<any>();\n\n// global locale\nlet L = \"zh-cn\";\n// Ls.set(L, zh);\n\nuseLocale(en);\nuseLocale(zh);\n\nexport function useLocale(\n  preset?: string | { name: string },\n  object?: { name: string }\n): Promise<{ name: string }> {\n  if (!preset) {\n    // get current locale\n    return Ls.get(L);\n  }\n  let l;\n  if (typeof preset === \"string\") {\n    const presetLower = preset.toLowerCase();\n    if (Ls.get(presetLower)) {\n      /// 已加载\n      l = presetLower;\n    } else if (object) {\n      /// 覆盖\n      Ls.set(presetLower, object);\n      l = presetLower;\n    } else {\n      /// 未加载\n      // return useLocale(await import(`./locales/${preset}`));\n      return Ls.get(L);\n    }\n  } else {\n    /// 按需加载语言文件\n    const { name } = preset;\n    Ls.set(name, preset);\n    l = name;\n  }\n  if (l) {\n    L = l;\n  }\n  return Ls.get(l) || Ls.get(L);\n}\n","import { type AnyElement } from \"@zyzgroup/core-common\";\nimport {\n  atomReadAttributes,\n  atomWriteAttribute,\n  atomRemoveStyle,\n  atomWriteStyle\n} from \"./hooks\";\nimport { createSVGElement, createSvgPath } from \"./hooks/useDraw/svg\";\n\n// Virtual DOM 其实就是一棵以 VNode节点 作为基础的树\nexport interface VNode {\n  name: string;\n  tag: string;\n  props: { [index: string]: any };\n  children: string | VNode[];\n  // 页面初始存在el 或 挂载后才会有el\n  el?: AnyElement;\n  // 下次更新时的来源\n  alternate?: VNode;\n}\n\nlet vnodeId = 0;\n\n/// 将 tag 转化为 vnode\nexport function h(\n  tag: string,\n  props: { [index: string]: any } = {},\n  children: string | VNode[] = [],\n  el?: AnyElement\n): VNode {\n  return {\n    name: String(++vnodeId),\n    tag,\n    props,\n    children,\n    el\n  };\n}\n\n// 前提：el已挂载到dom上！\nexport function hFromEl(el: AnyElement): VNode {\n  return h(\n    el.tagName,\n    atomReadAttributes(el),\n    Array.from(el.children).map((e) => hFromEl(e as AnyElement)),\n    el\n  );\n}\n\n/// 将 vnode 挂载到 真实dom 上\nexport function mount(\n  vnode: VNode,\n  parentContainer: AnyElement = document.documentElement\n): AnyElement {\n  if (vnode.el) {\n    return vnode.el;\n  }\n  vnode.el =\n    vnode.tag == \"path\" ? createSvgPath() : document.createElement(vnode.tag);\n  if (vnode.props) {\n    for (const k in vnode.props) {\n      const v = vnode.props[k];\n      if (k.startsWith(\"on\")) {\n        vnode.el.addEventListener(k.slice(2).toLowerCase(), v);\n      } else if (k === \"style\") {\n        atomWriteStyle(vnode.el, vnode.props[k]);\n      } else {\n        atomWriteAttribute(vnode.el, k, v);\n      }\n    }\n  }\n  if (vnode.children) {\n    if (typeof vnode.children == \"string\") {\n      vnode.el.appendChild(document.createTextNode(vnode.children));\n      // vnode.el.textContent = vnode.children;\n      // vnode.el.innerHTML = vnode.children;\n    } else {\n      vnode.children.forEach((item) => {\n        mount(item, vnode.el);\n      });\n    }\n  }\n  parentContainer.appendChild(vnode.el);\n  return vnode.el;\n}\n\n/// diff vnode to 真实dom\nexport function patch(oldVnode: VNode, newVnode: VNode): void {\n  if (!oldVnode.el) {\n    // if (oldVnode.tag == newVnode.tag) {\n    //   mergeObjectDeep(newVnode.props, oldVnode.props, false);\n    // }\n    // mount(newVnode);\n    return;\n  }\n  // 不同 tag\n  if (oldVnode.tag !== newVnode.tag) {\n    (oldVnode.el.parentElement || document.body).replaceChild(\n      mount(newVnode),\n      oldVnode.el\n    );\n    return;\n  }\n  // 相同 tag\n  const el = (newVnode.el = oldVnode.el);\n  const oldProps = oldVnode.props;\n  const newProps = newVnode.props;\n  for (const k in oldProps) {\n    if (!(k in newProps)) {\n      if (k.startsWith(\"on\")) {\n        el.removeEventListener(k.slice(2).toLowerCase(), oldProps[k]);\n      } else {\n        el.removeAttribute(k);\n      }\n    }\n  }\n  for (const k in newProps) {\n    const oldValue = oldProps[k];\n    const newValue = newProps[k];\n    if (newValue != oldValue) {\n      if (k.startsWith(\"on\")) {\n        const name = k.slice(2).toLowerCase();\n        el.removeEventListener(name, oldValue);\n        el.addEventListener(name, newValue);\n      } else if (k === \"style\") {\n        for (const sk in oldValue) {\n          if (!(sk in newValue)) {\n            atomRemoveStyle(el, sk);\n          }\n        }\n        atomWriteStyle(el, newValue);\n      } else {\n        atomWriteAttribute(el, k, newValue);\n      }\n    }\n  }\n  const oldChildren = oldVnode.children || [];\n  const newChildren = newVnode.children || [];\n  if (typeof newChildren == \"string\") {\n    // el.textContent = newChildren;\n    el.innerHTML = newChildren;\n  } else {\n    if (typeof oldChildren == \"string\") {\n      el.innerHTML = \"\";\n      newChildren.forEach((item) => {\n        mount(item, el);\n      });\n    } else {\n      const commonLength = Math.min(oldChildren.length, newChildren.length);\n      for (let i = 0; i < commonLength; i++) {\n        patch(oldChildren[i], newChildren[i]);\n      }\n      if (newChildren.length > oldChildren.length) {\n        newChildren.slice(oldChildren.length).forEach((item) => {\n          mount(item, el);\n        });\n      }\n      if (newChildren.length < oldChildren.length) {\n        oldChildren.slice(newChildren.length).forEach((item) => {\n          if (item.el) {\n            el.removeChild(item.el);\n          }\n        });\n      }\n    }\n  }\n}\n","/* eslint-disable no-case-declarations */\nimport {\n  type State,\n  reactive,\n  watchEffect,\n  appendUniqueArray,\n  deleteArrayItem,\n  includes,\n  flushArray,\n  isJustObject\n} from \"@zyzgroup/core-common\";\nimport { isInputCheckbox, isInputRadio, isSelect } from \"./hooks\";\n\n// Model-View-ViewModel 响应式系统\nexport class MVVM {\n  state: State;\n  el: HTMLElement;\n\n  constructor(state: State, el: HTMLElement) {\n    this.state = reactive(state, { deep: true });\n    this.el = el;\n    this.compile(this.el);\n  }\n\n  // 解析器\n  compile(el: HTMLElement) {\n    el.childNodes.forEach((node) => {\n      switch (node.nodeType) {\n        case 1: // Element Node 元素节点\n          const elementNode = node as HTMLElement;\n          [...elementNode.attributes].forEach((attr) => {\n            const attrName = attr.name;\n            const attrValue = attr.value;\n            if (attrName === \"v-model\") {\n              // 数据双向绑定\n              if (isInputRadio(elementNode)) {\n                // radio 使用 checked 属性 和 change 事件\n                const finalNode = elementNode as HTMLInputElement;\n                // 数据 驱动 视图 更新\n                watchEffect(() => {\n                  finalNode.checked =\n                    this.getStateValue(attrValue) == finalNode.value;\n                });\n                // 通过事件监听，视图 驱动 数据 更新\n                finalNode.addEventListener(\"change\", (e) => {\n                  this.setStateValue(\n                    attrValue,\n                    (e.target as typeof finalNode).value\n                  );\n                });\n              } else if (isInputCheckbox(elementNode)) {\n                // checkbox 使用 checked 属性 和 change 事件\n                const finalNode = elementNode as HTMLInputElement;\n                // 数据 驱动 视图 更新\n                watchEffect(() => {\n                  finalNode.checked = includes(\n                    this.getStateValue(attrValue),\n                    finalNode.value\n                  );\n                });\n                // 通过事件监听，视图 驱动 数据 更新\n                finalNode.addEventListener(\"change\", (e) => {\n                  const target = e.target as typeof finalNode;\n                  const value = target.value;\n                  if (target.checked) {\n                    appendUniqueArray(this.getStateValue(attrValue), value);\n                  } else {\n                    deleteArrayItem(this.getStateValue(attrValue), value);\n                  }\n                });\n              } else if (isSelect(elementNode)) {\n                // select 使用 value 属性 和 change 事件\n                const finalNode = elementNode as HTMLSelectElement;\n                // 数据 驱动 视图 更新\n                watchEffect(() => {\n                  finalNode.value = this.getStateValue(attrValue);\n                });\n                // 通过事件监听，视图 驱动 数据 更新\n                finalNode.addEventListener(\"change\", (e) => {\n                  this.setStateValue(\n                    attrValue,\n                    (e.target as typeof finalNode).value\n                  );\n                });\n              } else {\n                // input text number ...  和 textarea 使用 value 属性 和 input 事件\n                const finalNode = elementNode as\n                  | HTMLInputElement\n                  | HTMLTextAreaElement;\n                // 数据 驱动 视图 更新\n                watchEffect(() => {\n                  finalNode.value = this.getStateValue(attrValue);\n                });\n                // 通过事件监听，视图 驱动 数据 更新\n                const cb = (e: Event) => {\n                  this.setStateValue(\n                    attrValue,\n                    (e.target as typeof finalNode).value\n                  );\n                };\n                finalNode.addEventListener(\"input\", cb);\n                // finalNode.addEventListener(\"change\", cb);\n              }\n            } else if (attrName === \"v-text\") {\n              // 数据 驱动 视图 更新\n              watchEffect(() => {\n                elementNode.innerText = this.getStateValue(attrValue);\n              });\n            } else if (attrName === \"v-html\") {\n              // 数据 驱动 视图 更新\n              watchEffect(() => {\n                elementNode.innerHTML = this.getStateValue(attrValue);\n              });\n            }\n          });\n          // 递归子节点\n          if (elementNode.childNodes.length > 0) {\n            this.compile(elementNode);\n          }\n          break;\n        case 3: // Text Node 文本节点\n          const textContent = node.textContent || \"\";\n          const reg = /\\{\\{\\s*([^{}\\s]+)\\s*\\}\\}/g;\n          const matches = reg.exec(textContent);\n          if (matches && matches[1]) {\n            // 数据 驱动 视图 更新\n            watchEffect(() => {\n              node.textContent = textContent.replace(\n                reg,\n                this.getStateValue(matches[1])\n              );\n            });\n          }\n          break;\n      }\n    });\n  }\n\n  // UNDO : 暂未考虑 嵌套的 数组\n  getStateValue(attrName: string) {\n    let v: any = this.state;\n    attrName.split(\".\").forEach((name) => {\n      v = v[name];\n    });\n    return v;\n  }\n\n  // UNDO : 暂未考虑 嵌套的 数组\n  setStateValue(attrName: string, val: any) {\n    let v: any = this.state;\n    const names = attrName.split(\".\");\n    const c = names.length;\n    for (let i = 0; i < c - 1; i++) {\n      v = v[names[i]];\n    }\n    v[names[c - 1]] = val;\n  }\n\n  // setState(data: State) {\n  //   for (const k in data) {\n  //     const v = data[k];\n  //     if (Array.isArray(v)) {\n  //       flushArray(this.state[k], v);\n  //     } else if (isJustObject(v)) {\n  //       for (const vk in v) {\n  //         this.state[k][vk] = v[vk];\n  //       }\n  //     } else {\n  //       this.state[k] = v;\n  //     }\n  //   }\n  // }\n\n  /**\n   * @description 编译模板字符串\n   * @example\n   * const template = `\n   * <ul>\n   *   <% for(let i=0; i < data.supplies.length; i++) { %>\n   *     <li><%= data.supplies[i] %></li>\n   *   <% } %>\n   * </ul>\n   * `;\n   * const parse = eval(compileTemplate(template));\n   * console.log(parse({ supplies: [\"broom\", \"mop\", \"cleaner\"] }));\n   */\n  static compileTemplate(template: string) {\n    template = template\n      .replace(/<%=(.+?)%>/g, \"`); \\n  echo( $1 ); \\n  echo(`\")\n      .replace(/<%([\\s\\S]+?)%>/g, \"`); \\n $1 \\n  echo(`\");\n    template = \"echo(`\" + template + \"`);\";\n    const script = `(function parse(data){\n      let output = \"\";\n      function echo(html){\n        output += html;\n      }\n      ${template}\n      return output;\n    })`;\n    return script;\n  }\n}\n\nexport default MVVM;\n","import {\n  generateUUID,\n  getRetryDelay,\n  log,\n  mergeObjectDeep,\n  toObjectString,\n  warnLog\n} from \"@zyzgroup/core-common\";\n\ntype SocketMessage = string | Blob | ArrayBuffer;\n\ntype WebSocketClientRequest = {\n  requestid: number;\n  resolve?: (value: any) => void;\n};\n\ntype SocketCreator = (\n  url: string,\n  protocols?: string | string[],\n  options?: Record<string, any>\n) => WebSocket;\n\nexport function createWebSocket(\n  url: string,\n  protocols?: string | string[],\n  options?: Record<string, any>\n): WebSocket {\n  return new WebSocket(url);\n}\n\n// export function createSocketJS(\n//   url: string,\n//   protocols?: string | string[],\n//   options?: Record<string, any>\n// ): WebSocket {\n//   return new SockJS(url, null, options);\n// }\n\n// export function createWxWebSocket(\n//   url: string,\n//   protocols?: string | string[],\n//   options?: Record<string, any>\n// ): WebSocket {\n//   return wx.connectSocket(\n//     mergeObjectDeep(\n//       {\n//         url,\n//         ...options\n//       },\n//       {\n//         header: {\n//           // \"Cookie\": \"JSESSIONID=dummy\",\n//           // 'content-type': 'application/json'\n//         },\n//         timeout: 120000\n//         // success: console.log,\n//         // fail:console.log\n//       }\n//     )\n//   );\n// }\n\n// export function createAliWebSocket(\n//   url: string,\n//   protocols?: string | string[],\n//   options?: Record<string, any>\n// ): WebSocket {\n//   return my.connectSocket(\n//     mergeObjectDeep(\n//       {\n//         url,\n//         ...options\n//       },\n//       {\n//         header: {\n//           // \"Cookie\": \"JSESSIONID=dummy\",\n//           // 'content-type': 'application/json'\n//         },\n//         timeout: 120000,\n//         multiple: true\n//         // success: console.log,\n//         // fail:console.log\n//       }\n//     )\n//   );\n// }\n\nexport function getVertxRegisterBaseUrl(baseUrl: string) {\n  return `${baseUrl}eventbus/${generateUUID(3, \"number\")}/${generateUUID(\n    8\n  )}/websocket`;\n}\n\nexport class WebSocketClient {\n  static CONNECTING = WebSocket.CONNECTING; // 0\n  static OPEN = WebSocket.OPEN; // 1\n  static CLOSING = WebSocket.CLOSING; // 2\n  static CLOSED = WebSocket.CLOSED; // 3\n\n  url: string;\n  socketCreatorProtocols?: string | string[];\n  socketCreatorOptions: Record<string, any>;\n  socketCreator: SocketCreator;\n\n  socket?: WebSocket;\n  state:\n    | typeof WebSocketClient.CONNECTING\n    | typeof WebSocketClient.OPEN\n    | typeof WebSocketClient.CLOSING\n    | typeof WebSocketClient.CLOSED = WebSocketClient.CONNECTING;\n\n  messageQueue: Record<string, any>[] = [];\n\n  pingInterval: number;\n  pingTimerID?: ReturnType<typeof setInterval>;\n\n  reconnect: boolean;\n  reconnectAttempts = 0;\n  maxReconnectAttempts: number;\n  reconnectTimerID?: ReturnType<typeof setTimeout>;\n\n  onopen?: () => void;\n  onclose?: (e: CloseEvent) => void;\n  onerror?: (e: any) => void;\n\n  requestid = 0;\n  waitings: Record<number, WebSocketClientRequest> = {};\n  listeners: Record<string, ((err: any, message?: any) => void)[]> = {};\n\n  // wss://echo.websocket.org/\n  // wss://xinge.ruolin-link.com/\n  // wss://test.xinge.me/\n  constructor(\n    url = \"\",\n    options?: {\n      socketCreatorProtocols?: string | string[];\n      socketCreatorOptions?: Record<string, any>;\n      socketCreator?: SocketCreator;\n      pingInterval?: number;\n      onopen?: () => void;\n      onclose?: (e: CloseEvent) => void;\n      onerror?: (e: Event) => void;\n      reconnect?: boolean;\n      maxReconnectAttempts?: number;\n    }\n  ) {\n    this.url = url;\n    this.socketCreatorProtocols = options?.socketCreatorProtocols;\n    this.socketCreatorOptions = options?.socketCreatorOptions || {};\n    this.socketCreator = options?.socketCreator || createWebSocket;\n    this.pingInterval = options?.pingInterval || 5000;\n    this.onopen = options?.onopen;\n    this.onclose = options?.onclose;\n    this.onerror = options?.onerror;\n    this.reconnect =\n      typeof options?.reconnect == \"boolean\" ? options.reconnect : true;\n    this.maxReconnectAttempts =\n      typeof options?.maxReconnectAttempts == \"number\"\n        ? options.maxReconnectAttempts\n        : Infinity;\n    this._connect();\n  }\n\n  public open() {\n    this.reconnectAttempts = 0;\n    this._connect();\n  }\n\n  public close() {\n    this.state = WebSocketClient.CLOSING;\n    this.socket?.close();\n  }\n\n  private _connect() {\n    if (\n      this.socket?.readyState === WebSocketClient.CONNECTING ||\n      this.socket?.readyState === WebSocketClient.OPEN\n    ) {\n      return;\n    }\n    this.state = WebSocketClient.CONNECTING;\n    this.socket = this.socketCreator(\n      this.url,\n      this.socketCreatorProtocols,\n      this.socketCreatorOptions\n    );\n\n    this.socket.onopen = () => {\n      log(`(${this.url}) onopen`);\n      this.state = WebSocketClient.OPEN;\n      // clear reconnect\n      if (this.reconnectTimerID) {\n        clearTimeout(this.reconnectTimerID);\n        this.reconnectTimerID = undefined;\n      }\n      // 继续发送未发消息\n      const copies = this.messageQueue.slice();\n      this.messageQueue = [];\n      copies.forEach(this._send.bind(this));\n      // Send the first ping then send a ping every pingInterval milliseconds\n      this.ping();\n      this.pingTimerID = setInterval(this.ping.bind(this), this.pingInterval);\n      this.onopen?.();\n    };\n\n    this.socket.onclose = (e: CloseEvent) => {\n      const { code, reason, wasClean } = e;\n      log(\n        `(${this.url}) onclose: code(${code}) reason(${reason}) wasClean(${wasClean})`\n      );\n      this.state = WebSocketClient.CLOSED;\n      this.socket = undefined;\n      // clear ping\n      if (this.pingTimerID) {\n        clearInterval(this.pingTimerID);\n        this.pingTimerID = undefined;\n      }\n      this.onclose?.(e);\n      // reconnect\n      if (\n        this.reconnect &&\n        this.reconnectAttempts < this.maxReconnectAttempts\n      ) {\n        this.reconnectTimerID = setTimeout(\n          this._connect.bind(this),\n          getRetryDelay(this.reconnectAttempts++)\n        );\n      }\n    };\n\n    this.socket.onerror = (e: Event) => {\n      log(`(${this.url}) onerror: ${e}`);\n      this.onerror?.(e);\n    };\n\n    // 指定收到数据类型\n    // this.socket.binaryType = \"blob\";\n    // this.socket.binaryType = \"arraybuffer\";\n\n    this.socket.onmessage = (e: MessageEvent) => {\n      log(`(${this.url}) onmessage: { type: ${e.type}, data: ${e.data} }`);\n      if (typeof e.data === \"string\") {\n        // 可能需要根据协议变更传输格式\n        let jsons: string[];\n        const originData = e.data.substring(1);\n        try {\n          jsons = JSON.parse(originData);\n        } catch (ex: any) {\n          jsons = [\n            JSON.stringify({\n              type: \"err\",\n              failureCode: \"fe-json-parse-error\",\n              failureType: ex.toString(),\n              message: originData\n            })\n          ];\n        }\n        jsons.forEach((j) => {\n          const json = JSON.parse(j);\n          if (\n            json.body &&\n            Object.prototype.hasOwnProperty.call(json.body, \"requestid\")\n          ) {\n            // 回应 send\n            const request = this.waitings[json.body.requestid];\n            if (request) {\n              request.resolve?.(json.body);\n            } else {\n              warnLog(\n                `(${this.url}) onmessage: found no associated request, already timed out`\n              );\n            }\n          } else if (this.listeners[json.address]) {\n            // 回应注册监听回调\n            const listeners = this.listeners[json.address];\n            for (let i = 0; i < listeners.length; i++) {\n              if (json.type === \"err\") {\n                listeners[i]({\n                  failureCode: json.failureCode,\n                  failureType: json.failureType,\n                  message: json.message\n                });\n              } else {\n                listeners[i](null, json.body);\n              }\n            }\n          } else {\n            // unhandle string\n            this.onunhandled(json);\n          }\n        });\n      } else if (e.data instanceof ArrayBuffer) {\n        warnLog(`(${this.url}) onmessage: unhandle ArrayBuffer`);\n      } else if (e.data instanceof Blob) {\n        warnLog(`(${this.url}) onmessage: unhandle Blob`);\n      }\n    };\n  }\n\n  private onunhandled(json: Record<string, any>) {\n    try {\n      if (json.type === \"err\") {\n        this.onerror?.(json);\n      } else if (json.event) {\n        console.warn(\n          \"No handler found for event: %o. Message: %O\",\n          json.event,\n          json\n        );\n      } else {\n        console.warn(\"No handler found for message: \", json);\n      }\n    } catch (e) {\n      // dev tools are disabled so we cannot use console on IE\n    }\n  }\n\n  // 可能需要根据协议变更传输格式\n  private _send(data: Record<string, any>) {\n    if (this.socket?.readyState === WebSocketClient.OPEN) {\n      // [\"{\\\"type\\\":\\\"ping\\\"}\"]\n      // [\"{\\\"type\\\":\\\"register\\\",\\\"address\\\":\\\"CHARGECONN_1\\\",\\\"headers\\\":{}}\"]\n      this.socket.send(JSON.stringify([JSON.stringify(data)]));\n    } else {\n      // 未发消息缓存\n      this.messageQueue.push(data);\n      this._connect();\n    }\n  }\n\n  public ping() {\n    this._send({ type: \"ping\" });\n  }\n\n  // 注册监听\n  public register(\n    address: string,\n    listener: (err: any, message?: any) => void,\n    headers: Record<string, string> = {}\n  ) {\n    if (!this.listeners[address]) {\n      this.listeners[address] = [];\n      // First handler for this address so we should register the connection\n      this._send({\n        type: \"register\",\n        address: address,\n        headers: mergeObjectDeep(\n          headers,\n          this.socketCreatorOptions.headers,\n          false\n        )\n      });\n    }\n    this.listeners[address].push(listener);\n  }\n\n  // 取消注册监听\n  public unregister(\n    address: string,\n    listener: (err: any, message?: any) => void,\n    headers: Record<string, string> = {}\n  ) {\n    const listeners = this.listeners[address];\n    if (listeners) {\n      const idx = listeners.indexOf(listener);\n      if (idx != -1) {\n        listeners.splice(idx, 1);\n        if (listeners.length === 0) {\n          // No more local listeners so we should unregister the connection\n          this._send({\n            type: \"unregister\",\n            address: address,\n            headers: mergeObjectDeep(\n              headers,\n              this.socketCreatorOptions.headers,\n              false\n            )\n          });\n          delete this.listeners[address];\n        }\n      }\n    }\n  }\n\n  // 广播\n  public publish(\n    address: string,\n    body: Record<string, any>,\n    headers: Record<string, string> = {}\n  ) {\n    this._send({\n      type: \"publish\",\n      address: address,\n      headers: mergeObjectDeep(\n        headers,\n        this.socketCreatorOptions.headers,\n        false\n      ),\n      body\n    });\n  }\n\n  // 普通发送，等待回应\n  public async send(\n    address: string,\n    body: Record<string, any>,\n    headers: Record<string, string> = {},\n    timeout = 30000\n  ): Promise<string> {\n    this.requestid++;\n    const request: WebSocketClientRequest = (this.waitings[this.requestid] = {\n      requestid: this.requestid\n    });\n    const receivedMessage = await new Promise<string>((resolve, reject) => {\n      request.resolve = resolve;\n      this._send({\n        type: \"send\",\n        address: address,\n        headers: mergeObjectDeep(\n          headers,\n          this.socketCreatorOptions.headers,\n          false\n        ),\n        body: {\n          requestid: request.requestid,\n          ...body\n        }\n      });\n      setTimeout(() => {\n        reject(\n          `(${this.url}) send(${request.requestid}: ${toObjectString(\n            body\n          )}) Timeout!`\n        );\n      }, timeout);\n    });\n    delete this.waitings[request.requestid];\n    return receivedMessage;\n  }\n}\n","// Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Mobile Safari/537.36\n// Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36\nexport function getOperatingSystem() {\n  const userAgent = navigator.userAgent.toLowerCase();\n  let operatingSystem = \"Unknown\";\n  if (/iphone|ipad|ipod/i.test(userAgent)) {\n    operatingSystem = \"iOS\";\n  } else if (/android/i.test(userAgent)) {\n    operatingSystem = \"Android\";\n  } else if (/BlackBerry/i.test(userAgent)) {\n    operatingSystem = \"BlackBerry\";\n  } else if (/mac/i.test(userAgent)) {\n    operatingSystem = \"macOS\";\n  } else if (/win/i.test(userAgent)) {\n    operatingSystem = \"Windows\";\n  } else if (/linux/i.test(userAgent)) {\n    operatingSystem = \"Linux\";\n  } else if (/bsd/i.test(userAgent)) {\n    operatingSystem = \"BSD\";\n  }\n  return operatingSystem.toLowerCase();\n}\n\nexport function getOperatingSystemVersion(ua = navigator.userAgent) {\n  let osVersion = \"Unknown\";\n  if (/iPhone|iPad|iPod/i.test(ua)) {\n    const match = ua.match(/OS (\\d+_\\d+)/i);\n    if (match) {\n      osVersion = match[1].replace(\"_\", \".\");\n    }\n  } else if (/Android/i.test(ua)) {\n    const match = ua.match(/Android (\\d+\\.\\d+)/i);\n    if (match) {\n      osVersion = match[1];\n    }\n  } else if (/Mac OS X/i.test(ua)) {\n    const match = ua.match(/Mac OS X (\\d+_\\d+)/i);\n    if (match) {\n      osVersion = match[1].replace(\"_\", \".\");\n    }\n  } else if (/Windows NT/i.test(ua)) {\n    const match = ua.match(/Windows NT (\\d+\\.\\d+)/i);\n    if (match) {\n      osVersion = match[1];\n    }\n  }\n  return osVersion.toLowerCase();\n}\n\nexport function getBrowserClient() {\n  const userAgent = navigator.userAgent.toLowerCase();\n  let client = \"Unknown\";\n  if (/opr/i.test(userAgent) || /opera/i.test(userAgent)) {\n    client = \"Opera\";\n  } else if (/chrome/i.test(userAgent)) {\n    client = \"Chrome\";\n  } else if (/firefox/i.test(userAgent)) {\n    client = \"Firefox\";\n  } else if (\n    /safari/i.test(userAgent)\n    //|| /WebKit/i.test(userAgent)\n  ) {\n    client = \"Safari\";\n  } else if (/edge/i.test(userAgent)) {\n    client = \"Edge\";\n  } else if (/msie|trident/i.test(userAgent)) {\n    // client = \"Internet Explorer\";\n    client = \"IE\";\n  } else if (/MicroMessenger/i.test(userAgent)) {\n    client = \"Wechat\";\n  } else if (/alipay/i.test(userAgent)) {\n    client = \"Ali\";\n  }\n  return client.toLowerCase();\n}\n\nexport function getBrowserClientVersion() {\n  const userAgent = navigator.userAgent;\n  let browserVersion = \"Unknown\";\n  if (/Chrome/.test(userAgent)) {\n    const match = userAgent.match(/Chrome\\/(\\d+\\.\\d+)/);\n    if (match) {\n      browserVersion = match[1];\n    }\n  } else if (/Firefox/.test(userAgent)) {\n    const match = userAgent.match(/Firefox\\/(\\d+\\.\\d+)/);\n    if (match) {\n      browserVersion = match[1];\n    }\n  } else if (/Safari/.test(userAgent)) {\n    const match = userAgent.match(/Version\\/(\\d+\\.\\d+)/);\n    if (match) {\n      browserVersion = match[1];\n    }\n  } else if (/Edge/.test(userAgent)) {\n    const match = userAgent.match(/Edge\\/(\\d+\\.\\d+)/);\n    if (match) {\n      browserVersion = match[1];\n    }\n  } else if (/MSIE|Trident/.test(userAgent)) {\n    const match = userAgent.match(/(?:MSIE|rv:)(\\d+\\.\\d+)/);\n    if (match) {\n      browserVersion = match[1];\n    }\n  }\n  return browserVersion;\n}\n\nexport function getBrowserLanguage() {\n  return (navigator.browserLanguage || navigator.language).toLowerCase();\n}\n\nexport function getTimeZone() {\n  return Intl.DateTimeFormat().resolvedOptions().timeZone.toLowerCase();\n}\n\nexport function isSafari() {\n  return getBrowserClient() == \"safari\";\n}\n\nexport function isIOS() {\n  return getOperatingSystem() === \"ios\";\n}\n\nexport function isMacOS() {\n  return getOperatingSystem() === \"macos\";\n}\n\nexport function isAppleDevice() {\n  return isIOS() | isMacOS();\n}\n\nexport function isAndroid() {\n  return getOperatingSystem() === \"android\";\n}\n\n/*\n\tThis should find all Android browsers lower than build 535.19 (both stock browser and webview)\n\t- galaxy S2 is ok\n    - 2.3.6 : `AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1`\n    - 4.0.4 : `AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30`\n   - galaxy S3 is badAndroid (stock brower, webview)\n     `AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30`\n   - galaxy S4 is badAndroid (stock brower, webview)\n     `AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30`\n   - galaxy S5 is OK\n     `AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Mobile Safari/537.36 (Chrome/)`\n   - galaxy S6 is OK\n     `AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Mobile Safari/537.36 (Chrome/)`\n  */\nexport function isBadAndroid() {\n  const appVersion = window.navigator.appVersion;\n  // Android browser is not a chrome browser.\n  if (/Android/.test(appVersion) && !/Chrome\\/\\d/.test(appVersion)) {\n    const safariVersion = appVersion.match(/Safari\\/(\\d+.\\d)/);\n    if (\n      safariVersion &&\n      typeof safariVersion === \"object\" &&\n      safariVersion.length >= 2\n    ) {\n      return parseFloat(safariVersion[1]) < 535.19;\n    } else {\n      return true;\n    }\n  } else {\n    return false;\n  }\n}\n\nexport function isMobile() {\n  return isIOS() || isAndroid();\n}\n\nexport function getInternetExplorerVersion() {\n  const ua = window.navigator.userAgent;\n  const msie = ua.indexOf(\"MSIE \");\n  if (msie > 0) {\n    // IE 10 or older => return version number\n    return parseInt(ua.substring(msie + 5, ua.indexOf(\".\", msie)), 10);\n  }\n  const trident = ua.indexOf(\"Trident/\");\n  if (trident > 0) {\n    // IE 11 => return version number\n    const rv = ua.indexOf(\"rv:\");\n    return parseInt(ua.substring(rv + 3, ua.indexOf(\".\", rv)), 10);\n  }\n  const edge = ua.indexOf(\"Edge/\");\n  if (edge > 0) {\n    // Edge (IE 12+) => return version number\n    return parseInt(ua.substring(edge + 5, ua.indexOf(\".\", edge)), 10);\n  }\n  // other browser\n  return -1;\n}\n\nexport const isIE = getInternetExplorerVersion() !== -1;\n// export function isIE() {\n//   return getBrowserClient() === \"ie\";\n// }\n\nexport const isIE9 = document.documentMode\n  ? document.documentMode === 9\n  : false;\nexport const isIE10 = document.documentMode\n  ? document.documentMode === 10\n  : false;\nexport const isIE11 = document.documentMode\n  ? document.documentMode === 11\n  : false;\n\nexport function isWxBrowser() {\n  return getBrowserClient() === \"wechat\";\n}\n\nexport function isAliBrowser() {\n  return getBrowserClient() === \"ali\";\n}\n\n// 是否为微信小程序环境\nexport function isWxMiniProgram() {\n  return (\n    (isWxBrowser() && navigator.userAgent.match(/miniprogram/i)) ||\n    window.__wxjs_environment === \"miniprogram\"\n  );\n}\n\n// 是否为支付宝小程序环境\nexport function isAliMiniProgram() {\n  return isAliBrowser() && navigator.userAgent.match(/miniprogram/i);\n}\n","export function setRem(designWidth = 750) {\n  const docEl = document.documentElement;\n\n  const dpr = window.top === window.self ? window.devicePixelRatio : 1;\n  docEl.dataset.dpr = dpr;\n\n  // 设置viewport，进行缩放，达到高清效果\n  // const metaEl = document.querySelector('meta[name=\"viewport\"]');\n  // const scale = 1 / dpr;\n  // metaEl.setAttribute(\n  //   \"content\",\n  //   \"width=device-width\" +\n  //     \",initial-scale=\" +\n  //     scale +\n  //     \",maximum-scale=\" +\n  //     scale +\n  //     \", minimum-scale=\" +\n  //     scale +\n  //     \",user-scalable=no, viewport-fit=cover, shrink-to-fit=no\"\n  // );\n\n  // max: 1rem = 100px\n  let rem = 100;\n  const recalc = function () {\n    // 修正页面高度100%的渲染错误\n    docEl.style.height = window.innerHeight + \"px\";\n\n    // const clientWidth = Math.min(docEl.clientWidth, designWidth);\n    const clientWidth = docEl.clientWidth;\n    docEl.dataset.width = clientWidth;\n    docEl.dataset.layout = clientWidth > designWidth ? \"pc\" : \"mobile\";\n\n    docEl.dataset.rem = rem = Math.min(\n      100,\n      Math.round(100 * (clientWidth / designWidth))\n    );\n    // 配合设置viewport，进行缩放，达到高清效果\n    // docEl.dataset.rem = rem =\n    //   Math.round(100 * (clientWidth / designWidth)) * dpr;\n    docEl.style.fontSize = rem + \"px\";\n  };\n\n  recalc();\n\n  // 供js调用的，某一dpr下rem和px之间的转换函数\n  window.rem2px = function (v) {\n    return parseFloat(v) * rem;\n  };\n  window.px2rem = function (v) {\n    return parseFloat(v) / rem;\n  };\n\n  if (!window.addEventListener) {\n    return;\n  }\n  window.addEventListener(\n    \"orientationchange\" in window ? \"orientationchange\" : \"resize\",\n    recalc,\n    false\n  );\n}\n","/* eslint-disable no-case-declarations */\nimport { DOMParse, parseCSS } from \"../dom\";\n\n// 合并 DOMParseListeners\ninterface DOMParseListeners {\n  result(items: Record<string, string>[]): void;\n}\n\nexport class SVGParse extends DOMParse {\n  currentItem: Record<string, string> = {};\n  items: Record<string, string>[] = [];\n\n  groups: Record<string, string>[] = [];\n\n  globalStyles: Record<string, string[]> = {};\n\n  grad: Record<string, any> = {};\n  idtops: Record<string, string> = {};\n  text = \"\";\n\n  constructor(sourceString: string) {\n    super(sourceString);\n\n    this.on(\"tag\", (tagname: string, attrs: Record<string, string>) => {\n      this.text = \"\";\n      this.currentItem = { type: tagname };\n      switch (tagname) {\n        case \"g\":\n          this.groups.push(this.currentItem);\n          break;\n      }\n      this.processAttrs(tagname, attrs);\n    });\n\n    this.on(\"text\", (text: string) => {\n      if (this.currentItem.type == \"style\") {\n        try {\n          const parsedCSS = parseCSS(text);\n          for (const rule of parsedCSS.stylesheet.rules) {\n            for (const declaration of rule.declarations) {\n              for (const selector of rule.selectors) {\n                this.globalStyles[selector] = this.globalStyles[selector] || [];\n                this.globalStyles[selector].push(\n                  `${declaration.property}:${declaration.value}`\n                );\n              }\n            }\n          }\n          // console.log(this.globalStyles);\n        } catch (e) {\n          console.error(\"CAN'T parse css text: \" + text);\n        }\n        return;\n      }\n      this.text += text;\n    });\n\n    this.on(\"/tag\", (tagname: string, attrs: Record<string, string>) => {\n      /// *.attrend\n      let i = this.groups.length;\n      while (i--) {\n        if (this.groups[i] != this.currentItem) {\n          let groupTransform = \"\";\n          let groupStyle = \"\";\n          for (const key in this.groups[i]) {\n            if (key == \"transform\") {\n              groupTransform = this.groups[i].transform as string;\n            } else if (\n              key == \"class\" &&\n              this.globalStyles[\".\" + this.groups[i][key]]\n            ) {\n              groupStyle =\n                this.globalStyles[\".\" + this.groups[i][key]].join(\";\") +\n                \";\" +\n                groupStyle;\n            } else if (\n              key == \"id\" &&\n              this.globalStyles[\"#\" + this.groups[i][key]]\n            ) {\n              groupStyle =\n                this.globalStyles[\"#\" + this.groups[i][key]].join(\";\") +\n                \";\" +\n                groupStyle;\n            } else if (typeof this.currentItem[key] === \"undefined\") {\n              // 除 transform 和 style , 使用group属性\n              this.currentItem[key] = this.groups[i][key];\n            }\n          }\n          if (typeof this.currentItem.transform === \"undefined\") {\n            this.currentItem.transform = groupTransform;\n          } else {\n            this.currentItem.transform += \" \" + groupTransform;\n          }\n          /// add group style\n          if (typeof this.currentItem.style === \"undefined\") {\n            this.currentItem.style = groupStyle;\n          } else {\n            this.currentItem.style = groupStyle + this.currentItem.style;\n          }\n          /// add self global style\n          if (\n            this.currentItem.class &&\n            this.globalStyles[\".\" + this.currentItem.class]\n          ) {\n            this.currentItem.style =\n              this.globalStyles[\".\" + this.currentItem.class].join(\";\") +\n              \";\" +\n              this.currentItem.style;\n          } else if (\n            this.currentItem.id &&\n            this.globalStyles[\"#\" + this.currentItem.id]\n          ) {\n            this.currentItem.style =\n              this.globalStyles[\"#\" + this.currentItem.id].join(\";\") +\n              \";\" +\n              this.currentItem.style;\n          }\n          applyStyle(\n            this.currentItem.style,\n            this.currentItem,\n            SVGAttributeRange\n          );\n        }\n      }\n\n      this.processAttrs(tagname, attrs);\n\n      switch (tagname) {\n        case \"g\":\n          this.groups.pop();\n          break;\n        case \"cirlce\":\n          this.addToItems();\n          break;\n        case \"ellipse\":\n          this.addToItems();\n          break;\n        case \"polygon\":\n          this.addToItems();\n          break;\n        case \"path\":\n          this.addToItems();\n          break;\n        case \"line\":\n          this.addToItems();\n          break;\n        case \"rect\":\n          this.addToItems();\n          break;\n        case \"image\":\n          this.addToItems();\n          break;\n        case \"text\":\n          this.currentItem.text = this.text;\n          this.currentItem[\"text-anchor\"] =\n            this.currentItem[\"text-anchor\"] || \"start\";\n          this.addToItems();\n          break;\n      }\n    });\n\n    this.on(\"finish\", () => {\n      this.emit(\"result\", this.items);\n    });\n  }\n\n  parse() {\n    super.parse();\n    return this.items;\n  }\n\n  processAttrs(tagname: string, attrs: Record<string, string>) {\n    let s: any[] = [];\n    let stop: any;\n\n    switch (tagname) {\n      case \"svg\":\n        let width = \"\";\n        let height = \"\";\n        if (attrs.width && attrs.height) {\n          width = attrs.width;\n          height = attrs.height;\n        } else if (attrs.viewBox) {\n          const viewBoxs = attrs.viewBox.split(/\\s+/gi);\n          if (viewBoxs.length == 4) {\n            width = String(parseFloat(viewBoxs[2]) - parseFloat(viewBoxs[0]));\n            height = String(parseFloat(viewBoxs[3]) - parseFloat(viewBoxs[1]));\n          }\n        }\n        if (width && height) {\n          this.items.push({\n            type: \"viewbox\",\n            width,\n            height\n          });\n        }\n        break;\n      case \"line\":\n        if (\n          typeof attrs.x1 == \"number\" &&\n          typeof attrs.y1 == \"number\" &&\n          typeof attrs.x2 == \"number\" &&\n          typeof attrs.y2 == \"number\"\n        ) {\n          this.currentItem.path =\n            \"M\" + [attrs.x1, attrs.y1, attrs.x2, attrs.y2];\n        }\n        break;\n      case \"stop\":\n        stop = {};\n        if (attrs.style) {\n          applyStyle(attrs.style, stop);\n        }\n        stop.offset = stop.offset || attrs.offset;\n        stop.color = stop[\"stop-color\"] || attrs[\"stop-color\"];\n        stop.opacity = stop[\"stop-opacity\"] || attrs[\"stop-opacity\"];\n        if (~(stop.offset + \"\").indexOf(\"%\")) {\n          stop.offset = parseFloat(stop.offset);\n        } else {\n          stop.offset = parseFloat(stop.offset) * 100;\n        }\n        stop.offset = +stop.offset.toFixed(2);\n        this.grad.stops.push(stop);\n        break;\n      case \"linearGradient\":\n        this.grad.angle = (\n          360 +\n          angle(\n            parseFloat(attrs.x1),\n            parseFloat(attrs.y1),\n            parseFloat(attrs.x2),\n            parseFloat(attrs.y2),\n            parseFloat(attrs.x1) + 100,\n            parseFloat(attrs.y1)\n          )\n        ).toFixed(2);\n        s = [this.grad.angle];\n        for (let i = 0, ii = this.grad.stops.length; i < ii; i++) {\n          stop = this.grad.stops[i];\n          if (i && i != ii - 1) {\n            s.push(stop.color + \":\" + stop.offset);\n          } else {\n            s.push(stop.color);\n          }\n        }\n        this.idtops[this.grad.id] = s.join(\"-\");\n        this.items.forEach((item) => {\n          if (item.fillid == this.grad.id) {\n            item.fill = this.idtops[this.grad.id];\n          }\n        });\n        break;\n      case \"radialGradient\":\n        s = [];\n        for (let i = 0, ii = this.grad.stops.length; i < ii; i++) {\n          stop = this.grad.stops[i];\n          if (i && i != ii - 1) {\n            s.push(stop.color + \":\" + stop.offset);\n          } else {\n            s.push(stop.color);\n          }\n        }\n        this.idtops[this.grad.id] = s.join(\"-\");\n        this.items.forEach((item) => {\n          if (item.fillid == this.grad.id) {\n            item.fill = this.idtops[this.grad.id];\n          }\n        });\n        break;\n    }\n\n    for (const key in attrs) {\n      const value = attrs[key];\n      /// 复制attribute\n      if (SVGAttributeRange.includes(key)) {\n        this.currentItem[key] = value;\n      }\n      if (key === \"id\") {\n        if (this.currentItem.type === \"linearGradient\") {\n          this.grad = {\n            id: key,\n            stops: []\n          };\n        }\n        if (this.currentItem.type === \"radialGradient\") {\n          this.grad = {\n            id: key,\n            stops: []\n          };\n        }\n      }\n      if (key === \"style\") {\n        /// 设置 svg element 样式\n        applyStyle(value, this.currentItem, SVGAttributeRange);\n      }\n      if (key === \"transform\") {\n        this.currentItem.transform =\n          value + (this.currentItem.transform || \" \");\n      }\n      if (key === \"fill\") {\n        const result = value.match(/url\\(#([^)]+)\\)/);\n        if (result) {\n          const id = result[1];\n          this.currentItem.fillid = id;\n          if (this.idtops[id]) {\n            this.currentItem.fill = this.idtops[id];\n          }\n        }\n      }\n      if (key === \"points\") {\n        if (this.currentItem.type == \"polygon\") {\n          this.currentItem.path = \"M\" + value + \"z\";\n        }\n      }\n      if (key === \"d\") {\n        if (this.currentItem.type == \"path\") {\n          this.currentItem.path = value;\n        }\n      }\n      if (key === \"xlink:href\") {\n        if (this.currentItem.type == \"image\") {\n          this.currentItem.src = value;\n        }\n      }\n    }\n  }\n\n  addToItems() {\n    this.items.push(this.currentItem);\n  }\n}\n\nexport default SVGParse;\n\nfunction angle(\n  x1: number,\n  y1: number,\n  x2: number,\n  y2: number,\n  x3?: number,\n  y3?: number\n): number {\n  if (typeof x3 == \"undefined\" || typeof y3 == \"undefined\") {\n    const x = x1 - x2;\n    const y = y1 - y2;\n    if (!x && !y) {\n      return 0;\n    }\n    return (180 + (Math.atan2(-y, -x) * 180) / Math.PI + 360) % 360;\n  } else {\n    return angle(x1, y1, x3, y3) - angle(x2, y2, x3, y3);\n  }\n}\n\nfunction applyStyle(\n  css: string,\n  el: { [index: string]: any },\n  SVGAttributeRange?: string[]\n) {\n  const rules = (css + \"\").split(\";\");\n  const trim = /^\\s+|\\s+$/g;\n  for (let i = 0, ii = rules.length; i < ii; i++) {\n    const pair = rules[i].split(\":\");\n    const key = pair[0].replace(trim, \"\").replace(/[A-Z]/g, function (letter) {\n      return \"-\" + letter.toLowerCase();\n    });\n    if (!SVGAttributeRange || SVGAttributeRange.includes(key)) {\n      el[key] = pair[1].replace(trim, \"\");\n    }\n  }\n}\n\nconst SVGAttributeRange: string[] = [\n  \"id\",\n  \"class\",\n  \"viewBox\",\n  \"width\",\n  \"height\",\n  \"x\",\n  \"y\",\n  \"cx\",\n  \"cy\",\n  \"r\",\n  \"rx\",\n  \"ry\",\n\n  \"cursor\",\n  \"opacity\",\n  \"src\",\n\n  \"fill\",\n  \"fill-opacity\",\n\n  \"stroke\",\n  \"stroke-dasharray\",\n  \"stroke-linecap\",\n  \"stroke-linejoin\",\n  \"stroke-miterlimit\",\n  \"stroke-opacity\",\n  \"stroke-width\",\n\n  \"text-anchor\",\n\n  \"font\",\n  \"font-family\",\n  \"font-size\",\n  \"font-style\",\n  \"font-weight\",\n  \"letter-spacing\"\n];\n","import \"./adapter\";\nimport { DOMVideo } from \"../dom/DOMVideo\";\n\nexport class WebRTCClient {\n  localVideoUtil: DOMVideo;\n  remoteVideoUtil: DOMVideo;\n  localPeerConnection: RTCPeerConnection | null = null;\n  remotePeerConnection: RTCPeerConnection | null = null;\n\n  constructor(localVideoEl: HTMLVideoElement, remoteVideoEl: HTMLVideoElement) {\n    this.localVideoUtil = new DOMVideo(localVideoEl);\n    this.remoteVideoUtil = new DOMVideo(remoteVideoEl);\n  }\n\n  start() {\n    this.getLocalMediaStream().then((mediaStream) => {\n      this.call(mediaStream);\n    });\n  }\n\n  end() {\n    this.localPeerConnection?.close();\n    this.remotePeerConnection?.close();\n    this.localPeerConnection = null;\n    this.remotePeerConnection = null;\n    this.trace(\"Ending call.\");\n  }\n\n  getLocalMediaStream() {\n    return new Promise<MediaStream>((resolve, reject) => {\n      navigator.mediaDevices\n        .getUserMedia({\n          audio: true,\n          video: true\n        })\n        .then((mediaStream) => {\n          this.localVideoUtil.setSrcObject(mediaStream);\n          resolve(mediaStream);\n        })\n        .catch((error) => {\n          this.trace(`navigator.getUserMedia error: ${error}.`);\n          reject(error);\n        });\n    });\n  }\n\n  gotRemoteMediaStream(event: RTCTrackEvent) {\n    const mediaStream = event.streams[0];\n    this.remoteVideoUtil.setSrcObject(mediaStream);\n    this.trace(\"Remote peer connection received remote stream.\");\n  }\n\n  call(localStream: MediaStream) {\n    const videoTracks = localStream.getVideoTracks();\n    const audioTracks = localStream.getAudioTracks();\n    if (videoTracks.length > 0) {\n      this.trace(`Using video device: ${videoTracks[0].label}.`);\n    }\n    if (audioTracks.length > 0) {\n      this.trace(`Using audio device: ${audioTracks[0].label}.`);\n    }\n\n    // Allows for RTC server configuration.\n    const servers = undefined;\n\n    // Create peer connections and add behavior.\n    const localPeerConnection = new RTCPeerConnection(servers);\n    this.localPeerConnection = localPeerConnection;\n    this.trace(\"Created local peer connection object localPeerConnection.\");\n    localPeerConnection.addEventListener(\"icecandidate\", this.handleConnection);\n    localPeerConnection.addEventListener(\n      \"iceconnectionstatechange\",\n      this.handleConnectionChange\n    );\n\n    const remotePeerConnection = new RTCPeerConnection(servers);\n    this.remotePeerConnection = remotePeerConnection;\n    this.trace(\"Created remote peer connection object remotePeerConnection.\");\n    remotePeerConnection.addEventListener(\n      \"icecandidate\",\n      this.handleConnection\n    );\n    remotePeerConnection.addEventListener(\n      \"iceconnectionstatechange\",\n      this.handleConnectionChange\n    );\n    remotePeerConnection.addEventListener(\"track\", this.gotRemoteMediaStream);\n\n    this.trace(\"Add local localStream to localPeerConnection.\");\n    localPeerConnection.addTrack(videoTracks[0], localStream);\n    localPeerConnection.addTrack(audioTracks[0], localStream);\n\n    this.trace(\"localPeerConnection createOffer start.\");\n    localPeerConnection\n      .createOffer({\n        offerToReceiveVideo: true\n      })\n      .then((description) => this.createdOffer(description))\n      .catch((err) => this.setSessionDescriptionError(err));\n  }\n\n  handleConnection(event: RTCPeerConnectionIceEvent) {\n    const peerConnection = event.target as RTCPeerConnection | null;\n    const iceCandidate = event.candidate;\n\n    if (peerConnection && iceCandidate) {\n      const newIceCandidate = new RTCIceCandidate(iceCandidate);\n      const otherPeer = this.getOtherPeer(peerConnection);\n\n      if (otherPeer) {\n        otherPeer\n          .addIceCandidate(newIceCandidate)\n          .then(() => {\n            this.handleConnectionSuccess(peerConnection);\n          })\n          .catch((error: any) => {\n            this.handleConnectionFailure(peerConnection, error);\n          });\n        this.trace(\n          `${this.getPeerName(peerConnection)} ICE candidate:\\n` +\n            `${event.candidate.candidate}.`\n        );\n      }\n    }\n  }\n\n  handleConnectionSuccess(peerConnection: RTCPeerConnection) {\n    this.trace(`${this.getPeerName(peerConnection)} addIceCandidate success.`);\n  }\n\n  handleConnectionFailure(peerConnection: RTCPeerConnection, error: any) {\n    this.trace(\n      `${this.getPeerName(peerConnection)} failed to add ICE Candidate:\\n` +\n        `${error.toString()}.`\n    );\n  }\n\n  handleConnectionChange(event: Event) {\n    const peerConnection = event.target as RTCPeerConnection | null;\n    console.log(\"ICE state change event: \", event);\n    if (peerConnection) {\n      this.trace(\n        `${this.getPeerName(peerConnection)} ICE state: ` +\n          `${peerConnection.iceConnectionState}.`\n      );\n    }\n  }\n\n  createdOffer(description: RTCSessionDescriptionInit) {\n    this.trace(`Offer from localPeerConnection:\\n${description.sdp}`);\n\n    if (this.localPeerConnection) {\n      this.trace(\"localPeerConnection setLocalDescription start.\");\n      this.localPeerConnection\n        .setLocalDescription(description)\n        .then(() => {\n          this.setLocalDescriptionSuccess(this.localPeerConnection!);\n        })\n        .catch((err) => this.setSessionDescriptionError(err));\n    }\n\n    if (this.remotePeerConnection) {\n      this.trace(\"remotePeerConnection setRemoteDescription start.\");\n      this.remotePeerConnection\n        .setRemoteDescription(description)\n        .then(() => {\n          this.setRemoteDescriptionSuccess(this.remotePeerConnection!);\n        })\n        .catch((err) => this.setSessionDescriptionError(err));\n\n      this.trace(\"remotePeerConnection createAnswer start.\");\n      this.remotePeerConnection\n        .createAnswer()\n        .then((description) => this.createdAnswer(description))\n        .catch((err) => this.setSessionDescriptionError(err));\n    }\n  }\n\n  createdAnswer(description: RTCSessionDescriptionInit) {\n    this.trace(`Answer from remotePeerConnection:\\n${description.sdp}.`);\n\n    if (this.remotePeerConnection) {\n      this.trace(\"remotePeerConnection setLocalDescription start.\");\n      this.remotePeerConnection\n        .setLocalDescription(description)\n        .then(() => {\n          this.setLocalDescriptionSuccess(this.remotePeerConnection!);\n        })\n        .catch((err) => this.setSessionDescriptionError(err));\n    }\n\n    if (this.localPeerConnection) {\n      this.trace(\"localPeerConnection setRemoteDescription start.\");\n      this.localPeerConnection\n        .setRemoteDescription(description)\n        .then(() => {\n          this.setRemoteDescriptionSuccess(this.localPeerConnection!);\n        })\n        .catch((err) => this.setSessionDescriptionError(err));\n    }\n  }\n\n  setSessionDescriptionError(error: any) {\n    this.trace(`Failed to create session description: ${error.toString()}.`);\n  }\n\n  setDescriptionSuccess(\n    peerConnection: RTCPeerConnection,\n    functionName: string\n  ) {\n    const peerName = this.getPeerName(peerConnection);\n    this.trace(`${peerName} ${functionName} complete.`);\n  }\n\n  setLocalDescriptionSuccess(peerConnection: RTCPeerConnection) {\n    this.setDescriptionSuccess(peerConnection, \"setLocalDescription\");\n  }\n\n  setRemoteDescriptionSuccess(peerConnection: RTCPeerConnection) {\n    this.setDescriptionSuccess(peerConnection, \"setRemoteDescription\");\n  }\n\n  trace(text: string) {\n    text = text.trim();\n    const now = (window.performance.now() / 1000).toFixed(3);\n    console.log(now, text);\n    const div = document.createElement(\"div\");\n    div.innerHTML = `<div>${now}, ${text}</div>`;\n    document.getElementById(\"trace\")?.appendChild(div);\n  }\n\n  getOtherPeer(peerConnection: RTCPeerConnection) {\n    return peerConnection === this.localPeerConnection\n      ? this.remotePeerConnection\n      : this.localPeerConnection;\n  }\n\n  getPeerName(peerConnection: RTCPeerConnection) {\n    return peerConnection === this.localPeerConnection\n      ? \"localPeerConnection\"\n      : \"remotePeerConnection\";\n  }\n}\n\nexport default WebRTCClient;\n","export class WebGLRenderer {\n  canvas: HTMLCanvasElement;\n  gl: RenderingContext | null;\n\n  constructor(canvas: HTMLCanvasElement) {\n    this.canvas = canvas;\n    const webglConfig = { alpha: true, premultipliedAlpha: false };\n    this.gl = this.canvas.getContext(\"webgl\", webglConfig);\n    if (!this.gl) {\n      throw new Error(\"WebGL failed to initialize.\");\n    }\n  }\n}\n\nexport default WebGLRenderer;\n","// https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html\n// import \"@lib/third/jweixin-1.6.0.js\";\n\n/**\n * 信鸽停车微信服务号\n * appid      wxdb8468d8262792d3\n * appsecret  296cf699a5a7caf535c50a22a9c99a29\n *\n * 卓能微信服务号\n * appid      wxcc4645ca16ab0a43\n * appsecret  0f35ef010de126b71817e88f026c3909\n *\n * 信鸽停车微信小程序\n * appid  wx9e3fd78a7b00b202\n *\n * 卓能微信小程序\n * appid  wx8f38e0d03cf5da91\n */\n\ndeclare const document: Document & {\n  attachEvent: any;\n  createEventObject: any;\n};\n\nimport { trimHash } from \"@zyzgroup/core-common\";\n\ntype wxConfig = {\n  appId: string; // 必填，公众号的唯一标识\n  timestamp: string; // 必填，生成签名的时间戳\n  nonceStr: string; // 必填，生成签名的随机串\n  signature: string; // 必填，签名\n\n  debug: boolean; // 开启调试模式,调用的所有api的返回值会在客户端alert出来，若要查看传入的参数，可以在pc端打开，参数信息会通过log打出，仅在pc端时才会打印\n  jsApiList: string[]; // 必填，需要使用的JS接口列表\n};\n\ntype wxConfigFromServer = Omit<wxConfig, \"debug\" | \"jsApiList\">;\n\n// eslint-disable-next-line @typescript-eslint/no-namespace\ndeclare namespace wx {\n  function config(config: wxConfig): void;\n  function ready(cb: () => void): void;\n  function error(cb: (res: any) => void): void;\n  function checkJsApi(config: {\n    jsApiList: string[]; // 需要检测的JS接口列表，所有JS接口列表见附录2,\n    success: (res: {\n      // 以键值对的形式返回，可用的api值true，不可用为false\n      // 如：{\"checkResult\":{\"chooseImage\":true},\"errMsg\":\"checkJsApi:ok\"}\n      checkResult: Record<string, boolean>;\n      errMsg: string;\n    }) => void;\n    fail?: (res: any) => void;\n  }): void;\n  function updateAppMessageShareData(shareConfig: {\n    title: string; // 分享标题\n    desc: string; // 分享描述\n    link: string; // 分享链接，该链接域名或路径必须与当前页面对应的公众号JS安全域名一致\n    imgUrl: string; // 分享图标\n    success: () => void; // 设置成功\n    fail?: (res: { errMsg: string }) => void;\n  }): void;\n  function updateTimelineShareData(shareConfig: {\n    title: string; // 分享标题\n    link: string; // 分享链接，该链接域名或路径必须与当前页面对应的公众号JS安全域名一致\n    imgUrl: string; // 分享图标\n    success: () => void; // 设置成功\n    fail?: (res: { errMsg: string }) => void;\n  }): void;\n  function chooseImage(apiConfig: {\n    count: number; // 默认9\n    sizeType: [\"original\", \"compressed\"] | [\"original\"] | [\"compressed\"]; // 可以指定是原图还是压缩图，默认二者都有\n    sourceType: [\"album\", \"camera\"] | [\"album\"] | [\"camera\"]; // 可以指定来源是相册还是相机，默认二者都有\n    success: (res: {\n      localIds: string[]; // 返回选定照片的本地ID列表，localId可以作为img标签的src属性显示图片\n    }) => void;\n    fail?: (res: { errMsg: string }) => void;\n  }): void;\n  function previewImage(apiConfig: {\n    current: string; // 当前显示图片的http链接\n    urls: string[]; // 需要预览的图片http链接列表\n  }): void;\n  function uploadImage(apiConfig: {\n    localId: string; // 需要上传的图片的本地ID，由chooseImage接口获得\n    isShowProgressTips: 0 | 1; // 默认为1，显示进度提示\n    success: (res: {\n      serverId: string; // 返回图片的服务器端ID\n    }) => void;\n    fail?: (res: { errMsg: string }) => void;\n  }): void;\n  function downloadImage(apiConfig: {\n    serverId: string; // 需要下载的图片的服务器端ID，由uploadImage接口获得\n    isShowProgressTips: 0 | 1; // 默认为1，显示进度提示\n    success: (res: {\n      localId: string; // 返回图片下载后的本地ID\n    }) => void;\n    fail?: (res: { errMsg: string }) => void;\n  }): void;\n  function getLocalImgData(apiConfig: {\n    localId: string; // 图片的localID\n    success: (res: {\n      localData: string; // localData是图片的base64数据，可以用img标签显示\n    }) => void;\n    fail?: (res: { errMsg: string }) => void;\n  }): void;\n  function startRecord(): void;\n  function stopRecord(apiConfig: {\n    success: (res: { localId: string }) => void;\n    fail?: (res: { errMsg: string }) => void;\n  }): void;\n  function onVoiceRecordEnd(apiConfig: {\n    // 录音时间超过一分钟没有停止的时候会执行 complete 回调\n    complete: (res: { localId: string }) => void;\n  }): void;\n  function playVoice(apiConfig: {\n    localId: string; // 需要播放的音频的本地ID，由stopRecord接口获得\n  }): void;\n  function pauseVoice(apiConfig: {\n    localId: string; // 需要暂停的音频的本地ID，由stopRecord接口获得\n  }): void;\n  function stopVoice(apiConfig: {\n    localId: string; // 需要停止的音频的本地ID，由stopRecord接口获得\n  }): void;\n  function onVoicePlayEnd(apiConfig: {\n    success: (res: {\n      localId: string; // 返回音频的本地ID\n    }) => void;\n  }): void;\n  function uploadVoice(apiConfig: {\n    localId: string; // 需要上传的音频的本地ID，由stopRecord接口获得\n    isShowProgressTips: 0 | 1; // 默认为1，显示进度提示\n    success: (res: {\n      serverId: string; // 返回音频的服务器端ID\n    }) => void;\n    fail?: (res: { errMsg: string }) => void;\n  }): void;\n  function downloadVoice(apiConfig: {\n    serverId: string; // 需要下载的音频的服务器端ID，由uploadVoice接口获得\n    isShowProgressTips: 0 | 1; // 默认为1，显示进度提示\n    success: (res: {\n      localId: string; // 返回音频的本地ID\n    }) => void;\n    fail?: (res: { errMsg: string }) => void;\n  }): void;\n  function translateVoice(apiConfig: {\n    localId: string; // 需要识别的音频的本地Id，由录音相关接口获得\n    isShowProgressTips: 0 | 1; // 默认为1，显示进度提示\n    success: (res: {\n      translateResult: string; // 语音识别的结果\n    }) => void;\n    fail?: (res: { errMsg: string }) => void;\n  }): void;\n  function getNetworkType(apiConfig: {\n    success: (res: {\n      networkType: string; // 返回网络类型2g，3g，4g，wifi\n    }) => void;\n    fail?: (res: { errMsg: string }) => void;\n  }): void;\n  function openLocation(apiConfig: {\n    latitude: number; // 纬度，浮点数，范围为90 ~ -90\n    longitude: number; // 经度，浮点数，范围为180 ~ -180。\n    name: string; // 位置名\n    address: string; // 地址详情说明\n    scale: number; // 地图缩放级别,整型值,范围从1~28。默认为最大\n    infoUrl: string; // 在查看位置界面底部显示的超链接,可点击跳转\n  }): void;\n  function getLocation(apiConfig: {\n    type: \"wgs84\" | \"gcj02\"; // 默认为wgs84的gps坐标，如果要返回直接给openLocation用的火星坐标，可传入'gcj02'\n    success: (res: {\n      latitude: number; // 纬度，浮点数，范围为90 ~ -90\n      longitude: number; // 经度，浮点数，范围为180 ~ -180。\n      speed: number; // 速度，以米/每秒计\n      accuracy: number; // 位置精度\n    }) => void;\n    fail?: (res: { errMsg: string }) => void;\n  }): void;\n  function scanQRCode(apiConfig: {\n    needResult: 0 | 1; // 默认为0，扫描结果由微信处理，1则直接返回扫描结果，\n    scanType: [\"qrCode\", \"barCode\"] | [\"qrCode\"] | [\"barCode\"]; // 可以指定扫二维码还是一维码，默认二者都有\n    success: (res: {\n      resultStr: string; // 当needResult 为 1 时，扫码返回的结果\n    }) => void;\n    fail?: (res: { errMsg: string }) => void;\n  }): void;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-namespace\ndeclare namespace WeixinJSBridge {\n  function invoke(\n    method: \"getBrandWCPayRequest\",\n    config: {\n      appId: string; // 公众号ID\n      timeStamp: string; // 时间戳，自1970年以来的秒数\n      nonceStr: string; // 随机串\n      package: string;\n      signType: string; // 微信签名方式\n      paySign: string; // 微信签名\n    },\n    cb: (res: { err_msg: string }) => void\n  ): void;\n}\n\nconst initWxJsReadyFns: (() => void)[] = [];\nconst initWxJsConfigRecord: Record<string, boolean> = {};\n\nexport function addWxJsReadyFnBeforeConfig(fn: () => void) {\n  initWxJsReadyFns.push(fn);\n}\n\n// 所有需要使用JS-SDK的页面必须先注入配置信息，否则将无法调用\n// 同一个url仅需调用一次，对于变化url的SPA的web app可在每次url变化时进行调用\n// 目前Android微信客户端不支持pushState的H5新特性，所以使用pushState来实现web app的页面会导致签名失败，此问题会在Android6.2中修复\nexport function injectWxJsConfig(\n  configFromServer: wxConfigFromServer,\n  debug = false\n) {\n  // 不包含#hash\n  const currentURL = trimHash();\n  if (initWxJsConfigRecord[currentURL]) {\n    return;\n  }\n  // config信息验证失败会执行error函数，如签名过期导致验证失败，\n  // 具体错误信息可以打开config的debug模式查看，也可以在返回的res参数中查看，对于SPA可以在这里更新签名\n  wx.error((res) => {\n    console.log(res.errMsg || JSON.stringify(res));\n  });\n  // config信息验证后会执行ready方法\n  // 所以如果需要在页面加载时就调用相关接口，则须把相关接口放在ready函数中调用来确保正确执行。\n  // 对于用户触发时才调用的接口，则可以直接调用，不需要放在ready函数中。\n  wx.ready(() => {\n    initWxJsReadyFns.forEach((fn) => fn());\n  });\n  const ALL_WX_JS_APIS = [\n    \"updateAppMessageShareData\",\n    \"updateTimelineShareData\",\n    \"onMenuShareWeibo\",\n    \"onMenuShareQZone\",\n    \"startRecord\",\n    \"stopRecord\",\n    \"onVoiceRecordEnd\",\n    \"playVoice\",\n    \"pauseVoice\",\n    \"stopVoice\",\n    \"onVoicePlayEnd\",\n    \"uploadVoice\",\n    \"downloadVoice\",\n    \"chooseImage\",\n    \"previewImage\",\n    \"uploadImage\",\n    \"downloadImage\",\n    \"getLocalImgData\",\n    \"translateVoice\",\n    \"getNetworkType\",\n    \"openLocation\",\n    \"getLocation\",\n    \"hideOptionMenu\",\n    \"showOptionMenu\",\n    \"hideMenuItems\",\n    \"showMenuItems\",\n    \"hideAllNonBaseMenuItem\",\n    \"showAllNonBaseMenuItem\",\n    \"closeWindow\",\n    \"scanQRCode\",\n    \"openProductSpecificView\",\n    \"addCard\",\n    \"chooseCard\",\n    \"openCard\"\n  ];\n  // 需要使用的开放标签列表\n  const ALL_WX_OPEN_TAGS = [\n    \"wx-open-launch-app\",\n    \"wx-open-launch-app\",\n    \"wx-open-subscribe\",\n    \"wx-open-audio\"\n  ];\n  // 所有接口调用都必须在config接口获得结果之后，config是一个客户端的异步操作\n  wx.config(\n    Object.assign(configFromServer, {\n      debug,\n      jsApiList: ALL_WX_JS_APIS,\n      openTagList: ALL_WX_OPEN_TAGS\n    }) as wxConfig\n  );\n  initWxJsConfigRecord[currentURL] = true;\n}\n\n// checkJsApi接口是客户端6.0.2新引入的一个预留接口，第一期开放的接口均可不使用checkJsApi来检测\nexport function checkWxJsApi(apiName: string) {\n  return new Promise<boolean>((resolve, reject) => {\n    wx.checkJsApi({\n      jsApiList: [apiName],\n      success: function (res) {\n        if (res.checkResult[apiName]) {\n          resolve(true);\n        } else {\n          reject(false);\n        }\n      },\n      fail: function () {\n        reject(false);\n      }\n    });\n  });\n}\n\n// 自定义“分享给朋友”及“分享到QQ”按钮的分享内容（1.4.0）\nexport function wxJsUpdateAppMessageShareData(shareConfig: {\n  title: string; // 分享标题\n  desc: string; // 分享描述\n  link: string; // 分享链接，该链接域名或路径必须与当前页面对应的公众号JS安全域名一致\n  imgUrl: string; // 分享图标\n  success: () => void; // 设置成功\n  ffail?: (res: { errMsg: string }) => void;\n}) {\n  addWxJsReadyFnBeforeConfig(function () {\n    wx.updateAppMessageShareData(shareConfig);\n  });\n}\n\n// 自定义“分享到朋友圈”及“分享到QQ空间”按钮的分享内容（1.4.0）\nexport function wxJsUpdateTimelineShareData(shareConfig: {\n  title: string; // 分享标题\n  link: string; // 分享链接，该链接域名或路径必须与当前页面对应的公众号JS安全域名一致\n  imgUrl: string; // 分享图标\n  success: () => void; // 设置成功\n  fail?: (res: { errMsg: string }) => void;\n}) {\n  addWxJsReadyFnBeforeConfig(function () {\n    wx.updateTimelineShareData(shareConfig);\n  });\n}\n\n// 拍照或从手机相册中选图接口\nexport function wxJsChooseImage(apiConfig: {\n  count: number; // 默认9\n  sizeType: [\"original\", \"compressed\"] | [\"original\"] | [\"compressed\"]; // 可以指定是原图还是压缩图，默认二者都有\n  sourceType: [\"album\", \"camera\"] | [\"album\"] | [\"camera\"]; // 可以指定来源是相册还是相机，默认二者都有\n  success: (res: {\n    localIds: string[]; // 返回选定照片的本地ID列表，localId可以作为img标签的src属性显示图片\n  }) => void;\n  fail?: (res: { errMsg: string }) => void;\n}) {\n  wx.chooseImage(apiConfig);\n}\n\n// 预览图片接口\nexport function wxJsPreviewImage(apiConfig: {\n  current: string; // 当前显示图片的http链接\n  urls: string[]; // 需要预览的图片http链接列表\n}) {\n  wx.previewImage(apiConfig);\n}\n\n// 上传图片接口\n// 备注：上传图片有效期3天，可用微信多媒体接口下载图片到自己的服务器，此处获得的 serverId 即 media_id。\nexport function wxJsUploadImage(apiConfig: {\n  localId: string; // 需要上传的图片的本地ID，由chooseImage接口获得\n  isShowProgressTips: 0 | 1; // 默认为1，显示进度提示\n  success: (res: {\n    serverId: string; // 返回图片的服务器端ID\n  }) => void;\n  fail?: (res: { errMsg: string }) => void;\n}) {\n  wx.uploadImage(apiConfig);\n}\n\n// 下载图片接口\nexport function wxJsDownloadImage(apiConfig: {\n  serverId: string; // 需要下载的图片的服务器端ID，由uploadImage接口获得\n  isShowProgressTips: 0 | 1; // 默认为1，显示进度提示\n  success: (res: {\n    localId: string; // 返回图片下载后的本地ID\n  }) => void;\n  fail?: (res: { errMsg: string }) => void;\n}) {\n  wx.downloadImage(apiConfig);\n}\n\n// 获取本地图片接口\n// 备注：此接口仅在 iOS WKWebview 下提供，用于兼容 iOS WKWebview 不支持 localId 直接显示图片的问题。具体可参考《iOS WKWebview网页开发适配指南》\nexport function wxJsGetLocalImgData(apiConfig: {\n  localId: string; // 图片的localID\n  success: (res: {\n    localData: string; // localData是图片的base64数据，可以用img标签显示\n  }) => void;\n  fail?: (res: { errMsg: string }) => void;\n}) {\n  wx.getLocalImgData(apiConfig);\n}\n\n// 开始录音接口\nexport function wxJsStartRecord() {\n  wx.startRecord();\n}\n\n// 停止录音接口\nexport function wxJsStopRecord(apiConfig: {\n  success: (res: { localId: string }) => void;\n  fail?: (res: { errMsg: string }) => void;\n}) {\n  wx.stopRecord(apiConfig);\n}\n\n// 监听录音自动停止接口\nexport function wxJsOnVoiceRecordEnd(apiConfig: {\n  // 录音时间超过一分钟没有停止的时候会执行 complete 回调\n  complete: (res: { localId: string }) => void;\n}) {\n  wx.onVoiceRecordEnd(apiConfig);\n}\n\n// 播放语音接口\nexport function wxJsPlayVoice(apiConfig: {\n  localId: string; // 需要播放的音频的本地ID，由stopRecord接口获得\n}) {\n  wx.playVoice(apiConfig);\n}\n\n// 暂停播放接口\nexport function wxJsPauseVoice(apiConfig: {\n  localId: string; // 需要暂停的音频的本地ID，由stopRecord接口获得\n}) {\n  wx.pauseVoice(apiConfig);\n}\n\n// 停止播放接口\nexport function wxJsStopVoice(apiConfig: {\n  localId: string; // 需要停止的音频的本地ID，由stopRecord接口获得\n}) {\n  wx.stopVoice(apiConfig);\n}\n\n// 监听语音播放完毕接口\nexport function wxJsOnVoicePlayEnd(apiConfig: {\n  success: (res: {\n    localId: string; // 返回音频的本地ID\n  }) => void;\n}) {\n  wx.onVoicePlayEnd(apiConfig);\n}\n\n// 上传语音接口\n// 备注：上传语音有效期3天，可用微信多媒体接口下载语音到自己的服务器，此处获得的 serverId 即 media_id，参考文档 .目前多媒体文件下载接口的频率限制为10000次/天，如需要调高频率，请登录微信公众平台，在开发 - 接口权限的列表中，申请提高临时上限。\nexport function wxJsUploadVoice(apiConfig: {\n  localId: string; // 需要上传的音频的本地ID，由stopRecord接口获得\n  isShowProgressTips: 0 | 1; // 默认为1，显示进度提示\n  success: (res: {\n    serverId: string; // 返回音频的服务器端ID\n  }) => void;\n  fail?: (res: { errMsg: string }) => void;\n}) {\n  wx.uploadVoice(apiConfig);\n}\n\n// 下载语音接口\nexport function wxJsDownloadVoice(apiConfig: {\n  serverId: string; // 需要下载的音频的服务器端ID，由uploadVoice接口获得\n  isShowProgressTips: 0 | 1; // 默认为1，显示进度提示\n  success: (res: {\n    localId: string; // 返回音频的本地ID\n  }) => void;\n  fail?: (res: { errMsg: string }) => void;\n}) {\n  wx.downloadVoice(apiConfig);\n}\n\n// 识别音频并返回识别结果接口\nexport function wxJsTranslateVoice(apiConfig: {\n  localId: string; // 需要识别的音频的本地Id，由录音相关接口获得\n  isShowProgressTips: 0 | 1; // 默认为1，显示进度提示\n  success: (res: {\n    translateResult: string; // 语音识别的结果\n  }) => void;\n  fail?: (res: { errMsg: string }) => void;\n}) {\n  wx.translateVoice(apiConfig);\n}\n\n// 获取网络状态接口\nexport function wxJsGetNetworkType(apiConfig: {\n  success: (res: {\n    networkType: string; // 返回网络类型2g，3g，4g，wifi\n  }) => void;\n  fail?: (res: { errMsg: string }) => void;\n}) {\n  wx.getNetworkType(apiConfig);\n}\n\n// 使用微信内置地图查看位置接口\nexport function wxJsOpenLocation(apiConfig: {\n  latitude: number; // 纬度，浮点数，范围为90 ~ -90\n  longitude: number; // 经度，浮点数，范围为180 ~ -180。\n  name: string; // 位置名\n  address: string; // 地址详情说明\n  scale: number; // 地图缩放级别,整型值,范围从1~28。默认为最大\n  infoUrl: string; // 在查看位置界面底部显示的超链接,可点击跳转\n}) {\n  wx.openLocation(apiConfig);\n}\n\n// 获取地理位置接口\nexport function wxJsGetLocation(apiConfig: {\n  type: \"wgs84\" | \"gcj02\"; // 默认为wgs84的gps坐标，如果要返回直接给openLocation用的火星坐标，可传入'gcj02'\n  success: (res: {\n    latitude: number; // 纬度，浮点数，范围为90 ~ -90\n    longitude: number; // 经度，浮点数，范围为180 ~ -180。\n    speed: number; // 速度，以米/每秒计\n    accuracy: number; // 位置精度\n  }) => void;\n  fail?: (res: { errMsg: string }) => void;\n}) {\n  wx.getLocation(apiConfig);\n}\n\n// 调起微信扫一扫接口\nexport function wxJsScanQRCode(apiConfig: {\n  needResult: 0 | 1; // 默认为0，扫描结果由微信处理，1则直接返回扫描结果，\n  scanType: [\"qrCode\", \"barCode\"] | [\"qrCode\"] | [\"barCode\"]; // 可以指定扫二维码还是一维码，默认二者都有\n  success: (res: {\n    resultStr: string; // 当needResult 为 1 时，扫码返回的结果\n  }) => void;\n  fail?: (res: { errMsg: string }) => void;\n}) {\n  wx.scanQRCode(apiConfig);\n}\n\n// 微信支付\n// 请参考微信支付文档，JSAPI调起支付API：https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_1_4.shtml\n// 备注：\n// 微信支付V2的开发文档：https://pay.weixin.qq.com/wiki/doc/api/index.html\n// 微信支付V3的开发文档：https://pay.weixin.qq.com/wiki/doc/apiv3/index.shtml\nexport function wxJsPay(\n  config: {\n    appId: string; // 公众号ID\n    timeStamp: string; // 时间戳，自1970年以来的秒数\n    nonceStr: string; // 随机串\n    package: string;\n    signType: string; // 微信签名方式\n    paySign: string; // 微信签名\n  },\n  successCb: () => void,\n  errorCb: (err_msg: string) => void\n) {\n  function onBridgeReady() {\n    WeixinJSBridge.invoke(\"getBrandWCPayRequest\", config, function (res) {\n      if (res.err_msg == \"get_brand_wcpay_request:ok\") {\n        // 微信团队郑重提示：\n        // res.err_msg 将在用户支付成功后返回 ok，但并不保证它绝对可靠\n        successCb();\n      } else {\n        errorCb(res.err_msg);\n      }\n    });\n  }\n  if (typeof WeixinJSBridge == \"undefined\") {\n    if (document.addEventListener) {\n      document.addEventListener(\"WeixinJSBridgeReady\", onBridgeReady, false);\n    } else if (document.attachEvent) {\n      document.attachEvent(\"WeixinJSBridgeReady\", onBridgeReady);\n      document.attachEvent(\"onWeixinJSBridgeReady\", onBridgeReady);\n    }\n  } else {\n    onBridgeReady();\n  }\n}\n\n// 关闭当前网页窗口接口\n// wx.closeWindow();\n\n// 批量隐藏功能按钮接口\n// wx.hideMenuItems({\n//   menuList: [] // 要隐藏的菜单项，只能隐藏“传播类”和“保护类”按钮\n// });\n\n// 批量显示功能按钮接口\n// wx.showMenuItems({\n//   menuList: [] // 要显示的菜单项，所有menu项见附录3\n// });\n\n// 隐藏所有非基础按钮接口\n// wx.hideAllNonBaseMenuItem();\n\n// 显示所有功能按钮接口\n// wx.showAllNonBaseMenuItem();\n\n// 基本类\n// 举报: \"menuItem:exposeArticle\"\n// 调整字体: \"menuItem:setFont\"\n// 日间模式: \"menuItem:dayMode\"\n// 夜间模式: \"menuItem:nightMode\"\n// 刷新: \"menuItem:refresh\"\n// 查看公众号（已添加）: \"menuItem:profile\"\n// 查看公众号（未添加）: \"menuItem:addContact\"\n\n// 传播类\n// 发送给朋友: \"menuItem:share:appMessage\"\n// 分享到朋友圈: \"menuItem:share:timeline\"\n// 分享到QQ: \"menuItem:share:qq\"\n// 分享到Weibo: \"menuItem:share:weiboApp\"\n// 收藏: \"menuItem:favorite\"\n// 分享到FB: \"menuItem:share:facebook\"\n// 分享到 QQ 空间 \"menuItem:share:QZone\"\n\n// 保护类\n// 编辑标签: \"menuItem:editTag\"\n// 删除: \"menuItem:delete\"\n// 复制链接: \"menuItem:copyUrl\"\n// 原网页: \"menuItem:originPage\"\n// 阅读模式: \"menuItem:readMode\"\n// 在QQ浏览器中打开: \"menuItem:openWithQQBrowser\"\n// 在Safari中打开: \"menuItem:openWithSafari\"\n// 邮件: \"menuItem:share:email\"\n// 一些特殊公众号: \"menuItem:share:brand\"\n\n// UnionID\n// https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html\n// 需要前往微信开放平台（open.weixin.qq.com）绑定公众号后，才可利用UnionID\n// 卓能：xl@ruolin-link.com\n// 若临：third@ruolin-link.com\n\n// 微信网页授权规范\n// 授权流程需引导清晰、准确：在申请获取用户信息的弹窗出现前，应该清晰、准确地告知用户获取信息的范围及获取信息的目的；\n// 必要场景申请：在必须获取用户信息时才申请，而不是用户尚未了解服务前就强制弹窗。如使用医院挂号时才需要获取用户信息；\n// 不强制登录：提供游客模式，供用户了解网页提供的基础服务，不强制用户允许网页获取用户信息后才能使用网页服务。\n\n// 常见的微信网页授权不规范使用案例\n// 强制登录：在用户打开网页时立即要求用户授权，用户拒绝后无法使用网页提供的服务；\n// 违规收集个人信息：未在网页提前告知使用个人信息的目的、方式和范围；\n// 非必要收集：非必要获取用户信息的网页，如文章、视频等，要求用户在浏览内容前登录；\n// 差别对待微信用户：同样的网页在浏览器内可以无需登录直接访问，在微信内却要求用户先登录才可访问。\n\n// 如果用户同意授权，页面将跳转至 redirect_uri/?code=CODE&state=STATE\nexport function wxJsLogin(\n  appid: string,\n  redirect_uri: string,\n  scope: \"snsapi_base\" | \"snsapi_userinfo\" = \"snsapi_userinfo\",\n  state = \"\"\n) {\n  return `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appid}&redirect_uri=${encodeURIComponent(\n    redirect_uri\n  )}&response_type=code&scope=${scope}&state=${state}#wechat_redirect`;\n}\n","// https://opendocs.alipay.com/open/025a4p\n// https://myjsapi.alipay.com/alipayjsapi/index.html\n\n// import \"@lib/third/alipayjsapi.min.js\";\n// import \"@lib/third/alipayjsapi-3.1.1.inc.min.js\";\n\n/**\n * 信鸽停车支付宝生活号\n * appid\n *\n * 卓能支付宝生活号\n * appid\n *\n * 信鸽停车支付宝小程序\n * appid  2019021863245748\n *\n * 卓能支付宝小程序\n * appid  2021001108622239\n */\n\n// eslint-disable-next-line @typescript-eslint/no-namespace\ndeclare namespace AlipayJSBridge {\n  function call(method: string, ...args: any[]): void;\n}\n\ntype commonFailOption = { error: number; errorMessage: string };\n\ntype commonOption = {\n  success?: () => void;\n  fail?: (res: commonFailOption) => void;\n  complete?: () => void;\n};\n\ntype tradePayOption = {\n  tradeNO?: string; // 交易号，多个交易号请用英文分号;分隔\n  partnerID?: string; // 商户id\n  bizType?: string; // 交易类型，默认为 ‘trade’\n  bizSubType?: string; // 交易子类型\n  bizContext?: string; //\t支付额外的参数，格式为JSON字符串\n  orderStr?: string; //\t完整的支付参数拼接成的字符串，从服务端获取。需要入驻蚂蚁金服开放平台\n};\n\ntype scanOption = {\n  type?: \"qr\" | \"bar\"; // 扫描目标类型，支持 qr / bar，相应扫码选框会不同，默认 qr\n};\n\ntype getLocationOption = {\n  cacheTimeout?: number; // 钱包经纬度定位缓存过期时间，单位秒。默认 30s。使用缓存会加快定位速度，缓存过期会重新定位\n  type?: 0 | 1 | 2; // 支持 0：详细逆地理编码，带周边信息；1：逆地理编码到城市；2：仅获取经纬度、速度和精度。默认为 2\n  timeout?: number; // 定位超时失败回调时间，单位秒。默认10s\n  bizType?: number; // 自定义业务类型\n};\n\ntype getLocationResult = {\n  longitude: string; // 经度\n  latitude: string; // 纬度\n  accuracy: string; // 精度，单位米\n  speed: string; // 速度，单位毫秒\n  country?: string; // 国家名\n  countryCode?: string; // 国家编号\n  province?: string; // 省份名\n  city?: string; // 城市名\n  cityCode?: string; // 城市编码\n  adCode?: string; // 区域编码\n  streetNumber?: { street: string; number: number }; // 街道门牌信息\n  pois?: { name: string; address: string }[]; // 定位点附近的 POI 信息\n};\n\ntype openLocationOption = {\n  longitude: string; // 经度\n  latitude: string; // 纬度\n  name?: string; // 位置名称\n  address?: string; // 地址的详细说明\n  scale?: number; // 缩放比例，范围3~19，默认为15\n};\n\ntype chooseImageOption = {\n  count?: number; //\t最大可选照片数，默认1张，上限9张\n  sourceType?: [\"camera\", \"album\"] | [\"camera\"] | [\"album\"]; //\t相册选取或者拍照，默认 ['camera','album']\n};\n\ntype chooseImageResult = {\n  apFilePaths: string[]; // 图片文件路径\n};\n\ntype previewImageOption = {\n  urls: string[]; // 要预览的图片链接列表\n  current?: number; // 当前显示图片索引，默认 0\n};\n\n// eslint-disable-next-line @typescript-eslint/no-namespace\ndeclare namespace ap {\n  function tradePay(\n    option: tradePayOption & commonOption,\n    complete: (res: {\n      resultCode: number; // 支付结果状态码\n    }) => void\n  ): void;\n  function scan(\n    option: scanOption & commonOption,\n    complete: (res: {\n      code: string; // 扫码所得数据\n    }) => void\n  ): void;\n  function getLocation(\n    option: getLocationOption & commonOption,\n    complete: (res: getLocationResult) => void\n  ): void;\n  function openLocation(\n    option: openLocationOption & commonOption,\n    complete?: () => void\n  ): void;\n  function chooseImage(\n    option: chooseImageOption & commonOption,\n    complete: (res: chooseImageResult) => void\n  ): void;\n  function previewImage(\n    option: previewImageOption & commonOption,\n    complete?: () => void\n  ): void;\n}\n\n// 由于机制问题，JSAPI注入是异步过程，时序无法保证。\n// 如果使用原生AlipayJSBridge接口，需要先监听AlipayJSBridgeReady事件后再调用原生JSAPI接口。\nexport function aliJsReady(callback: () => void) {\n  // 如果jsbridge已经注入则直接调用\n  if ((<any>window).AlipayJSBridge) {\n    callback && callback();\n  } else {\n    // 如果没有注入则监听注入的事件\n    document.addEventListener(\"AlipayJSBridgeReady\", callback, false);\n  }\n}\n// aliJsReady(function () {\n//   AlipayJSBridge.call(\"toast\", {\n//     content: \"hello\"\n//   });\n// });\n\n// 通过 Scheme 启动 支付宝生活号H5App\n// 支付宝客户端的标准 Scheme 为：alipays://platformapi/startapp?appId=xxx\n// 但如果是某些运营页之类的单独页面，没有自己的 APPID，可以使用Nebula容器的通用浏览器模式 appId=20000067 来启动，同时将需要打开的 H5 页面 URL 经过 encode 编码后设置到 URL 参数内，例如：alipays://platformapi/startapp?appId=20000067&url=http%3A%2F%2Fm.taobao.com\n\n// 通过 JSAPI: startApp 接口启动 支付宝生活号H5App\n// 可通过 closeCurrentApp 入参来同时关闭自身\n\n// 退出 H5App 也存在两种情况：\n// 第一种为当前 H5App 的窗口栈中的最后一个窗口也被销毁时，Nebula 容器会同时自动销毁掉这个 H5App实例。\n// 第二种即为调用 JSAPI: exitApp 接口，可以在当前 H5App 下的任意一个 Window 窗口中调用，关闭一整个当前 H5App。\n\n// H5 在 Nebula 容器中有多种页面跳转的方式，除了原生的 location.href / location.replace 之类的页面跳转方法以外，还有一个 JSAPI：pushWindow 接口。\n\nfunction aliJsFormatCommonFailMessage(\n  res: commonFailOption,\n  methodName?: string\n) {\n  let errorCodeMessage = \"未知错误\";\n  switch (res.error) {\n    case 1:\n      errorCodeMessage = \"接口不存在\";\n      break;\n    case 2:\n      errorCodeMessage = \"参数无效\";\n      break;\n    case 3:\n      errorCodeMessage = \"发生未知错误\";\n      break;\n    case 4:\n      errorCodeMessage = \"接口无权限\";\n      break;\n    case 10:\n      errorCodeMessage = \"用户取消\";\n      break;\n    case 11:\n      errorCodeMessage = \"操作失败\";\n      if (methodName === \"chooseImage\") {\n        errorCodeMessage = \"操作失败（权限不够）\";\n      }\n      break;\n    case 12:\n      errorCodeMessage = \"GPS打开，但定位失败\";\n      break;\n    case 13:\n      errorCodeMessage = \"获取地理位置信息失败\";\n      break;\n    case 14:\n      errorCodeMessage = \"定位超时\";\n      break;\n    case 15:\n      errorCodeMessage = \"网络错误\";\n      break;\n    case 16:\n      errorCodeMessage = \"GPS未打开或用户未授权\";\n      break;\n  }\n  return `${res.error}(${errorCodeMessage}): ${res.errorMessage}`;\n}\n\n// 发起支付\nexport function aliJsTradePay(\n  option: tradePayOption,\n  successCb?: (message: string) => void,\n  errorCb?: (message: string) => void\n) {\n  ap.tradePay(\n    Object.assign(option, {\n      // fail: (res: commonFailOption) => {\n      //   errorCb?.(aliJsFormatCommonFailMessage(res));\n      // }\n    }),\n    function (res) {\n      let resultMessage = \"未知错误\";\n      switch (res.resultCode) {\n        case 9000:\n          resultMessage = \"订单支付成功\";\n          return successCb?.(resultMessage);\n        case 8000:\n          resultMessage = \"正在处理中\";\n          break;\n        case 4000:\n          resultMessage = \"订单支付失败\";\n          break;\n        case 6001:\n          resultMessage = \"用户中途取消\";\n          break;\n        case 6002:\n          resultMessage = \"网络连接出错\";\n          break;\n        case 99:\n          resultMessage = \"用户点击忘记密码导致快捷界面退出(only iOS)\";\n          break;\n      }\n      errorCb?.(resultMessage);\n    }\n  );\n}\n\n// 调用扫一扫功能\nexport function aliJsScan(\n  option: scanOption,\n  successCb?: (code: string) => void,\n  errorCb?: (message: string) => void\n) {\n  ap.scan(\n    Object.assign(option, {\n      fail: (res: commonFailOption) => {\n        errorCb?.(aliJsFormatCommonFailMessage(res));\n      }\n    }),\n    function (res) {\n      successCb?.(res.code);\n    }\n  );\n}\n\n// 获取当前的地理位置信息\nexport function aliJsGetLocation(\n  option: getLocationOption,\n  successCb?: (res: getLocationResult) => void,\n  errorCb?: (message: string) => void\n) {\n  ap.getLocation(\n    Object.assign(option, {\n      fail: (res: commonFailOption) => {\n        errorCb?.(aliJsFormatCommonFailMessage(res));\n      }\n    }),\n    function (res) {\n      successCb?.(res);\n    }\n  );\n}\n\n// 使用支付宝内置地图查看位置\nexport function aliJsOpenLocation(\n  option: openLocationOption,\n  successCb?: () => void,\n  errorCb?: (message: string) => void\n) {\n  ap.openLocation(\n    Object.assign(option, {\n      fail: (res: commonFailOption) => {\n        errorCb?.(aliJsFormatCommonFailMessage(res));\n      }\n    }),\n    function () {\n      successCb?.();\n    }\n  );\n}\n\n// 拍照或从手机相册中选择图片\nexport function aliJsChooseImage(\n  option: chooseImageOption,\n  successCb?: (res: chooseImageResult) => void,\n  errorCb?: (message: string) => void\n) {\n  ap.chooseImage(\n    Object.assign(option, {\n      fail: (res: commonFailOption) => {\n        errorCb?.(aliJsFormatCommonFailMessage(res, \"chooseImage\"));\n      }\n    }),\n    function (res) {\n      successCb?.(res);\n    }\n  );\n}\n\n// 预览图片\nexport function aliJsPreviewImage(\n  option: previewImageOption,\n  successCb?: () => void,\n  errorCb?: (message: string) => void\n) {\n  ap.previewImage(\n    Object.assign(option, {\n      fail: (res: commonFailOption) => {\n        errorCb?.(aliJsFormatCommonFailMessage(res));\n      }\n    }),\n    function () {\n      successCb?.();\n    }\n  );\n}\n","// http://lbs.tianditu.gov.cn/\n\n// http://api.tianditu.gov.cn/api?v=4.0&tk=您的密钥\n\n// eslint-disable-next-line @typescript-eslint/no-namespace\ndeclare namespace T {\n  class Map {\n    constructor(name: string | HTMLElement);\n    centerAndZoom(lngLat: LngLat, zoom: number): Map;\n    setStyle(style: \"indigo\" | \"black\"): Map;\n    removeStyle(): Map;\n  }\n  class LngLat {\n    constructor(lng: number, lat: number);\n  }\n}\n\nexport class mapTDTJSSDK {\n  map: T.Map;\n\n  constructor(\n    container: string | HTMLElement,\n    mapCenterLng = 120.619585,\n    mapCenterLat = 31.299379,\n    mapZoom = 18\n  ) {\n    this.map = new T.Map(container);\n    this.map.centerAndZoom(new T.LngLat(mapCenterLng, mapCenterLat), mapZoom);\n  }\n}\nexport default mapTDTJSSDK;\n","import {\n  getStringFromArrayBuffer,\n  getUint8ArrayFromString,\n  AlgorithmEnum,\n  getSortedObjectString\n} from \"@zyzgroup/core-common\";\n\nconst subtle = window.crypto.subtle;\n\nexport async function signature(\n  text: string,\n  algorithm = AlgorithmEnum.SHA256\n): Promise<string> {\n  if (!subtle) {\n    throw new Error(\"Crypto API not supported\");\n  }\n  const result = await subtle.digest(\n    algorithm,\n    getUint8ArrayFromString(text) as BufferSource\n  );\n  return getStringFromArrayBuffer(result);\n}\n\nexport async function objectSignature(\n  obj: any,\n  algorithm = AlgorithmEnum.SHA256\n): Promise<string> {\n  return signature(JSON.stringify(getSortedObjectString(obj)), algorithm);\n}\n\nexport async function encrypt(\n  data: string,\n  algorithm = AlgorithmEnum.AESGCM\n): Promise<{\n  algorithm: string;\n  iv: Uint8Array;\n  key: CryptoKey;\n  encryptedData: ArrayBuffer;\n}> {\n  if (!subtle) {\n    throw new Error(\"Crypto API not supported\");\n  }\n  const iv = crypto.getRandomValues(new Uint8Array(12));\n  const key = await subtle.generateKey(\n    { name: algorithm, length: 256 },\n    false, // defines key as extractable, use false b/c we do not need to store it\n    [\"encrypt\", \"decrypt\"]\n  );\n  const encryptedData = await subtle.encrypt(\n    { name: algorithm, iv },\n    key,\n    getUint8ArrayFromString(data) as BufferSource\n  );\n  return { algorithm, iv, key, encryptedData };\n}\n\nexport async function decrypt(options: {\n  algorithm: AlgorithmEnum;\n  iv: Uint8Array;\n  key: CryptoKey;\n  encryptedData: ArrayBuffer;\n}): Promise<string> {\n  if (!subtle) {\n    throw new Error(\"Crypto API not supported\");\n  }\n  const decryptedData = await subtle.decrypt(\n    {\n      name: options.algorithm,\n      iv: options.iv as BufferSource\n    },\n    options.key,\n    options.encryptedData\n  );\n  return getStringFromArrayBuffer(decryptedData);\n}\n\nexport async function signEncrypt(\n  data: Record<string, any>,\n  algorithm = AlgorithmEnum.ECDSA,\n  hash = \"SHA-384\"\n): Promise<{\n  algorithm: string;\n  hash: string;\n  publicKey: CryptoKey;\n  signature: ArrayBuffer;\n  encodedData: Uint8Array;\n}> {\n  if (!subtle) {\n    throw new Error(\"Crypto API not supported\");\n  }\n  const { privateKey, publicKey } = await subtle.generateKey(\n    {\n      name: algorithm,\n      namedCurve: \"P-384\"\n    },\n    false, // defines key as extractable, use false b/c we do not need to store it\n    [\"sign\", \"verify\"]\n  );\n  const encodedData = getUint8ArrayFromString(\n    JSON.stringify(data)\n  ) as BufferSource;\n  const signature = await subtle.sign(\n    {\n      name: algorithm,\n      hash: { name: hash }\n    },\n    privateKey,\n    encodedData\n  );\n  return {\n    algorithm,\n    hash,\n    publicKey,\n    signature,\n    encodedData: encodedData as Uint8Array<ArrayBufferLike>\n  };\n}\n\nexport async function verifyDecrypt(options: {\n  algorithm: AlgorithmEnum;\n  hash: string;\n  publicKey: CryptoKey;\n  signature: ArrayBuffer;\n  encodedData: Uint8Array;\n}): Promise<boolean> {\n  if (!subtle) {\n    throw new Error(\"Crypto API not supported\");\n  }\n  const isValid = await subtle.verify(\n    {\n      name: options.algorithm,\n      hash: { name: options.hash }\n    },\n    options.publicKey,\n    options.signature,\n    options.encodedData as BufferSource\n  );\n  return isValid;\n}\n","import { stopPropagation } from \"./hooks/useEventListener\";\nimport { VNode, h, mount, patch } from \"./vnode\";\n\nexport class Pagination {\n  /// 当前页数，从0开始\n  currentPage: number;\n  /// 每页item数量\n  itemsPerPage: number;\n  /// page中间连续的个数\n  entriesInterval: number;\n  /// page边缘个数\n  entriesEdge: number;\n  linkTo: string;\n  prevText: string;\n  nextText: string;\n  ellipseText: string;\n  prevShowAlways: boolean;\n  nextShowAlways: boolean;\n  callback: (page: number) => boolean;\n\n  totalPages: number;\n  parentVNode: VNode;\n\n  constructor(\n    parentContainer: HTMLElement,\n    totalItemCount: number,\n    options?: Partial<{\n      currentPage: number;\n      itemsPerPage: number;\n      entriesInterval: number;\n      entriesEdge: number;\n      linkTo: string;\n      prevText: string;\n      nextText: string;\n      ellipseText: string;\n      prevShowAlways: boolean;\n      nextShowAlways: boolean;\n      callback: (page: number) => boolean;\n    }>\n  ) {\n    this.currentPage = options?.currentPage || 0;\n    this.itemsPerPage = options?.itemsPerPage || 10;\n    this.entriesInterval = options?.entriesInterval || 5;\n    this.entriesEdge = options?.entriesEdge || 1;\n    this.linkTo = options?.linkTo || \"javascript:;\";\n    this.prevText = options?.prevText || \"上一页\";\n    this.nextText = options?.nextText || \"下一页\";\n    this.ellipseText = options?.ellipseText || \"...\";\n    this.prevShowAlways =\n      typeof options?.prevShowAlways == \"boolean\"\n        ? options?.prevShowAlways\n        : true;\n    this.nextShowAlways =\n      typeof options?.nextShowAlways == \"boolean\"\n        ? options?.nextShowAlways\n        : true;\n    this.callback = options?.callback || ((page) => false);\n    this.totalPages = Math.ceil(totalItemCount / this.itemsPerPage);\n    this.parentVNode = this.createParentVNode();\n    mount(this.parentVNode, parentContainer);\n    this.selectPage(this.currentPage);\n  }\n\n  private createParentVNode() {\n    return h(\"div\", { class: \"pagination\" }, []);\n  }\n\n  private appendVNode(\n    vnode: VNode,\n    pageID: number,\n    options?: {\n      text?: string;\n      classes?: string;\n    }\n  ) {\n    pageID =\n      pageID < 0 ? 0 : pageID < this.totalPages ? pageID : this.totalPages - 1;\n    const text = options?.text || String(pageID + 1);\n    const classes = options?.classes || \"\";\n    (vnode.children as VNode[]).push(\n      pageID == this.currentPage &&\n        classes.indexOf(\"prev\") == -1 &&\n        classes.indexOf(\"next\") == -1\n        ? h(\"span\", { class: `current ${classes}` }, text)\n        : h(\n            \"a\",\n            {\n              class: classes,\n              href: this.linkTo.replace(/__id__/, String(pageID)),\n              onClick: (evt: Event) => {\n                return this.selectPage(pageID, evt);\n              }\n            },\n            text\n          )\n    );\n  }\n\n  private drawLinks() {\n    const newParentVNode = this.createParentVNode();\n\n    const halfInterval = Math.ceil(this.entriesInterval / 2);\n    const intervalStart =\n      this.currentPage > halfInterval\n        ? Math.max(\n            Math.min(\n              this.currentPage - halfInterval,\n              this.totalPages - this.entriesInterval\n            ),\n            0\n          )\n        : 0;\n    const intervalEnd =\n      this.currentPage > halfInterval\n        ? Math.min(this.currentPage + halfInterval, this.totalPages)\n        : Math.min(this.entriesInterval, this.totalPages);\n\n    // Generate \"Previous\"-Link\n    if (this.prevText && (this.currentPage > 0 || this.prevShowAlways)) {\n      this.appendVNode(newParentVNode, this.currentPage - 1, {\n        text: this.prevText,\n        classes: \"prev\"\n      });\n    }\n    // Generate starting points\n    if (intervalStart > 0 && this.entriesEdge > 0) {\n      const end = Math.min(this.entriesEdge, intervalStart);\n      for (let i = 0; i < end; i++) {\n        this.appendVNode(newParentVNode, i);\n      }\n      if (this.entriesEdge < intervalStart && this.ellipseText) {\n        (newParentVNode.children as VNode[]).push(\n          h(\"span\", {}, this.ellipseText)\n        );\n      }\n    }\n    // Generate interval links\n    for (let i = intervalStart; i < intervalEnd; i++) {\n      this.appendVNode(newParentVNode, i);\n    }\n    // Generate ending points\n    if (intervalEnd < this.totalPages && this.entriesEdge > 0) {\n      if (\n        this.totalPages - this.entriesEdge > intervalEnd &&\n        this.ellipseText\n      ) {\n        (newParentVNode.children as VNode[]).push(\n          h(\"span\", {}, this.ellipseText)\n        );\n      }\n      const begin = Math.max(this.totalPages - this.entriesEdge, intervalEnd);\n      for (let i = begin; i < this.totalPages; i++) {\n        this.appendVNode(newParentVNode, i);\n      }\n    }\n    // Generate \"Next\"-Link\n    if (\n      this.nextText &&\n      (this.currentPage < this.totalPages - 1 || this.nextShowAlways)\n    ) {\n      this.appendVNode(newParentVNode, this.currentPage + 1, {\n        text: this.nextText,\n        classes: \"next\"\n      });\n    }\n    patch(this.parentVNode, newParentVNode);\n    this.parentVNode = newParentVNode;\n  }\n\n  public selectPage(pageID: number, evt?: Event): boolean {\n    this.currentPage = pageID =\n      pageID < 0 ? 0 : pageID < this.totalPages ? pageID : this.totalPages - 1;\n    this.drawLinks();\n    const continuePropagation = this.callback(pageID);\n    if (evt) {\n      if (!continuePropagation) {\n        stopPropagation(evt);\n      }\n    }\n    return continuePropagation;\n  }\n\n  public prevPage(): boolean {\n    return this.selectPage(this.currentPage - 1);\n  }\n\n  public nextPage(): boolean {\n    return this.selectPage(this.currentPage + 1);\n  }\n}\n","import {\n  type CreateStoreEnhancer,\n  type EventBusListeners,\n  type Reducer,\n  type State,\n  type Store,\n  createStore,\n  EventBus,\n  DialogSchedule,\n  type AxiosRequestConfig,\n  type AxiosResponse,\n  type AxiosError,\n  FetchWithAxios\n} from \"@zyzgroup/core-common\";\n\nexport type ContextConfig<E> = {\n  store?: {\n    state?: State;\n    reducer?: Reducer;\n    enhancer?: CreateStoreEnhancer;\n    immutable?: boolean;\n  };\n\n  axios?: {\n    baseURL?: string;\n    // 毫秒\n    timeout?: number;\n    // {\n    //   \"Content-Type\": \"application/json;charset=UTF-8\",\n    //   \"Content-Type\": \"application/x-www-form-urlencoded;charset=UTF-8\",\n    //   \"Content-Type\": \"multipart/form-data\",\n    //   \"Content-Type\": \"application/octet-stream\",\n    //   Accept: \"application/json\",\n    //   Authentication: \"Bearer efded2d72a664f9799e08266d801000c\",\n    // }\n    headers?: {\n      [key: string]: string;\n    };\n    responseType?:\n      | \"arraybuffer\"\n      | \"blob\"\n      | \"document\"\n      | \"json\"\n      | \"text\"\n      | \"stream\";\n    // | \"formdata\";\n    responseEncoding?:\n      | \"ascii\"\n      | \"ASCII\"\n      | \"ansi\"\n      | \"ANSI\"\n      | \"binary\"\n      | \"BINARY\"\n      | \"base64\"\n      | \"BASE64\"\n      | \"base64url\"\n      | \"BASE64URL\"\n      | \"hex\"\n      | \"HEX\"\n      | \"latin1\"\n      | \"LATIN1\"\n      | \"ucs-2\"\n      | \"UCS-2\"\n      | \"ucs2\"\n      | \"UCS2\"\n      | \"utf-8\"\n      | \"UTF-8\"\n      | \"utf8\"\n      | \"UTF8\"\n      | \"utf16le\"\n      | \"UTF16LE\";\n    // 自定义拦截器 request response 监控\n    interceptor?: {\n      request?: (config: AxiosRequestConfig) => void;\n      requestError?: (error: AxiosError) => void;\n      response?: (response: AxiosResponse) => void;\n      responseError?: (error: AxiosError) => void;\n    };\n    // 请求失败时，重新尝试的次数\n    retry?: number;\n    // 请求成功时，结果缓存的秒数\n    cache?: number;\n  };\n\n  // 常量\n  static?: Record<string, string | number | any>;\n};\n\nexport class Context<E extends EventBusListeners = EventBusListeners> {\n  public static: Record<string, string | number | any>;\n  public store: Store;\n  public eb: EventBus<E>; // 多对多\n  public axios: FetchWithAxios;\n  public ds: DialogSchedule;\n\n  constructor(config: ContextConfig<E> = {}) {\n    this.static = config.static || {};\n\n    const state = config.store?.state || {};\n    this.store = createStore({\n      reducer: config.store?.reducer || (() => state),\n      initState: state,\n      enhancer: config.store?.enhancer,\n      immutable:\n        typeof config.store?.immutable == \"boolean\"\n          ? config.store?.immutable\n          : true\n    });\n\n    this.eb = new EventBus<E>();\n\n    this.axios = new FetchWithAxios({\n      baseURL: config.axios?.baseURL,\n      timeout: config.axios?.timeout,\n      headers: config.axios?.headers,\n      responseType: config.axios?.responseType,\n      responseEncoding: config.axios?.responseEncoding,\n      interceptor: config.axios?.interceptor,\n      retry: config.axios?.retry,\n      cache: config.axios?.cache\n    });\n\n    this.ds = new DialogSchedule({ concurrency: 1 });\n  }\n}\n","import { errorLog, readableTimestamp } from \"@zyzgroup/core-common\";\nimport { onDocumentReady } from \"./hooks/useElement\";\n\nexport class WebMonitor {\n  appId: string;\n  reportUrl?: string;\n\n  constructor(options: {\n    appId: string;\n    reportUrl?: string;\n    checkWhiteScreen?: boolean;\n  }) {\n    this.appId = options.appId;\n    this.reportUrl = options.reportUrl;\n    this.listenJSError();\n    this.listenAssetsError();\n    this.listenPromiseError();\n    if (options.checkWhiteScreen) {\n      this.listenWhiteScreenError();\n    }\n  }\n\n  // 捕获绝大多数运行时错误\n  listenJSError() {\n    window.onerror = (message, source, lineno, colno, error) => {\n      const log = {\n        type: \"js_error\",\n        msg: message,\n        file: source,\n        row: lineno,\n        col: colno,\n        stack: error?.stack\n      };\n      this.report(log);\n    };\n  }\n\n  // 资源加载错误\n  listenAssetsError() {\n    window.addEventListener(\n      \"error\",\n      (event) => {\n        const target = event.target;\n        // 排除 JS 报错\n        if (\n          target instanceof HTMLScriptElement ||\n          target instanceof HTMLStyleElement ||\n          target instanceof HTMLImageElement\n        ) {\n          const log = {\n            type: \"resource_error\",\n            filename: (target as any).src || (target as any).href,\n            tagName: target.tagName\n          };\n          this.report(log);\n        }\n      },\n      true // 资源错误不会冒泡\n    );\n  }\n\n  // Promise 报错\n  listenPromiseError() {\n    window.addEventListener(\n      \"unhandledrejection\",\n      (event: PromiseRejectionEvent) => {\n        const log = {\n          type: \"promise_error\",\n          reason: event.reason\n        };\n        this.report(log);\n      }\n    );\n  }\n\n  // 白屏检测\n  listenWhiteScreenError() {\n    // 页面加载 3 秒后检测\n    onDocumentReady(() => {\n      setTimeout(() => {\n        const points = [\n          [window.innerWidth / 2, window.innerHeight / 2], // 中心点\n          [window.innerWidth / 2, window.innerHeight * 0.2], // 上\n          [window.innerWidth / 2, window.innerHeight * 0.8], // 下\n          [window.innerWidth * 0.2, window.innerHeight / 2], // 左\n          [window.innerWidth * 0.8, window.innerHeight / 2] // 右\n          // ... 可以多取几个点\n        ];\n\n        let wrapperElements = 0;\n\n        points.forEach((point) => {\n          const [x, y] = point;\n          // 获取坐标处的元素列表\n          const elements = document.elementsFromPoint(x, y);\n          const topElement = elements[0]; // 最上层元素\n\n          // 如果最上层是 body 或 html 或 骨架屏的那个div，说明没内容覆盖\n          if (\n            topElement?.tagName === \"BODY\" ||\n            topElement?.tagName === \"HTML\"\n          ) {\n            // UNDO : 骨架屏检查\n            wrapperElements++;\n          }\n        });\n\n        // 如果 80% 的采样点都是空壳，判定白屏\n        if (wrapperElements >= points.length * 0.8) {\n          const log = {\n            type: \"whitescreen_error\",\n            reason: \"检测到白屏！\"\n          };\n          this.report(log);\n        }\n      }, 3000);\n    });\n  }\n\n  // 数据上报：别用 AJAX\n  // 如果页面正在关闭或卸载（用户看到白屏气得关网页），AJAX 请求很可能会被浏览器切断（Canceled），导致上报失败\n  // 标准方案：navigator.sendBeacon\n  // 不占用主线程：它把数据放入浏览器的传输队列，浏览器会在空闲时发送。\n  // 页面关闭也能发：即使用户强制关闭 Tab，浏览器也会保证把这条请求发出去。\n  report(data: Record<string, any>) {\n    const payload = JSON.stringify({\n      ...data,\n      appId: this.appId,\n      time: readableTimestamp()\n    });\n    // errorLog(payload);\n    console.error(payload);\n    if (this.reportUrl) {\n      navigator.sendBeacon(this.reportUrl, payload);\n    }\n  }\n}\n"],"names":["ns","rs","e","n","r","T","Bn","qn","Wn","Ue","ze","Hn","ht","hn","ve","Re","ss","je","is","J","Zt","as","cs","ct","Rt","Be","Ua","s","rt","Ha","Za","i","fs","tc","ds","ec","hc","qe","bc","V","Et","ys","Gn","Ss","As","Y","xs","dt","Nc","_s","Uc","jc","Xn","et","Hc","ai","Os","fn","Yc","Ve","ks","Ps","g1","O1","Yt","K","B1","Ft","N","W1","Ut","mt","J1","du","pu","mu","gt","Xe","E","Bs","qs","Zs","c","Qn","I","u","tr","l","er","nr","rr","Qs","ti","sr","ir","ei","ni","ri","$","ci","Je","Q","zt","yt","ar","li","Ye","j","U","M","Qu","kt","di","g2","v2","cr","o","C2","L2","N2","Si","U2","X2","Y2","K2","Ke","Ee","Qe","Tt","Qt","te","P","Bi","Ae","wn","tn","m","h","p","d","g","bn","dr","pr","Ce","mr","Fe","qi","en","Gi","ke","Wi","xe","Hi","Nt","Vi","nn","Xi","gr","Yi","Sn","Ji","Sl","Ot","Al","Ao","An","qt","_o","br","a","Ol","No","Uo","Tr","zo","vr","ah","jo","Rr","bh","Wo","Er","Oh","Cr","Xo","sn","pe","B","me","wt","vt","Zo","L","Fr","Jo","Yo","kr","ge","Ko","Wt","Qo","t0","e0","n0","r0","s0","i0","o0","a0","c0","u0","l0","Pt","Pr","ot","Dr","Pe","h0","f0","d0","p0","m0","g0","y0","w0","b0","S0","A0","_n","x0","Mr","_0","O0","T0","v0","R0","E0","C0","F0","Lr","k0","f","b","Ir","$r","P0","De","Nr","On","D0","M0","t","ye","y","w","x","O","S","Tn","on","Ur","L0","zr","I0","vn","jr","$0","N0","U0","z0","an","Me","j0","B0","q0","W0","k","H0","V0","G0","Br","X0","cn","un","Z0","J0","Rn","At","Ht","Y0","K0","_e","Q0","ta","we","z","Oe","qr","bt","Wr","ea","na","ra","oe","En","Cn","sa","ia","oa","aa","Hr","Fn","at","Vr","ca","ua","A","_","la","ha","fa","da","pa","kn","be","Gr","ma","Xr","ga","Pn","Le","ae","ya","wa","ba","C","G","X","Ie","Dn","Sa","Zr","Te","Mn","Jr","Se","Ln","Aa","Vt","q","ce","Gt","ln","xa","_a","Oa","$e","Ta","Yr","R","va","Rh","Ra","kh","Ne","Qr","ue","jn","factory","module","undefined","hex_chr","md5cycle","md5blk","md5blks","md5blk_array","md51","state","length","tail","tmp","lo","hi","md51_array","rhex","hex","clamp","val","from","to","begin","end","num","target","targetArray","sourceArray","toUtf8","str","utf8Str2ArrayBuffer","returnUInt8Array","buff","arr","arrayBuffer2Utf8Str","concatenateArrayBuffers","first","second","result","hexToBinaryString","bytes","SparkMD5","contents","raw","ret","content","hash","isBrowserSupportFileAPI","hasWindow","querySelectorAllToStringArray","query","oScript","DOMToString","el","stringToDOM","type","DOMToBlob","options","MIMEEnum","EncodeEnum","toBlob","selectFileInBrowser","accepts","multiple","files","input","resolve","reject","readFileInBrowser","file","ReadInBrowserEnum","progressCb","reader","getFileTypeFromFile","arrayBuffer","getFileTypeFromArrayBuffer","getFileExtension","fileName","getMIME","name","readFileMD5Hash","spark","chunkSize","start","fileReader","getFileMD5Hash","FileUpload","FetchWithAxios","response","blob","fd","increaseTime","formatTimeOverflow","window","document","exportName","VENDOR_PREFIXES","TEST_ELEMENT","TYPE_FUNCTION","round","abs","now","setTimeoutContext","timeout","context","bindFn","invokeArrayArg","arg","each","obj","iterator","deprecate","method","message","deprecationMessage","stack","log","assign","output","index","source","nextKey","extend","dest","src","merge","keys","inherit","child","base","properties","baseP","childP","boolOrFn","args","ifUndefined","val1","val2","addEventListeners","types","handler","splitStr","removeEventListeners","hasParent","node","parent","inStr","find","inArray","findByKey","toArray","uniqueArray","key","sort","results","values","prefixed","property","prefix","prop","camelProp","_uniqueId","uniqueId","getWindowForElement","element","doc","MOBILE_REGEX","SUPPORT_TOUCH","SUPPORT_POINTER_EVENTS","SUPPORT_ONLY_TOUCH","INPUT_TYPE_TOUCH","INPUT_TYPE_PEN","INPUT_TYPE_MOUSE","INPUT_TYPE_KINECT","COMPUTE_INTERVAL","INPUT_START","INPUT_MOVE","INPUT_END","INPUT_CANCEL","DIRECTION_NONE","DIRECTION_LEFT","DIRECTION_RIGHT","DIRECTION_UP","DIRECTION_DOWN","DIRECTION_HORIZONTAL","DIRECTION_VERTICAL","DIRECTION_ALL","PROPS_XY","PROPS_CLIENT_XY","Input","manager","callback","self","ev","createInputInstance","Type","inputClass","PointerEventInput","TouchInput","TouchMouseInput","MouseInput","inputHandler","eventType","pointersLen","changedPointersLen","isFirst","isFinal","computeInputData","session","pointers","pointersLength","simpleCloneInputData","firstInput","firstMultiple","offsetCenter","center","getCenter","getAngle","getDistance","computeDeltaXY","getDirection","overallVelocity","getVelocity","getScale","getRotation","computeIntervalInputData","offset","prevDelta","prevInput","last","deltaTime","velocity","velocityX","velocityY","direction","deltaX","deltaY","v","p1","p2","props","MOUSE_INPUT_MAP","MOUSE_ELEMENT_EVENTS","MOUSE_WINDOW_EVENTS","POINTER_INPUT_MAP","IE10_POINTER_TYPE_ENUM","POINTER_ELEMENT_EVENTS","POINTER_WINDOW_EVENTS","store","removePointer","eventTypeNormalized","pointerType","isTouch","storeIndex","SINGLE_TOUCH_INPUT_MAP","SINGLE_TOUCH_TARGET_EVENTS","SINGLE_TOUCH_WINDOW_EVENTS","SingleTouchInput","touches","normalizeSingleTouches","all","changed","TOUCH_INPUT_MAP","TOUCH_TARGET_EVENTS","getTouches","allTouches","targetIds","targetTouches","changedTouches","changedTargetTouches","touch","DEDUP_TIMEOUT","DEDUP_DISTANCE","inputEvent","inputData","isMouse","recordTouches","isSyntheticEvent","eventData","setLastTouch","lastTouch","lts","removeLastTouch","dx","dy","PREFIXED_TOUCH_ACTION","NATIVE_TOUCH_ACTION","TOUCH_ACTION_COMPUTE","TOUCH_ACTION_AUTO","TOUCH_ACTION_MANIPULATION","TOUCH_ACTION_NONE","TOUCH_ACTION_PAN_X","TOUCH_ACTION_PAN_Y","TOUCH_ACTION_MAP","getTouchActionProps","TouchAction","value","actions","recognizer","cleanTouchActions","srcEvent","hasNone","hasPanY","hasPanX","isTapPointer","isTapMovement","isTapTouchTime","touchMap","cssSupports","STATE_POSSIBLE","STATE_BEGAN","STATE_CHANGED","STATE_ENDED","STATE_RECOGNIZED","STATE_CANCELLED","STATE_FAILED","Recognizer","otherRecognizer","simultaneous","getRecognizerByNameIfManager","requireFail","emit","event","stateStr","inputDataClone","directionStr","AttrRecognizer","optionPointers","isRecognized","isValid","PanRecognizer","hasMoved","distance","PinchRecognizer","inOut","PressRecognizer","validPointers","validMovement","validTime","RotateRecognizer","SwipeRecognizer","TapRecognizer","validTouchTime","validInterval","validMultiTap","tapCount","Hammer","Manager","STOP","FORCED_STOP","toggleCssProps","item","force","recognizers","curRecognizer","existing","events","handlers","data","triggerDomEvent","add","gestureEvent","freeGlobal","define","extendStatics","__extends","__","__awaiter","thisArg","_arguments","generator","adopt","fulfilled","step","rejected","__generator","body","verb","op","__values","__read","error","__spreadArray","pack","__await","__asyncGenerator","awaitReturn","resume","settle","fulfill","__asyncValues","isFunction","createErrorClass","createImpl","_super","instance","ctorFunc","UnsubscriptionError","errors","err","arrRemove","Subscription","initialTeardown","e_1","e_2","_b","_parentage","_parentage_1","_parentage_1_1","parent_1","e_1_1","initialFinalizer","_finalizers","_finalizers_1","_finalizers_1_1","finalizer","execFinalizer","e_2_1","teardown","empty","EMPTY_SUBSCRIPTION","isSubscription","config","timeoutProvider","_i","delegate","handle","reportUnhandledError","noop","errorContext","cb","Subscriber","destination","_this","EMPTY_OBSERVER","next","complete","SafeSubscriber","_bind","bind","ConsumerObserver","partialObserver","handleUnhandledError","observerOrNext","context_1","defaultErrorHandler","observable","identity","pipeFromArray","fns","prev","Observable","subscribe","operator","subscriber","isSubscriber","sink","promiseCtor","getPromiseCtor","Symbol_observable","operations","isObserver","hasLift","operate","init","liftedSource","createOperatorSubscriber","onNext","onComplete","onError","onFinalize","OperatorSubscriber","shouldUnsubscribe","closed_1","ObjectUnsubscribedError","Subject","subject","AnonymousSubject","_c","observer","observers","hasError","isStopped","thrownError","BehaviorSubject","_value","subscription","dateTimestampProvider","ReplaySubject","_bufferSize","_windowTime","_timestampProvider","_buffer","_infiniteTimeWindow","copy","adjustedBufferSize","Action","scheduler","work","delay","intervalProvider","AsyncAction","id","_id","_scheduler","_delay","errored","errorValue","Scheduler","schedulerActionCtor","AsyncScheduler","SchedulerAction","action","asyncScheduler","async","EMPTY","isScheduler","popResultSelector","popScheduler","popNumber","defaultValue","isArrayLike","isPromise","isInteropObservable","isAsyncIterable","createInvalidObservableTypeError","getSymbolIterator","isIterable","Symbol_iterator","readableStreamLikeToAsyncGenerator","readableStream","done","isReadableStreamLike","innerFrom","fromInteropObservable","fromArrayLike","fromPromise","fromAsyncIterable","fromIterable","fromReadableStreamLike","obs","array","promise","iterable","iterable_1","iterable_1_1","asyncIterable","process","asyncIterable_1","asyncIterable_1_1","executeSchedule","parentSubscription","repeat","scheduleSubscription","observeOn","subscribeOn","scheduleObservable","schedulePromise","scheduleArray","scheduleIterable","scheduleAsyncIterable","scheduleReadableStreamLike","scheduled","of","EmptyError","firstValueFrom","hasConfig","isValidDate","map","project","isArray","callOrApply","mapOneOrManyArgs","getPrototypeOf","objectProto","getKeys","argsArgArrayOrObject","first_1","isPOJO","createObject","combineLatest","resultSelector","observables","combineLatestInit","valueTransform","maybeSchedule","active","remainingFirstValues","_loop_1","hasFirstValue","execute","mergeInternals","concurrent","onBeforeNext","expand","innerSubScheduler","additionalFinalizer","buffer","isComplete","checkComplete","outerNext","doInnerSub","innerComplete","innerValue","bufferedValue","mergeMap","ii","mergeAll","concatAll","concat","nodeEventEmitterMethods","eventTargetMethods","jqueryMethods","fromEvent","eventName","isEventTarget","methodName","isNodeStyleEventEmitter","toCommonHandlerRegistry","isJQueryStyleEventEmitter","remove","subTarget","fromEventPattern","addHandler","removeHandler","retValue","timer","dueTime","intervalOrScheduler","intervalDuration","due","sources","argsOrArgArray","filter","predicate","race","raceInit","subscriptions","distinctUntilChanged","comparator","keySelector","defaultCompare","previousKey","currentKey","exhaustMap","innerSub","outerValue","share","connector","resetOnError","resetOnComplete","_d","resetOnRefCountZero","wrapperSource","connection","resetConnection","refCount","hasCompleted","hasErrored","cancelReset","reset","resetAndUnsubscribe","conn","handleReset","onSubscriber","shareReplay","configOrBufferSize","windowTime","bufferSize","startWith","switchMap","innerSubscriber","innerIndex","outerIndex","switchAll","takeUntil","notifier","tap","tapObserver","isUnsub","throttle","durationSelector","leading","trailing","hasValue","sendValue","throttled","endThrottling","send","cleanupThrottling","startThrottle","throttleTime","duration","duration$","windowToggle","openings","closingSelector","windows","handleError","openValue","closingSubscription","closeWindow","closingNotifier","windowsCopy","windowsCopy_1","windowsCopy_1_1","window_1","getEventCurrentTarget","useEventListener","useCapture","eventHandler","useParentEventListener","removeAllEventListeners","useEvent$","createFromEventPattern","preventDefault","stopPropagation","MouseEvents","KeyboardEvents","TouchEvents","PointerEvents","DragEvents","Events","createEvent","dispatchEvent","dispatchEventFromEvent","dispatchClickFromEvent","simulateEventFromTouch","touchEvent","rAF","cAF","lastTime","currTime","timeRemain","requestAnimationFrameCycle","isCancel","frame","time","setTimeoutAccurate","startTime","setIntervalAccurate","interval","count","cancel","createRunCycleInMaxRate","task","fps","lastResult","diff","scheduleIdle","deadline","frameStartTimestamp","frameEndTimestamp","previousFrameDuration","activeFrameDuration","currentCallback","currentTimeout","channel","port","requestIdleCallbackDynamic","currentFrameDuration","schedule","ScheduleDependOnResult","isCalled","scheduleIdleAsap","createTask","milliseconds","Sequence","Easing","power","numSteps","easingFunction","randomProportion","normalProportion","reverseEasing","easing","NEWTON_ITERATIONS","NEWTON_MIN_SLOPE","SUBDIVISION_PRECISION","SUBDIVISION_MAX_ITERATIONS","kSplineTableSize","kSampleStepSize","float32ArraySupported","aA1","aA2","calcBezier","aT","getSlope","binarySubdivide","aX","aA","aB","mX1","mX2","currentX","currentT","newtonRaphsonIterate","aGuessT","currentSlope","LinearEasing","BezierEasing","mY1","mY2","sampleValues","getTForX","intervalStart","currentSample","lastSample","dist","guessForT","initialSlope","easeNameToCubicBezier","easeName","reverseEaseNameToCubicBezier","x1","y1","x2","y2","CSSToJSEasing","reverseCSSToJSEasing","Interpolation","fc","p3","v1","t2","t3","pw","Group","tweenId","tween","preserve","tweenIds","autoStart","mainGroup","Tween","_object","_group","_valuesStart","_valuesEnd","_valuesStartRepeat","startValue","startValueIsArray","propType","isInterpolationList","endValues","numChainedTweens","group","amount","times","yoyo","interpolationFunction","tweens","elapsed","endTime","startIsArray","endIsArray","endValue","nextId","getAll","removeAll","update","TWEEN","Clock","newTime","Timeline","reverse","ShellSort","clones","fromValues","toValues","tweenConfig","clock","frameDuration","deleteArrayItem","isContinue","reverseTweens","maxFrames","temp","globalVNodeCache","HashTable","getVnode","cache","vnode","hFromEl","updateVnode","mergeObjectDeep","patchVnode","alternate","patch","scheduleVnodeImmediately","scheduleVnodeAsap","computeImageDisplayRect","mode","sourceWidth","sourceHeight","containerWidth","containerHeight","sourceAspectRatio","showWidth","showHeight","getImageData","image","canvas","ctx","imageDataToBitmap","imageData","biWidth","biHeight","biSizeImage","bfSize","BITMAPFILEHEADER","BITMAPINFOHEADER","iPadding","aImgData","strPixelData","biWidth4","fromCharCode","iOffsetY","strPixelRow","iOffsetX","encodeData","imageDataToDataURL","width","height","imageDataToBlob","exportImageType","toImageType","blobToImageData","getImageMainColor","arrR","arrG","arrB","len","_getArryWeightValue","existArr","duplicationArr","duplicationCount","max","maxIndex","flipSideToSide","newImgData","startIndex","flipUpsideDown","leftRotate","rightRotate","toGrey","avgColor","toGrey2","toBlackAndWhite","newColor","toOpposite","toRed","toGreen","toBlue","toRedAndGreen","toRedAndBlue","toBlueAndGreen","toRedAndGrey","greyColor","toGreenAndGrey","toBlueAndGrey","sharpen","convolutionMatrix","marginSharpen","jpgToPng","pngToJpg","colorStacks","rectClip","newWidth","newHeight","top","left","retainOriginalSize","imageType","finalLeft","finalTop","finalWidth","finalHeight","startIndex2","radiusClip","borderRadius","jpgToPNG","finalRadius","changeSize","imgUrl","maxWidthHeight","img","changeBrightness","changeNum","changeDiaphaneity","fixedDiaphaneity","addWatermark","watermarkImageData","watermarkData","watermarkWidth","watermarkHeight","watermarkStartIndex","aboveColor","belowColor","finalColor","mosaic","mosaicWidth","mosaicHeight","mosaicSize","boxXIndex","boxYIndex","mosaicBoxColorX","mosaicBoxColorY","mosaicBoxColorIndex","getImageDataByAIData","originalImageData","AIImageData","AIData","backgroundColor","changeIntoColor","kernel","aboveA","belowA","aboveDiaphaneity","belowDiaphaneity","newColorR","newColorG","newColorB","newColorA","byteArrayOutputStream","_bytes","ab","off","base64EncodeOutputStream","_buflen","_length","_base64","encode","writeEncoded","padlen","gifImage","size","foreground","background","_data","bitOutputStream","out","_out","_bitLength","_bitBuffer","getLZWRaster","lzwMinCodeSize","clearCode","endCode","bitLength","table","lzwTable","byteOut","bitOut","dataIndex","_map","_size","pixel","radixStringToNumber","raster","outputGifBase64","getPixel","gif","base64","QRMode","QRErrorCorrectLevel","QRMaskPattern","QRMath","QRUtil","digit","typeNumber","maskPattern","errorCorrectLength","QRPolynomial","qrCode","moduleCount","lostPoint","row","col","sameCount","dark","darkCount","ratio","shift","QRRSBlock","totalCount","dataCount","errorCorrectLevel","rsBlock","list","QRBitBuffer","bufIndex","bit","QR8bitByte","QRCode","newData","rsBlocks","totalDataCount","test","minLostPoint","pattern","target_mc","instance_name","depth","qr_mc","pos","bits","mod","inc","bitIndex","byteIndex","dataList","maxDcCount","maxEcCount","dcdata","ecdata","dcCount","ecCount","rsPoly","modPoly","modIndex","totalCodeCount","MathC","MathF","MathR","outputQRCodeBase64","text","txt","utf16to8","ecc","padding","qrcode","min","drawQRCodeToCanvas","toRadian","degree","toDegree","radian","angle","startX","startY","endX","endY","polar","normalizePoint","minDistance","Quaternion","dst","dstOffset","src0","srcOffset0","src1","srcOffset1","z1","w1","cos","dir","sqrSin","sin","tDir","quaternion","euler","order","c1","c2","c3","s1","s2","s3","axis","halfAngle","m11","m12","m13","m21","m22","m23","m31","m32","m33","trace","vFrom","vTo","qax","qay","qaz","qaw","qbx","qby","qbz","qbw","qb","cosHalfTheta","sqrSinHalfTheta","sinHalfTheta","halfTheta","ratioA","ratioB","qa","theta1","theta2","r1","r2","attribute","Vector2","scalar","minVal","maxVal","denominator","_v2","theta","alpha","Vector3","_quaternion","vx","vy","vz","qx","qy","qz","qw","tx","ty","tz","ax","ay","az","bx","by","bz","_v3","planeNormal","normal","dz","sx","sy","sz","Vector4","xx","yy","zz","xy","xz","yz","namedEntities","createNamedToNumberedLookup","itemsString","radix","lookup","items","entity","base10","format","randomString","holder","randomstring","chars","getTextAnchor","textAlign","mapping","getDominantBaseline","textBaseline","STYLES","CustomCanvasGradient$1","gradientNode","color","stop","matches","CustomCanvasPattern$1","CustomCanvasContext$1","CustomCanvasContext","styleState","elementName","resetFill","currentElement","currentStyleGroup","style","CustomCanvasPattern","CustomCanvasGradient","opacity","globalAlpha","attr","fixNamedEntities","serialized","regexp","transform","degrees","path","command","cp1x","cp1y","cp2x","cp2y","cpx","cpy","vector","radius","unit_vec_p1_p0","unit_vec_p1_p2","unit_vec_p1_origin","len_p1_origin","unit_vec_origin_start_tangent","unit_vec_origin_end_tangent","startAngle","endAngle","rect","rootGroup","childNodes","grad","fontPart","font","textElement","counterClockwise","sweepFlag","largeArcFlag","clipPath","newGroup","dw","dh","sw","sh","svg","defs","svgImage","translateDirective","originTransform","transformDirective","repetition","dashArray","YZCanvasContext$1","enableCustomContext","lineWidth","lineCap","lineJoin","lineDashOffset","miterLimit","maxWidth","newPath","centerX","centerY","radiusX","radiusY","rotation","colorStops","gradient","settings","serializedSVG","svgElement","L$2","lineAngle","minX","minY","maxX","maxY","x1r","x2r","y1r","y2r","line","x4","y4","dx1","dx2","m1","m2","xInt","yInt","Arc$2","cx","cy","rx","ry","xAxisRotate","phi","x_m","y_m","x1_d","y1_d","radius_check_value","r_sq","sq","cx_d","cy_d","x_m_d","y_m_d","vectorAngle","ux","uy","theta_1","delta_theta","QuadraticBezier$3","c1x","c1y","xArr","yArr","CubicBezier$2","CubicBezier","t1","dot","dots","dots2","p4","x3","y3","z2","Tvalues","Cvalues","sum","xbase","ybase","ll","t13","t12","mx","my","nx","ny","TAU","unit_vector_angle","sign","get_arc_center","sin_phi","cos_phi","x1p","y1p","rx_sq","ry_sq","x1p_sq","y1p_sq","radicant","cxp","cyp","v1x","v1y","v2x","v2y","approximate_unit_arc","a2c","lambda","cc","segments","curve","xp","yp","q2c","l2c","SVGParsedPathArgsLength","DOMSVGUtil","tagName","attrs","useAttribute","generateUUID","svgContainer","useClickA","svgString","substring","argsString","extractAllNumbers","seg","quadX","quadY","bezierX","bezierY","prevCommand","curves","crp","iLen","bp","startPoint","lastPoint","pt","conversion","cmd","convert","PathD$1","PathD","originMatrix","paths","isResetStart","points","lines","Arc","toX","toY","QuadraticBezier","startPathX","startPathY","normalizedLines","xmin","ymin","xmax","ymax","Matrix","c2x","c2y","acc","linesCount","onlystart","sp","point","pointX","pointY","pathLength","best","bestLength","bestDistance","precision","scanLength","scan","scanDistance","beforeLength","before","beforeDistance","afterLength","after","afterDistance","pts","totalLength","nsLength","needAdded","alen","maxDotNumber","right","EventBus","sourceDashArray","reactive","cX","cY","watchEffect","mouse","YZCanvasContext","newConstructor","shape","nameOrObj","toKebab","distSQ","gravity","parseNumber","friction","spring","springLength","trail","progress","pathd","prevOnUpdate","tl","coords","Point3D","Shape","vpX","vpY","cZ","degX","rotatePoint","degY","degZ","scale","dp","Point3D$1","WebGLCoordinateSystem","WebGPUCoordinateSystem","DEFAULT_MATRIX2_VALUE","DEFAULT_MATRIX_VALUE","DEFAULT_MATRIX3_VALUE","DEFAULT_MATRIX4_VALUE","Matrix2","n11","n12","n21","n22","a11","a12","a21","a22","b11","b12","b21","b22","Matrix3","n13","n23","n31","n32","n33","xAxis","yAxis","zAxis","a13","a23","a31","a32","a33","b13","b23","b31","b32","b33","t11","det","detInv","matrix4","_m3","matrix","Matrix4","n14","n24","n34","n41","n42","n43","n44","regMatchAll","scalarX","scalarY","skewX","skewY","fractionalDigits","scalarZ","degreeY","degreeX","degreeZ","scaleX","scaleY","scaleZ","af","bf","cf","de","df","ac","ad","bd","_zero","_one","eye","up","_z","_x","_y","a14","a24","a34","a41","a42","a43","a44","b14","b24","b34","b41","b42","b43","b44","t14","scaleXSq","scaleYSq","scaleZSq","yx","zx","zy","bottom","near","far","coordinateSystem","zInv","position","wx","wy","wz","_m4","invSX","invSY","invSZ","perspective","ptA","ptB","ptC","ptD","width2","height2","a00","a01","a02","a10","a20","b01","D","F","AD","BC","H","deg","rad","targetDeg","targetX","targetY","targetZ","targetSx","targetSy","degx","degy","degz","parseTransformToMatrix","matchString","getDOMMatrix","transformPath2D","pathString","path2d","denormalize","normalize","BufferAttribute","itemSize","normalized","cloneTypedArray","index1","index2","component","Int8BufferAttribute","Uint8BufferAttribute","Uint8ClampedBufferAttribute","Int16BufferAttribute","Uint16BufferAttribute","Int32BufferAttribute","Uint32BufferAttribute","Float32BufferAttribute","bitmapMapper","bitmap","canUseBitmap","getBitmapFromCanvas","drawBitmapInCanvas","domPrefixes","atomWriteStyle","animate","easingFn","destTime","newX","newY","isElement","createObjectURL","revokeObjectURL","url","onDocumentReady","check","remove1","remove2","onBeforeUnload","useLoadScript","ms","script","blobOrUrl","useLoadLink","link","waitForStyleSheetsLoaded","links","loadedCount","stylesheet","caches","Cache","useLoadImage","finalUrl","cached","rawImageInfo","useSelectFile","readType","useSelectFileImage","getSelectedText","setWindowTitle","title","vibrate","useClipboard","textArea","scrollTo","setManualScroll","isRootEl","isActiveEl","getRemSize","rem2px","rem","getEmSize","nearestElement","elm","parents","ps","scrollParent","getStyle","containsChild","siblings","nextElementSibling","previousElementSibling","closest","selector","shadowRoot","isInput","isSelect","isTextArea","isInputCheckbox","isInputRadio","isInputText","isInputNumber","changeSelected","selectedValue","changeRadioChecked","checkedValue","option","changeCheckboxChecked","checked","insert","html","createFragment","newEl","scriptConvert","getInnerText","copyText","slots","toggleElDisplay","showEl","hideEl","setStyle","toggleClass","className","act","classNames","singleClassName","exists","isUpdate","atomWriteAttribute","addClass","removeClass","hasClass","tmpl","newNode","createElement","createElementNS","createTextNode","iframePostMessage","targetOrigin","iframe","runInSandbox","code","proxyWindow","receiver","createXMLHttpRequest","xhr","versions","ajax","multipartFormDataString","boundary","headers","withCredentials","responseType","percentage","methodUpperCase","isMultipartFormData","isTextPlain","isSendJSON","setHeaders","headerType","dataString","formDataToSearch","recordToSearch","appendURL","getFormSubmitData","formElement","elementType","fileElement","fileBinaryString","commonElement","getPrefixedStyleNames","styleName","names","pseudo","toCamel","atomReadStyles","justInlineStyle","styles","readStyleFromStyles","prefixedProps","prefixedPropsCount","prefixedProp","atomReadStyle","atomRemoveStyle","injectStyle","styleSheetInnerText","dom","CSSRule","RuleList","propertyName","getStyleSheets","styleSheets","styleNodes","sheetCssText","getRules","ruleLists","rules","parsedRule","splitProperty","atomReadAttributes","atomReadAttribute","atomRemoveAttribute","cssAttrsToCanvasAttrs","isSupportTouch","isSupportPointer","isSupportEvent","nodeName","isSupported","createDefaultMousePoint","useMousePoint","startMousePoint","currentMousePoint","isDown","mouseMove$","mouseDown$","mouseUp$","mouseOver$","mouseOut$","mouseEnter$","mouseLeave$","mouseClick$","mouseDoubleClick$","mouseWheel$","mouseContextMenu$","touchMove$","touchStart$","touchEnd$","touchCancel$","pointerMove$","pointerDown$","pointerUp$","pointerCancel$","pan$","hammer","panMove$","panStart$","panEnd$","panCancel$","panLeft$","panRight$","panUp$","panDown$","pinch$","pinchIn$","pinchOut$","press$","rotate$","swipe$","swipeLeft$","swipeRight$","swipeUp$","swipeDown$","tap$","tapOutSide$","transitionStart$","transitionEnd$","animationStart$","animationEnd$","drag$","dragStart$","dragEnd$","drop$","dragEnter$","dragLeave$","dragOver$","keyDown$","keyUp$","keyPress$","useMouseMovePoint$","mpg","getMousePositionInElement","useMouseDownMovePoint$","useTouchDownMovePoint$","usePointerDownMovePoint$","useCompatableDownMovePoint$","useMouseAndPointerDownMovePoint$","usePull$","useDraggable","dragStartSubscription","dragSubscription","dragEndSubscription","useDrop","dragEnterSubscription","dragOverSubscription","dragLeaveSubscription","dropSubscription","useScroll$","useDocumentVisible$","storage$","getWindow","getDocumentElement","getViewport","clientWidth","clientHeight","scrollLeft","scrollTop","getPage","scrollWidth","scrollHeight","getElementPositionInViewport","getRelativeBoundingClientRect","getElementPositionInPage","getElementPositionInPage2","elem","actualLeft","actualTop","getVerticalScrollTopPercentInPage","isInViewport","viewport","getMousePositionInViewport","getMousePositionInPage","fixedOffsetX","fixedOffsetY","currentTargetRect","targetRect","getScrollWheelDelta","delta","getMouseButton","CommonKeyCode","Key","getKeyCode","matchHotKeyScheme","ctrlKey","shiftKey","altKey","useHotKeyDown$","useHotKeyUp$","useHotKeyFile$","hotKeyOptions","useHotKeyFile","useResize","entries","useResize$","prevX","prevY","prevWidth","prevHeight","ro","useWindowResize$","useElementEventBus","eb","removes","ump","mousePoint","mouseDown","mouseUp","mouseMove","mouseOver","mouseOut","mouseEnter","mouseLeave","mouseClick","mouseDoubleClick","mouseWheel","mouseContextMenu","touchStart","touchEnd","touchCancel","touchMove","pointerDown","pointerUp","pointerCancel","pointerMove","pan","panStart","panMove","panEnd","panCancel","panLeft","panRight","panUp","panDown","pinch","pinchin","pinchout","press","rotate","swipe","swipeLeft","swipeRight","swipeUp","swipeDown","tapOutSide","transitionstart","transitionend","animationstart","animationend","_rect","usePressDownMove","controller","usePressDownMoveWithPointer","move","usePressDownMoveWithMouse","usePressDownMoveWithTouch","L$1","QuadraticBezier$1","createSVGElement","createSvgPath","isSVGElementPath","downloadFromSVGElement","isSVGPath","SVGPathDataToD","parseSVGPath","absolutizeSVGPath","normalizeSVGPath","DOMVideo","video","mediaStream","stream","mediaSource","setAutoPlay","DOMParse","sourceString","stringLength","current","charAt","regTest","entity2text","entities","commentre","parseCSS","css","lineno","column","updatePosition","Position","whitespace","errorsList","msg","rulesList","open","match","close","comments","atrule","rule","re","comment","trim","declaration","declarations","decls","decl","keyframe","vals","atkeyframes","vendor","frames","atsupports","supports","athost","atmedia","media","atcustommedia","atpage","sel","atdocument","atfontface","atimport","_compileAtrule","atcharset","atnamespace","addParent","isNode","childParent","tagname","parsedCSS","groupTransform","groupStyle","applyStyle","SVGAttributeRange","viewBoxs","pair","letter","fromLength","toLength","margin","withinErrorMarginNumber","getStart","isReached","firstLine","maxPoints","maxCount","needAddedCount","lerps","enablePath2D","prevScaleX","prevScaleY","centerXSelf","centerYSelf","tos","forceSelf","parentRectCenter","selfRectCenter","invertedMatrix","targetWidth","targetHeight","targetCenterX","targetCenterY","pos0","pos1","vel0","vel1","vxTotal","absV","overlap","pos0F","pos1F","vel0F","vel1F","bounce","st","ShapeCombo","svgWidth","svgHeight","SVGParse","aspectRatio","pathDatas","allCount","shapeCombo","justChild","larger","largeLen","smallLen","extractNumber","followMouseShape","targetToAfterDropShape","animateShapes","shapes","alphas","numParticles","getShapesInterpolator","hlen","pathd1","pathd2","pathd1Points","pathd2Points","flr","getShapeCombosInterpolator","shapeCombos","maxShapeCombo","combos","combo","shapess","interpolators","interpolator","polymorphTween","shapeOrCombo","COLOR_NAMES","Color","forceAlpha","ErrMsg","components","colorSpace","SRGBColorSpace","ColorManagement","__color","SRGBToLinear","LinearToSRGB","color1","color2","bw","blackColor","whiteColor","_h","_l","euclideanModulo","hue2rgb","hue","saturation","lightness","hsl","hsla","hslb","lerp","_v","NoColorSpace","LinearSRGBColorSpace","LinearTransfer","SRGBTransfer","LINEAR_REC709_TO_XYZ","XYZ_TO_LINEAR_REC709","REC709_PRIMARIES","REC709_LUMINANCE_COEFFICIENTS","D65","sourceColorSpace","targetColorSpace","colorSpaces","targetMatrix","DrawContext","PARENT_EL","cursor","frameShapes","flushArray","isEmptyObject","closestPoint","brushSize","brushColor","hasSetMoveTo","brushDensity","brushColorNumber","pixels","xpos","ypos","LineShape","lineLength","startColor","endColor","l1","l2","CurveShape","PointsShape","numPoints","ctrlPoint1X","ctrlPoint1Y","ctrlPointX","ctrlPointY","isInside","sideDistance","sideCount","TreeShapeCombo","line1","line2","line3","BallShape","ball","ArrowShape","RectShape","p1x","p1y","p2x","p2y","HeartShape","HeartVariantShape","StarShape","FoxShape","RabbitShape","CrossShape","EllipseShape","ShipShapeCombo","SegmentShapeCombo","mainRect","controlPoint","rightPoint","SliderShapeCombo","stepFunc","stepMap","percent","rectWidth","rectHeight","rectBorderRadius","ballRadius","foregroundColor","backgroundRect","occupyRect","dX","RingShape","extendDegree","fromX","fromY","dY","RingIndicatorShapeCombo","lineDegree","TextShape","fontSize","fontWeight","texts","lineHeight","tspan","metrics","span","gap","returnText","nowWidth","ConfettiShapeCombo","shapeCreator","particleCount","spread","startVelocity","decay","drift","ticks","colors","flat","addShapeAttributes","fillColor","radAngle","radSpread","sc","fetti","useMutation$","mo","records","waitElementAddedInDOM","mutationsList","mutation","useIntersection$","io","entry","useVisibleSimple$","useVisible$","threshold","isInjected","inject","useSafeArea$","useCoords$","watchId","useMatchMedia$","mediaQueryList","useSessionStorage","getInDom","fromLocal","parse","setInDom","timestampValue","stringify","getTimestampValue","useTimestampValue","setTimestampValue","clearSessionStorage","useLocation$","useUrlChange$","location","useHashChange$","hashEvent","usePopStateChange$","nameInState","popStateEvent","useFeRoute","alreadyPushState","getHistoryInSession","setHistoryInSession","history","getHistoryIndexInSession","setHistoryIndexInSession","initIndex","currentIndex","findIndexInHistory","route","setCurrent","pushHistory","pushState","origin","gotoHistory","isPushedState","popstate$","useDataset","atomRemoveDataset","useLocalStorage","clearLocalStorage","getLocalStorage","setLocalStorage","createSymbol","localBi$","local$","setThemeInDOM","theme","setTheme","toggleTheme","getTheme$","matchMediaDark","getCSSVar","setCSSVar","useCookie","get","set","domain","secureString","cookie","expires","clearCookies","cookies","cookieBase","ensureTable","db","tableName","objectStore","createIndexDB","dbName","dbVersion","request","writeToIndexDB","json","transaction","cancels","getFetchId","objectSignature","useFetch","onProgress","timeoutId","warnLog","contentLength","total","lengthComputable","loaded","read","HttpError","cancelFetch","useFetchRetry","maxRetries","retryDelay","retry","useFetchCache","ttlMs","useFetchRetryCache","zh","number","period","hour","minute","hm","Ls","useLocale","preset","object","presetLower","vnodeId","tag","children","mount","parentContainer","oldVnode","newVnode","oldProps","newProps","oldValue","newValue","sk","oldChildren","newChildren","commonLength","MVVM","elementNode","attrName","attrValue","finalNode","includes","appendUniqueArray","textContent","reg","template","createWebSocket","protocols","getVertxRegisterBaseUrl","baseUrl","WebSocketClient","copies","reason","wasClean","getRetryDelay","jsons","originData","ex","listeners","address","listener","idx","receivedMessage","toObjectString","getOperatingSystem","userAgent","operatingSystem","getOperatingSystemVersion","osVersion","getBrowserClient","client","getBrowserClientVersion","browserVersion","getBrowserLanguage","getTimeZone","isSafari","isIOS","isMacOS","isAppleDevice","isAndroid","isBadAndroid","appVersion","safariVersion","isMobile","getInternetExplorerVersion","msie","rv","edge","isIE","isIE9","isIE10","isIE11","isWxBrowser","isAliBrowser","isWxMiniProgram","isAliMiniProgram","setRem","designWidth","docEl","dpr","recalc","WebRTCClient","localVideoEl","remoteVideoEl","localStream","videoTracks","audioTracks","servers","localPeerConnection","remotePeerConnection","description","peerConnection","iceCandidate","newIceCandidate","otherPeer","functionName","peerName","div","WebGLRenderer","webglConfig","initWxJsReadyFns","initWxJsConfigRecord","addWxJsReadyFnBeforeConfig","injectWxJsConfig","configFromServer","debug","currentURL","trimHash","res","ALL_WX_JS_APIS","ALL_WX_OPEN_TAGS","checkWxJsApi","apiName","wxJsUpdateAppMessageShareData","shareConfig","wxJsUpdateTimelineShareData","wxJsChooseImage","apiConfig","wxJsPreviewImage","wxJsUploadImage","wxJsDownloadImage","wxJsGetLocalImgData","wxJsStartRecord","wxJsStopRecord","wxJsOnVoiceRecordEnd","wxJsPlayVoice","wxJsPauseVoice","wxJsStopVoice","wxJsOnVoicePlayEnd","wxJsUploadVoice","wxJsDownloadVoice","wxJsTranslateVoice","wxJsGetNetworkType","wxJsOpenLocation","wxJsGetLocation","wxJsScanQRCode","wxJsPay","successCb","errorCb","onBridgeReady","wxJsLogin","appid","redirect_uri","scope","aliJsReady","aliJsFormatCommonFailMessage","errorCodeMessage","aliJsTradePay","resultMessage","aliJsScan","aliJsGetLocation","aliJsOpenLocation","aliJsChooseImage","aliJsPreviewImage","mapTDTJSSDK","container","mapCenterLng","mapCenterLat","mapZoom","subtle","signature","algorithm","AlgorithmEnum","getUint8ArrayFromString","getStringFromArrayBuffer","getSortedObjectString","encrypt","iv","encryptedData","decrypt","decryptedData","signEncrypt","privateKey","publicKey","encodedData","verifyDecrypt","Pagination","totalItemCount","page","pageID","classes","evt","newParentVNode","halfInterval","intervalEnd","continuePropagation","Context","createStore","DialogSchedule","WebMonitor","colno","wrapperElements","topElement","payload","readableTimestamp"],"mappings":"2OAAA,MAAMA,GAAK,SAAS,aAAa,IACjC,SAASC,IAAK,CACZ,MAAMC,EAAI,OAAO,YAAc,UAAY,YAAc,WAAW,SAAW,QAAU,WAAY,EAAI,OAAO,QAAU,UAAY,QAAU,OAAO,SAAW,QAAU,OAAQC,EAAI,OAAO,QAAU,UAAY,QAAU,OAAO,SAAW,QAAU,OAAQC,EAAI,OAAO,MAAQ,UAAY,MAAQ,KAAK,SAAW,QAAU,KACpU,OAAOF,GAAK,GAAKC,GAAKC,GAAKJ,EAC7B,CACA,MAAMK,GAAIJ,GAAE,EAAIK,GAAK,OACrB,SAASC,GAAGL,EAAG,EAAII,GAAI,CACrB,OAAOJ,EAAE,WAAW,CAAC,CACvB,CACA,SAASM,GAAGN,EAAG,EAAII,GAAI,CACrB,OAAOC,GAAGL,EAAG,CAAC,EAAIA,EAAI,GAAG,CAAC,GAAGA,CAAC,EAChC,CACA,SAASO,GAAGP,EAAG,CACb,OAAO,OAAOA,GAAK,UAAYA,EAAE,WAAW,SAAS,GAAKA,EAAE,SAAS,GAAG,CAC1E,CACA,SAASQ,GAAGR,EAAG,CACb,OAAOO,GAAGP,CAAC,IAAMA,EAAIA,EAAE,MAAM,EAAG,EAAE,GAAIA,CACxC,CACA,SAASS,GAAGT,EAAG,CACb,OAAOA,EAAIQ,GAAGR,CAAC,EAAGA,EAAIM,GAAGN,CAAC,EAAG,OAAO,QAAU,WAAa,OAAOA,CAAC,EAAI,UAAUA,CAAC,GACpF,CACA,MAAMU,GAAKD,GAAG,MAAM,EAepB,SAASE,GAAGX,EAAG,CACb,GAAI,CAACO,GAAGP,CAAC,EACP,OAAOA,EACT,OAAQA,EAAIQ,GAAGR,CAAC,EAAGA,EAAC,CAClB,KAAKM,GAAG,MAAM,EACZ,OAAOI,GACT,QACE,OAAOD,GAAGT,CAAC,CACd,CACH,CACA,SAASY,GAAGZ,EAAG,CACb,GAAI,MAAM,QAAQA,CAAC,EACjB,OAAOA,EAAE,IAAIY,EAAE,EACjB,GAAIZ,GAAK,OAAOA,GAAK,SAAU,CAC7B,MAAM,EAAI,CAAA,EACV,UAAWC,KAAK,QAAQ,QAAQD,CAAC,EAAG,CAClC,MAAME,EAAIF,EAAEC,CAAC,EACb,EAAE,OAAOA,GAAK,SAAWA,EAAE,SAAU,EAAGA,CAAC,EAAI,OAAOC,GAAK,SAAWA,EAAE,SAAQ,EAAKU,GAAGV,CAAC,CACxF,CACD,OAAO,CACR,CACD,OAAO,OAAOF,GAAK,SAAWA,EAAE,SAAQ,EAAKA,CAC/C,CACA,SAASa,GAAGb,EAAG,CACb,GAAI,MAAM,QAAQA,CAAC,EACjB,OAAOA,EAAE,IAAIa,EAAE,EACjB,GAAIb,GAAK,OAAOA,GAAK,SAAU,CAC7B,MAAM,EAAI,CAAA,EACV,UAAWC,KAAK,OAAO,KAAKD,CAAC,EAC3B,EAAEW,GAAGV,CAAC,CAAC,EAAIY,GAAGb,EAAEC,CAAC,CAAC,EACpB,OAAO,CACR,CACD,OAAOU,GAAGX,CAAC,CACb,CACA,SAASc,GAAGd,EAAG,CACb,OAAO,KAAK,UAAUY,GAAGZ,CAAC,CAAC,CAC7B,CACA,MAAMe,GAAKD,GACX,SAASE,GAAGhB,EAAG,CACb,OAAOa,GAAG,KAAK,MAAMb,CAAC,CAAC,CACzB,CAoBI,IAAAiB,IAAsBjB,IAAOA,EAAE,QAAU,GAAIA,EAAE,KAAO,aAAcA,EAAE,GAAK,aAAcA,EAAE,KAAO,YAAaA,EAAE,SAAW,WAAYA,EAAE,IAAM,WAAYA,EAAE,KAAO,aAAcA,EAAE,IAAM,YAAaA,EAAE,IAAM,YAAaA,EAAE,IAAM,YAAaA,EAAE,KAAO,aAAcA,EAAE,IAAM,gBAAiBA,EAAE,KAAO,eAAgBA,EAAE,eAAiB,2BAA4BA,EAAE,KAAO,aAAcA,EAAE,IAAM,aAAcA,EAAE,IAAM,YAAaA,EAAE,IAAM,YAAaA,EAAE,IAAM,YAAaA,EAAE,KAAO,aAAcA,EAAE,KAAO,aAAcA,EAAE,UAAY,YAAaA,EAAE,aAAe,2BAA4BA,EAAE,WAAa,yBAA0BA,EAAE,WAAa,yBAA0BA,EAAE,KAAO,mBAAoBA,EAAE,IAAM,kBAAmBA,EAAE,MAAQ,wBAAyBA,EAAE,KAAO,oCAAqCA,EAAE,IAAM,qBAAsBA,EAAE,IAAM,oBAAqBA,EAAE,MAAQ,2BAA4BA,EAAE,IAAM,+BAAgCA,EAAE,IAAM,kBAAmBA,EAAE,IAAM,kBAAmBA,EAAE,IAAM,qBAAsBA,EAAE,OAAS,qBAAsBA,EAAE,IAAM,gCAAiCA,EAAE,IAAM,uBAAwBA,EAAE,OAAS,oBAAqBA,IAAIiB,IAAK,EAAE,EAAGC,IAAuBlB,IAAOA,EAAE,MAAQ,QAASA,EAAE,KAAO,OAAQA,EAAE,QAAU,UAAWA,EAAE,KAAO,OAAQA,EAAE,OAAS,SAAUA,EAAE,UAAY,YAAaA,EAAE,OAAS,SAAUA,EAAE,OAAS,SAAUA,EAAE,IAAM,MAAOA,IAAIkB,IAAM,CAAE,CAAA,EAAGC,IAAuBnB,IAAOA,EAAE,KAAO,OAAQA,EAAE,QAAU,UAAWA,EAAE,aAAe,eAAgBA,EAAE,YAAc,cAAeA,IAAImB,IAAM,CAAE,CAAA,EAAGC,IAAuBpB,IAAOA,EAAE,IAAM,MAAOA,EAAE,KAAO,OAAQA,EAAE,OAAS,SAAUA,EAAE,OAAS,UAAWA,EAAE,OAAS,SAAUA,EAAE,OAAS,UAAWA,EAAE,OAAS,UAAWA,EAAE,MAAQ,QAASA,IAAIoB,IAAM,CAAE,CAAA,EAC3tD,MAuLFC,GAAMrB,GAAM,CACb,IAAI,EAAI,KACR,OAAQA,EAAC,CACP,IAAK,gBACH,EAAI,MACJ,MACF,IAAK,MACH,EAAI,iBACJ,MACF,IAAK,MACH,EAAI,iBACJ,MACF,IAAK,MACH,EAAI,uBACJ,MACF,IAAK,QACH,EAAI,kBACJ,MACF,IAAK,MACH,EAAI,gBACJ,MACF,IAAK,SACH,EAAI,uCACJ,MACF,IAAK,gBACH,EAAI,sCACJ,MACF,IAAK,QACH,EAAI,YACJ,MACF,IAAK,OACH,EAAI,aACJ,MACF,IAAK,SACH,EAAI,sBACJ,MACF,IAAK,eACH,EAAI,OACJ,MACF,IAAK,gBACH,EAAI,OACF,IAAM,SAAS,UAAU,SAAS,KAAK,OAAO,UAAU,cAAc,EAAE,QAAQqB,GAAG,QAAQ,EAAG,MAAM,EAAE,QACpG,yDACA,OACV,EAAY,GACZ,EACM,MACF,IAAK,cACH,EAAI,mCACJ,MACF,IAAK,eACH,EAAI,oBACJ,MACF,IAAK,QACH,EAAI,sEACJ,MACF,IAAK,KACH,EAAI,wFACJ,MACF,IAAK,MACH,EAAI,kDACJ,MACF,IAAK,cACH,EAAI,4BACJ,MACF,IAAK,OACH,EAAI,gDACJ,MACF,IAAK,OACH,EAAI,kCACJ,MACF,IAAK,WACH,EAAI,gFACJ,MACF,IAAK,cACH,EAAI,kHACJ,MACF,IAAK,YACH,EAAI,wDACJ,MACF,IAAK,QACH,EAAI,mTACJ,MACF,IAAK,aACH,EAAI,8IACJ,MACF,IAAK,cACH,EAAI,0RACJ,MACF,IAAK,WACH,EAAI,6BACJ,MACF,IAAK,SACH,EAAI,yDACJ,MACF,IAAK,eACH,EAAI,+BACJ,MACF,IAAK,UACH,EAAI,IAAI,OACN,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UASL,QAAQ,OAAQ,EAAE,EACpB,GACR,EACM,MACF,IAAK,aACH,EAAI,WACJ,MACF,IAAK,aACH,EAAI,WACJ,MACF,IAAK,aACH,EAAI,WACJ,MACF,IAAK,qBACH,EAAI,4OACJ,MACF,IAAK,sBACH,EAAI,yOACJ,MACF,IAAK,oBACH,EAAI,wQACJ,MACF,IAAK,qBACH,EAAI,sBACJ,MACF,IAAK,oBACH,EAAI,6CACJ,KACH,CACD,OAAO,CACT,EAWMC,GAAK,CAACtB,EAAG,KAAO,OAAOA,GAAK,WAAaA,EAAIqB,GAAGrB,CAAC,GAAK,IAAI,OAAOA,CAAC,GAAIA,EAAE,KAAK,CAAC,GAA2KuB,GAAK,CAACvB,EAAG,IAAM,CAC5Q,OAAOA,GAAK,WAAaA,EAAIqB,GAAGrB,CAAC,GAAK,IAAI,OAAOA,CAAC,GAClD,MAAMC,EAAI,EAAE,MAAMD,CAAC,EACnB,OAAOC,EAAID,EAAE,MAAM,YAAW,EAAG,QAAQ,GAAG,GAAK,EAAIC,EAAE,IACpDC,IAAO,CACN,WAAY,GACZ,UAAWA,EACX,YAAa,CAAE,CACrB,EACA,EAAM,CACF,WAAY,OAAOD,EAAE,OAAS,SAAWA,EAAE,MAAQ,GACnD,UAAWA,EAAE,CAAC,EACd,YAAaA,EAAE,MAAM,CAAC,CACvB,EAAG,IACN,EAAGuB,GAAK,CAACxB,EAAG,IAAM,CAChB,OAAOA,GAAK,WAAaA,EAAIqB,GAAGrB,CAAC,GAAK,IAAI,OAAOA,CAAC,GAClD,MAAMC,EAAI,CAAA,EAAIC,EAAI,EAAE,SAASF,CAAC,EAC9B,UAAWyB,KAAKvB,EACdD,EAAE,KAAK,CACL,WAAY,OAAOwB,EAAE,OAAS,SAAWA,EAAE,MAAQ,GACnD,UAAWA,EAAE,CAAC,EACd,YAAaA,EAAE,MAAM,CAAC,CAC5B,CAAK,EACH,OAAOxB,CACT,EAaA,SAASyB,GAAG1B,EAAG,CACb,MAAM,EAAIA,EAAE,MAAM,UAAU,EAC5B,OAAO,EAAI,EAAE,OAAS,CACxB,CAuBA,SAAS2B,GAAG3B,EAAG,EAAG,CAChB,MAAMC,EAAID,EAAE,YAAY,CAAC,EACzB,OAAOC,EAAI,OAAO,cAAcA,CAAC,EAAI,MACvC,CA4BA,SAAS2B,GAAG5B,EAAI,GAAI,EAAI,MAAO,CAC7B,IAAIC,EAAI,iEACR,GAAK,WAAaA,EAAI,cACtB,MAAMC,EAAID,EAAE,OACZ,IAAIwB,EAAI,GACR,QAASI,EAAI,EAAGA,EAAI7B,EAAG6B,IACrBJ,GAAKxB,EAAE,KAAK,MAAM,KAAK,OAAQ,EAAGC,CAAC,CAAC,EACtC,OAAOuB,CACT,CAmBA,SAASK,GAAG9B,EAAG,CACb,OAAOA,EAAE,QAAQ,SAAW,GAAM,EAAE,YAAW,CAAE,CACnD,CACA,MAAM+B,GAAK,CAAC/B,EAAG,EAAI,MAAQ,CACzB,IAAIC,EAAID,EAAE,QAAQ,IAAI,OAAO,eAAgB,GAAG,EAAG,EAAI,IAAI,EAAE,YAAW,EACxE,MAAME,EAAI,IAAI,OAAO,IAAI,CAAC,EAAE,EAC5B,OAAOA,EAAE,KAAKF,CAAC,IAAMC,EAAIA,EAAE,QAAQC,EAAG,EAAE,GAAID,CAC9C,EACA,SAAS+B,GAAGhC,EAAG,CACb,OAAOA,EAAE,QAAQ,gBAAkB,GAAM,EAAE,MAAM,EAAE,EAAE,YAAa,CAAA,CACpE,CACA,SAASiC,GAAGjC,EAAG,CACb,OAAO8B,GAAGE,GAAGhC,CAAC,CAAC,CACjB,CAsCA,SAASkC,GAAGlC,EAAG,CACb,IAAI,EAAI,GACR,QAASC,EAAI,EAAGC,EAAIF,EAAE,OAAQC,EAAIC,EAAGD,IAAK,CACxC,MAAMwB,EAAIzB,EAAE,WAAWC,CAAC,EACxBwB,GAAK,GAAKA,GAAK,IAAM,GAAKzB,EAAE,OAAOC,CAAC,EAAIwB,EAAI,MAAQ,GAAK,OAAO,aAAa,IAAMA,GAAK,GAAK,EAAE,EAAG,GAAK,OAAO,aAAa,IAAMA,GAAK,EAAI,EAAE,EAAG,GAAK,OAAO,aAAa,IAAMA,GAAK,EAAI,EAAE,IAAM,GAAK,OAAO,aAAa,IAAMA,GAAK,EAAI,EAAE,EAAG,GAAK,OAAO,aAAa,IAAMA,GAAK,EAAI,EAAE,EACvR,CACD,OAAO,CACT,CA0EA,SAASU,GAAGnC,EAAG,CACb,OAAOA,EAAE,MAAM,CAAC,CAClB,CAKA,SAASoC,GAAGpC,EAAG,EAAI,GAAI,CACrB,MAAMC,EAAI,EAAIkC,GAAGnC,EAAE,MAAM,EAAIA,EAAE,OAC/B,OAAO,IAAIA,EAAE,YACXC,EACAD,EAAE,WACFA,EAAE,MACN,CACA,CAyeA,MAAMqC,GAAI,CACR,MAAO,EACP,KAAM,EACN,MAAO,EACP,OAAQ,CACV,EACA,MAAMC,EAAG,CACP,MACA,MACA,SACA,YAAY,EAAI,GAAIrC,EAAIoC,GAAE,OAAQ,CAChC,KAAK,MAAQ,CAAA,EAAI,KAAK,MAAQ,EAAG,KAAK,SAAWpC,CAClD,CACD,QAAS,CACP,OAAO,KAAK,MAAM,MACnB,CACD,SAAU,CACR,OAAO,KAAK,OAAQ,IAAK,CAC1B,CACD,UAAU,EAAG,CACX,OAAO,KAAK,MAAM,UAAU,CAAC,CAC9B,CACD,YAAY,EAAG,CACb,MAAO,CAAC,CAAC,KAAK,MAAM,OAAO,EAAG,CAAC,EAAE,MAClC,CACD,OAAO,EAAG,CACR,MAAMA,EAAI,KAAK,UAAU,CAAC,EAC1B,OAAOA,EAAI,GAAK,KAAK,YAAYA,CAAC,EAAI,EACvC,CAED,QAAQ,EAAG,CACT,GAAI,KAAK,SAAW,KAAK,MAAO,CAC9B,KAAK,MAAM,KAAK,CAAC,EACjB,MACD,CACD,OAAQ,KAAK,SAAQ,CACnB,KAAKoC,GAAE,OACL,KAAK,OAAS,EAAG,KAAK,MAAM,KAAK,CAAC,EAClC,MACF,KAAKA,GAAE,MACL,KAAK,YAAY,CAAC,EAAG,KAAK,MAAM,KAAK,CAAC,EACtC,MACF,KAAKA,GAAE,MACL,MAAM,IAAI,MAAM,eAAe,KAAK,KAAK,aAAa,CAEzD,CACF,CACD,KAAK,EAAG,CACN,KAAK,QAAQ,CAAC,CACf,CACD,IAAI,EAAG,CACL,KAAK,QAAQ,CAAC,CACf,CAED,SAAU,CACR,OAAO,KAAK,MAAM,OACnB,CACD,KAAM,CACJ,OAAO,KAAK,SACb,CACD,MAAO,CACL,OAAO,KAAK,SACb,CAED,MAAO,CACL,OAAO,KAAK,MAAM,CAAC,CACpB,CAED,MAAM,EAAG,CACP,OAAO,KAAK,MAAM,CAAC,CACpB,CAED,OAAQ,CACN,KAAK,MAAQ,EACd,CAED,OAAQ,CACN,MAAM,EAAI,CAAA,EACV,IAAIpC,EACJ,KAAOA,EAAI,KAAK,QAAS,GACvB,EAAE,KAAKA,CAAC,EACV,OAAO,CACR,CACH,CACK,MAA8HsC,GAAMvC,GAAM,IAAIsC,GAAGtC,EAAGqC,GAAE,MAAM,EACjK,SAASG,GAAGxC,EAAG,CACb,OAAO,OAAO,MAAMA,CAAC,CACvB,CAKA,SAASyC,GAAGzC,EAAG,CACb,GAAIA,GAAK,EACP,MAAO,GACT,QAAS,EAAI,EAAG,GAAK,KAAK,KAAKA,CAAC,EAAG,IACjC,GAAIA,EAAI,IAAM,EACZ,MAAO,GACX,MAAO,EACT,CACA,SAAS0C,GAAG1C,EAAG,CACb,KAAO,CAACyC,GAAGzC,CAAC,GACVA,IACF,OAAOA,CACT,CAEA,SAAS2C,GAAE3C,EAAG,EAAG,CACf,MAAMC,EAAI,WAAWD,CAAC,EACtB,OAAO,OAAO,MAAMC,CAAC,EAAI,OAAO,GAAK,SAAW,EAAI,IAAMA,CAC5D,CAIA,SAAS2C,GAAG5C,EAAI,KAAM,CACpB,OAAO,SAAS,EAAGC,EAAG,CACpB,OAAO,KAAK,IAAI,EAAIA,CAAC,EAAID,CAC7B,CACA,CAKA,SAAS6C,EAAG7C,EAAG,EAAGC,EAAG,CACnB,MAAMC,EAAI,KAAK,IAAI,EAAGD,CAAC,EAAGwB,EAAI,KAAK,IAAI,EAAGxB,CAAC,EAC3C,OAAOD,EAAIE,EAAIA,EAAIF,EAAIyB,EAAIA,EAAIzB,CACjC,CAKA,SAAS8C,GAAG9C,EAAG,EAAG,CAChB,OAAQA,EAAI,EAAI,GAAK,CACvB,CACA,SAAS+C,GAAG/C,EAAG,EAAGC,EAAG,CACnB,OAAO,OAAOD,GAAK,UAAY,OAAO,GAAK,UAAY,EAAIC,GAAKD,EAAIC,EAAI,EAAI,OAAOD,GAAK,SAAWA,EAAI,OAAO,GAAK,SAAW,EAAI,CACpI,CACA,SAASgD,GAAGhD,EAAG,EAAGC,EAAG,CACnB,MAAMC,EAAI,KAAK,IAAIF,EAAE,OAAQ,EAAE,MAAM,EAAGyB,EAAI,IAAI,MAAMvB,CAAC,EACvD,QAAS2B,EAAI,EAAGA,EAAI3B,EAAG2B,IACrBJ,EAAEI,CAAC,EAAIkB,GAAG/C,EAAE6B,CAAC,EAAG,EAAEA,CAAC,EAAG5B,CAAC,EACzB,OAAOwB,CACT,CAIA,SAASwB,GAAGjD,EAAG,EAAGC,EAAG,CACnB,OAAQC,GAAM,CACZ,MAAMuB,EAAIoB,EAAG3C,EAAGF,EAAG,CAAC,EACpB,OAAOC,GAAK,EAAIwB,EAAI,EAAIA,EAAIxB,EAAI,EAAI,KAAK,MAAMwB,EAAIxB,CAAC,EAAIA,CAC5D,CACA,CAIA,SAASiD,GAAGlD,EAAG,EAAI,GAAI,CACrB,OAAO2C,GAAE3C,EAAG,CAAC,EAAE,QAAQ,CAAC,CAC1B,CACA,SAASmD,EAAGnD,EAAG,EAAI,GAAI,CACrB,MAAO,CAACkD,GAAGlD,EAAG,CAAC,CACjB,CAQA,SAASoD,GAAGpD,EAAG,EAAG,CAChB,MAAMC,EAAIsB,GAAG,gBAAiB,OAAOvB,CAAC,CAAC,EACvC,MAAO,CACL,UAAW,CAAC,CAACC,EACb,OAAQA,GAAK,CAAC,MAAM,QAAQA,CAAC,GAAKA,EAAE,UAAY,WAAWA,EAAE,SAAS,EAAIoD,GAAG,CAAC,EAAI,EAAI,IACtF,OAAQpD,GAAK,CAAC,MAAM,QAAQA,CAAC,GAAKA,EAAE,UAAYD,EAAE,UAAU,EAAGC,EAAE,UAAU,EAAI,GAC/E,OAAQA,GAAK,CAAC,MAAM,QAAQA,CAAC,GAAKA,EAAE,UAAYD,EAAE,UAAUC,EAAE,WAAaA,EAAE,UAAU,MAAM,EAAI,EACrG,CACA,CACA,SAASqD,GAAGtD,EAAG,CACb,MAAM,EAAIuB,GAAG,SAAUvB,CAAC,EACxB,OAAO,EAAI,MAAM,QAAQ,CAAC,EAAI,EAAE,IAAKC,GAAM,OAAOA,EAAE,SAAS,CAAC,EAAI,CAAC,OAAO,EAAE,SAAS,CAAC,EAAI,EAC5F,CAqDA,MAAMsD,GAAK,CACT,MAAO,EACP,OAAQ,CACV,EACA,MAAMC,EAAG,CACP,KACA,MACA,gBACA,SACA,IACA,YAAY,EAAG,CACb,KAAK,MAAQ,IAAI,MAAM,GAAG,MAAQ,GAAG,EAAG,KAAK,KAAO,KAAK,MAAM,OAAQ,KAAK,gBAAkB,GAAG,kBAAqBvD,GAAM,OAAOA,CAAC,GAAI,KAAK,SAAW,GAAG,UAAYsD,GAAG,OAAQ,KAAK,IAAM,GAAG,KAAO,GACxM,CAED,KAAK,EAAG,CACN,GAAI,GAAK,MAAQ,GAAK,KACpB,MAAM,IAAI,MAAM,uCAAuC,EACzD,MAAMtD,EAAI,KAAK,gBAAgB,CAAC,EAAGC,EAAI,GACvC,IAAIuB,EAAI,EACR,QAASI,EAAI,EAAG,EAAI5B,EAAE,OAAQ4B,EAAI,EAAGA,IACnCJ,GAAKvB,EAAIuB,EAAIxB,EAAE,WAAW4B,CAAC,EAC7B,OAAOJ,EAAI,KAAK,IACjB,CAED,QAAS,CACP,MAAM,EAAI,KAAK,KAAMxB,EAAIyC,GAAG,KAAK,KAAO,CAAC,EAAGxC,EAAI,IAAI,MAAMD,CAAC,EAAGwB,EAAI,KAAK,MACvE,KAAK,MAAQvB,EAAG,KAAK,KAAOD,EAC5B,QAAS4B,EAAI,EAAG,EAAI,EAAGA,EAAI,EAAGA,IAC5B,GAAIJ,EAAEI,CAAC,IAAM,QAAU,CAAC,KAAK,WAAWJ,EAAEI,CAAC,CAAC,EAAG,CAC7C,IAAI,EAAI,KAAK,KAAKJ,EAAEI,CAAC,EAAE,KAAK,EAC5B,KAAO3B,EAAE,CAAC,IAAM,QACd,GAAK,EAAI,GAAKD,EAChBC,EAAE,CAAC,EAAIuB,EAAEI,CAAC,CACX,CACHJ,EAAE,OAAS,CACZ,CACD,IAAI,EAAG,CACL,KAAK,KAAO,KAAO,KAAK,OAAM,EAAK,IAAO,KAAK,QAC/C,IAAIxB,EAAI,KAAK,KAAK,CAAC,EACnB,MAAMC,EAAID,EACV,KAAO,KAAK,MAAMA,CAAC,IAAM,QAAU,CAAC,KAAK,WAAW,KAAK,MAAMA,CAAC,CAAC,GAC/D,GAAIA,GAAKA,EAAI,GAAK,KAAK,KAAMC,GAAKD,EAAG,CACnC,GAAI,KAAK,UAAYsD,GAAG,OACtB,OAAO,KAAK,OAAQ,EAAE,KAAK,IAAI,CAAC,EAClC,KACD,CACH,OAAO,KAAK,MAAMtD,CAAC,EAAI,CAAE,MAAO,EAAG,UAAW,KAAK,IAAK,CAAA,EAAIA,CAC7D,CAGD,SAAS,EAAG,CACV,QAASA,EAAI,EAAGC,EAAI,KAAK,KAAMD,EAAIC,EAAGD,IACpC,GAAI,KAAK,MAAMA,CAAC,IAAM,QAAU,CAAC,EAAE,KAAK,MAAMA,CAAC,EAAE,MAAOA,CAAC,EACvD,OAAOA,EACX,MAAO,EACR,CAED,OAAO,EAAG,CACR,KAAK,SAAS,CAACA,EAAGC,KAAO,EAAED,CAAC,IAAM,IAAM,KAAK,YAAYC,CAAC,EAAG,GAAG,CACjE,CACD,SAAS,EAAG,CACV,IAAID,EAAI,KAAK,KAAK,CAAC,EACnB,MAAMC,EAAID,EACV,KAAO,KAAK,MAAMA,CAAC,GAAG,QAAU,GAC9B,GAAI,KAAK,MAAMA,CAAC,IAAM,SAAW,KAAK,WAAW,KAAK,MAAMA,CAAC,CAAC,IAAM,KAAK,MAAMA,CAAC,EAAI,QAASA,GAAKA,EAAI,GAAK,KAAK,KAAMC,GAAKD,GACzH,MAAO,GACX,OAAO,KAAK,WAAW,KAAK,MAAMA,CAAC,CAAC,GAAK,KAAK,MAAMA,CAAC,EAAI,OAAQ,IAAMA,CACxE,CACD,IAAI,EAAG,CACL,OAAO,KAAK,SAAS,CAAC,GAAK,CAC5B,CAED,KAAK,EAAG,CACN,MAAMA,EAAI,KAAK,SAAUC,GAAM,CAAC,EAAEA,CAAC,CAAC,EACpC,OAAOD,GAAK,EAAI,KAAK,MAAMA,CAAC,GAAG,MAAQ,MACxC,CACD,YAAY,EAAG,CACb,OAAO,GAAK,GAAK,EAAI,KAAK,MAAQ,KAAK,MAAM,CAAC,IAAM,QAAU,KAAK,MAAM,CAAC,EAAI,OAAQ,IAAM,EAC7F,CACD,OAAO,EAAG,CACR,OAAO,KAAK,YAAY,KAAK,SAAS,CAAC,CAAC,CACzC,CACD,OAAQ,CACN,KAAK,MAAQ,EACd,CAED,WAAW,EAAG,CACZ,OAAO,KAAK,IAAK,EAAG,EAAE,UAAY,KAAK,GACxC,CAGD,OAAQ,CACN,QAAS,EAAI,EAAGA,EAAI,KAAK,KAAM,EAAIA,EAAG,IACpC,KAAK,MAAM,CAAC,IAAM,QAAU,KAAK,WAAW,KAAK,MAAM,CAAC,CAAC,IAAM,KAAK,MAAM,CAAC,EAAI,OAClF,CACH,CA4BA,MAAMwD,EAAG,CACP,KAAuB,IAAI,IAC3B,aAAc,CACb,CAGD,SAAU,CACR,MAAO,CAAC,GAAG,KAAK,KAAK,QAAS,CAAA,CAC/B,CAED,MAAO,CACL,MAAO,CAAC,GAAG,KAAK,KAAK,KAAM,CAAA,CAC5B,CAED,QAAS,CACP,MAAO,CAAC,GAAG,KAAK,KAAK,OAAQ,CAAA,CAC9B,CACD,MAAO,CACL,MAAM,EAAI,CAAA,EACV,UAAWxD,KAAK,KAAK,KACnB,EAAEA,EAAE,CAAC,CAAC,EAAIA,EAAE,CAAC,EACf,OAAO,CACR,CACD,IAAI,QAAS,CACX,OAAO,KAAK,KAAK,IAClB,CACD,IAAI,EAAGA,EAAG,CACR,KAAK,KAAK,IAAI,EAAGA,CAAC,CACnB,CACD,IAAI,EAAG,CACL,OAAO,KAAK,KAAK,IAAI,CAAC,CACvB,CACD,IAAI,EAAG,CACL,OAAO,KAAK,KAAK,IAAI,CAAC,CACvB,CAED,kBAAkB,EAAG,CACnB,IAAIA,EAAI,GACR,UAAWC,KAAK,KAAK,KACnB,GAAI,EAAED,GAAK,EACT,OAAOC,CACZ,CAED,SAAS,EAAG,CACV,UAAWD,KAAK,KAAK,KACnB,GAAI,EAAEA,EAAE,CAAC,EAAGA,EAAE,CAAC,CAAC,EACd,OAAOA,CACZ,CACD,YAAa,CACX,OAAO,KAAK,kBAAkB,CAAC,CAChC,CAED,OAAQ,CACN,MAAM,EAAI,KAAK,aACf,GAAI,EAAG,CACL,KAAM,CAACA,CAAC,EAAI,EACZ,KAAK,OAAOA,CAAC,CACd,CACD,OAAO,CACR,CACD,OAAO,EAAG,CACR,OAAO,KAAK,KAAK,OAAO,CAAC,CAC1B,CACD,OAAQ,CACN,KAAK,KAAK,OACX,CAED,OAAO,EAAG,CACR,MAAMA,EAAI,KAAK,UACf,QAASC,EAAI,EAAGuB,EAAIxB,EAAE,OAAQC,EAAIuB,EAAGvB,IAAK,CACxC,KAAM,CAAC2B,EAAG,CAAC,EAAI5B,EAAEC,CAAC,EAClB,EAAE2B,EAAG,CAAC,IAAM,IAAM,KAAK,OAAOA,CAAC,CAChC,CACF,CACH,CAqHA,SAAS6B,GAAG1D,EAAG,EAAG,CAChB,QAASC,EAAI,EAAGC,EAAIF,EAAE,OAAQC,EAAIC,EAAGD,IACnC,GAAID,EAAEC,CAAC,GAAK,EACV,MAAO,GACX,MAAO,EACT,CACA,SAAS0D,GAAG3D,EAAI,GAAI,EAAI,CAAA,EAAI,CAC1B,MAAMC,EAAID,EAAE,OAAQE,EAAI,EAAE,OAC1B,QAAS2B,EAAI,EAAGA,EAAI3B,EAAG2B,IACrB7B,EAAE6B,CAAC,EAAI,EAAEA,CAAC,EACZ,IAAIJ,EAAI,KAAK,IAAI,EAAGxB,EAAIC,CAAC,EACzB,KAAOuB,EAAI,GACTzB,EAAE,MAAOyB,IACX,OAAOzB,CACT,CAQA,SAAS4D,GAAG5D,EAAG,EAAG,CAChB,MAAMC,EAAID,EAAE,UAAWE,GAAMA,IAAM,CAAC,EACpC,OAAOD,GAAK,GAAKD,EAAE,OAAOC,EAAG,CAAC,EAAGD,CACnC,CA8BA,SAAS6D,GAAG7D,KAAM,EAAG,CACnB,OAAO,EAAE,QAASC,GAAM,CACtByD,GAAG1D,EAAGC,CAAC,GAAKD,EAAE,KAAKC,CAAC,CACrB,CAAA,EAAGD,CACN,CAoOA,SAAS8D,IAAK,CACZ,OAAQ,aAAe,MAAM,KAC/B,CACA,SAASC,GAAE/D,EAAoB,IAAI,KAAQ,CACzC,OAAOA,EAAE,SACX,CACA,SAASgE,GAAGhE,EAAoB,IAAI,KAAQ,EAAI,0BAA2B,CACzE,OAAOiE,GAAGjE,EAAG,CAAC,CAChB,CACA,SAASkE,GAAElE,EAAG,CACZ,MAAO,CAACwC,GAAGxC,EAAE,QAAS,CAAA,CACxB,CAoCA,SAASmE,GAAGnE,EAAG,EAAI,EAAG,CACpB,MAAMC,EAAI,KAAK,IAAID,EAAE,OAAQ,CAAC,EAC9B,IAAIE,EAAI,GACR,QAAS2B,EAAI,EAAGA,EAAI5B,EAAI,EAAG4B,IACzB3B,GAAKF,EAAE6B,CAAC,GAAK,IACf,MAAMJ,EAAI,CACRvB,EACA,IAAMF,EAAEC,EAAI,CAAC,GAAK,MAAQD,EAAEC,EAAI,CAAC,GAAK,KACtC,IAAMD,EAAEC,EAAI,CAAC,GAAK,MAAQD,EAAEC,EAAI,CAAC,GAAK,IAC1C,EACE,OAAQ,EAAC,CACP,IAAK,GACH,OAAOwB,EAAE,CAAC,EACZ,IAAK,GACH,OAAOA,EAAE,CAAC,EAAI,IAAMA,EAAE,CAAC,EACzB,IAAK,GACH,OAAOA,EAAE,CAAC,EAAI,IAAMA,EAAE,CAAC,EAAI,IAAMA,EAAE,CAAC,CACvC,CACH,CA0BA,SAAS2C,GAAGpE,EAAG,CACb,MAAM,EAAI,KAAK,IAAIA,EAAE,OAAQ,CAAC,EAC9B,IAAIC,EAAI,EACRA,IAAMD,EAAE,EAAI,CAAC,GAAK,GAAK,IAAMA,EAAE,EAAI,CAAC,GAAK,GAAIC,KAAOD,EAAE,EAAI,CAAC,GAAK,GAAK,IAAMA,EAAE,EAAI,CAAC,GAAK,IAAM,GAC7F,IAAIE,EAAI,EACR,QAASuB,EAAI,EAAGA,EAAI,EAAI,EAAGA,IACzBvB,EAAIA,EAAI,IAAMF,EAAEyB,CAAC,GAAK,GACxB,OAAOxB,GAAKC,EAAI,GAAK,GAAI,KAAK,MAAM,KAAK,IAAI,EAAGD,CAAC,CAAC,CACpD,CACA,SAASoE,GAAGrE,EAAG,EAAI,GAAI,CACrB,IAAIC,EAAI,EACR,OAAOD,GAAK,SAAWC,EAAID,EAAIC,EAAImE,GAAGpE,CAAC,EACvC,MAAME,EAAI,CAAE,EAAEuB,EAAIxB,EAAI,GACtBC,EAAE,QAAQuB,EAAI,EAAE,EAAGvB,EAAE,QAAQ,KAAK,MAAMuB,EAAI,EAAE,CAAC,EAAGxB,EAAI,KAAK,MAAMA,EAAI,EAAE,EACvE,MAAM4B,EAAI5B,EAAI,GACd,GAAIC,EAAE,QAAQ2B,EAAI,EAAE,EAAG3B,EAAE,QAAQ,KAAK,MAAM2B,EAAI,EAAE,CAAC,EAAG5B,EAAI,KAAK,MAAMA,EAAI,EAAE,EAAG,EAAG,CAC/E,MAAM,EAAIA,EAAI,IACd,IAAKC,EAAE,QAAQ,EAAI,EAAE,EAAGA,EAAE,QAAQ,KAAK,MAAM,EAAI,EAAE,CAAC,EAAGD,EAAI,KAAK,MAAMA,EAAI,GAAG,EAAGA,GAC9EC,EAAE,QAAQD,EAAI,EAAE,EAAGA,EAAI,KAAK,MAAMA,EAAI,EAAE,CAC9C,KAAS,CACL,MAAM,EAAIA,EAAI,GACdC,EAAE,QAAQ,EAAI,EAAE,EAAGA,EAAE,QAAQ,KAAK,MAAM,EAAI,EAAE,CAAC,CAChD,CACD,OAAOA,CACT,CAsBA,SAASoE,GAAGtE,EAAG,EAAI,EAAGC,EAAI,GAAI,CAC5B,OAAOD,EAAEA,EAAE,OAAS,CAAC,GAAK,EAAGqE,GAAGrE,EAAGC,CAAC,CACtC,CAqBA,SAASgE,GAAGjE,EAAG,EAAI,sBAAuB,CACxC,GAAI,CAACkE,GAAElE,CAAC,EACN,MAAO,GACT,MAAMC,EAAI,OAAO,KAAK,CAAC,EACvB,GAAIA,GAAKA,EAAE,CAAC,EAAG,CACb,MAAMwB,EAAIxB,EAAE,CAAC,EACb,EAAI,EAAE,QACJwB,GAECzB,EAAE,cAAgB,IAAI,UAAU,EAAIyB,EAAE,MAAM,CACnD,CACG,CACD,MAAMvB,EAAI,CACR,KAAMF,EAAE,SAAQ,EAAK,EAErB,KAAMA,EAAE,QAAS,EAEjB,KAAMA,EAAE,SAAU,EAElB,KAAMA,EAAE,WAAY,EAEpB,KAAMA,EAAE,WAAY,EAEpB,KAAM,KAAK,OAAOA,EAAE,SAAU,EAAG,GAAK,CAAC,EAEvC,KAAMA,EAAE,gBAAiB,CAE7B,EACE,UAAWyB,KAAKvB,EAAG,CACjB,MAAM2B,EAAI,IAAI,OAAO,IAAMJ,EAAI,GAAG,EAAE,KAAK,CAAC,EAC1C,GAAII,GAAKA,EAAE,CAAC,EAAG,CACb,MAAM,EAAIA,EAAE,CAAC,EACb,EAAI,EAAE,QACJ,EAKA,EAAE,SAAW,EAAI,GAAK3B,EAAEuB,CAAC,GAAK,KAAOvB,EAAEuB,CAAC,GAAG,MAAM,CAAC,EAAE,MAAM,CAClE,CACK,CACF,CACD,OAAO,CACT,CA2FA,SAAS8C,IAAK,CACZpE,GAAE,SAAW,EACf,CACA,SAASqE,IAAK,CACZrE,GAAE,SAAW,EACf,CACA,SAASsE,GAAGzE,EAAG,CACbG,GAAE,cAAgBH,CACpB,CACA,SAAS0E,IAAK,CACZ,MAAO,CAAC,CAACvE,GAAE,QACb,CACA,SAASwE,GAAG3E,EAAG,CACbG,GAAE,eAAiBA,GAAE,cAAcH,CAAC,CACtC,CACA,SAAS4E,GAAE5E,EAAG,CACZ2E,GAAG,CAAE,MAAO,OAAQ,IAAK3E,EAAG,EAAG0E,GAAI,IAAK,CAAC,SAAW,OAAO,SAAW,UAAY,OAAO,QAAQ,KAAO,YAAc,QAAQ,IAAI1E,CAAC,EACrI,CACA,SAAS6E,GAAG7E,EAAG,CACb2E,GAAG,CAAE,MAAO,OAAQ,IAAK3E,EAAG,EAAG0E,GAAI,IAAK,CAAC,SAAW,OAAO,SAAW,UAAY,OAAO,QAAQ,MAAQ,YAAc,QAAQ,KAAK1E,CAAC,EACvI,CA0BG,MAAA8E,GAAK,IAAM,CACd,EAyFA,SAASC,GAAG/E,EAAI,EAAG,EAAG,CACpB,MAAMC,EAAI,GAAG,KAAO,IAAKC,EAAI,GAAG,KAAO,IAAKuB,EAAI,GAAG,UAAY,EAAGI,EAAI,GAAG,QAAU,GACnF,IAAI,EAAI5B,EAAI,KAAK,IAAIwB,EAAGzB,CAAC,EACzB,GAAI6B,EAAG,CACL,MAAM,EAAI,KAAK,OAAM,EAAImD,EAAI,KAAK,MAAM,EAAInD,EAAI,CAAC,EACjD,EAAI,KAAK,MAAM,EAAI,EAAE,EAAI,EAAI,EAAImD,EAAI,EAAIA,CAC1C,CACD,OAAO,KAAK,IAAI,EAAG9E,CAAC,EAAI,CAC1B,CACA,SAAS+E,GAAGjF,EAAG,EAAI,EAAGC,EAAGC,EAAG,CAC1B,OAAO,kBAAkBuB,EAAG,CAC1B,MAAMI,EAAI,SAAS7B,EAAE,IAAI,KAAKyB,EAAE,IAAK,GAAMyD,GAAE,CAAC,CAAC,CAAC,IAChD,IAAI,EACJ,QAAS,EAAI,EAAG,EAAI,EAAG,IACrB,GAAI,CACF,OAAO,MAAMlF,EAAE,KAAKE,GAAK,KAAM,GAAGuB,CAAC,CACpC,OAAQuD,EAAG,CACVJ,GAAE,IAAI/C,CAAC,OAAO,EAAI,CAAC,qBAAqB,EAAG,EAAImD,EAAG,MAAM,IAAI,QACzDG,GAAM,WACLA,EACA,OAAOlF,GAAK,SAAWA,EAAI8E,GAAG,CAAC,CAEhC,CACX,CACO,CACH,MAAMH,GACJ,IAAI/C,CAAC,OAAO,CAAC,0BAA0BqD,GACrC,CACR,CAAO,EACF,EAAE,CACP,CACA,CACA,SAASE,GAAGpF,EAAG,EAAI,GAAIC,EAAI,IAAIwD,GAAMvD,EAAG,CACtC,OAAO,kBAAkBuB,EAAG,CAC1B,MAAMI,EAAI,SAAS7B,EAAE,IAAI,KAAKyB,EAAE,IAAK0D,GAAMD,GAAEC,CAAC,CAAC,CAAC,IAAK,EAAI,KAAK,MAC9D,GAAKlF,EAAE,OAAO,CAACkF,EAAG,IAAM,EAAI,EAAE,UAAY,EAAI,GAAG,EACjD,MAAM,EAAIpE,GAAGU,CAAC,EAAGuD,EAAI/E,EAAE,IAAI,CAAC,EAC5B,GAAI+E,EAAG,CACL,GAAI,CAAC,GAAK,EAAIA,EAAE,UAAY,EAAI,IAC9B,OAAOJ,GAAE,GAAG/C,CAAC,OAAO,EAAGmD,EAAE,MAC3B/E,EAAE,OAAO,CAAC,CACX,CACD,GAAI,CACF2E,GAAE,GAAG/C,CAAC,kBAAkB,EACxB,MAAMwD,EAAI,MAAMrF,EAAE,KAAKE,GAAK,KAAM,GAAGuB,CAAC,EACtC,OAAOmD,GAAE,GAAG/C,CAAC,SAAS,EAAG5B,EAAE,IAAI,EAAG,CAChC,MAAOoF,EACP,UAAW,KAAK,IAAK,CACtB,CAAA,EAAGA,CACL,OAAQF,EAAG,CACV,MAAMP,GAAE,GAAG/C,CAAC,WAAWqD,GAAEC,CAAC,CAAC,EAAE,EAAGA,CACjC,CACL,CACA,CA0FM,MAAAG,GAAK,qBAAsBC,GAAK,gBAAiBC,GAAK,mBAAoBC,GAAK,kBAAmBC,GAAK,kBAAmBC,GAAK,kBAAmBC,GAAK,kBAAmBC,GAAK,oBAAqBC,GAAK,6BAA8BC,GAAK,iBAClP,SAASC,GAAEhG,EAAG,CACZ,OAAO,OAAO,UAAU,SAAS,KAAKA,CAAC,CACzC,CAcA,SAASqD,GAAGrD,EAAG,CACb,OAAOA,GAAK,IACd,CAIA,SAASiG,GAAGjG,EAAG,CACb,OAAOgG,GAAEhG,CAAC,IAAM2F,EAClB,CAcA,SAASO,GAAGlG,EAAG,CACb,MAAM,EAAIgG,GAAEhG,CAAC,EACb,OAAO,IAAMsF,IAAM,IAAMC,IAAM,IAAMC,IAAM,IAAMC,IAAM,IAAME,IAAM,IAAMC,IAAM,IAAMF,EACvF,CACA,SAASS,GAAEnG,EAAG,CACZ,MAAM,EAAIgG,GAAEhG,CAAC,EACb,OAAO,GAAK6F,IAAM,GAAKC,EACzB,CASA,SAASM,GAAGpG,EAAG,CACb,GAAI,CAACqG,GAAGrG,CAAC,EACP,MAAO,GACT,MAAM,EAAI,sBAAuBC,EAAI,8BAA+BC,EAAI,OACtE,IAAM,SAAS,UAAU,SAAS,KAAK,OAAO,UAAU,cAAc,EAAE,QAAQ,EAAG,MAAM,EAAE,QACzF,yDACA,OACN,EAAQ,GACR,EACE,OAAQiG,GAAEnG,CAAC,EAAIE,EAAID,GAAG,KAAKqG,GAAGtG,CAAC,CAAC,CAClC,CACA,SAASuG,GAAGvG,EAAG,EAAG,CAChB,OAAOA,IAAI,CAAC,CACd,CACA,SAASwG,GAAGxG,EAAG,EAAG,CAChB,MAAMC,EAAIsG,GAAGvG,EAAG,CAAC,EACjB,OAAOoG,GAAGnG,CAAC,EAAIA,EAAI,MACrB,CAIWuG,GAAGrG,GAAG,KAAK,EAAQqG,GAAGrG,GAAG,SAAS,EAC7C,SAASsG,GAAEzG,EAAG,CACZ,OAAOgG,GAAEhG,CAAC,IAAM+F,EAClB,CAIA,SAASM,GAAGrG,EAAG,CACb,MAAM,EAAI,OAAOA,EACjB,MAAO,CAAC,CAACA,IAAM,GAAK,UAAY,GAAK,WACvC,CACA,SAAS0G,GAAE1G,EAAG,CACZ,MAAO,CAAC,CAACA,GAAK,OAAOA,GAAK,QAC5B,CACA,SAAS2G,GAAE3G,EAAG,CACZ,OAAO0G,GAAE1G,CAAC,GAAK,CAACyG,GAAEzG,CAAC,CACrB,CAsBA,MAAM4G,GAAM5G,GAAM,CAChB,UAAW,KAAKA,EACd,GAAI,OAAO,UAAU,eAAe,KAAKA,EAAG,CAAC,EAC3C,MAAO,GACX,MAAO,EACT,EA0BA,SAAS6G,GAAG7G,EAAG,CACb,MAAM,EAAI,CAAA,EACV,UAAWC,KAAKD,EACd,OAAO,UAAU,eAAe,KAAKA,EAAGC,CAAC,GAAK,EAAE,KAAKA,CAAC,EACxD,OAAO,CACT,CAqCA,SAAS6G,GAAG9G,EAAG,EAAGC,EAAI,GAAI,CACxB,GAAI0G,GAAE3G,CAAC,GAAK2G,GAAE,CAAC,EACb,UAAWzG,KAAK2G,GAAG,CAAC,GACjB5G,GAAK,OAAOD,EAAEE,CAAC,EAAI,OAASyG,GAAE3G,EAAEE,CAAC,CAAC,GAAKyG,GAAE,EAAEzG,CAAC,CAAC,EAAI4G,GAAG9G,EAAEE,CAAC,EAAG,EAAEA,CAAC,EAAGD,CAAC,EAAID,EAAEE,CAAC,EAAI,EAAEA,CAAC,GACpF,OAAOF,CACT,CA6DA,SAAS+G,GAAG/G,KAAM,EAAG,CACnB,OAAO,IAAIA,EAAE,YAAY,GAAG,CAAC,CAC/B,CAmHA,SAASkF,GAAElF,EAAG,EAAI;AAAA,EACfC,EAAI,EAAGC,EAAI,EAAG,CACf,GAAI+F,GAAGjG,CAAC,EACN,MAAO,IAAIA,CAAC,IACd,GAAIkG,GAAGlG,CAAC,EACN,MAAO,GAAKA,EACd,GAAImG,GAAEnG,CAAC,EACL,MAAO,OACT,GAAIE,EAAID,EACN,OAAOwG,GAAEzG,CAAC,EAAI,QAAU,QAC1B,IAAIyB,EAAI,GAAII,EAAI,GAChB,QAAS,EAAI,EAAG,EAAI3B,EAAG,IACrBuB,GAAK,KAAM,EAAI,IAAMI,GAAK,MAC5B,OAAO4E,GAAEzG,CAAC,EAAI,IAAIA,EAAE,IACjB,GAAM,EAAIyB,EAAIyD,GAAE,EAAG,EAAGjF,EAAGC,EAAI,CAAC,CAChC,EAAC,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG2B,CAAC,IAAM,IAAIgF,GAAG7G,CAAC,EAAE,IACjC,GAAM,GAAG,CAAC,GAAGyB,CAAC,GAAG,CAAC,KAAKyD,GACtBlF,EAAE,CAAC,EACH,EACAC,EACAC,EAAI,CACV,CAAK,EACL,EAAI,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG2B,CAAC,GACtB,CACA,SAASyE,GAAGtG,EAAG,CACb,GAAIA,GAAK,KAAM,CACb,GAAI,CACF,OAAO,SAAS,UAAU,SAAS,KAAKA,CAAC,CAC/C,MAAY,CACP,CACD,GAAI,CACF,MAAO,GAAKA,CAClB,MAAY,CACP,CACF,CACD,MAAO,EACT,CACA,SAASgH,GAAGhH,EAAG,EAAI,GAAIC,EAAI,CAAC,GAAI,OAAQ,KAAK,EAAG,CAC9C,OAAO0G,GAAE3G,CAAC,EAAI,OAAO,KAAKA,CAAC,EAAE,OAAQE,GAAM,CACzC,QAASuB,EAAI,EAAGI,EAAI5B,EAAE,OAAQwB,EAAII,EAAGJ,IACnC,GAAIzB,EAAEE,CAAC,GAAKD,EAAEwB,CAAC,EACb,MAAO,GACX,MAAO,EACX,CAAG,EAAE,KAAI,EAAG,IAAKvB,GAAM,GAAGA,CAAC,IAAIF,EAAEE,CAAC,CAAC,EAAE,EAAE,KAAK,GAAG,EAAI,EAAI,OAAOF,CAAC,CAC/D,CACA,SAASiH,GAAGjH,EAAG,EAAGC,EAAI,GAAI,CACxB,IAAIC,EAAI,CAAA,EACR,OAAOF,IAAM,EAAIE,EAAI,OAAOF,GAAK,UAAY,OAAO,GAAK,UAAY,CAACA,GAAK,CAAC,GAAKE,EAAE,KAAK,CACtF,KAAMD,EACN,SAAU,EACV,SAAUD,CACd,CAAG,EAAGE,IAAuB,IAAI,IAAI,CAAC,GAAG,OAAO,KAAKF,CAAC,EAAG,GAAG,OAAO,KAAK,CAAC,CAAC,CAAC,EAAG,QAAS,GAAM,CACzF,MAAMkH,EAAIjH,EAAI,GAAGA,CAAC,IAAI,CAAC,GAAK,EAC5BC,EAAIA,EAAE,OAAO+G,GAAGjH,EAAE,CAAC,EAAG,EAAE,CAAC,EAAGkH,CAAC,CAAC,CAClC,CAAG,EAAGhH,EACN,CAmBA,SAASiH,GAAGnH,EAAG,EAAG,CAChB,MAAMC,EAAI,OAAO,GAAG,gBAAkB,SAAW,KAAK,IAAI,EAAE,eAAgB,CAAC,EAAI,GAAIC,EAAI,OAAO,GAAG,qBAAuB,SAAW,KAAK,IAAI,EAAE,oBAAqB,CAAC,EAAI,GAC1K,SAASuB,EAAEuD,EAAGG,EAAI,GAAI,CACpB,OAAOe,GAAGlB,CAAC,GAAKyB,GAAEzB,CAAC,GAAKmB,GAAEnB,CAAC,EAAI,CAAE,MAAOA,EAAG,UAAWjB,IAAK,EAAGoB,GAAK,OAAO,UAAU,eAAe,KAAKH,EAAG,WAAW,EAAIA,EAAI,CAC5H,GAAGA,EACH,UAAWjB,GAAG,CACpB,CACG,CACD,IAAIlC,EAAIJ,EAAEzB,EAAG,EAAE,EACf,MAAO,CACL,IAAK,IAAM,CACT,IAAIgF,EAAI,GACR,OAAQ/E,GAAK,GAAK8D,GAAG,EAAGlC,EAAE,UAAY5B,EAAI,KAC1CC,GAAK,GAAK6D,GAAG,EAAG7D,KAAO8E,EAAI,IAAKA,IAAMnD,EAAE,MAAQ,QAASA,CAC1D,EACD,IAAMmD,GAAMnD,EAAIJ,EAAEuD,EAAG,EAAE,CAC3B,CACA,CACK,MAAsQoC,GAAK,OAAO,OAAS,IAW9Q,CAAC,EAAEjH,GAAE,QAAUA,GAAE,MAAQA,GAAE,SAAWA,GAAE,iBAAmBA,GAAE,mCAAqCA,GAAE,mBAAqBA,GAAE,kBAAkB,UAAU,4BAA8BA,GAAE,KAAOA,GAAE,IAAI,iBAAqB,MAAAkH,IAAM,IAAM,CACrP,GAAI,CAAClH,GAAE,gBACL,MAAO,GACT,MAAMH,EAAI,IAAI,gBAAgB,EAAG,CAAC,EAAG,EAAIA,EAAE,WAAW,IAAI,EAC1D,GAAI,CAAC,EACH,MAAO,GACT,EAAE,SAAS,EAAG,EAAG,EAAG,CAAC,EACrB,MAAMC,EAAID,EAAE,wBACZ,GAAI,CACF,EAAE,cAAcC,EAAG,WAAW,CAClC,MAAU,CACN,MAAO,EACR,CACD,MAAO,EACT,GAAC,EAAwCqH,GAAK,CAACtH,EAAG,EAAI,KAAO,CAC3D,IAAIC,EAAID,EAAE,cACV,MAAME,EAAID,EAAE,QAAQ,IAAI,GAAK,EAAGwB,EAAIxB,EAAE,QAAQ,IAAI,GAAK,EAAG4B,EAAI5B,EAAE,QAAQ,IAAI,GAAK,GAChFC,GAAKuB,GAAKI,KAAO5B,EAAIA,EAAE,MAAM,CAAC,GAAIC,IAAM,EAAI,GAAIuB,IAAM,EAAI,GAAII,IAAM,EAAI,IACzE,MAAM,EAAI,SAAS5B,EAAG,CAAC,EACvB,GAAI,MAAM,CAAC,EACT,MAAM,IAAI,MAAM,uBAAuBD,CAAC,KAAK,CAAC,SAAS,EACzD,OAAO,CACT,EA2BA,SAASuH,GAAGvH,EAAG,CACb,OAAO,IAAI,YAAW,EAAG,OAAOA,CAAC,CACnC,CAkDA,SAASwH,GAAGxH,EAAG,CACb,OAAO,OAAO,aAAa,MACzB,KACA,IAAI,YAAYA,CAAC,CACrB,CACA,CAOA,SAASyH,GAAGzH,EAAG,EAAG,CAChB,MAAMC,EAAI,GAAG,KAAMC,EAAI,GAAG,OAAQuB,EAAI,GAAG,KACzC,OAAOA,EAAI,IAAI,KAAK,CAACzB,CAAC,EAAG,CACvB,KAAMyB,CACP,CAAA,EAAIxB,EAAIC,IAAMgB,GAAG,OAAS,IAAI,KAAK,CAAClB,CAAC,EAAG,CAAE,KAAM,GAAGC,CAAC,IAAIC,CAAC,EAAI,CAAA,EAAIA,IAAMgB,GAAG,KAAO,IAAI,KAAK,CAAClB,CAAC,EAAG,CAC9F,KAAM,GAAGC,CAAC,YAAYC,CAAC,EACxB,CAAA,EAAI,IAAI,KAAK,CAACF,CAAC,EAAG,CACjB,KAAM,GAAGC,CAAC,EACX,CAAA,EAAI,IAAI,KAAK,CAACD,CAAC,CAAC,CACnB,CACA,MAAM0H,GAAM1H,GAAM,CAChB,IAAI,EAAIiB,GAAE,QACV,OAAQ,IAAI,SAASjB,CAAC,EAAE,UAAU,EAAG2H,GAAE,CAAE,EAAE,SAAS,EAAE,EAAE,YAAa,EAAA,CACnE,IAAK,WACH,EAAI1G,GAAE,KACN,MACF,IAAK,WACL,IAAK,WACL,IAAK,WACL,IAAK,WACH,EAAIA,GAAE,KACN,MACF,IAAK,WACH,EAAIA,GAAE,IACN,MACF,IAAK,WACH,EAAIA,GAAE,IACN,MACF,IAAK,WACH,EAAIA,GAAE,KACN,MACF,IAAK,WACH,EAAIA,GAAE,IACN,MACF,IAAK,WACH,EAAIA,GAAE,IACN,KACH,CACD,OAAO,CACT,EA+CA,SAAS0G,IAAK,CACZ,MAAM3H,EAAI,YAAY,GAAG,SAAS,EAAG,EAAI,IAAI,WAAWA,EAAE,MAAM,EAChE,OAAQ,EAAE,CAAC,EAAI,SAAW,EAAE,CAAC,EAAI,MAAQ,EAAE,CAAC,EAAI,IAAM,EAAE,CAAC,EAAC,CACxD,IAAK,WACH,MAAO,GACT,IAAK,YACH,MAAO,EACV,CACH,CA4NA,IAAI4H,GAAK,SAAS5H,EAAG,EAAG,CACtB,OAAO4H,GAAK,OAAO,gBAAkB,CAAE,UAAW,CAAE,CAAA,YAAc,OAAS,SAAS3H,EAAGC,EAAG,CACxFD,EAAE,UAAYC,CAClB,GAAO,SAASD,EAAGC,EAAG,CAClB,QAASuB,KAAKvB,EACZ,OAAO,UAAU,eAAe,KAAKA,EAAGuB,CAAC,IAAMxB,EAAEwB,CAAC,EAAIvB,EAAEuB,CAAC,EAC/D,EAAKmG,GAAG5H,EAAG,CAAC,CACZ,EACA,SAAS6H,GAAG7H,EAAG,EAAG,CAChB,GAAI,OAAO,GAAK,YAAc,IAAM,KAClC,MAAM,IAAI,UAAU,uBAAyB,OAAO,CAAC,EAAI,+BAA+B,EAC1F4H,GAAG5H,EAAG,CAAC,EACP,SAASC,GAAI,CACX,KAAK,YAAcD,CACpB,CACDA,EAAE,UAAY,IAAM,KAAO,OAAO,OAAO,CAAC,GAAKC,EAAE,UAAY,EAAE,UAAW,IAAIA,EAChF,CA6FA,SAAS6H,GAAG9H,EAAG,CACb,IAAI,EAAI,OAAO,QAAU,YAAc,OAAO,SAAUC,EAAI,GAAKD,EAAE,CAAC,EAAGE,EAAI,EAC3E,GAAID,EACF,OAAOA,EAAE,KAAKD,CAAC,EACjB,GAAIA,GAAK,OAAOA,EAAE,QAAU,SAC1B,MAAO,CACL,KAAM,UAAW,CACf,OAAOA,GAAKE,GAAKF,EAAE,SAAWA,EAAI,QAAS,CAAE,MAAOA,GAAKA,EAAEE,GAAG,EAAG,KAAM,CAACF,EACzE,CACP,EACE,MAAM,IAAI,UAAU,EAAI,0BAA4B,iCAAiC,CACvF,CACA,SAAS+H,GAAG/H,EAAG,EAAG,CAChB,IAAIC,EAAI,OAAO,QAAU,YAAcD,EAAE,OAAO,QAAQ,EACxD,GAAI,CAACC,EACH,OAAOD,EACT,IAAIE,EAAID,EAAE,KAAKD,CAAC,EAAGyB,EAAGI,EAAI,CAAE,EAAE,EAC9B,GAAI,CACF,MAAQ,IAAM,QAAU,KAAM,IAAM,EAAEJ,EAAIvB,EAAE,KAAM,GAAE,MAClD2B,EAAE,KAAKJ,EAAE,KAAK,CACjB,OAAQ,EAAG,CACV,EAAI,CAAE,MAAO,EACjB,QAAY,CACR,GAAI,CACFA,GAAK,CAACA,EAAE,OAASxB,EAAIC,EAAE,SAAWD,EAAE,KAAKC,CAAC,CAChD,QAAc,CACR,GAAI,EACF,MAAM,EAAE,KACX,CACF,CACD,OAAO2B,CACT,CACA,SAASmG,GAAGhI,EAAG,EAAGC,EAAG,CACnB,GAAIA,GAAK,UAAU,SAAW,EAC5B,QAASC,EAAI,EAAGuB,EAAI,EAAE,OAAQI,EAAG3B,EAAIuB,EAAGvB,KACrC2B,GAAK,EAAE3B,KAAK,MAAQ2B,IAAMA,EAAI,MAAM,UAAU,MAAM,KAAK,EAAG,EAAG3B,CAAC,GAAI2B,EAAE3B,CAAC,EAAI,EAAEA,CAAC,GACnF,OAAOF,EAAE,OAAO6B,GAAK,MAAM,UAAU,MAAM,KAAK,CAAC,CAAC,CACpD,CA+DA,SAASoG,GAAEjI,EAAG,CACZ,OAAO,OAAOA,GAAK,UACrB,CACA,SAASkI,GAAGlI,EAAG,CACb,IAAI,EAAI,SAASE,EAAG,CAClB,MAAM,KAAKA,CAAC,EAAGA,EAAE,MAAQ,IAAI,MAAO,EAAC,KACzC,EAAKD,EAAID,EAAE,CAAC,EACV,OAAOC,EAAE,UAAY,OAAO,OAAO,MAAM,SAAS,EAAGA,EAAE,UAAU,YAAcA,EAAGA,CACpF,CACA,IAAIkI,GAAKD,GAAG,SAASlI,EAAG,CACtB,OAAO,SAASC,EAAG,CACjBD,EAAE,IAAI,EAAG,KAAK,QAAUC,EAAIA,EAAE,OAAS;AAAA,EACvCA,EAAE,IAAI,SAASC,EAAGuB,EAAG,CACnB,OAAOA,EAAI,EAAI,KAAOvB,EAAE,SAAQ,CACtC,CAAK,EAAE,KAAK;AAAA,GACT,EAAI,GAAI,KAAK,KAAO,sBAAuB,KAAK,OAASD,CAC5D,CACA,CAAC,EACD,SAASmI,GAAGpI,EAAG,EAAG,CAChB,GAAIA,EAAG,CACL,IAAIC,EAAID,EAAE,QAAQ,CAAC,EACnB,GAAKC,GAAKD,EAAE,OAAOC,EAAG,CAAC,CACxB,CACH,CACA,IAAIoI,GAAK,UAAW,CAClB,SAASrI,EAAE,EAAG,CACZ,KAAK,gBAAkB,EAAG,KAAK,OAAS,GAAI,KAAK,WAAa,KAAM,KAAK,YAAc,IACxF,CACD,OAAOA,EAAE,UAAU,YAAc,UAAW,CAC1C,IAAI,EAAGC,EAAGC,EAAGuB,EAAGI,EAChB,GAAI,CAAC,KAAK,OAAQ,CAChB,KAAK,OAAS,GACd,IAAI,EAAI,KAAK,WACb,GAAI,EACF,GAAI,KAAK,WAAa,KAAM,MAAM,QAAQ,CAAC,EACzC,GAAI,CACF,QAAS,EAAIiG,GAAG,CAAC,EAAG9C,EAAI,EAAE,KAAI,EAAI,CAACA,EAAE,KAAMA,EAAI,EAAE,KAAI,EAAI,CACvD,IAAIG,EAAIH,EAAE,MACVG,EAAE,OAAO,IAAI,CACd,CACF,OAAQmD,EAAG,CACV,EAAI,CAAE,MAAOA,EACzB,QAAoB,CACR,GAAI,CACFtD,GAAK,CAACA,EAAE,OAAS/E,EAAI,EAAE,SAAWA,EAAE,KAAK,CAAC,CACxD,QAAsB,CACR,GAAI,EACF,MAAM,EAAE,KACX,CACF,MAED,EAAE,OAAO,IAAI,EACjB,IAAI,EAAI,KAAK,gBACb,GAAIgI,GAAE,CAAC,EACL,GAAI,CACF,GACD,OAAQK,EAAG,CACVzG,EAAIyG,aAAaH,GAAKG,EAAE,OAAS,CAACA,CAAC,CACpC,CACH,IAAIC,EAAI,KAAK,YACb,GAAIA,EAAG,CACL,KAAK,YAAc,KACnB,GAAI,CACF,QAASC,EAAIV,GAAGS,CAAC,EAAGE,EAAID,EAAE,KAAI,EAAI,CAACC,EAAE,KAAMA,EAAID,EAAE,KAAI,EAAI,CACvD,IAAIE,EAAID,EAAE,MACV,GAAI,CACFE,GAAGD,CAAC,CACL,OAAQJ,EAAG,CACVzG,EAAIA,GAAK,CAAA,EAAIyG,aAAaH,GAAKtG,EAAImG,GAAGA,GAAG,GAAID,GAAGlG,CAAC,CAAC,EAAGkG,GAAGO,EAAE,MAAM,CAAC,EAAIzG,EAAE,KAAKyG,CAAC,CAC9E,CACF,CACF,OAAQA,EAAG,CACVpI,EAAI,CAAE,MAAOoI,EACvB,QAAkB,CACR,GAAI,CACFG,GAAK,CAACA,EAAE,OAAShH,EAAI+G,EAAE,SAAW/G,EAAE,KAAK+G,CAAC,CACtD,QAAoB,CACR,GAAItI,EACF,MAAMA,EAAE,KACX,CACF,CACF,CACD,GAAI2B,EACF,MAAM,IAAIsG,GAAGtG,CAAC,CACjB,CACF,EAAE7B,EAAE,UAAU,IAAM,SAAS,EAAG,CAC/B,IAAIC,EACJ,GAAI,GAAK,IAAM,KACb,GAAI,KAAK,OACP0I,GAAG,CAAC,MACD,CACH,GAAI,aAAa3I,EAAG,CAClB,GAAI,EAAE,QAAU,EAAE,WAAW,IAAI,EAC/B,OACF,EAAE,WAAW,IAAI,CAClB,EACA,KAAK,aAAeC,EAAI,KAAK,eAAiB,MAAQA,IAAM,OAASA,EAAI,CAAE,GAAE,KAAK,CAAC,CACrF,CACJ,EAAED,EAAE,UAAU,WAAa,SAAS,EAAG,CACtC,IAAIC,EAAI,KAAK,WACb,OAAOA,IAAM,GAAK,MAAM,QAAQA,CAAC,GAAKA,EAAE,SAAS,CAAC,CACnD,EAAED,EAAE,UAAU,WAAa,SAAS,EAAG,CACtC,IAAIC,EAAI,KAAK,WACb,KAAK,WAAa,MAAM,QAAQA,CAAC,GAAKA,EAAE,KAAK,CAAC,EAAGA,GAAKA,EAAI,CAACA,EAAG,CAAC,EAAI,CACpE,EAAED,EAAE,UAAU,cAAgB,SAAS,EAAG,CACzC,IAAIC,EAAI,KAAK,WACbA,IAAM,EAAI,KAAK,WAAa,KAAO,MAAM,QAAQA,CAAC,GAAKmI,GAAGnI,EAAG,CAAC,CAC/D,EAAED,EAAE,UAAU,OAAS,SAAS,EAAG,CAClC,IAAIC,EAAI,KAAK,YACbA,GAAKmI,GAAGnI,EAAG,CAAC,EAAG,aAAaD,GAAK,EAAE,cAAc,IAAI,CACzD,EAAKA,EAAE,MAAQ,UAAW,CACtB,IAAI,EAAI,IAAIA,EACZ,OAAO,EAAE,OAAS,GAAI,CACvB,EAAA,EAAIA,CACP,IACAqI,GAAG,MACH,SAASO,GAAG5I,EAAG,CACb,OAAOA,aAAaqI,IAAMrI,GAAK,WAAYA,GAAKiI,GAAEjI,EAAE,MAAM,GAAKiI,GAAEjI,EAAE,GAAG,GAAKiI,GAAEjI,EAAE,WAAW,CAC5F,CACA,SAAS2I,GAAG3I,EAAG,CACbiI,GAAEjI,CAAC,EAAIA,EAAG,EAAGA,EAAE,YAAW,CAC5B,CACA,IAAI6I,GAAK,CACP,iBAAkB,KAClB,sBAAuB,KACvB,QAAS,OACT,sCAAuC,GACvC,yBAA0B,EAC5B,EAAGC,GAAK,CACN,WAAY,SAAS9I,EAAG,EAAG,CACzB,QAASC,EAAI,CAAA,EAAIC,EAAI,EAAGA,EAAI,UAAU,OAAQA,IAC5CD,EAAEC,EAAI,CAAC,EAAI,UAAUA,CAAC,EAExB,OAAkE,WAAW,MAAM,OAAQ8H,GAAG,CAAChI,EAAG,CAAC,EAAG+H,GAAG9H,CAAC,CAAC,CAAC,CAC7G,EACD,aAAc,SAASD,EAAG,CAExB,OAA2B,aAAcA,CAAC,CAC3C,EACD,SAAU,MACZ,EACA,SAAS+I,GAAG/I,EAAG,CACb8I,GAAG,WAAW,UAAW,CACvB,MAAM9I,CACV,CAAG,CACH,CACA,SAASgJ,IAAK,CACd,CACA,SAASC,GAAGjJ,EAAG,CACbA,GACF,CACA,IAAIkJ,GAAK,SAASlJ,EAAG,CACnB6H,GAAG,EAAG7H,CAAC,EACP,SAAS,EAAEC,EAAG,CACZ,IAAIC,EAAIF,EAAE,KAAK,IAAI,GAAK,KACxB,OAAOE,EAAE,UAAY,GAAID,GAAKC,EAAE,YAAcD,EAAG2I,GAAG3I,CAAC,GAAKA,EAAE,IAAIC,CAAC,GAAKA,EAAE,YAAciJ,GAAIjJ,CAC3F,CACD,OAAO,EAAE,OAAS,SAASD,EAAGC,EAAGuB,EAAG,CAClC,OAAO,IAAI2H,GAAGnJ,EAAGC,EAAGuB,CAAC,CACtB,EAAE,EAAE,UAAU,KAAO,SAASxB,EAAG,CAChC,KAAK,WAAa,KAAK,MAAMA,CAAC,CAC/B,EAAE,EAAE,UAAU,MAAQ,SAASA,EAAG,CACjC,KAAK,YAAc,KAAK,UAAY,GAAI,KAAK,OAAOA,CAAC,EACzD,EAAK,EAAE,UAAU,SAAW,UAAW,CACnC,KAAK,YAAc,KAAK,UAAY,GAAI,KAAK,UAAS,EAC1D,EAAK,EAAE,UAAU,YAAc,UAAW,CACtC,KAAK,SAAW,KAAK,UAAY,GAAID,EAAE,UAAU,YAAY,KAAK,IAAI,EAAG,KAAK,YAAc,KAC7F,EAAE,EAAE,UAAU,MAAQ,SAASC,EAAG,CACjC,KAAK,YAAY,KAAKA,CAAC,CACxB,EAAE,EAAE,UAAU,OAAS,SAASA,EAAG,CAClC,GAAI,CACF,KAAK,YAAY,MAAMA,CAAC,CAC9B,QAAc,CACR,KAAK,YAAW,CACjB,CACL,EAAK,EAAE,UAAU,UAAY,UAAW,CACpC,GAAI,CACF,KAAK,YAAY,UACvB,QAAc,CACR,KAAK,YAAW,CACjB,CACF,EAAE,CACL,EAAEoI,EAAE,EAAGgB,GAAK,SAAS,UAAU,KAC/B,SAASC,GAAGtJ,EAAG,EAAG,CAChB,OAAOqJ,GAAG,KAAKrJ,EAAG,CAAC,CACrB,CACA,IAAIuJ,GAAK,UAAW,CAClB,SAASvJ,EAAE,EAAG,CACZ,KAAK,gBAAkB,CACxB,CACD,OAAOA,EAAE,UAAU,KAAO,SAAS,EAAG,CACpC,IAAIC,EAAI,KAAK,gBACb,GAAIA,EAAE,KACJ,GAAI,CACFA,EAAE,KAAK,CAAC,CACT,OAAQC,EAAG,CACVsJ,GAAGtJ,CAAC,CACL,CACJ,EAAEF,EAAE,UAAU,MAAQ,SAAS,EAAG,CACjC,IAAIC,EAAI,KAAK,gBACb,GAAIA,EAAE,MACJ,GAAI,CACFA,EAAE,MAAM,CAAC,CACV,OAAQC,EAAG,CACVsJ,GAAGtJ,CAAC,CACL,MAEDsJ,GAAG,CAAC,CACV,EAAKxJ,EAAE,UAAU,SAAW,UAAW,CACnC,IAAI,EAAI,KAAK,gBACb,GAAI,EAAE,SACJ,GAAI,CACF,EAAE,SAAQ,CACX,OAAQC,EAAG,CACVuJ,GAAGvJ,CAAC,CACL,CACJ,EAAED,CACL,IAAKoJ,GAAK,SAASpJ,EAAG,CACpB6H,GAAG,EAAG7H,CAAC,EACP,SAAS,EAAEC,EAAGC,EAAGuB,EAAG,CAClB,IAAII,EAAI7B,EAAE,KAAK,IAAI,GAAK,KAAM,EAC9B,GAAIiI,GAAEhI,CAAC,GAAK,CAACA,EACX,EAAI,CACF,KAAMA,GAAK,OACX,MAAOC,GAAK,OACZ,SAAUuB,GAAK,MACvB,MACS,CACH,IAAI,EACJI,GAAKgH,GAAG,0BAA4B,EAAI,OAAO,OAAO5I,CAAC,EAAG,EAAE,YAAc,UAAW,CACnF,OAAO4B,EAAE,aACV,EAAE,EAAI,CACL,KAAM5B,EAAE,MAAQqJ,GAAGrJ,EAAE,KAAM,CAAC,EAC5B,MAAOA,EAAE,OAASqJ,GAAGrJ,EAAE,MAAO,CAAC,EAC/B,SAAUA,EAAE,UAAYqJ,GAAGrJ,EAAE,SAAU,CAAC,CAChD,GAAW,EAAIA,CACV,CACD,OAAO4B,EAAE,YAAc,IAAI0H,GAAG,CAAC,EAAG1H,CACnC,CACD,OAAO,CACT,EAAEqH,EAAE,EACJ,SAASM,GAAGxJ,EAAG,CACb+I,GAAG/I,CAAC,CACN,CACA,SAASyJ,GAAGzJ,EAAG,CACb,MAAMA,CACR,CACA,IAAImJ,GAAK,CACP,OAAQ,GACR,KAAMH,GACN,MAAOS,GACP,SAAUT,EACZ,EAAGU,GAAK,UAAW,CACjB,OAAO,OAAO,QAAU,YAAc,OAAO,YAAc,cAC7D,IACA,SAASC,GAAG3J,EAAG,CACb,OAAOA,CACT,CAMA,SAAS4J,GAAG5J,EAAG,CACb,OAAOA,EAAE,SAAW,EAAI2J,GAAK3J,EAAE,SAAW,EAAIA,EAAE,CAAC,EAAI,SAASC,EAAG,CAC/D,OAAOD,EAAE,OAAO,SAASE,EAAGuB,EAAG,CAC7B,OAAOA,EAAEvB,CAAC,CACX,EAAED,CAAC,CACR,CACA,EACS,UAAW,CAClB,SAASD,EAAE,EAAG,CACZ,IAAM,KAAK,WAAa,EACzB,CACD,OAAOA,EAAE,UAAU,KAAO,SAAS,EAAG,CACpC,IAAIC,EAAI,IAAID,EACZ,OAAOC,EAAE,OAAS,KAAMA,EAAE,SAAW,EAAGA,CAC5C,EAAKD,EAAE,UAAU,UAAY,SAAS,EAAGC,EAAGC,EAAG,CAC3C,IAAIuB,EAAI,KAAMI,EAAIgI,GAAG,CAAC,EAAI,EAAI,IAAIT,GAAG,EAAGnJ,EAAGC,CAAC,EAC5C,OAAO+I,GAAG,UAAW,CACnB,IAAI,EAAIxH,EAAG,EAAI,EAAE,SAAUuD,EAAI,EAAE,OACjCnD,EAAE,IAAI,EAAI,EAAE,KAAKA,EAAGmD,CAAC,EAAIA,EAAIvD,EAAE,WAAWI,CAAC,EAAIJ,EAAE,cAAcI,CAAC,CAAC,CAClE,CAAA,EAAGA,CACL,EAAE7B,EAAE,UAAU,cAAgB,SAAS,EAAG,CACzC,GAAI,CACF,OAAO,KAAK,WAAW,CAAC,CACzB,OAAQC,EAAG,CACV,EAAE,MAAMA,CAAC,CACV,CACF,EAAED,EAAE,UAAU,QAAU,SAAS,EAAGC,EAAG,CACtC,IAAIC,EAAI,KACR,OAAOD,EAAI6J,GAAG7J,CAAC,EAAG,IAAIA,EAAE,SAASwB,EAAGI,EAAG,CACrC,IAAI,EAAI,IAAIuH,GAAG,CACb,KAAM,SAAS,EAAG,CAChB,GAAI,CACF,EAAE,CAAC,CACJ,OAAQpE,EAAG,CACVnD,EAAEmD,CAAC,EAAG,EAAE,YAAW,CACpB,CACF,EACD,MAAOnD,EACP,SAAUJ,CAClB,CAAO,EACDvB,EAAE,UAAU,CAAC,CACnB,CAAK,CACF,EAAEF,EAAE,UAAU,WAAa,SAAS,EAAG,CACtC,IAAIC,EACJ,OAAQA,EAAI,KAAK,UAAY,MAAQA,IAAM,OAAS,OAASA,EAAE,UAAU,CAAC,CAC3E,EAAED,EAAE,UAAU0J,EAAE,EAAI,UAAW,CAC9B,OAAO,IACX,EAAK1J,EAAE,UAAU,KAAO,UAAW,CAC/B,QAAS,EAAI,CAAA,EAAIC,EAAI,EAAGA,EAAI,UAAU,OAAQA,IAC5C,EAAEA,CAAC,EAAI,UAAUA,CAAC,EACpB,OAAO2J,GAAG,CAAC,EAAE,IAAI,CAClB,EAAE5J,EAAE,UAAU,UAAY,SAAS,EAAG,CACrC,IAAIC,EAAI,KACR,OAAO,EAAI6J,GAAG,CAAC,EAAG,IAAI,EAAE,SAAS5J,EAAGuB,EAAG,CACrC,IAAII,EACJ5B,EAAE,UAAU,SAAS,EAAG,CACtB,OAAO4B,EAAI,CACZ,EAAE,SAAS,EAAG,CACb,OAAOJ,EAAE,CAAC,CAClB,EAAS,UAAW,CACZ,OAAOvB,EAAE2B,CAAC,CAClB,CAAO,CACP,CAAK,CACL,EAAK7B,EAAE,OAAS,SAAS,EAAG,CACxB,OAAO,IAAIA,EAAE,CAAC,CACf,EAAEA,CACL,GAAI,EACJ,SAAS8J,GAAG9J,EAAG,CACb,IAAI,EACJ,OAAQ,EAAIA,GAAK6I,GAAG,WAAa,MAAQ,IAAM,OAAS,EAAI,OAC9D,CACA,SAASkB,GAAG/J,EAAG,CACb,OAAOA,GAAKiI,GAAEjI,EAAE,IAAI,GAAKiI,GAAEjI,EAAE,KAAK,GAAKiI,GAAEjI,EAAE,QAAQ,CACrD,CACA,SAAS6J,GAAG7J,EAAG,CACb,OAAOA,GAAKA,aAAakJ,IAAMa,GAAG/J,CAAC,GAAK4I,GAAG5I,CAAC,CAC9C,EAoBS,SAASA,EAAG,CACnB6H,GAAG,EAAG7H,CAAC,EACP,SAAS,EAAEC,EAAGC,EAAGuB,EAAGI,EAAG,EAAG,EAAG,CAC3B,IAAImD,EAAIhF,EAAE,KAAK,KAAMC,CAAC,GAAK,KAC3B,OAAO+E,EAAE,WAAa,EAAGA,EAAE,kBAAoB,EAAGA,EAAE,MAAQ9E,EAAI,SAASiF,EAAG,CAC1E,GAAI,CACFjF,EAAEiF,CAAC,CACJ,OAAQ,EAAG,CACVlF,EAAE,MAAM,CAAC,CACV,CACP,EAAQD,EAAE,UAAU,MAAOgF,EAAE,OAASnD,EAAI,SAASsD,EAAG,CAChD,GAAI,CACFtD,EAAEsD,CAAC,CACJ,OAAQ,EAAG,CACVlF,EAAE,MAAM,CAAC,CACjB,QAAgB,CACR,KAAK,YAAW,CACjB,CACP,EAAQD,EAAE,UAAU,OAAQgF,EAAE,UAAYvD,EAAI,UAAW,CACnD,GAAI,CACFA,GACD,OAAQ0D,EAAG,CACVlF,EAAE,MAAMkF,CAAC,CACjB,QAAgB,CACR,KAAK,YAAW,CACjB,CACF,EAAGnF,EAAE,UAAU,UAAWgF,CAC5B,CACD,OAAO,EAAE,UAAU,YAAc,UAAW,CAC1C,IAAI/E,EACJ,GAAI,CAAC,KAAK,mBAAqB,KAAK,kBAAiB,EAAI,CACvD,IAAIC,EAAI,KAAK,OACbF,EAAE,UAAU,YAAY,KAAK,IAAI,EAAG,CAACE,KAAOD,EAAI,KAAK,cAAgB,MAAQA,IAAM,QAAUA,EAAE,KAAK,IAAI,EACzG,CACF,EAAE,CACL,GAAEiJ,EAAE,EAsPJ,MAAMc,WAAW,KAAM,CACrB,KACA,SACA,WACA,YAAY,EAAG/J,EAAG,CAChB,MAAM,CAAC,EAAG,KAAK,KAAO,YAAa,KAAK,SAAWA,EAAG,KAAK,WAAaA,EAAE,MAC3E,CACD,QAAS,CACP,MAAO,CACL,KAAM,KAAK,KACX,QAAS,KAAK,QACd,MAAO,KAAK,MACZ,SAAU,KAAK,SACf,WAAY,KAAK,UACvB,CACG,CACH,CACA,IAAIgK,GACJ,SAASC,GAAGlK,EAAG,CACbiK,GAAKjK,EAAGA,IAAKiK,GAAK,IACpB,CACA,MAAME,EAAG,CACP,YAA8B,IAAI,IAClC,KAAM,CACJF,IAAM,CAAC,KAAK,YAAY,IAAIA,EAAE,GAAK,KAAK,YAAY,IAAIA,EAAE,CAC3D,CACD,OAAO,EAAG,CACR,KAAK,YAAY,QAAShK,GAAMA,EAAE,CAAC,CAAC,CACrC,CACH,CACA,MAAMmK,GAAqB,IAAI,QAC/B,SAASC,GAAGrK,EAAG,EAAG,CAChB,IAAIC,EAAImK,GAAG,IAAIpK,CAAC,EAChBC,IAAMA,EAAoB,IAAI,IAAOmK,GAAG,IAAIpK,EAAGC,CAAC,GAChD,IAAIC,EAAID,EAAE,IAAI,CAAC,EACf,OAAOC,IAAMA,EAAI,IAAIiK,GAAMlK,EAAE,IAAI,EAAGC,CAAC,GAAIA,CAC3C,CAkEA,MAAMoK,GAAKC,GACX,SAASA,GAAGvK,EAAG,EAAG,CAChB,GAAI,CAAC0G,GAAE1G,CAAC,EACN,OAAOA,EACT,MAAMC,EAAI,OAAO,GAAG,MAAQ,UAAY,GAAG,KAAO,GAAIC,EAAI,GAAG,MAAQ,GAAIuB,EAAI,GAAG,SAAUI,EAAI,CAG5F,IAAI2I,EAAGxF,EAAGG,EAAG,CACX,MAAME,EAAInF,EAAI,GAAGA,CAAC,IAAI,OAAO8E,CAAC,CAAC,GAAK,OAAOA,CAAC,EAC5C,IAAIuD,EAAI,QAAQ,IAAIiC,EAAGxF,EAAGG,CAAC,EAC3B,MAAMqD,EAAI6B,GAAGG,EAAGxF,CAAC,EACjB,GAAI/E,GAAKyG,GAAE6B,CAAC,GAAK,EAAE,cAAeA,GAAI,CACpC,MAAME,EAAI8B,GAAGhC,EAAG,CACd,KAAM,GACN,KAAMlD,EACN,SAAU5D,CACpB,CAAS,EACD,MAAM,QAAQ8G,CAAC,IAAME,EAAE,gBAAkBD,GAAID,EAAIE,CAClD,CACD,OAAOD,EAAE,IAAK,EAAED,CACjB,EAGD,IAAIiC,EAAGxF,EAAGG,EAAGE,EAAG,CACd,MAAMkD,EAAI,QAAQ,IAAIiC,EAAGxF,EAAGK,CAAC,EAAGmD,EAAI,QAAQ,IAAIgC,EAAGxF,EAAGG,EAAGE,CAAC,EAC1D,GAAIL,GAAK,kBACP,OAAOwD,EACT,GAAID,IAAMpD,EAAG,CACX,IAAIsD,EACJ,MAAM,QAAQ+B,CAAC,EAAI/B,EAAI+B,EAAE,gBAAkB/B,EAAI4B,GAAGG,EAAGxF,CAAC,EACtD,MAAMsD,EAAI,CAAE,KAAMpI,EAAI,GAAGA,CAAC,IAAI,OAAO8E,CAAC,CAAC,GAAK,OAAOA,CAAC,EAAG,SAAUG,EAAG,SAAUoD,GAC9EE,EAAE,OAAOH,CAAC,EAAG7G,GAAKA,EAAE6G,CAAC,CACtB,CACD,OAAOE,CACR,EAED,eAAegC,EAAGxF,EAAG,CACnB,GAAI,EAAEA,KAAKwF,GACT,MAAO,GACT,IAAInF,EAAI,OAAOL,GAAK,SAAW,OAASwF,EAAExF,CAAC,EAC3C0B,GAAErB,CAAC,IAAMA,EAAI,MAAM,QAAQA,CAAC,EAAI,CAAC,GAAGA,CAAC,EAAI,CAAE,GAAGA,CAAG,GACjD,MAAMkD,EAAI,QAAQ,eAAeiC,EAAGxF,CAAC,EACrC,GAAIuD,EAAG,CACL,IAAIC,EACJ,MAAM,QAAQgC,CAAC,EAAIhC,EAAIgC,EAAE,gBAAkBhC,EAAI6B,GAAGG,EAAGxF,CAAC,EACtD,MAAM0D,EAAI,CAAE,KAAMxI,EAAI,GAAGA,CAAC,IAAI,OAAO8E,CAAC,CAAC,GAAK,OAAOA,CAAC,EAAG,SAAU,OAAQ,SAAUK,GACnFmD,EAAE,OAAOE,CAAC,EAAGjH,GAAKA,EAAEiH,CAAC,CACtB,CACD,OAAOH,CACR,EAED,IAAIiC,EAAGxF,EAAG,CACR,OAAOA,IAAM,aAAeA,KAAKwF,CAClC,CAqCL,EACE,OAAO,IAAI,MAAMxK,EAAG6B,CAAC,CACvB,CACA,MAAM4I,EAAG,CACP,OACA,aAAc,CACZ,KAAK,OAAS,EACf,CACD,QAAQ,EAAG,CACT,OAAO,KAAK,OAAO,CAAC,GAAK,MAAQ,KAAK,OAAO,CAAC,EAAE,QAAU,CAC3D,CACD,IAAI,EAAGxK,EAAG,CACR,OAAO,KAAK,OAAO,CAAC,IAAM,QAAU,KAAK,OAAO,CAAC,EAAE,QAAQA,CAAC,IAAM,EACnE,CACD,gBAAgB,EAAGA,EAAGC,EAAG,CACvB,OAAO,KAAK,OAAO,CAAC,IAAM,KAAK,OAAO,CAAC,EAAI,CAAE,GAAG,KAAK,OAAO,CAAC,EAAE,QAC7DA,EAAID,EAAE,KAAKC,CAAC,EAAID,CACjB,EAAE,IACJ,CACD,YAAY,EAAGA,EAAGC,EAAG,CACnB,OAAO,KAAK,OAAO,CAAC,IAAM,KAAK,OAAO,CAAC,EAAI,CAAE,GAAG,KAAK,OAAO,CAAC,EAAE,KAC7DA,EAAID,EAAE,KAAKC,CAAC,EAAID,CACjB,EAAE,IACJ,CACD,GAAG,EAAGA,EAAGC,EAAG,CACV,OAAO,KAAK,YAAY,EAAGD,EAAGC,CAAC,EAAG,IACnC,CACD,eAAe,EAAGD,EAAG,CACnB,OAAO,KAAK,OAAO,CAAC,IAAM,KAAK,OAAO,CAAC,EAAI,KAAK,OAAO,CAAC,EAAE,OAAQC,GAAMA,IAAMD,CAAC,GAAI,IACpF,CACD,IAAI,EAAGA,EAAG,CACR,OAAO,KAAK,eAAe,EAAGA,CAAC,EAAG,IACnC,CACD,mBAAmB,EAAG,CACpB,OAAO,EAAI,KAAK,OAAO,CAAC,EAAI,CAAE,EAAG,KAAK,OAAS,CAAE,EAAE,IACpD,CAED,KAAK,KAAMA,EAAG,CACZ,OAAO,KAAK,OAAO,CAAC,GAAK,KAAK,OAAO,CAAC,EAAE,MAAM,CAAC,EAAE,QAASwB,GAAM,CAC9DA,EAAE,GAAGxB,CAAC,CACP,CAAA,EAAG,IACL,CACD,KAAK,EAAGA,EAAGC,EAAG,CACZ,MAAMuB,EAAI,IAAII,IAAM,CAClB3B,EAAID,EAAE,MAAMC,EAAG2B,CAAC,EAAI5B,EAAE,GAAG4B,CAAC,EAAG,KAAK,IAAI,EAAGJ,CAAC,CAChD,EACI,OAAO,KAAK,GAAG,EAAGA,CAAC,EAAG,IACvB,CACH,CA49HA,SAASiJ,IAAK,CACZ,MAAM1K,EAAI,CAAA,EACV,OAAOA,EAAE,QAAU,IAAI,QAAQ,CAAC,EAAGC,IAAM,CACvCD,EAAE,QAAU,EAAGA,EAAE,OAASC,CAC3B,CAAA,EAAGD,CACN,CA0FA,IAAI2K,GAAK,EACT,SAASC,GAAG5K,EAAG,CACb,MAAM,EAAI0K,KACV,IAAIzK,EAAI,GACR,MAAO,CACL,KAAMD,EAAE,MAAQ,OAAO,EAAE2K,EAAE,EAC3B,SAAU,OAAO3K,EAAE,UAAY,SAAW,KAAK,IAAIA,EAAE,SAAU,CAAC,EAAI,GACpE,IAAK,SAAY,CACf,GAAI,CAACC,EAAG,CACNA,EAAI,GACJ,GAAI,CACF,IAAIC,EACJ,MAAMuB,EAAIzB,EAAE,MAAQ,GACpBA,EAAE,QAAUE,EAAI,MAAMF,EAAE,GAAG,KAAKA,EAAE,QAAS,GAAGyB,CAAC,EAAIvB,EAAI,MAAMF,EAAE,GAAG,GAAGyB,CAAC,EAAG,EAAE,QAAQvB,CAAC,CACrF,OAAQA,EAAG,CACV,EAAE,OAAOA,CAAC,CACX,CACF,CACF,EACD,OAAQ,IAAM,EAAE,OACpB,CACA,CACA,MAAM2K,EAAG,CAEP,MAEA,QAAU,GAIV,UAAY,EAEZ,YAAc,EAId,cAAgB,GAEhB,UAMA,YAAY,EAAG,CACb,KAAK,MAAQ,GAAG,OAAStI,GAAG,EAAE,EAAG,OAAO,GAAG,aAAe,WAAa,KAAK,YAAc,KAAK,IAAI,GAAG,YAAa,CAAC,GAAI,OAAO,GAAG,eAAiB,UAAY,KAAK,iBAAiB,EAAE,aAAa,CACrM,CACD,iBAAiB,EAAG,CAClB,KAAK,cAAgB,KAAK,IAAI,EAAG,CAAC,CACnC,CACD,sBAAsB,EAAGtC,EAAI,GAAI,CAC/B,KAAK,gBAAkB,GAAK,KAAK,iBAAiB,KAAK,cAAgB,CAAC,EAAIA,GAAK,KAAK,iBAAiB,CAAC,CACzG,CACD,sBAAsB,EAAG,CACvB,KAAK,gBAAkB,IAAM,KAAK,iBAAiB,KAAK,cAAgB,CAAC,CAC1E,CAED,MAAM,EAAGA,EAAI,GAAI,CACf,MAAMC,EAAI6D,KACV,GAAI,CACF,KAAK,YAAa,EAAE,IAAG,CAC7B,QAAc,CACR,KAAK,YAAa9D,IAAM,KAAK,sBAAsB8D,GAAG,EAAG7D,CAAC,EAAG,KAAK,OAAQ,EAC3E,CACF,CAED,QAAS,CACP,KAAO,CAAC,KAAK,SAAW,KAAK,UAAY,KAAK,cAAgB,KAAK,eAAiB,IAAM,KAAK,cAAgB,IAAM,CACnH,MAAM,EAAI,KAAK,MAAM,QAAO,EAC5B,GAAI,CAAC,EACH,MACF,KAAK,MAAM,CAAC,CACb,CACD,KAAK,SAAQ,CACd,CAED,SAAS,EAAI,EAAGD,EAAI,EAAG,CACrB,aAAa,KAAK,SAAS,EAAG,KAAK,UAAY,WAAW,IAAM,CAC9D,GAAI,EAAE,KAAK,SAAW,KAAK,UAAY,GAAK,CAAC,KAAK,MAAM,QAAS,CAC/D,QAASC,EAAI,EAAGA,EAAI,KAAK,MAAM,UAAY,CACzC,MAAMuB,EAAI,KAAK,MAAM,MAAMvB,CAAC,EAC5B,GAAI,CAACuB,EACH,MACFA,EAAE,UAAY,IAAMA,EAAE,UAAYsC,GAAG,GAAI,KAAK,MAAMtC,EAAG,EAAE,EAAG,KAAK,MAAM,YAAYvB,CAAC,GAAKA,GAC1F,CACD,KAAK,MAAM,OAAQ,IAAK,KAAK,UAAY,WACvC,IAAM,CACJ,KAAK,SAAS,EAAG,EAAED,CAAC,CACrB,EACD,IAAM,KAAK,IAAI,EAAGA,CAAC,CAE7B,EACO,CACF,EAAE,CAAC,CACL,CAED,OAAQ,CACN,KAAK,QAAU,EAChB,CAED,QAAS,CACP,KAAK,QAAU,GAAI,KAAK,OAAM,CAC/B,CACD,QAAQ,EAAG,CACT,KAAK,MAAM,OAAQA,GAAMA,EAAE,MAAQ,EAAE,IAAI,EAAG,KAAK,MAAM,QAAQ,CAAC,CACjE,CAED,YAAY,EAAG,CACb,KAAK,MAAM,CAAC,EAAG,KAAK,OAAM,CAC3B,CAED,KAAK,EAAG,CACN,KAAK,QAAQ,CAAC,EAAG,KAAK,OAAM,CAC7B,CAED,aAAa,EAAG,CACd,KAAK,iBAAiB,EAAE,cAAe,CAAA,EAAG,KAAK,QAChD,CACD,OAAQ,CACN,KAAK,MAAM,OACZ,CACH,CACA,MAAM6K,WAAWD,EAAG,CAElB,WACA,YAAY,EAAG,CACb,MAAM,CAAC,CACR,CAED,MAAM,EAAG5K,EAAI,GAAI,CACf,MAAMC,EAAI6D,KACV,GAAI,CACF,KAAK,YAAa,EAAE,IAAG,CAC7B,QAAc,CACR,EAAE,OAAM,EAAG,KAAMtC,GAAM,CACrB,KAAK,WAAaA,CAC1B,CAAO,EAAE,QAAQ,IAAM,CACf,KAAK,YAAaxB,IAAM,KAAK,sBAAsB8D,GAAG,EAAG7D,CAAC,EAAG,KAAK,OAAQ,EAClF,CAAO,CACF,CACF,CACH,CAyBA,MAAM6K,EAAG,CACP,SACA,gBACA,YAAY,EAAG,CACb,KAAK,SAAW,IAAID,GAAG,CAAC,CACzB,CAGD,KAAK,EAAG7K,EAAG,CACT,MAAMC,EAAI0K,GAAG,CACX,GAAKnJ,GAAM,IAAI,QAASI,GAAM,CAC5B,KAAK,gBAAkB,EAAE,CACvB,GAAGJ,EACH,QAAS,IAAM,CACb,KAAK,gBAAkB,OAAQA,GAAG,UAAO,EAAMI,GAChD,CACX,CAAS,CACT,CAAO,EACD,KAAM,CAAC5B,CAAC,CACd,CAAK,EACD,OAAO,KAAK,SAAS,KAAKC,CAAC,EAAGA,CAC/B,CAED,YAAY,EAAGD,EAAG,CAChB,OAAO,KAAK,QAAS,KAAK,KAAK,EAAGA,CAAC,CACpC,CAED,WAAY,CACV,KAAK,iBAAmB,KAAK,iBAC9B,CAED,OAAQ,CACN,KAAK,SAAS,MAAO,EAAE,KAAK,UAAS,CACtC,CACH,CA8EA,SAAS+K,GAAGhL,EAAG,CACb,MAAM,EAAI,OAAOA,EAAE,WAAa,UAAYA,EAAE,UAAY,GAAIC,EAAID,EAAE,WAAa,CAAA,EACjF,IAAIE,EAAIF,EAAE,QACV,GAAIA,EAAE,SACJ,OAAOA,EAAE,SAASgL,EAAE,EAAE,CAAE,QAAS9K,EAAG,UAAWD,EAAG,UAAW,CAAG,CAAA,EAClE,MAAMwB,EAAI,CAAE,EAAEI,EAAKsD,IAAO1D,EAAE,KAAK0D,CAAC,EAAG,IAAM,CACzC,MAAM,EAAI1D,EAAE,QAAQ0D,CAAC,EACrB,EAAI,IAAM1D,EAAE,OAAO,EAAG,CAAC,CAC3B,GACE,IAAI,EAAIxB,EACR,IAAM,EAAIqK,GAAG,EAAG,CACd,SAAWnF,GAAM,CACf1D,EAAE,QAAS,GAAM,EAAE0D,CAAC,CAAC,CACtB,CACF,CAAA,GACD,MAAM,EAAKA,GAAM,CACf,GAAI,EAAG,CACL,MAAM,EAAI,EACV,EAAIjF,EAAE,EAAGiF,CAAC,EACV,MAAMoD,EAAItB,GAAG,EAAG,CAAC,EACjB,UAAWuB,KAAKD,EACd9G,EAAE,QAASgH,GAAMA,EAAED,CAAC,CAAC,CACxB,MACCtI,EAAE,EAAGiF,CAAC,CACZ,EAAKH,EAAKG,GAAM,CACZjF,EAAIiF,EAAG,EAAE,CAAE,KAAM,MAAQ,CAAA,CAC7B,EACE,OAAO,EAAE,CAAE,KAAM,MAAQ,CAAA,EAAG,CAC1B,SAAU,IAAM,EAChB,SAAU,EACV,UAAWtD,EACX,eAAgBmD,CACpB,CACA,CA8DA,SAASiG,GAAGjL,EAAI,OAAO,SAAS,KAAM,CACpC,GAAI,CACF,OAAO,IAAI,IAAIA,CAAC,CACpB,MAAU,CACN,MAAMC,EAAI,uBAAwBC,EAAI,oDAAqDuB,EAAI,mCAAoC,EAAI,2BAA4ByF,EAAI,oBAAqBlC,EAAI,IAAI,OAAO,IAAI/E,CAAC,KAAKC,CAAC,GAAGuB,CAAC,GAAG,CAAC,GAAGyF,CAAC,GAAG,EAAE,KAAKlH,CAAC,EAC7O,MAAO,CACL,KAAMA,EACN,SAAUgF,GAAG,QAAQ,UAAY,GACjC,KAAMA,GAAG,QAAQ,MAAQ,GACzB,SAAUA,GAAG,QAAQ,UAAY,GACjC,KAAMA,GAAG,QAAQ,MAAQ,GACzB,SAAUA,GAAG,QAAQ,UAAY,GACjC,OAAQA,GAAG,QAAQ,QAAU,GAC7B,KAAMA,GAAG,QAAQ,MAAQ,EAC/B,CACG,CACH,CAQA,SAASkG,GAAGlL,EAAI,OAAO,SAAS,KAAM,CACpC,MAAM,EAAIiL,GAAGjL,CAAC,EAAGC,EAAI,EAAE,KAAK,QAAQ,EAAE,IAAI,EAC1C,OAAO,EAAE,MAAQA,GAAK,EAAI,EAAE,KAAK,UAAU,EAAGA,CAAC,EAAI,EAAE,IACvD,CAOA,SAASkL,GAAGnL,EAAG,EAAG,CAChB,OAAOA,EAAI,EAAE,QAAQ,QAASA,EAAE,QAAQ,GAAG,GAAK,EAAI,IAAM,GAAG,CAC/D,CAoBA,SAASoL,GAAGpL,EAAG,CACb,MAAO,IAAM,OAAO,QAAQA,CAAC,EAAE,IAAI,CAAC,CAAC,EAAGC,CAAC,IAAM,GAAG,mBAAmB,CAAC,CAAC,IAAI,mBAAmBA,CAAC,CAAC,EAAE,EAAE,KAAK,GAAG,CAC9G,CACA,SAASoL,GAAGrL,EAAG,CACb,MAAO,IAAM,CAAC,GAAGA,EAAE,QAAO,CAAE,EAAE,IAC3B,GAAM,mBAAmB,EAAE,CAAC,CAAC,EAAI,IAAM,mBAAmB,EAAE,CAAC,YAAa,KAAO,EAAE,CAAC,EAAE,KAAO,EAAE,CAAC,CAAC,CACtG,EAAI,KAAK,GAAG,CACZ,CA6uBA,SAASsL,GAAGtL,EAAG,EAAG,CAChB,OAAO,UAAW,CAChB,OAAOA,EAAE,MAAM,EAAG,SAAS,CAC/B,CACA,CACA,KAAM,CAAE,SAAUuL,EAAE,EAAK,OAAO,UAAW,CAAE,eAAgBC,EAAI,EAAG,OAAQC,IAAOzL,GAAO,GAAM,CAC9F,MAAMC,EAAIsL,GAAG,KAAK,CAAC,EACnB,OAAOvL,EAAEC,CAAC,IAAMD,EAAEC,CAAC,EAAIA,EAAE,MAAM,EAAG,EAAE,EAAE,YAAa,EACrD,GAAmB,OAAO,OAAO,IAAI,CAAC,EAAGyL,GAAK1L,IAAOA,EAAIA,EAAE,YAAa,EAAG,GAAMyL,GAAG,CAAC,IAAMzL,GAAI2L,GAAM3L,GAAO,GAAM,OAAO,IAAMA,EAAG,CAAE,QAAS4L,EAAI,EAAG,MAAOC,GAAKF,GAAG,WAAW,EAC9K,SAASG,GAAG9L,EAAG,CACb,OAAOA,IAAM,MAAQ,CAAC6L,GAAG7L,CAAC,GAAKA,EAAE,cAAgB,MAAQ,CAAC6L,GAAG7L,EAAE,WAAW,GAAK+L,GAAE/L,EAAE,YAAY,QAAQ,GAAKA,EAAE,YAAY,SAASA,CAAC,CACtI,CACA,MAAMgM,GAAKN,GAAE,aAAa,EAC1B,SAASO,GAAGjM,EAAG,CACb,IAAI,EACJ,OAAO,OAAO,YAAc,KAAO,YAAY,OAAS,EAAI,YAAY,OAAOA,CAAC,EAAI,EAAIA,GAAKA,EAAE,QAAUgM,GAAGhM,EAAE,MAAM,EAAG,CACzH,CACA,MAAMkM,GAAKP,GAAG,QAAQ,EAAGI,GAAIJ,GAAG,UAAU,EAAGQ,GAAKR,GAAG,QAAQ,EAAGS,GAAMpM,GAAMA,IAAM,MAAQ,OAAOA,GAAK,SAAUqM,GAAMrM,GAAMA,IAAM,IAAMA,IAAM,GAAIsM,GAAMtM,GAAM,CAC5J,GAAIyL,GAAGzL,CAAC,IAAM,SACZ,MAAO,GACT,MAAM,EAAIwL,GAAGxL,CAAC,EACd,OAAQ,IAAM,MAAQ,IAAM,OAAO,WAAa,OAAO,eAAe,CAAC,IAAM,OAAS,EAAE,OAAO,eAAeA,IAAM,EAAE,OAAO,YAAYA,EAC3I,EAAGuM,GAAKb,GAAE,MAAM,EAAGc,GAAKd,GAAE,MAAM,EAAGe,GAAKf,GAAE,MAAM,EAAGgB,GAAKhB,GAAE,UAAU,EAAGiB,GAAM3M,GAAMoM,GAAGpM,CAAC,GAAK+L,GAAE/L,EAAE,IAAI,EAAG4M,GAAM5M,GAAM,CACjH,IAAI,EACJ,OAAOA,IAAM,OAAO,UAAY,YAAcA,aAAa,UAAY+L,GAAE/L,EAAE,MAAM,KAAO,EAAIyL,GAAGzL,CAAC,KAAO,YACvG,IAAM,UAAY+L,GAAE/L,EAAE,QAAQ,GAAKA,EAAE,SAAQ,IAAO,qBACtD,EAAG6M,GAAKnB,GAAE,iBAAiB,EAAG,CAACoB,GAAIC,GAAIC,GAAIC,EAAE,EAAI,CAAC,iBAAkB,UAAW,WAAY,SAAS,EAAE,IAAIvB,EAAC,EAAGwB,GAAMlN,GAAMA,EAAE,KAAOA,EAAE,KAAM,EAAGA,EAAE,QAAQ,qCAAsC,EAAE,EAChM,SAASmN,GAAGnN,EAAG,EAAG,CAAE,WAAYC,EAAI,EAAI,EAAG,GAAI,CAC7C,GAAID,IAAM,MAAQ,OAAOA,EAAI,IAC3B,OACF,IAAIE,EAAGuB,EACP,GAAI,OAAOzB,GAAK,WAAaA,EAAI,CAACA,CAAC,GAAI4L,GAAG5L,CAAC,EACzC,IAAKE,EAAI,EAAGuB,EAAIzB,EAAE,OAAQE,EAAIuB,EAAGvB,IAC/B,EAAE,KAAK,KAAMF,EAAEE,CAAC,EAAGA,EAAGF,CAAC,MACtB,CACH,MAAM6B,EAAI5B,EAAI,OAAO,oBAAoBD,CAAC,EAAI,OAAO,KAAKA,CAAC,EAAG,EAAI6B,EAAE,OACpE,IAAI,EACJ,IAAK3B,EAAI,EAAGA,EAAI,EAAGA,IACjB,EAAI2B,EAAE3B,CAAC,EAAG,EAAE,KAAK,KAAMF,EAAE,CAAC,EAAG,EAAGA,CAAC,CACpC,CACH,CACA,SAASoN,GAAGpN,EAAG,EAAG,CAChB,EAAI,EAAE,cACN,MAAMC,EAAI,OAAO,KAAKD,CAAC,EACvB,IAAIE,EAAID,EAAE,OAAQwB,EAClB,KAAOvB,KAAM,GACX,GAAIuB,EAAIxB,EAAEC,CAAC,EAAG,IAAMuB,EAAE,YAAa,EACjC,OAAOA,EACX,OAAO,IACT,CACA,MAAM4L,IAAM,IAAM,OAAO,WAAa,IAAM,WAAa,OAAO,KAAO,IAAM,KAAO,OAAO,OAAS,IAAM,OAAS,UAAWC,GAAMtN,GAAM,CAAC6L,GAAG7L,CAAC,GAAKA,IAAMqN,GAC1J,SAASE,IAAK,CACZ,KAAM,CAAE,SAAUvN,CAAG,EAAGsN,GAAG,IAAI,GAAK,MAAQ,CAAE,EAAE,EAAI,CAAE,EAAErN,EAAI,CAACC,EAAGuB,IAAM,CACpE,MAAMI,EAAI7B,GAAKoN,GAAG,EAAG3L,CAAC,GAAKA,EAC3B6K,GAAG,EAAEzK,CAAC,CAAC,GAAKyK,GAAGpM,CAAC,EAAI,EAAE2B,CAAC,EAAI0L,GAAG,EAAE1L,CAAC,EAAG3B,CAAC,EAAIoM,GAAGpM,CAAC,EAAI,EAAE2B,CAAC,EAAI0L,GAAG,CAAA,EAAIrN,CAAC,EAAI0L,GAAG1L,CAAC,EAAI,EAAE2B,CAAC,EAAI3B,EAAE,MAAK,EAAK,EAAE2B,CAAC,EAAI3B,CAC1G,EACE,QAASA,EAAI,EAAGuB,EAAI,UAAU,OAAQvB,EAAIuB,EAAGvB,IAC3C,UAAUA,CAAC,GAAKiN,GAAG,UAAUjN,CAAC,EAAGD,CAAC,EACpC,OAAO,CACT,CACA,MAAMuN,GAAK,CAACxN,EAAG,EAAGC,EAAG,CAAE,WAAYC,CAAG,EAAG,CAAE,KAAMiN,GAAG,EAAG,CAAC1L,EAAGI,IAAM,CAC/D5B,GAAK8L,GAAEtK,CAAC,EAAIzB,EAAE6B,CAAC,EAAIyJ,GAAG7J,EAAGxB,CAAC,EAAID,EAAE6B,CAAC,EAAIJ,CACvC,EAAG,CAAE,WAAYvB,CAAG,CAAA,EAAGF,GAAIyN,GAAMzN,IAAOA,EAAE,WAAW,CAAC,IAAM,QAAUA,EAAIA,EAAE,MAAM,CAAC,GAAIA,GAAI0N,GAAK,CAAC1N,EAAG,EAAGC,EAAGC,IAAM,CAC9GF,EAAE,UAAY,OAAO,OAAO,EAAE,UAAWE,CAAC,EAAGF,EAAE,UAAU,YAAcA,EAAG,OAAO,eAAeA,EAAG,QAAS,CAC1G,MAAO,EAAE,SACb,CAAG,EAAGC,GAAK,OAAO,OAAOD,EAAE,UAAWC,CAAC,CACvC,EAAG0N,GAAK,CAAC3N,EAAG,EAAGC,EAAGC,IAAM,CACtB,IAAIuB,EAAGI,EAAG,EACV,MAAM,EAAI,CAAA,EACV,GAAI,EAAI,GAAK,CAAE,EAAE7B,GAAK,KACpB,OAAO,EACT,EAAG,CACD,IAAKyB,EAAI,OAAO,oBAAoBzB,CAAC,EAAG6B,EAAIJ,EAAE,OAAQI,KAAM,GAC1D,EAAIJ,EAAEI,CAAC,GAAI,CAAC3B,GAAKA,EAAE,EAAGF,EAAG,CAAC,IAAM,CAAC,EAAE,CAAC,IAAM,EAAE,CAAC,EAAIA,EAAE,CAAC,EAAG,EAAE,CAAC,EAAI,IAChEA,EAAIC,IAAM,IAAMuL,GAAGxL,CAAC,CACxB,OAAWA,IAAM,CAACC,GAAKA,EAAED,EAAG,CAAC,IAAMA,IAAM,OAAO,WAC9C,OAAO,CACT,EAAG4N,GAAK,CAAC5N,EAAG,EAAGC,IAAM,CACnBD,EAAI,OAAOA,CAAC,GAAIC,IAAM,QAAUA,EAAID,EAAE,UAAYC,EAAID,EAAE,QAASC,GAAK,EAAE,OACxE,MAAMC,EAAIF,EAAE,QAAQ,EAAGC,CAAC,EACxB,OAAOC,IAAM,IAAMA,IAAMD,CAC3B,EAAG4N,GAAM7N,GAAM,CACb,GAAI,CAACA,EACH,OAAO,KACT,GAAI4L,GAAG5L,CAAC,EACN,OAAOA,EACT,IAAI,EAAIA,EAAE,OACV,GAAI,CAACmM,GAAG,CAAC,EACP,OAAO,KACT,MAAMlM,EAAI,IAAI,MAAM,CAAC,EACrB,KAAO,KAAM,GACXA,EAAE,CAAC,EAAID,EAAE,CAAC,EACZ,OAAOC,CACT,EAAG6N,IAAO9N,GAAO,GAAMA,GAAK,aAAaA,GAAG,OAAO,WAAa,KAAOwL,GAAG,UAAU,CAAC,EAAGuC,GAAK,CAAC/N,EAAG,IAAM,CACrG,MAAME,GAAKF,GAAKA,EAAE,OAAO,QAAQ,GAAG,KAAKA,CAAC,EAC1C,IAAIyB,EACJ,MAAQA,EAAIvB,EAAE,KAAI,IAAO,CAACuB,EAAE,MAAQ,CAClC,MAAM,EAAIA,EAAE,MACZ,EAAE,KAAKzB,EAAG,EAAE,CAAC,EAAG,EAAE,CAAC,CAAC,CACrB,CACH,EAAGgO,GAAK,CAAChO,EAAG,IAAM,CAChB,IAAIC,EACJ,MAAMC,EAAI,CAAA,EACV,MAAQD,EAAID,EAAE,KAAK,CAAC,KAAO,MACzBE,EAAE,KAAKD,CAAC,EACV,OAAOC,CACT,EAAG+N,GAAKvC,GAAE,iBAAiB,EAAGwC,GAAMlO,GAAMA,EAAE,YAAW,EAAG,QACxD,wBACA,SAASC,EAAGC,EAAGuB,EAAG,CAChB,OAAOvB,EAAE,YAAa,EAAGuB,CAC1B,CACH,EAAG0M,IAAM,CAAC,CAAE,eAAgBnO,KAAQ,CAAC,EAAGC,IAAMD,EAAE,KAAK,EAAGC,CAAC,GAAG,OAAO,SAAS,EAAGmO,GAAK1C,GAAE,QAAQ,EAAG2C,GAAK,CAACrO,EAAG,IAAM,CAC9G,MAAMC,EAAI,OAAO,0BAA0BD,CAAC,EAAGE,EAAI,GACnDiN,GAAGlN,EAAG,CAACwB,EAAGI,IAAM,CACd,IAAI,GACH,EAAI,EAAEJ,EAAGI,EAAG7B,CAAC,KAAO,KAAOE,EAAE2B,CAAC,EAAI,GAAKJ,EACzC,CAAA,EAAG,OAAO,iBAAiBzB,EAAGE,CAAC,CAClC,EAAGoO,GAAMtO,GAAM,CACbqO,GAAGrO,EAAG,CAAC,EAAGC,IAAM,CACd,GAAI8L,GAAE/L,CAAC,GAAK,CAAC,YAAa,SAAU,QAAQ,EAAE,QAAQC,CAAC,IAAM,GAC3D,MAAO,GACT,MAAMC,EAAIF,EAAEC,CAAC,EACb,GAAI8L,GAAE7L,CAAC,EAAG,CACR,GAAI,EAAE,WAAa,GAAI,aAAc,EAAG,CACtC,EAAE,SAAW,GACb,MACD,CACD,EAAE,MAAQ,EAAE,IAAM,IAAM,CACtB,MAAM,MAAM,qCAAuCD,EAAI,GAAG,CAClE,EACK,CACL,CAAG,CACH,EAAGsO,GAAK,CAACvO,EAAG,IAAM,CAChB,MAAMC,EAAI,CAAA,EAAIC,EAAKuB,GAAM,CACvBA,EAAE,QAASI,GAAM,CACf5B,EAAE4B,CAAC,EAAI,EACb,CAAK,CACL,EACE,OAAO+J,GAAG5L,CAAC,EAAIE,EAAEF,CAAC,EAAIE,EAAE,OAAOF,CAAC,EAAE,MAAM,CAAC,CAAC,EAAGC,CAC/C,EAAGuO,GAAK,IAAM,CACd,EAAGC,GAAK,CAACzO,EAAG,IAAMA,GAAK,MAAQ,OAAO,SAASA,EAAI,CAACA,CAAC,EAAIA,EAAI,EAC7D,SAAS0O,GAAG1O,EAAG,CACb,MAAO,CAAC,EAAEA,GAAK+L,GAAE/L,EAAE,MAAM,GAAKA,EAAE,OAAO,WAAW,IAAM,YAAcA,EAAE,OAAO,QAAQ,EACzF,CACA,MAAM2O,GAAM3O,GAAM,CAChB,MAAM,EAAI,IAAI,MAAM,EAAE,EAAGC,EAAI,CAACC,EAAGuB,IAAM,CACrC,GAAI2K,GAAGlM,CAAC,EAAG,CACT,GAAI,EAAE,QAAQA,CAAC,GAAK,EAClB,OACF,GAAI,EAAE,WAAYA,GAAI,CACpB,EAAEuB,CAAC,EAAIvB,EACP,MAAM2B,EAAI+J,GAAG1L,CAAC,EAAI,CAAA,EAAK,CAAA,EACvB,OAAOiN,GAAGjN,EAAG,CAAC,EAAG,IAAM,CACrB,MAAM8E,EAAI/E,EAAE,EAAGwB,EAAI,CAAC,EACpB,CAACoK,GAAG7G,CAAC,IAAMnD,EAAE,CAAC,EAAImD,EACnB,CAAA,EAAG,EAAEvD,CAAC,EAAI,OAAQI,CACpB,CACF,CACD,OAAO3B,CACX,EACE,OAAOD,EAAED,EAAG,CAAC,CACf,EAAG4O,GAAKlD,GAAE,eAAe,EAAGmD,GAAM7O,GAAMA,IAAMoM,GAAGpM,CAAC,GAAK+L,GAAE/L,CAAC,IAAM+L,GAAE/L,EAAE,IAAI,GAAK+L,GAAE/L,EAAE,KAAK,EAAG8O,IAAM,CAAC9O,EAAG,IAAMA,EAAI,aAAe,GAAK,CAACC,EAAGC,KAAOmN,GAAG,iBAAiB,UAAW,CAAC,CAAE,OAAQ5L,EAAG,KAAMI,KAAQ,CACrMJ,IAAM4L,IAAMxL,IAAM5B,GAAKC,EAAE,QAAUA,EAAE,MAAK,GAC5C,EAAG,EAAE,EAAIuB,GAAM,CACbvB,EAAE,KAAKuB,CAAC,EAAG4L,GAAG,YAAYpN,EAAG,GAAG,CAClC,IAAI,SAAS,KAAK,OAAQ,CAAA,GAAI,CAAA,CAAE,EAAKA,GAAM,WAAWA,CAAC,GACrD,OAAO,cAAgB,WACvB8L,GAAEsB,GAAG,WAAW,CAClB,EAAG0B,GAAK,OAAO,eAAiB,IAAM,eAAe,KAAK1B,EAAE,EAAI,OAAO,QAAU,KAAO,QAAQ,UAAYyB,GAAIE,EAAI,CAClH,QAASpD,GACT,cAAeI,GACf,SAAUF,GACV,WAAYc,GACZ,kBAAmBX,GACnB,SAAUC,GACV,SAAUC,GACV,UAAWE,GACX,SAAUD,GACV,cAAeE,GACf,iBAAkBQ,GAClB,UAAWC,GACX,WAAYC,GACZ,UAAWC,GACX,YAAapB,GACb,OAAQU,GACR,OAAQC,GACR,OAAQC,GACR,SAAU2B,GACV,WAAYrC,GACZ,SAAUY,GACV,kBAAmBE,GACnB,aAAciB,GACd,WAAYpB,GACZ,QAASS,GACT,MAAOI,GACP,OAAQC,GACR,KAAMN,GACN,SAAUO,GACV,SAAUC,GACV,aAAcC,GACd,OAAQlC,GACR,WAAYC,GACZ,SAAUkC,GACV,QAASC,GACT,aAAcE,GACd,SAAUC,GACV,WAAYC,GACZ,eAAgBE,GAChB,WAAYA,GAEZ,kBAAmBE,GACnB,cAAeC,GACf,YAAaC,GACb,YAAaL,GACb,KAAMM,GACN,eAAgBC,GAChB,QAASrB,GACT,OAAQC,GACR,iBAAkBC,GAClB,oBAAqBoB,GACrB,aAAcC,GACd,UAAWC,GACX,WAAYC,GACZ,aAAcC,GACd,KAAMC,EACR,EACA,SAASE,EAAEjP,EAAG,EAAGC,EAAGC,EAAGuB,EAAG,CACxB,MAAM,KAAK,IAAI,EAAG,MAAM,kBAAoB,MAAM,kBAAkB,KAAM,KAAK,WAAW,EAAI,KAAK,MAAQ,IAAI,QAAQ,MAAO,KAAK,QAAUzB,EAAG,KAAK,KAAO,aAAc,IAAM,KAAK,KAAO,GAAIC,IAAM,KAAK,OAASA,GAAIC,IAAM,KAAK,QAAUA,GAAIuB,IAAM,KAAK,SAAWA,EAAG,KAAK,OAASA,EAAE,OAASA,EAAE,OAAS,KAChT,CACAuN,EAAE,SAASC,EAAG,MAAO,CACnB,OAAQ,UAAW,CACjB,MAAO,CAEL,QAAS,KAAK,QACd,KAAM,KAAK,KAEX,YAAa,KAAK,YAClB,OAAQ,KAAK,OAEb,SAAU,KAAK,SACf,WAAY,KAAK,WACjB,aAAc,KAAK,aACnB,MAAO,KAAK,MAEZ,OAAQD,EAAE,aAAa,KAAK,MAAM,EAClC,KAAM,KAAK,KACX,OAAQ,KAAK,MACnB,CACG,CACH,CAAC,EACD,MAAME,GAAKD,EAAE,UAAWE,GAAK,CAAA,EAC7B,CACE,uBACA,iBACA,eACA,YACA,cACA,4BACA,iBACA,mBACA,kBACA,eACA,kBACA,iBAEF,EAAE,QAASnP,GAAM,CACfmP,GAAGnP,CAAC,EAAI,CAAE,MAAOA,CAAC,CACpB,CAAC,EACD,OAAO,iBAAiBiP,EAAGE,EAAE,EAC7B,OAAO,eAAeD,GAAI,eAAgB,CAAE,MAAO,EAAE,CAAE,EACvDD,EAAE,KAAO,CAACjP,EAAG,EAAGC,EAAGC,EAAGuB,EAAGI,IAAM,CAC7B,MAAM,EAAI,OAAO,OAAOqN,EAAE,EAC1B,OAAOF,EAAE,aAAahP,EAAG,EAAG,SAASgF,EAAG,CACtC,OAAOA,IAAM,MAAM,SACpB,EAAG,GAAM,IAAM,cAAc,EAAGiK,EAAE,KAAK,EAAGjP,EAAE,QAAS,EAAGC,EAAGC,EAAGuB,CAAC,EAAG,EAAE,MAAQzB,EAAG,EAAE,KAAOA,EAAE,KAAM6B,GAAK,OAAO,OAAO,EAAGA,CAAC,EAAG,CAC7H,EACA,MAAMuN,GAAK,KACX,SAASC,GAAGrP,EAAG,CACb,OAAOgP,EAAE,cAAchP,CAAC,GAAKgP,EAAE,QAAQhP,CAAC,CAC1C,CACA,SAASsP,GAAGtP,EAAG,CACb,OAAOgP,EAAE,SAAShP,EAAG,IAAI,EAAIA,EAAE,MAAM,EAAG,EAAE,EAAIA,CAChD,CACA,SAASuP,GAAGvP,EAAG,EAAGC,EAAG,CACnB,OAAOD,EAAIA,EAAE,OAAO,CAAC,EAAE,IAAI,SAASyB,EAAG,EAAG,CACxC,OAAOA,EAAI6N,GAAG7N,CAAC,EAAG,CAACxB,GAAK,EAAI,IAAMwB,EAAI,IAAMA,CAChD,CAAG,EAAE,KAAKxB,EAAI,IAAM,EAAE,EAAI,CAC1B,CACA,SAASuP,GAAGxP,EAAG,CACb,OAAOgP,EAAE,QAAQhP,CAAC,GAAK,CAACA,EAAE,KAAKqP,EAAE,CACnC,CACA,MAAMI,GAAKT,EAAE,aAAaA,EAAG,CAAA,EAAI,KAAM,SAASU,EAAG,CACjD,MAAO,WAAW,KAAKA,CAAC,CAC1B,CAAC,EACD,SAASC,GAAG3P,EAAG,EAAGC,EAAG,CACnB,GAAI,CAAC+O,EAAE,SAAShP,CAAC,EACf,MAAM,IAAI,UAAU,0BAA0B,EAChD,EAAI,GAAK,IAAI,SAAYC,EAAI+O,EAAE,aAAa/O,EAAG,CAC7C,WAAY,GACZ,KAAM,GACN,QAAS,EACV,EAAE,GAAI,SAASqI,EAAGsH,EAAG,CACpB,MAAO,CAACZ,EAAE,YAAYY,EAAEtH,CAAC,CAAC,CAC9B,CAAG,EACD,MAAMpI,EAAID,EAAE,WAAYwB,EAAIxB,EAAE,SAAWoF,EAAGxD,EAAI5B,EAAE,KAAM,EAAIA,EAAE,QAAS+E,GAAK/E,EAAE,MAAQ,OAAO,KAAO,KAAO,OAAS+O,EAAE,oBAAoB,CAAC,EAC3I,GAAI,CAACA,EAAE,WAAWvN,CAAC,EACjB,MAAM,IAAI,UAAU,4BAA4B,EAClD,SAAS0D,EAAEuD,EAAG,CACZ,GAAIA,IAAM,KACR,MAAO,GACT,GAAIsG,EAAE,OAAOtG,CAAC,EACZ,OAAOA,EAAE,cACX,GAAI,CAAC1D,GAAKgK,EAAE,OAAOtG,CAAC,EAClB,MAAM,IAAIuG,EAAE,8CAA8C,EAC5D,OAAOD,EAAE,cAActG,CAAC,GAAKsG,EAAE,aAAatG,CAAC,EAAI1D,GAAK,OAAO,MAAQ,WAAa,IAAI,KAAK,CAAC0D,CAAC,CAAC,EAAI,OAAO,KAAKA,CAAC,EAAIA,CACpH,CACD,SAASrD,EAAEqD,EAAGJ,EAAGsH,EAAG,CAClB,IAAIC,EAAInH,EACR,GAAIA,GAAK,CAACkH,GAAK,OAAOlH,GAAK,UACzB,GAAIsG,EAAE,SAAS1G,EAAG,IAAI,EACpBA,EAAIpI,EAAIoI,EAAIA,EAAE,MAAM,EAAG,EAAE,EAAGI,EAAI,KAAK,UAAUA,CAAC,UACzCsG,EAAE,QAAQtG,CAAC,GAAK8G,GAAG9G,CAAC,IAAMsG,EAAE,WAAWtG,CAAC,GAAKsG,EAAE,SAAS1G,EAAG,IAAI,KAAOuH,EAAIb,EAAE,QAAQtG,CAAC,GAC5F,OAAOJ,EAAIgH,GAAGhH,CAAC,EAAGuH,EAAE,QAAQ,SAASC,EAAGC,EAAG,CACzC,EAAEf,EAAE,YAAYc,CAAC,GAAKA,IAAM,OAAS,EAAE,OAErC,IAAM,GAAKP,GAAG,CAACjH,CAAC,EAAGyH,EAAGlO,CAAC,EAAI,IAAM,KAAOyG,EAAIA,EAAI,KAChDnD,EAAE2K,CAAC,CACf,CACA,CAAS,EAAG,GAER,OAAOT,GAAG3G,CAAC,EAAI,IAAM,EAAE,OAAO6G,GAAGK,EAAGtH,EAAGzG,CAAC,EAAGsD,EAAEuD,CAAC,CAAC,EAAG,GACnD,CACD,MAAMH,EAAI,CAAA,EAAIC,EAAI,OAAO,OAAOiH,GAAI,CAClC,eAAgBpK,EAChB,aAAcF,EACd,YAAakK,EACjB,CAAG,EACD,SAAS5G,EAAEC,EAAGJ,EAAG,CACf,GAAI,CAAC0G,EAAE,YAAYtG,CAAC,EAAG,CACrB,GAAIH,EAAE,QAAQG,CAAC,IAAM,GACnB,MAAM,MAAM,kCAAoCJ,EAAE,KAAK,GAAG,CAAC,EAC7DC,EAAE,KAAKG,CAAC,EAAGsG,EAAE,QAAQtG,EAAG,SAASmH,EAAGG,EAAG,EACpC,EAAEhB,EAAE,YAAYa,CAAC,GAAKA,IAAM,OAASpO,EAAE,KACtC,EACAoO,EACAb,EAAE,SAASgB,CAAC,EAAIA,EAAE,KAAM,EAAGA,EAC3B1H,EACAE,CACD,KAAM,IAAMC,EAAEoH,EAAGvH,EAAIA,EAAE,OAAO0H,CAAC,EAAI,CAACA,CAAC,CAAC,CAC/C,CAAO,EAAGzH,EAAE,KACP,CACF,CACD,GAAI,CAACyG,EAAE,SAAShP,CAAC,EACf,MAAM,IAAI,UAAU,wBAAwB,EAC9C,OAAOyI,EAAEzI,CAAC,EAAG,CACf,CACA,SAASiQ,GAAGjQ,EAAG,CACb,MAAM,EAAI,CACR,IAAK,MACL,IAAK,MACL,IAAK,MACL,IAAK,MACL,IAAK,MACL,MAAO,IACP,MAAO,IACX,EACE,OAAO,mBAAmBA,CAAC,EAAE,QAAQ,mBAAoB,SAASE,EAAG,CACnE,OAAO,EAAEA,CAAC,CACd,CAAG,CACH,CACA,SAASgQ,GAAGlQ,EAAG,EAAG,CAChB,KAAK,OAAS,CAAA,EAAIA,GAAK2P,GAAG3P,EAAG,KAAM,CAAC,CACtC,CACA,MAAMmQ,GAAKD,GAAG,UACdC,GAAG,OAAS,SAAST,EAAGzP,EAAG,CACzB,KAAK,OAAO,KAAK,CAACyP,EAAGzP,CAAC,CAAC,CACzB,EACAkQ,GAAG,SAAW,SAAST,EAAG,CACxB,MAAMzP,EAAIyP,EAAI,SAASxP,EAAG,CACxB,OAAOwP,EAAE,KAAK,KAAMxP,EAAG+P,EAAE,CAC1B,EAAGA,GACJ,OAAO,KAAK,OAAO,IAAI,SAASxO,EAAG,CACjC,OAAOxB,EAAEwB,EAAE,CAAC,CAAC,EAAI,IAAMxB,EAAEwB,EAAE,CAAC,CAAC,CAC9B,EAAE,EAAE,EAAE,KAAK,GAAG,CACjB,EACA,SAAS2O,GAAGpQ,EAAG,CACb,OAAO,mBAAmBA,CAAC,EAAE,QAAQ,QAAS,GAAG,EAAE,QAAQ,OAAQ,GAAG,EAAE,QAAQ,QAAS,GAAG,EAAE,QAAQ,OAAQ,GAAG,EAAE,QAAQ,QAAS,GAAG,EAAE,QAAQ,QAAS,GAAG,CAC/J,CACA,SAASqQ,GAAGrQ,EAAG,EAAGC,EAAG,CACnB,GAAI,CAAC,EACH,OAAOD,EACT,MAAME,EAAID,GAAKA,EAAE,QAAUmQ,GAC3BpB,EAAE,WAAW/O,CAAC,IAAMA,EAAI,CACtB,UAAWA,CACf,GACE,MAAMwB,EAAIxB,GAAKA,EAAE,UACjB,IAAI4B,EACJ,GAAIJ,EAAII,EAAIJ,EAAE,EAAGxB,CAAC,EAAI4B,EAAImN,EAAE,kBAAkB,CAAC,EAAI,EAAE,SAAQ,EAAK,IAAIkB,GAAG,EAAGjQ,CAAC,EAAE,SAASC,CAAC,EAAG2B,EAAG,CAC7F,MAAM,EAAI7B,EAAE,QAAQ,GAAG,EACvB,IAAM,KAAOA,EAAIA,EAAE,MAAM,EAAG,CAAC,GAAIA,IAAMA,EAAE,QAAQ,GAAG,IAAM,GAAK,IAAM,KAAO6B,CAC7E,CACD,OAAO7B,CACT,CACA,MAAMsQ,EAAG,CACP,aAAc,CACZ,KAAK,SAAW,EACjB,CASD,IAAI,EAAGrQ,EAAGC,EAAG,CACX,OAAO,KAAK,SAAS,KAAK,CACxB,UAAW,EACX,SAAUD,EACV,YAAaC,EAAIA,EAAE,YAAc,GACjC,QAASA,EAAIA,EAAE,QAAU,IAC1B,CAAA,EAAG,KAAK,SAAS,OAAS,CAC5B,CAQD,MAAM,EAAG,CACP,KAAK,SAAS,CAAC,IAAM,KAAK,SAAS,CAAC,EAAI,KACzC,CAMD,OAAQ,CACN,KAAK,WAAa,KAAK,SAAW,CAAE,EACrC,CAWD,QAAQ,EAAG,CACT8O,EAAE,QAAQ,KAAK,SAAU,SAAS9O,EAAG,CACnCA,IAAM,MAAQ,EAAEA,CAAC,CACvB,CAAK,CACF,CACH,CACA,MAAMqQ,GAAKD,GAAIE,GAAK,CAClB,kBAAmB,GACnB,kBAAmB,GACnB,oBAAqB,EACvB,EAAGC,GAAK,OAAO,gBAAkB,IAAM,gBAAkBP,GAAIQ,GAAK,OAAO,SAAW,IAAM,SAAW,KAAMC,GAAK,OAAO,KAAO,IAAM,KAAO,KAAMC,GAAK,CACpJ,UAAW,GACX,QAAS,CACP,gBAAiBH,GACjB,SAAUC,GACV,KAAMC,EACP,EACD,UAAW,CAAC,OAAQ,QAAS,OAAQ,OAAQ,MAAO,MAAM,CAC5D,EAAGE,GAAK,OAAO,OAAS,KAAO,OAAO,SAAW,IAAKC,GAAK,OAAO,WAAa,UAAY,WAAa,OAAQC,GAAKF,KAAO,CAACC,IAAM,CAAC,cAAe,eAAgB,IAAI,EAAE,QAAQA,GAAG,OAAO,EAAI,GAAIE,IAAM,IAAM,OAAO,kBAAoB,KAC1O,gBAAgB,mBAAqB,OAAO,KAAK,eAAiB,YAAa,EAAEC,GAAKJ,IAAM,OAAO,SAAS,MAAQ,mBAAoBK,GAAqB,OAAO,OAAuB,OAAO,eAAe,CAC/M,UAAW,KACX,cAAeL,GACf,sBAAuBE,GACvB,+BAAgCC,GAChC,UAAWF,GACX,OAAQG,EACV,EAAG,OAAO,YAAa,CAAE,MAAO,QAAU,CAAA,CAAC,EAAGE,GAAI,CAChD,GAAGD,GACH,GAAGN,EACL,EACA,SAASQ,GAAGpR,EAAG,EAAG,CAChB,OAAO2P,GAAG3P,EAAG,IAAImR,GAAE,QAAQ,gBAAmB,OAAO,OAAO,CAC1D,QAAS,SAASlR,EAAGC,EAAGuB,EAAGI,EAAG,CAC5B,OAAOsP,GAAE,QAAUnC,EAAE,SAAS/O,CAAC,GAAK,KAAK,OAAOC,EAAGD,EAAE,SAAS,QAAQ,CAAC,EAAG,IAAM4B,EAAE,eAAe,MAAM,KAAM,SAAS,CACvH,CACL,EAAK,CAAC,CAAC,CACP,CACA,SAASwP,GAAGrR,EAAG,CACb,OAAOgP,EAAE,SAAS,gBAAiBhP,CAAC,EAAE,IAAK,GAAM,EAAE,CAAC,IAAM,KAAO,GAAK,EAAE,CAAC,GAAK,EAAE,CAAC,CAAC,CACpF,CACA,SAASsR,GAAGtR,EAAG,CACb,MAAM,EAAI,CAAA,EAAIC,EAAI,OAAO,KAAKD,CAAC,EAC/B,IAAIE,EACJ,MAAMuB,EAAIxB,EAAE,OACZ,IAAI4B,EACJ,IAAK3B,EAAI,EAAGA,EAAIuB,EAAGvB,IACjB2B,EAAI5B,EAAEC,CAAC,EAAG,EAAE2B,CAAC,EAAI7B,EAAE6B,CAAC,EACtB,OAAO,CACT,CACA,SAAS0P,GAAGvR,EAAG,CACb,SAAS,EAAEC,EAAGC,EAAGuB,EAAGI,EAAG,CACrB,IAAI,EAAI5B,EAAE4B,GAAG,EACb,GAAI,IAAM,YACR,MAAO,GACT,MAAM,EAAI,OAAO,SAAS,CAAC,CAAC,EAAGmD,EAAInD,GAAK5B,EAAE,OAC1C,OAAO,EAAI,CAAC,GAAK+O,EAAE,QAAQvN,CAAC,EAAIA,EAAE,OAAS,EAAGuD,GAAKgK,EAAE,WAAWvN,EAAG,CAAC,EAAIA,EAAE,CAAC,EAAI,CAACA,EAAE,CAAC,EAAGvB,CAAC,EAAIuB,EAAE,CAAC,EAAIvB,EAAG,CAAC,KAAO,CAACuB,EAAE,CAAC,GAAK,CAACuN,EAAE,SAASvN,EAAE,CAAC,CAAC,KAAOA,EAAE,CAAC,EAAI,CAAE,GAAG,EAAExB,EAAGC,EAAGuB,EAAE,CAAC,EAAGI,CAAC,GAAKmN,EAAE,QAAQvN,EAAE,CAAC,CAAC,IAAMA,EAAE,CAAC,EAAI6P,GAAG7P,EAAE,CAAC,CAAC,GAAI,CAAC,EACrN,CACD,GAAIuN,EAAE,WAAWhP,CAAC,GAAKgP,EAAE,WAAWhP,EAAE,OAAO,EAAG,CAC9C,MAAMC,EAAI,CAAA,EACV,OAAO+O,EAAE,aAAahP,EAAG,CAACE,EAAGuB,IAAM,CACjC,EAAE4P,GAAGnR,CAAC,EAAGuB,EAAGxB,EAAG,CAAC,CACjB,CAAA,EAAGA,CACL,CACD,OAAO,IACT,CACA,SAASuR,GAAGxR,EAAG,EAAGC,EAAG,CACnB,GAAI+O,EAAE,SAAShP,CAAC,EACd,GAAI,CACF,OAAQ,GAAK,KAAK,OAAOA,CAAC,EAAGgP,EAAE,KAAKhP,CAAC,CACtC,OAAQE,EAAG,CACV,GAAIA,EAAE,OAAS,cACb,MAAMA,CACT,CACH,OAAQD,GAAK,KAAK,WAAWD,CAAC,CAChC,CACA,MAAMyR,GAAK,CACT,aAAcjB,GACd,QAAS,CAAC,MAAO,OAAQ,OAAO,EAChC,iBAAkB,CAAC,SAASd,EAAGzP,EAAG,CAChC,MAAMC,EAAID,EAAE,eAAgB,GAAI,GAAIwB,EAAIvB,EAAE,QAAQ,kBAAkB,EAAI,GAAI,EAAI8O,EAAE,SAASU,CAAC,EAC5F,GAAI,GAAKV,EAAE,WAAWU,CAAC,IAAMA,EAAI,IAAI,SAASA,CAAC,GAAIV,EAAE,WAAWU,CAAC,EAC/D,OAAOjO,EAAI,KAAK,UAAU8P,GAAG7B,CAAC,CAAC,EAAIA,EACrC,GAAIV,EAAE,cAAcU,CAAC,GAAKV,EAAE,SAASU,CAAC,GAAKV,EAAE,SAASU,CAAC,GAAKV,EAAE,OAAOU,CAAC,GAAKV,EAAE,OAAOU,CAAC,GAAKV,EAAE,iBAAiBU,CAAC,EAC5G,OAAOA,EACT,GAAIV,EAAE,kBAAkBU,CAAC,EACvB,OAAOA,EAAE,OACX,GAAIV,EAAE,kBAAkBU,CAAC,EACvB,OAAOzP,EAAE,eAAe,kDAAmD,EAAE,EAAGyP,EAAE,WACpF,IAAIlF,EACJ,GAAI,EAAG,CACL,GAAItK,EAAE,QAAQ,mCAAmC,EAAI,GACnD,OAAOkR,GAAG1B,EAAG,KAAK,cAAc,EAAE,SAAQ,EAC5C,IAAKlF,EAAIwE,EAAE,WAAWU,CAAC,IAAMxP,EAAE,QAAQ,qBAAqB,EAAI,GAAI,CAClE,MAAM8E,EAAI,KAAK,KAAO,KAAK,IAAI,SAC/B,OAAO2K,GACLnF,EAAI,CAAE,UAAWkF,CAAC,EAAKA,EACvB1K,GAAK,IAAIA,EACT,KAAK,cACf,CACO,CACF,CACD,OAAO,GAAKvD,GAAKxB,EAAE,eAAe,mBAAoB,EAAE,EAAGuR,GAAG9B,CAAC,GAAKA,CACxE,CAAG,EACD,kBAAmB,CAAC,SAASA,EAAG,CAC9B,MAAMzP,EAAI,KAAK,cAAgBwR,GAAG,aAAcvR,EAAID,GAAKA,EAAE,kBAAmBwB,EAAI,KAAK,eAAiB,OACxG,GAAIuN,EAAE,WAAWU,CAAC,GAAKV,EAAE,iBAAiBU,CAAC,EACzC,OAAOA,EACT,GAAIA,GAAKV,EAAE,SAASU,CAAC,IAAMxP,GAAK,CAAC,KAAK,cAAgBuB,GAAI,CACxD,MAAMyF,EAAI,EAAEjH,GAAKA,EAAE,oBAAsBwB,EACzC,GAAI,CACF,OAAO,KAAK,MAAMiO,CAAC,CACpB,OAAQlF,EAAG,CACV,GAAItD,EACF,MAAMsD,EAAE,OAAS,cAAgByE,EAAE,KAAKzE,EAAGyE,EAAE,iBAAkB,KAAM,KAAM,KAAK,QAAQ,EAAIzE,CAC/F,CACF,CACD,OAAOkF,CACX,CAAG,EAKD,QAAS,EACT,eAAgB,aAChB,eAAgB,eAChB,iBAAkB,GAClB,cAAe,GACf,IAAK,CACH,SAAUyB,GAAE,QAAQ,SACpB,KAAMA,GAAE,QAAQ,IACjB,EACD,eAAgB,SAASzB,EAAG,CAC1B,OAAOA,GAAK,KAAOA,EAAI,GACxB,EACD,QAAS,CACP,OAAQ,CACN,OAAQ,oCACR,eAAgB,MACjB,CACF,CACH,EACAV,EAAE,QAAQ,CAAC,SAAU,MAAO,OAAQ,OAAQ,MAAO,OAAO,EAAIhP,GAAM,CAClEyR,GAAG,QAAQzR,CAAC,EAAI,EAClB,CAAC,EACD,MAAM0R,GAAKD,GAAIE,GAAK3C,EAAE,YAAY,CAChC,MACA,gBACA,iBACA,eACA,OACA,UACA,OACA,OACA,oBACA,sBACA,gBACA,WACA,eACA,sBACA,UACA,cACA,YACF,CAAC,EAAG4C,GAAM5R,GAAM,CACd,MAAM,EAAI,CAAA,EACV,IAAIC,EAAGC,EAAGuB,EACV,OAAOzB,GAAKA,EAAE,MAAM;AAAA,CACrB,EAAE,QAAQ,SAASkH,EAAG,CACnBzF,EAAIyF,EAAE,QAAQ,GAAG,EAAGjH,EAAIiH,EAAE,UAAU,EAAGzF,CAAC,EAAE,KAAM,EAAC,YAAW,EAAIvB,EAAIgH,EAAE,UAAUzF,EAAI,CAAC,EAAE,OAAQ,EAAE,CAACxB,GAAK,EAAEA,CAAC,GAAK0R,GAAG1R,CAAC,KAAOA,IAAM,aAAe,EAAEA,CAAC,EAAI,EAAEA,CAAC,EAAE,KAAKC,CAAC,EAAI,EAAED,CAAC,EAAI,CAACC,CAAC,EAAI,EAAED,CAAC,EAAI,EAAEA,CAAC,EAAI,EAAEA,CAAC,EAAI,KAAOC,EAAIA,EACnN,CAAA,EAAG,CACN,EAAG2R,GAAK,OAAO,WAAW,EAC1B,SAASC,GAAG9R,EAAG,CACb,OAAOA,GAAK,OAAOA,CAAC,EAAE,KAAI,EAAG,aAC/B,CACA,SAAS+R,GAAG/R,EAAG,CACb,OAAOA,IAAM,IAAMA,GAAK,KAAOA,EAAIgP,EAAE,QAAQhP,CAAC,EAAIA,EAAE,IAAI+R,EAAE,EAAI,OAAO/R,CAAC,CACxE,CACA,SAASgS,GAAGhS,EAAG,CACb,MAAM,EAAoB,OAAO,OAAO,IAAI,EAAGC,EAAI,mCACnD,IAAIC,EACJ,KAAOA,EAAID,EAAE,KAAKD,CAAC,GACjB,EAAEE,EAAE,CAAC,CAAC,EAAIA,EAAE,CAAC,EACf,OAAO,CACT,CACA,MAAM+R,GAAMjS,GAAM,iCAAiC,KAAKA,EAAE,KAAI,CAAE,EAChE,SAASkS,GAAGlS,EAAG,EAAGC,EAAGC,EAAGuB,EAAG,CACzB,GAAIuN,EAAE,WAAW9O,CAAC,EAChB,OAAOA,EAAE,KAAK,KAAM,EAAGD,CAAC,EAC1B,GAAIwB,IAAM,EAAIxB,GAAI,CAAC,CAAC+O,EAAE,SAAS,CAAC,EAAG,CACjC,GAAIA,EAAE,SAAS9O,CAAC,EACd,OAAO,EAAE,QAAQA,CAAC,IAAM,GAC1B,GAAI8O,EAAE,SAAS9O,CAAC,EACd,OAAOA,EAAE,KAAK,CAAC,CAClB,CACH,CACA,SAASiS,GAAGnS,EAAG,CACb,OAAOA,EAAE,KAAI,EAAG,YAAa,EAAC,QAAQ,kBAAmB,CAAC,EAAGC,EAAGC,IAAMD,EAAE,YAAa,EAAGC,CAAC,CAC3F,CACA,SAASkS,GAAGpS,EAAG,EAAG,CAChB,MAAMC,EAAI+O,EAAE,YAAY,IAAM,CAAC,EAC/B,CAAC,MAAO,MAAO,KAAK,EAAE,QAAS9O,GAAM,CACnC,OAAO,eAAeF,EAAGE,EAAID,EAAG,CAC9B,MAAO,SAASwB,EAAGI,EAAG,EAAG,CACvB,OAAO,KAAK3B,CAAC,EAAE,KAAK,KAAM,EAAGuB,EAAGI,EAAG,CAAC,CACrC,EACD,aAAc,EACpB,CAAK,CACL,CAAG,CACH,CACA,MAAMwQ,EAAG,CACP,YAAY,EAAG,CACb,GAAK,KAAK,IAAI,CAAC,CAChB,CACD,IAAI,EAAGpS,EAAGC,EAAG,CACX,MAAMuB,EAAI,KACV,SAASI,EAAE,EAAGmD,EAAGG,EAAG,CAClB,MAAM,EAAI2M,GAAG9M,CAAC,EACd,GAAI,CAAC,EACH,MAAM,IAAI,MAAM,wCAAwC,EAC1D,MAAMuD,EAAIyG,EAAE,QAAQvN,EAAG,CAAC,GACvB,CAAC8G,GAAK9G,EAAE8G,CAAC,IAAM,QAAUpD,IAAM,IAAMA,IAAM,QAAU1D,EAAE8G,CAAC,IAAM,MAAQ9G,EAAE8G,GAAKvD,CAAC,EAAI+M,GAAG,CAAC,EACxF,CACD,MAAM,EAAI,CAAC,EAAG/M,IAAMgK,EAAE,QAAQ,EAAG,CAAC7J,EAAG,IAAMtD,EAAEsD,EAAG,EAAGH,CAAC,CAAC,EACrD,GAAIgK,EAAE,cAAc,CAAC,GAAK,aAAa,KAAK,YAC1C,EAAE,EAAG/O,CAAC,UACC+O,EAAE,SAAS,CAAC,IAAM,EAAI,EAAE,SAAW,CAACiD,GAAG,CAAC,EAC/C,EAAEL,GAAG,CAAC,EAAG3R,CAAC,UACH+O,EAAE,UAAU,CAAC,EACpB,SAAW,CAAC,EAAGhK,CAAC,IAAK,EAAE,QAAS,EAC9BnD,EAAEmD,EAAG,EAAG9E,CAAC,OAEX,GAAK,MAAQ2B,EAAE5B,EAAG,EAAGC,CAAC,EACxB,OAAO,IACR,CACD,IAAI,EAAGD,EAAG,CACR,GAAI,EAAI6R,GAAG,CAAC,EAAG,EAAG,CAChB,MAAM5R,EAAI8O,EAAE,QAAQ,KAAM,CAAC,EAC3B,GAAI9O,EAAG,CACL,MAAMuB,EAAI,KAAKvB,CAAC,EAChB,GAAI,CAACD,EACH,OAAOwB,EACT,GAAIxB,IAAM,GACR,OAAO+R,GAAGvQ,CAAC,EACb,GAAIuN,EAAE,WAAW/O,CAAC,EAChB,OAAOA,EAAE,KAAK,KAAMwB,EAAGvB,CAAC,EAC1B,GAAI8O,EAAE,SAAS/O,CAAC,EACd,OAAOA,EAAE,KAAKwB,CAAC,EACjB,MAAM,IAAI,UAAU,wCAAwC,CAC7D,CACF,CACF,CACD,IAAI,EAAGxB,EAAG,CACR,GAAI,EAAI6R,GAAG,CAAC,EAAG,EAAG,CAChB,MAAM5R,EAAI8O,EAAE,QAAQ,KAAM,CAAC,EAC3B,MAAO,CAAC,EAAE9O,GAAK,KAAKA,CAAC,IAAM,SAAW,CAACD,GAAKiS,GAAG,KAAM,KAAKhS,CAAC,EAAGA,EAAGD,CAAC,GACnE,CACD,MAAO,EACR,CACD,OAAO,EAAGA,EAAG,CACX,MAAMC,EAAI,KACV,IAAIuB,EAAI,GACR,SAASI,EAAE,EAAG,CACZ,GAAI,EAAIiQ,GAAG,CAAC,EAAG,EAAG,CAChB,MAAM,EAAI9C,EAAE,QAAQ9O,EAAG,CAAC,EACxB,IAAM,CAACD,GAAKiS,GAAGhS,EAAGA,EAAE,CAAC,EAAG,EAAGD,CAAC,KAAO,OAAOC,EAAE,CAAC,EAAGuB,EAAI,GACrD,CACF,CACD,OAAOuN,EAAE,QAAQ,CAAC,EAAI,EAAE,QAAQnN,CAAC,EAAIA,EAAE,CAAC,EAAGJ,CAC5C,CACD,MAAM,EAAG,CACP,MAAMxB,EAAI,OAAO,KAAK,IAAI,EAC1B,IAAIC,EAAID,EAAE,OAAQwB,EAAI,GACtB,KAAOvB,KAAO,CACZ,MAAM2B,EAAI5B,EAAEC,CAAC,GACZ,CAAC,GAAKgS,GAAG,KAAM,KAAKrQ,CAAC,EAAGA,EAAG,EAAG,EAAE,KAAO,OAAO,KAAKA,CAAC,EAAGJ,EAAI,GAC7D,CACD,OAAOA,CACR,CACD,UAAU,EAAG,CACX,MAAMxB,EAAI,KAAMC,EAAI,GACpB,OAAO8O,EAAE,QAAQ,KAAM,CAACvN,EAAGI,IAAM,CAC/B,MAAM,EAAImN,EAAE,QAAQ9O,EAAG2B,CAAC,EACxB,GAAI,EAAG,CACL5B,EAAE,CAAC,EAAI8R,GAAGtQ,CAAC,EAAG,OAAOxB,EAAE4B,CAAC,EACxB,MACD,CACD,MAAM,EAAI,EAAIsQ,GAAGtQ,CAAC,EAAI,OAAOA,CAAC,EAAE,OAChC,IAAMA,GAAK,OAAO5B,EAAE4B,CAAC,EAAG5B,EAAE,CAAC,EAAI8R,GAAGtQ,CAAC,EAAGvB,EAAE,CAAC,EAAI,EAC9C,CAAA,EAAG,IACL,CACD,UAAU,EAAG,CACX,OAAO,KAAK,YAAY,OAAO,KAAM,GAAG,CAAC,CAC1C,CACD,OAAO,EAAG,CACR,MAAMD,EAAoB,OAAO,OAAO,IAAI,EAC5C,OAAO+O,EAAE,QAAQ,KAAM,CAAC9O,EAAGuB,IAAM,CAC/BvB,GAAK,MAAQA,IAAM,KAAOD,EAAEwB,CAAC,EAAI,GAAKuN,EAAE,QAAQ9O,CAAC,EAAIA,EAAE,KAAK,IAAI,EAAIA,EACrE,CAAA,EAAGD,CACL,CACD,CAAC,OAAO,QAAQ,GAAI,CAClB,OAAO,OAAO,QAAQ,KAAK,OAAQ,CAAA,EAAE,OAAO,QAAQ,GACrD,CACD,UAAW,CACT,OAAO,OAAO,QAAQ,KAAK,OAAQ,CAAA,EAAE,IAAI,CAAC,CAAC,EAAGA,CAAC,IAAM,EAAI,KAAOA,CAAC,EAAE,KAAK;AAAA,CAC3E,CACE,CACD,IAAK,OAAO,WAAW,GAAI,CACzB,MAAO,cACR,CACD,OAAO,KAAK,EAAG,CACb,OAAO,aAAa,KAAO,EAAI,IAAI,KAAK,CAAC,CAC1C,CACD,OAAO,OAAO,KAAMA,EAAG,CACrB,MAAMC,EAAI,IAAI,KAAK,CAAC,EACpB,OAAOD,EAAE,QAASwB,GAAMvB,EAAE,IAAIuB,CAAC,CAAC,EAAGvB,CACpC,CACD,OAAO,SAAS,EAAG,CACjB,MAAMA,GAAK,KAAK2R,EAAE,EAAI,KAAKA,EAAE,EAAI,CAC/B,UAAW,CAAE,CACd,GAAE,UAAWpQ,EAAI,KAAK,UACvB,SAAS,EAAEyF,EAAG,CACZ,MAAMsD,EAAIsH,GAAG5K,CAAC,EACdhH,EAAEsK,CAAC,IAAM4H,GAAG3Q,EAAGyF,CAAC,EAAGhH,EAAEsK,CAAC,EAAI,GAC3B,CACD,OAAOwE,EAAE,QAAQ,CAAC,EAAI,EAAE,QAAQ,CAAC,EAAI,EAAE,CAAC,EAAG,IAC5C,CACH,CACAqD,GAAG,SAAS,CAAC,eAAgB,iBAAkB,SAAU,kBAAmB,aAAc,eAAe,CAAC,EAC1GrD,EAAE,kBAAkBqD,GAAG,UAAW,CAAC,CAAE,MAAOrS,CAAG,EAAE,IAAM,CACrD,IAAIC,EAAI,EAAE,CAAC,EAAE,YAAW,EAAK,EAAE,MAAM,CAAC,EACtC,MAAO,CACL,IAAK,IAAMD,EACX,IAAIE,EAAG,CACL,KAAKD,CAAC,EAAIC,CACX,CACL,CACA,CAAC,EACD8O,EAAE,cAAcqD,EAAE,EAClB,MAAMC,GAAID,GACV,SAASE,GAAGvS,EAAG,EAAG,CAChB,MAAMC,EAAI,MAAQyR,GAAIxR,EAAI,GAAKD,EAAGwB,EAAI6Q,GAAE,KAAKpS,EAAE,OAAO,EACtD,IAAI2B,EAAI3B,EAAE,KACV,OAAO8O,EAAE,QAAQhP,EAAG,SAASwK,EAAG,CAC9B3I,EAAI2I,EAAE,KAAKvK,EAAG4B,EAAGJ,EAAE,UAAW,EAAE,EAAI,EAAE,OAAS,MAAM,CACtD,CAAA,EAAGA,EAAE,UAAW,EAAEI,CACrB,CACA,SAAS2Q,GAAGxS,EAAG,CACb,MAAO,CAAC,EAAEA,GAAKA,EAAE,WACnB,CACA,SAASyS,GAAGzS,EAAG,EAAGC,EAAG,CACnBgP,EAAE,KAAK,KAAMjP,GAAK,WAAYiP,EAAE,aAAc,EAAGhP,CAAC,EAAG,KAAK,KAAO,eACnE,CACA+O,EAAE,SAASyD,GAAIxD,EAAG,CAChB,WAAY,EACd,CAAC,EACD,SAASyD,GAAG1S,EAAG,EAAGC,EAAG,CACnB,MAAMC,EAAID,EAAE,OAAO,eACnB,CAACA,EAAE,QAAU,CAACC,GAAKA,EAAED,EAAE,MAAM,EAAID,EAAEC,CAAC,EAAI,EAAE,IAAIgP,EAC5C,mCAAqChP,EAAE,OACvC,CAACgP,EAAE,gBAAiBA,EAAE,gBAAgB,EAAE,KAAK,MAAMhP,EAAE,OAAS,GAAG,EAAI,CAAC,EACtEA,EAAE,OACFA,EAAE,QACFA,CACJ,CAAG,CACH,CACA,SAAS0S,GAAG3S,EAAG,CACb,MAAM,EAAI,4BAA4B,KAAKA,CAAC,EAC5C,OAAO,GAAK,EAAE,CAAC,GAAK,EACtB,CACA,SAAS4S,GAAG5S,EAAG,EAAG,CAChBA,EAAIA,GAAK,GACT,MAAMC,EAAI,IAAI,MAAMD,CAAC,EAAGE,EAAI,IAAI,MAAMF,CAAC,EACvC,IAAIyB,EAAI,EAAGI,EAAI,EAAG,EAClB,OAAO,EAAI,IAAM,OAAS,EAAI,IAAK,SAASmD,EAAG,CAC7C,MAAMG,EAAI,KAAK,IAAG,EAAIE,EAAInF,EAAE2B,CAAC,EAC7B,IAAM,EAAIsD,GAAIlF,EAAEwB,CAAC,EAAIuD,EAAG9E,EAAEuB,CAAC,EAAI0D,EAC/B,IAAIoD,EAAI1G,EAAG2G,EAAI,EACf,KAAOD,IAAM9G,GACX+G,GAAKvI,EAAEsI,GAAG,EAAGA,EAAIA,EAAIvI,EACvB,GAAIyB,GAAKA,EAAI,GAAKzB,EAAGyB,IAAMI,IAAMA,GAAKA,EAAI,GAAK7B,GAAImF,EAAI,EAAI,EACzD,OACF,MAAMsD,EAAIpD,GAAKF,EAAIE,EACnB,OAAOoD,EAAI,KAAK,MAAMD,EAAI,IAAMC,CAAC,EAAI,MACzC,CACA,CACA,SAASoK,GAAG7S,EAAG,EAAG,CAChB,IAAIC,EAAI,EAAGC,EAAI,IAAM,EAAGuB,EAAGI,EAC3B,MAAM,EAAI,CAACsD,EAAGE,EAAI,KAAK,IAAG,IAAO,CAC/BpF,EAAIoF,EAAG5D,EAAI,KAAMI,IAAM,aAAaA,CAAC,EAAGA,EAAI,MAAO7B,EAAE,MAAM,KAAMmF,CAAC,CACtE,EACE,MAAO,CAAC,IAAIA,IAAM,CAChB,MAAME,EAAI,KAAK,IAAK,EAAEkD,EAAIlD,EAAIpF,EAC9BsI,GAAKrI,EAAI,EAAEiF,EAAGE,CAAC,GAAK5D,EAAI0D,EAAGtD,IAAMA,EAAI,WAAW,IAAM,CACpDA,EAAI,KAAM,EAAEJ,CAAC,CACnB,EAAOvB,EAAIqI,CAAC,GACT,EAAE,IAAM9G,GAAK,EAAEA,CAAC,CAAC,CACpB,CACA,MAAMqR,GAAK,CAAC9S,EAAG,EAAGC,EAAI,IAAM,CAC1B,IAAIC,EAAI,EACR,MAAMuB,EAAImR,GAAG,GAAI,GAAG,EACpB,OAAOC,GAAIhR,GAAM,CACf,MAAM,EAAIA,EAAE,OAAQ,EAAIA,EAAE,iBAAmBA,EAAE,MAAQ,OAAQmD,EAAI,EAAI9E,EAAGiF,EAAI1D,EAAEuD,CAAC,EAAG,EAAI,GAAK,EAC7F9E,EAAI,EACJ,MAAMqI,EAAI,CACR,OAAQ,EACR,MAAO,EACP,SAAU,EAAI,EAAI,EAAI,OACtB,MAAOvD,EACP,KAAMG,GAAK,OACX,UAAWA,GAAK,GAAK,GAAK,EAAI,GAAKA,EAAI,OACvC,MAAOtD,EACP,iBAAkB,GAAK,KACvB,CAAC,EAAI,WAAa,QAAQ,EAAG,EACnC,EACI7B,EAAEuI,CAAC,CACJ,EAAEtI,CAAC,CACN,EAAG8S,GAAK,CAAC/S,EAAG,IAAM,CAChB,MAAMC,EAAID,GAAK,KACf,MAAO,CAAEE,GAAM,EAAE,CAAC,EAAE,CAClB,iBAAkBD,EAClB,MAAOD,EACP,OAAQE,CACZ,CAAG,EAAG,EAAE,CAAC,CAAC,CACV,EAAG8S,GAAMhT,GAAM,IAAI,IAAMgP,EAAE,KAAK,IAAMhP,EAAE,GAAG,CAAC,CAAC,EAAGiT,GAAK9B,GAAE,uBAAyB,CAACnR,EAAG,IAAOC,IAAOA,EAAI,IAAI,IAAIA,EAAGkR,GAAE,MAAM,EAAGnR,EAAE,WAAaC,EAAE,UAAYD,EAAE,OAASC,EAAE,OAAS,GAAKD,EAAE,OAASC,EAAE,QAC/L,IAAI,IAAIkR,GAAE,MAAM,EAChBA,GAAE,WAAa,kBAAkB,KAAKA,GAAE,UAAU,SAAS,CAC7D,EAAI,IAAM,GAAI+B,GAAK/B,GAAE,sBAEnB,CACE,MAAMnR,EAAG,EAAGC,EAAGC,EAAGuB,EAAGI,EAAG,CACtB,MAAM,EAAI,CAAC7B,EAAI,IAAM,mBAAmB,CAAC,CAAC,EAC1CgP,EAAE,SAAS/O,CAAC,GAAK,EAAE,KAAK,WAAa,IAAI,KAAKA,CAAC,EAAE,aAAa,EAAG+O,EAAE,SAAS9O,CAAC,GAAK,EAAE,KAAK,QAAUA,CAAC,EAAG8O,EAAE,SAASvN,CAAC,GAAK,EAAE,KAAK,UAAYA,CAAC,EAAGI,IAAM,IAAM,EAAE,KAAK,QAAQ,EAAG,SAAS,OAAS,EAAE,KAAK,IAAI,CAC3M,EACD,KAAK7B,EAAG,CACN,MAAM,EAAI,SAAS,OAAO,MAAM,IAAI,OAAO,aAAeA,EAAI,WAAW,CAAC,EAC1E,OAAO,EAAI,mBAAmB,EAAE,CAAC,CAAC,EAAI,IACvC,EACD,OAAOA,EAAG,CACR,KAAK,MAAMA,EAAG,GAAI,KAAK,IAAG,EAAK,KAAK,CACrC,CACF,EAGD,CACE,OAAQ,CACP,EACD,MAAO,CACL,OAAO,IACR,EACD,QAAS,CACR,CACF,EAEH,SAASmT,GAAGnT,EAAG,CACb,MAAO,8BAA8B,KAAKA,CAAC,CAC7C,CACA,SAASoT,GAAGpT,EAAG,EAAG,CAChB,OAAO,EAAIA,EAAE,QAAQ,SAAU,EAAE,EAAI,IAAM,EAAE,QAAQ,OAAQ,EAAE,EAAIA,CACrE,CACA,SAASqT,GAAGrT,EAAG,EAAGC,EAAG,CACnB,IAAIC,EAAI,CAACiT,GAAG,CAAC,EACb,OAAOnT,IAAME,GAAKD,GAAK,IAAMmT,GAAGpT,EAAG,CAAC,EAAI,CAC1C,CACA,MAAMsT,GAAMtT,GAAMA,aAAasS,GAAI,CAAE,GAAGtS,CAAG,EAAGA,EAC9C,SAASuT,GAAGvT,EAAG,EAAG,CAChB,EAAI,GAAK,GACT,MAAMC,EAAI,CAAA,EACV,SAASC,EAAEiF,EAAG,EAAGoD,EAAGC,EAAG,CACrB,OAAOwG,EAAE,cAAc7J,CAAC,GAAK6J,EAAE,cAAc,CAAC,EAAIA,EAAE,MAAM,KAAK,CAAE,SAAUxG,CAAC,EAAIrD,EAAG,CAAC,EAAI6J,EAAE,cAAc,CAAC,EAAIA,EAAE,MAAM,CAAA,EAAI,CAAC,EAAIA,EAAE,QAAQ,CAAC,EAAI,EAAE,MAAO,EAAG,CAC1J,CACD,SAASvN,EAAE0D,EAAG,EAAGoD,EAAGC,EAAG,CACrB,GAAIwG,EAAE,YAAY,CAAC,GACjB,GAAI,CAACA,EAAE,YAAY7J,CAAC,EAClB,OAAOjF,EAAE,OAAQiF,EAAGoD,EAAGC,CAAC,MAE1B,QAAOtI,EAAEiF,EAAG,EAAGoD,EAAGC,CAAC,CACtB,CACD,SAAS3G,EAAEsD,EAAG,EAAG,CACf,GAAI,CAAC6J,EAAE,YAAY,CAAC,EAClB,OAAO9O,EAAE,OAAQ,CAAC,CACrB,CACD,SAAS,EAAEiF,EAAG,EAAG,CACf,GAAI6J,EAAE,YAAY,CAAC,GACjB,GAAI,CAACA,EAAE,YAAY7J,CAAC,EAClB,OAAOjF,EAAE,OAAQiF,CAAC,MAEpB,QAAOjF,EAAE,OAAQ,CAAC,CACrB,CACD,SAAS,EAAEiF,EAAG,EAAGoD,EAAG,CAClB,GAAIA,KAAK,EACP,OAAOrI,EAAEiF,EAAG,CAAC,EACf,GAAIoD,KAAKvI,EACP,OAAOE,EAAE,OAAQiF,CAAC,CACrB,CACD,MAAMH,EAAI,CACR,IAAKnD,EACL,OAAQA,EACR,KAAMA,EACN,QAAS,EACT,iBAAkB,EAClB,kBAAmB,EACnB,iBAAkB,EAClB,QAAS,EACT,eAAgB,EAChB,gBAAiB,EACjB,cAAe,EACf,QAAS,EACT,aAAc,EACd,eAAgB,EAChB,eAAgB,EAChB,iBAAkB,EAClB,mBAAoB,EACpB,WAAY,EACZ,iBAAkB,EAClB,cAAe,EACf,eAAgB,EAChB,UAAW,EACX,UAAW,EACX,WAAY,EACZ,YAAa,EACb,WAAY,EACZ,iBAAkB,EAClB,eAAgB,EAChB,QAAS,CAACsD,EAAG,EAAGoD,IAAM9G,EAAE6R,GAAGnO,CAAC,EAAGmO,GAAG,CAAC,EAAG/K,EAAG,EAAE,CAC/C,EACE,OAAOyG,EAAE,QAAQ,OAAO,KAAK,OAAO,OAAO,CAAA,EAAIhP,EAAG,CAAC,CAAC,EAAG,SAASqF,EAAG,CACjE,MAAMkD,EAAIvD,EAAEK,CAAC,GAAK5D,EAAG+G,EAAID,EAAEvI,EAAEqF,CAAC,EAAG,EAAEA,CAAC,EAAGA,CAAC,EACxC2J,EAAE,YAAYxG,CAAC,GAAKD,IAAM,IAAMtI,EAAEoF,CAAC,EAAImD,EACxC,CAAA,EAAGvI,CACN,CACA,MAAMuT,GAAMxT,GAAM,CAChB,MAAM,EAAIuT,GAAG,CAAE,EAAEvT,CAAC,EAClB,GAAI,CAAE,KAAMC,EAAG,cAAeC,EAAG,eAAgBuB,EAAG,eAAgBI,EAAG,QAAS,EAAG,KAAM,CAAC,EAAK,EAC/F,EAAE,QAAU,EAAIyQ,GAAE,KAAK,CAAC,EAAG,EAAE,IAAMjC,GAAGgD,GAAG,EAAE,QAAS,EAAE,IAAK,EAAE,iBAAiB,EAAGrT,EAAE,OAAQA,EAAE,gBAAgB,EAAG,GAAK,EAAE,IACrH,gBACA,SAAW,MAAM,EAAE,UAAY,IAAM,KAAO,EAAE,SAAW,SAAS,mBAAmB,EAAE,QAAQ,CAAC,EAAI,GAAG,CAC3G,EACE,IAAIgF,EACJ,GAAIgK,EAAE,WAAW/O,CAAC,GAChB,GAAIkR,GAAE,uBAAyBA,GAAE,+BAC/B,EAAE,eAAe,MAAM,WACfnM,EAAI,EAAE,eAAgB,KAAM,GAAI,CACxC,KAAM,CAACG,EAAG,GAAG,CAAC,EAAIH,EAAIA,EAAE,MAAM,GAAG,EAAE,IAAKuD,GAAMA,EAAE,KAAI,CAAE,EAAE,OAAO,OAAO,EAAI,GAC1E,EAAE,eAAe,CAACpD,GAAK,sBAAuB,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,CAC/D,EAEH,GAAIgM,GAAE,wBAA0BjR,GAAK8O,EAAE,WAAW9O,CAAC,IAAMA,EAAIA,EAAE,CAAC,GAAIA,GAAKA,IAAM,IAAM+S,GAAG,EAAE,GAAG,GAAI,CAC/F,MAAM9N,EAAI1D,GAAKI,GAAKqR,GAAG,KAAKrR,CAAC,EAC7BsD,GAAK,EAAE,IAAI1D,EAAG0D,CAAC,CAChB,CACD,OAAO,CACT,EAAGsO,GAAK,OAAO,eAAiB,IAAKC,GAAKD,IAAM,SAASzT,EAAG,CAC1D,OAAO,IAAI,QAAQ,SAASC,EAAGC,EAAG,CAChC,MAAMuB,EAAI+R,GAAGxT,CAAC,EACd,IAAI,EAAIyB,EAAE,KACV,MAAMyF,EAAIoL,GAAE,KAAK7Q,EAAE,OAAO,EAAE,YAC5B,GAAI,CAAE,aAAc+I,EAAG,iBAAkBxF,EAAG,mBAAoBG,GAAM1D,EAAG4D,EAAGkD,EAAGC,EAAGC,EAAGC,EACrF,SAASJ,GAAI,CACXG,GAAKA,EAAG,EAAEC,GAAKA,EAAG,EAAEjH,EAAE,aAAeA,EAAE,YAAY,YAAY4D,CAAC,EAAG5D,EAAE,QAAUA,EAAE,OAAO,oBAAoB,QAAS4D,CAAC,CACvH,CACD,IAAIuK,EAAI,IAAI,eACZA,EAAE,KAAKnO,EAAE,OAAO,YAAa,EAAEA,EAAE,IAAK,EAAE,EAAGmO,EAAE,QAAUnO,EAAE,QACzD,SAASoO,GAAI,CACX,GAAI,CAACD,EACH,OACF,MAAME,EAAIwC,GAAE,KACV,0BAA2B1C,GAAKA,EAAE,sBAAuB,CAC1D,EAAE+D,EAAI,CACL,KAAM,CAACnJ,GAAKA,IAAM,QAAUA,IAAM,OAASoF,EAAE,aAAeA,EAAE,SAC9D,OAAQA,EAAE,OACV,WAAYA,EAAE,WACd,QAASE,EACT,OAAQ9P,EACR,QAAS4P,CACjB,EACM8C,GAAG,SAASkB,EAAG,CACb3T,EAAE2T,CAAC,EAAGtL,GACP,EAAE,SAASsL,EAAG,CACb1T,EAAE0T,CAAC,EAAGtL,GACd,EAASqL,CAAC,EAAG/D,EAAI,IACZ,CACD,cAAeA,EAAIA,EAAE,UAAYC,EAAID,EAAE,mBAAqB,UAAW,CACrE,CAACA,GAAKA,EAAE,aAAe,GAAKA,EAAE,SAAW,GAAK,EAAEA,EAAE,aAAeA,EAAE,YAAY,QAAQ,OAAO,IAAM,IAAM,WAAWC,CAAC,CAC5H,EAAOD,EAAE,QAAU,UAAW,CACxBA,IAAM1P,EAAE,IAAI+O,EAAE,kBAAmBA,EAAE,aAAcjP,EAAG4P,CAAC,CAAC,EAAGA,EAAI,KACnE,EAAOA,EAAE,QAAU,UAAW,CACxB1P,EAAE,IAAI+O,EAAE,gBAAiBA,EAAE,YAAajP,EAAG4P,CAAC,CAAC,EAAGA,EAAI,IAC1D,EAAOA,EAAE,UAAY,UAAW,CAC1B,IAAIG,EAAItO,EAAE,QAAU,cAAgBA,EAAE,QAAU,cAAgB,mBAChE,MAAMkS,EAAIlS,EAAE,cAAgB+O,GAC5B/O,EAAE,sBAAwBsO,EAAItO,EAAE,qBAAsBvB,EAAE,IAAI+O,EAC1Dc,EACA4D,EAAE,oBAAsB1E,EAAE,UAAYA,EAAE,aACxCjP,EACA4P,CACR,CAAO,EAAGA,EAAI,IACd,EAAO,IAAM,QAAU1I,EAAE,eAAe,IAAI,EAAG,qBAAsB0I,GAAKZ,EAAE,QAAQ9H,EAAE,OAAM,EAAI,SAAS6I,EAAG4D,EAAG,CACzG/D,EAAE,iBAAiB+D,EAAG5D,CAAC,CACxB,CAAA,EAAGf,EAAE,YAAYvN,EAAE,eAAe,IAAMmO,EAAE,gBAAkB,CAAC,CAACnO,EAAE,iBAAkB+I,GAAKA,IAAM,SAAWoF,EAAE,aAAenO,EAAE,cAAe0D,IAAM,CAACqD,EAAGE,CAAC,EAAIoK,GAAG3N,EAAG,EAAE,EAAGyK,EAAE,iBAAiB,WAAYpH,CAAC,GAAIxD,GAAK4K,EAAE,SAAW,CAACrH,EAAGE,CAAC,EAAIqK,GAAG9N,CAAC,EAAG4K,EAAE,OAAO,iBAAiB,WAAYrH,CAAC,EAAGqH,EAAE,OAAO,iBAAiB,UAAWnH,CAAC,IAAKhH,EAAE,aAAeA,EAAE,UAAY4D,EAAKyK,GAAM,CACxWF,IAAM1P,EAAE,CAAC4P,GAAKA,EAAE,KAAO,IAAI2C,GAAG,KAAMzS,EAAG4P,CAAC,EAAIE,CAAC,EAAGF,EAAE,QAASA,EAAI,KACrE,EAAOnO,EAAE,aAAeA,EAAE,YAAY,UAAU4D,CAAC,EAAG5D,EAAE,SAAWA,EAAE,OAAO,QAAU4D,EAAG,EAAG5D,EAAE,OAAO,iBAAiB,QAAS4D,CAAC,IAC1H,MAAM2K,EAAI2C,GAAGlR,EAAE,GAAG,EAClB,GAAIuO,GAAKmB,GAAE,UAAU,QAAQnB,CAAC,IAAM,GAAI,CACtC9P,EAAE,IAAI+O,EAAE,wBAA0Be,EAAI,IAAKf,EAAE,gBAAiBjP,CAAC,CAAC,EAChE,MACD,CACD4P,EAAE,KAAK,GAAK,IAAI,CACpB,CAAG,CACH,EAAGiE,GAAK,CAAC7T,EAAG,IAAM,CAChB,KAAM,CAAE,OAAQC,CAAC,EAAKD,EAAIA,EAAIA,EAAE,OAAO,OAAO,EAAI,GAClD,GAAI,GAAKC,EAAG,CACV,IAAIC,EAAI,IAAI,gBAAmBuB,EAC/B,MAAMI,EAAI,SAASsD,EAAG,CACpB,GAAI,CAAC1D,EAAG,CACNA,EAAI,GAAI,IACR,MAAM,EAAI0D,aAAa,MAAQA,EAAI,KAAK,OACxCjF,EAAE,MAAM,aAAa+O,EAAI,EAAI,IAAIwD,GAAG,aAAa,MAAQ,EAAE,QAAU,CAAC,CAAC,CACxE,CACP,EACI,IAAI,EAAI,GAAK,WAAW,IAAM,CAC5B,EAAI,KAAM5Q,EAAE,IAAIoN,EAAE,WAAW,CAAC,kBAAmBA,EAAE,SAAS,CAAC,CAC9D,EAAE,CAAC,EACJ,MAAM,EAAI,IAAM,CACdjP,IAAM,GAAK,aAAa,CAAC,EAAG,EAAI,KAAMA,EAAE,QAASmF,GAAM,CACrDA,EAAE,YAAcA,EAAE,YAAYtD,CAAC,EAAIsD,EAAE,oBAAoB,QAAStD,CAAC,CAC3E,CAAO,EAAG7B,EAAI,KACd,EACIA,EAAE,QAASmF,GAAMA,EAAE,iBAAiB,QAAStD,CAAC,CAAC,EAC/C,KAAM,CAAE,OAAQmD,CAAG,EAAG9E,EACtB,OAAO8E,EAAE,YAAc,IAAMgK,EAAE,KAAK,CAAC,EAAGhK,CACzC,CACH,EAAG8O,GAAKD,GAAIE,GAAK,UAAW/T,EAAG,EAAG,CAChC,IAAIC,EAAID,EAAE,WACV,GAAI,CAAC,GAAKC,EAAI,EAAG,CACf,MAAMD,EACN,MACD,CACD,IAAIE,EAAI,EAAGuB,EACX,KAAOvB,EAAID,GACTwB,EAAIvB,EAAI,EAAG,MAAMF,EAAE,MAAME,EAAGuB,CAAC,EAAGvB,EAAIuB,CACxC,EAAGuS,GAAK,gBAAiBhU,EAAG,EAAG,CAC7B,gBAAiBC,KAAKgU,GAAGjU,CAAC,EACxB,MAAO+T,GAAG9T,EAAG,CAAC,CAClB,EAAGgU,GAAK,gBAAiBjU,EAAG,CAC1B,GAAIA,EAAE,OAAO,aAAa,EAAG,CAC3B,MAAOA,EACP,MACD,CACD,MAAM,EAAIA,EAAE,YACZ,GAAI,CACF,OAAW,CACT,KAAM,CAAE,KAAMC,EAAG,MAAOC,CAAC,EAAK,MAAM,EAAE,OACtC,GAAID,EACF,MACF,MAAMC,CACP,CACL,QAAY,CACR,MAAM,EAAE,QACT,CACH,EAAGgU,GAAK,CAAClU,EAAG,EAAGC,EAAGC,IAAM,CACtB,MAAMuB,EAAIuS,GAAGhU,EAAG,CAAC,EACjB,IAAI6B,EAAI,EAAG,EAAG,EAAKmD,GAAM,CACvB,IAAM,EAAI,GAAI9E,GAAKA,EAAE8E,CAAC,EAC1B,EACE,OAAO,IAAI,eAAe,CACxB,MAAM,KAAKA,EAAG,CACZ,GAAI,CACF,KAAM,CAAE,KAAMG,EAAG,MAAO,CAAC,EAAK,MAAM1D,EAAE,OACtC,GAAI0D,EAAG,CACL,EAAG,EAAEH,EAAE,QACP,MACD,CACD,IAAIuD,EAAI,EAAE,WACV,GAAItI,EAAG,CACL,IAAIuI,EAAI3G,GAAK0G,EACbtI,EAAEuI,CAAC,CACJ,CACDxD,EAAE,QAAQ,IAAI,WAAW,CAAC,CAAC,CAC5B,OAAQG,EAAG,CACV,MAAM,EAAEA,CAAC,EAAGA,CACb,CACF,EACD,OAAOH,EAAG,CACR,OAAO,EAAEA,CAAC,EAAGvD,EAAE,OAAM,CACtB,CACL,EAAK,CACD,cAAe,CACnB,CAAG,CACH,EAAG0S,GAAK,OAAO,OAAS,YAAc,OAAO,SAAW,YAAc,OAAO,UAAY,WAAYC,GAAKD,IAAM,OAAO,gBAAkB,WAAYE,GAAKF,KAAO,OAAO,aAAe,YAAenU,GAAO,GAAMA,EAAE,OAAO,CAAC,GAAG,IAAI,WAAa,EAAI,MAAOA,GAAM,IAAI,WAAW,MAAM,IAAI,SAASA,CAAC,EAAE,YAAa,CAAA,GAAIsU,GAAK,CAACtU,KAAM,IAAM,CACxU,GAAI,CACF,MAAO,CAAC,CAACA,EAAE,GAAG,CAAC,CACnB,MAAU,CACN,MAAO,EACR,CACH,EAAGuU,GAAKH,IAAME,GAAG,IAAM,CACrB,IAAItU,EAAI,GACR,MAAM,EAAI,IAAI,QAAQmR,GAAE,OAAQ,CAC9B,KAAM,IAAI,eACV,OAAQ,OACR,IAAI,QAAS,CACX,OAAOnR,EAAI,GAAI,MAChB,CACF,CAAA,EAAE,QAAQ,IAAI,cAAc,EAC7B,OAAOA,GAAK,CAAC,CACf,CAAC,EAAGwU,GAAK,GAAK,KAAMC,GAAKL,IAAME,GAAG,IAAMtF,EAAE,iBAAiB,IAAI,SAAS,EAAE,EAAE,IAAI,CAAC,EAAG0F,GAAK,CACvF,OAAQD,KAAQzU,GAAMA,EAAE,KAC1B,EACAmU,KAAQnU,GAAM,CACZ,CAAC,OAAQ,cAAe,OAAQ,WAAY,QAAQ,EAAE,QAAS,GAAM,CACnE,CAAC0U,GAAG,CAAC,IAAMA,GAAG,CAAC,EAAI1F,EAAE,WAAWhP,EAAE,CAAC,CAAC,EAAKC,GAAMA,EAAE,CAAC,IAAM,CAACA,EAAGC,IAAM,CAChE,MAAM,IAAI+O,EAAE,kBAAkB,CAAC,qBAAsBA,EAAE,gBAAiB/O,CAAC,CAC/E,EACA,CAAG,CACH,GAAG,IAAI,QAAU,EACjB,MAAMyU,GAAK,MAAO3U,GAAM,CACtB,GAAIA,GAAK,KACP,MAAO,GACT,GAAIgP,EAAE,OAAOhP,CAAC,EACZ,OAAOA,EAAE,KACX,GAAIgP,EAAE,oBAAoBhP,CAAC,EACzB,OAAQ,MAAM,IAAI,QAAQmR,GAAE,OAAQ,CAClC,OAAQ,OACR,KAAMnR,CACZ,CAAK,EAAE,YAAa,GAAE,WACpB,GAAIgP,EAAE,kBAAkBhP,CAAC,GAAKgP,EAAE,cAAchP,CAAC,EAC7C,OAAOA,EAAE,WACX,GAAIgP,EAAE,kBAAkBhP,CAAC,IAAMA,EAAIA,EAAI,IAAKgP,EAAE,SAAShP,CAAC,EACtD,OAAQ,MAAMqU,GAAGrU,CAAC,GAAG,UACzB,EAAG4U,GAAK,MAAO5U,EAAG,IACNgP,EAAE,eAAehP,EAAE,iBAAkB,CAAA,GACnC2U,GAAG,CAAC,EACfE,GAAKV,KAAO,MAAOnU,GAAM,CAC1B,GAAI,CACF,IAAK,EACL,OAAQC,EACR,KAAMC,EACN,OAAQuB,EACR,YAAaI,EACb,QAAS,EACT,mBAAoB,EACpB,iBAAkBmD,EAClB,aAAcG,EACd,QAAS,EACT,gBAAiBoD,EAAI,cACrB,aAAcC,CAClB,EAAMgL,GAAGxT,CAAC,EACRmF,EAAIA,GAAKA,EAAI,IAAI,YAAa,EAAG,OACjC,IAAIsD,EAAIqL,GAAG,CAACrS,EAAGI,GAAKA,EAAE,eAAe,EAAG,CAAC,EAAG6G,EAC5C,MAAMJ,EAAIG,GAAKA,EAAE,cAAgB,IAAM,CACrCA,EAAE,YAAW,CACjB,GACE,IAAImH,EACJ,GAAI,CACF,GAAI5K,GAAKuP,IAAMtU,IAAM,OAASA,IAAM,SAAW2P,EAAI,MAAMgF,GAAG,EAAG1U,CAAC,KAAO,EAAG,CACxE,IAAIyT,EAAI,IAAI,QAAQ,EAAG,CACrB,OAAQ,OACR,KAAMzT,EACN,OAAQ,MACT,CAAA,EAAG4U,EACJ,GAAI9F,EAAE,WAAW9O,CAAC,IAAM4U,EAAInB,EAAE,QAAQ,IAAI,cAAc,IAAM,EAAE,eAAemB,CAAC,EAAGnB,EAAE,KAAM,CACzF,KAAM,CAACC,EAAGmB,CAAC,EAAIhC,GACbnD,EACAkD,GAAGE,GAAGhO,CAAC,CAAC,CAClB,EACQ9E,EAAIgU,GAAGP,EAAE,KAAMa,GAAIZ,EAAGmB,CAAC,CACxB,CACF,CACD/F,EAAE,SAASzG,CAAC,IAAMA,EAAIA,EAAI,UAAY,QACtC,MAAMsH,EAAI,gBAAiB,QAAQ,UACnCnH,EAAI,IAAI,QAAQ,EAAG,CACjB,GAAGF,EACH,OAAQC,EACR,OAAQxI,EAAE,YAAa,EACvB,QAAS,EAAE,UAAW,EAAC,OAAQ,EAC/B,KAAMC,EACN,OAAQ,OACR,YAAa2P,EAAItH,EAAI,MAC3B,CAAK,EACD,IAAIyH,EAAI,MAAM,MAAMtH,CAAC,EACrB,MAAMoH,EAAI2E,KAAOtP,IAAM,UAAYA,IAAM,YACzC,GAAIsP,KAAO,GAAK3E,GAAKxH,GAAI,CACvB,MAAMqL,EAAI,CAAA,EACV,CAAC,SAAU,aAAc,SAAS,EAAE,QAASqB,GAAM,CACjDrB,EAAEqB,CAAC,EAAIhF,EAAEgF,CAAC,CAClB,CAAO,EACD,MAAMF,EAAI9F,EAAE,eAAegB,EAAE,QAAQ,IAAI,gBAAgB,CAAC,EAAG,CAAC4D,EAAGmB,CAAC,EAAI,GAAKhC,GACzE+B,EACAhC,GAAGE,GAAG,CAAC,EAAG,EAAE,CACb,GAAI,GACLhD,EAAI,IAAI,SACNkE,GAAGlE,EAAE,KAAMwE,GAAIZ,EAAG,IAAM,CACtBmB,GAAKA,EAAC,EAAIzM,GAAKA,EAAC,CAC1B,CAAS,EACDqL,CACR,CACK,CACDxO,EAAIA,GAAK,OACT,IAAI4K,EAAI,MAAM2E,GAAG1F,EAAE,QAAQ0F,GAAIvP,CAAC,GAAK,MAAM,EAAE6K,EAAGhQ,CAAC,EACjD,MAAO,CAAC8P,GAAKxH,GAAKA,EAAC,EAAI,MAAM,IAAI,QAAQ,CAACqL,EAAGmB,IAAM,CACjDpC,GAAGiB,EAAGmB,EAAG,CACP,KAAM/E,EACN,QAASuC,GAAE,KAAKtC,EAAE,OAAO,EACzB,OAAQA,EAAE,OACV,WAAYA,EAAE,WACd,OAAQhQ,EACR,QAAS0I,CACjB,CAAO,CACP,CAAK,CACF,OAAQmH,EAAG,CACV,MAAMvH,GAAKA,EAAC,EAAIuH,GAAKA,EAAE,OAAS,aAAe,SAAS,KAAKA,EAAE,OAAO,EAAI,OAAO,OAC/E,IAAIZ,EAAE,gBAAiBA,EAAE,YAAajP,EAAG0I,CAAC,EAC1C,CACE,MAAOmH,EAAE,OAASA,CACnB,CACP,EAAQZ,EAAE,KAAKY,EAAGA,GAAKA,EAAE,KAAM7P,EAAG0I,CAAC,CAChC,CACH,GAAIuM,GAAK,CACP,KAAM7F,GACN,IAAKsE,GACL,MAAOmB,EACT,EACA7F,EAAE,QAAQiG,GAAI,CAACjV,EAAG,IAAM,CACtB,GAAIA,EAAG,CACL,GAAI,CACF,OAAO,eAAeA,EAAG,OAAQ,CAAE,MAAO,CAAC,CAAE,CACnD,MAAY,CACP,CACD,OAAO,eAAeA,EAAG,cAAe,CAAE,MAAO,CAAC,CAAE,CACrD,CACH,CAAC,EACD,MAAMkV,GAAMlV,GAAM,KAAKA,CAAC,GAAImV,GAAMnV,GAAMgP,EAAE,WAAWhP,CAAC,GAAKA,IAAM,MAAQA,IAAM,GAAIoV,GAAK,CACtF,WAAapV,GAAM,CACjBA,EAAIgP,EAAE,QAAQhP,CAAC,EAAIA,EAAI,CAACA,CAAC,EACzB,KAAM,CAAE,OAAQ,CAAG,EAAGA,EACtB,IAAIC,EAAGC,EACP,MAAMuB,EAAI,CAAA,EACV,QAASI,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAC1B5B,EAAID,EAAE6B,CAAC,EACP,IAAI,EACJ,GAAI3B,EAAID,EAAG,CAACkV,GAAGlV,CAAC,IAAMC,EAAI+U,IAAI,EAAI,OAAOhV,CAAC,GAAG,YAAa,CAAA,EAAGC,IAAM,QACjE,MAAM,IAAI+O,EAAE,oBAAoB,CAAC,GAAG,EACtC,GAAI/O,EACF,MACFuB,EAAE,GAAK,IAAMI,CAAC,EAAI3B,CACnB,CACD,GAAI,CAACA,EAAG,CACN,MAAM2B,EAAI,OAAO,QAAQJ,CAAC,EAAE,IAC1B,CAAC,CAAC,EAAGuD,CAAC,IAAM,WAAW,CAAC,KAAOA,IAAM,GAAK,sCAAwC,gCAC1F,EACM,IAAI,EAAI,EAAInD,EAAE,OAAS,EAAI;AAAA,EAC7BA,EAAE,IAAIqT,EAAE,EAAE,KAAK;AAAA,CAClB,EAAI,IAAMA,GAAGrT,EAAE,CAAC,CAAC,EAAI,0BAChB,MAAM,IAAIoN,EACR,wDAA0D,EAC1D,iBACR,CACK,CACD,OAAO/O,CACR,EACD,SAAU+U,EACZ,EACA,SAASI,GAAGrV,EAAG,CACb,GAAIA,EAAE,aAAeA,EAAE,YAAY,mBAAoBA,EAAE,QAAUA,EAAE,OAAO,QAC1E,MAAM,IAAIyS,GAAG,KAAMzS,CAAC,CACxB,CACA,SAASsV,GAAGtV,EAAG,CACb,OAAOqV,GAAGrV,CAAC,EAAGA,EAAE,QAAUsS,GAAE,KAAKtS,EAAE,OAAO,EAAGA,EAAE,KAAOuS,GAAG,KACvDvS,EACAA,EAAE,gBACH,EAAE,CAAC,OAAQ,MAAO,OAAO,EAAE,QAAQA,EAAE,MAAM,IAAM,IAAMA,EAAE,QAAQ,eAAe,oCAAqC,EAAE,EAAGoV,GAAG,WAAWpV,EAAE,SAAW0R,GAAG,OAAO,EAAE1R,CAAC,EAAE,KAAK,SAASE,EAAG,CACpL,OAAOmV,GAAGrV,CAAC,EAAGE,EAAE,KAAOqS,GAAG,KACxBvS,EACAA,EAAE,kBACFE,CACN,EAAOA,EAAE,QAAUoS,GAAE,KAAKpS,EAAE,OAAO,EAAGA,CACnC,EAAE,SAASA,EAAG,CACb,OAAOsS,GAAGtS,CAAC,IAAMmV,GAAGrV,CAAC,EAAGE,GAAKA,EAAE,WAAaA,EAAE,SAAS,KAAOqS,GAAG,KAC/DvS,EACAA,EAAE,kBACFE,EAAE,QACH,EAAEA,EAAE,SAAS,QAAUoS,GAAE,KAAKpS,EAAE,SAAS,OAAO,IAAK,QAAQ,OAAOA,CAAC,CAC1E,CAAG,CACH,CACA,MAAMqV,GAAK,QAASC,GAAK,GACzB,CAAC,SAAU,UAAW,SAAU,WAAY,SAAU,QAAQ,EAAE,QAAQ,CAACxV,EAAG,IAAM,CAChFwV,GAAGxV,CAAC,EAAI,SAASE,EAAG,CAClB,OAAO,OAAOA,IAAMF,GAAK,KAAO,EAAI,EAAI,KAAO,KAAOA,CAC1D,CACA,CAAC,EACD,MAAMyV,GAAK,CAAA,EACXD,GAAG,aAAe,SAAS9F,EAAGzP,EAAGC,EAAG,CAClC,SAASuB,EAAE,EAAGyF,EAAG,CACf,MAAO,WAAaqO,GAAK,0BAA4B,EAAI,IAAMrO,GAAKhH,EAAI,KAAOA,EAAI,GACpF,CACD,MAAO,CAAC,EAAGgH,EAAGsD,IAAM,CAClB,GAAIkF,IAAM,GACR,MAAM,IAAIT,EACRxN,EAAEyF,EAAG,qBAAuBjH,EAAI,OAASA,EAAI,GAAG,EAChDgP,EAAE,cACV,EACI,OAAOhP,GAAK,CAACwV,GAAGvO,CAAC,IAAMuO,GAAGvO,CAAC,EAAI,GAAI,QAAQ,KACzCzF,EACEyF,EACA,+BAAiCjH,EAAI,yCACtC,CACP,GAAQyP,EAAIA,EAAE,EAAGxI,EAAGsD,CAAC,EAAI,EACzB,CACA,EACAgL,GAAG,SAAW,SAAS9F,EAAG,CACxB,MAAO,CAACzP,EAAGC,KAAO,QAAQ,KAAK,GAAGA,CAAC,+BAA+BwP,CAAC,EAAE,EAAG,GAC1E,EACA,SAASgG,GAAG1V,EAAG,EAAGC,EAAG,CACnB,GAAI,OAAOD,GAAK,SACd,MAAM,IAAIiP,EAAE,4BAA6BA,EAAE,oBAAoB,EACjE,MAAM/O,EAAI,OAAO,KAAKF,CAAC,EACvB,IAAIyB,EAAIvB,EAAE,OACV,KAAOuB,KAAM,GAAK,CAChB,MAAMI,EAAI3B,EAAEuB,CAAC,EAAG,EAAI,EAAEI,CAAC,EACvB,GAAI,EAAG,CACL,MAAM,EAAI7B,EAAE6B,CAAC,EAAGmD,EAAI,IAAM,QAAU,EAAE,EAAGnD,EAAG7B,CAAC,EAC7C,GAAIgF,IAAM,GACR,MAAM,IAAIiK,EAAE,UAAYpN,EAAI,YAAcmD,EAAGiK,EAAE,oBAAoB,EACrE,QACD,CACD,GAAIhP,IAAM,GACR,MAAM,IAAIgP,EAAE,kBAAoBpN,EAAGoN,EAAE,cAAc,CACtD,CACH,CACA,MAAM0G,GAAK,CACT,cAAeD,GACf,WAAYF,EACd,EAAGI,GAAID,GAAG,WACV,MAAME,EAAG,CACP,YAAY,EAAG,CACb,KAAK,SAAW,EAAG,KAAK,aAAe,CACrC,QAAS,IAAItF,GACb,SAAU,IAAIA,EACpB,CACG,CASD,MAAM,QAAQ,EAAGtQ,EAAG,CAClB,GAAI,CACF,OAAO,MAAM,KAAK,SAAS,EAAGA,CAAC,CAChC,OAAQC,EAAG,CACV,GAAIA,aAAa,MAAO,CACtB,IAAIuB,EAAI,CAAA,EACR,MAAM,kBAAoB,MAAM,kBAAkBA,CAAC,EAAIA,EAAI,IAAI,MAC/D,MAAMI,EAAIJ,EAAE,MAAQA,EAAE,MAAM,QAAQ,QAAS,EAAE,EAAI,GACnD,GAAI,CACFvB,EAAE,MAAQ2B,GAAK,CAAC,OAAO3B,EAAE,KAAK,EAAE,SAAS2B,EAAE,QAAQ,YAAa,EAAE,CAAC,IAAM3B,EAAE,OAAS;AAAA,EAC1F2B,GAAK3B,EAAE,MAAQ2B,CACnB,MAAgB,CACP,CACF,CACD,MAAM3B,CACP,CACF,CACD,SAAS,EAAGD,EAAG,CACb,OAAO,GAAK,UAAYA,EAAIA,GAAK,CAAE,EAAEA,EAAE,IAAM,GAAKA,EAAI,GAAK,CAAA,EAAIA,EAAIsT,GAAG,KAAK,SAAUtT,CAAC,EACtF,KAAM,CAAE,aAAcC,EAAG,iBAAkBuB,EAAG,QAASI,CAAG,EAAG5B,EAC7DC,IAAM,QAAUyV,GAAG,cAAczV,EAAG,CAClC,kBAAmB0V,GAAE,aAAaA,GAAE,OAAO,EAC3C,kBAAmBA,GAAE,aAAaA,GAAE,OAAO,EAC3C,oBAAqBA,GAAE,aAAaA,GAAE,OAAO,CACnD,EAAO,EAAE,EAAGnU,GAAK,OAASuN,EAAE,WAAWvN,CAAC,EAAIxB,EAAE,iBAAmB,CAC3D,UAAWwB,CACjB,EAAQkU,GAAG,cAAclU,EAAG,CACtB,OAAQmU,GAAE,SACV,UAAWA,GAAE,QACd,EAAE,EAAE,GAAI3V,EAAE,oBAAsB,SAAW,KAAK,SAAS,oBAAsB,OAASA,EAAE,kBAAoB,KAAK,SAAS,kBAAoBA,EAAE,kBAAoB,IAAK0V,GAAG,cAAc1V,EAAG,CAC9L,QAAS2V,GAAE,SAAS,SAAS,EAC7B,cAAeA,GAAE,SAAS,eAAe,CAC1C,EAAE,EAAE,EAAG3V,EAAE,QAAUA,EAAE,QAAU,KAAK,SAAS,QAAU,OAAO,YAAW,EAC1E,IAAI,EAAI4B,GAAKmN,EAAE,MACbnN,EAAE,OACFA,EAAE5B,EAAE,MAAM,CAChB,EACI4B,GAAKmN,EAAE,QACL,CAAC,SAAU,MAAO,OAAQ,OAAQ,MAAO,QAAS,QAAQ,EACzDtG,GAAM,CACL,OAAO7G,EAAE6G,CAAC,CACX,CACP,EAAOzI,EAAE,QAAUqS,GAAE,OAAO,EAAGzQ,CAAC,EAC5B,MAAM,EAAI,CAAA,EACV,IAAImD,EAAI,GACR,KAAK,aAAa,QAAQ,QAAQ,SAASsD,EAAG,CAC5C,OAAOA,EAAE,SAAW,YAAcA,EAAE,QAAQrI,CAAC,IAAM,KAAO+E,EAAIA,GAAKsD,EAAE,YAAa,EAAE,QAAQA,EAAE,UAAWA,EAAE,QAAQ,EACzH,CAAK,EACD,MAAMnD,EAAI,CAAA,EACV,KAAK,aAAa,SAAS,QAAQ,SAASmD,EAAG,CAC7CnD,EAAE,KAAKmD,EAAE,UAAWA,EAAE,QAAQ,CACpC,CAAK,EACD,IAAI,EAAGC,EAAI,EAAGC,EACd,GAAI,CAACxD,EAAG,CACN,MAAM0D,EAAI,CAAC4M,GAAG,KAAK,IAAI,EAAG,MAAM,EAChC,IAAK5M,EAAE,QAAQ,MAAMA,EAAG,CAAC,EAAGA,EAAE,KAAK,MAAMA,EAAGvD,CAAC,EAAGqD,EAAIE,EAAE,OAAQ,EAAI,QAAQ,QAAQzI,CAAC,EAAGsI,EAAIC,GACxF,EAAI,EAAE,KAAKE,EAAEH,GAAG,EAAGG,EAAEH,GAAG,CAAC,EAC3B,OAAO,CACR,CACDC,EAAI,EAAE,OACN,IAAIC,EAAIxI,EACR,IAAKsI,EAAI,EAAGA,EAAIC,GAAK,CACnB,MAAME,EAAI,EAAEH,GAAG,EAAGD,EAAI,EAAEC,GAAG,EAC3B,GAAI,CACFE,EAAIC,EAAED,CAAC,CACR,OAAQmH,EAAG,CACVtH,EAAE,KAAK,KAAMsH,CAAC,EACd,KACD,CACF,CACD,GAAI,CACF,EAAI0F,GAAG,KAAK,KAAM7M,CAAC,CACpB,OAAQC,EAAG,CACV,OAAO,QAAQ,OAAOA,CAAC,CACxB,CACD,IAAKH,EAAI,EAAGC,EAAIrD,EAAE,OAAQoD,EAAIC,GAC5B,EAAI,EAAE,KAAKrD,EAAEoD,GAAG,EAAGpD,EAAEoD,GAAG,CAAC,EAC3B,OAAO,CACR,CACD,OAAO,EAAG,CACR,EAAIgL,GAAG,KAAK,SAAU,CAAC,EACvB,MAAMtT,EAAIoT,GAAG,EAAE,QAAS,EAAE,IAAK,EAAE,iBAAiB,EAClD,OAAOhD,GAAGpQ,EAAG,EAAE,OAAQ,EAAE,gBAAgB,CAC1C,CACH,CACA+O,EAAE,QAAQ,CAAC,SAAU,MAAO,OAAQ,SAAS,EAAG,SAASU,EAAG,CAC1DmG,GAAG,UAAUnG,CAAC,EAAI,SAASzP,EAAGC,EAAG,CAC/B,OAAO,KAAK,QAAQqT,GAAGrT,GAAK,CAAA,EAAI,CAC9B,OAAQwP,EACR,IAAKzP,EACL,MAAOC,GAAK,CAAA,GAAI,IACjB,CAAA,CAAC,CACN,CACA,CAAC,EACD8O,EAAE,QAAQ,CAAC,OAAQ,MAAO,OAAO,EAAG,SAASU,EAAG,CAC9C,SAASzP,EAAEC,EAAG,CACZ,OAAO,SAAS2B,EAAGqF,EAAGsD,EAAG,CACvB,OAAO,KAAK,QAAQ+I,GAAG/I,GAAK,CAAA,EAAI,CAC9B,OAAQkF,EACR,QAASxP,EAAI,CACX,eAAgB,qBAC1B,EAAY,CAAE,EACN,IAAK2B,EACL,KAAMqF,CACP,CAAA,CAAC,CACR,CACG,CACD2O,GAAG,UAAUnG,CAAC,EAAIzP,EAAG,EAAE4V,GAAG,UAAUnG,EAAI,MAAM,EAAIzP,EAAE,EAAE,CACxD,CAAC,EACD,MAAM6V,GAAKD,GACX,MAAME,EAAG,CACP,YAAY,EAAG,CACb,GAAI,OAAO,GAAK,WACd,MAAM,IAAI,UAAU,8BAA8B,EACpD,IAAI9V,EACJ,KAAK,QAAU,IAAI,QAAQ,SAAS,EAAG,CACrCA,EAAI,CACV,CAAK,EACD,MAAMC,EAAI,KACV,KAAK,QAAQ,KAAMuB,GAAM,CACvB,GAAI,CAACvB,EAAE,WACL,OACF,IAAI2B,EAAI3B,EAAE,WAAW,OACrB,KAAO2B,KAAM,GACX3B,EAAE,WAAW2B,CAAC,EAAEJ,CAAC,EACnBvB,EAAE,WAAa,IAChB,CAAA,EAAG,KAAK,QAAQ,KAAQuB,GAAM,CAC7B,IAAII,EACJ,MAAM,EAAI,IAAI,QAAS,GAAM,CAC3B3B,EAAE,UAAU,CAAC,EAAG2B,EAAI,CAC5B,CAAO,EAAE,KAAKJ,CAAC,EACT,OAAO,EAAE,OAAS,UAAW,CAC3BvB,EAAE,YAAY2B,CAAC,CAChB,EAAE,CACJ,EAAE,EAAE,SAAS,EAAGqF,EAAGsD,EAAG,CACrBtK,EAAE,SAAWA,EAAE,OAAS,IAAIuS,GAAG,EAAGvL,EAAGsD,CAAC,EAAGvK,EAAEC,EAAE,MAAM,EACzD,CAAK,CACF,CAID,kBAAmB,CACjB,GAAI,KAAK,OACP,MAAM,KAAK,MACd,CAID,UAAU,EAAG,CACX,GAAI,KAAK,OAAQ,CACf,EAAE,KAAK,MAAM,EACb,MACD,CACD,KAAK,WAAa,KAAK,WAAW,KAAK,CAAC,EAAI,KAAK,WAAa,CAAC,CAAC,CACjE,CAID,YAAY,EAAG,CACb,GAAI,CAAC,KAAK,WACR,OACF,MAAMD,EAAI,KAAK,WAAW,QAAQ,CAAC,EACnCA,IAAM,IAAM,KAAK,WAAW,OAAOA,EAAG,CAAC,CACxC,CACD,eAAgB,CACd,MAAM,EAAI,IAAI,gBAAmBA,EAAKC,GAAM,CAC1C,EAAE,MAAMA,CAAC,CACf,EACI,OAAO,KAAK,UAAUD,CAAC,EAAG,EAAE,OAAO,YAAc,IAAM,KAAK,YAAYA,CAAC,EAAG,EAAE,MAC/E,CAKD,OAAO,QAAS,CACd,IAAI,EACJ,MAAO,CACL,MAAO,IAAI8V,GAAG,SAAStU,EAAG,CACxB,EAAIA,CACZ,CAAO,EACD,OAAQ,CACd,CACG,CACH,CACA,MAAMuU,GAAKD,GACX,SAASE,GAAGjW,EAAG,CACb,OAAO,SAASC,EAAG,CACjB,OAAOD,EAAE,MAAM,KAAMC,CAAC,CAC1B,CACA,CACA,SAASiW,GAAGlW,EAAG,CACb,OAAOgP,EAAE,SAAShP,CAAC,GAAKA,EAAE,eAAiB,EAC7C,CACA,MAAMmW,GAAK,CACT,SAAU,IACV,mBAAoB,IACpB,WAAY,IACZ,WAAY,IACZ,GAAI,IACJ,QAAS,IACT,SAAU,IACV,4BAA6B,IAC7B,UAAW,IACX,aAAc,IACd,eAAgB,IAChB,YAAa,IACb,gBAAiB,IACjB,OAAQ,IACR,gBAAiB,IACjB,iBAAkB,IAClB,MAAO,IACP,SAAU,IACV,YAAa,IACb,SAAU,IACV,OAAQ,IACR,kBAAmB,IACnB,kBAAmB,IACnB,WAAY,IACZ,aAAc,IACd,gBAAiB,IACjB,UAAW,IACX,SAAU,IACV,iBAAkB,IAClB,cAAe,IACf,4BAA6B,IAC7B,eAAgB,IAChB,SAAU,IACV,KAAM,IACN,eAAgB,IAChB,mBAAoB,IACpB,gBAAiB,IACjB,WAAY,IACZ,qBAAsB,IACtB,oBAAqB,IACrB,kBAAmB,IACnB,UAAW,IACX,mBAAoB,IACpB,oBAAqB,IACrB,OAAQ,IACR,iBAAkB,IAClB,SAAU,IACV,gBAAiB,IACjB,qBAAsB,IACtB,gBAAiB,IACjB,4BAA6B,IAC7B,2BAA4B,IAC5B,oBAAqB,IACrB,eAAgB,IAChB,WAAY,IACZ,mBAAoB,IACpB,eAAgB,IAChB,wBAAyB,IACzB,sBAAuB,IACvB,oBAAqB,IACrB,aAAc,IACd,YAAa,IACb,8BAA+B,GACjC,EACA,OAAO,QAAQA,EAAE,EAAE,QAAQ,CAAC,CAACnW,EAAG,CAAC,IAAM,CACrCmW,GAAG,CAAC,EAAInW,CACV,CAAC,EACD,MAAMoW,GAAKD,GACX,SAASE,GAAGrW,EAAG,CACb,MAAM,EAAI,IAAI8V,GAAG9V,CAAC,EAAGC,EAAIqL,GAAGwK,GAAG,UAAU,QAAS,CAAC,EACnD,OAAO9G,EAAE,OAAO/O,EAAG6V,GAAG,UAAW,EAAG,CAAE,WAAY,EAAE,CAAE,EAAG9G,EAAE,OAAO/O,EAAG,EAAG,KAAM,CAAE,WAAY,EAAE,CAAE,EAAGA,EAAE,OAAS,SAASwB,EAAG,CACxH,OAAO4U,GAAG9C,GAAGvT,EAAGyB,CAAC,CAAC,CACnB,EAAExB,CACL,CACA,MAAMqW,GAAID,GAAG3E,EAAE,EACf4E,GAAE,MAAQR,GACVQ,GAAE,cAAgB7D,GAClB6D,GAAE,YAAcN,GAChBM,GAAE,SAAW9D,GACb8D,GAAE,QAAUf,GACZe,GAAE,WAAa3G,GACf2G,GAAE,WAAarH,EACfqH,GAAE,OAASA,GAAE,cACbA,GAAE,IAAM,SAAS5G,EAAG,CAClB,OAAO,QAAQ,IAAIA,CAAC,CACtB,EACA4G,GAAE,OAASL,GACXK,GAAE,aAAeJ,GACjBI,GAAE,YAAc/C,GAChB+C,GAAE,aAAehE,GACjBgE,GAAE,WAActW,GAAMuR,GAAGvC,EAAE,WAAWhP,CAAC,EAAI,IAAI,SAASA,CAAC,EAAIA,CAAC,EAC9DsW,GAAE,WAAalB,GAAG,WAClBkB,GAAE,eAAiBF,GACnBE,GAAE,QAAUA,GACZ,MAAMC,GAAKD,GACX,MAAME,EAAG,CACP,SACA,SACA,WAAa,EACb,UAAY,EACZ,OAAS,IAAI/S,GACb,YAAY,EAAG,CACb,KAAK,SAAW8S,GAAG,OAAO,CAAC,EAAG,KAAK,SAAW,IAAIE,GAAM,KAAK,WAAa,GAAG,OAAS,EAAG,KAAK,UAAY,GAAG,OAAS,EAAG,KAAK,SAAS,aAAa,QAAQ,IACzJxW,IAAO,GAAG,aAAa,QAAS,EAAE,KAAK,SAAS,eAAeA,CAAC,EAAG,GAAG,aAAa,UAAUA,CAAC,EAAGA,GACjGA,IAAO,GAAG,aAAa,MAAO,EAAE,KAAK,SAAS,cAAcA,EAAE,MAAM,EAAG,GAAG,aAAa,eAAeA,CAAC,EAAG,QAAQ,OAAOA,CAAC,EAC5H,EAAE,KAAK,SAAS,aAAa,SAAS,IACpCA,IAAO,GAAG,aAAa,MAAG,EAAM,KAAK,SAAS,eAAeA,EAAE,MAAM,EAAG,GAAG,aAAa,WAAWA,CAAC,EAAGA,EAAE,QAAU,IAAM,QAAQ,QAAQA,CAAC,EAAI,QAAQ,OAAOA,CAAC,GAC9JA,IAAO,GAAG,aAAa,MAAO,EAAE,KAAK,SAAS,cAAcA,EAAE,MAAM,EAAG,GAAG,aAAa,gBAAgBA,CAAC,EAAG,QAAQ,OAAOA,EAAE,QAAQ,EAC3I,CACG,CAGD,QAAQ,EAAG,CACT,IAAIA,EAAI,KAAK,SAAS,QACtB,MAAMC,EAAI,EAAE,OAAS,KAAK,WAC1BA,IAAMD,EAAIgF,GAAGhF,EAAGC,CAAC,GACjB,MAAMuB,EAAI,EAAE,OAAS,KAAK,UAC1B,OAAOA,IAAMxB,EAAImF,GAAGnF,EAAGwB,EAAG,KAAK,MAAM,GAAIxB,EAAE,CAAC,CAC7C,CAED,OAAO,EAAG,CACR,KAAK,SAAS,cAAc,CAAC,CAC9B,CACD,IAAI,EAAGA,EAAG,CACR,OAAO,KAAK,QAAQ,CAAE,GAAGA,EAAG,OAAQ,MAAO,IAAK,CAAC,CAAE,CACpD,CACD,OAAO,EAAGA,EAAG,CACX,OAAO,KAAK,QAAQ,CAAE,GAAGA,EAAG,OAAQ,SAAU,IAAK,CAAC,CAAE,CACvD,CACD,KAAK,EAAGA,EAAG,CACT,OAAO,KAAK,QAAQ,CAAE,GAAGA,EAAG,OAAQ,OAAQ,IAAK,CAAC,CAAE,CACrD,CACD,QAAQ,EAAGA,EAAG,CACZ,OAAO,KAAK,QAAQ,CAAE,GAAGA,EAAG,OAAQ,UAAW,IAAK,CAAC,CAAE,CACxD,CACD,KAAK,EAAGA,EAAGC,EAAG,CACZ,OAAO,KAAK,QAAQ,CAAE,GAAGA,EAAG,OAAQ,OAAQ,IAAK,EAAG,KAAMD,CAAG,CAAA,CAC9D,CACD,SAAS,EAAGA,EAAGC,EAAG,CAChB,OAAOA,EAAI,CACT,GAAGA,EACH,QAAS,CACP,GAAGA,GAAG,QACN,eAAgB,qBACjB,CACF,EAAE,KAAK,QAAQ,CAAE,GAAGA,EAAG,OAAQ,OAAQ,IAAK,EAAG,KAAMD,CAAG,CAAA,CAC1D,CAED,SAAS,EAAGA,EAAGC,EAAG,CAChB,OAAO,KAAK,SAAS,SAAS,EAAGD,EAAG,CAAE,GAAGC,CAAC,CAAE,CAC7C,CACD,IAAI,EAAGD,EAAGC,EAAG,CACX,OAAO,KAAK,QAAQ,CAAE,GAAGA,EAAG,OAAQ,MAAO,IAAK,EAAG,KAAMD,CAAG,CAAA,CAC7D,CACD,MAAM,EAAGA,EAAGC,EAAG,CACb,OAAO,KAAK,QAAQ,CAAE,GAAGA,EAAG,OAAQ,QAAS,IAAK,EAAG,KAAMD,CAAG,CAAA,CAC/D,CACD,OAAO,EAAG,CACR,OAAO,KAAK,SAAS,OAAO,CAAC,CAC9B,CACH,CACA,MAAMwW,EAAG,CACP,kBACA,aAAc,CACZ,KAAK,kBAAoC,IAAI,GAC9C,CACD,aAAa,EAAG,CACd,KAAM,CAAE,OAAQxW,EAAG,IAAKC,EAAG,OAAQuB,EAAG,KAAMI,CAAG,EAAG,EAClD,OAAOd,GAAG,CAAE,OAAQd,EAAG,IAAKC,EAAG,OAAQuB,EAAG,KAAMI,CAAG,CAAA,CACpD,CACD,eAAe,EAAG,CAChB,MAAM5B,EAAI,KAAK,aAAa,CAAC,EAC7B,GAAI,KAAK,kBAAkB,IAAIA,CAAC,EAC9B,EAAE,OAAS,KAAK,kBAAkB,IAAIA,CAAC,GAAG,WACvC,CACH,MAAMC,EAAI,IAAI,gBACd,EAAE,OAASA,EAAE,OAAQ,KAAK,kBAAkB,IAAID,EAAGC,CAAC,CACrD,CACF,CACD,eAAe,EAAG,CAChB,GAAI,KAAK,kBAAkB,OAAS,EAClC,OACF,MAAMD,EAAI,KAAK,aAAa,CAAC,EAC7B,KAAK,kBAAkB,IAAIA,CAAC,GAAK,KAAK,kBAAkB,OAAOA,CAAC,CACjE,CACD,cAAc,EAAG,CACf,GAAI,KAAK,kBAAkB,OAAS,EAClC,OACF,MAAMA,EAAI,KAAK,aAAa,CAAC,EAC7B,KAAK,kBAAkB,IAAIA,CAAC,IAAM,KAAK,kBAAkB,IAAIA,CAAC,GAAG,MAAO,EAAE,KAAK,kBAAkB,OAAOA,CAAC,EAC1G,CACD,kBAAmB,CACjB,MAAM,EAAI,KAAK,kBAAkB,OAAM,EACvC,UAAWA,KAAK,EACdA,EAAE,MAAK,EACT,KAAK,kBAAkB,OACxB,CACH,CAkGA,SAASyW,GAAG1W,EAAG,EAAI,CAACC,EAAGC,IAAMD,GAAKC,EAAG,CACnC,MAAMD,EAAID,EAAE,OACZ,IAAIE,EAAI,KAAK,MAAMD,EAAI,CAAC,EACxB,KAAOC,EAAI,GAAK,CACd,QAASuB,EAAIvB,EAAGuB,EAAIxB,EAAGwB,IAAK,CAC1B,MAAMI,EAAI7B,EAAEyB,CAAC,EACb,IAAI,EAAIA,EACR,KAAO,GAAKvB,GAAK,CAAC,EAAEF,EAAE,EAAIE,CAAC,EAAG2B,CAAC,GAC7B7B,EAAE,CAAC,EAAIA,EAAE,EAAIE,CAAC,EAAG,GAAKA,EACxBF,EAAE,CAAC,EAAI6B,CACR,CACD3B,EAAI,KAAK,MAAMA,EAAI,CAAC,CACrB,CACH,CAyGuJ,MAAAyW,GAAK,OAAO,SAAW,UAAY,QAAU,QAAU,CAAA,EAAIC,GAAK,CAAC5W,EAAG,EAAGC,EAAGC,IAAM,CACrO,OAAOyW,GAAG,aAAe,WAAaA,GAAG,YAAY3W,EAAG,EAAGC,EAAGC,CAAC,EAAI,QAAQ,MAAM,IAAID,CAAC,KAAK,CAAC,KAAKD,CAAC,EAAE,CACtG,EACA,IAAI6W,GAAK1W,GAAE,gBAAiB2W,GAAK3W,GAAE,YACnC,GAAI,OAAO0W,GAAK,IAAK,CACnBC,GAAK,KAAM,CACT,QACA,SAAW,CAAA,EACX,OACA,QAAU,GACV,iBAAiB5W,EAAGuB,EAAG,CACrB,KAAK,SAAS,KAAKA,CAAC,CACrB,CACF,EAAEoV,GAAK,KAAM,CACZ,aAAc,CACZ,GACD,CACD,OAAS,IAAIC,GACb,MAAM5W,EAAG,CACP,GAAI,CAAC,KAAK,OAAO,QAAS,CACxB,KAAK,OAAO,OAASA,EAAG,KAAK,OAAO,QAAU,GAC9C,UAAWuB,KAAK,KAAK,OAAO,SAC1BA,EAAEvB,CAAC,EACL,KAAK,OAAO,UAAUA,CAAC,CACxB,CACF,CACL,EACE,IAAIF,EAAI2W,GAAG,KAAK,8BAAgC,IAChD,MAAM,EAAI,IAAM,CACd3W,IAAMA,EAAI,GAAI4W,GACZ,maACA,sBACA,UACA,CACN,EACA,CACA,0ICzrXC,SAAUG,EAAS,CAGZC,EAAA,QAAiBD,GAgBxB,GAAC,SAAUE,EAAW,KAoBfC,EAAU,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,GAAG,EAQ7F,SAASC,EAASrH,EAAGqB,EAAG,CACpB,IAAI3G,EAAIsF,EAAE,CAAC,EACPb,EAAIa,EAAE,CAAC,EACP9K,EAAI8K,EAAE,CAAC,EACPrH,EAAIqH,EAAE,CAAC,EAEXtF,IAAMyE,EAAIjK,EAAI,CAACiK,EAAIxG,GAAK0I,EAAE,CAAC,EAAI,UAAY,EAC3C3G,GAAMA,GAAK,EAAIA,IAAM,IAAMyE,EAAI,EAC/BxG,IAAM+B,EAAIyE,EAAI,CAACzE,EAAIxF,GAAKmM,EAAE,CAAC,EAAI,UAAY,EAC3C1I,GAAMA,GAAK,GAAKA,IAAM,IAAM+B,EAAI,EAChCxF,IAAMyD,EAAI+B,EAAI,CAAC/B,EAAIwG,GAAKkC,EAAE,CAAC,EAAI,UAAY,EAC3CnM,GAAMA,GAAK,GAAKA,IAAM,IAAMyD,EAAI,EAChCwG,IAAMjK,EAAIyD,EAAI,CAACzD,EAAIwF,GAAK2G,EAAE,CAAC,EAAI,WAAa,EAC5ClC,GAAMA,GAAK,GAAKA,IAAM,IAAMjK,EAAI,EAChCwF,IAAMyE,EAAIjK,EAAI,CAACiK,EAAIxG,GAAK0I,EAAE,CAAC,EAAI,UAAY,EAC3C3G,GAAMA,GAAK,EAAIA,IAAM,IAAMyE,EAAI,EAC/BxG,IAAM+B,EAAIyE,EAAI,CAACzE,EAAIxF,GAAKmM,EAAE,CAAC,EAAI,WAAa,EAC5C1I,GAAMA,GAAK,GAAKA,IAAM,IAAM+B,EAAI,EAChCxF,IAAMyD,EAAI+B,EAAI,CAAC/B,EAAIwG,GAAKkC,EAAE,CAAC,EAAI,WAAa,EAC5CnM,GAAMA,GAAK,GAAKA,IAAM,IAAMyD,EAAI,EAChCwG,IAAMjK,EAAIyD,EAAI,CAACzD,EAAIwF,GAAK2G,EAAE,CAAC,EAAI,SAAW,EAC1ClC,GAAMA,GAAK,GAAKA,IAAM,IAAMjK,EAAI,EAChCwF,IAAMyE,EAAIjK,EAAI,CAACiK,EAAIxG,GAAK0I,EAAE,CAAC,EAAI,WAAa,EAC5C3G,GAAMA,GAAK,EAAIA,IAAM,IAAMyE,EAAI,EAC/BxG,IAAM+B,EAAIyE,EAAI,CAACzE,EAAIxF,GAAKmM,EAAE,CAAC,EAAI,WAAa,EAC5C1I,GAAMA,GAAK,GAAKA,IAAM,IAAM+B,EAAI,EAChCxF,IAAMyD,EAAI+B,EAAI,CAAC/B,EAAIwG,GAAKkC,EAAE,EAAE,EAAI,MAAQ,EACxCnM,GAAMA,GAAK,GAAKA,IAAM,IAAMyD,EAAI,EAChCwG,IAAMjK,EAAIyD,EAAI,CAACzD,EAAIwF,GAAK2G,EAAE,EAAE,EAAI,WAAa,EAC7ClC,GAAMA,GAAK,GAAKA,IAAM,IAAMjK,EAAI,EAChCwF,IAAMyE,EAAIjK,EAAI,CAACiK,EAAIxG,GAAK0I,EAAE,EAAE,EAAI,WAAa,EAC7C3G,GAAMA,GAAK,EAAIA,IAAM,IAAMyE,EAAI,EAC/BxG,IAAM+B,EAAIyE,EAAI,CAACzE,EAAIxF,GAAKmM,EAAE,EAAE,EAAI,SAAW,EAC3C1I,GAAMA,GAAK,GAAKA,IAAM,IAAM+B,EAAI,EAChCxF,IAAMyD,EAAI+B,EAAI,CAAC/B,EAAIwG,GAAKkC,EAAE,EAAE,EAAI,WAAa,EAC7CnM,GAAMA,GAAK,GAAKA,IAAM,IAAMyD,EAAI,EAChCwG,IAAMjK,EAAIyD,EAAI,CAACzD,EAAIwF,GAAK2G,EAAE,EAAE,EAAI,WAAa,EAC7ClC,GAAMA,GAAK,GAAKA,IAAM,IAAMjK,EAAI,EAEhCwF,IAAMyE,EAAIxG,EAAIzD,EAAI,CAACyD,GAAK0I,EAAE,CAAC,EAAI,UAAY,EAC3C3G,GAAMA,GAAK,EAAIA,IAAM,IAAMyE,EAAI,EAC/BxG,IAAM+B,EAAIxF,EAAIiK,EAAI,CAACjK,GAAKmM,EAAE,CAAC,EAAI,WAAa,EAC5C1I,GAAMA,GAAK,EAAIA,IAAM,IAAM+B,EAAI,EAC/BxF,IAAMyD,EAAIwG,EAAIzE,EAAI,CAACyE,GAAKkC,EAAE,EAAE,EAAI,UAAY,EAC5CnM,GAAMA,GAAK,GAAKA,IAAM,IAAMyD,EAAI,EAChCwG,IAAMjK,EAAIwF,EAAI/B,EAAI,CAAC+B,GAAK2G,EAAE,CAAC,EAAI,UAAY,EAC3ClC,GAAMA,GAAK,GAAKA,IAAM,IAAMjK,EAAI,EAChCwF,IAAMyE,EAAIxG,EAAIzD,EAAI,CAACyD,GAAK0I,EAAE,CAAC,EAAI,UAAY,EAC3C3G,GAAMA,GAAK,EAAIA,IAAM,IAAMyE,EAAI,EAC/BxG,IAAM+B,EAAIxF,EAAIiK,EAAI,CAACjK,GAAKmM,EAAE,EAAE,EAAI,SAAW,EAC3C1I,GAAMA,GAAK,EAAIA,IAAM,IAAM+B,EAAI,EAC/BxF,IAAMyD,EAAIwG,EAAIzE,EAAI,CAACyE,GAAKkC,EAAE,EAAE,EAAI,UAAY,EAC5CnM,GAAMA,GAAK,GAAKA,IAAM,IAAMyD,EAAI,EAChCwG,IAAMjK,EAAIwF,EAAI/B,EAAI,CAAC+B,GAAK2G,EAAE,CAAC,EAAI,UAAY,EAC3ClC,GAAMA,GAAK,GAAKA,IAAM,IAAMjK,EAAI,EAChCwF,IAAMyE,EAAIxG,EAAIzD,EAAI,CAACyD,GAAK0I,EAAE,CAAC,EAAI,UAAY,EAC3C3G,GAAMA,GAAK,EAAIA,IAAM,IAAMyE,EAAI,EAC/BxG,IAAM+B,EAAIxF,EAAIiK,EAAI,CAACjK,GAAKmM,EAAE,EAAE,EAAI,WAAa,EAC7C1I,GAAMA,GAAK,EAAIA,IAAM,IAAM+B,EAAI,EAC/BxF,IAAMyD,EAAIwG,EAAIzE,EAAI,CAACyE,GAAKkC,EAAE,CAAC,EAAI,UAAY,EAC3CnM,GAAMA,GAAK,GAAKA,IAAM,IAAMyD,EAAI,EAChCwG,IAAMjK,EAAIwF,EAAI/B,EAAI,CAAC+B,GAAK2G,EAAE,CAAC,EAAI,WAAa,EAC5ClC,GAAMA,GAAK,GAAKA,IAAM,IAAMjK,EAAI,EAChCwF,IAAMyE,EAAIxG,EAAIzD,EAAI,CAACyD,GAAK0I,EAAE,EAAE,EAAI,WAAa,EAC7C3G,GAAMA,GAAK,EAAIA,IAAM,IAAMyE,EAAI,EAC/BxG,IAAM+B,EAAIxF,EAAIiK,EAAI,CAACjK,GAAKmM,EAAE,CAAC,EAAI,SAAW,EAC1C1I,GAAMA,GAAK,EAAIA,IAAM,IAAM+B,EAAI,EAC/BxF,IAAMyD,EAAIwG,EAAIzE,EAAI,CAACyE,GAAKkC,EAAE,CAAC,EAAI,WAAa,EAC5CnM,GAAMA,GAAK,GAAKA,IAAM,IAAMyD,EAAI,EAChCwG,IAAMjK,EAAIwF,EAAI/B,EAAI,CAAC+B,GAAK2G,EAAE,EAAE,EAAI,WAAa,EAC7ClC,GAAMA,GAAK,GAAKA,IAAM,IAAMjK,EAAI,EAEhCwF,IAAMyE,EAAIjK,EAAIyD,GAAK0I,EAAE,CAAC,EAAI,OAAS,EACnC3G,GAAMA,GAAK,EAAIA,IAAM,IAAMyE,EAAI,EAC/BxG,IAAM+B,EAAIyE,EAAIjK,GAAKmM,EAAE,CAAC,EAAI,WAAa,EACvC1I,GAAMA,GAAK,GAAKA,IAAM,IAAM+B,EAAI,EAChCxF,IAAMyD,EAAI+B,EAAIyE,GAAKkC,EAAE,EAAE,EAAI,WAAa,EACxCnM,GAAMA,GAAK,GAAKA,IAAM,IAAMyD,EAAI,EAChCwG,IAAMjK,EAAIyD,EAAI+B,GAAK2G,EAAE,EAAE,EAAI,SAAW,EACtClC,GAAMA,GAAK,GAAKA,IAAM,GAAKjK,EAAI,EAC/BwF,IAAMyE,EAAIjK,EAAIyD,GAAK0I,EAAE,CAAC,EAAI,WAAa,EACvC3G,GAAMA,GAAK,EAAIA,IAAM,IAAMyE,EAAI,EAC/BxG,IAAM+B,EAAIyE,EAAIjK,GAAKmM,EAAE,CAAC,EAAI,WAAa,EACvC1I,GAAMA,GAAK,GAAKA,IAAM,IAAM+B,EAAI,EAChCxF,IAAMyD,EAAI+B,EAAIyE,GAAKkC,EAAE,CAAC,EAAI,UAAY,EACtCnM,GAAMA,GAAK,GAAKA,IAAM,IAAMyD,EAAI,EAChCwG,IAAMjK,EAAIyD,EAAI+B,GAAK2G,EAAE,EAAE,EAAI,WAAa,EACxClC,GAAMA,GAAK,GAAKA,IAAM,GAAKjK,EAAI,EAC/BwF,IAAMyE,EAAIjK,EAAIyD,GAAK0I,EAAE,EAAE,EAAI,UAAY,EACvC3G,GAAMA,GAAK,EAAIA,IAAM,IAAMyE,EAAI,EAC/BxG,IAAM+B,EAAIyE,EAAIjK,GAAKmM,EAAE,CAAC,EAAI,UAAY,EACtC1I,GAAMA,GAAK,GAAKA,IAAM,IAAM+B,EAAI,EAChCxF,IAAMyD,EAAI+B,EAAIyE,GAAKkC,EAAE,CAAC,EAAI,UAAY,EACtCnM,GAAMA,GAAK,GAAKA,IAAM,IAAMyD,EAAI,EAChCwG,IAAMjK,EAAIyD,EAAI+B,GAAK2G,EAAE,CAAC,EAAI,SAAW,EACrClC,GAAMA,GAAK,GAAKA,IAAM,GAAKjK,EAAI,EAC/BwF,IAAMyE,EAAIjK,EAAIyD,GAAK0I,EAAE,CAAC,EAAI,UAAY,EACtC3G,GAAMA,GAAK,EAAIA,IAAM,IAAMyE,EAAI,EAC/BxG,IAAM+B,EAAIyE,EAAIjK,GAAKmM,EAAE,EAAE,EAAI,UAAY,EACvC1I,GAAMA,GAAK,GAAKA,IAAM,IAAM+B,EAAI,EAChCxF,IAAMyD,EAAI+B,EAAIyE,GAAKkC,EAAE,EAAE,EAAI,UAAY,EACvCnM,GAAMA,GAAK,GAAKA,IAAM,IAAMyD,EAAI,EAChCwG,IAAMjK,EAAIyD,EAAI+B,GAAK2G,EAAE,CAAC,EAAI,UAAY,EACtClC,GAAMA,GAAK,GAAKA,IAAM,GAAKjK,EAAI,EAE/BwF,IAAMxF,GAAKiK,EAAI,CAACxG,IAAM0I,EAAE,CAAC,EAAI,UAAY,EACzC3G,GAAMA,GAAK,EAAIA,IAAM,IAAMyE,EAAI,EAC/BxG,IAAMwG,GAAKzE,EAAI,CAACxF,IAAMmM,EAAE,CAAC,EAAI,WAAa,EAC1C1I,GAAMA,GAAK,GAAKA,IAAM,IAAM+B,EAAI,EAChCxF,IAAMwF,GAAK/B,EAAI,CAACwG,IAAMkC,EAAE,EAAE,EAAI,WAAa,EAC3CnM,GAAMA,GAAK,GAAKA,IAAM,IAAMyD,EAAI,EAChCwG,IAAMxG,GAAKzD,EAAI,CAACwF,IAAM2G,EAAE,CAAC,EAAI,SAAW,EACxClC,GAAMA,GAAK,GAAIA,IAAM,IAAMjK,EAAI,EAC/BwF,IAAMxF,GAAKiK,EAAI,CAACxG,IAAM0I,EAAE,EAAE,EAAI,WAAa,EAC3C3G,GAAMA,GAAK,EAAIA,IAAM,IAAMyE,EAAI,EAC/BxG,IAAMwG,GAAKzE,EAAI,CAACxF,IAAMmM,EAAE,CAAC,EAAI,WAAa,EAC1C1I,GAAMA,GAAK,GAAKA,IAAM,IAAM+B,EAAI,EAChCxF,IAAMwF,GAAK/B,EAAI,CAACwG,IAAMkC,EAAE,EAAE,EAAI,QAAU,EACxCnM,GAAMA,GAAK,GAAKA,IAAM,IAAMyD,EAAI,EAChCwG,IAAMxG,GAAKzD,EAAI,CAACwF,IAAM2G,EAAE,CAAC,EAAI,WAAa,EAC1ClC,GAAMA,GAAK,GAAIA,IAAM,IAAMjK,EAAI,EAC/BwF,IAAMxF,GAAKiK,EAAI,CAACxG,IAAM0I,EAAE,CAAC,EAAI,WAAa,EAC1C3G,GAAMA,GAAK,EAAIA,IAAM,IAAMyE,EAAI,EAC/BxG,IAAMwG,GAAKzE,EAAI,CAACxF,IAAMmM,EAAE,EAAE,EAAI,SAAW,EACzC1I,GAAMA,GAAK,GAAKA,IAAM,IAAM+B,EAAI,EAChCxF,IAAMwF,GAAK/B,EAAI,CAACwG,IAAMkC,EAAE,CAAC,EAAI,WAAa,EAC1CnM,GAAMA,GAAK,GAAKA,IAAM,IAAMyD,EAAI,EAChCwG,IAAMxG,GAAKzD,EAAI,CAACwF,IAAM2G,EAAE,EAAE,EAAI,WAAa,EAC3ClC,GAAMA,GAAK,GAAIA,IAAM,IAAMjK,EAAI,EAC/BwF,IAAMxF,GAAKiK,EAAI,CAACxG,IAAM0I,EAAE,CAAC,EAAI,UAAY,EACzC3G,GAAMA,GAAK,EAAIA,IAAM,IAAMyE,EAAI,EAC/BxG,IAAMwG,GAAKzE,EAAI,CAACxF,IAAMmM,EAAE,EAAE,EAAI,WAAa,EAC3C1I,GAAMA,GAAK,GAAKA,IAAM,IAAM+B,EAAI,EAChCxF,IAAMwF,GAAK/B,EAAI,CAACwG,IAAMkC,EAAE,CAAC,EAAI,UAAY,EACzCnM,GAAMA,GAAK,GAAKA,IAAM,IAAMyD,EAAI,EAChCwG,IAAMxG,GAAKzD,EAAI,CAACwF,IAAM2G,EAAE,CAAC,EAAI,UAAY,EACzClC,GAAMA,GAAK,GAAKA,IAAM,IAAMjK,EAAI,EAEhC8K,EAAE,CAAC,EAAItF,EAAIsF,EAAE,CAAC,EAAI,EAClBA,EAAE,CAAC,EAAIb,EAAIa,EAAE,CAAC,EAAI,EAClBA,EAAE,CAAC,EAAI9K,EAAI8K,EAAE,CAAC,EAAI,EAClBA,EAAE,CAAC,EAAIrH,EAAIqH,EAAE,CAAC,EAAI,CACrB,CAED,SAASsH,EAAO3V,EAAG,CACf,IAAI4V,EAAU,CAAE,EACZxV,EAEJ,IAAKA,EAAI,EAAGA,EAAI,GAAIA,GAAK,EACrBwV,EAAQxV,GAAK,CAAC,EAAIJ,EAAE,WAAWI,CAAC,GAAKJ,EAAE,WAAWI,EAAI,CAAC,GAAK,IAAMJ,EAAE,WAAWI,EAAI,CAAC,GAAK,KAAOJ,EAAE,WAAWI,EAAI,CAAC,GAAK,IAE3H,OAAOwV,CACV,CAED,SAASC,EAAa9M,EAAG,CACrB,IAAI6M,EAAU,CAAE,EACZxV,EAEJ,IAAKA,EAAI,EAAGA,EAAI,GAAIA,GAAK,EACrBwV,EAAQxV,GAAK,CAAC,EAAI2I,EAAE3I,CAAC,GAAK2I,EAAE3I,EAAI,CAAC,GAAK,IAAM2I,EAAE3I,EAAI,CAAC,GAAK,KAAO2I,EAAE3I,EAAI,CAAC,GAAK,IAE/E,OAAOwV,CACV,CAED,SAASE,EAAK9V,EAAG,CACb,IAAIxB,EAAIwB,EAAE,OACN+V,EAAQ,CAAC,WAAY,WAAY,YAAa,SAAS,EACvD3V,EACA4V,EACAC,EACAC,EACAC,EACAC,EAEJ,IAAKhW,EAAI,GAAIA,GAAK5B,EAAG4B,GAAK,GACtBsV,EAASK,EAAOJ,EAAO3V,EAAE,UAAUI,EAAI,GAAIA,CAAC,CAAC,CAAC,EAKlD,IAHAJ,EAAIA,EAAE,UAAUI,EAAI,EAAE,EACtB4V,EAAShW,EAAE,OACXiW,EAAO,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,EACjD7V,EAAI,EAAGA,EAAI4V,EAAQ5V,GAAK,EACzB6V,EAAK7V,GAAK,CAAC,GAAKJ,EAAE,WAAWI,CAAC,IAAOA,EAAI,GAAM,GAGnD,GADA6V,EAAK7V,GAAK,CAAC,GAAK,MAAUA,EAAI,GAAM,GAChCA,EAAI,GAEJ,IADAsV,EAASK,EAAOE,CAAI,EACf7V,EAAI,EAAGA,EAAI,GAAIA,GAAK,EACrB6V,EAAK7V,CAAC,EAAI,EAKlB,OAAA8V,EAAM1X,EAAI,EACV0X,EAAMA,EAAI,SAAS,EAAE,EAAE,MAAM,gBAAgB,EAC7CC,EAAK,SAASD,EAAI,CAAC,EAAG,EAAE,EACxBE,EAAK,SAASF,EAAI,CAAC,EAAG,EAAE,GAAK,EAE7BD,EAAK,EAAE,EAAIE,EACXF,EAAK,EAAE,EAAIG,EAEXV,EAASK,EAAOE,CAAI,EACbF,CACV,CAED,SAASM,EAAWtN,EAAG,CACnB,IAAIvK,EAAIuK,EAAE,OACNgN,EAAQ,CAAC,WAAY,WAAY,YAAa,SAAS,EACvD3V,EACA4V,EACAC,EACAC,EACAC,EACAC,EAEJ,IAAKhW,EAAI,GAAIA,GAAK5B,EAAG4B,GAAK,GACtBsV,EAASK,EAAOF,EAAa9M,EAAE,SAAS3I,EAAI,GAAIA,CAAC,CAAC,CAAC,EAWvD,IAJA2I,EAAK3I,EAAI,GAAM5B,EAAIuK,EAAE,SAAS3I,EAAI,EAAE,EAAI,IAAI,WAAW,CAAC,EAExD4V,EAASjN,EAAE,OACXkN,EAAO,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,EACjD7V,EAAI,EAAGA,EAAI4V,EAAQ5V,GAAK,EACzB6V,EAAK7V,GAAK,CAAC,GAAK2I,EAAE3I,CAAC,IAAOA,EAAI,GAAM,GAIxC,GADA6V,EAAK7V,GAAK,CAAC,GAAK,MAAUA,EAAI,GAAM,GAChCA,EAAI,GAEJ,IADAsV,EAASK,EAAOE,CAAI,EACf7V,EAAI,EAAGA,EAAI,GAAIA,GAAK,EACrB6V,EAAK7V,CAAC,EAAI,EAKlB,OAAA8V,EAAM1X,EAAI,EACV0X,EAAMA,EAAI,SAAS,EAAE,EAAE,MAAM,gBAAgB,EAC7CC,EAAK,SAASD,EAAI,CAAC,EAAG,EAAE,EACxBE,EAAK,SAASF,EAAI,CAAC,EAAG,EAAE,GAAK,EAE7BD,EAAK,EAAE,EAAIE,EACXF,EAAK,EAAE,EAAIG,EAEXV,EAASK,EAAOE,CAAI,EAEbF,CACV,CAED,SAASO,EAAK9X,EAAG,CACb,IAAIwB,EAAI,GACJgF,EACJ,IAAKA,EAAI,EAAGA,EAAI,EAAGA,GAAK,EACpBhF,GAAKyV,EAASjX,GAAMwG,EAAI,EAAI,EAAM,EAAI,EAAIyQ,EAASjX,GAAMwG,EAAI,EAAM,EAAI,EAE3E,OAAOhF,CACV,CAED,SAASuW,EAAIlI,EAAG,CACZ,IAAIjO,EACJ,IAAKA,EAAI,EAAGA,EAAIiO,EAAE,OAAQjO,GAAK,EAC3BiO,EAAEjO,CAAC,EAAIkW,EAAKjI,EAAEjO,CAAC,CAAC,EAEpB,OAAOiO,EAAE,KAAK,EAAE,CACnB,CAGGkI,EAAIT,EAAK,OAAO,CAAC,EAgBjB,OAAO,YAAgB,KAAe,CAAC,YAAY,UAAU,OAC5D,UAAY,CACT,SAASU,EAAMC,EAAKT,EAAQ,CAGxB,OAFAS,EAAOA,EAAM,GAAM,EAEfA,EAAM,EACC,KAAK,IAAIA,EAAMT,EAAQ,CAAC,EAG5B,KAAK,IAAIS,EAAKT,CAAM,CAC9B,CAED,YAAY,UAAU,MAAQ,SAAUU,EAAMC,EAAI,CAC9C,IAAIX,EAAS,KAAK,WACdY,EAAQJ,EAAME,EAAMV,CAAM,EAC1Ba,EAAMb,EACNc,EACAC,EACAC,EACAC,EAMJ,OAJIN,IAAOnB,IACPqB,EAAML,EAAMG,EAAIX,CAAM,GAGtBY,EAAQC,EACD,IAAI,YAAY,CAAC,GAG5BC,EAAMD,EAAMD,EACZG,EAAS,IAAI,YAAYD,CAAG,EAC5BE,EAAc,IAAI,WAAWD,CAAM,EAEnCE,EAAc,IAAI,WAAW,KAAML,EAAOE,CAAG,EAC7CE,EAAY,IAAIC,CAAW,EAEpBF,EACvB,CACA,IASI,SAASG,EAAOC,EAAK,CACjB,MAAI,kBAAkB,KAAKA,CAAG,IAC1BA,EAAM,SAAS,mBAAmBA,CAAG,CAAC,GAGnCA,CACV,CAED,SAASC,EAAoBD,EAAKE,EAAkB,CAChD,IAAIrB,EAASmB,EAAI,OACdG,EAAO,IAAI,YAAYtB,CAAM,EAC7BuB,EAAM,IAAI,WAAWD,CAAI,EACzBlX,EAEH,IAAKA,EAAI,EAAGA,EAAI4V,EAAQ5V,GAAK,EACzBmX,EAAInX,CAAC,EAAI+W,EAAI,WAAW/W,CAAC,EAG7B,OAAOiX,EAAmBE,EAAMD,CACnC,CAED,SAASE,EAAoBF,EAAM,CAC/B,OAAO,OAAO,aAAa,MAAM,KAAM,IAAI,WAAWA,CAAI,CAAC,CAC9D,CAED,SAASG,EAAwBC,EAAOC,EAAQN,EAAkB,CAC9D,IAAIO,EAAS,IAAI,WAAWF,EAAM,WAAaC,EAAO,UAAU,EAEhE,OAAAC,EAAO,IAAI,IAAI,WAAWF,CAAK,CAAC,EAChCE,EAAO,IAAI,IAAI,WAAWD,CAAM,EAAGD,EAAM,UAAU,EAE5CL,EAAmBO,EAASA,EAAO,MAC7C,CAED,SAASC,EAAkBtB,EAAK,CAC5B,IAAIuB,EAAQ,CAAE,EACV9B,EAASO,EAAI,OACb,EAEJ,IAAK,EAAI,EAAG,EAAIP,EAAS,EAAG,GAAK,EAC7B8B,EAAM,KAAK,SAASvB,EAAI,OAAO,EAAG,CAAC,EAAG,EAAE,CAAC,EAG7C,OAAO,OAAO,aAAa,MAAM,OAAQuB,CAAK,CACjD,CAWD,SAASC,GAAW,CAEhB,KAAK,MAAK,CACb,CAUD,OAAAA,EAAS,UAAU,OAAS,SAAUZ,EAAK,CAGvC,YAAK,aAAaD,EAAOC,CAAG,CAAC,EAEtB,IACf,EASIY,EAAS,UAAU,aAAe,SAAUC,EAAU,CAClD,KAAK,OAASA,EACd,KAAK,SAAWA,EAAS,OAEzB,IAAIhC,EAAS,KAAK,MAAM,OACpB5V,EAEJ,IAAKA,EAAI,GAAIA,GAAK4V,EAAQ5V,GAAK,GAC3BsV,EAAS,KAAK,MAAOC,EAAO,KAAK,MAAM,UAAUvV,EAAI,GAAIA,CAAC,CAAC,CAAC,EAGhE,YAAK,MAAQ,KAAK,MAAM,UAAUA,EAAI,EAAE,EAEjC,IACf,EAUI2X,EAAS,UAAU,IAAM,SAAUE,EAAK,CACpC,IAAIX,EAAO,KAAK,MACZtB,EAASsB,EAAK,OACdlX,EACA6V,EAAO,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,EACtDiC,EAEJ,IAAK9X,EAAI,EAAGA,EAAI4V,EAAQ5V,GAAK,EACzB6V,EAAK7V,GAAK,CAAC,GAAKkX,EAAK,WAAWlX,CAAC,IAAOA,EAAI,GAAM,GAGtD,YAAK,QAAQ6V,EAAMD,CAAM,EACzBkC,EAAM3B,EAAI,KAAK,KAAK,EAEhB0B,IACAC,EAAML,EAAkBK,CAAG,GAG/B,KAAK,MAAK,EAEHA,CACf,EAOIH,EAAS,UAAU,MAAQ,UAAY,CACnC,YAAK,MAAQ,GACb,KAAK,QAAU,EACf,KAAK,MAAQ,CAAC,WAAY,WAAY,YAAa,SAAS,EAErD,IACf,EAOIA,EAAS,UAAU,SAAW,UAAY,CACtC,MAAO,CACH,KAAM,KAAK,MACX,OAAQ,KAAK,QACb,KAAM,KAAK,MAAM,MAAO,CACpC,CACA,EASIA,EAAS,UAAU,SAAW,SAAUhC,EAAO,CAC3C,YAAK,MAAQA,EAAM,KACnB,KAAK,QAAUA,EAAM,OACrB,KAAK,MAAQA,EAAM,KAEZ,IACf,EAMIgC,EAAS,UAAU,QAAU,UAAY,CACrC,OAAO,KAAK,MACZ,OAAO,KAAK,MACZ,OAAO,KAAK,OACpB,EAQIA,EAAS,UAAU,QAAU,SAAU9B,EAAMD,EAAQ,CACjD,IAAI5V,EAAI4V,EACJE,EACAC,EACAC,EAGJ,GADAH,EAAK7V,GAAK,CAAC,GAAK,MAAUA,EAAI,GAAM,GAChCA,EAAI,GAEJ,IADAsV,EAAS,KAAK,MAAOO,CAAI,EACpB7V,EAAI,EAAGA,EAAI,GAAIA,GAAK,EACrB6V,EAAK7V,CAAC,EAAI,EAMlB8V,EAAM,KAAK,QAAU,EACrBA,EAAMA,EAAI,SAAS,EAAE,EAAE,MAAM,gBAAgB,EAC7CC,EAAK,SAASD,EAAI,CAAC,EAAG,EAAE,EACxBE,EAAK,SAASF,EAAI,CAAC,EAAG,EAAE,GAAK,EAE7BD,EAAK,EAAE,EAAIE,EACXF,EAAK,EAAE,EAAIG,EACXV,EAAS,KAAK,MAAOO,CAAI,CACjC,EAWI8B,EAAS,KAAO,SAAUZ,EAAKc,EAAK,CAGhC,OAAOF,EAAS,WAAWb,EAAOC,CAAG,EAAGc,CAAG,CACnD,EAUIF,EAAS,WAAa,SAAUI,EAASF,EAAK,CAC1C,IAAIG,EAAOtC,EAAKqC,CAAO,EACnBD,EAAM3B,EAAI6B,CAAI,EAElB,OAAOH,EAAMJ,EAAkBK,CAAG,EAAIA,CAC9C,EASIH,EAAS,YAAc,UAAY,CAE/B,KAAK,MAAK,CAClB,EASIA,EAAS,YAAY,UAAU,OAAS,SAAUR,EAAK,CACnD,IAAID,EAAOG,EAAwB,KAAK,MAAM,OAAQF,EAAK,EAAI,EAC3DvB,EAASsB,EAAK,OACdlX,EAIJ,IAFA,KAAK,SAAWmX,EAAI,WAEfnX,EAAI,GAAIA,GAAK4V,EAAQ5V,GAAK,GAC3BsV,EAAS,KAAK,MAAOG,EAAayB,EAAK,SAASlX,EAAI,GAAIA,CAAC,CAAC,CAAC,EAG/D,YAAK,MAASA,EAAI,GAAM4V,EAAS,IAAI,WAAWsB,EAAK,OAAO,MAAMlX,EAAI,EAAE,CAAC,EAAI,IAAI,WAAW,CAAC,EAEtF,IACf,EAUI2X,EAAS,YAAY,UAAU,IAAM,SAAUE,EAAK,CAChD,IAAIX,EAAO,KAAK,MACZtB,EAASsB,EAAK,OACdrB,EAAO,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,EACtD7V,EACA8X,EAEJ,IAAK9X,EAAI,EAAGA,EAAI4V,EAAQ5V,GAAK,EACzB6V,EAAK7V,GAAK,CAAC,GAAKkX,EAAKlX,CAAC,IAAOA,EAAI,GAAM,GAG3C,YAAK,QAAQ6V,EAAMD,CAAM,EACzBkC,EAAM3B,EAAI,KAAK,KAAK,EAEhB0B,IACAC,EAAML,EAAkBK,CAAG,GAG/B,KAAK,MAAK,EAEHA,CACf,EAOIH,EAAS,YAAY,UAAU,MAAQ,UAAY,CAC/C,YAAK,MAAQ,IAAI,WAAW,CAAC,EAC7B,KAAK,QAAU,EACf,KAAK,MAAQ,CAAC,WAAY,WAAY,YAAa,SAAS,EAErD,IACf,EAOIA,EAAS,YAAY,UAAU,SAAW,UAAY,CAClD,IAAIhC,EAAQgC,EAAS,UAAU,SAAS,KAAK,IAAI,EAGjD,OAAAhC,EAAM,KAAOyB,EAAoBzB,EAAM,IAAI,EAEpCA,CACf,EASIgC,EAAS,YAAY,UAAU,SAAW,SAAUhC,EAAO,CAEvD,OAAAA,EAAM,KAAOqB,EAAoBrB,EAAM,KAAM,EAAI,EAE1CgC,EAAS,UAAU,SAAS,KAAK,KAAMhC,CAAK,CAC3D,EAEIgC,EAAS,YAAY,UAAU,QAAUA,EAAS,UAAU,QAE5DA,EAAS,YAAY,UAAU,QAAUA,EAAS,UAAU,QAU5DA,EAAS,YAAY,KAAO,SAAUR,EAAKU,EAAK,CAC5C,IAAIG,EAAO/B,EAAW,IAAI,WAAWkB,CAAG,CAAC,EACrCW,EAAM3B,EAAI6B,CAAI,EAElB,OAAOH,EAAMJ,EAAkBK,CAAG,EAAIA,CAC9C,EAEWH,CACX,CAAC,0CChuBYM,GACXC,IACA,OAAO,MACP,OAAO,YACP,OAAO,UACP,OAAO,KAEO,SAAAC,GACdC,EAAQ,gCACE,CACH,OAAA,MAAM,UAAU,IAAI,KACzB,SAAS,iBAAiBA,CAAK,EAC9BC,GAAYA,EAAQ,WAAA,CAEzB,CAEa,MAAAC,GAAeC,GACnB,IAAI,cAAA,EAAgB,kBAAkBA,CAAE,EAGpCC,GAAc,CACzBzB,EACA0B,EAA+B,cAExB,IAAI,UAAY,EAAA,gBAAgB1B,EAAK0B,CAAI,EAGrCC,GAAY,CACvBH,EACAI,EAII,CACF,KAAMC,GAAS,IACf,OAAQC,GAAW,IACrB,IAEOC,GAAOR,GAAYC,CAAE,EAAGI,CAAO,EAGxC,eAAsBI,GACpBC,EAAoB,CAAC,GAAG,EACxBC,EACiB,CAOjB,IAAIC,EAAgB,CAAA,EACd,MAAAC,EAAQ,SAAS,cAAc,OAAO,EACtC,OAAAA,EAAA,aAAa,OAAQ,MAAM,EAC3BA,EAAA,aAAa,aAAc,QAAQ,EACzCA,EAAM,aAAa,SAAUH,EAAQ,KAAK,GAAG,CAAC,EAC1CC,GACIE,EAAA,aAAa,WAAY,MAAM,EAEjCA,EAAA,iBACJ,QACChb,GAAM,CAILgb,EAAM,MAAQ,EAChB,EACA,EAAA,EAEK,IAAI,QAAgB,CAACC,EAASC,IAAW,CACxCF,EAAA,iBACJ,SACChb,GAAa,CACZ+a,EAAQ,MAAM,KAAM/a,EAAE,OAA4B,OAAS,CAAA,CAAE,EACzD+a,EAAM,SAAW,EACZG,EAAA,IAAI,MAAM,QAAQ,CAAC,EAS1BD,EAAQF,CAAK,CAEjB,EACA,EAAA,EAEK,OAAA,iBACL,QACA,IAAM,CACJ,WAAW,IAAM,CACXA,EAAM,SAAW,GACZG,EAAA,IAAI,MAAM,QAAQ,CAAC,GAE3B,GAAI,CACT,EACA,CAAE,KAAM,EAAK,CAAA,EAGfF,EAAM,MAAM,CAAA,CACb,EACE,KAAMD,IACLC,EAAM,OAAO,EACND,EACR,EACA,MAAO/a,GAAM,CACZ,MAAAgb,EAAM,OAAO,EACPhb,CAAA,CACP,CACL,CAEO,SAASmb,GAEdC,EACAd,EAA0Be,GAAkB,KAC5CC,EACY,CACZ,OAAO,IAAI,QAAW,CAACL,EAASC,IAAW,CACnC,MAAAK,EAAS,IAAI,WAYnB,OAXOA,EAAA,iBAAiB,WAAavb,GAAiC,CAEvDsb,IAAAtb,EAAE,OAAQA,EAAE,KAAK,CAAA,CAC/B,EACMub,EAAA,iBAAiB,OAASvb,GAAkC,CACzDib,EAAAjb,EAAE,QAAQ,MAAW,CAAA,CAE9B,EACMub,EAAA,iBAAiB,QAAUvb,GAAmC,CACnEkb,EAAOlb,CAAC,CAAA,CACT,EACOsa,EAAM,CACZ,KAAKe,GAAkB,QACrBE,EAAO,cAAcH,CAAI,EACzB,MACF,KAAKC,GAAkB,aACrBE,EAAO,mBAAmBH,CAAI,EAC9B,MACF,KAAKC,GAAkB,YACrBE,EAAO,kBAAkBH,CAAI,EAC7B,MACF,KAAKC,GAAkB,KACvB,QACEE,EAAO,WAAWH,CAAI,CAC1B,CAAA,CACD,CACH,CAEA,eAAsBI,GAAoBJ,EAAY,CACpD,MAAMK,EAAc,MAAMN,GACxBC,EACAC,GAAkB,WAAA,EAEpB,OAAOK,GAA2BD,CAAW,CAC/C,CAGa,MAAAE,GAAoBP,GAAgC,CAC3D,IAAAQ,EACJ,OAAIR,aAAgB,KAClBQ,EAAWR,EAAK,KAELQ,EAAAR,EAENQ,EAAS,MAAM,4BAA4B,IAAI,CAAC,GAAK,EAC9D,EAEO,SAASC,GAAQC,EAAc,CAC5B,OAAAA,EAAK,YAAe,EAAA,CAC1B,IAAK,MACL,IAAK,OACH,OAAOrB,GAAS,KAClB,IAAK,MACH,OAAOA,GAAS,IAClB,IAAK,MACH,OAAOA,GAAS,IAClB,IAAK,MACH,OAAOA,GAAS,IAClB,IAAK,MACL,QACE,OAAOA,GAAS,GACpB,CACF,CAEA,SAASsB,GACPd,EACAC,EACAc,EACAZ,EACAa,EACAC,EACA5D,EACA,CACM,MAAA6D,EAAa,IAAI,WACZA,EAAA,iBAAiB,OAASnc,GAAM,CACzC,GAAI,CAACA,EAAE,QAAU,CAACA,EAAE,OAAO,OACzB,OAAOkb,EAAOlb,CAAC,EAGb,GADEgc,EAAA,OAAOhc,EAAE,OAAO,MAAqB,EACvCsY,EAAM8C,EAAK,KACbW,GACEd,EACAC,EACAc,EACAZ,EACAa,EACA3D,EACA,KAAK,IAAIA,EAAM2D,EAAWb,EAAK,IAAI,CAAA,MAG9B,QAAAH,EAAQe,EAAM,IAAA,CAAK,CAC5B,CACD,EACUG,EAAA,iBAAiB,QAAUnc,GAC7Bkb,EAAOlb,CAAC,CAChB,EACDmc,EAAW,kBAAkBf,EAAK,MAAMc,EAAO5D,CAAG,CAAC,CACrD,CAGA,eAAsB8D,GAAehB,EAAYa,EAAY,EAAI,KAAO,KAAM,CAC5E,OAAO,MAAM,IAAI,QAAgB,CAAChB,EAASC,IACzCa,GACEd,EACAC,EACA,IAAI1B,GAAS,YACb4B,EACAa,EACA,EACA,KAAK,IAAIA,EAAWb,EAAK,IAAI,CAC/B,CAAA,CAEJ,CAEO,MAAMiB,EAAW,CACtB,MAEA,SAEA,UAEA,KAEA,SAEA,UAEA,OAEA,aAAe,EAEf,YAAc,GACd,MAAQ,EACR,IAAM,EACN,MACA,KAAa,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,EAC9B,QACA,QACA,WACA,WACA,OAEA,YAAY7B,EAWT,CACI,KAAA,MAAQ,IAAI8B,GAAe,CAC9B,QAAS9B,EAAQ,QACjB,YAAa,CACX,SAAW+B,GAAa,CAClBA,EAAS,OAAO,KAAO,KAAK,WAC1BA,EAAS,QAAU,MACrB,KAAK,aAAa,KAAK,eAAgB,KAAK,MAAM,EAC9C,KAAK,KAAO,KAAK,KAAK,MACxB,KAAK,YAAc,GACnB,KAAK,cAAc,EACnB,KAAK,aAAa,GAEd,KAAK,aACP,KAAK,YAAY,EAO3B,CACF,CAAA,CACD,EACD,KAAK,SAAW/B,EAAQ,SACxB,KAAK,UAAYA,EAAQ,UACzB,KAAK,KAAOA,EAAQ,KACpB,KAAK,UAAYA,EAAQ,WAAa,EAAI,KAAO,KACjD,KAAK,OAAS,KAAK,KAAK,KAAK,KAAK,KAAO,KAAK,SAAS,EACvD,KAAK,QAAUA,EAAQ,QACvB,KAAK,QAAUA,EAAQ,QACvB,KAAK,WAAaA,EAAQ,WAC1B,KAAK,WAAaA,EAAQ,WAC1B,KAAK,OAASA,EAAQ,MACxB,CAEA,MAAa,OAAQ,CACd,KAAK,WACR,KAAK,SAAW,MAAM4B,GAAe,KAAK,KAAM,KAAK,SAAS,IAGjD,MAAM,KAAK,MAAM,KAAK,KAAK,SAAU,CAClD,SAAU,KAAK,KAAK,KACpB,SAAU,KAAK,QAAA,CAChB,GACU,KAAK,SACd,KAAK,YAAc,GACnB,KAAK,UAAU,GAEV,KAAK,cACR,KAAK,UAAU,EACf,KAAK,eAAe,EACpB,MAAM,KAAK,cAGjB,CAEO,OAAQ,CACT,KAAK,cACP,KAAK,YAAc,GACnB,KAAK,cAAc,EAEvB,CAEA,MAAc,aAAc,CAC1B,KAAK,YAAc,GACd,KAAA,MAAQ,KAAK,aAAe,KAAK,UACjC,KAAA,IAAM,KAAK,IAAI,KAAK,MAAQ,KAAK,UAAW,KAAK,KAAK,IAAI,EAC/D,MAAMI,EAAO,KAAK,KAAK,MAAM,KAAK,MAAO,KAAK,GAAG,EAC3CC,EAAK,IAAI,SACZA,EAAA,OAAO,WAAYD,CAAI,EAC1BC,EAAG,OAAO,WAAY,KAAK,KAAK,IAAI,EACjCA,EAAA,OAAO,WAAY,KAAK,QAAS,EACpCA,EAAG,OAAO,aAAc,OAAO,KAAK,YAAY,CAAC,EACjDA,EAAG,OAAO,SAAU,OAAO,KAAK,MAAM,CAAC,EACvC,MAAM,KAAK,MAAM,SAAS,KAAK,UAAWA,CAAE,CAC9C,CAEQ,gBAAiB,CACvB,KAAK,cAAc,EACd,KAAA,MAAQ,YAAY,IAAM,CAChBC,GAAA,KAAK,KAAM,CAAC,EACzB,KAAK,SAASC,GAAmB,KAAK,IAAI,CAAC,GAC1C,GAAI,CACT,CAEQ,eAAgB,CAClB,KAAK,QACP,cAAc,KAAK,KAAK,EACxB,KAAK,MAAQ,OAEjB,CACF;;;;kDCvXC,SAASC,EAAQC,EAAUC,EAAY7F,EAAW,CAGnD,IAAI8F,EAAkB,CAAC,GAAI,SAAU,MAAO,KAAM,KAAM,GAAG,EACvDC,EAAeH,EAAS,cAAc,KAAK,EAE3CI,EAAgB,WAEhBC,EAAQ,KAAK,MACbC,EAAM,KAAK,IACXC,EAAM,KAAK,IASf,SAASC,EAAkB9Z,EAAI+Z,EAASC,EAAS,CAC7C,OAAO,WAAWC,EAAOja,EAAIga,CAAO,EAAGD,CAAO,CACjD,CAWD,SAASG,EAAeC,EAAKna,EAAIga,EAAS,CACtC,OAAI,MAAM,QAAQG,CAAG,GACjBC,EAAKD,EAAKH,EAAQha,CAAE,EAAGga,CAAO,EACvB,IAEJ,EACV,CAQD,SAASI,EAAKC,EAAKC,EAAUN,EAAS,CAClC,IAAI1b,EAEJ,GAAK+b,EAIL,GAAIA,EAAI,QACJA,EAAI,QAAQC,EAAUN,CAAO,UACtBK,EAAI,SAAW3G,EAEtB,IADApV,EAAI,EACGA,EAAI+b,EAAI,QACXC,EAAS,KAAKN,EAASK,EAAI/b,CAAC,EAAGA,EAAG+b,CAAG,EACrC/b,QAGJ,KAAKA,KAAK+b,EACNA,EAAI,eAAe/b,CAAC,GAAKgc,EAAS,KAAKN,EAASK,EAAI/b,CAAC,EAAGA,EAAG+b,CAAG,CAGzE,CASD,SAASE,EAAUC,EAAQjC,EAAMkC,EAAS,CACtC,IAAIC,EAAqB,sBAAwBnC,EAAO;AAAA,EAAOkC,EAAU;AAAA,EACzE,OAAO,UAAW,CACd,IAAIhe,EAAI,IAAI,MAAM,iBAAiB,EAC/Bke,EAAQle,GAAKA,EAAE,MAAQA,EAAE,MAAM,QAAQ,kBAAmB,EAAE,EAC3D,QAAQ,cAAe,EAAE,EACzB,QAAQ,6BAA8B,gBAAgB,EAAI,sBAE3Dme,EAAMvB,EAAO,UAAYA,EAAO,QAAQ,MAAQA,EAAO,QAAQ,KACnE,OAAIuB,GACAA,EAAI,KAAKvB,EAAO,QAASqB,EAAoBC,CAAK,EAE/CH,EAAO,MAAM,KAAM,SAAS,CAC3C,CACC,CASD,IAAIK,EACA,OAAO,OAAO,QAAW,WACzBA,EAAS,SAAgB5F,EAAQ,CAC7B,GAAIA,IAAWvB,GAAauB,IAAW,KACnC,MAAM,IAAI,UAAU,4CAA4C,EAIpE,QADI6F,EAAS,OAAO7F,CAAM,EACjB8F,EAAQ,EAAGA,EAAQ,UAAU,OAAQA,IAAS,CACnD,IAAIC,EAAS,UAAUD,CAAK,EAC5B,GAAIC,IAAWtH,GAAasH,IAAW,KACnC,QAASC,KAAWD,EACZA,EAAO,eAAeC,CAAO,IAC7BH,EAAOG,CAAO,EAAID,EAAOC,CAAO,EAI/C,CACD,OAAOH,CACf,EAEID,EAAS,OAAO,OAWpB,IAAIK,EAASX,EAAU,SAAgBY,EAAMC,EAAKC,EAAO,CAGrD,QAFIC,EAAO,OAAO,KAAKF,CAAG,EACtB9c,EAAI,EACDA,EAAIgd,EAAK,SACR,CAACD,GAAUA,GAASF,EAAKG,EAAKhd,CAAC,CAAC,IAAMoV,KACtCyH,EAAKG,EAAKhd,CAAC,CAAC,EAAI8c,EAAIE,EAAKhd,CAAC,CAAC,GAE/BA,IAEJ,OAAO6c,CACX,EAAG,SAAU,eAAe,EASxBE,EAAQd,EAAU,SAAeY,EAAMC,EAAK,CAC5C,OAAOF,EAAOC,EAAMC,EAAK,EAAI,CACjC,EAAG,QAAS,eAAe,EAQ3B,SAASG,EAAQC,EAAOC,EAAMC,EAAY,CACtC,IAAIC,EAAQF,EAAK,UACbG,EAEJA,EAASJ,EAAM,UAAY,OAAO,OAAOG,CAAK,EAC9CC,EAAO,YAAcJ,EACrBI,EAAO,OAASD,EAEZD,GACAb,EAAOe,EAAQF,CAAU,CAEhC,CAQD,SAASzB,EAAOja,EAAIga,EAAS,CACzB,OAAO,UAAmB,CACtB,OAAOha,EAAG,MAAMga,EAAS,SAAS,CAC1C,CACC,CASD,SAAS6B,EAASlH,EAAKmH,EAAM,CACzB,OAAI,OAAOnH,GAAO+E,EACP/E,EAAI,MAAMmH,GAAOA,EAAK,CAAC,GAAKpI,EAAuBoI,CAAI,EAE3DnH,CACV,CAQD,SAASoH,EAAYC,EAAMC,EAAM,CAC7B,OAAQD,IAAStI,EAAauI,EAAOD,CACxC,CAQD,SAASE,EAAkBjH,EAAQkH,EAAOC,EAAS,CAC/ChC,EAAKiC,EAASF,CAAK,EAAG,SAASpF,EAAM,CACjC9B,EAAO,iBAAiB8B,EAAMqF,EAAS,EAAK,CACpD,CAAK,CACJ,CAQD,SAASE,EAAqBrH,EAAQkH,EAAOC,EAAS,CAClDhC,EAAKiC,EAASF,CAAK,EAAG,SAASpF,EAAM,CACjC9B,EAAO,oBAAoB8B,EAAMqF,EAAS,EAAK,CACvD,CAAK,CACJ,CASD,SAASG,EAAUC,EAAMC,EAAQ,CAC7B,KAAOD,GAAM,CACT,GAAIA,GAAQC,EACR,MAAO,GAEXD,EAAOA,EAAK,UACf,CACD,MAAO,EACV,CAQD,SAASE,EAAMrH,EAAKsH,EAAM,CACtB,OAAOtH,EAAI,QAAQsH,CAAI,EAAI,EAC9B,CAOD,SAASN,EAAShH,EAAK,CACnB,OAAOA,EAAI,KAAI,EAAG,MAAM,MAAM,CACjC,CASD,SAASuH,EAAQxB,EAAKuB,EAAME,EAAW,CACnC,GAAIzB,EAAI,SAAW,CAACyB,EAChB,OAAOzB,EAAI,QAAQuB,CAAI,EAGvB,QADIre,EAAI,EACDA,EAAI8c,EAAI,QAAQ,CACnB,GAAKyB,GAAazB,EAAI9c,CAAC,EAAEue,CAAS,GAAKF,GAAU,CAACE,GAAazB,EAAI9c,CAAC,IAAMqe,EACtE,OAAOre,EAEXA,GACH,CACD,MAAO,EAEd,CAOD,SAASwe,EAAQzC,EAAK,CAClB,OAAO,MAAM,UAAU,MAAM,KAAKA,EAAK,CAAC,CAC3C,CASD,SAAS0C,GAAY3B,EAAK4B,EAAKC,EAAM,CAKjC,QAJIC,EAAU,CAAA,EACVC,EAAS,CAAA,EACT7e,EAAI,EAEDA,EAAI8c,EAAI,QAAQ,CACnB,IAAIzG,EAAMqI,EAAM5B,EAAI9c,CAAC,EAAE0e,CAAG,EAAI5B,EAAI9c,CAAC,EAC/Bse,EAAQO,EAAQxI,CAAG,EAAI,GACvBuI,EAAQ,KAAK9B,EAAI9c,CAAC,CAAC,EAEvB6e,EAAO7e,CAAC,EAAIqW,EACZrW,GACH,CAED,OAAI2e,IACKD,EAGDE,EAAUA,EAAQ,KAAK,SAAyBjW,GAAGyE,GAAG,CAClD,OAAOzE,GAAE+V,CAAG,EAAItR,GAAEsR,CAAG,CACrC,CAAa,EAJDE,EAAUA,EAAQ,QAQnBA,CACV,CAQD,SAASE,GAAS/C,EAAKgD,EAAU,CAK7B,QAJIC,EAAQC,EACRC,EAAYH,EAAS,CAAC,EAAE,YAAW,EAAKA,EAAS,MAAM,CAAC,EAExD/e,EAAI,EACDA,EAAIkb,EAAgB,QAAQ,CAI/B,GAHA8D,EAAS9D,EAAgBlb,CAAC,EAC1Bif,EAAQD,EAAUA,EAASE,EAAYH,EAEnCE,KAAQlD,EACR,OAAOkD,EAEXjf,GACH,CACD,OAAOoV,CACV,CAMD,IAAI+J,GAAY,EAChB,SAASC,IAAW,CAChB,OAAOD,IACV,CAOD,SAASE,GAAoBC,EAAS,CAClC,IAAIC,EAAMD,EAAQ,eAAiBA,EACnC,OAAQC,EAAI,aAAeA,EAAI,cAAgBxE,CAClD,CAED,IAAIyE,GAAe,wCAEfC,EAAiB,iBAAkB1E,EACnC2E,EAAyBZ,GAAS/D,EAAQ,cAAc,IAAM3F,EAC9DuK,EAAqBF,GAAiBD,GAAa,KAAK,UAAU,SAAS,EAE3EI,EAAmB,QACnBC,GAAiB,MACjBC,GAAmB,QACnBC,GAAoB,SAEpBC,GAAmB,GAEnBC,GAAc,EACdC,GAAa,EACbC,GAAY,EACZC,GAAe,EAEfC,GAAiB,EACjBC,GAAiB,EACjBC,GAAkB,EAClBC,GAAe,EACfC,EAAiB,GAEjBC,GAAuBJ,GAAiBC,GACxCI,GAAqBH,GAAeC,EACpCG,GAAgBF,GAAuBC,GAEvCE,GAAW,CAAC,IAAK,GAAG,EACpBC,GAAkB,CAAC,UAAW,SAAS,EAS3C,SAASC,GAAMC,EAASC,EAAU,CAC9B,IAAIC,EAAO,KACX,KAAK,QAAUF,EACf,KAAK,SAAWC,EAChB,KAAK,QAAUD,EAAQ,QACvB,KAAK,OAASA,EAAQ,QAAQ,YAI9B,KAAK,WAAa,SAASG,EAAI,CACvB5D,EAASyD,EAAQ,QAAQ,OAAQ,CAACA,CAAO,CAAC,GAC1CE,EAAK,QAAQC,CAAE,CAE3B,EAEI,KAAK,KAAI,CAEZ,CAEDJ,GAAM,UAAY,CAKd,QAAS,UAAW,CAAG,EAKvB,KAAM,UAAW,CACb,KAAK,MAAQnD,EAAkB,KAAK,QAAS,KAAK,KAAM,KAAK,UAAU,EACvE,KAAK,UAAYA,EAAkB,KAAK,OAAQ,KAAK,SAAU,KAAK,UAAU,EAC9E,KAAK,OAASA,EAAkByB,GAAoB,KAAK,OAAO,EAAG,KAAK,MAAO,KAAK,UAAU,CACjG,EAKD,QAAS,UAAW,CAChB,KAAK,MAAQrB,EAAqB,KAAK,QAAS,KAAK,KAAM,KAAK,UAAU,EAC1E,KAAK,UAAYA,EAAqB,KAAK,OAAQ,KAAK,SAAU,KAAK,UAAU,EACjF,KAAK,OAASA,EAAqBqB,GAAoB,KAAK,OAAO,EAAG,KAAK,MAAO,KAAK,UAAU,CACpG,CACL,EAQA,SAAS+B,GAAoBJ,EAAS,CAClC,IAAIK,EACAC,EAAaN,EAAQ,QAAQ,WAEjC,OAAIM,EACAD,EAAOC,EACA5B,EACP2B,EAAOE,GACA5B,EACP0B,EAAOG,GACC/B,EAGR4B,EAAOI,GAFPJ,EAAOK,GAIJ,IAAKL,EAAML,EAASW,EAAY,CAC1C,CAQD,SAASA,GAAaX,EAASY,EAAWzI,EAAO,CAC7C,IAAI0I,EAAc1I,EAAM,SAAS,OAC7B2I,EAAqB3I,EAAM,gBAAgB,OAC3C4I,EAAWH,EAAY3B,IAAgB4B,EAAcC,IAAuB,EAC5EE,EAAWJ,GAAazB,GAAYC,KAAkByB,EAAcC,IAAuB,EAE/F3I,EAAM,QAAU,CAAC,CAAC4I,EAClB5I,EAAM,QAAU,CAAC,CAAC6I,EAEdD,IACAf,EAAQ,QAAU,IAKtB7H,EAAM,UAAYyI,EAGlBK,GAAiBjB,EAAS7H,CAAK,EAG/B6H,EAAQ,KAAK,eAAgB7H,CAAK,EAElC6H,EAAQ,UAAU7H,CAAK,EACvB6H,EAAQ,QAAQ,UAAY7H,CAC/B,CAOD,SAAS8I,GAAiBjB,EAAS7H,EAAO,CACtC,IAAI+I,EAAUlB,EAAQ,QAClBmB,EAAWhJ,EAAM,SACjBiJ,EAAiBD,EAAS,OAGzBD,EAAQ,aACTA,EAAQ,WAAaG,GAAqBlJ,CAAK,GAI/CiJ,EAAiB,GAAK,CAACF,EAAQ,cAC/BA,EAAQ,cAAgBG,GAAqBlJ,CAAK,EAC3CiJ,IAAmB,IAC1BF,EAAQ,cAAgB,IAG5B,IAAII,EAAaJ,EAAQ,WACrBK,EAAgBL,EAAQ,cACxBM,GAAeD,EAAgBA,EAAc,OAASD,EAAW,OAEjEG,GAAStJ,EAAM,OAASuJ,GAAUP,CAAQ,EAC9ChJ,EAAM,UAAYoC,IAClBpC,EAAM,UAAYA,EAAM,UAAYmJ,EAAW,UAE/CnJ,EAAM,MAAQwJ,GAASH,GAAcC,EAAM,EAC3CtJ,EAAM,SAAWyJ,GAAYJ,GAAcC,EAAM,EAEjDI,GAAeX,EAAS/I,CAAK,EAC7BA,EAAM,gBAAkB2J,GAAa3J,EAAM,OAAQA,EAAM,MAAM,EAE/D,IAAI4J,GAAkBC,GAAY7J,EAAM,UAAWA,EAAM,OAAQA,EAAM,MAAM,EAC7EA,EAAM,iBAAmB4J,GAAgB,EACzC5J,EAAM,iBAAmB4J,GAAgB,EACzC5J,EAAM,gBAAmBmC,EAAIyH,GAAgB,CAAC,EAAIzH,EAAIyH,GAAgB,CAAC,EAAKA,GAAgB,EAAIA,GAAgB,EAEhH5J,EAAM,MAAQoJ,EAAgBU,GAASV,EAAc,SAAUJ,CAAQ,EAAI,EAC3EhJ,EAAM,SAAWoJ,EAAgBW,GAAYX,EAAc,SAAUJ,CAAQ,EAAI,EAEjFhJ,EAAM,YAAe+I,EAAQ,UAAsC/I,EAAM,SAAS,OAC9E+I,EAAQ,UAAU,YAAe/I,EAAM,SAAS,OAAS+I,EAAQ,UAAU,YADtC/I,EAAM,SAAS,OAGxDgK,GAAyBjB,EAAS/I,CAAK,EAGvC,IAAIxC,GAASqK,EAAQ,QACjB/C,EAAU9E,EAAM,SAAS,OAAQxC,EAAM,IACvCA,GAASwC,EAAM,SAAS,QAE5BA,EAAM,OAASxC,EAClB,CAED,SAASkM,GAAeX,EAAS/I,EAAO,CACpC,IAAIsJ,EAAStJ,EAAM,OACfiK,EAASlB,EAAQ,aAAe,GAChCmB,EAAYnB,EAAQ,WAAa,GACjCoB,EAAYpB,EAAQ,WAAa,IAEjC/I,EAAM,YAAc8G,IAAeqD,EAAU,YAAcnD,MAC3DkD,EAAYnB,EAAQ,UAAY,CAC5B,EAAGoB,EAAU,QAAU,EACvB,EAAGA,EAAU,QAAU,CACnC,EAEQF,EAASlB,EAAQ,YAAc,CAC3B,EAAGO,EAAO,EACV,EAAGA,EAAO,CACtB,GAGItJ,EAAM,OAASkK,EAAU,GAAKZ,EAAO,EAAIW,EAAO,GAChDjK,EAAM,OAASkK,EAAU,GAAKZ,EAAO,EAAIW,EAAO,EACnD,CAOD,SAASD,GAAyBjB,EAAS/I,EAAO,CAC9C,IAAIoK,EAAOrB,EAAQ,cAAgB/I,EAC/BqK,EAAYrK,EAAM,UAAYoK,EAAK,UACnCE,EAAUC,EAAWC,EAAWC,GAEpC,GAAIzK,EAAM,WAAaiH,KAAiBoD,EAAYxD,IAAoBuD,EAAK,WAAanO,GAAY,CAClG,IAAIyO,GAAS1K,EAAM,OAASoK,EAAK,OAC7BO,GAAS3K,EAAM,OAASoK,EAAK,OAE7BQ,GAAIf,GAAYQ,EAAWK,GAAQC,EAAM,EAC7CJ,EAAYK,GAAE,EACdJ,EAAYI,GAAE,EACdN,EAAYnI,EAAIyI,GAAE,CAAC,EAAIzI,EAAIyI,GAAE,CAAC,EAAKA,GAAE,EAAIA,GAAE,EAC3CH,GAAYd,GAAae,GAAQC,EAAM,EAEvC5B,EAAQ,aAAe/I,CAC/B,MAEQsK,EAAWF,EAAK,SAChBG,EAAYH,EAAK,UACjBI,EAAYJ,EAAK,UACjBK,GAAYL,EAAK,UAGrBpK,EAAM,SAAWsK,EACjBtK,EAAM,UAAYuK,EAClBvK,EAAM,UAAYwK,EAClBxK,EAAM,UAAYyK,EACrB,CAOD,SAASvB,GAAqBlJ,EAAO,CAKjC,QAFIgJ,EAAW,CAAA,EACXniB,EAAI,EACDA,EAAImZ,EAAM,SAAS,QACtBgJ,EAASniB,CAAC,EAAI,CACV,QAASqb,EAAMlC,EAAM,SAASnZ,CAAC,EAAE,OAAO,EACxC,QAASqb,EAAMlC,EAAM,SAASnZ,CAAC,EAAE,OAAO,CACpD,EACQA,IAGJ,MAAO,CACH,UAAWub,EAAK,EAChB,SAAU4G,EACV,OAAQO,GAAUP,CAAQ,EAC1B,OAAQhJ,EAAM,OACd,OAAQA,EAAM,MACtB,CACC,CAOD,SAASuJ,GAAUP,EAAU,CACzB,IAAIC,EAAiBD,EAAS,OAG9B,GAAIC,IAAmB,EACnB,MAAO,CACH,EAAG/G,EAAM8G,EAAS,CAAC,EAAE,OAAO,EAC5B,EAAG9G,EAAM8G,EAAS,CAAC,EAAE,OAAO,CACxC,EAII,QADIlU,EAAI,EAAGF,EAAI,EAAG/N,EAAI,EACfA,EAAIoiB,GACPnU,GAAKkU,EAASniB,CAAC,EAAE,QACjB+N,GAAKoU,EAASniB,CAAC,EAAE,QACjBA,IAGJ,MAAO,CACH,EAAGqb,EAAMpN,EAAImU,CAAc,EAC3B,EAAG/G,EAAMtN,EAAIqU,CAAc,CACnC,CACC,CASD,SAASY,GAAYQ,EAAWvV,EAAGF,EAAG,CAClC,MAAO,CACH,EAAGE,EAAIuV,GAAa,EACpB,EAAGzV,EAAIyV,GAAa,CAC5B,CACC,CAQD,SAASV,GAAa7U,EAAGF,EAAG,CACxB,OAAIE,IAAMF,EACCsS,GAGP/E,EAAIrN,CAAC,GAAKqN,EAAIvN,CAAC,EACRE,EAAI,EAAIqS,GAAiBC,GAE7BxS,EAAI,EAAIyS,GAAeC,CACjC,CASD,SAASmC,GAAYoB,EAAIC,EAAIC,EAAO,CAC3BA,IACDA,EAAQrD,IAEZ,IAAI5S,EAAIgW,EAAGC,EAAM,CAAC,CAAC,EAAIF,EAAGE,EAAM,CAAC,CAAC,EAC9BnW,EAAIkW,EAAGC,EAAM,CAAC,CAAC,EAAIF,EAAGE,EAAM,CAAC,CAAC,EAElC,OAAO,KAAK,KAAMjW,EAAIA,EAAMF,EAAIA,CAAE,CACrC,CASD,SAAS4U,GAASqB,EAAIC,EAAIC,EAAO,CACxBA,IACDA,EAAQrD,IAEZ,IAAI5S,EAAIgW,EAAGC,EAAM,CAAC,CAAC,EAAIF,EAAGE,EAAM,CAAC,CAAC,EAC9BnW,EAAIkW,EAAGC,EAAM,CAAC,CAAC,EAAIF,EAAGE,EAAM,CAAC,CAAC,EAClC,OAAO,KAAK,MAAMnW,EAAGE,CAAC,EAAI,IAAM,KAAK,EACxC,CAQD,SAASiV,GAAY7I,EAAO5D,EAAK,CAC7B,OAAOkM,GAASlM,EAAI,CAAC,EAAGA,EAAI,CAAC,EAAGqK,EAAe,EAAI6B,GAAStI,EAAM,CAAC,EAAGA,EAAM,CAAC,EAAGyG,EAAe,CAClG,CASD,SAASmC,GAAS5I,EAAO5D,EAAK,CAC1B,OAAOmM,GAAYnM,EAAI,CAAC,EAAGA,EAAI,CAAC,EAAGqK,EAAe,EAAI8B,GAAYvI,EAAM,CAAC,EAAGA,EAAM,CAAC,EAAGyG,EAAe,CACxG,CAED,IAAIqD,GAAkB,CAClB,UAAWlE,GACX,UAAWC,GACX,QAASC,EACb,EAEIiE,GAAuB,YACvBC,GAAsB,oBAO1B,SAAS3C,IAAa,CAClB,KAAK,KAAO0C,GACZ,KAAK,MAAQC,GAEb,KAAK,QAAU,GAEftD,GAAM,MAAM,KAAM,SAAS,CAC9B,CAED9D,EAAQyE,GAAYX,GAAO,CAKvB,QAAS,SAAmBI,EAAI,CAC5B,IAAIS,EAAYuC,GAAgBhD,EAAG,IAAI,EAGnCS,EAAY3B,IAAekB,EAAG,SAAW,IACzC,KAAK,QAAU,IAGfS,EAAY1B,IAAciB,EAAG,QAAU,IACvCS,EAAYzB,IAIX,KAAK,UAINyB,EAAYzB,KACZ,KAAK,QAAU,IAGnB,KAAK,SAAS,KAAK,QAASyB,EAAW,CACnC,SAAU,CAACT,CAAE,EACb,gBAAiB,CAACA,CAAE,EACpB,YAAarB,GACb,SAAUqB,CACtB,CAAS,EACJ,CACL,CAAC,EAED,IAAImD,GAAoB,CACpB,YAAarE,GACb,YAAaC,GACb,UAAWC,GACX,cAAeC,GACf,WAAYA,EAChB,EAGImE,GAAyB,CACzB,EAAG3E,EACH,EAAGC,GACH,EAAGC,GACH,EAAGC,EACP,EAEIyE,GAAyB,cACzBC,GAAwB,sCAGxB1J,EAAO,gBAAkB,CAACA,EAAO,eACjCyJ,GAAyB,gBACzBC,GAAwB,6CAQ5B,SAASlD,IAAoB,CACzB,KAAK,KAAOiD,GACZ,KAAK,MAAQC,GAEb1D,GAAM,MAAM,KAAM,SAAS,EAE3B,KAAK,MAAS,KAAK,QAAQ,QAAQ,cAAgB,CAAA,CACtD,CAED9D,EAAQsE,GAAmBR,GAAO,CAK9B,QAAS,SAAmBI,EAAI,CAC5B,IAAIuD,EAAQ,KAAK,MACbC,EAAgB,GAEhBC,EAAsBzD,EAAG,KAAK,YAAa,EAAC,QAAQ,KAAM,EAAE,EAC5DS,EAAY0C,GAAkBM,CAAmB,EACjDC,EAAcN,GAAuBpD,EAAG,WAAW,GAAKA,EAAG,YAE3D2D,GAAWD,GAAejF,EAG1BmF,GAAazG,EAAQoG,EAAOvD,EAAG,UAAW,WAAW,EAGrDS,EAAY3B,KAAgBkB,EAAG,SAAW,GAAK2D,IAC3CC,GAAa,IACbL,EAAM,KAAKvD,CAAE,EACb4D,GAAaL,EAAM,OAAS,GAEzB9C,GAAazB,GAAYC,MAChCuE,EAAgB,IAIhB,EAAAI,GAAa,KAKjBL,EAAMK,EAAU,EAAI5D,EAEpB,KAAK,SAAS,KAAK,QAASS,EAAW,CACnC,SAAU8C,EACV,gBAAiB,CAACvD,CAAE,EACpB,YAAa0D,EACb,SAAU1D,CACtB,CAAS,EAEGwD,GAEAD,EAAM,OAAOK,GAAY,CAAC,EAEjC,CACL,CAAC,EAED,IAAIC,GAAyB,CACzB,WAAY/E,GACZ,UAAWC,GACX,SAAUC,GACV,YAAaC,EACjB,EAEI6E,GAA6B,aAC7BC,GAA6B,4CAOjC,SAASC,IAAmB,CACxB,KAAK,SAAWF,GAChB,KAAK,MAAQC,GACb,KAAK,QAAU,GAEfnE,GAAM,MAAM,KAAM,SAAS,CAC9B,CAED9D,EAAQkI,GAAkBpE,GAAO,CAC7B,QAAS,SAAmBI,EAAI,CAC5B,IAAI1I,EAAOuM,GAAuB7D,EAAG,IAAI,EAOzC,GAJI1I,IAASwH,KACT,KAAK,QAAU,IAGf,EAAC,KAAK,QAIV,KAAImF,EAAUC,GAAuB,KAAK,KAAMlE,EAAI1I,CAAI,EAGpDA,GAAQ0H,GAAYC,KAAiBgF,EAAQ,CAAC,EAAE,OAASA,EAAQ,CAAC,EAAE,SAAW,IAC/E,KAAK,QAAU,IAGnB,KAAK,SAAS,KAAK,QAAS3M,EAAM,CAC9B,SAAU2M,EAAQ,CAAC,EACnB,gBAAiBA,EAAQ,CAAC,EAC1B,YAAaxF,EACb,SAAUuB,CACtB,CAAS,EACJ,CACL,CAAC,EAQD,SAASkE,GAAuBlE,EAAI1I,EAAM,CACtC,IAAI6M,EAAM9G,EAAQ2C,EAAG,OAAO,EACxBoE,EAAU/G,EAAQ2C,EAAG,cAAc,EAEvC,OAAI1I,GAAQ0H,GAAYC,MACpBkF,EAAM7G,GAAY6G,EAAI,OAAOC,CAAO,EAAG,aAAc,EAAI,GAGtD,CAACD,EAAKC,CAAO,CACvB,CAED,IAAIC,GAAkB,CAClB,WAAYvF,GACZ,UAAWC,GACX,SAAUC,GACV,YAAaC,EACjB,EAEIqF,GAAsB,4CAO1B,SAASjE,IAAa,CAClB,KAAK,SAAWiE,GAChB,KAAK,UAAY,GAEjB1E,GAAM,MAAM,KAAM,SAAS,CAC9B,CAED9D,EAAQuE,GAAYT,GAAO,CACvB,QAAS,SAAoBI,EAAI,CAC7B,IAAI1I,EAAO+M,GAAgBrE,EAAG,IAAI,EAC9BiE,EAAUM,GAAW,KAAK,KAAMvE,EAAI1I,CAAI,EACvC2M,GAIL,KAAK,SAAS,KAAK,QAAS3M,EAAM,CAC9B,SAAU2M,EAAQ,CAAC,EACnB,gBAAiBA,EAAQ,CAAC,EAC1B,YAAaxF,EACb,SAAUuB,CACtB,CAAS,CACJ,CACL,CAAC,EAQD,SAASuE,GAAWvE,EAAI1I,EAAM,CAC1B,IAAIkN,EAAanH,EAAQ2C,EAAG,OAAO,EAC/ByE,EAAY,KAAK,UAGrB,GAAInN,GAAQwH,GAAcC,KAAeyF,EAAW,SAAW,EAC3D,OAAAC,EAAUD,EAAW,CAAC,EAAE,UAAU,EAAI,GAC/B,CAACA,EAAYA,CAAU,EAGlC,IAAI3lB,EACA6lB,EACAC,EAAiBtH,EAAQ2C,EAAG,cAAc,EAC1C4E,GAAuB,CAAE,EACzBpP,GAAS,KAAK,OAQlB,GALAkP,EAAgBF,EAAW,OAAO,SAASK,GAAO,CAC9C,OAAO/H,EAAU+H,GAAM,OAAQrP,EAAM,CAC7C,CAAK,EAGG8B,IAASwH,GAET,IADAjgB,EAAI,EACGA,EAAI6lB,EAAc,QACrBD,EAAUC,EAAc7lB,CAAC,EAAE,UAAU,EAAI,GACzCA,IAMR,IADAA,EAAI,EACGA,EAAI8lB,EAAe,QAClBF,EAAUE,EAAe9lB,CAAC,EAAE,UAAU,GACtC+lB,GAAqB,KAAKD,EAAe9lB,CAAC,CAAC,EAI3CyY,GAAQ0H,GAAYC,KACpB,OAAOwF,EAAUE,EAAe9lB,CAAC,EAAE,UAAU,EAEjDA,IAGJ,GAAK+lB,GAAqB,OAI1B,MAAO,CAEHtH,GAAYoH,EAAc,OAAOE,EAAoB,EAAG,aAAc,EAAI,EAC1EA,EACR,CACC,CAYD,IAAIE,GAAgB,KAChBC,GAAiB,GAErB,SAASzE,IAAkB,CACvBV,GAAM,MAAM,KAAM,SAAS,EAE3B,IAAIjD,EAAUnC,EAAO,KAAK,QAAS,IAAI,EACvC,KAAK,MAAQ,IAAI6F,GAAW,KAAK,QAAS1D,CAAO,EACjD,KAAK,MAAQ,IAAI4D,GAAW,KAAK,QAAS5D,CAAO,EAEjD,KAAK,aAAe,KACpB,KAAK,YAAc,EACtB,CAEDb,EAAQwE,GAAiBV,GAAO,CAO5B,QAAS,SAAoBC,EAASmF,EAAYC,EAAW,CACzD,IAAItB,EAAWsB,EAAU,aAAexG,EACpCyG,EAAWD,EAAU,aAAetG,GAExC,GAAI,EAAAuG,GAAWD,EAAU,oBAAsBA,EAAU,mBAAmB,kBAK5E,IAAItB,EACAwB,GAAc,KAAK,KAAMH,EAAYC,CAAS,UACvCC,GAAWE,GAAiB,KAAK,KAAMH,CAAS,EACvD,OAGJ,KAAK,SAASpF,EAASmF,EAAYC,CAAS,EAC/C,EAKD,QAAS,UAAmB,CACxB,KAAK,MAAM,UACX,KAAK,MAAM,SACd,CACL,CAAC,EAED,SAASE,GAAc1E,EAAW4E,EAAW,CACrC5E,EAAY3B,IACZ,KAAK,aAAeuG,EAAU,gBAAgB,CAAC,EAAE,WACjDC,GAAa,KAAK,KAAMD,CAAS,GAC1B5E,GAAazB,GAAYC,KAChCqG,GAAa,KAAK,KAAMD,CAAS,CAExC,CAED,SAASC,GAAaD,EAAW,CAC7B,IAAIR,EAAQQ,EAAU,gBAAgB,CAAC,EAEvC,GAAIR,EAAM,aAAe,KAAK,aAAc,CACxC,IAAIU,EAAY,CAAC,EAAGV,EAAM,QAAS,EAAGA,EAAM,OAAO,EACnD,KAAK,YAAY,KAAKU,CAAS,EAC/B,IAAIC,EAAM,KAAK,YACXC,EAAkB,UAAW,CAC7B,IAAI5mB,EAAI2mB,EAAI,QAAQD,CAAS,EACzB1mB,EAAI,IACJ2mB,EAAI,OAAO3mB,EAAG,CAAC,CAE/B,EACQ,WAAW4mB,EAAiBX,EAAa,CAC5C,CACJ,CAED,SAASM,GAAiBC,EAAW,CAEjC,QADIvY,EAAIuY,EAAU,SAAS,QAASzY,EAAIyY,EAAU,SAAS,QAClDxmB,EAAI,EAAGA,EAAI,KAAK,YAAY,OAAQA,IAAK,CAC9C,IAAI6N,EAAI,KAAK,YAAY7N,CAAC,EACtB6mB,EAAK,KAAK,IAAI5Y,EAAIJ,EAAE,CAAC,EAAGiZ,EAAK,KAAK,IAAI/Y,EAAIF,EAAE,CAAC,EACjD,GAAIgZ,GAAMX,IAAkBY,GAAMZ,GAC9B,MAAO,EAEd,CACD,MAAO,EACV,CAED,IAAIa,GAAwBjI,GAAS3D,EAAa,MAAO,aAAa,EAClE6L,GAAsBD,KAA0B3R,EAGhD6R,GAAuB,UACvBC,GAAoB,OACpBC,GAA4B,eAC5BC,GAAoB,OACpBC,GAAqB,QACrBC,GAAqB,QACrBC,GAAmBC,KASvB,SAASC,GAAYzG,EAAS0G,EAAO,CACjC,KAAK,QAAU1G,EACf,KAAK,IAAI0G,CAAK,CACjB,CAEDD,GAAY,UAAY,CAKpB,IAAK,SAASC,EAAO,CAEbA,GAAST,KACTS,EAAQ,KAAK,WAGbV,IAAuB,KAAK,QAAQ,QAAQ,OAASO,GAAiBG,CAAK,IAC3E,KAAK,QAAQ,QAAQ,MAAMX,EAAqB,EAAIW,GAExD,KAAK,QAAUA,EAAM,YAAa,EAAC,KAAI,CAC1C,EAKD,OAAQ,UAAW,CACf,KAAK,IAAI,KAAK,QAAQ,QAAQ,WAAW,CAC5C,EAMD,QAAS,UAAW,CAChB,IAAIC,EAAU,CAAA,EACd,OAAA7L,EAAK,KAAK,QAAQ,YAAa,SAAS8L,EAAY,CAC5CrK,EAASqK,EAAW,QAAQ,OAAQ,CAACA,CAAU,CAAC,IAChDD,EAAUA,EAAQ,OAAOC,EAAW,eAAgB,CAAA,EAEpE,CAAS,EACMC,GAAkBF,EAAQ,KAAK,GAAG,CAAC,CAC7C,EAMD,gBAAiB,SAASxO,EAAO,CAC7B,IAAI2O,EAAW3O,EAAM,SACjByK,EAAYzK,EAAM,gBAGtB,GAAI,KAAK,QAAQ,QAAQ,UAAW,CAChC2O,EAAS,eAAc,EACvB,MACH,CAED,IAAIH,EAAU,KAAK,QACfI,EAAU3J,EAAMuJ,EAASP,EAAiB,GAAK,CAACG,GAAiBH,EAAiB,EAClFY,EAAU5J,EAAMuJ,EAASL,EAAkB,GAAK,CAACC,GAAiBD,EAAkB,EACpFW,EAAU7J,EAAMuJ,EAASN,EAAkB,GAAK,CAACE,GAAiBF,EAAkB,EAExF,GAAIU,EAAS,CAGT,IAAIG,GAAe/O,EAAM,SAAS,SAAW,EACzCgP,GAAgBhP,EAAM,SAAW,EACjCiP,GAAiBjP,EAAM,UAAY,IAEvC,GAAI+O,IAAgBC,IAAiBC,GACjC,MAEP,CAED,GAAI,EAAAH,GAAWD,KAKXD,GACCC,GAAWpE,EAAYlD,IACvBuH,GAAWrE,EAAYjD,IACxB,OAAO,KAAK,WAAWmH,CAAQ,CAEtC,EAMD,WAAY,SAASA,EAAU,CAC3B,KAAK,QAAQ,QAAQ,UAAY,GACjCA,EAAS,eAAc,CAC1B,CACL,EAOA,SAASD,GAAkBF,EAAS,CAEhC,GAAIvJ,EAAMuJ,EAASP,EAAiB,EAChC,OAAOA,GAGX,IAAIa,EAAU7J,EAAMuJ,EAASN,EAAkB,EAC3CW,EAAU5J,EAAMuJ,EAASL,EAAkB,EAM/C,OAAIW,GAAWD,EACJZ,GAIPa,GAAWD,EACJC,EAAUZ,GAAqBC,GAItClJ,EAAMuJ,EAASR,EAAyB,EACjCA,GAGJD,EACV,CAED,SAASM,IAAsB,CAC3B,GAAI,CAACR,GACD,MAAO,GAEX,IAAIqB,EAAW,CAAA,EACXC,EAAcvN,EAAO,KAAOA,EAAO,IAAI,SAC3C,OAAC,OAAQ,eAAgB,QAAS,QAAS,cAAe,MAAM,EAAE,QAAQ,SAAS1E,EAAK,CAIpFgS,EAAShS,CAAG,EAAIiS,EAAcvN,EAAO,IAAI,SAAS,eAAgB1E,CAAG,EAAI,EACjF,CAAK,EACMgS,CACV,CA6BD,IAAIE,GAAiB,EACjBC,GAAc,EACdC,GAAgB,EAChBC,GAAc,EACdC,GAAmBD,GACnBE,GAAkB,GAClBC,GAAe,GAQnB,SAASC,GAAWnQ,EAAS,CACzB,KAAK,QAAU4D,EAAO,CAAE,EAAE,KAAK,SAAU5D,GAAW,CAAA,CAAE,EAEtD,KAAK,GAAKyG,KAEV,KAAK,QAAU,KAGf,KAAK,QAAQ,OAAS3B,EAAY,KAAK,QAAQ,OAAQ,EAAI,EAE3D,KAAK,MAAQ8K,GAEb,KAAK,aAAe,GACpB,KAAK,YAAc,EACtB,CAEDO,GAAW,UAAY,CAKnB,SAAU,CAAE,EAOZ,IAAK,SAASnQ,EAAS,CACnB,OAAA4D,EAAO,KAAK,QAAS5D,CAAO,EAG5B,KAAK,SAAW,KAAK,QAAQ,YAAY,OAAM,EACxC,IACV,EAOD,cAAe,SAASoQ,EAAiB,CACrC,GAAInN,EAAemN,EAAiB,gBAAiB,IAAI,EACrD,OAAO,KAGX,IAAIC,EAAe,KAAK,aACxB,OAAAD,EAAkBE,GAA6BF,EAAiB,IAAI,EAC/DC,EAAaD,EAAgB,EAAE,IAChCC,EAAaD,EAAgB,EAAE,EAAIA,EACnCA,EAAgB,cAAc,IAAI,GAE/B,IACV,EAOD,kBAAmB,SAASA,EAAiB,CACzC,OAAInN,EAAemN,EAAiB,oBAAqB,IAAI,EAClD,MAGXA,EAAkBE,GAA6BF,EAAiB,IAAI,EACpE,OAAO,KAAK,aAAaA,EAAgB,EAAE,EACpC,KACV,EAOD,eAAgB,SAASA,EAAiB,CACtC,GAAInN,EAAemN,EAAiB,iBAAkB,IAAI,EACtD,OAAO,KAGX,IAAIG,EAAc,KAAK,YACvB,OAAAH,EAAkBE,GAA6BF,EAAiB,IAAI,EAChEzK,EAAQ4K,EAAaH,CAAe,IAAM,KAC1CG,EAAY,KAAKH,CAAe,EAChCA,EAAgB,eAAe,IAAI,GAEhC,IACV,EAOD,mBAAoB,SAASA,EAAiB,CAC1C,GAAInN,EAAemN,EAAiB,qBAAsB,IAAI,EAC1D,OAAO,KAGXA,EAAkBE,GAA6BF,EAAiB,IAAI,EACpE,IAAItM,EAAQ6B,EAAQ,KAAK,YAAayK,CAAe,EACrD,OAAItM,EAAQ,IACR,KAAK,YAAY,OAAOA,EAAO,CAAC,EAE7B,IACV,EAMD,mBAAoB,UAAW,CAC3B,OAAO,KAAK,YAAY,OAAS,CACpC,EAOD,iBAAkB,SAASsM,EAAiB,CACxC,MAAO,CAAC,CAAC,KAAK,aAAaA,EAAgB,EAAE,CAChD,EAOD,KAAM,SAAS5P,EAAO,CAClB,IAAI+H,EAAO,KACPvL,EAAQ,KAAK,MAEjB,SAASwT,EAAKC,EAAO,CACjBlI,EAAK,QAAQ,KAAKkI,EAAOjQ,CAAK,CACjC,CAGGxD,EAAQ+S,IACRS,EAAKjI,EAAK,QAAQ,MAAQmI,GAAS1T,CAAK,CAAC,EAG7CwT,EAAKjI,EAAK,QAAQ,KAAK,EAEnB/H,EAAM,iBACNgQ,EAAKhQ,EAAM,eAAe,EAI1BxD,GAAS+S,IACTS,EAAKjI,EAAK,QAAQ,MAAQmI,GAAS1T,CAAK,CAAC,CAEhD,EAQD,QAAS,SAASwD,EAAO,CACrB,GAAI,KAAK,UACL,OAAO,KAAK,KAAKA,CAAK,EAG1B,KAAK,MAAQ0P,EAChB,EAMD,QAAS,UAAW,CAEhB,QADI7oB,EAAI,EACDA,EAAI,KAAK,YAAY,QAAQ,CAChC,GAAI,EAAE,KAAK,YAAYA,CAAC,EAAE,OAAS6oB,GAAeN,KAC9C,MAAO,GAEXvoB,GACH,CACD,MAAO,EACV,EAMD,UAAW,SAASomB,EAAW,CAG3B,IAAIkD,EAAiB/M,EAAO,CAAE,EAAE6J,CAAS,EAGzC,GAAI,CAAC7I,EAAS,KAAK,QAAQ,OAAQ,CAAC,KAAM+L,CAAc,CAAC,EAAG,CACxD,KAAK,MAAK,EACV,KAAK,MAAQT,GACb,MACH,CAGG,KAAK,OAASF,GAAmBC,GAAkBC,MACnD,KAAK,MAAQN,IAGjB,KAAK,MAAQ,KAAK,QAAQe,CAAc,EAIpC,KAAK,OAASd,GAAcC,GAAgBC,GAAcE,KAC1D,KAAK,QAAQU,CAAc,CAElC,EASD,QAAS,SAASlD,EAAW,CAAG,EAOhC,eAAgB,UAAW,CAAG,EAO9B,MAAO,UAAW,CAAG,CACzB,EAOA,SAASiD,GAAS1T,EAAO,CACrB,OAAIA,EAAQiT,GACD,SACAjT,EAAQ+S,GACR,MACA/S,EAAQ8S,GACR,OACA9S,EAAQ6S,GACR,QAEJ,EACV,CAOD,SAASe,GAAa3F,EAAW,CAC7B,OAAIA,GAAanD,EACN,OACAmD,GAAapD,GACb,KACAoD,GAAatD,GACb,OACAsD,GAAarD,GACb,QAEJ,EACV,CAQD,SAAS0I,GAA6BF,EAAiBnB,EAAY,CAC/D,IAAI5G,EAAU4G,EAAW,QACzB,OAAI5G,EACOA,EAAQ,IAAI+H,CAAe,EAE/BA,CACV,CAOD,SAASS,IAAiB,CACtBV,GAAW,MAAM,KAAM,SAAS,CACnC,CAED7L,EAAQuM,GAAgBV,GAAY,CAKhC,SAAU,CAKN,SAAU,CACb,EAQD,SAAU,SAAS3P,EAAO,CACtB,IAAIsQ,EAAiB,KAAK,QAAQ,SAClC,OAAOA,IAAmB,GAAKtQ,EAAM,SAAS,SAAWsQ,CAC5D,EAQD,QAAS,SAAStQ,EAAO,CACrB,IAAIxD,EAAQ,KAAK,MACbiM,EAAYzI,EAAM,UAElBuQ,EAAe/T,GAAS6S,GAAcC,IACtCkB,EAAU,KAAK,SAASxQ,CAAK,EAGjC,OAAIuQ,IAAiB9H,EAAYxB,IAAgB,CAACuJ,GACvChU,EAAQiT,GACRc,GAAgBC,EACnB/H,EAAYzB,GACLxK,EAAQ+S,GACN/S,EAAQ6S,GAGd7S,EAAQ8S,GAFJD,GAIRK,EACV,CACL,CAAC,EAQD,SAASe,IAAgB,CACrBJ,GAAe,MAAM,KAAM,SAAS,EAEpC,KAAK,GAAK,KACV,KAAK,GAAK,IACb,CAEDvM,EAAQ2M,GAAeJ,GAAgB,CAKnC,SAAU,CACN,MAAO,MACP,UAAW,GACX,SAAU,EACV,UAAW5I,EACd,EAED,eAAgB,UAAW,CACvB,IAAIgD,EAAY,KAAK,QAAQ,UACzB+D,EAAU,CAAA,EACd,OAAI/D,EAAYlD,IACZiH,EAAQ,KAAKL,EAAkB,EAE/B1D,EAAYjD,IACZgH,EAAQ,KAAKN,EAAkB,EAE5BM,CACV,EAED,cAAe,SAASxO,EAAO,CAC3B,IAAIR,EAAU,KAAK,QACfkR,EAAW,GACXC,EAAW3Q,EAAM,SACjByK,EAAYzK,EAAM,UAClBlL,EAAIkL,EAAM,OACVpL,EAAIoL,EAAM,OAGd,OAAMyK,EAAYjL,EAAQ,YAClBA,EAAQ,UAAY+H,IACpBkD,EAAa3V,IAAM,EAAKoS,GAAkBpS,EAAI,EAAKqS,GAAiBC,GACpEsJ,EAAW5b,GAAK,KAAK,GACrB6b,EAAW,KAAK,IAAI3Q,EAAM,MAAM,IAEhCyK,EAAa7V,IAAM,EAAKsS,GAAkBtS,EAAI,EAAKyS,GAAeC,EAClEoJ,EAAW9b,GAAK,KAAK,GACrB+b,EAAW,KAAK,IAAI3Q,EAAM,MAAM,IAGxCA,EAAM,UAAYyK,EACXiG,GAAYC,EAAWnR,EAAQ,WAAaiL,EAAYjL,EAAQ,SAC1E,EAED,SAAU,SAASQ,EAAO,CACtB,OAAOqQ,GAAe,UAAU,SAAS,KAAK,KAAMrQ,CAAK,IACpD,KAAK,MAAQqP,IAAgB,EAAE,KAAK,MAAQA,KAAgB,KAAK,cAAcrP,CAAK,EAC5F,EAED,KAAM,SAASA,EAAO,CAElB,KAAK,GAAKA,EAAM,OAChB,KAAK,GAAKA,EAAM,OAEhB,IAAIyK,EAAY2F,GAAapQ,EAAM,SAAS,EAExCyK,IACAzK,EAAM,gBAAkB,KAAK,QAAQ,MAAQyK,GAEjD,KAAK,OAAO,KAAK,KAAK,KAAMzK,CAAK,CACpC,CACL,CAAC,EAQD,SAAS4Q,IAAkB,CACvBP,GAAe,MAAM,KAAM,SAAS,CACvC,CAEDvM,EAAQ8M,GAAiBP,GAAgB,CAKrC,SAAU,CACN,MAAO,QACP,UAAW,EACX,SAAU,CACb,EAED,eAAgB,UAAW,CACvB,MAAO,CAACpC,EAAiB,CAC5B,EAED,SAAU,SAASjO,EAAO,CACtB,OAAO,KAAK,OAAO,SAAS,KAAK,KAAMA,CAAK,IACvC,KAAK,IAAIA,EAAM,MAAQ,CAAC,EAAI,KAAK,QAAQ,WAAa,KAAK,MAAQqP,GAC3E,EAED,KAAM,SAASrP,EAAO,CAClB,GAAIA,EAAM,QAAU,EAAG,CACnB,IAAI6Q,EAAQ7Q,EAAM,MAAQ,EAAI,KAAO,MACrCA,EAAM,gBAAkB,KAAK,QAAQ,MAAQ6Q,CAChD,CACD,KAAK,OAAO,KAAK,KAAK,KAAM7Q,CAAK,CACpC,CACL,CAAC,EAQD,SAAS8Q,IAAkB,CACvBnB,GAAW,MAAM,KAAM,SAAS,EAEhC,KAAK,OAAS,KACd,KAAK,OAAS,IACjB,CAED7L,EAAQgN,GAAiBnB,GAAY,CAKjC,SAAU,CACN,MAAO,QACP,SAAU,EACV,KAAM,IACN,UAAW,CACd,EAED,eAAgB,UAAW,CACvB,MAAO,CAAC5B,EAAiB,CAC5B,EAED,QAAS,SAAS/N,EAAO,CACrB,IAAIR,EAAU,KAAK,QACfuR,EAAgB/Q,EAAM,SAAS,SAAWR,EAAQ,SAClDwR,EAAgBhR,EAAM,SAAWR,EAAQ,UACzCyR,EAAYjR,EAAM,UAAYR,EAAQ,KAM1C,GAJA,KAAK,OAASQ,EAIV,CAACgR,GAAiB,CAACD,GAAkB/Q,EAAM,WAAagH,GAAYC,KAAiB,CAACgK,EACtF,KAAK,MAAK,UACHjR,EAAM,UAAY8G,GACzB,KAAK,MAAK,EACV,KAAK,OAASzE,EAAkB,UAAW,CACvC,KAAK,MAAQmN,GACb,KAAK,QAAO,CAC5B,EAAehQ,EAAQ,KAAM,IAAI,UACdQ,EAAM,UAAYgH,GACzB,OAAOwI,GAEX,OAAOE,EACV,EAED,MAAO,UAAW,CACd,aAAa,KAAK,MAAM,CAC3B,EAED,KAAM,SAAS1P,EAAO,CACd,KAAK,QAAUwP,KAIfxP,GAAUA,EAAM,UAAYgH,GAC5B,KAAK,QAAQ,KAAK,KAAK,QAAQ,MAAQ,KAAMhH,CAAK,GAElD,KAAK,OAAO,UAAYoC,IACxB,KAAK,QAAQ,KAAK,KAAK,QAAQ,MAAO,KAAK,MAAM,GAExD,CACL,CAAC,EAQD,SAAS8O,IAAmB,CACxBb,GAAe,MAAM,KAAM,SAAS,CACvC,CAEDvM,EAAQoN,GAAkBb,GAAgB,CAKtC,SAAU,CACN,MAAO,SACP,UAAW,EACX,SAAU,CACb,EAED,eAAgB,UAAW,CACvB,MAAO,CAACpC,EAAiB,CAC5B,EAED,SAAU,SAASjO,EAAO,CACtB,OAAO,KAAK,OAAO,SAAS,KAAK,KAAMA,CAAK,IACvC,KAAK,IAAIA,EAAM,QAAQ,EAAI,KAAK,QAAQ,WAAa,KAAK,MAAQqP,GAC1E,CACL,CAAC,EAQD,SAAS8B,IAAkB,CACvBd,GAAe,MAAM,KAAM,SAAS,CACvC,CAEDvM,EAAQqN,GAAiBd,GAAgB,CAKrC,SAAU,CACN,MAAO,QACP,UAAW,GACX,SAAU,GACV,UAAW9I,GAAuBC,GAClC,SAAU,CACb,EAED,eAAgB,UAAW,CACvB,OAAOiJ,GAAc,UAAU,eAAe,KAAK,IAAI,CAC1D,EAED,SAAU,SAASzQ,EAAO,CACtB,IAAIyK,EAAY,KAAK,QAAQ,UACzBH,EAEJ,OAAIG,GAAalD,GAAuBC,IACpC8C,EAAWtK,EAAM,gBACVyK,EAAYlD,GACnB+C,EAAWtK,EAAM,iBACVyK,EAAYjD,KACnB8C,EAAWtK,EAAM,kBAGd,KAAK,OAAO,SAAS,KAAK,KAAMA,CAAK,GACxCyK,EAAYzK,EAAM,iBAClBA,EAAM,SAAW,KAAK,QAAQ,WAC9BA,EAAM,aAAe,KAAK,QAAQ,UAClCmC,EAAImI,CAAQ,EAAI,KAAK,QAAQ,UAAYtK,EAAM,UAAYgH,EAClE,EAED,KAAM,SAAShH,EAAO,CAClB,IAAIyK,EAAY2F,GAAapQ,EAAM,eAAe,EAC9CyK,GACA,KAAK,QAAQ,KAAK,KAAK,QAAQ,MAAQA,EAAWzK,CAAK,EAG3D,KAAK,QAAQ,KAAK,KAAK,QAAQ,MAAOA,CAAK,CAC9C,CACL,CAAC,EAYD,SAASoR,IAAgB,CACrBzB,GAAW,MAAM,KAAM,SAAS,EAIhC,KAAK,MAAQ,GACb,KAAK,QAAU,GAEf,KAAK,OAAS,KACd,KAAK,OAAS,KACd,KAAK,MAAQ,CAChB,CAED7L,EAAQsN,GAAezB,GAAY,CAK/B,SAAU,CACN,MAAO,MACP,SAAU,EACV,KAAM,EACN,SAAU,IACV,KAAM,IACN,UAAW,EACX,aAAc,EACjB,EAED,eAAgB,UAAW,CACvB,MAAO,CAAC3B,EAAyB,CACpC,EAED,QAAS,SAAShO,EAAO,CACrB,IAAIR,EAAU,KAAK,QAEfuR,EAAgB/Q,EAAM,SAAS,SAAWR,EAAQ,SAClDwR,EAAgBhR,EAAM,SAAWR,EAAQ,UACzC6R,EAAiBrR,EAAM,UAAYR,EAAQ,KAI/C,GAFA,KAAK,MAAK,EAELQ,EAAM,UAAY8G,IAAiB,KAAK,QAAU,EACnD,OAAO,KAAK,cAKhB,GAAIkK,GAAiBK,GAAkBN,EAAe,CAClD,GAAI/Q,EAAM,WAAagH,GACnB,OAAO,KAAK,cAGhB,IAAIsK,EAAgB,KAAK,MAAStR,EAAM,UAAY,KAAK,MAAQR,EAAQ,SAAY,GACjF+R,EAAgB,CAAC,KAAK,SAAW9H,GAAY,KAAK,QAASzJ,EAAM,MAAM,EAAIR,EAAQ,aAEvF,KAAK,MAAQQ,EAAM,UACnB,KAAK,QAAUA,EAAM,OAEjB,CAACuR,GAAiB,CAACD,EACnB,KAAK,MAAQ,EAEb,KAAK,OAAS,EAGlB,KAAK,OAAStR,EAId,IAAIwR,GAAW,KAAK,MAAQhS,EAAQ,KACpC,GAAIgS,KAAa,EAGb,OAAK,KAAK,sBAGN,KAAK,OAASnP,EAAkB,UAAW,CACvC,KAAK,MAAQmN,GACb,KAAK,QAAO,CACpC,EAAuBhQ,EAAQ,SAAU,IAAI,EAClB6P,IANAG,EASlB,CACD,OAAOE,EACV,EAED,YAAa,UAAW,CACpB,YAAK,OAASrN,EAAkB,UAAW,CACvC,KAAK,MAAQqN,EAChB,EAAE,KAAK,QAAQ,SAAU,IAAI,EACvBA,EACV,EAED,MAAO,UAAW,CACd,aAAa,KAAK,MAAM,CAC3B,EAED,KAAM,UAAW,CACT,KAAK,OAASF,KACd,KAAK,OAAO,SAAW,KAAK,MAC5B,KAAK,QAAQ,KAAK,KAAK,QAAQ,MAAO,KAAK,MAAM,EAExD,CACL,CAAC,EAQD,SAASiC,GAAOtL,EAAS3G,EAAS,CAC9B,OAAAA,EAAUA,GAAW,GACrBA,EAAQ,YAAc8E,EAAY9E,EAAQ,YAAaiS,GAAO,SAAS,MAAM,EACtE,IAAIC,GAAQvL,EAAS3G,CAAO,CACtC,CAKDiS,GAAO,QAAU,QAMjBA,GAAO,SAAW,CAOd,UAAW,GAQX,YAAa3D,GAMb,OAAQ,GASR,YAAa,KAOb,WAAY,KAOZ,OAAQ,CAEJ,CAACoD,GAAkB,CAAC,OAAQ,EAAK,CAAC,EAClC,CAACN,GAAiB,CAAC,OAAQ,EAAK,EAAG,CAAC,QAAQ,CAAC,EAC7C,CAACO,GAAiB,CAAC,UAAW5J,EAAoB,CAAC,EACnD,CAACkJ,GAAe,CAAC,UAAWlJ,EAAoB,EAAG,CAAC,OAAO,CAAC,EAC5D,CAAC6J,EAAa,EACd,CAACA,GAAe,CAAC,MAAO,YAAa,KAAM,CAAC,EAAG,CAAC,KAAK,CAAC,EACtD,CAACN,EAAe,CACnB,EAOD,SAAU,CAMN,WAAY,OAOZ,YAAa,OASb,aAAc,OAOd,eAAgB,OAOhB,SAAU,OAQV,kBAAmB,eACtB,CACL,EAEA,IAAIa,GAAO,EACPC,GAAc,EAQlB,SAASF,GAAQvL,EAAS3G,EAAS,CAC/B,KAAK,QAAU4D,EAAO,CAAE,EAAEqO,GAAO,SAAUjS,GAAW,CAAA,CAAE,EAExD,KAAK,QAAQ,YAAc,KAAK,QAAQ,aAAe2G,EAEvD,KAAK,SAAW,GAChB,KAAK,QAAU,GACf,KAAK,YAAc,GACnB,KAAK,YAAc,GAEnB,KAAK,QAAUA,EACf,KAAK,MAAQ8B,GAAoB,IAAI,EACrC,KAAK,YAAc,IAAIqG,GAAY,KAAM,KAAK,QAAQ,WAAW,EAEjEuD,GAAe,KAAM,EAAI,EAEzBlP,EAAK,KAAK,QAAQ,YAAa,SAASmP,EAAM,CAC1C,IAAIrD,EAAa,KAAK,IAAI,IAAKqD,EAAK,CAAC,EAAGA,EAAK,CAAC,CAAC,CAAC,EAChDA,EAAK,CAAC,GAAKrD,EAAW,cAAcqD,EAAK,CAAC,CAAC,EAC3CA,EAAK,CAAC,GAAKrD,EAAW,eAAeqD,EAAK,CAAC,CAAC,CAC/C,EAAE,IAAI,CACV,CAEDJ,GAAQ,UAAY,CAMhB,IAAK,SAASlS,EAAS,CACnB,OAAA4D,EAAO,KAAK,QAAS5D,CAAO,EAGxBA,EAAQ,aACR,KAAK,YAAY,SAEjBA,EAAQ,cAER,KAAK,MAAM,UACX,KAAK,MAAM,OAASA,EAAQ,YAC5B,KAAK,MAAM,QAER,IACV,EAQD,KAAM,SAASuS,EAAO,CAClB,KAAK,QAAQ,QAAUA,EAAQH,GAAcD,EAChD,EAQD,UAAW,SAAS1E,EAAW,CAC3B,IAAIlE,EAAU,KAAK,QACnB,GAAI,CAAAA,EAAQ,QAKZ,MAAK,YAAY,gBAAgBkE,CAAS,EAE1C,IAAIwB,EACAuD,EAAc,KAAK,YAKnBC,EAAgBlJ,EAAQ,eAIxB,CAACkJ,GAAkBA,GAAiBA,EAAc,MAAQzC,MAC1DyC,EAAgBlJ,EAAQ,cAAgB,MAI5C,QADIliB,EAAI,EACDA,EAAImrB,EAAY,QACnBvD,EAAauD,EAAYnrB,CAAC,EAQtBkiB,EAAQ,UAAY6I,KAChB,CAACK,GAAiBxD,GAAcwD,GAChCxD,EAAW,iBAAiBwD,CAAa,GAC7CxD,EAAW,UAAUxB,CAAS,EAE9BwB,EAAW,MAAK,EAKhB,CAACwD,GAAiBxD,EAAW,OAASY,GAAcC,GAAgBC,MACpE0C,EAAgBlJ,EAAQ,cAAgB0F,GAE5C5nB,IAEP,EAOD,IAAK,SAAS4nB,EAAY,CACtB,GAAIA,aAAsBkB,GACtB,OAAOlB,EAIX,QADIuD,EAAc,KAAK,YACdnrB,EAAI,EAAGA,EAAImrB,EAAY,OAAQnrB,IACpC,GAAImrB,EAAYnrB,CAAC,EAAE,QAAQ,OAAS4nB,EAChC,OAAOuD,EAAYnrB,CAAC,EAG5B,OAAO,IACV,EAQD,IAAK,SAAS4nB,EAAY,CACtB,GAAIhM,EAAegM,EAAY,MAAO,IAAI,EACtC,OAAO,KAIX,IAAIyD,EAAW,KAAK,IAAIzD,EAAW,QAAQ,KAAK,EAChD,OAAIyD,GACA,KAAK,OAAOA,CAAQ,EAGxB,KAAK,YAAY,KAAKzD,CAAU,EAChCA,EAAW,QAAU,KAErB,KAAK,YAAY,SACVA,CACV,EAOD,OAAQ,SAASA,EAAY,CACzB,GAAIhM,EAAegM,EAAY,SAAU,IAAI,EACzC,OAAO,KAMX,GAHAA,EAAa,KAAK,IAAIA,CAAU,EAG5BA,EAAY,CACZ,IAAIuD,EAAc,KAAK,YACnB1O,EAAQ6B,EAAQ6M,EAAavD,CAAU,EAEvCnL,IAAU,KACV0O,EAAY,OAAO1O,EAAO,CAAC,EAC3B,KAAK,YAAY,SAExB,CAED,OAAO,IACV,EAQD,GAAI,SAAS6O,EAAQxN,EAAS,CAC1B,GAAIwN,IAAWlW,GAGX0I,IAAY1I,EAIhB,KAAImW,EAAW,KAAK,SACpB,OAAAzP,EAAKiC,EAASuN,CAAM,EAAG,SAASlC,EAAO,CACnCmC,EAASnC,CAAK,EAAImC,EAASnC,CAAK,GAAK,CAAA,EACrCmC,EAASnC,CAAK,EAAE,KAAKtL,CAAO,CACxC,CAAS,EACM,KACV,EAQD,IAAK,SAASwN,EAAQxN,EAAS,CAC3B,GAAIwN,IAAWlW,EAIf,KAAImW,EAAW,KAAK,SACpB,OAAAzP,EAAKiC,EAASuN,CAAM,EAAG,SAASlC,EAAO,CAC9BtL,EAGDyN,EAASnC,CAAK,GAAKmC,EAASnC,CAAK,EAAE,OAAO9K,EAAQiN,EAASnC,CAAK,EAAGtL,CAAO,EAAG,CAAC,EAF9E,OAAOyN,EAASnC,CAAK,CAIrC,CAAS,EACM,KACV,EAOD,KAAM,SAASA,EAAOoC,EAAM,CAEpB,KAAK,QAAQ,WACbC,GAAgBrC,EAAOoC,CAAI,EAI/B,IAAID,EAAW,KAAK,SAASnC,CAAK,GAAK,KAAK,SAASA,CAAK,EAAE,QAC5D,GAAI,GAACmC,GAAY,CAACA,EAAS,QAI3B,CAAAC,EAAK,KAAOpC,EACZoC,EAAK,eAAiB,UAAW,CAC7BA,EAAK,SAAS,gBAC1B,EAGQ,QADIxrB,EAAI,EACDA,EAAIurB,EAAS,QAChBA,EAASvrB,CAAC,EAAEwrB,CAAI,EAChBxrB,IAEP,EAMD,QAAS,UAAW,CAChB,KAAK,SAAWgrB,GAAe,KAAM,EAAK,EAE1C,KAAK,SAAW,GAChB,KAAK,QAAU,GACf,KAAK,MAAM,UACX,KAAK,QAAU,IAClB,CACL,EAOA,SAASA,GAAehK,EAAS0K,EAAK,CAClC,IAAIpM,EAAU0B,EAAQ,QACtB,GAAK1B,EAAQ,MAGb,KAAIL,EACJnD,EAAKkF,EAAQ,QAAQ,SAAU,SAAS0G,EAAOzN,EAAM,CACjDgF,EAAOH,GAASQ,EAAQ,MAAOrF,CAAI,EAC/ByR,GACA1K,EAAQ,YAAY/B,CAAI,EAAIK,EAAQ,MAAML,CAAI,EAC9CK,EAAQ,MAAML,CAAI,EAAIyI,GAEtBpI,EAAQ,MAAML,CAAI,EAAI+B,EAAQ,YAAY/B,CAAI,GAAK,EAE/D,CAAK,EACIyM,IACD1K,EAAQ,YAAc,IAE7B,CAOD,SAASyK,GAAgBrC,EAAOoC,EAAM,CAClC,IAAIG,EAAe3Q,EAAS,YAAY,OAAO,EAC/C2Q,EAAa,UAAUvC,EAAO,GAAM,EAAI,EACxCuC,EAAa,QAAUH,EACvBA,EAAK,OAAO,cAAcG,CAAY,CACzC,CAEDpP,EAAOqO,GAAQ,CACX,YAAa3K,GACb,WAAYC,GACZ,UAAWC,GACX,aAAcC,GAEd,eAAgBmI,GAChB,YAAaC,GACb,cAAeC,GACf,YAAaC,GACb,iBAAkBC,GAClB,gBAAiBC,GACjB,aAAcC,GAEd,eAAgBxI,GAChB,eAAgBC,GAChB,gBAAiBC,GACjB,aAAcC,GACd,eAAgBC,EAChB,qBAAsBC,GACtB,mBAAoBC,GACpB,cAAeC,GAEf,QAASiK,GACT,MAAO9J,GACP,YAAa0G,GAEb,WAAYjG,GACZ,WAAYE,GACZ,kBAAmBH,GACnB,gBAAiBE,GACjB,iBAAkB0D,GAElB,WAAY2D,GACZ,eAAgBU,GAChB,IAAKe,GACL,IAAKX,GACL,MAAOU,GACP,MAAOP,GACP,OAAQM,GACR,MAAOJ,GAEP,GAAIrM,EACJ,IAAKI,EACL,KAAMlC,EACN,MAAOiB,EACP,OAAQH,EACR,OAAQL,EACR,QAASU,EACT,OAAQtB,EACR,SAAUmD,EACd,CAAC,EAID,IAAI8M,GAAc,OAAO7Q,EAAW,IAAcA,EAAU,OAAO,KAAS,IAAc,KAAO,CAAE,EACnG6Q,GAAW,OAAShB,GAEhB,OAAOiB,GAAW,YAAcA,EAAO,IACvCA,EAAO,UAAW,CACd,OAAOjB,EACf,CAAK,EACsCzV,EAAO,QAC9CA,EAAA,QAAiByV,GAEjB7P,EAAOE,CAAU,EAAI2P,EAGzB,GAAG,OAAQ,SAAU,QAAQ,0CClkF7B,IAAIkB,GAAgB,SAASllB,EAAGwG,EAAG,CACjC,OAAA0e,GAAgB,OAAO,gBAClB,CAAE,UAAW,CAAA,aAAgB,OAAS,SAAUllB,EAAGwG,EAAG,CAAExG,EAAE,UAAYwG,CAAE,GACzE,SAAUxG,EAAGwG,EAAG,CAAE,QAASzG,KAAKyG,EAAO,OAAO,UAAU,eAAe,KAAKA,EAAGzG,CAAC,IAAGC,EAAED,CAAC,EAAIyG,EAAEzG,CAAC,IAC1FmlB,GAAcllB,EAAGwG,CAAC,CAC3B,EAEO,SAAS2e,GAAUnlB,EAAGwG,EAAG,CAC9B,GAAI,OAAOA,GAAM,YAAcA,IAAM,KACjC,MAAM,IAAI,UAAU,uBAAyB,OAAOA,CAAC,EAAI,+BAA+B,EAC5F0e,GAAcllB,EAAGwG,CAAC,EAClB,SAAS4e,GAAK,CAAE,KAAK,YAAcplB,CAAI,CACvCA,EAAE,UAAYwG,IAAM,KAAO,OAAO,OAAOA,CAAC,GAAK4e,EAAG,UAAY5e,EAAE,UAAW,IAAI4e,EACjF,CAqFO,SAASC,GAAUC,EAASC,EAAY/lB,EAAGgmB,EAAW,CAC3D,SAASC,EAAM3E,EAAO,CAAE,OAAOA,aAAiBthB,EAAIshB,EAAQ,IAAIthB,EAAE,SAAUgT,EAAS,CAAEA,EAAQsO,CAAK,CAAE,CAAE,CAAI,CAC5G,OAAO,IAAKthB,IAAMA,EAAI,UAAU,SAAUgT,EAASC,EAAQ,CACvD,SAASiT,EAAU5E,EAAO,CAAE,GAAI,CAAE6E,EAAKH,EAAU,KAAK1E,CAAK,CAAC,CAAE,OAAUvpB,EAAG,CAAEkb,EAAOlb,CAAC,EAAM,CAC3F,SAASquB,EAAS9E,EAAO,CAAE,GAAI,CAAE6E,EAAKH,EAAU,MAAS1E,CAAK,CAAC,CAAI,OAAQvpB,EAAG,CAAEkb,EAAOlb,CAAC,EAAM,CAC9F,SAASouB,EAAK/U,EAAQ,CAAEA,EAAO,KAAO4B,EAAQ5B,EAAO,KAAK,EAAI6U,EAAM7U,EAAO,KAAK,EAAE,KAAK8U,EAAWE,CAAQ,CAAI,CAC9GD,GAAMH,EAAYA,EAAU,MAAMF,EAASC,GAAc,CAAE,CAAA,GAAG,KAAI,CAAE,CAC1E,CAAG,CACH,CAEO,SAASM,GAAYP,EAASQ,EAAM,CACzC,IAAI3a,EAAI,CAAE,MAAO,EAAG,KAAM,UAAW,CAAE,GAAIlE,EAAE,CAAC,EAAI,EAAG,MAAMA,EAAE,CAAC,EAAG,OAAOA,EAAE,CAAC,CAAE,EAAI,KAAM,CAAA,EAAI,IAAK,CAAE,CAAA,EAAIV,EAAGY,EAAGF,EAAGhH,EAAI,OAAO,QAAQ,OAAO,UAAa,WAAa,SAAW,QAAQ,SAAS,EAC/L,OAAOA,EAAE,KAAO8lB,EAAK,CAAC,EAAG9lB,EAAE,MAAW8lB,EAAK,CAAC,EAAG9lB,EAAE,OAAY8lB,EAAK,CAAC,EAAG,OAAO,QAAW,aAAe9lB,EAAE,OAAO,QAAQ,EAAI,UAAW,CAAE,OAAO,IAAO,GAAGA,EAC1J,SAAS8lB,EAAKvuB,EAAG,CAAE,OAAO,SAAU2lB,EAAG,CAAE,OAAOwI,EAAK,CAACnuB,EAAG2lB,CAAC,CAAC,CAAI,CAAG,CAClE,SAASwI,EAAKK,EAAI,CACd,GAAIzf,EAAG,MAAM,IAAI,UAAU,iCAAiC,EAC5D,KAAOtG,IAAMA,EAAI,EAAG+lB,EAAG,CAAC,IAAM7a,EAAI,IAAKA,GAAG,GAAI,CAC1C,GAAI5E,EAAI,EAAGY,IAAMF,EAAI+e,EAAG,CAAC,EAAI,EAAI7e,EAAE,OAAY6e,EAAG,CAAC,EAAI7e,EAAE,SAAcF,EAAIE,EAAE,SAAcF,EAAE,KAAKE,CAAC,EAAG,GAAKA,EAAE,OAAS,EAAEF,EAAIA,EAAE,KAAKE,EAAG6e,EAAG,CAAC,CAAC,GAAG,KAAM,OAAO/e,EAE3J,OADIE,EAAI,EAAGF,IAAG+e,EAAK,CAACA,EAAG,CAAC,EAAI,EAAG/e,EAAE,KAAK,GAC9B+e,EAAG,CAAC,EAAC,CACT,IAAK,GAAG,IAAK,GAAG/e,EAAI+e,EAAI,MACxB,IAAK,GAAG,OAAA7a,EAAE,QAAgB,CAAE,MAAO6a,EAAG,CAAC,EAAG,KAAM,EAAK,EACrD,IAAK,GAAG7a,EAAE,QAAShE,EAAI6e,EAAG,CAAC,EAAGA,EAAK,CAAC,CAAC,EAAG,SACxC,IAAK,GAAGA,EAAK7a,EAAE,IAAI,MAAOA,EAAE,KAAK,IAAG,EAAI,SACxC,QACI,GAAMlE,EAAIkE,EAAE,KAAM,EAAAlE,EAAIA,EAAE,OAAS,GAAKA,EAAEA,EAAE,OAAS,CAAC,KAAO+e,EAAG,CAAC,IAAM,GAAKA,EAAG,CAAC,IAAM,GAAI,CAAE7a,EAAI,EAAG,QAAW,CAC5G,GAAI6a,EAAG,CAAC,IAAM,IAAM,CAAC/e,GAAM+e,EAAG,CAAC,EAAI/e,EAAE,CAAC,GAAK+e,EAAG,CAAC,EAAI/e,EAAE,CAAC,GAAK,CAAEkE,EAAE,MAAQ6a,EAAG,CAAC,EAAG,KAAQ,CACtF,GAAIA,EAAG,CAAC,IAAM,GAAK7a,EAAE,MAAQlE,EAAE,CAAC,EAAG,CAAEkE,EAAE,MAAQlE,EAAE,CAAC,EAAGA,EAAI+e,EAAI,KAAQ,CACrE,GAAI/e,GAAKkE,EAAE,MAAQlE,EAAE,CAAC,EAAG,CAAEkE,EAAE,MAAQlE,EAAE,CAAC,EAAGkE,EAAE,IAAI,KAAK6a,CAAE,EAAG,KAAQ,CAC/D/e,EAAE,CAAC,GAAGkE,EAAE,IAAI,IAAG,EACnBA,EAAE,KAAK,IAAK,EAAE,QACrB,CACD6a,EAAKF,EAAK,KAAKR,EAASna,CAAC,CAC5B,OAAQ5T,EAAG,CAAEyuB,EAAK,CAAC,EAAGzuB,CAAC,EAAG4P,EAAI,CAAE,QAAW,CAAEZ,EAAIU,EAAI,CAAI,CAC1D,GAAI+e,EAAG,CAAC,EAAI,EAAG,MAAMA,EAAG,CAAC,EAAG,MAAO,CAAE,MAAOA,EAAG,CAAC,EAAIA,EAAG,CAAC,EAAI,OAAQ,KAAM,GAC7E,CACH,CAkBO,SAASC,GAASxnB,EAAG,CAC1B,IAAIzF,EAAI,OAAO,QAAW,YAAc,OAAO,SAAU6G,EAAI7G,GAAKyF,EAAEzF,CAAC,EAAGI,EAAI,EAC5E,GAAIyG,EAAG,OAAOA,EAAE,KAAKpB,CAAC,EACtB,GAAIA,GAAK,OAAOA,EAAE,QAAW,SAAU,MAAO,CAC1C,KAAM,UAAY,CACd,OAAIA,GAAKrF,GAAKqF,EAAE,SAAQA,EAAI,QACrB,CAAE,MAAOA,GAAKA,EAAErF,GAAG,EAAG,KAAM,CAACqF,EACvC,CACP,EACE,MAAM,IAAI,UAAUzF,EAAI,0BAA4B,iCAAiC,CACvF,CAEO,SAASktB,GAAOznB,EAAGjH,EAAG,CAC3B,IAAIqI,EAAI,OAAO,QAAW,YAAcpB,EAAE,OAAO,QAAQ,EACzD,GAAI,CAACoB,EAAG,OAAOpB,EACf,IAAIrF,EAAIyG,EAAE,KAAKpB,CAAC,EAAGhH,EAAGoG,EAAK,CAAE,EAAEtG,EAC/B,GAAI,CACA,MAAQC,IAAM,QAAUA,KAAM,IAAM,EAAEC,EAAI2B,EAAE,KAAM,GAAE,MAAMyE,EAAG,KAAKpG,EAAE,KAAK,CAC5E,OACM0uB,EAAO,CAAE5uB,EAAI,CAAE,MAAO4uB,CAAO,CAAG,QAC/B,CACJ,GAAI,CACI1uB,GAAK,CAACA,EAAE,OAASoI,EAAIzG,EAAE,SAAYyG,EAAE,KAAKzG,CAAC,CAClD,QACO,CAAE,GAAI7B,EAAG,MAAMA,EAAE,KAAQ,CACpC,CACD,OAAOsG,CACT,CAkBO,SAASuoB,GAAczW,EAAID,EAAM2W,EAAM,CAC5C,GAAIA,GAAQ,UAAU,SAAW,EAAG,QAASjtB,EAAI,EAAGwD,EAAI8S,EAAK,OAAQ7R,EAAIzE,EAAIwD,EAAGxD,KACxEyE,GAAM,EAAEzE,KAAKsW,MACR7R,IAAIA,EAAK,MAAM,UAAU,MAAM,KAAK6R,EAAM,EAAGtW,CAAC,GACnDyE,EAAGzE,CAAC,EAAIsW,EAAKtW,CAAC,GAGtB,OAAOuW,EAAG,OAAO9R,GAAM,MAAM,UAAU,MAAM,KAAK6R,CAAI,CAAC,CACzD,CAEO,SAAS4W,GAAQnJ,EAAG,CACzB,OAAO,gBAAgBmJ,IAAW,KAAK,EAAInJ,EAAG,MAAQ,IAAImJ,GAAQnJ,CAAC,CACrE,CAEO,SAASoJ,GAAiBjB,EAASC,EAAYC,EAAW,CAC/D,GAAI,CAAC,OAAO,cAAe,MAAM,IAAI,UAAU,sCAAsC,EACrF,IAAIvlB,EAAIulB,EAAU,MAAMF,EAASC,GAAc,CAAA,CAAE,EAAG,EAAGpY,EAAI,GAC3D,OAAO,EAAI,OAAO,QAAQ,OAAO,eAAkB,WAAa,cAAgB,QAAQ,SAAS,EAAG4Y,EAAK,MAAM,EAAGA,EAAK,OAAO,EAAGA,EAAK,SAAUS,CAAW,EAAG,EAAE,OAAO,aAAa,EAAI,UAAY,CAAE,OAAO,IAAK,EAAI,EACtN,SAASA,EAAY,EAAG,CAAE,OAAO,SAAUrJ,EAAG,CAAE,OAAO,QAAQ,QAAQA,CAAC,EAAE,KAAK,EAAG1K,CAAM,CAAI,CAAG,CAC/F,SAASsT,EAAKvuB,EAAG+O,EAAG,CAAMtG,EAAEzI,CAAC,IAAK,EAAEA,CAAC,EAAI,SAAU2lB,EAAG,CAAE,OAAO,IAAI,QAAQ,SAAUpb,EAAGyE,EAAG,CAAE2G,EAAE,KAAK,CAAC3V,EAAG2lB,EAAGpb,EAAGyE,CAAC,CAAC,EAAI,GAAKigB,EAAOjvB,EAAG2lB,CAAC,EAAI,CAAI,EAAM5W,IAAG,EAAE/O,CAAC,EAAI+O,EAAE,EAAE/O,CAAC,CAAC,GAAM,CACxK,SAASivB,EAAOjvB,EAAG2lB,EAAG,CAAE,GAAI,CAAEwI,EAAK1lB,EAAEzI,CAAC,EAAE2lB,CAAC,CAAC,CAAE,OAAU5lB,EAAG,CAAEmvB,EAAOvZ,EAAE,CAAC,EAAE,CAAC,EAAG5V,CAAC,EAAM,CAClF,SAASouB,EAAKluB,EAAG,CAAEA,EAAE,iBAAiB6uB,GAAU,QAAQ,QAAQ7uB,EAAE,MAAM,CAAC,EAAE,KAAKkvB,EAASlU,CAAM,EAAIiU,EAAOvZ,EAAE,CAAC,EAAE,CAAC,EAAG1V,CAAC,CAAI,CACxH,SAASkvB,EAAQ7F,EAAO,CAAE2F,EAAO,OAAQ3F,CAAK,CAAI,CAClD,SAASrO,EAAOqO,EAAO,CAAE2F,EAAO,QAAS3F,CAAK,CAAI,CAClD,SAAS4F,EAAO,EAAGvJ,EAAG,CAAM,EAAEA,CAAC,EAAGhQ,EAAE,MAAK,EAAIA,EAAE,QAAQsZ,EAAOtZ,EAAE,CAAC,EAAE,CAAC,EAAGA,EAAE,CAAC,EAAE,CAAC,CAAC,CAAI,CACpF,CAQO,SAASyZ,GAAcnoB,EAAG,CAC/B,GAAI,CAAC,OAAO,cAAe,MAAM,IAAI,UAAU,sCAAsC,EACrF,IAAIoB,EAAIpB,EAAE,OAAO,aAAa,EAAGrF,EACjC,OAAOyG,EAAIA,EAAE,KAAKpB,CAAC,GAAKA,EAAI,OAAOwnB,IAAa,WAAaA,GAASxnB,CAAC,EAAIA,EAAE,OAAO,QAAQ,EAAC,EAAIrF,EAAI,CAAE,EAAE2sB,EAAK,MAAM,EAAGA,EAAK,OAAO,EAAGA,EAAK,QAAQ,EAAG3sB,EAAE,OAAO,aAAa,EAAI,UAAY,CAAE,OAAO,IAAK,EAAIA,GAC9M,SAAS2sB,EAAKvuB,EAAG,CAAE4B,EAAE5B,CAAC,EAAIiH,EAAEjH,CAAC,GAAK,SAAU2lB,EAAG,CAAE,OAAO,IAAI,QAAQ,SAAU3K,EAASC,EAAQ,CAAE0K,EAAI1e,EAAEjH,CAAC,EAAE2lB,CAAC,EAAGuJ,EAAOlU,EAASC,EAAQ0K,EAAE,KAAMA,EAAE,KAAK,CAAE,CAAE,CAAI,CAAG,CAChK,SAASuJ,EAAOlU,EAASC,EAAQzS,EAAGmd,EAAG,CAAE,QAAQ,QAAQA,CAAC,EAAE,KAAK,SAASA,EAAG,CAAE3K,EAAQ,CAAE,MAAO2K,EAAG,KAAMnd,CAAC,CAAE,CAAE,EAAIyS,CAAM,CAAI,CAC9H,CA2EuB,OAAO,iBAAoB,YAAa,gBCvUxD,SAASoU,EAAW/F,EAAO,CAC9B,OAAO,OAAOA,GAAU,UAC5B,CCFO,SAASgG,GAAiBC,EAAY,CACzC,IAAIC,EAAS,SAAUC,EAAU,CAC7B,MAAM,KAAKA,CAAQ,EACnBA,EAAS,MAAQ,IAAI,MAAK,EAAG,KACrC,EACQC,EAAWH,EAAWC,CAAM,EAChC,OAAAE,EAAS,UAAY,OAAO,OAAO,MAAM,SAAS,EAClDA,EAAS,UAAU,YAAcA,EAC1BA,CACX,CCRO,IAAIC,GAAsBL,GAAiB,SAAUE,EAAQ,CAChE,OAAO,SAAiCI,EAAQ,CAC5CJ,EAAO,IAAI,EACX,KAAK,QAAUI,EACTA,EAAO,OAAS;AAAA,EAA8CA,EAAO,IAAI,SAAUC,EAAK,EAAG,CAAE,OAAO,EAAI,EAAI,KAAOA,EAAI,SAAU,EAAG,EAAE,KAAK;AAAA,GAAM,EACjJ,GACN,KAAK,KAAO,sBACZ,KAAK,OAASD,CACtB,CACA,CAAC,ECVM,SAASE,GAAU/W,EAAK8T,EAAM,CACjC,GAAI9T,EAAK,CACL,IAAIsF,EAAQtF,EAAI,QAAQ8T,CAAI,EAC5B,GAAKxO,GAAStF,EAAI,OAAOsF,EAAO,CAAC,CACpC,CACL,CCDA,IAAI0R,GAAgB,UAAY,CAC5B,SAASA,EAAaC,EAAiB,CACnC,KAAK,gBAAkBA,EACvB,KAAK,OAAS,GACd,KAAK,WAAa,KAClB,KAAK,YAAc,IACtB,CACD,OAAAD,EAAa,UAAU,YAAc,UAAY,CAC7C,IAAIE,EAAKja,EAAIka,EAAKC,EACdP,EACJ,GAAI,CAAC,KAAK,OAAQ,CACd,KAAK,OAAS,GACd,IAAIQ,EAAa,KAAK,WACtB,GAAIA,EAEA,GADA,KAAK,WAAa,KACd,MAAM,QAAQA,CAAU,EACxB,GAAI,CACA,QAASC,EAAe5B,GAAS2B,CAAU,EAAGE,EAAiBD,EAAa,KAAI,EAAI,CAACC,EAAe,KAAMA,EAAiBD,EAAa,KAAI,EAAI,CAC5I,IAAIE,EAAWD,EAAe,MAC9BC,EAAS,OAAO,IAAI,CACvB,CACJ,OACMC,EAAO,CAAEP,EAAM,CAAE,MAAOO,CAAO,CAAG,QACjC,CACJ,GAAI,CACIF,GAAkB,CAACA,EAAe,OAASta,EAAKqa,EAAa,SAASra,EAAG,KAAKqa,CAAY,CACjG,QACO,CAAE,GAAIJ,EAAK,MAAMA,EAAI,KAAQ,CACxC,MAGDG,EAAW,OAAO,IAAI,EAG9B,IAAIK,EAAmB,KAAK,gBAC5B,GAAIpB,EAAWoB,CAAgB,EAC3B,GAAI,CACAA,GACH,OACM1wB,EAAG,CACN6vB,EAAS7vB,aAAa4vB,GAAsB5vB,EAAE,OAAS,CAACA,CAAC,CAC5D,CAEL,IAAI2wB,EAAc,KAAK,YACvB,GAAIA,EAAa,CACb,KAAK,YAAc,KACnB,GAAI,CACA,QAASC,EAAgBlC,GAASiC,CAAW,EAAGE,EAAkBD,EAAc,KAAI,EAAI,CAACC,EAAgB,KAAMA,EAAkBD,EAAc,KAAI,EAAI,CACnJ,IAAIE,EAAYD,EAAgB,MAChC,GAAI,CACAE,GAAcD,CAAS,CAC1B,OACMhB,EAAK,CACRD,EAASA,GAAgD,GACrDC,aAAeF,GACfC,EAAShB,GAAcA,GAAc,CAAA,EAAIF,GAAOkB,CAAM,CAAC,EAAGlB,GAAOmB,EAAI,MAAM,CAAC,EAG5ED,EAAO,KAAKC,CAAG,CAEtB,CACJ,CACJ,OACMkB,EAAO,CAAEb,EAAM,CAAE,MAAOa,CAAO,CAAG,QACjC,CACJ,GAAI,CACIH,GAAmB,CAACA,EAAgB,OAAST,EAAKQ,EAAc,SAASR,EAAG,KAAKQ,CAAa,CACrG,QACO,CAAE,GAAIT,EAAK,MAAMA,EAAI,KAAQ,CACxC,CACJ,CACD,GAAIN,EACA,MAAM,IAAID,GAAoBC,CAAM,CAE3C,CACT,EACIG,EAAa,UAAU,IAAM,SAAUiB,EAAU,CAC7C,IAAIhb,EACJ,GAAIgb,GAAYA,IAAa,KACzB,GAAI,KAAK,OACLF,GAAcE,CAAQ,MAErB,CACD,GAAIA,aAAoBjB,EAAc,CAClC,GAAIiB,EAAS,QAAUA,EAAS,WAAW,IAAI,EAC3C,OAEJA,EAAS,WAAW,IAAI,CAC3B,EACA,KAAK,aAAehb,EAAK,KAAK,eAAiB,MAAQA,IAAO,OAASA,EAAK,CAAE,GAAE,KAAKgb,CAAQ,CACjG,CAEb,EACIjB,EAAa,UAAU,WAAa,SAAUhQ,EAAQ,CAClD,IAAIqQ,EAAa,KAAK,WACtB,OAAOA,IAAerQ,GAAW,MAAM,QAAQqQ,CAAU,GAAKA,EAAW,SAASrQ,CAAM,CAChG,EACIgQ,EAAa,UAAU,WAAa,SAAUhQ,EAAQ,CAClD,IAAIqQ,EAAa,KAAK,WACtB,KAAK,WAAa,MAAM,QAAQA,CAAU,GAAKA,EAAW,KAAKrQ,CAAM,EAAGqQ,GAAcA,EAAa,CAACA,EAAYrQ,CAAM,EAAIA,CAClI,EACIgQ,EAAa,UAAU,cAAgB,SAAUhQ,EAAQ,CACrD,IAAIqQ,EAAa,KAAK,WAClBA,IAAerQ,EACf,KAAK,WAAa,KAEb,MAAM,QAAQqQ,CAAU,GAC7BN,GAAUM,EAAYrQ,CAAM,CAExC,EACIgQ,EAAa,UAAU,OAAS,SAAUiB,EAAU,CAChD,IAAIN,EAAc,KAAK,YACvBA,GAAeZ,GAAUY,EAAaM,CAAQ,EAC1CA,aAAoBjB,GACpBiB,EAAS,cAAc,IAAI,CAEvC,EACIjB,EAAa,MAAS,UAAY,CAC9B,IAAIkB,EAAQ,IAAIlB,EAChB,OAAAkB,EAAM,OAAS,GACRA,CACf,IACWlB,CACX,EAAC,EAEUmB,GAAqBnB,GAAa,MACtC,SAASoB,GAAe7H,EAAO,CAClC,OAAQA,aAAiByG,IACpBzG,GAAS,WAAYA,GAAS+F,EAAW/F,EAAM,MAAM,GAAK+F,EAAW/F,EAAM,GAAG,GAAK+F,EAAW/F,EAAM,WAAW,CACxH,CACA,SAASwH,GAAcD,EAAW,CAC1BxB,EAAWwB,CAAS,EACpBA,IAGAA,EAAU,YAAW,CAE7B,CC7IO,IAAIO,GAAS,CAChB,iBAAkB,KAClB,sBAAuB,KACvB,QAAS,OACT,sCAAuC,GACvC,yBAA0B,EAC9B,ECLWC,GAAkB,CACzB,WAAY,SAAU3R,EAASrC,EAAS,CAEpC,QADI+B,EAAO,CAAA,EACFkS,EAAK,EAAGA,EAAK,UAAU,OAAQA,IACpClS,EAAKkS,EAAK,CAAC,EAAI,UAAUA,CAAE,EAE/B,IAAIC,EAAWF,GAAgB,SAC/B,OAAwDE,GAAS,WACtDA,EAAS,WAAW,MAAMA,EAAU3C,GAAc,CAAClP,EAASrC,CAAO,EAAGqR,GAAOtP,CAAI,CAAC,CAAC,EAEvF,WAAW,MAAM,OAAQwP,GAAc,CAAClP,EAASrC,CAAO,EAAGqR,GAAOtP,CAAI,CAAC,CAAC,CAClF,EACD,aAAc,SAAUoS,EAAQ,CAC5B,IAAID,EAAWF,GAAgB,SAC/B,OAA6DE,GAAS,cAAiB,cAAcC,CAAM,CAC9G,EACD,SAAU,MACd,EChBO,SAASC,GAAqB5B,EAAK,CACtCwB,GAAgB,WAAW,UAAY,CAM/B,MAAMxB,CAElB,CAAK,CACL,CCZO,SAAS6B,IAAO,CAAA,CCEhB,SAASC,GAAaC,EAAI,CAgBzBA,GAER,CCXA,IAAIC,GAAc,SAAUrC,EAAQ,CAChC7B,GAAUkE,EAAYrC,CAAM,EAC5B,SAASqC,EAAWC,EAAa,CAC7B,IAAIC,EAAQvC,EAAO,KAAK,IAAI,GAAK,KACjC,OAAAuC,EAAM,UAAY,GACdD,GACAC,EAAM,YAAcD,EAChBX,GAAeW,CAAW,GAC1BA,EAAY,IAAIC,CAAK,GAIzBA,EAAM,YAAcC,GAEjBD,CACV,CACD,OAAAF,EAAW,OAAS,SAAUI,EAAMtD,EAAOuD,EAAU,CACjD,OAAO,IAAIC,GAAeF,EAAMtD,EAAOuD,CAAQ,CACvD,EACIL,EAAW,UAAU,KAAO,SAAUvI,EAAO,CACrC,KAAK,WAIL,KAAK,MAAMA,CAAK,CAE5B,EACIuI,EAAW,UAAU,MAAQ,SAAUhC,EAAK,CACpC,KAAK,YAIL,KAAK,UAAY,GACjB,KAAK,OAAOA,CAAG,EAE3B,EACIgC,EAAW,UAAU,SAAW,UAAY,CACpC,KAAK,YAIL,KAAK,UAAY,GACjB,KAAK,UAAS,EAE1B,EACIA,EAAW,UAAU,YAAc,UAAY,CACtC,KAAK,SACN,KAAK,UAAY,GACjBrC,EAAO,UAAU,YAAY,KAAK,IAAI,EACtC,KAAK,YAAc,KAE/B,EACIqC,EAAW,UAAU,MAAQ,SAAUvI,EAAO,CAC1C,KAAK,YAAY,KAAKA,CAAK,CACnC,EACIuI,EAAW,UAAU,OAAS,SAAUhC,EAAK,CACzC,GAAI,CACA,KAAK,YAAY,MAAMA,CAAG,CAC7B,QACO,CACJ,KAAK,YAAW,CACnB,CACT,EACIgC,EAAW,UAAU,UAAY,UAAY,CACzC,GAAI,CACA,KAAK,YAAY,UACpB,QACO,CACJ,KAAK,YAAW,CACnB,CACT,EACWA,CACX,EAAE9B,EAAY,EAEVqC,GAAQ,SAAS,UAAU,KAC/B,SAASC,GAAK/uB,EAAIwqB,EAAS,CACvB,OAAOsE,GAAM,KAAK9uB,EAAIwqB,CAAO,CACjC,CACA,IAAIwE,GAAoB,UAAY,CAChC,SAASA,EAAiBC,EAAiB,CACvC,KAAK,gBAAkBA,CAC1B,CACD,OAAAD,EAAiB,UAAU,KAAO,SAAUhJ,EAAO,CAC/C,IAAIiJ,EAAkB,KAAK,gBAC3B,GAAIA,EAAgB,KAChB,GAAI,CACAA,EAAgB,KAAKjJ,CAAK,CAC7B,OACMqF,EAAO,CACV6D,GAAqB7D,CAAK,CAC7B,CAEb,EACI2D,EAAiB,UAAU,MAAQ,SAAUzC,EAAK,CAC9C,IAAI0C,EAAkB,KAAK,gBAC3B,GAAIA,EAAgB,MAChB,GAAI,CACAA,EAAgB,MAAM1C,CAAG,CAC5B,OACMlB,EAAO,CACV6D,GAAqB7D,CAAK,CAC7B,MAGD6D,GAAqB3C,CAAG,CAEpC,EACIyC,EAAiB,UAAU,SAAW,UAAY,CAC9C,IAAIC,EAAkB,KAAK,gBAC3B,GAAIA,EAAgB,SAChB,GAAI,CACAA,EAAgB,SAAQ,CAC3B,OACM5D,EAAO,CACV6D,GAAqB7D,CAAK,CAC7B,CAEb,EACW2D,CACX,EAAC,EACGH,GAAkB,SAAU3C,EAAQ,CACpC7B,GAAUwE,EAAgB3C,CAAM,EAChC,SAAS2C,EAAeM,EAAgB9D,EAAOuD,EAAU,CACrD,IAAIH,EAAQvC,EAAO,KAAK,IAAI,GAAK,KAC7B+C,EACJ,GAAIlD,EAAWoD,CAAc,GAAK,CAACA,EAC/BF,EAAkB,CACd,KAAOE,GAAwE,OAC/E,MAAO9D,GAA6C,OACpD,SAAUuD,GAAsD,MAChF,MAEa,CACD,IAAIQ,EACAX,GAASX,GAAO,0BAChBsB,EAAY,OAAO,OAAOD,CAAc,EACxCC,EAAU,YAAc,UAAY,CAAE,OAAOX,EAAM,YAAa,GAChEQ,EAAkB,CACd,KAAME,EAAe,MAAQJ,GAAKI,EAAe,KAAMC,CAAS,EAChE,MAAOD,EAAe,OAASJ,GAAKI,EAAe,MAAOC,CAAS,EACnE,SAAUD,EAAe,UAAYJ,GAAKI,EAAe,SAAUC,CAAS,CAChG,GAGgBH,EAAkBE,CAEzB,CACD,OAAAV,EAAM,YAAc,IAAIO,GAAiBC,CAAe,EACjDR,CACV,CACD,OAAOI,CACX,EAAEN,EAAU,EAEZ,SAASW,GAAqB7D,EAAO,CAK7B8C,GAAqB9C,CAAK,CAElC,CACA,SAASgE,GAAoB9C,EAAK,CAC9B,MAAMA,CACV,CAKO,IAAImC,GAAiB,CACxB,OAAQ,GACR,KAAMN,GACN,MAAOiB,GACP,SAAUjB,EACd,ECtLWkB,GAAc,UAAY,CAAE,OAAQ,OAAO,QAAW,YAAc,OAAO,YAAe,gBAAoB,ECAlH,SAASC,GAAShjB,EAAG,CACxB,OAAOA,CACX,CCMO,SAASijB,GAAcC,EAAK,CAC/B,OAAIA,EAAI,SAAW,EACRF,GAEPE,EAAI,SAAW,EACRA,EAAI,CAAC,EAET,SAAehY,EAAO,CACzB,OAAOgY,EAAI,OAAO,SAAUC,EAAM1vB,EAAI,CAAE,OAAOA,EAAG0vB,CAAI,CAAI,EAAEjY,CAAK,CACzE,CACA,CCXA,IAAIkY,GAAc,UAAY,CAC1B,SAASA,EAAWC,EAAW,CACvBA,IACA,KAAK,WAAaA,EAEzB,CACD,OAAAD,EAAW,UAAU,KAAO,SAAUE,EAAU,CAC5C,IAAIP,EAAa,IAAIK,EACrB,OAAAL,EAAW,OAAS,KACpBA,EAAW,SAAWO,EACfP,CACf,EACIK,EAAW,UAAU,UAAY,SAAUR,EAAgB9D,EAAOuD,EAAU,CACxE,IAAIH,EAAQ,KACRqB,EAAaC,GAAaZ,CAAc,EAAIA,EAAiB,IAAIN,GAAeM,EAAgB9D,EAAOuD,CAAQ,EACnH,OAAAP,GAAa,UAAY,CACrB,IAAI3b,EAAK+b,EAAOoB,EAAWnd,EAAG,SAAUsI,EAAStI,EAAG,OACpDod,EAAW,IAAID,EAEPA,EAAS,KAAKC,EAAY9U,CAAM,EAClCA,EAEMyT,EAAM,WAAWqB,CAAU,EAE3BrB,EAAM,cAAcqB,CAAU,CAAC,CACvD,CAAS,EACMA,CACf,EACIH,EAAW,UAAU,cAAgB,SAAUK,EAAM,CACjD,GAAI,CACA,OAAO,KAAK,WAAWA,CAAI,CAC9B,OACMzD,EAAK,CACRyD,EAAK,MAAMzD,CAAG,CACjB,CACT,EACIoD,EAAW,UAAU,QAAU,SAAUhB,EAAMsB,EAAa,CACxD,IAAIxB,EAAQ,KACZ,OAAAwB,EAAcC,GAAeD,CAAW,EACjC,IAAIA,EAAY,SAAUvY,EAASC,EAAQ,CAC9C,IAAImY,EAAa,IAAIjB,GAAe,CAChC,KAAM,SAAU7I,EAAO,CACnB,GAAI,CACA2I,EAAK3I,CAAK,CACb,OACMuG,EAAK,CACR5U,EAAO4U,CAAG,EACVuD,EAAW,YAAW,CACzB,CACJ,EACD,MAAOnY,EACP,SAAUD,CAC1B,CAAa,EACD+W,EAAM,UAAUqB,CAAU,CACtC,CAAS,CACT,EACIH,EAAW,UAAU,WAAa,SAAUG,EAAY,CACpD,IAAIpd,EACJ,OAAQA,EAAK,KAAK,UAAY,MAAQA,IAAO,OAAS,OAASA,EAAG,UAAUod,CAAU,CAC9F,EACIH,EAAW,UAAUQ,EAAiB,EAAI,UAAY,CAClD,OAAO,IACf,EACIR,EAAW,UAAU,KAAO,UAAY,CAEpC,QADIS,EAAa,CAAA,EACRpC,EAAK,EAAGA,EAAK,UAAU,OAAQA,IACpCoC,EAAWpC,CAAE,EAAI,UAAUA,CAAE,EAEjC,OAAOwB,GAAcY,CAAU,EAAE,IAAI,CAC7C,EACIT,EAAW,UAAU,UAAY,SAAUM,EAAa,CACpD,IAAIxB,EAAQ,KACZ,OAAAwB,EAAcC,GAAeD,CAAW,EACjC,IAAIA,EAAY,SAAUvY,EAASC,EAAQ,CAC9C,IAAIqO,EACJyI,EAAM,UAAU,SAAUliB,EAAG,CAAE,OAAQyZ,EAAQzZ,CAAK,EAAE,SAAUggB,EAAK,CAAE,OAAO5U,EAAO4U,CAAG,GAAM,UAAY,CAAE,OAAO7U,EAAQsO,CAAK,CAAE,CAAE,CAChJ,CAAS,CACT,EACI2J,EAAW,OAAS,SAAUC,EAAW,CACrC,OAAO,IAAID,EAAWC,CAAS,CACvC,EACWD,CACX,EAAC,EAED,SAASO,GAAeD,EAAa,CACjC,IAAIvd,EACJ,OAAQA,EAAKud,GAA+DnC,GAAO,WAAa,MAAQpb,IAAO,OAASA,EAAK,OACjI,CACA,SAAS2d,GAAWrK,EAAO,CACvB,OAAOA,GAAS+F,EAAW/F,EAAM,IAAI,GAAK+F,EAAW/F,EAAM,KAAK,GAAK+F,EAAW/F,EAAM,QAAQ,CAClG,CACA,SAAS+J,GAAa/J,EAAO,CACzB,OAAQA,GAASA,aAAiBuI,IAAgB8B,GAAWrK,CAAK,GAAK6H,GAAe7H,CAAK,CAC/F,CCnGO,SAASsK,GAAQtV,EAAQ,CAC5B,OAAO+Q,EAA2D/Q,GAAO,IAAI,CACjF,CACO,SAASuV,GAAQC,EAAM,CAC1B,OAAO,SAAUxV,EAAQ,CACrB,GAAIsV,GAAQtV,CAAM,EACd,OAAOA,EAAO,KAAK,SAAUyV,EAAc,CACvC,GAAI,CACA,OAAOD,EAAKC,EAAc,IAAI,CACjC,OACMlE,EAAK,CACR,KAAK,MAAMA,CAAG,CACjB,CACjB,CAAa,EAEL,MAAM,IAAI,UAAU,wCAAwC,CACpE,CACA,CChBO,SAASmE,GAAyBlC,EAAamC,EAAQC,EAAYC,EAASC,EAAY,CAC3F,OAAO,IAAIC,GAAmBvC,EAAamC,EAAQC,EAAYC,EAASC,CAAU,CACtF,CACA,IAAIC,GAAsB,SAAU7E,EAAQ,CACxC7B,GAAU0G,EAAoB7E,CAAM,EACpC,SAAS6E,EAAmBvC,EAAamC,EAAQC,EAAYC,EAASC,EAAYE,EAAmB,CACjG,IAAIvC,EAAQvC,EAAO,KAAK,KAAMsC,CAAW,GAAK,KAC9C,OAAAC,EAAM,WAAaqC,EACnBrC,EAAM,kBAAoBuC,EAC1BvC,EAAM,MAAQkC,EACR,SAAU3K,EAAO,CACf,GAAI,CACA2K,EAAO3K,CAAK,CACf,OACMuG,EAAK,CACRiC,EAAY,MAAMjC,CAAG,CACxB,CACJ,EACCL,EAAO,UAAU,MACvBuC,EAAM,OAASoC,EACT,SAAUtE,EAAK,CACb,GAAI,CACAsE,EAAQtE,CAAG,CACd,OACMA,EAAK,CACRiC,EAAY,MAAMjC,CAAG,CACxB,QACO,CACJ,KAAK,YAAW,CACnB,CACJ,EACCL,EAAO,UAAU,OACvBuC,EAAM,UAAYmC,EACZ,UAAY,CACV,GAAI,CACAA,GACH,OACMrE,EAAK,CACRiC,EAAY,MAAMjC,CAAG,CACxB,QACO,CACJ,KAAK,YAAW,CACnB,CACJ,EACCL,EAAO,UAAU,UAChBuC,CACV,CACD,OAAAsC,EAAmB,UAAU,YAAc,UAAY,CACnD,IAAIre,EACJ,GAAI,CAAC,KAAK,mBAAqB,KAAK,kBAAiB,EAAI,CACrD,IAAIue,EAAW,KAAK,OACpB/E,EAAO,UAAU,YAAY,KAAK,IAAI,EACtC,CAAC+E,KAAcve,EAAK,KAAK,cAAgB,MAAQA,IAAO,QAAkBA,EAAG,KAAK,IAAI,EACzF,CACT,EACWqe,CACX,EAAExC,EAAU,ECzDD2C,GAA0BlF,GAAiB,SAAUE,EAAQ,CACpE,OAAO,UAAuC,CAC1CA,EAAO,IAAI,EACX,KAAK,KAAO,0BACZ,KAAK,QAAU,qBACvB,CACA,CAAC,ECDGiF,GAAW,SAAUjF,EAAQ,CAC7B7B,GAAU8G,EAASjF,CAAM,EACzB,SAASiF,GAAU,CACf,IAAI1C,EAAQvC,EAAO,KAAK,IAAI,GAAK,KACjC,OAAAuC,EAAM,OAAS,GACfA,EAAM,iBAAmB,KACzBA,EAAM,UAAY,GAClBA,EAAM,UAAY,GAClBA,EAAM,SAAW,GACjBA,EAAM,YAAc,KACbA,CACV,CACD,OAAA0C,EAAQ,UAAU,KAAO,SAAUtB,EAAU,CACzC,IAAIuB,EAAU,IAAIC,GAAiB,KAAM,IAAI,EAC7C,OAAAD,EAAQ,SAAWvB,EACZuB,CACf,EACID,EAAQ,UAAU,eAAiB,UAAY,CAC3C,GAAI,KAAK,OACL,MAAM,IAAID,EAEtB,EACIC,EAAQ,UAAU,KAAO,SAAUnL,EAAO,CACtC,IAAIyI,EAAQ,KACZJ,GAAa,UAAY,CACrB,IAAI1B,EAAKja,EAET,GADA+b,EAAM,eAAc,EAChB,CAACA,EAAM,UAAW,CACbA,EAAM,mBACPA,EAAM,iBAAmB,MAAM,KAAKA,EAAM,SAAS,GAEvD,GAAI,CACA,QAAS5B,EAAK1B,GAASsD,EAAM,gBAAgB,EAAG6C,EAAKzE,EAAG,KAAM,EAAE,CAACyE,EAAG,KAAMA,EAAKzE,EAAG,OAAQ,CACtF,IAAI0E,EAAWD,EAAG,MAClBC,EAAS,KAAKvL,CAAK,CACtB,CACJ,OACMkH,EAAO,CAAEP,EAAM,CAAE,MAAOO,CAAO,CAAG,QACjC,CACJ,GAAI,CACIoE,GAAM,CAACA,EAAG,OAAS5e,EAAKma,EAAG,SAASna,EAAG,KAAKma,CAAE,CACrD,QACO,CAAE,GAAIF,EAAK,MAAMA,EAAI,KAAQ,CACxC,CACJ,CACb,CAAS,CACT,EACIwE,EAAQ,UAAU,MAAQ,SAAU5E,EAAK,CACrC,IAAIkC,EAAQ,KACZJ,GAAa,UAAY,CAErB,GADAI,EAAM,eAAc,EAChB,CAACA,EAAM,UAAW,CAClBA,EAAM,SAAWA,EAAM,UAAY,GACnCA,EAAM,YAAclC,EAEpB,QADIiF,EAAY/C,EAAM,UACf+C,EAAU,QACbA,EAAU,MAAK,EAAG,MAAMjF,CAAG,CAElC,CACb,CAAS,CACT,EACI4E,EAAQ,UAAU,SAAW,UAAY,CACrC,IAAI1C,EAAQ,KACZJ,GAAa,UAAY,CAErB,GADAI,EAAM,eAAc,EAChB,CAACA,EAAM,UAAW,CAClBA,EAAM,UAAY,GAElB,QADI+C,EAAY/C,EAAM,UACf+C,EAAU,QACbA,EAAU,QAAQ,UAEzB,CACb,CAAS,CACT,EACIL,EAAQ,UAAU,YAAc,UAAY,CACxC,KAAK,UAAY,KAAK,OAAS,GAC/B,KAAK,UAAY,KAAK,iBAAmB,IACjD,EACI,OAAO,eAAeA,EAAQ,UAAW,WAAY,CACjD,IAAK,UAAY,CACb,IAAIze,EACJ,QAASA,EAAK,KAAK,aAAe,MAAQA,IAAO,OAAS,OAASA,EAAG,QAAU,CACnF,EACD,WAAY,GACZ,aAAc,EACtB,CAAK,EACDye,EAAQ,UAAU,cAAgB,SAAUrB,EAAY,CACpD,YAAK,eAAc,EACZ5D,EAAO,UAAU,cAAc,KAAK,KAAM4D,CAAU,CACnE,EACIqB,EAAQ,UAAU,WAAa,SAAUrB,EAAY,CACjD,YAAK,eAAc,EACnB,KAAK,wBAAwBA,CAAU,EAChC,KAAK,gBAAgBA,CAAU,CAC9C,EACIqB,EAAQ,UAAU,gBAAkB,SAAUrB,EAAY,CACtD,IAAIrB,EAAQ,KACR/b,EAAK,KAAM+e,EAAW/e,EAAG,SAAUgf,EAAYhf,EAAG,UAAW8e,EAAY9e,EAAG,UAChF,OAAI+e,GAAYC,EACL9D,IAEX,KAAK,iBAAmB,KACxB4D,EAAU,KAAK1B,CAAU,EAClB,IAAIrD,GAAa,UAAY,CAChCgC,EAAM,iBAAmB,KACzBjC,GAAUgF,EAAW1B,CAAU,CAC3C,CAAS,EACT,EACIqB,EAAQ,UAAU,wBAA0B,SAAUrB,EAAY,CAC9D,IAAIpd,EAAK,KAAM+e,EAAW/e,EAAG,SAAUif,EAAcjf,EAAG,YAAagf,EAAYhf,EAAG,UAChF+e,EACA3B,EAAW,MAAM6B,CAAW,EAEvBD,GACL5B,EAAW,SAAQ,CAE/B,EACIqB,EAAQ,UAAU,aAAe,UAAY,CACzC,IAAI7B,EAAa,IAAIK,GACrB,OAAAL,EAAW,OAAS,KACbA,CACf,EACI6B,EAAQ,OAAS,SAAU3C,EAAaxT,EAAQ,CAC5C,OAAO,IAAIqW,GAAiB7C,EAAaxT,CAAM,CACvD,EACWmW,CACX,EAAExB,EAAU,EAER0B,GAAoB,SAAUnF,EAAQ,CACtC7B,GAAUgH,EAAkBnF,CAAM,EAClC,SAASmF,EAAiB7C,EAAaxT,EAAQ,CAC3C,IAAIyT,EAAQvC,EAAO,KAAK,IAAI,GAAK,KACjC,OAAAuC,EAAM,YAAcD,EACpBC,EAAM,OAASzT,EACRyT,CACV,CACD,OAAA4C,EAAiB,UAAU,KAAO,SAAUrL,EAAO,CAC/C,IAAItT,EAAIma,GACPA,GAAMna,EAAK,KAAK,eAAiB,MAAQA,IAAO,OAAS,OAASA,EAAG,QAAU,MAAQma,IAAO,QAAkBA,EAAG,KAAKna,EAAIsT,CAAK,CAC1I,EACIqL,EAAiB,UAAU,MAAQ,SAAU9E,EAAK,CAC9C,IAAI7Z,EAAIma,GACPA,GAAMna,EAAK,KAAK,eAAiB,MAAQA,IAAO,OAAS,OAASA,EAAG,SAAW,MAAQma,IAAO,QAAkBA,EAAG,KAAKna,EAAI6Z,CAAG,CACzI,EACI8E,EAAiB,UAAU,SAAW,UAAY,CAC9C,IAAI3e,EAAIma,GACPA,GAAMna,EAAK,KAAK,eAAiB,MAAQA,IAAO,OAAS,OAASA,EAAG,YAAc,MAAQma,IAAO,QAAkBA,EAAG,KAAKna,CAAE,CACvI,EACI2e,EAAiB,UAAU,WAAa,SAAUvB,EAAY,CAC1D,IAAIpd,EAAIma,EACR,OAAQA,GAAMna,EAAK,KAAK,UAAY,MAAQA,IAAO,OAAS,OAASA,EAAG,UAAUod,CAAU,KAAO,MAAQjD,IAAO,OAASA,EAAKe,EACxI,EACWyD,CACX,EAAEF,EAAO,EC7JLS,GAAmB,SAAU1F,EAAQ,CACrC7B,GAAUuH,EAAiB1F,CAAM,EACjC,SAAS0F,EAAgBC,EAAQ,CAC7B,IAAIpD,EAAQvC,EAAO,KAAK,IAAI,GAAK,KACjC,OAAAuC,EAAM,OAASoD,EACRpD,CACV,CACD,cAAO,eAAemD,EAAgB,UAAW,QAAS,CACtD,IAAK,UAAY,CACb,OAAO,KAAK,UACf,EACD,WAAY,GACZ,aAAc,EACtB,CAAK,EACDA,EAAgB,UAAU,WAAa,SAAU9B,EAAY,CACzD,IAAIgC,EAAe5F,EAAO,UAAU,WAAW,KAAK,KAAM4D,CAAU,EACpE,OAACgC,EAAa,QAAUhC,EAAW,KAAK,KAAK,MAAM,EAC5CgC,CACf,EACIF,EAAgB,UAAU,SAAW,UAAY,CAC7C,IAAIlf,EAAK,KAAM+e,EAAW/e,EAAG,SAAUif,EAAcjf,EAAG,YAAamf,EAASnf,EAAG,OACjF,GAAI+e,EACA,MAAME,EAEV,YAAK,eAAc,EACZE,CACf,EACID,EAAgB,UAAU,KAAO,SAAU5L,EAAO,CAC9CkG,EAAO,UAAU,KAAK,KAAK,KAAO,KAAK,OAASlG,EACxD,EACW4L,CACX,EAAET,EAAO,ECjCEY,GAAwB,CAC/B,IAAK,UAAY,CACb,OAAQA,GAAsB,UAAY,MAAM,IAAG,CACtD,EACD,SAAU,MACd,ECFIC,GAAiB,SAAU9F,EAAQ,CACnC7B,GAAU2H,EAAe9F,CAAM,EAC/B,SAAS8F,EAAcC,EAAaC,EAAaC,EAAoB,CAC7DF,IAAgB,SAAUA,EAAc,KACxCC,IAAgB,SAAUA,EAAc,KACxCC,IAAuB,SAAUA,EAAqBJ,IAC1D,IAAItD,EAAQvC,EAAO,KAAK,IAAI,GAAK,KACjC,OAAAuC,EAAM,YAAcwD,EACpBxD,EAAM,YAAcyD,EACpBzD,EAAM,mBAAqB0D,EAC3B1D,EAAM,QAAU,GAChBA,EAAM,oBAAsB,GAC5BA,EAAM,oBAAsByD,IAAgB,IAC5CzD,EAAM,YAAc,KAAK,IAAI,EAAGwD,CAAW,EAC3CxD,EAAM,YAAc,KAAK,IAAI,EAAGyD,CAAW,EACpCzD,CACV,CACD,OAAAuD,EAAc,UAAU,KAAO,SAAUhM,EAAO,CAC5C,IAAItT,EAAK,KAAMgf,EAAYhf,EAAG,UAAW0f,EAAU1f,EAAG,QAAS2f,EAAsB3f,EAAG,oBAAqByf,EAAqBzf,EAAG,mBAAoBwf,EAAcxf,EAAG,YACrKgf,IACDU,EAAQ,KAAKpM,CAAK,EAClB,CAACqM,GAAuBD,EAAQ,KAAKD,EAAmB,IAAG,EAAKD,CAAW,GAE/E,KAAK,YAAW,EAChBhG,EAAO,UAAU,KAAK,KAAK,KAAMlG,CAAK,CAC9C,EACIgM,EAAc,UAAU,WAAa,SAAUlC,EAAY,CACvD,KAAK,eAAc,EACnB,KAAK,YAAW,EAIhB,QAHIgC,EAAe,KAAK,gBAAgBhC,CAAU,EAC9Cpd,EAAK,KAAM2f,EAAsB3f,EAAG,oBAAqB0f,EAAU1f,EAAG,QACtE4f,EAAOF,EAAQ,QACV9zB,EAAI,EAAGA,EAAIg0B,EAAK,QAAU,CAACxC,EAAW,OAAQxxB,GAAK+zB,EAAsB,EAAI,EAClFvC,EAAW,KAAKwC,EAAKh0B,CAAC,CAAC,EAE3B,YAAK,wBAAwBwxB,CAAU,EAChCgC,CACf,EACIE,EAAc,UAAU,YAAc,UAAY,CAC9C,IAAItf,EAAK,KAAMuf,EAAcvf,EAAG,YAAayf,EAAqBzf,EAAG,mBAAoB0f,EAAU1f,EAAG,QAAS2f,EAAsB3f,EAAG,oBACpI6f,GAAsBF,EAAsB,EAAI,GAAKJ,EAEzD,GADAA,EAAc,KAAYM,EAAqBH,EAAQ,QAAUA,EAAQ,OAAO,EAAGA,EAAQ,OAASG,CAAkB,EAClH,CAACF,EAAqB,CAGtB,QAFIxY,EAAMsY,EAAmB,MACzBtQ,EAAO,EACFvjB,EAAI,EAAGA,EAAI8zB,EAAQ,QAAUA,EAAQ9zB,CAAC,GAAKub,EAAKvb,GAAK,EAC1DujB,EAAOvjB,EAEXujB,GAAQuQ,EAAQ,OAAO,EAAGvQ,EAAO,CAAC,CACrC,CACT,EACWmQ,CACX,EAAEb,EAAO,ECrDLqB,GAAU,SAAUtG,EAAQ,CAC5B7B,GAAUmI,EAAQtG,CAAM,EACxB,SAASsG,EAAOC,EAAWC,EAAM,CAC7B,OAAOxG,EAAO,KAAK,IAAI,GAAK,IAC/B,CACD,OAAAsG,EAAO,UAAU,SAAW,SAAUve,EAAO0e,EAAO,CAEhD,OAAO,IACf,EACWH,CACX,EAAE/F,EAAY,ECXHmG,GAAmB,CAC1B,YAAa,SAAUxW,EAASrC,EAAS,CAErC,QADI+B,EAAO,CAAA,EACFkS,EAAK,EAAGA,EAAK,UAAU,OAAQA,IACpClS,EAAKkS,EAAK,CAAC,EAAI,UAAUA,CAAE,EAE/B,IAAIC,EAAW2E,GAAiB,SAChC,OAAwD3E,GAAS,YACtDA,EAAS,YAAY,MAAMA,EAAU3C,GAAc,CAAClP,EAASrC,CAAO,EAAGqR,GAAOtP,CAAI,CAAC,CAAC,EAExF,YAAY,MAAM,OAAQwP,GAAc,CAAClP,EAASrC,CAAO,EAAGqR,GAAOtP,CAAI,CAAC,CAAC,CACnF,EACD,cAAe,SAAUoS,EAAQ,CAC7B,IAAID,EAAW2E,GAAiB,SAChC,OAA6D3E,GAAS,eAAkB,eAAeC,CAAM,CAChH,EACD,SAAU,MACd,ECdI2E,GAAe,SAAU3G,EAAQ,CACjC7B,GAAUwI,EAAa3G,CAAM,EAC7B,SAAS2G,EAAYJ,EAAWC,EAAM,CAClC,IAAIjE,EAAQvC,EAAO,KAAK,KAAMuG,EAAWC,CAAI,GAAK,KAClD,OAAAjE,EAAM,UAAYgE,EAClBhE,EAAM,KAAOiE,EACbjE,EAAM,QAAU,GACTA,CACV,CACD,OAAAoE,EAAY,UAAU,SAAW,SAAU5e,EAAO0e,EAAO,CACrD,IAAIjgB,EAEJ,GADIigB,IAAU,SAAUA,EAAQ,GAC5B,KAAK,OACL,OAAO,KAEX,KAAK,MAAQ1e,EACb,IAAI6e,EAAK,KAAK,GACVL,EAAY,KAAK,UACrB,OAAIK,GAAM,OACN,KAAK,GAAK,KAAK,eAAeL,EAAWK,EAAIH,CAAK,GAEtD,KAAK,QAAU,GACf,KAAK,MAAQA,EACb,KAAK,IAAMjgB,EAAK,KAAK,MAAQ,MAAQA,IAAO,OAASA,EAAK,KAAK,eAAe+f,EAAW,KAAK,GAAIE,CAAK,EAChG,IACf,EACIE,EAAY,UAAU,eAAiB,SAAUJ,EAAWM,EAAKJ,EAAO,CACpE,OAAIA,IAAU,SAAUA,EAAQ,GACzBC,GAAiB,YAAYH,EAAU,MAAM,KAAKA,EAAW,IAAI,EAAGE,CAAK,CACxF,EACIE,EAAY,UAAU,eAAiB,SAAUG,EAAYF,EAAIH,EAAO,CAEpE,GADIA,IAAU,SAAUA,EAAQ,GAC5BA,GAAS,MAAQ,KAAK,QAAUA,GAAS,KAAK,UAAY,GAC1D,OAAOG,EAEPA,GAAM,MACNF,GAAiB,cAAcE,CAAE,CAG7C,EACID,EAAY,UAAU,QAAU,SAAU5e,EAAO0e,EAAO,CACpD,GAAI,KAAK,OACL,OAAO,IAAI,MAAM,8BAA8B,EAEnD,KAAK,QAAU,GACf,IAAItH,EAAQ,KAAK,SAASpX,EAAO0e,CAAK,EACtC,GAAItH,EACA,OAAOA,EAEF,KAAK,UAAY,IAAS,KAAK,IAAM,OAC1C,KAAK,GAAK,KAAK,eAAe,KAAK,UAAW,KAAK,GAAI,IAAI,EAEvE,EACIwH,EAAY,UAAU,SAAW,SAAU5e,EAAOgf,EAAQ,CACtD,IAAIC,EAAU,GACVC,EACJ,GAAI,CACA,KAAK,KAAKlf,CAAK,CAClB,OACMxX,EAAG,CACNy2B,EAAU,GACVC,EAAa12B,GAAQ,IAAI,MAAM,oCAAoC,CACtE,CACD,GAAIy2B,EACA,YAAK,YAAW,EACTC,CAEnB,EACIN,EAAY,UAAU,YAAc,UAAY,CAC5C,GAAI,CAAC,KAAK,OAAQ,CACd,IAAIngB,EAAK,KAAMogB,EAAKpgB,EAAG,GAAI+f,EAAY/f,EAAG,UACtCuT,EAAUwM,EAAU,QACxB,KAAK,KAAO,KAAK,MAAQ,KAAK,UAAY,KAC1C,KAAK,QAAU,GACfjG,GAAUvG,EAAS,IAAI,EACnB6M,GAAM,OACN,KAAK,GAAK,KAAK,eAAeL,EAAWK,EAAI,IAAI,GAErD,KAAK,MAAQ,KACb5G,EAAO,UAAU,YAAY,KAAK,IAAI,CACzC,CACT,EACW2G,CACX,EAAEL,EAAM,ECtFJY,GAAa,UAAY,CACzB,SAASA,EAAUC,EAAqBxZ,EAAK,CACrCA,IAAQ,SAAUA,EAAMuZ,EAAU,KACtC,KAAK,oBAAsBC,EAC3B,KAAK,IAAMxZ,CACd,CACD,OAAAuZ,EAAU,UAAU,SAAW,SAAUV,EAAMC,EAAO1e,EAAO,CACzD,OAAI0e,IAAU,SAAUA,EAAQ,GACzB,IAAI,KAAK,oBAAoB,KAAMD,CAAI,EAAE,SAASze,EAAO0e,CAAK,CAC7E,EACIS,EAAU,IAAMrB,GAAsB,IAC/BqB,CACX,ICXIE,GAAkB,SAAUpH,EAAQ,CACpC7B,GAAUiJ,EAAgBpH,CAAM,EAChC,SAASoH,EAAeC,EAAiB1Z,EAAK,CACtCA,IAAQ,SAAUA,EAAMuZ,GAAU,KACtC,IAAI3E,EAAQvC,EAAO,KAAK,KAAMqH,EAAiB1Z,CAAG,GAAK,KACvD,OAAA4U,EAAM,QAAU,GAChBA,EAAM,QAAU,GACTA,CACV,CACD,OAAA6E,EAAe,UAAU,MAAQ,SAAUE,EAAQ,CAC/C,IAAIvN,EAAU,KAAK,QACnB,GAAI,KAAK,QAAS,CACdA,EAAQ,KAAKuN,CAAM,EACnB,MACH,CACD,IAAInI,EACJ,KAAK,QAAU,GACf,EACI,IAAKA,EAAQmI,EAAO,QAAQA,EAAO,MAAOA,EAAO,KAAK,EAClD,YAEEA,EAASvN,EAAQ,SAE3B,GADA,KAAK,QAAU,GACXoF,EAAO,CACP,KAAQmI,EAASvN,EAAQ,SACrBuN,EAAO,YAAW,EAEtB,MAAMnI,CACT,CACT,EACWiI,CACX,EAAEF,EAAS,EC/BAK,GAAiB,IAAIH,GAAeT,EAAW,EAC/Ca,GAAQD,GCFRE,GAAQ,IAAIhE,GAAW,SAAUG,EAAY,CAAE,OAAOA,EAAW,SAAU,EAAG,ECAlF,SAAS8D,GAAY5N,EAAO,CAC/B,OAAOA,GAAS+F,EAAW/F,EAAM,QAAQ,CAC7C,CCDA,SAASnE,GAAKpM,EAAK,CACf,OAAOA,EAAIA,EAAI,OAAS,CAAC,CAC7B,CACO,SAASoe,GAAkB/X,EAAM,CACpC,OAAOiQ,EAAWlK,GAAK/F,CAAI,CAAC,EAAIA,EAAK,IAAK,EAAG,MACjD,CACO,SAASgY,GAAahY,EAAM,CAC/B,OAAO8X,GAAY/R,GAAK/F,CAAI,CAAC,EAAIA,EAAK,IAAK,EAAG,MAClD,CACO,SAASiY,GAAUjY,EAAMkY,EAAc,CAC1C,OAAO,OAAOnS,GAAK/F,CAAI,GAAM,SAAWA,EAAK,IAAK,EAAGkY,CACzD,CCbO,IAAIC,GAAe,SAAU1nB,EAAG,CAAE,OAAOA,GAAK,OAAOA,EAAE,QAAW,UAAY,OAAOA,GAAM,UAAW,ECCtG,SAAS2nB,GAAUlO,EAAO,CAC7B,OAAO+F,EAAyD/F,GAAM,IAAI,CAC9E,CCDO,SAASmO,GAAoB1c,EAAO,CACvC,OAAOsU,EAAWtU,EAAM0Y,EAAiB,CAAC,CAC9C,CCHO,SAASiE,GAAgB/Z,EAAK,CACjC,OAAO,OAAO,eAAiB0R,EAAqD1R,IAAI,OAAO,aAAa,CAAC,CACjH,CCHO,SAASga,GAAiC5c,EAAO,CACpD,OAAO,IAAI,UAAU,iBAAmBA,IAAU,MAAQ,OAAOA,GAAU,SAAW,oBAAsB,IAAMA,EAAQ,KAAO,0HAA0H,CAC/P,CCFO,SAAS6c,IAAoB,CAChC,OAAI,OAAO,QAAW,YAAc,CAAC,OAAO,SACjC,aAEJ,OAAO,QAClB,CACO,IAAIha,GAAWga,GAAmB,ECJlC,SAASC,GAAW9c,EAAO,CAC9B,OAAOsU,EAAyDtU,IAAM+c,EAAe,CAAC,CAC1F,CCFO,SAASC,GAAmCC,EAAgB,CAC/D,OAAOjJ,GAAiB,KAAM,UAAW,UAAgD,CACrF,IAAIzT,EAAQtF,EAAIsT,EAAO2O,EACvB,OAAO5J,GAAY,KAAM,SAAU8B,EAAI,CACnC,OAAQA,EAAG,MAAK,CACZ,IAAK,GACD7U,EAAS0c,EAAe,YACxB7H,EAAG,MAAQ,EACf,IAAK,GACDA,EAAG,KAAK,KAAK,CAAC,EAAC,CAAI,EAAG,EAAE,CAAC,EACzBA,EAAG,MAAQ,EACf,IAAK,GAED,MAAO,CAAC,EAAGrB,GAAQxT,EAAO,KAAI,CAAE,CAAC,EACrC,IAAK,GAED,OADAtF,EAAKma,EAAG,KAAI,EAAI7G,EAAQtT,EAAG,MAAOiiB,EAAOjiB,EAAG,KACvCiiB,EACE,CAAC,EAAGnJ,GAAQ,MAAM,CAAC,EADR,CAAC,EAAG,CAAC,EAE3B,IAAK,GAAG,MAAO,CAAC,EAAGqB,EAAG,KAAM,CAAA,EAC5B,IAAK,GAAG,MAAO,CAAC,EAAGrB,GAAQxF,CAAK,CAAC,EACjC,IAAK,GAAG,MAAO,CAAC,EAAG6G,EAAG,KAAM,CAAA,EAC5B,IAAK,GACD,OAAAA,EAAG,KAAI,EACA,CAAC,EAAG,CAAC,EAChB,IAAK,GAAG,MAAO,CAAC,EAAG,EAAE,EACrB,IAAK,GACD,OAAA7U,EAAO,YAAW,EACX,CAAC,CAAC,EACb,IAAK,IAAI,MAAO,CAAC,CAAC,CACrB,CACb,CAAS,CACT,CAAK,CACL,CACO,SAAS4c,GAAqBva,EAAK,CACtC,OAAO0R,EAAqD1R,GAAI,SAAS,CAC7E,CCzBO,SAASwa,GAAUpd,EAAO,CAC7B,GAAIA,aAAiBkY,GACjB,OAAOlY,EAEX,GAAIA,GAAS,KAAM,CACf,GAAI0c,GAAoB1c,CAAK,EACzB,OAAOqd,GAAsBrd,CAAK,EAEtC,GAAIwc,GAAYxc,CAAK,EACjB,OAAOsd,GAActd,CAAK,EAE9B,GAAIyc,GAAUzc,CAAK,EACf,OAAOud,GAAYvd,CAAK,EAE5B,GAAI2c,GAAgB3c,CAAK,EACrB,OAAOwd,GAAkBxd,CAAK,EAElC,GAAI8c,GAAW9c,CAAK,EAChB,OAAOyd,GAAazd,CAAK,EAE7B,GAAImd,GAAqBnd,CAAK,EAC1B,OAAO0d,GAAuB1d,CAAK,CAE1C,CACD,MAAM4c,GAAiC5c,CAAK,CAChD,CACO,SAASqd,GAAsBza,EAAK,CACvC,OAAO,IAAIsV,GAAW,SAAUG,EAAY,CACxC,IAAIsF,EAAM/a,EAAI8V,EAAiB,IAC/B,GAAIpE,EAAWqJ,EAAI,SAAS,EACxB,OAAOA,EAAI,UAAUtF,CAAU,EAEnC,MAAM,IAAI,UAAU,gEAAgE,CAC5F,CAAK,CACL,CACO,SAASiF,GAAcM,EAAO,CACjC,OAAO,IAAI1F,GAAW,SAAUG,EAAY,CACxC,QAASxxB,EAAI,EAAGA,EAAI+2B,EAAM,QAAU,CAACvF,EAAW,OAAQxxB,IACpDwxB,EAAW,KAAKuF,EAAM/2B,CAAC,CAAC,EAE5BwxB,EAAW,SAAQ,CAC3B,CAAK,CACL,CACO,SAASkF,GAAYM,EAAS,CACjC,OAAO,IAAI3F,GAAW,SAAUG,EAAY,CACxCwF,EACK,KAAK,SAAUtP,EAAO,CAClB8J,EAAW,SACZA,EAAW,KAAK9J,CAAK,EACrB8J,EAAW,SAAQ,EAEnC,EAAW,SAAUvD,EAAK,CAAE,OAAOuD,EAAW,MAAMvD,CAAG,EAAI,EAC9C,KAAK,KAAM4B,EAAoB,CAC5C,CAAK,CACL,CACO,SAAS+G,GAAaK,EAAU,CACnC,OAAO,IAAI5F,GAAW,SAAUG,EAAY,CACxC,IAAInD,EAAKja,EACT,GAAI,CACA,QAAS8iB,EAAarK,GAASoK,CAAQ,EAAGE,EAAeD,EAAW,KAAI,EAAI,CAACC,EAAa,KAAMA,EAAeD,EAAW,KAAI,EAAI,CAC9H,IAAIxP,EAAQyP,EAAa,MAEzB,GADA3F,EAAW,KAAK9J,CAAK,EACjB8J,EAAW,OACX,MAEP,CACJ,OACM5C,EAAO,CAAEP,EAAM,CAAE,MAAOO,CAAO,CAAG,QACjC,CACJ,GAAI,CACIuI,GAAgB,CAACA,EAAa,OAAS/iB,EAAK8iB,EAAW,SAAS9iB,EAAG,KAAK8iB,CAAU,CACzF,QACO,CAAE,GAAI7I,EAAK,MAAMA,EAAI,KAAQ,CACxC,CACDmD,EAAW,SAAQ,CAC3B,CAAK,CACL,CACO,SAASmF,GAAkBS,EAAe,CAC7C,OAAO,IAAI/F,GAAW,SAAUG,EAAY,CACxC6F,GAAQD,EAAe5F,CAAU,EAAE,MAAM,SAAUvD,EAAK,CAAE,OAAOuD,EAAW,MAAMvD,CAAG,CAAI,CAAA,CACjG,CAAK,CACL,CACO,SAAS4I,GAAuBT,EAAgB,CACnD,OAAOO,GAAkBR,GAAmCC,CAAc,CAAC,CAC/E,CACA,SAASiB,GAAQD,EAAe5F,EAAY,CACxC,IAAI8F,EAAiBC,EACjBjJ,EAAKla,EACT,OAAO6X,GAAU,KAAM,OAAQ,OAAQ,UAAY,CAC/C,IAAIvE,EAAOyH,EACX,OAAO1C,GAAY,KAAM,SAAU8B,EAAI,CACnC,OAAQA,EAAG,MAAK,CACZ,IAAK,GACDA,EAAG,KAAK,KAAK,CAAC,EAAG,EAAG,EAAG,EAAE,CAAC,EAC1B+I,EAAkB9J,GAAc4J,CAAa,EAC7C7I,EAAG,MAAQ,EACf,IAAK,GAAG,MAAO,CAAC,EAAG+I,EAAgB,KAAM,CAAA,EACzC,IAAK,GACD,GAAMC,EAAoBhJ,EAAG,OAAQ,EAACgJ,EAAkB,KAAO,MAAO,CAAC,EAAG,CAAC,EAG3E,GAFA7P,EAAQ6P,EAAkB,MAC1B/F,EAAW,KAAK9J,CAAK,EACjB8J,EAAW,OACX,MAAO,CAAC,CAAC,EAEbjD,EAAG,MAAQ,EACf,IAAK,GAAG,MAAO,CAAC,EAAG,CAAC,EACpB,IAAK,GAAG,MAAO,CAAC,EAAG,EAAE,EACrB,IAAK,GACD,OAAAY,EAAQZ,EAAG,OACXD,EAAM,CAAE,MAAOa,GACR,CAAC,EAAG,EAAE,EACjB,IAAK,GAED,OADAZ,EAAG,KAAK,KAAK,CAAC,EAAC,CAAI,EAAG,EAAE,CAAC,EACnBgJ,GAAqB,CAACA,EAAkB,OAASnjB,EAAKkjB,EAAgB,QACrE,CAAC,EAAGljB,EAAG,KAAKkjB,CAAe,CAAC,EAD0D,CAAC,EAAG,CAAC,EAEtG,IAAK,GACD/I,EAAG,KAAI,EACPA,EAAG,MAAQ,EACf,IAAK,GAAG,MAAO,CAAC,EAAG,EAAE,EACrB,IAAK,GACD,GAAID,EAAK,MAAMA,EAAI,MACnB,MAAO,CAAC,CAAC,EACb,IAAK,IAAI,MAAO,CAAC,CAAC,EAClB,IAAK,IACD,OAAAkD,EAAW,SAAQ,EACZ,CAAC,CAAC,CAChB,CACb,CAAS,CACT,CAAK,CACL,CC7IO,SAASgG,GAAgBC,EAAoBtD,EAAWC,EAAMC,EAAOqD,EAAQ,CAC5ErD,IAAU,SAAUA,EAAQ,GAC5BqD,IAAW,SAAUA,EAAS,IAClC,IAAIC,EAAuBxD,EAAU,SAAS,UAAY,CACtDC,IACIsD,EACAD,EAAmB,IAAI,KAAK,SAAS,KAAMpD,CAAK,CAAC,EAGjD,KAAK,YAAW,CAEvB,EAAEA,CAAK,EAER,GADAoD,EAAmB,IAAIE,CAAoB,EACvC,CAACD,EACD,OAAOC,CAEf,CCbO,SAASC,GAAUzD,EAAWE,EAAO,CACxC,OAAIA,IAAU,SAAUA,EAAQ,GACzBpC,GAAQ,SAAUvV,EAAQ8U,EAAY,CACzC9U,EAAO,UAAU0V,GAAyBZ,EAAY,SAAU9J,EAAO,CAAE,OAAO8P,GAAgBhG,EAAY2C,EAAW,UAAY,CAAE,OAAO3C,EAAW,KAAK9J,CAAK,GAAM2M,CAAK,CAAE,EAAI,UAAY,CAAE,OAAOmD,GAAgBhG,EAAY2C,EAAW,UAAY,CAAE,OAAO3C,EAAW,SAAQ,CAAK,EAAE6C,CAAK,GAAM,SAAUpG,EAAK,CAAE,OAAOuJ,GAAgBhG,EAAY2C,EAAW,UAAY,CAAE,OAAO3C,EAAW,MAAMvD,CAAG,CAAE,EAAIoG,CAAK,CAAI,CAAA,CAAC,CACxa,CAAK,CACL,CCPO,SAASwD,GAAY1D,EAAWE,EAAO,CAC1C,OAAIA,IAAU,SAAUA,EAAQ,GACzBpC,GAAQ,SAAUvV,EAAQ8U,EAAY,CACzCA,EAAW,IAAI2C,EAAU,SAAS,UAAY,CAAE,OAAOzX,EAAO,UAAU8U,CAAU,GAAM6C,CAAK,CAAC,CACtG,CAAK,CACL,CCHO,SAASyD,GAAmB3e,EAAOgb,EAAW,CACjD,OAAOoC,GAAUpd,CAAK,EAAE,KAAK0e,GAAY1D,CAAS,EAAGyD,GAAUzD,CAAS,CAAC,CAC7E,CCFO,SAAS4D,GAAgB5e,EAAOgb,EAAW,CAC9C,OAAOoC,GAAUpd,CAAK,EAAE,KAAK0e,GAAY1D,CAAS,EAAGyD,GAAUzD,CAAS,CAAC,CAC7E,CCJO,SAAS6D,GAAc7e,EAAOgb,EAAW,CAC5C,OAAO,IAAI9C,GAAW,SAAUG,EAAY,CACxC,IAAIxxB,EAAI,EACR,OAAOm0B,EAAU,SAAS,UAAY,CAC9Bn0B,IAAMmZ,EAAM,OACZqY,EAAW,SAAQ,GAGnBA,EAAW,KAAKrY,EAAMnZ,GAAG,CAAC,EACrBwxB,EAAW,QACZ,KAAK,SAAQ,EAGjC,CAAS,CACT,CAAK,CACL,CCZO,SAASyG,GAAiB9e,EAAOgb,EAAW,CAC/C,OAAO,IAAI9C,GAAW,SAAUG,EAAY,CACxC,IAAIxV,EACJ,OAAAwb,GAAgBhG,EAAY2C,EAAW,UAAY,CAC/CnY,EAAW7C,EAAM+c,EAAe,IAChCsB,GAAgBhG,EAAY2C,EAAW,UAAY,CAC/C,IAAI/f,EACAsT,EACA2O,EACJ,GAAI,CACCjiB,EAAK4H,EAAS,OAAQ0L,EAAQtT,EAAG,MAAOiiB,EAAOjiB,EAAG,IACtD,OACM6Z,EAAK,CACRuD,EAAW,MAAMvD,CAAG,EACpB,MACH,CACGoI,EACA7E,EAAW,SAAQ,EAGnBA,EAAW,KAAK9J,CAAK,CAEzC,EAAe,EAAG,EAAI,CACtB,CAAS,EACM,UAAY,CAAE,OAAO+F,EAA+DzR,GAAS,MAAM,GAAKA,EAAS,OAAQ,EACxI,CAAK,CACL,CC5BO,SAASkc,GAAsB/e,EAAOgb,EAAW,CACpD,GAAI,CAAChb,EACD,MAAM,IAAI,MAAM,yBAAyB,EAE7C,OAAO,IAAIkY,GAAW,SAAUG,EAAY,CACxCgG,GAAgBhG,EAAY2C,EAAW,UAAY,CAC/C,IAAInY,EAAW7C,EAAM,OAAO,aAAa,EAAC,EAC1Cqe,GAAgBhG,EAAY2C,EAAW,UAAY,CAC/CnY,EAAS,KAAI,EAAG,KAAK,SAAUxE,EAAQ,CAC/BA,EAAO,KACPga,EAAW,SAAQ,EAGnBA,EAAW,KAAKha,EAAO,KAAK,CAEpD,CAAiB,CACjB,EAAe,EAAG,EAAI,CACtB,CAAS,CACT,CAAK,CACL,CCnBO,SAAS2gB,GAA2Bhf,EAAOgb,EAAW,CACzD,OAAO+D,GAAsB/B,GAAmChd,CAAK,EAAGgb,CAAS,CACrF,CCSO,SAASiE,GAAUjf,EAAOgb,EAAW,CACxC,GAAIhb,GAAS,KAAM,CACf,GAAI0c,GAAoB1c,CAAK,EACzB,OAAO2e,GAAmB3e,EAAOgb,CAAS,EAE9C,GAAIwB,GAAYxc,CAAK,EACjB,OAAO6e,GAAc7e,EAAOgb,CAAS,EAEzC,GAAIyB,GAAUzc,CAAK,EACf,OAAO4e,GAAgB5e,EAAOgb,CAAS,EAE3C,GAAI2B,GAAgB3c,CAAK,EACrB,OAAO+e,GAAsB/e,EAAOgb,CAAS,EAEjD,GAAI8B,GAAW9c,CAAK,EAChB,OAAO8e,GAAiB9e,EAAOgb,CAAS,EAE5C,GAAImC,GAAqBnd,CAAK,EAC1B,OAAOgf,GAA2Bhf,EAAOgb,CAAS,CAEzD,CACD,MAAM4B,GAAiC5c,CAAK,CAChD,CCjCO,SAAS7C,GAAK6C,EAAOgb,EAAW,CACnC,OAAOA,EAAYiE,GAAUjf,EAAOgb,CAAS,EAAIoC,GAAUpd,CAAK,CACpE,CCFO,SAASkf,IAAK,CAEjB,QADI7a,EAAO,CAAA,EACFkS,EAAK,EAAGA,EAAK,UAAU,OAAQA,IACpClS,EAAKkS,CAAE,EAAI,UAAUA,CAAE,EAE3B,IAAIyE,EAAYqB,GAAahY,CAAI,EACjC,OAAOlH,GAAKkH,EAAM2W,CAAS,CAC/B,CCRO,IAAImE,GAAa5K,GAAiB,SAAUE,EAAQ,CACvD,OAAO,UAA0B,CAC7BA,EAAO,IAAI,EACX,KAAK,KAAO,aACZ,KAAK,QAAU,yBACvB,CACA,CAAC,ECLM,SAAS2K,GAAe7b,EAAQ8S,EAAQ,CAC3C,IAAIgJ,EAAY,OAAOhJ,GAAW,SAClC,OAAO,IAAI,QAAQ,SAAUpW,EAASC,EAAQ,CAC1C,IAAImY,EAAa,IAAIjB,GAAe,CAChC,KAAM,SAAU7I,EAAO,CACnBtO,EAAQsO,CAAK,EACb8J,EAAW,YAAW,CACzB,EACD,MAAOnY,EACP,SAAU,UAAY,CACdmf,EACApf,EAAQoW,EAAO,YAAY,EAG3BnW,EAAO,IAAIif,EAAY,CAE9B,CACb,CAAS,EACD5b,EAAO,UAAU8U,CAAU,CACnC,CAAK,CACL,CCtBO,SAASiH,GAAY/Q,EAAO,CAC/B,OAAOA,aAAiB,MAAQ,CAAC,MAAMA,CAAK,CAChD,CCAO,SAASgR,GAAIC,EAASzM,EAAS,CAClC,OAAO+F,GAAQ,SAAUvV,EAAQ8U,EAAY,CACzC,IAAI/U,EAAQ,EACZC,EAAO,UAAU0V,GAAyBZ,EAAY,SAAU9J,EAAO,CACnE8J,EAAW,KAAKmH,EAAQ,KAAKzM,EAASxE,EAAOjL,GAAO,CAAC,CACxD,CAAA,CAAC,CACV,CAAK,CACL,CCPA,IAAImc,GAAU,MAAM,QACpB,SAASC,GAAYn3B,EAAI8b,EAAM,CAC3B,OAAOob,GAAQpb,CAAI,EAAI9b,EAAG,MAAM,OAAQsrB,GAAc,CAAA,EAAIF,GAAOtP,CAAI,CAAC,CAAC,EAAI9b,EAAG8b,CAAI,CACtF,CACO,SAASsb,GAAiBp3B,EAAI,CACjC,OAAOg3B,GAAI,SAAUlb,EAAM,CAAE,OAAOqb,GAAYn3B,EAAI8b,CAAI,CAAE,CAAE,CAChE,CCRA,IAAIob,GAAU,MAAM,QAChBG,GAAiB,OAAO,eAAgBC,GAAc,OAAO,UAAWC,GAAU,OAAO,KACtF,SAASC,GAAqB1b,EAAM,CACvC,GAAIA,EAAK,SAAW,EAAG,CACnB,IAAI2b,EAAU3b,EAAK,CAAC,EACpB,GAAIob,GAAQO,CAAO,EACf,MAAO,CAAE,KAAMA,EAAS,KAAM,IAAI,EAEtC,GAAIC,GAAOD,CAAO,EAAG,CACjB,IAAInc,EAAOic,GAAQE,CAAO,EAC1B,MAAO,CACH,KAAMnc,EAAK,IAAI,SAAU0B,EAAK,CAAE,OAAOya,EAAQza,CAAG,EAAI,EACtD,KAAM1B,CACtB,CACS,CACJ,CACD,MAAO,CAAE,KAAMQ,EAAM,KAAM,IAAI,CACnC,CACA,SAAS4b,GAAOrd,EAAK,CACjB,OAAOA,GAAO,OAAOA,GAAQ,UAAYgd,GAAehd,CAAG,IAAMid,EACrE,CCpBO,SAASK,GAAarc,EAAM6B,EAAQ,CACvC,OAAO7B,EAAK,OAAO,SAAUxF,EAAQkH,EAAK,EAAG,CAAE,OAASlH,EAAOkH,CAAG,EAAIG,EAAO,CAAC,EAAIrH,CAAQ,EAAI,CAAA,CAAE,CACpG,CCOO,SAAS8hB,IAAgB,CAE5B,QADI9b,EAAO,CAAA,EACFkS,EAAK,EAAGA,EAAK,UAAU,OAAQA,IACpClS,EAAKkS,CAAE,EAAI,UAAUA,CAAE,EAE3B,IAAIyE,EAAYqB,GAAahY,CAAI,EAC7B+b,EAAiBhE,GAAkB/X,CAAI,EACvCpJ,EAAK8kB,GAAqB1b,CAAI,EAAGgc,EAAcplB,EAAG,KAAM4I,EAAO5I,EAAG,KACtE,GAAIolB,EAAY,SAAW,EACvB,OAAOljB,GAAK,GAAI6d,CAAS,EAE7B,IAAI3c,EAAS,IAAI6Z,GAAWoI,GAAkBD,EAAarF,EAAWnX,EAE9D,SAAU6B,EAAQ,CAAE,OAAOwa,GAAarc,EAAM6B,CAAM,CAAI,EAExDoS,EAAQ,CAAC,EACjB,OAAOsI,EAAiB/hB,EAAO,KAAKshB,GAAiBS,CAAc,CAAC,EAAI/hB,CAC5E,CACO,SAASiiB,GAAkBD,EAAarF,EAAWuF,EAAgB,CACtE,OAAIA,IAAmB,SAAUA,EAAiBzI,IAC3C,SAAUO,EAAY,CACzBmI,GAAcxF,EAAW,UAAY,CAyBjC,QAxBIve,EAAS4jB,EAAY,OACrB3a,EAAS,IAAI,MAAMjJ,CAAM,EACzBgkB,EAAShkB,EACTikB,EAAuBjkB,EACvBkkB,EAAU,SAAU95B,EAAG,CACvB25B,GAAcxF,EAAW,UAAY,CACjC,IAAIzX,EAASpG,GAAKkjB,EAAYx5B,CAAC,EAAGm0B,CAAS,EACvC4F,EAAgB,GACpBrd,EAAO,UAAU0V,GAAyBZ,EAAY,SAAU9J,EAAO,CACnE7I,EAAO7e,CAAC,EAAI0nB,EACPqS,IACDA,EAAgB,GAChBF,KAECA,GACDrI,EAAW,KAAKkI,EAAe7a,EAAO,MAAK,CAAE,CAAC,CAE1E,EAAuB,UAAY,CACN,EAAE+a,GACHpI,EAAW,SAAQ,CAE1B,CAAA,CAAC,CACL,EAAEA,CAAU,CAC7B,EACqBxxB,EAAI,EAAGA,EAAI4V,EAAQ5V,IACxB85B,EAAQ95B,CAAC,CAEhB,EAAEwxB,CAAU,CACrB,CACA,CACA,SAASmI,GAAcxF,EAAW6F,EAASxG,EAAc,CACjDW,EACAqD,GAAgBhE,EAAcW,EAAW6F,CAAO,EAGhDA,GAER,CCjEO,SAASC,GAAevd,EAAQ8U,EAAYmH,EAASuB,EAAYC,EAAcC,EAAQC,EAAmBC,EAAqB,CAClI,IAAIC,EAAS,CAAA,EACTX,EAAS,EACTnd,EAAQ,EACR+d,EAAa,GACbC,EAAgB,UAAY,CACxBD,GAAc,CAACD,EAAO,QAAU,CAACX,GACjCpI,EAAW,SAAQ,CAE/B,EACQkJ,EAAY,SAAUhT,EAAO,CAAE,OAAQkS,EAASM,EAAaS,EAAWjT,CAAK,EAAI6S,EAAO,KAAK7S,CAAK,CAAG,EACrGiT,EAAa,SAAUjT,EAAO,CAC9B0S,GAAU5I,EAAW,KAAK9J,CAAK,EAC/BkS,IACA,IAAIgB,EAAgB,GACpBrE,GAAUoC,EAAQjR,EAAOjL,GAAO,CAAC,EAAE,UAAU2V,GAAyBZ,EAAY,SAAUqJ,EAAY,CACxCV,IAAaU,CAAU,EAC/ET,EACAM,EAAUG,CAAU,EAGpBrJ,EAAW,KAAKqJ,CAAU,CAE1C,EAAW,UAAY,CACXD,EAAgB,EACnB,EAAE,OAAW,UAAY,CACtB,GAAIA,EACA,GAAI,CACAhB,IAUA,QATIE,EAAU,UAAY,CACtB,IAAIgB,EAAgBP,EAAO,QACvBF,EACA7C,GAAgBhG,EAAY6I,EAAmB,UAAY,CAAE,OAAOM,EAAWG,CAAa,CAAE,CAAE,EAGhGH,EAAWG,CAAa,CAEpD,EAC2BP,EAAO,QAAUX,EAASM,GAC7BJ,IAEJW,GACH,OACMxM,EAAK,CACRuD,EAAW,MAAMvD,CAAG,CACvB,CAER,CAAA,CAAC,CACV,EACI,OAAAvR,EAAO,UAAU0V,GAAyBZ,EAAYkJ,EAAW,UAAY,CACzEF,EAAa,GACbC,GACH,CAAA,CAAC,EACK,UAAY,CAC2DH,KAClF,CACA,CCtDO,SAASS,GAASpC,EAASY,EAAgBW,EAAY,CAE1D,OADIA,IAAe,SAAUA,EAAa,KACtCzM,EAAW8L,CAAc,EAClBwB,GAAS,SAAUpyB,EAAG,EAAG,CAAE,OAAO+vB,GAAI,SAAUtrB,EAAG4tB,EAAI,CAAE,OAAOzB,EAAe5wB,EAAGyE,EAAG,EAAG4tB,CAAE,EAAI,EAAEzE,GAAUoC,EAAQhwB,EAAG,CAAC,CAAC,CAAC,CAAI,EAAEuxB,CAAU,GAE1I,OAAOX,GAAmB,WAC/BW,EAAaX,GAEVtH,GAAQ,SAAUvV,EAAQ8U,EAAY,CAAE,OAAOyI,GAAevd,EAAQ8U,EAAYmH,EAASuB,CAAU,CAAI,CAAA,EACpH,CCZO,SAASe,GAASf,EAAY,CACjC,OAAIA,IAAe,SAAUA,EAAa,KACnCa,GAAS9J,GAAUiJ,CAAU,CACxC,CCJO,SAASgB,IAAY,CACxB,OAAOD,GAAS,CAAC,CACrB,CCAO,SAASE,IAAS,CAErB,QADI3d,EAAO,CAAA,EACFkS,EAAK,EAAGA,EAAK,UAAU,OAAQA,IACpClS,EAAKkS,CAAE,EAAI,UAAUA,CAAE,EAE3B,OAAOwL,GAAW,EAAC5kB,GAAKkH,EAAMgY,GAAahY,CAAI,CAAC,CAAC,CACrD,CCFA,IAAI4d,GAA0B,CAAC,cAAe,gBAAgB,EAC1DC,GAAqB,CAAC,mBAAoB,qBAAqB,EAC/DC,GAAgB,CAAC,KAAM,KAAK,EACzB,SAASC,GAAU5kB,EAAQ6kB,EAAW7iB,EAAS4gB,EAAgB,CAKlE,GAJI9L,EAAW9U,CAAO,IAClB4gB,EAAiB5gB,EACjBA,EAAU,QAEV4gB,EACA,OAAOgC,GAAU5kB,EAAQ6kB,EAAW7iB,CAAO,EAAE,KAAKmgB,GAAiBS,CAAc,CAAC,EAEtF,IAAInlB,EAAK0Y,GAAO2O,GAAc9kB,CAAM,EAC9B0kB,GAAmB,IAAI,SAAUK,EAAY,CAAE,OAAO,SAAU5d,EAAS,CAAE,OAAOnH,EAAO+kB,CAAU,EAAEF,EAAW1d,EAASnF,CAAO,CAAI,EAAG,EAErIgjB,GAAwBhlB,CAAM,EACxBykB,GAAwB,IAAIQ,GAAwBjlB,EAAQ6kB,CAAS,CAAC,EACtEK,GAA0BllB,CAAM,EAC5B2kB,GAAc,IAAIM,GAAwBjlB,EAAQ6kB,CAAS,CAAC,EAC5D,GAAI,CAAC,EAAG9P,EAAMtX,EAAG,CAAC,EAAG0nB,EAAS1nB,EAAG,CAAC,EACpD,GAAI,CAACsX,GACGiK,GAAYhf,CAAM,EAClB,OAAOokB,GAAS,SAAUgB,EAAW,CAAE,OAAOR,GAAUQ,EAAWP,EAAW7iB,CAAO,CAAI,CAAA,EAAE4d,GAAU5f,CAAM,CAAC,EAGpH,GAAI,CAAC+U,EACD,MAAM,IAAI,UAAU,sBAAsB,EAE9C,OAAO,IAAI2F,GAAW,SAAUG,EAAY,CACxC,IAAI1T,EAAU,UAAY,CAEtB,QADIN,EAAO,CAAA,EACFkS,EAAK,EAAGA,EAAK,UAAU,OAAQA,IACpClS,EAAKkS,CAAE,EAAI,UAAUA,CAAE,EAE3B,OAAO8B,EAAW,KAAK,EAAIhU,EAAK,OAASA,EAAOA,EAAK,CAAC,CAAC,CACnE,EACQ,OAAAkO,EAAI5N,CAAO,EACJ,UAAY,CAAE,OAAOge,EAAOhe,CAAO,CAAE,CACpD,CAAK,CACL,CACA,SAAS8d,GAAwBjlB,EAAQ6kB,EAAW,CAChD,OAAO,SAAUE,EAAY,CAAE,OAAO,SAAU5d,EAAS,CAAE,OAAOnH,EAAO+kB,CAAU,EAAEF,EAAW1d,CAAO,CAAE,CAAG,CAChH,CACA,SAAS6d,GAAwBhlB,EAAQ,CACrC,OAAO8W,EAAW9W,EAAO,WAAW,GAAK8W,EAAW9W,EAAO,cAAc,CAC7E,CACA,SAASklB,GAA0BllB,EAAQ,CACvC,OAAO8W,EAAW9W,EAAO,EAAE,GAAK8W,EAAW9W,EAAO,GAAG,CACzD,CACA,SAAS8kB,GAAc9kB,EAAQ,CAC3B,OAAO8W,EAAW9W,EAAO,gBAAgB,GAAK8W,EAAW9W,EAAO,mBAAmB,CACvF,CCtDO,SAASqlB,GAAiBC,EAAYC,EAAe3C,EAAgB,CACxE,OAAIA,EACOyC,GAAiBC,EAAYC,CAAa,EAAE,KAAKpD,GAAiBS,CAAc,CAAC,EAErF,IAAIlI,GAAW,SAAUG,EAAY,CACxC,IAAI1T,EAAU,UAAY,CAEtB,QADI3f,EAAI,CAAA,EACCuxB,EAAK,EAAGA,EAAK,UAAU,OAAQA,IACpCvxB,EAAEuxB,CAAE,EAAI,UAAUA,CAAE,EAExB,OAAO8B,EAAW,KAAKrzB,EAAE,SAAW,EAAIA,EAAE,CAAC,EAAIA,CAAC,CAC5D,EACYg+B,EAAWF,EAAWne,CAAO,EACjC,OAAO2P,EAAWyO,CAAa,EAAI,UAAY,CAAE,OAAOA,EAAcpe,EAASqe,CAAQ,CAAI,EAAG,MACtG,CAAK,CACL,CCdO,SAASC,GAAMC,EAASC,EAAqBnI,EAAW,CACvDkI,IAAY,SAAUA,EAAU,GAChClI,IAAc,SAAUA,EAAYgB,IACxC,IAAIoH,EAAmB,GACvB,OAAID,GAAuB,OACnBhH,GAAYgH,CAAmB,EAC/BnI,EAAYmI,EAGZC,EAAmBD,GAGpB,IAAIjL,GAAW,SAAUG,EAAY,CACxC,IAAIgL,EAAM/D,GAAY4D,CAAO,EAAI,CAACA,EAAUlI,EAAU,IAAK,EAAGkI,EAC1DG,EAAM,IACNA,EAAM,GAEV,IAAIp+B,EAAI,EACR,OAAO+1B,EAAU,SAAS,UAAY,CAC7B3C,EAAW,SACZA,EAAW,KAAKpzB,GAAG,EACf,GAAKm+B,EACL,KAAK,SAAS,OAAWA,CAAgB,EAGzC/K,EAAW,SAAQ,EAG9B,EAAEgL,CAAG,CACd,CAAK,CACL,CC7BO,SAASzf,IAAQ,CAEpB,QADIS,EAAO,CAAA,EACFkS,EAAK,EAAGA,EAAK,UAAU,OAAQA,IACpClS,EAAKkS,CAAE,EAAI,UAAUA,CAAE,EAE3B,IAAIyE,EAAYqB,GAAahY,CAAI,EAC7B0c,EAAazE,GAAUjY,EAAM,GAAQ,EACrCif,EAAUjf,EACd,OAAQif,EAAQ,OAGVA,EAAQ,SAAW,EAEblG,GAAUkG,EAAQ,CAAC,CAAC,EAEpBxB,GAASf,CAAU,EAAE5jB,GAAKmmB,EAAStI,CAAS,CAAC,EALjDkB,EAMZ,CCrBA,IAAIuD,GAAU,MAAM,QACb,SAAS8D,GAAelf,EAAM,CACjC,OAAOA,EAAK,SAAW,GAAKob,GAAQpb,EAAK,CAAC,CAAC,EAAIA,EAAK,CAAC,EAAIA,CAC7D,CCDO,SAASmf,GAAOC,EAAW1Q,EAAS,CACvC,OAAO+F,GAAQ,SAAUvV,EAAQ8U,EAAY,CACzC,IAAI/U,EAAQ,EACZC,EAAO,UAAU0V,GAAyBZ,EAAY,SAAU9J,EAAO,CAAE,OAAOkV,EAAU,KAAK1Q,EAASxE,EAAOjL,GAAO,GAAK+U,EAAW,KAAK9J,CAAK,CAAI,CAAA,CAAC,CAC7J,CAAK,CACL,CCHO,SAASmV,IAAO,CAEnB,QADIJ,EAAU,CAAA,EACL/M,EAAK,EAAGA,EAAK,UAAU,OAAQA,IACpC+M,EAAQ/M,CAAE,EAAI,UAAUA,CAAE,EAE9B,OAAA+M,EAAUC,GAAeD,CAAO,EACzBA,EAAQ,SAAW,EAAIlG,GAAUkG,EAAQ,CAAC,CAAC,EAAI,IAAIpL,GAAWyL,GAASL,CAAO,CAAC,CAC1F,CACO,SAASK,GAASL,EAAS,CAC9B,OAAO,SAAUjL,EAAY,CAazB,QAZIuL,EAAgB,CAAA,EAChBjD,EAAU,SAAU95B,EAAG,CACvB+8B,EAAc,KAAKxG,GAAUkG,EAAQz8B,CAAC,CAAC,EAAE,UAAUoyB,GAAyBZ,EAAY,SAAU9J,EAAO,CACrG,GAAIqV,EAAe,CACf,QAASn9B,EAAI,EAAGA,EAAIm9B,EAAc,OAAQn9B,IACtCA,IAAMI,GAAK+8B,EAAcn9B,CAAC,EAAE,YAAW,EAE3Cm9B,EAAgB,IACnB,CACDvL,EAAW,KAAK9J,CAAK,CACxB,CAAA,CAAC,CAAC,CACf,EACiB,EAAI,EAAGqV,GAAiB,CAACvL,EAAW,QAAU,EAAIiL,EAAQ,OAAQ,IACvE3C,EAAQ,CAAC,CAErB,CACA,CC3BO,SAASkD,GAAqBC,EAAYC,EAAa,CAC1D,OAAIA,IAAgB,SAAUA,EAAcjM,IAC5CgM,EAAaA,GAA4DE,GAClElL,GAAQ,SAAUvV,EAAQ8U,EAAY,CACzC,IAAI4L,EACA9lB,EAAQ,GACZoF,EAAO,UAAU0V,GAAyBZ,EAAY,SAAU9J,EAAO,CACnE,IAAI2V,EAAaH,EAAYxV,CAAK,GAC9BpQ,GAAS,CAAC2lB,EAAWG,EAAaC,CAAU,KAC5C/lB,EAAQ,GACR8lB,EAAcC,EACd7L,EAAW,KAAK9J,CAAK,EAE5B,CAAA,CAAC,CACV,CAAK,CACL,CACA,SAASyV,GAAex0B,EAAGyE,EAAG,CAC1B,OAAOzE,IAAMyE,CACjB,CCjBO,SAASkwB,GAAW3E,EAASY,EAAgB,CAChD,OAAIA,EACO,SAAU7c,EAAQ,CACrB,OAAOA,EAAO,KAAK4gB,GAAW,SAAU30B,EAAG,EAAG,CAAE,OAAO4tB,GAAUoC,EAAQhwB,EAAG,CAAC,CAAC,EAAE,KAAK+vB,GAAI,SAAUtrB,EAAG4tB,EAAI,CAAE,OAAOzB,EAAe5wB,EAAGyE,EAAG,EAAG4tB,CAAE,CAAE,CAAE,CAAC,CAAE,CAAE,CAAC,CACnK,EAEW/I,GAAQ,SAAUvV,EAAQ8U,EAAY,CACzC,IAAI/U,EAAQ,EACR8gB,EAAW,KACX/C,EAAa,GACjB9d,EAAO,UAAU0V,GAAyBZ,EAAY,SAAUgM,EAAY,CACnED,IACDA,EAAWnL,GAAyBZ,EAAY,OAAW,UAAY,CACnE+L,EAAW,KACX/C,GAAchJ,EAAW,UAC7C,CAAiB,EACD+E,GAAUoC,EAAQ6E,EAAY/gB,GAAO,CAAC,EAAE,UAAU8gB,CAAQ,EAE1E,EAAW,UAAY,CACX/C,EAAa,GACb,CAAC+C,GAAY/L,EAAW,UAC3B,CAAA,CAAC,CACV,CAAK,CACL,CCtBO,SAASiM,GAAM9kB,EAAS,CACvBA,IAAY,SAAUA,EAAU,CAAE,GACtC,IAAIvE,EAAKuE,EAAQ,UAAW+kB,EAAYtpB,IAAO,OAAS,UAAY,CAAE,OAAO,IAAIye,EAAU,EAAKze,EAAIma,EAAK5V,EAAQ,aAAcglB,EAAepP,IAAO,OAAS,GAAOA,EAAIyE,EAAKra,EAAQ,gBAAiBilB,EAAkB5K,IAAO,OAAS,GAAOA,EAAI6K,EAAKllB,EAAQ,oBAAqBmlB,EAAsBD,IAAO,OAAS,GAAOA,EACnU,OAAO,SAAUE,EAAe,CAC5B,IAAIC,EACAC,EACAnL,EACAoL,EAAW,EACXC,EAAe,GACfC,EAAa,GACbC,EAAc,UAAY,CACwCJ,GAAgB,cAClFA,EAAkB,MAC9B,EACYK,EAAQ,UAAY,CACpBD,IACAL,EAAalL,EAAU,OACvBqL,EAAeC,EAAa,EACxC,EACYG,EAAsB,UAAY,CAClC,IAAIC,EAAOR,EACXM,IAC4CE,GAAK,aAC7D,EACQ,OAAOvM,GAAQ,SAAUvV,EAAQ8U,EAAY,CACzC0M,IACI,CAACE,GAAc,CAACD,GAChBE,IAEJ,IAAIxhB,EAAQiW,EAAUA,GAAmD4K,EAAS,EAClFlM,EAAW,IAAI,UAAY,CACvB0M,IACIA,IAAa,GAAK,CAACE,GAAc,CAACD,IAClCF,EAAkBQ,GAAYF,EAAqBT,CAAmB,EAE1F,CAAa,EACDjhB,EAAK,UAAU2U,CAAU,EACrB,CAACwM,GACDE,EAAW,IACXF,EAAa,IAAIzN,GAAe,CAC5B,KAAM,SAAU7I,EAAO,CAAE,OAAO7K,EAAK,KAAK6K,CAAK,CAAI,EACnD,MAAO,SAAUuG,EAAK,CAClBmQ,EAAa,GACbC,IACAJ,EAAkBQ,GAAYH,EAAOX,EAAc1P,CAAG,EACtDpR,EAAK,MAAMoR,CAAG,CACjB,EACD,SAAU,UAAY,CAClBkQ,EAAe,GACfE,IACAJ,EAAkBQ,GAAYH,EAAOV,CAAe,EACpD/gB,EAAK,SAAQ,CAChB,CACrB,CAAiB,EACD0Z,GAAU7Z,CAAM,EAAE,UAAUshB,CAAU,EAEtD,CAAS,EAAED,CAAa,CACxB,CACA,CACA,SAASU,GAAYH,EAAOjwB,EAAI,CAE5B,QADImP,EAAO,CAAA,EACFkS,EAAK,EAAGA,EAAK,UAAU,OAAQA,IACpClS,EAAKkS,EAAK,CAAC,EAAI,UAAUA,CAAE,EAE/B,GAAIrhB,IAAO,GAAM,CACbiwB,IACA,MACH,CACD,GAAIjwB,IAAO,GAGX,KAAIqwB,EAAe,IAAInO,GAAe,CAClC,KAAM,UAAY,CACdmO,EAAa,YAAW,EACxBJ,GACH,CACT,CAAK,EACD,OAAO/H,GAAUloB,EAAG,MAAM,OAAQ2e,GAAc,CAAA,EAAIF,GAAOtP,CAAI,CAAC,CAAC,CAAC,EAAE,UAAUkhB,CAAY,EAC9F,CCjFO,SAASC,GAAYC,EAAoBC,EAAY1K,EAAW,CACnE,IAAI/f,EAAIma,EAAIyE,EACR8L,EACAZ,EAAW,GACf,OAAIU,GAAsB,OAAOA,GAAuB,UACnDxqB,EAAKwqB,EAAmB,WAAYE,EAAa1qB,IAAO,OAAS,IAAWA,EAAIma,EAAKqQ,EAAmB,WAAYC,EAAatQ,IAAO,OAAS,IAAWA,EAAIyE,EAAK4L,EAAmB,SAAUV,EAAWlL,IAAO,OAAS,GAAQA,EAAImB,EAAYyK,EAAmB,WAGzQE,EAAcF,GAAoF,IAE/FnB,GAAM,CACT,UAAW,UAAY,CAAE,OAAO,IAAI/J,GAAcoL,EAAYD,EAAY1K,CAAS,CAAI,EACvF,aAAc,GACd,gBAAiB,GACjB,oBAAqB+J,CAC7B,CAAK,CACL,CCfO,SAASa,IAAY,CAExB,QADIlgB,EAAS,CAAA,EACJ6Q,EAAK,EAAGA,EAAK,UAAU,OAAQA,IACpC7Q,EAAO6Q,CAAE,EAAI,UAAUA,CAAE,EAE7B,IAAIyE,EAAYqB,GAAa3W,CAAM,EACnC,OAAOoT,GAAQ,SAAUvV,EAAQ8U,EAAY,EACxC2C,EAAYgH,GAAOtc,EAAQnC,EAAQyX,CAAS,EAAIgH,GAAOtc,EAAQnC,CAAM,GAAG,UAAU8U,CAAU,CACrG,CAAK,CACL,CCTO,SAASwN,GAAUrG,EAASY,EAAgB,CAC/C,OAAOtH,GAAQ,SAAUvV,EAAQ8U,EAAY,CACzC,IAAIyN,EAAkB,KAClBxiB,EAAQ,EACR+d,EAAa,GACbC,EAAgB,UAAY,CAAE,OAAOD,GAAc,CAACyE,GAAmBzN,EAAW,SAAU,GAChG9U,EAAO,UAAU0V,GAAyBZ,EAAY,SAAU9J,EAAO,CACDuX,GAAgB,cAClF,IAAIC,EAAa,EACbC,EAAa1iB,IACjB8Z,GAAUoC,EAAQjR,EAAOyX,CAAU,CAAC,EAAE,UAAWF,EAAkB7M,GAAyBZ,EAAY,SAAUqJ,EAAY,CAAE,OAAOrJ,EAAW,KAAK+H,EAAiBA,EAAe7R,EAAOmT,EAAYsE,EAAYD,GAAY,EAAIrE,CAAU,CAAI,EAAE,UAAY,CAC9PoE,EAAkB,KAClBxE,GACH,CAAA,EACb,EAAW,UAAY,CACXD,EAAa,GACbC,GACH,CAAA,CAAC,CACV,CAAK,CACL,CCpBO,SAAS2E,IAAY,CACxB,OAAOJ,GAAU/N,EAAQ,CAC7B,CCAO,SAASoO,GAAUC,EAAU,CAChC,OAAOrN,GAAQ,SAAUvV,EAAQ8U,EAAY,CACzC+E,GAAU+I,CAAQ,EAAE,UAAUlN,GAAyBZ,EAAY,UAAY,CAAE,OAAOA,EAAW,SAAU,GAAK1B,EAAI,CAAC,EACvH,CAAC0B,EAAW,QAAU9U,EAAO,UAAU8U,CAAU,CACzD,CAAK,CACL,CCLO,SAAS+N,GAAI1O,EAAgB9D,EAAOuD,EAAU,CACjD,IAAIkP,EAAc/R,EAAWoD,CAAc,GAAK9D,GAASuD,EAEjD,CAAE,KAAMO,EAAgB,MAAO9D,EAAO,SAAUuD,CAAU,EAC5DO,EACN,OAAO2O,EACDvN,GAAQ,SAAUvV,EAAQ8U,EAAY,CACpC,IAAIpd,GACHA,EAAKorB,EAAY,aAAe,MAAQprB,IAAO,QAAkBA,EAAG,KAAKorB,CAAW,EACrF,IAAIC,EAAU,GACd/iB,EAAO,UAAU0V,GAAyBZ,EAAY,SAAU9J,EAAO,CACnE,IAAItT,GACHA,EAAKorB,EAAY,QAAU,MAAQprB,IAAO,QAAkBA,EAAG,KAAKorB,EAAa9X,CAAK,EACvF8J,EAAW,KAAK9J,CAAK,CACrC,EAAe,UAAY,CACX,IAAItT,EACJqrB,EAAU,IACTrrB,EAAKorB,EAAY,YAAc,MAAQprB,IAAO,QAAkBA,EAAG,KAAKorB,CAAW,EACpFhO,EAAW,SAAQ,CACtB,EAAE,SAAUvD,EAAK,CACd,IAAI7Z,EACJqrB,EAAU,IACTrrB,EAAKorB,EAAY,SAAW,MAAQprB,IAAO,QAAkBA,EAAG,KAAKorB,EAAavR,CAAG,EACtFuD,EAAW,MAAMvD,CAAG,CACpC,EAAe,UAAY,CACX,IAAI7Z,EAAIma,EACJkR,KACCrrB,EAAKorB,EAAY,eAAiB,MAAQprB,IAAO,QAAkBA,EAAG,KAAKorB,CAAW,IAE1FjR,EAAKiR,EAAY,YAAc,MAAQjR,IAAO,QAAkBA,EAAG,KAAKiR,CAAW,CACvF,CAAA,CAAC,CACd,CAAS,EAEGvO,EACZ,CCnCO,SAASyO,GAASC,EAAkBnQ,EAAQ,CAC/C,OAAOyC,GAAQ,SAAUvV,EAAQ8U,EAAY,CACzC,IAAIpd,EAAKob,GAAgD,GAAIjB,EAAKna,EAAG,QAASwrB,EAAUrR,IAAO,OAAS,GAAOA,EAAIyE,EAAK5e,EAAG,SAAUyrB,EAAW7M,IAAO,OAAS,GAAQA,EACpK8M,EAAW,GACXC,EAAY,KACZC,EAAY,KACZxF,EAAa,GACbyF,EAAgB,UAAY,CAC0BD,GAAU,cAChEA,EAAY,KACRH,IACAK,IACA1F,GAAchJ,EAAW,WAEzC,EACY2O,EAAoB,UAAY,CAChCH,EAAY,KACZxF,GAAchJ,EAAW,UACrC,EACY4O,EAAgB,SAAU1Y,EAAO,CACjC,OAAQsY,EAAYzJ,GAAUoJ,EAAiBjY,CAAK,CAAC,EAAE,UAAU0K,GAAyBZ,EAAYyO,EAAeE,CAAiB,CAAC,CACnJ,EACYD,EAAO,UAAY,CACnB,GAAIJ,EAAU,CACVA,EAAW,GACX,IAAIpY,EAAQqY,EACZA,EAAY,KACZvO,EAAW,KAAK9J,CAAK,EACrB,CAAC8S,GAAc4F,EAAc1Y,CAAK,CACrC,CACb,EACQhL,EAAO,UAAU0V,GAAyBZ,EAAY,SAAU9J,EAAO,CACnEoY,EAAW,GACXC,EAAYrY,EACZ,EAAEsY,GAAa,CAACA,EAAU,UAAYJ,EAAUM,IAASE,EAAc1Y,CAAK,EACxF,EAAW,UAAY,CACX8S,EAAa,GACb,EAAEqF,GAAYC,GAAYE,GAAa,CAACA,EAAU,SAAWxO,EAAW,UAC3E,CAAA,CAAC,CACV,CAAK,CACL,CCxCO,SAAS6O,GAAaC,EAAUnM,EAAW3E,EAAQ,CAClD2E,IAAc,SAAUA,EAAYgB,IACxC,IAAIoL,EAAYnE,GAAMkE,EAAUnM,CAAS,EACzC,OAAOuL,GAAS,UAAY,CAAE,OAAOa,CAAY,EAAE/Q,CAAM,CAC7D,CCCO,SAASgR,GAAaC,EAAUC,EAAiB,CACpD,OAAOzO,GAAQ,SAAUvV,EAAQ8U,EAAY,CACzC,IAAImP,EAAU,CAAA,EACVC,EAAc,SAAU3S,EAAK,CAC7B,KAAO,EAAI0S,EAAQ,QACfA,EAAQ,MAAK,EAAG,MAAM1S,CAAG,EAE7BuD,EAAW,MAAMvD,CAAG,CAChC,EACQsI,GAAUkK,CAAQ,EAAE,UAAUrO,GAAyBZ,EAAY,SAAUqP,EAAW,CACpF,IAAI9lB,EAAS,IAAI8X,GACjB8N,EAAQ,KAAK5lB,CAAM,EACnB,IAAI+lB,EAAsB,IAAI3S,GAC1B4S,EAAc,UAAY,CAC1B7S,GAAUyS,EAAS5lB,CAAM,EACzBA,EAAO,SAAQ,EACf+lB,EAAoB,YAAW,CAC/C,EACgBE,EACJ,GAAI,CACAA,EAAkBzK,GAAUmK,EAAgBG,CAAS,CAAC,CACzD,OACM5S,EAAK,CACR2S,EAAY3S,CAAG,EACf,MACH,CACDuD,EAAW,KAAKzW,EAAO,aAAc,CAAA,EACrC+lB,EAAoB,IAAIE,EAAgB,UAAU5O,GAAyBZ,EAAYuP,EAAajR,GAAM8Q,CAAW,CAAC,CAAC,CACnI,EAAW9Q,EAAI,CAAC,EACRpT,EAAO,UAAU0V,GAAyBZ,EAAY,SAAU9J,EAAO,CACnE,IAAI2G,EAAKja,EACL6sB,EAAcN,EAAQ,QAC1B,GAAI,CACA,QAASO,EAAgBrU,GAASoU,CAAW,EAAGE,EAAkBD,EAAc,KAAI,EAAI,CAACC,EAAgB,KAAMA,EAAkBD,EAAc,KAAI,EAAI,CACnJ,IAAIE,EAAWD,EAAgB,MAC/BC,EAAS,KAAK1Z,CAAK,CACtB,CACJ,OACMkH,EAAO,CAAEP,EAAM,CAAE,MAAOO,CAAO,CAAG,QACjC,CACJ,GAAI,CACIuS,GAAmB,CAACA,EAAgB,OAAS/sB,EAAK8sB,EAAc,SAAS9sB,EAAG,KAAK8sB,CAAa,CACrG,QACO,CAAE,GAAI7S,EAAK,MAAMA,EAAI,KAAQ,CACxC,CACb,EAAW,UAAY,CACX,KAAO,EAAIsS,EAAQ,QACfA,EAAQ,QAAQ,WAEpBnP,EAAW,SAAQ,CACtB,EAAEoP,EAAa,UAAY,CACxB,KAAO,EAAID,EAAQ,QACfA,EAAQ,QAAQ,aAEvB,CAAA,CAAC,CACV,CAAK,CACL,CCnBO,SAASU,GAAsBljC,EAAQ,CAE5C,OAAIA,EAAE,UACGA,EAAE,UAEAA,EAAE,cACJA,EAAE,cAEAA,EAAE,WACJA,EAAE,WAEF,IAEX,CAUO,SAASmjC,EACd3qB,EACA6kB,EACA1d,EACAyjB,EAAa,GACD,CACN,MAAAC,EAAe,MAAOrjC,GAAkB,CAC5C,MAAM2f,EAAQ3f,CAAC,CAAA,EAGb,GAAA,CACKwY,EAAA,iBAAiB6kB,EAAWgG,EAAcD,CAAU,OACjD,CACH5qB,EAAA,YAAY,KAAO6kB,EAAWgG,CAAY,CACnD,CAEA,MAAO,IAAM,CACP,GAAA,CACK7qB,EAAA,oBAAoB6kB,EAAWgG,EAAcD,CAAU,OACpD,CACH5qB,EAAA,YAAY,KAAO6kB,EAAWgG,CAAY,CACnD,CAAA,CAEJ,CAGO,SAASC,GACdtjB,EACAxH,EACA6kB,EACA1d,EACAyjB,EAAa,GACD,CACL,OAAAD,EACLnjB,GAAU,SAAS,KACnBqd,EACCr9B,GAAM,CACDA,EAAE,SAAWwY,GAEfmH,EAAQ3f,CAAC,CAEb,EACAojC,CAAA,CAEJ,CAEO,SAASG,GAAwB/qB,EAA6B,CACnEA,EAAO,YAAYA,EAAO,UAAU,EAAI,CAAC,CAC3C,CAEO,SAASgrB,EACdhrB,EACA6kB,EACA+F,EAAa,GACE,CAEf,OAAOhG,GAAa5kB,EAAQ6kB,EAAW,CAAE,QAAS+F,EAAY,CAChE,CAEO,SAASK,GAAuBjpB,EAKjB,CAEpB,MAAMxU,EAAI63B,GACPle,GACQnF,EAAQ,SAASmF,CAAO,EAEjC,CAACA,EAA2BN,IAAiB,CAC3C7E,EAAQ,aAAamF,EAAS,GAAIN,GAAQ,CAAG,CAAA,CAC/C,EAEA,IAAIA,IACK,CAAC,GAAGA,CAAI,CACjB,EAEF,OAAI7E,EAAQ,MACHxU,EAAE,KACPw6B,GAAY,CACV,WAAYhmB,EAAQ,YAAc,EAClC,SAAU,EAAA,CACX,CAAA,EAGIxU,CAEX,CAGO,SAAS09B,GAAe1jC,EAAe,CAC5C,GAAIA,EAAE,eAAgB,CACpBA,EAAE,eAAe,EACjB,MACF,CACI,GAAA,CACFA,EAAE,YAAc,QACL,CAEb,CACF,CAIO,SAAS2jC,GAAgB3jC,EAAe,CAC7C,GAAIA,EAAE,gBAAiB,CACrBA,EAAE,gBAAgB,EAClB,MACF,CACI,GAAA,CACFA,EAAE,aAAe,QACN,CAEb,CACF,CAIA,MAAM4jC,GAAc,CAClB,QACA,WACA,QACA,cACA,YACA,UACA,YACA,YACA,WACA,aACA,YACF,EACMC,GAAiB,CAAC,UAAW,QAAS,UAAU,EAChDC,GAAc,CAAC,aAAc,WAAY,cAAe,WAAW,EACnEC,GAAgB,CACpB,cACA,YACA,gBACA,aACF,EACMC,GAAa,CACjB,YACA,OACA,UACA,YACA,WACA,YACA,MACF,EACMC,GAAS,CAAC,QAAQ,EAER,SAAAC,GACd7G,EACA7iB,EAOsB,CACpB,QAAS,GACT,OAAQ,CAAC,CACX,EACY,CACR,IAAAyQ,EACA,GAAA,CACF,MAAM/jB,EAAI,OAAO,OACf,CACE,QAAS,GACT,WAAY,GACZ,KAAM,OACN,OAAQ,EAKR,QAAS,GACT,OAAQ,GACR,SAAU,GACV,QAAS,GACT,OAAQ,EACR,cAAe,IACjB,EACAsT,CAAA,EAEEopB,GAAY,SAASvG,CAAS,EACxBpS,EAAA,IAAI,WAAWoS,EAAWn2B,CAAC,EAC1B28B,GAAe,SAASxG,CAAS,EAClCpS,EAAA,IAAI,cAAcoS,EAAWn2B,CAAC,EAC7B48B,GAAY,SAASzG,CAAS,EAC/BpS,EAAA,IAAI,WAAWoS,EAAWn2B,CAAC,EAC1B68B,GAAc,SAAS1G,CAAS,EACjCpS,EAAA,IAAI,aAAaoS,EAAWn2B,CAAC,EAC5B88B,GAAW,SAAS3G,CAAS,EAC9BpS,EAAA,IAAI,UAAUoS,EAAWn2B,CAAC,EACzB+8B,GAAO,SAAS5G,CAAS,EAC1BpS,EAAA,IAAI,MAAMoS,EAAWn2B,CAAC,EAItB+jB,EAAA,IAAI,YAAYoS,EAAWn2B,CAAC,OAE5B,CAEN,SAAS,YAGX+jB,EAAQ,SAEL,YAAY,OAAO,EACnB,UAAUoS,EAAW,GAAM,EAAI,EACzB,SAAS,oBAClBpS,EAAQ,SAAS,oBAErB,CACO,OAAAA,CACT,CAEgB,SAAAkZ,GACd3rB,EACA6kB,EACApS,EACA,CACA,GAAKzS,EAGL,GAAIA,EAAO,cAETA,EAAO,cAAcyS,CAAK,UACjBzS,EAAO,WAAa,SAAS,kBAE/BA,EAAA,UAAU,KAAO6kB,EAAWpS,CAAK,MAExC,OAAM,IAAI,MAAM,0BAA0BoS,CAAS,EAAE,CAEzD,CAEgB,SAAA+G,GAAuBpkC,EAAeq9B,EAAsB,CAC1E,MAAM7kB,EAASxY,EAAE,OACXirB,EAAQiZ,GAAY7G,CAAS,EACrB8G,GAAA3rB,EAAQ6kB,EAAWpS,CAAK,CACxC,CAEO,SAASoZ,GAAuBrkC,EAAe,CACpD,MAAMwY,EAASxY,EAAE,OACXq9B,EAAY,QAClB,GAAI,CAAC,2BAA2B,KAAK7kB,EAAO,OAAO,EAAG,CAC9C,MAAAyS,EAAQiZ,GAAY7G,CAAS,EAC7BpS,EAAA,KAAQjrB,EAAU,MAAQ,OAChCirB,EAAM,OAAS,EACTA,EAAA,QAAUzS,EAAO,SAAW,EAC5ByS,EAAA,QAAUzS,EAAO,SAAW,EAC5ByS,EAAA,QAAUzS,EAAO,SAAW,EAC5ByS,EAAA,QAAUzS,EAAO,SAAW,EAClCyS,EAAM,MAASjrB,EAAU,MACzBirB,EAAM,MAASjrB,EAAU,MACnBirB,EAAA,QAAU,CAAC,CAAEjrB,EAAU,QACvBirB,EAAA,OAAS,CAAC,CAAEjrB,EAAU,OACtBirB,EAAA,SAAW,CAAC,CAAEjrB,EAAU,SACxBirB,EAAA,QAAU,CAAC,CAAEjrB,EAAU,QAC7BirB,EAAM,OAAS,EACfA,EAAM,cAAgB,KACtBA,EAAM,aAAe,GACPkZ,GAAA3rB,EAAQ6kB,EAAWpS,CAAK,CACxC,CACF,CAEgB,SAAAqZ,GACdC,EACAlH,EACY,CACN,MAAAxV,EAAQ0c,EAAW,eAAe,CAAC,EACzC,OAAOL,GAAY7G,EAAW,CAC5B,QAAS,GACT,WAAY,GACZ,KAAM,OACN,OAAQ,EACR,QAASxV,EAAM,QACf,QAASA,EAAM,QACf,QAASA,EAAM,QACf,QAASA,EAAM,QACf,QAAS,GACT,OAAQ,GACR,SAAU,GACV,QAAS,GACT,OAAQ,EACR,cAAe,IAAA,CAChB,CACH,CC9UA,GAfI2c,EAAAA,IACF,OAAO,uBACN,OAAe,6BACf,OAAe,0BACf,OAAe,wBACf,OAAe,wBAEdC,EAAAA,IACF,OAAO,sBACN,OAAe,4BACf,OAAe,yBACf,OAAe,uBACf,OAAe,uBAGd,CAACD,MAAK,CACR,IAAIE,EAAWtnB,KACfonB,EAAA,IAAO3S,GAA4C,CACjD,MAAM8S,EAAWvnB,KACXwnB,EAAa,KAAK,IAAI,EAAG,IAAMD,EAAWD,EAAS,EACnDrO,EAAK,OAAO,WAAW,IAAM,CACjCxE,EAAG8S,EAAWC,CAAU,GACvBA,CAAU,EACb,OAAAF,EAAWC,EAAWC,EACfvO,CAAA,CAEX,CAEKoO,QACHA,EAAA,IAAOpO,GAAO,CACZ,OAAO,aAAaA,CAAE,CAAA,GAQnB,SAASwO,GACdhT,EACY,CACZ,IAAIiT,EAAW,GACXzO,EAAKmO,EAAAA,IAAI,SAASO,EAAMC,EAA2B,CACjD,CAACF,GAAYjT,EAAGmT,CAAI,IACtB3O,EAAKmO,EAAAA,IAAIO,CAAK,EAChB,CACD,EACD,MAAO,IAAM,CACXN,EAAA,IAAIpO,CAAE,EACKyO,EAAA,EAAA,CAEf,CAGgB,SAAAG,GACdpT,EACAvU,EAAU,EACE,CACZ,GAAIA,GAAW,EAEb,OAAAuU,EAAGzU,IAAK,EACD,IAAM,CAAA,EACR,CAEL,MAAM8nB,EAAY9nB,KACX,OAAAynB,GAA4BG,GAC7BA,EAAOE,GAAa5nB,GACtBuU,EAAGmT,CAAI,EACA,IAEF,EACR,CACH,CACF,CAEgB,SAAAG,GACdtT,EAKAuT,EAAW,EACC,CACZ,IAAIN,EAAW,GACXO,EAAQ,EACZ,MAAMH,EAAY9nB,KAClB,IAAIkoB,EAASL,GAAmB,SAASF,EAAMC,EAA2B,CACxE,GAAIF,EACF,OAEFO,IAEM,MAAApgB,EAAS+f,EAAOE,EAAYG,EAAQD,EACvCvT,EAAAmT,EAAMK,EAAOD,GAAYngB,CAAM,EAElCqgB,EAASL,GAAmBF,EAAO,KAAK,IAAI,EAAGK,EAAWngB,CAAM,CAAC,GAChEmgB,CAAQ,EACX,MAAO,IAAM,CACJE,IACIR,EAAA,EAAA,CAEf,CAGgB,SAAAS,GAAwBC,EAAiBC,EAAM,GAAe,CAC5E,MAAMtD,EAAW,IAAOsD,EACxB,IAAIf,EAAW,EACXgB,EACJ,MAAO,KACDtoB,GAAA,EAAQsnB,GAAYvC,IACtBuC,EAAWtnB,GAAI,EACfsoB,EAAaF,EAAK,GAEbE,EAEX,CAmCA,OAAO,oBACL,OAAO,qBACP,SAAU7T,EAAyBrX,EAA8B,CAC/D,MAAM0B,EAAQkB,KAEd,OAAO,WAAW,IAAM,CAChB,MAAAuoB,EAAOvoB,GAAQ,EAAAlB,EAClB2V,EAAA,CACD,WAAY,GACZ,cAAe,IAAM,KAAK,IAAI,EAAG,GAAK8T,CAAI,CAAA,CAC3B,CAAA,EAChBnrB,GAAS,OAAO,CACrB,EAEF,OAAO,mBACL,OAAO,oBACP,SAAU6b,EAAY,CACpB,aAAaA,CAAE,CACjB,EAGc,SAAAuP,GACd/T,EACArX,EAGA,CACO,OAAA,oBACJqrB,GAAa,CACRA,EAAS,cAAA,EAAkB,GAAKA,EAAS,WACxChU,IAGH+T,GAAa/T,EAAIrX,CAAO,CAE5B,EACA,CAAE,QAASA,GAAS,OAAQ,CAAA,CAEhC,CAiBA,IAAIsrB,GAAsB,EAEtBC,GAAoB,EAEpBC,GAAwB,GAExBC,GAAsB,GAGtBC,GACAC,GAAiB,GACrB,MAAMC,GAAU,IAAI,eACdC,GAAoBD,GAAQ,MAClCA,GAAQ,MAAM,UAAapmC,GAAoB,CACzCkmC,IACcA,GAAA,CACd,WACEC,IAAkB,GACd,GACA/oB,GAAA,EAAQ0oB,GAAsBK,GACpC,cAAe,IAAM,KAAK,IAAI,EAAGJ,GAAoB3oB,IAAK,CAAA,CAC3D,CAEL,EAGA,SAASkpB,GACPzU,EACArX,EAGQ,CACU,OAAA0rB,GAAArU,EAClBsU,GAAiB,OAAO3rB,GAAS,SAAW,SAAWA,GAAS,QAAU,GAGnE,sBAAuB9K,GAA2B,CACjCo2B,GAAAp2B,EAElB,IAAA62B,EACFN,GAAsBH,GAAsBC,GAE5CQ,EAAuBN,IACvBD,GAAwBC,IAIpBM,EAAuB,IACFA,EAAA,GAIvBN,GAAAM,EAAuBP,GACnBA,GACAO,GAENA,EAAuBN,IACvBD,GAAwBC,GAKtBA,GAAAM,EAAuBP,GACnBA,GACAO,EAGkBP,GAAAO,EAE1BR,GAAoBD,GAAsBG,GAQ1CI,GAAK,YAAY,IAAI,CAAA,CACtB,CACH,CAEA,MAAMG,GAAW,IAAIC,GAAuB,CAC1C,YAAa,EACb,cAAe,CACjB,CAAC,EACD,IAAIC,GAAW,GAEC,SAAAC,GACd9U,EACArX,EAIA,CACA,MAAMgrB,EAAOoB,GAAW,CACtB,GAAI/U,EACJ,KAAMrX,GAAS,KACf,SACE,OAAOA,GAAS,SAAW,SACvBqsB,KAAiBrsB,EAAQ,QACzB,MAAA,CACP,EACDgsB,GAAS,QAAQhB,CAAI,EACjB,CAAAkB,KAGOA,GAAA,GACXJ,GAA4BT,GAAa,CAC5Ba,GAAA,GACXF,GAAS,aAAaX,CAAQ,CAAA,CAC/B,EACH,CCpUA,MAAqBiB,EAAS,CAC5B,OAAe,QAAU,EAEzB,OAAO,QAAiB,CACtB,OAAOA,GAAS,SAClB,CACF,CCHO,MAAMC,EAAS,CAEpB,OAAQ,CACN,KAAM,SAAUr3B,EAAmB,CAC1B,OAAAA,CACT,CACF,EACA,KAAM,CACJ,GAAI,SAAUA,EAAmB,CACxB,OAAA,KAAK,IAAIA,EAAG,GAAG,CACxB,CACF,EAEA,UAAW,CACT,GAAI,SAAUA,EAAmB,CAC/B,OAAOA,EAAIA,CACb,EACA,IAAK,SAAUA,EAAmB,CAChC,OAAOA,GAAK,EAAIA,EAClB,EACA,MAAO,SAAUA,EAAmB,CAC7B,OAAAA,GAAK,GAAK,EACN,GAAMA,EAAIA,EAEZ,KAAQ,EAAEA,GAAKA,EAAI,GAAK,EACjC,EACA,MAAO,sCACT,EAEA,MAAO,CACL,GAAI,SAAUA,EAAmB,CAC/B,OAAOA,EAAIA,EAAIA,CACjB,EACA,IAAK,SAAUA,EAAmB,CACzB,MAAA,EAAEA,EAAIA,EAAIA,EAAI,CACvB,EACA,MAAO,SAAUA,EAAmB,CAC7B,OAAAA,GAAK,GAAK,EACN,GAAMA,EAAIA,EAAIA,EAEhB,KAAQA,GAAK,GAAKA,EAAIA,EAAI,EACnC,CACF,EAEA,QAAS,CACP,GAAI,SAAUA,EAAmB,CACxB,OAAAA,EAAIA,EAAIA,EAAIA,CACrB,EACA,IAAK,SAAUA,EAAmB,CAChC,MAAO,IAAI,EAAEA,EAAIA,EAAIA,EAAIA,CAC3B,EACA,MAAO,SAAUA,EAAmB,CAC7B,OAAAA,GAAK,GAAK,EACN,GAAMA,EAAIA,EAAIA,EAAIA,EAEpB,MAASA,GAAK,GAAKA,EAAIA,EAAIA,EAAI,EACxC,CACF,EAEA,QAAS,CACP,GAAI,SAAUA,EAAmB,CACxB,OAAAA,EAAIA,EAAIA,EAAIA,EAAIA,CACzB,EACA,IAAK,SAAUA,EAAmB,CAChC,MAAO,EAAEA,EAAIA,EAAIA,EAAIA,EAAIA,EAAI,CAC/B,EACA,MAAO,SAAUA,EAAmB,CAC7B,OAAAA,GAAK,GAAK,EACN,GAAMA,EAAIA,EAAIA,EAAIA,EAAIA,EAExB,KAAQA,GAAK,GAAKA,EAAIA,EAAIA,EAAIA,EAAI,EAC3C,CACF,EAEA,WAAY,CACV,GAAI,SAAUA,EAAmB,CAC/B,MAAO,GAAI,KAAK,KAAM,EAAMA,GAAK,KAAK,GAAM,CAAC,CAC/C,EACA,IAAK,SAAUA,EAAmB,CAChC,OAAO,KAAK,IAAKA,EAAI,KAAK,GAAM,CAAC,CACnC,EACA,MAAO,SAAUA,EAAmB,CAClC,MAAO,KAAO,EAAI,KAAK,IAAI,KAAK,IAAM,GAAMA,EAAE,EAChD,CACF,EAEA,YAAa,CACX,GAAI,SAAUA,EAAmB,CAC/B,OAAOA,IAAM,EAAI,EAAI,KAAK,IAAI,KAAMA,EAAI,CAAC,CAC3C,EACA,IAAK,SAAUA,EAAmB,CACzB,OAAAA,IAAM,EAAI,EAAI,EAAI,KAAK,IAAI,EAAG,IAAMA,CAAC,CAC9C,EACA,MAAO,SAAUA,EAAmB,CAClC,OAAIA,IAAM,EACD,EAELA,IAAM,EACD,GAEJA,GAAK,GAAK,EACN,GAAM,KAAK,IAAI,KAAMA,EAAI,CAAC,EAE5B,IAAO,CAAC,KAAK,IAAI,EAAG,KAAOA,EAAI,EAAE,EAAI,EAC9C,CACF,EAEA,SAAU,CACR,GAAI,SAAUA,EAAmB,CAC/B,MAAO,GAAI,KAAK,KAAK,EAAIA,EAAIA,CAAC,CAChC,EACA,IAAK,SAAUA,EAAmB,CAChC,OAAO,KAAK,KAAK,GAAI,EAAEA,EAAIA,CAAC,CAC9B,EACA,MAAO,SAAUA,EAAmB,CAC7B,OAAAA,GAAK,GAAK,EACN,KAAQ,KAAK,KAAK,EAAIA,EAAIA,CAAC,EAAI,GAEjC,IAAO,KAAK,KAAK,GAAKA,GAAK,GAAKA,CAAC,EAAI,EAC9C,EACA,MAAO,iCACT,EAEA,QAAS,CACP,GAAI,SAAUA,EAAmB,CAC/B,OAAIA,IAAM,EACD,EAELA,IAAM,EACD,EAEF,CAAC,KAAK,IAAI,EAAG,IAAMA,EAAI,EAAE,EAAI,KAAK,KAAKA,EAAI,KAAO,EAAI,KAAK,EAAE,CACtE,EACA,IAAK,SAAUA,EAAmB,CAChC,OAAIA,IAAM,EACD,EAELA,IAAM,EACD,EAEF,KAAK,IAAI,EAAG,IAAMA,CAAC,EAAI,KAAK,KAAKA,EAAI,IAAO,EAAI,KAAK,EAAE,EAAI,CACpE,EACA,MAAO,SAAUA,EAAmB,CAClC,OAAIA,IAAM,EACD,EAELA,IAAM,EACD,GAEJA,GAAA,EACDA,EAAI,EAEJ,IAAO,KAAK,IAAI,EAAG,IAAMA,EAAI,EAAE,EAAI,KAAK,KAAKA,EAAI,KAAO,EAAI,KAAK,EAAE,EAIrE,GAAM,KAAK,IAAI,EAAG,KAAOA,EAAI,EAAE,EAAI,KAAK,KAAKA,EAAI,KAAO,EAAI,KAAK,EAAE,EAAI,EAE3E,CACF,EAEA,KAAM,CACJ,GAAI,SAAUA,EAAmB,CAE/B,OAAOA,IAAM,EAAI,EAAIA,EAAIA,IAAM,QAAI,GAAKA,EAAI,QAC9C,EACA,IAAK,SAAUA,EAAmB,CAGzB,OAAAA,IAAM,EAAI,EAAI,EAAEA,EAAIA,IAAM,QAAI,GAAKA,EAAI,SAAK,CACrD,EACA,MAAO,SAAUA,EAAmB,CAClC,MAAMjO,EAAI,UACL,OAAAiO,GAAK,GAAK,EACN,IAAOA,EAAIA,IAAMjO,EAAI,GAAKiO,EAAIjO,IAEhC,KAAQiO,GAAK,GAAKA,IAAMjO,EAAI,GAAKiO,EAAIjO,GAAK,EACnD,EACA,MAAO,yCACT,EAEA,OAAQ,CACN,GAAI,SAAUiO,EAAmB,CAC/B,MAAO,GAAIq3B,EAAO,OAAO,IAAI,EAAIr3B,CAAC,CACpC,EACA,IAAK,SAAUA,EAAmB,CAC5B,OAAAA,EAAI,EAAI,KACH,OAASA,EAAIA,EACXA,EAAI,EAAI,KACV,QAAUA,GAAK,IAAM,MAAQA,EAAI,IAC/BA,EAAI,IAAM,KACZ,QAAUA,GAAK,KAAO,MAAQA,EAAI,MAElC,QAAUA,GAAK,MAAQ,MAAQA,EAAI,OAE9C,EACA,MAAO,SAAUA,EAAmB,CAClC,OAAIA,EAAI,GACCq3B,EAAO,OAAO,GAAGr3B,EAAI,CAAC,EAAI,GAE5Bq3B,EAAO,OAAO,IAAIr3B,EAAI,EAAI,CAAC,EAAI,GAAM,EAC9C,CACF,EAEA,YAAa,SAAUs3B,EAAQ,EAI7B,CACA,OAAAA,EAAQA,EAAQ,OAAO,QAAU,OAAO,QAAUA,EAC1CA,EAAAA,EAAQ,IAAQ,IAAQA,EACzB,CACL,GAAI,SAAU,EAAmB,CAC/B,OAAO,GAAKA,CACd,EACA,IAAK,SAAU,EAAmB,CACzB,MAAA,IAAK,EAAI,IAAMA,CACxB,EACA,MAAO,SAAU,EAAmB,CAClC,OAAI,EAAI,IACE,EAAI,IAAMA,EAAQ,GAEpB,GAAK,EAAI,EAAI,IAAMA,GAAS,EAAI,EAC1C,CAAA,CAEJ,EAEA,OAAQ,SAAUt3B,EAAW,CAC3B,OAAO,KAAK,QACd,EAEA,WAAY,SAAUu3B,EAAkC,CACtD,OAAO,SAAU,EAAW,CAC1B,OAAO,KAAK,MAAM,EAAIA,CAAQ,EAAIA,CAAA,CAEtC,EAEA,kBAAmB,SACjBC,EACAC,EAAmB,GACH,CAChB,MAAMC,EAAmB,EAAMD,EAC/B,OAAO,SAAUz3B,EAAW,CAC1B,OACEy3B,EAAmB,KAAK,OAAA,EAAWC,EAAmBF,EAAex3B,CAAC,CAAA,CAG5E,EACA,MAAO,SAAUA,EAAW,CAC1B,OAAOA,EAAI,KAAK,IAAIA,EAAI,KAAK,GAAK,CAAC,EAAI,CACzC,EACA,cAAe,SAAUA,EAAW,CAClC,OAAOA,EAAI,GAAM,KAAK,OAAA,EAAW,EACnC,CACF,EAIO,SAAS23B,GAAcC,EAAwC,CACpE,OAAQA,EAAQ,CAEd,KAAKP,EAAO,UAAU,GACpB,OAAOA,EAAO,UAAU,IAC1B,KAAKA,EAAO,UAAU,IACpB,OAAOA,EAAO,UAAU,GAC1B,KAAKA,EAAO,UAAU,MACpB,OAAOA,EAAO,UAAU,MAE1B,KAAKA,EAAO,MAAM,GAChB,OAAOA,EAAO,MAAM,IACtB,KAAKA,EAAO,MAAM,IAChB,OAAOA,EAAO,MAAM,GACtB,KAAKA,EAAO,MAAM,MAChB,OAAOA,EAAO,MAAM,MAEtB,KAAKA,EAAO,QAAQ,GAClB,OAAOA,EAAO,QAAQ,IACxB,KAAKA,EAAO,QAAQ,IAClB,OAAOA,EAAO,QAAQ,GACxB,KAAKA,EAAO,QAAQ,MAClB,OAAOA,EAAO,QAAQ,MAExB,KAAKA,EAAO,QAAQ,GAClB,OAAOA,EAAO,QAAQ,IACxB,KAAKA,EAAO,QAAQ,IAClB,OAAOA,EAAO,QAAQ,GACxB,KAAKA,EAAO,QAAQ,MAClB,OAAOA,EAAO,QAAQ,MAExB,KAAKA,EAAO,WAAW,GACrB,OAAOA,EAAO,WAAW,IAC3B,KAAKA,EAAO,WAAW,IACrB,OAAOA,EAAO,WAAW,GAC3B,KAAKA,EAAO,WAAW,MACrB,OAAOA,EAAO,WAAW,MAE3B,KAAKA,EAAO,YAAY,GACtB,OAAOA,EAAO,YAAY,IAC5B,KAAKA,EAAO,YAAY,IACtB,OAAOA,EAAO,YAAY,GAC5B,KAAKA,EAAO,YAAY,MACtB,OAAOA,EAAO,YAAY,MAE5B,KAAKA,EAAO,SAAS,GACnB,OAAOA,EAAO,SAAS,IACzB,KAAKA,EAAO,SAAS,IACnB,OAAOA,EAAO,SAAS,GACzB,KAAKA,EAAO,SAAS,MACnB,OAAOA,EAAO,SAAS,MAEzB,KAAKA,EAAO,QAAQ,GAClB,OAAOA,EAAO,QAAQ,IACxB,KAAKA,EAAO,QAAQ,IAClB,OAAOA,EAAO,QAAQ,GACxB,KAAKA,EAAO,QAAQ,MAClB,OAAOA,EAAO,QAAQ,MAExB,KAAKA,EAAO,KAAK,GACf,OAAOA,EAAO,KAAK,IACrB,KAAKA,EAAO,KAAK,IACf,OAAOA,EAAO,KAAK,GACrB,KAAKA,EAAO,KAAK,MACf,OAAOA,EAAO,KAAK,MAErB,KAAKA,EAAO,OAAO,GACjB,OAAOA,EAAO,OAAO,IACvB,KAAKA,EAAO,OAAO,IACjB,OAAOA,EAAO,OAAO,GACvB,KAAKA,EAAO,OAAO,MACjB,OAAOA,EAAO,OAAO,MACvB,QACS,OAAAO,CACX,CACF,CCvUA,MAAMC,GAAoB,EACpBC,GAAmB,KACnBC,GAAwB,KACxBC,GAA6B,GAE7BC,GAAmB,GACnBC,GAAkB,GAAOD,GAAmB,GAE5CE,GAAwB,OAAO,cAAiB,WAEtD,SAASl0B,GAAEm0B,EAAaC,EAAa,CAC5B,MAAA,GAAM,EAAMA,EAAM,EAAMD,CACjC,CACA,SAASp8B,GAAEo8B,EAAaC,EAAa,CAC5B,MAAA,GAAMA,EAAM,EAAMD,CAC3B,CACA,SAAShzB,GAAEgzB,EAAa,CACtB,MAAO,GAAMA,CACf,CAGA,SAASE,GAAWC,EAAYH,EAAaC,EAAa,CACxD,QAASp0B,GAAEm0B,EAAKC,CAAG,EAAIE,EAAKv8B,GAAEo8B,EAAKC,CAAG,GAAKE,EAAKnzB,GAAEgzB,CAAG,GAAKG,CAC5D,CAGA,SAASC,GAASD,EAAYH,EAAaC,EAAa,CACtD,MAAO,GAAMp0B,GAAEm0B,EAAKC,CAAG,EAAIE,EAAKA,EAAK,EAAMv8B,GAAEo8B,EAAKC,CAAG,EAAIE,EAAKnzB,GAAEgzB,CAAG,CACrE,CAEA,SAASK,GACPC,EACAC,EACAC,EACAC,EACAC,EACA,CACI,IAAAC,EACFC,EACA7mC,EAAI,EACH,GACU6mC,EAAAL,GAAMC,EAAKD,GAAM,EAC5BI,EAAWT,GAAWU,EAAUH,EAAKC,CAAG,EAAIJ,EACxCK,EAAW,EACRH,EAAAI,EAEAL,EAAAK,QAGP,KAAK,IAAID,CAAQ,EAAIhB,IACrB,EAAE5lC,EAAI6lC,IAED,OAAAgB,CACT,CAEA,SAASC,GACPP,EACAQ,EACAL,EACAC,EACA,CACA,QAAS,EAAI,EAAG,EAAIjB,GAAmB,EAAE,EAAG,CAC1C,MAAMsB,EAAeX,GAASU,EAASL,EAAKC,CAAG,EAC/C,GAAIK,IAAiB,EACZ,OAAAD,EAET,MAAMH,EAAWT,GAAWY,EAASL,EAAKC,CAAG,EAAIJ,EACjDQ,GAAWH,EAAWI,CACxB,CACO,OAAAD,CACT,CAEA,SAASE,GAAah5B,EAAW,CACxB,OAAAA,CACT,CAOO,SAASi5B,GACdR,EACAS,EACAR,EACAS,EACuB,CACnB,GAAA,EAAE,GAAKV,GAAOA,GAAO,GAAK,GAAKC,GAAOA,GAAO,GACzC,MAAA,IAAI,MAAM,yCAAyC,EAGvD,GAAAD,IAAQS,GAAOR,IAAQS,EAClB,OAAAH,GAIH,MAAAI,EAAerB,GACjB,IAAI,aAAaF,EAAgB,EACjC,IAAI,MAAMA,EAAgB,EAC9B,QAAS9lC,EAAI,EAAGA,EAAI8lC,GAAkB,EAAE9lC,EACtCqnC,EAAarnC,CAAC,EAAImmC,GAAWnmC,EAAI+lC,GAAiBW,EAAKC,CAAG,EAG5D,SAASW,EAASf,EAAY,CAC5B,IAAIgB,EAAgB,EAChBC,EAAgB,EACpB,MAAMC,EAAa3B,GAAmB,EAEtC,KAEE0B,IAAkBC,GAAcJ,EAAaG,CAAa,GAAKjB,EAC/D,EAAEiB,EAEeD,GAAAxB,GAEjB,EAAAyB,EAGI,MAAAE,GACHnB,EAAKc,EAAaG,CAAa,IAC/BH,EAAaG,EAAgB,CAAC,EAAIH,EAAaG,CAAa,GACzDG,EAAYJ,EAAgBG,EAAO3B,GAEnC6B,EAAevB,GAASsB,EAAWjB,EAAKC,CAAG,EACjD,OAAIiB,GAAgBjC,GACXmB,GAAqBP,EAAIoB,EAAWjB,EAAKC,CAAG,EAC1CiB,IAAiB,EACnBD,EAEArB,GACLC,EACAgB,EACAA,EAAgBxB,GAChBW,EACAC,CAAA,CAGN,CAEA,OAAQ14B,GAEFA,IAAM,GAAKA,IAAM,EACZA,EAEFk4B,GAAWmB,EAASr5B,CAAC,EAAGk5B,EAAKC,CAAG,CAE3C,CASO,SAASS,GACdC,EACkC,CAClC,OAAQA,EAAU,CAChB,IAAK,SAEH,MAAO,CAAC,EAAG,EAAG,EAAG,CAAC,EACpB,IAAK,OAEH,MAAO,CAAC,IAAM,GAAK,IAAM,CAAC,EAC5B,IAAK,UAEH,MAAO,CAAC,IAAM,EAAG,EAAG,CAAC,EACvB,IAAK,cAEH,MAAO,CAAC,IAAM,EAAG,IAAM,CAAC,EAC1B,IAAK,WAEH,MAAO,CAAC,EAAG,EAAG,IAAM,CAAC,CACzB,CACF,CAEO,SAASC,GACdD,EACkC,CAClC,KAAM,CAACE,EAAIC,EAAIC,EAAIC,CAAE,EAAIN,GAAsBC,CAAQ,EAChD,MAAA,CAAC,EAAII,EAAI,EAAIC,EAAI,EAAIH,EAAI,EAAIC,CAAE,CACxC,CAEO,SAASG,GACdN,EACgB,CAChB,OAAOZ,GAAa,GAAGW,GAAsBC,CAAQ,CAAC,CACxD,CAEO,SAASO,GACdP,EACgB,CAChB,OAAOZ,GAAa,GAAGa,GAA6BD,CAAQ,CAAC,CAC/D,CCrMO,MAAMQ,GAAgB,CAC3B,MAAO,CACL,OAAQ,SAAUx8B,EAAYkY,EAAYnW,EAAmB,CACnD,OAAAmW,EAAKlY,GAAM+B,EAAI/B,CACzB,EACA,UAAY,UAAY,CAChB,MAAAnD,EAAI,CAAC,CAAC,EACZ,OAAO,SAAUvK,EAAmB,CAClC,IAAIwB,EAAI,EACJ,GAAA+I,EAAEvK,CAAC,EACL,OAAOuK,EAAEvK,CAAC,EAEZ,QAAS4B,EAAI5B,EAAG4B,EAAI,EAAGA,IAChBJ,GAAAI,EAEP,OAAA2I,EAAEvK,CAAC,EAAIwB,EACAA,CAAA,CACT,EACC,EACH,UAAW,SAAUxB,EAAW4B,EAAmB,CAC3C,MAAAuoC,EAAKD,GAAc,MAAM,UACxB,OAAAC,EAAGnqC,CAAC,EAAImqC,EAAGvoC,CAAC,EAAIuoC,EAAGnqC,EAAI4B,CAAC,CACjC,EAEA,WAAY,SACV8L,EACAkY,EACAC,EACAukB,EACA36B,EACQ,CACF,MAAAjB,GAAMqX,EAAKnY,GAAM,GACjB28B,GAAMD,EAAKxkB,GAAM,GACjB0kB,EAAK76B,EAAIA,EACT86B,EAAK96B,EAAI66B,EACf,OACG,EAAI1kB,EAAK,EAAIC,EAAKrX,EAAK67B,GAAME,GAC7B,GAAK3kB,EAAK,EAAIC,EAAK,EAAIrX,EAAK67B,GAAMC,EACnC97B,EAAKiB,EACLmW,CAEJ,EACA,gBAAiB,CACflY,EACAkY,EACAC,EACApW,IACW,CACX,MAAMyB,EAAI,EAAIzB,EACP,OAAAyB,EAAIA,EAAIxD,EAAK,EAAIwD,EAAIzB,EAAImW,EAAKnW,EAAIA,EAAIoW,CAC/C,EACA,YAAa,CACXnY,EACAkY,EACAC,EACAukB,EACA36B,IACW,CACX,MAAMyB,EAAI,EAAIzB,EACd,OACEyB,EAAIA,EAAIA,EAAIxD,EACZ,EAAIwD,EAAIA,EAAIzB,EAAImW,EAChB,EAAI1U,EAAIzB,EAAIA,EAAIoW,EAChBpW,EAAIA,EAAIA,EAAI26B,CAEhB,CACF,EAEA,OAAQ,SAAUzkB,EAAazU,EAAmB,CAC1C,MAAA7I,EAAIsd,EAAE,OAAS,EACf5W,EAAI1G,EAAI6I,EACR,EAAI,KAAK,MAAMnC,CAAC,EAChBzL,EAAK4mC,GAAc,MAAM,OAC/B,OAAIh5B,EAAI,EACC5N,EAAGqiB,EAAE,CAAC,EAAGA,EAAE,CAAC,EAAG5W,CAAC,EAErBmC,EAAI,EACC5N,EAAGqiB,EAAEtd,CAAC,EAAGsd,EAAEtd,EAAI,CAAC,EAAGA,EAAI0G,CAAC,EAE1BzL,EAAGqiB,EAAE,CAAC,EAAGA,EAAE,EAAI,EAAItd,EAAIA,EAAI,EAAI,CAAC,EAAG0G,EAAI,CAAC,CACjD,EAEA,OAAQ,SAAU4W,EAAazU,EAAmB,CAChD,IAAIlC,EAAI,EACF,MAAA,EAAI2W,EAAE,OAAS,EACf6kB,EAAK,KAAK,IACV9hC,EAAKwhC,GAAc,MAAM,UAC/B,QAAStoC,EAAI,EAAGA,GAAK,EAAGA,IACtBoN,GAAKw7B,EAAG,EAAIt5B,EAAG,EAAItP,CAAC,EAAI4oC,EAAGt5B,EAAGtP,CAAC,EAAI+jB,EAAE/jB,CAAC,EAAI8G,EAAG,EAAG9G,CAAC,EAE5C,OAAAoN,CACT,EAEA,WAAY,SAAU2W,EAAazU,EAAmB,CAC9C,MAAA7I,EAAIsd,EAAE,OAAS,EACrB,IAAI5W,EAAI1G,EAAI6I,EACR,EAAI,KAAK,MAAMnC,CAAC,EACd,MAAAzL,EAAK4mC,GAAc,MAAM,WAC/B,OAAIvkB,EAAE,CAAC,IAAMA,EAAEtd,CAAC,GACV6I,EAAI,IACN,EAAI,KAAK,MAAOnC,EAAI1G,GAAK,EAAI6I,EAAG,GAE3B5N,EACLqiB,GAAG,EAAI,EAAItd,GAAKA,CAAC,EACjBsd,EAAE,CAAC,EACHA,GAAG,EAAI,GAAKtd,CAAC,EACbsd,GAAG,EAAI,GAAKtd,CAAC,EACb0G,EAAI,CAAA,GAGFmC,EAAI,EACCyU,EAAE,CAAC,GAAKriB,EAAGqiB,EAAE,CAAC,EAAGA,EAAE,CAAC,EAAGA,EAAE,CAAC,EAAGA,EAAE,CAAC,EAAG,CAAC5W,CAAC,EAAI4W,EAAE,CAAC,GAEjDzU,EAAI,EACCyU,EAAEtd,CAAC,GAAK/E,EAAGqiB,EAAEtd,CAAC,EAAGsd,EAAEtd,CAAC,EAAGsd,EAAEtd,EAAI,CAAC,EAAGsd,EAAEtd,EAAI,CAAC,EAAG0G,EAAI1G,CAAC,EAAIsd,EAAEtd,CAAC,GAEzD/E,EACLqiB,EAAE,EAAI,EAAI,EAAI,CAAC,EACfA,EAAE,CAAC,EACHA,EAAEtd,EAAI,EAAI,EAAIA,EAAI,EAAI,CAAC,EACvBsd,EAAEtd,EAAI,EAAI,EAAIA,EAAI,EAAI,CAAC,EACvB0G,EAAI,CAAA,CAGV,CACF,ECzHA,MAAqB07B,EAAM,CACjB,QAEJ,CAAA,EAEI,yBAEJ,CAAA,EAEJ,QAAqC,CAC5B,OAAA,OAAO,KAAK,KAAK,OAAO,EAAE,IAAKC,GAAY,KAAK,QAAQA,CAAO,CAAC,CACzE,CAEA,WAAkB,CAChB,KAAK,QAAU,EACjB,CAEA,IAAIC,EAAkC,CACpC,KAAK,QAAQA,EAAM,MAAO,CAAA,EAAIA,EAC9B,KAAK,yBAAyBA,EAAM,MAAO,CAAA,EAAIA,CACjD,CAEA,OAAOA,EAAkC,CACvC,OAAO,KAAK,QAAQA,EAAM,MAAO,CAAA,EACjC,OAAO,KAAK,yBAAyBA,EAAM,MAAO,CAAA,CACpD,CAEA,OAAO5F,EAAe5nB,KAAOytB,EAAW,GAAgB,CACtD,MAAMC,EAAW,OAAO,KAAK,KAAK,OAAO,EAMzC,QAAS,EAAI,EAAG,EAAIA,EAAS,OAAQ,IAAK,CACxC,MAAMF,EAAQ,KAAK,QAAQE,EAAS,CAAC,CAAC,EAChCC,EAAY,CAACF,EACfD,GAASA,EAAM,OAAO5F,EAAM+F,CAAS,IAAM,IAAS,CAACF,GACvD,OAAO,KAAK,QAAQC,EAAS,CAAC,CAAC,CAEnC,CAIA,MAAO,CAAC,CAAC,OAAO,KAAK,KAAK,OAAO,EAAE,MACrC,CACF,CCtDa,MAAAE,GAAY,IAAIN,GCWtB,MAAMO,EAA8B,CAgEzC,YAAoBC,EAAoBC,EAAwBH,GAAW,CAAvD,KAAA,QAAAE,EAAoB,KAAA,OAAAC,CAAoC,CA/DpE,IAAMrE,GAAS,SAGf,WAAa,GAEb,WAAa,EAEb,WAAa,EAEb,cAAgB,IAGhB,UAAY,GAEZ,gBAAkB,EAGlB,eAAiB,EAEjB,QAAU,EAEV,iBAEA,MAAQ,GAER,UAAY,GAGZ,aAA6B,CAAA,EAE7B,WAA8C,CAAA,EAE9C,mBAAmC,CAAA,EAGnC,gBAAkCC,EAAO,OAAO,KAEhD,uBAAgDoD,GAAc,OAG9D,eAAoC,CAAA,EAEpC,gBAAkB,GAGlB,iBAEA,sBAAwB,GAExB,sBAEA,2BAA6B,GAE7B,kBAEA,kBAEA,oBAEA,gBAEA,SAAW,GAInB,OAAgB,CACd,OAAO,KAAK,GACd,CAEA,WAAqB,CACnB,OAAO,KAAK,UACd,CAEA,UAAoB,CAClB,OAAO,KAAK,SACd,CAEA,GAAGlrB,EAA0BkjB,EAAyB,CAC/C,YAAA,WAAa,OAAO,OAAOljB,CAAU,EACtCkjB,IAAa,SACf,KAAK,cAAgBA,GAEhB,IACT,CAEA,SAAS15B,EAAI,IAAY,CACvB,YAAK,cAAgBA,EACd,IACT,CAEA,MAAMu8B,EAAe5nB,KAAa,CAChC,GAAI,KAAK,WACA,OAAA,KAIT,GAFA,KAAK,QAAU,KAAK,OAAO,IAAI,IAA2B,EAC1D,KAAK,QAAU,KAAK,eAChB,KAAK,UAAW,CAClB,KAAK,UAAY,GACN,UAAAwD,KAAY,KAAK,mBAC1B,KAAK,0BAA0BA,CAAQ,EACvC,KAAK,aAAaA,CAAQ,EAAI,KAAK,mBAAmBA,CAAQ,CAElE,CACA,YAAK,WAAa,GAClB,KAAK,UAAY,GACjB,KAAK,sBAAwB,GAC7B,KAAK,2BAA6B,GAClC,KAAK,gBAAkB,GACvB,KAAK,WAAaokB,EAClB,KAAK,YAAc,KAAK,WACnB,KAAA,iBACH,KAAK,QACL,KAAK,aACL,KAAK,WACL,KAAK,kBAAA,EAEA,IACT,CAEQ,iBACNkG,EACAE,EACAC,EACAC,EACM,CACN,UAAW1qB,KAAYyqB,EAAY,CAC3B,MAAAE,EAAaL,EAAQtqB,CAAQ,EAC7B4qB,EAAoB,MAAM,QAAQD,CAAU,EAC5CE,EAAWD,EAAoB,QAAU,OAAOD,EAChDG,EACJ,CAACF,GAAqB,MAAM,QAAQH,EAAWzqB,CAAQ,CAAC,EACtD,GAAA,EAAA6qB,IAAa,aAAeA,IAAa,YAG7C,IAAIC,EAAqB,CACnB,IAAAC,EAAYN,EAAWzqB,CAAQ,EAC/B,GAAA+qB,EAAU,SAAW,EACvB,SAEFA,EAAYA,EAAU,IACpB,KAAK,qBAAqB,KAAK,KAAMJ,CAAoB,CAAA,EAE3DF,EAAWzqB,CAAQ,EAAI,CAAC2qB,CAAU,EAAE,OAAOI,CAAS,CACtD,CACA,IACGF,IAAa,UAAYD,IAC1BD,GACA,CAACG,EACD,CACAN,EAAaxqB,CAAQ,EAAI4qB,EAAoB,CAAA,EAAK,CAAA,EAClD,UAAW1qB,KAAQyqB,EACjBH,EAAaxqB,CAAQ,EAAEE,CAAI,EAAIyqB,EAAWzqB,CAAI,EAEhDwqB,EAAmB1qB,CAAQ,EAAI4qB,EAAoB,CAAA,EAAK,CAAA,EACnD,KAAA,iBACHD,EACAH,EAAaxqB,CAAQ,EACrByqB,EAAWzqB,CAAQ,EACnB0qB,EAAmB1qB,CAAQ,CAAA,CAC7B,MAEI,OAAOwqB,EAAaxqB,CAAQ,EAAM,MACpCwqB,EAAaxqB,CAAQ,EAAI2qB,GAEtBC,IACHJ,EAAaxqB,CAAQ,GAAK,GAExB8qB,EACFJ,EAAmB1qB,CAAQ,EAAIyqB,EAAWzqB,CAAQ,EAAE,MAAA,EAAQ,UAE5D0qB,EAAmB1qB,CAAQ,EAAIwqB,EAAaxqB,CAAQ,GAAK,EAG/D,CACF,CAEA,MAAa,CAKP,OAJC,KAAK,kBACR,KAAK,gBAAkB,GACvB,KAAK,kBAAkB,GAEpB,KAAK,YAGV,KAAK,QAAU,KAAK,OAAO,OAAO,IAA2B,EAC7D,KAAK,WAAa,GAClB,KAAK,UAAY,GACb,KAAK,iBACF,KAAA,gBAAgB,KAAK,OAAO,EAE5B,MARE,IASX,CAEA,KAAY,CACV,YAAK,SAAW,GAChB,KAAK,OAAO,GAAQ,EACb,IACT,CAEA,MAAMokB,EAAe5nB,KAAa,CAChC,OAAI,KAAK,WAAa,CAAC,KAAK,WACnB,MAET,KAAK,UAAY,GACjB,KAAK,gBAAkB4nB,EACvB,KAAK,QAAU,KAAK,OAAO,OAAO,IAA2B,EACtD,KACT,CAEA,OAAOA,EAAe5nB,KAAa,CACjC,MAAI,CAAC,KAAK,WAAa,CAAC,KAAK,WACpB,MAET,KAAK,UAAY,GACZ,KAAA,YAAc4nB,EAAO,KAAK,gBAC/B,KAAK,gBAAkB,EACvB,KAAK,QAAU,KAAK,OAAO,IAAI,IAA2B,EACnD,KACT,CAEA,mBAA0B,CAElB,QAAAnjC,EAAI,EAAG+pC,EAAmB,KAAK,eAAe,OAClD/pC,EAAI+pC,EACJ/pC,IAEK,KAAA,eAAeA,CAAC,EAAE,KAAK,EAEvB,OAAA,IACT,CAEA,MAAMgqC,EAAQb,GAAiB,CAC7B,YAAK,OAASa,EACP,IACT,CAEA,MAAMC,EAAS,EAAS,CACtB,YAAK,WAAaA,EACX,IACT,CAEA,OAAOC,EAAQ,EAAS,CACtB,YAAK,eAAiBA,EACtB,KAAK,QAAUA,EACR,IACT,CAEA,YAAYD,EAAuB,CACjC,YAAK,iBAAmBA,EACjB,IACT,CAEA,KAAKE,EAAO,GAAa,CACvB,YAAK,MAAQA,EACN,IACT,CAEA,OAAO9E,EAAiCH,EAAO,OAAO,KAAY,CAChE,YAAK,gBAAkBG,EAChB,IACT,CAEA,cACE+E,EAA+C9B,GAAc,OACvD,CACN,YAAK,uBAAyB8B,EACvB,IACT,CAEA,SAASC,EAAiC,CACxC,YAAK,eAAiBA,EACf,IACT,CAEA,QAAQppB,EAAsC,CAC5C,YAAK,iBAAmBA,EACjB,IACT,CAEA,aAAaA,EAAsC,CACjD,YAAK,sBAAwBA,EACtB,IACT,CAEA,SAASA,EAAuD,CAC9D,YAAK,kBAAoBA,EAClB,IACT,CAEA,SAASA,EAAsC,CAC7C,YAAK,kBAAoBA,EAClB,IACT,CAEA,WAAWA,EAAsC,CAC/C,YAAK,oBAAsBA,EACpB,IACT,CAEA,OAAOA,EAAsC,CAC3C,YAAK,gBAAkBA,EAChB,IACT,CAKA,OAAOkiB,EAAO5nB,KAAO2tB,EAAY,GAAe,CAC9C,GAAI,KAAK,UAAkB,MAAA,GACvB,IAAAnqB,EACAurB,EACE,MAAAC,EAAU,KAAK,WAAa,KAAK,cACvC,GAAI,CAAC,KAAK,UAAY,CAAC,KAAK,WAAY,CACtC,GAAIpH,EAAOoH,EAAgB,MAAA,GACvBrB,GAAW,KAAK,MAAM/F,CAAI,CAChC,CAEI,GADJ,KAAK,SAAW,GACZA,EAAO,KAAK,WACP,MAAA,GAEL,KAAK,wBAA0B,KAC7B,KAAK,kBACF,KAAA,iBAAiB,KAAK,OAAO,EAEpC,KAAK,sBAAwB,IAE3B,KAAK,6BAA+B,KAClC,KAAK,uBACF,KAAA,sBAAsB,KAAK,OAAO,EAEzC,KAAK,2BAA6B,IAEzBmH,GAAAnH,EAAO,KAAK,YAAc,KAAK,cAC1CmH,EAAU,KAAK,gBAAkB,GAAKA,EAAU,EAAI,EAAIA,EAClD,MAAA5iB,EAAQ,KAAK,gBAAgB4iB,CAAO,EAU1C,GATK,KAAA,kBACH,KAAK,QACL,KAAK,aACL,KAAK,WACL5iB,CAAA,EAEE,KAAK,mBACF,KAAA,kBAAkB,KAAK,QAAS4iB,CAAO,EAE1CA,IAAY,EACV,GAAA,KAAK,QAAU,EAAG,CAChB,SAAS,KAAK,OAAO,GAClB,KAAA,UAEF,IAAAvrB,KAAY,KAAK,mBAChB,CAAC,KAAK,OAAS,OAAO,KAAK,WAAWA,CAAQ,GAAM,WACjD,KAAA,mBAAmBA,CAAQ,EAC9B,KAAK,mBAAmBA,CAAQ,EAChC,WAAW,KAAK,WAAWA,CAAQ,CAAW,GAE9C,KAAK,OACP,KAAK,0BAA0BA,CAAQ,EAEzC,KAAK,aAAaA,CAAQ,EAAI,KAAK,mBAAmBA,CAAQ,EAEhE,OAAI,KAAK,QACF,KAAA,UAAY,CAAC,KAAK,WAErB,KAAK,mBAAqB,OACvB,KAAA,WAAaokB,EAAO,KAAK,iBAEzB,KAAA,WAAaA,EAAO,KAAK,WAE5B,KAAK,mBACF,KAAA,kBAAkB,KAAK,OAAO,EAErC,KAAK,2BAA6B,GAC3B,EAAA,KACF,CACD,KAAK,qBACF,KAAA,oBAAoB,KAAK,OAAO,EAGjC,QAAAnjC,EAAI,EAAG+pC,EAAmB,KAAK,eAAe,OAClD/pC,EAAI+pC,EACJ/pC,IAIA,KAAK,eAAeA,CAAC,EAAE,MAAM,KAAK,WAAa,KAAK,aAAa,EAEnE,YAAK,WAAa,GACX,EACT,CAEK,MAAA,EACT,CAEQ,kBACNqpC,EACAE,EACAC,EACA9hB,EACM,CACN,UAAW3I,KAAYyqB,EAAY,CAC7B,GAAAD,EAAaxqB,CAAQ,IAAM,OAC7B,SAEI,MAAA1E,EAAQkvB,EAAaxqB,CAAQ,GAAK,EACpC,IAAAtI,EAAM+yB,EAAWzqB,CAAQ,EAC7B,MAAMyrB,EAAe,MAAM,QAAQnB,EAAQtqB,CAAQ,CAAC,EAC9C0rB,EAAa,MAAM,QAAQh0B,CAAG,EACR,CAAC+zB,GAAgBC,EAEnCpB,EAAAtqB,CAAQ,EAAI,KAAK,uBACvBtI,EACAiR,CAAA,EAEO,OAAOjR,GAAQ,UAAYA,EACpC,KAAK,kBAAkB4yB,EAAQtqB,CAAQ,EAAG1E,EAAO5D,EAAKiR,CAAK,GAE3DjR,EAAM,KAAK,qBACT4D,EACA5D,CAAA,EAEE,OAAOA,GAAQ,WACjB4yB,EAAQtqB,CAAQ,EAAI1E,GAAS5D,EAAM4D,GAASqN,GAGlD,CACF,CAGQ,qBAAqBrN,EAAe5D,EAA8B,CACpE,OAAA,OAAOA,GAAQ,SACVA,EAELA,EAAI,OAAO,CAAC,IAAM,KAAOA,EAAI,OAAO,CAAC,IAAM,IACtC4D,EAAQ,WAAW5D,CAAG,EAEtB,WAAWA,CAAG,CAEzB,CAEQ,0BAA0BsI,EAAwB,CAClD,MAAAjJ,EAAM,KAAK,mBAAmBiJ,CAAQ,EACtC2rB,EAAW,KAAK,WAAW3rB,CAAQ,EACrC,OAAO2rB,GAAa,SACjB,KAAA,mBAAmB3rB,CAAQ,EAC9B,KAAK,mBAAmBA,CAAQ,EAAI,WAAW2rB,CAAQ,EAEpD,KAAA,mBAAmB3rB,CAAQ,EAAI2rB,EAEjC,KAAA,WAAW3rB,CAAQ,EAAIjJ,CAC9B,CACF,CC9bA,MAAM60B,GAAS1F,GAAS,OAMlB2F,GAASzB,GAAU,OAAO,KAAKA,EAAS,EACxC0B,GAAY1B,GAAU,UAAU,KAAKA,EAAS,EAC9Czd,GAAMyd,GAAU,IAAI,KAAKA,EAAS,EAClCrN,GAASqN,GAAU,OAAO,KAAKA,EAAS,EACxC2B,GAAS3B,GAAU,OAAO,KAAKA,EAAS,EAEjC4B,GAAQ,CAAA,IACnBxvB,GACA,SAAA0pB,GACA,OAAAC,EACA,cAAAoD,GACA,MAAAO,GACA,MAAAO,GACA,OAAAuB,GACA,OAAAC,GACA,UAAAC,GACA,IAAAnf,GAAA,OACAoQ,GACA,OAAAgP,EACF,ECzCO,MAAME,EAAM,CACjB,UACA,UACA,QACA,YACA,QAEA,YAAY9B,EAAY,GAAM,CAC5B,KAAK,UAAYA,EACjB,KAAK,UAAY,EACjB,KAAK,QAAU,EACf,KAAK,YAAc,EACnB,KAAK,QAAU,EACjB,CAEA,OAAQ,CACN,KAAK,UAAY3tB,KACjB,KAAK,QAAU,KAAK,UACpB,KAAK,YAAc,EACnB,KAAK,QAAU,EACjB,CAEA,MAAO,CACL,KAAK,eAAe,EACpB,KAAK,QAAU,GACf,KAAK,UAAY,EACnB,CAGA,gBAAiB,CACf,YAAK,SAAS,EACP,KAAK,WACd,CAGA,UAAW,CACT,IAAIuoB,EAAO,EACX,GAAI,KAAK,WAAa,CAAC,KAAK,QAC1B,YAAK,MAAM,EACJ,EAET,GAAI,KAAK,QAAS,CAChB,MAAMmH,EAAU1vB,KAChBuoB,EAAOmH,EAAU,KAAK,QACtB,KAAK,QAAUA,EACf,KAAK,aAAenH,CACtB,CACO,OAAAA,CACT,CACF,CCfO,MAAMoH,EAAS,CACb,OAAgC,CAAA,EAGhC,cACA,aACA,gBAEP,YAAYvyB,EAIT,CACI,KAAA,cAAgBA,GAAS,eAAiB,IAC/C,KAAK,aAAeA,GAAS,aAC7B,KAAK,gBAAkBA,GAAS,eAClC,CAEA,IAAW,OAAgB,CACzB,OAAO,KAAK,OAAO,MACrB,CAEO,OAAc,CACnB,KAAK,OAAS,EAChB,CAEQ,KAAKwyB,EAAU,GAAO,CAC5BC,GACE,KAAK,OACL,CAACziC,EAAwByE,IACtB+9B,EAA+BxiC,EAAE,MAAQyE,EAAE,MAAjCzE,EAAE,OAASyE,EAAE,KAAoB,CAElD,CAEQ,YACNi9B,EAAgC,KAAK,OACd,CACvB,MAAMgB,EAAgC,CAAA,EAC/B,OAAAhB,EAAA,QAAStB,GAAU,CAClB,MAAAl7B,EAAI,CAAE,GAAGk7B,GACf,OAAOl7B,EAAE,MACTA,EAAE,WAAa,CAAE,GAAGA,EAAE,UAAW,EACjCA,EAAE,SAAW,CAAE,GAAGA,EAAE,QAAS,EAC7Bw9B,EAAO,KAAKx9B,CAAC,CAAA,CACd,EACMw9B,CACT,CAEO,SACLC,EACAC,EACA5yB,EACM,CACN,MAAM6yB,EAAc,CAClB,WAAAF,EACA,SAAAC,EACA,OAAQ,OAAO5yB,GAAS,QAAW,SAAWA,EAAQ,OAAS,EAE/D,MACE,OAAOA,GAAS,OAAU,SAAWA,EAAQ,MAAQ,KAAK,OAAO,OACnE,aAAcA,GAAS,cAAgBusB,EAAO,OAAO,KACrD,sBACEvsB,GAAS,uBAAyB2vB,GAAc,OAClD,OAAQ,OAAO3vB,GAAS,QAAW,SAAWA,EAAQ,OAAS,EAC/D,KAAMA,GAAS,MAAQ,GACvB,QAASA,GAAS,UAAY,IAAM,CAAA,GACpC,SAAUA,GAAS,WAAa,IAAM,CAAA,GACtC,WAAYA,GAAS,aAAe,IAAM,CAAA,EAAC,EAExC,YAAA,OAAO,KAAK6yB,CAAW,EAErB,IACT,CAEQ,4BAA8B,IAAM,CAAA,EACpC,UAAUnB,EAA8C,CAC9D,KAAK,4BAA4B,EAC3B,MAAAoB,EAAQ,IAAIT,GACZU,EAAgB,KAAK,cACpB,OAAA,IAAI,QAAetyB,GAAY,CACpC,KAAK,eAAe,EACpB,KAAK,4BAA8B4pB,GAChCn1B,GAAc,CACb,GAAI,MAAK,SAMF,CACL,MAAMs1B,EAAO,KAAK,IAAI,EAAGt1B,EAAI,KAAK,cAAc,EAC1CyyB,EAAW,KAAK,IACpB,EACAmL,EAAM,iBAAmB,KAAK,cAAA,EAG7BpB,EAAA,OAAQx8B,GAAMA,EAAE,MAAQ69B,GAAiBpL,CAAQ,EACjD,QAASzyB,GAAM,CAETA,EAAE,QACLA,EAAE,MAAQ,IAAIu7B,GAAM,CAAE,GAAGv7B,EAAE,WAAY,EACpC,GAAG,CAAE,GAAGA,EAAE,QAAS,EAAGA,EAAE,OAAS69B,CAAa,EAE9C,OAAO79B,EAAE,YAAY,EACrB,cAAcA,EAAE,qBAAqB,EACrC,OAAOA,EAAE,MAAM,EACf,KAAKA,EAAE,IAAI,EACX,QAAQA,EAAE,OAAO,EACjB,SAASA,EAAE,QAAQ,EACnB,WAAWA,EAAE,UAAU,EAC1BA,EAAE,MAAM,MAAMs1B,CAAI,IAajBt1B,EAAE,MAAQA,EAAE,QAAUA,EAAE,OAAS,IAAM69B,EACxCpL,EAEAzyB,EAAE,MAAM,OAAOs1B,CAAI,GAGft1B,EAAE,MAAM,aACVA,EAAE,MAAM,MAEV89B,GAAgBtB,EAAQx8B,CAAC,EAC3B,CACD,CACL,CACM,MAAA+9B,EAAa,CAAC,CAACvB,EAAO,OAC5B,OAAKuB,IACH,KAAK,kBAAkB,EACfxyB,KAEHwyB,CACT,CAAA,CACF,CACD,CACH,CAEO,SAAW,GACV,YAAc,IAAIZ,GAClB,eAAiB,EAGzB,KAAKX,EAAgC,KAAK,YAAY,KAAK,MAAM,EAAG,CAClE,KAAK,SAAW,GAChB,KAAK,eAAiB,EACtB,KAAK,UAAUA,CAAM,CACvB,CAEA,SAAU,CACR,MAAMwB,EAAgB,KAAK,YAAY,KAAK,MAAM,EAClD,IAAIC,EAAY,EACFD,EAAA,QAASh+B,GAAM,CAC3Bi+B,EAAY,KAAK,IAAIA,EAAWj+B,EAAE,MAAQA,EAAE,MAAM,EAChDA,EAAA,aAAe23B,GAAc33B,EAAE,YAAY,EAC7C,MAAMk+B,EAAO,CAAE,GAAGl+B,EAAE,QAAS,EAC7BA,EAAE,SAAW,CAAE,GAAGA,EAAE,UAAW,EAC7BA,EAAA,WAAa,CAAE,GAAGk+B,EAAK,CAC1B,EAEaF,EAAA,QAASh+B,GAAM,CACzBA,EAAA,MAAQi+B,EAAYj+B,EAAE,MAAA,CACzB,EAED,KAAK,KAAKg+B,CAAa,CACzB,CAEA,OAAQ,CACN,KAAK,YAAY,QACjB,KAAK,SAAW,EAClB,CAEA,QAAS,CACF,KAAA,gBAAkB,KAAK,YAAY,eAAe,EACvD,KAAK,YAAY,OACjB,KAAK,SAAW,EAClB,CACF,CCpNA,MAAMG,GAAmB,IAAIC,GAAiB,CAC5C,gBAAkBloB,GAAMA,EAAE,IAG5B,CAAC,EAGe,SAAAmoB,GAAS3zB,EAAgB4zB,EAAQH,GAAyB,CAExE,IAAII,EAAQD,GAAO,KAAMC,GAAUA,EAAM,IAAM7zB,CAAE,EACjD,OAAI6zB,IAGJA,EAAQC,GAAQ9zB,CAAE,EAClB4zB,EAAM,IAAIC,CAAK,EACRA,EACT,CAGO,SAASE,GACd/zB,EACAuyB,EACAqB,EAAQH,GACR,CACM,MAAAI,EAAQF,GAAS3zB,EAAI4zB,CAAK,EAC3BC,EAAM,YACHA,EAAA,UAAYC,GAAQ9zB,CAAE,EAC5Bg0B,GAAgBH,EAAM,UAAU,MAAOA,EAAM,MAAO,EAAI,GAE1DtB,EAAOsB,EAAM,SAAS,CACxB,CAIA,SAASI,GAAWL,EAAQH,GAAkB,CACtCG,EAAA,OAAQC,GAAiB,CAC7B,MAAMK,EAAYL,EAAM,UACxB,OAAIK,IACFC,GAAMN,EAAOK,CAAS,EAEtBL,EAAM,MAAQK,EAAU,MACxBL,EAAM,UAAY,QACX,EAGT,CACD,CACH,CAEgB,SAAAO,GAAyBR,EAAQH,GAAkB,CACjEQ,GAAWL,CAAK,CAClB,CAEgB,SAAAS,GAAkBT,EAAQH,GAAkB,CACzClH,GAAA,IAAM0H,GAAWL,CAAK,EAAG,CACxC,KAAM,eACN,QAAS,EAAA,CACV,CACH,CC3DO,SAASU,GACdC,EACAC,EACAC,EACAC,EACAC,EACmC,CACnC,MAAMC,EAAoBJ,EAAcC,EACxC,IAAII,EAAY,EACZC,EAAa,EACjB,OAAQP,EAAM,CACZ,IAAK,YACCK,GAAqB,GACXC,EAAAH,EACZI,EAAaD,EAAYD,EACrBE,EAAaH,IACFG,EAAAH,EACbE,EAAYC,EAAaF,KAGdE,EAAAH,EACbE,EAAYC,EAAaF,EACrBC,EAAYH,IACFG,EAAAH,EACZI,EAAaD,EAAYD,IAG7B,MACF,IAAK,aACCA,GAAqB,GACVE,EAAAH,EACbE,EAAYC,EAAaF,IAEbC,EAAAH,EACZI,EAAaD,EAAYD,GAE3B,MACF,IAAK,WACSC,EAAAH,EACZI,EAAaD,EAAYD,EACzB,MACF,IAAK,YACUE,EAAAH,EACbE,EAAYC,EAAaF,EACzB,MACF,IAAK,cACL,QACcC,EAAAH,EACCI,EAAAH,EACb,KACJ,CACA,MAAO,CAAE,MAAOE,EAAW,OAAQC,CAAW,CAChD,CAEO,SAASC,GACdC,EACW,CACP,GAAA,CACI,MAAAC,EAAS,SAAS,cAAc,QAAQ,EACxCC,EAAMD,EAAO,WAAW,IAAI,EAClC,OAAAA,EAAO,MAAQD,EAAM,MACrBC,EAAO,OAASD,EAAM,OACtBE,EAAI,UAAUF,EAAO,EAAG,EAAGC,EAAO,MAAOA,EAAO,MAAM,EAC/CC,EAAI,aAAa,EAAG,EAAGD,EAAO,MAAOA,EAAO,MAAM,OAC/C,CAEV,OAAO,IAAI,UAAUD,EAAM,MAAOA,EAAM,MAAM,CAChD,CACF,CAGa,MAAAG,GAAqBC,GAAyB,CAMzD,MAAMC,EAAUD,EAAU,MACpBE,EAAWF,EAAU,OACrBG,EAAcF,EAAUC,EAAW,EACnCE,EAASD,EAAc,GAWvBE,EAAmB,CAEvB,GACA,GAEAD,EAAS,IACRA,GAAU,EAAK,IACfA,GAAU,GAAM,IAChBA,GAAU,GAAM,IAEjB,EACA,EAEA,EACA,EAEA,GACA,EACA,EACA,CAAA,EAkBIE,EAAmB,CAEvB,GACA,EACA,EACA,EAEAL,EAAU,IACTA,GAAW,EAAK,IAChBA,GAAW,GAAM,IACjBA,GAAW,GAAM,IAElBC,EAAW,IACVA,GAAY,EAAK,IACjBA,GAAY,GAAM,IAClBA,GAAY,GAAM,IAEnB,EACA,EAGA,GACA,EAEA,EACA,EACA,EACA,EAEAC,EAAc,IACbA,GAAe,EAAK,IACpBA,GAAe,GAAM,IACrBA,GAAe,GAAM,IAEtB,EACA,EACA,EACA,EAEA,EACA,EACA,EACA,EAEA,EACA,EACA,EACA,EAEA,EACA,EACA,EACA,CAAA,EAGII,GAAY,EAAMN,EAAU,EAAK,GAAM,EACvCO,EAAWR,EAAU,KAE3B,IAAIS,EAAe,GACnB,MAAMC,EAAWT,GAAW,EAC5B,IAAI7/B,EAAI8/B,EACR,MAAMS,EAAe,OAAO,aAEzB,EAAA,CACK,MAAAC,EAAWF,GAAYtgC,EAAI,GACjC,IAAIygC,EAAc,GAClB,QAASvgC,EAAI,EAAGA,EAAI2/B,EAAS3/B,IAAK,CAChC,MAAMwgC,EAAWxgC,GAAK,EACtBugC,GACEF,EAAaH,EAASI,EAAWE,EAAW,CAAC,CAAC,EAC9CH,EAAaH,EAASI,EAAWE,EAAW,CAAC,CAAC,EAC9CH,EAAaH,EAASI,EAAWE,CAAQ,CAAC,CAC9C,CAEA,QAAStrC,EAAI,EAAGA,EAAI+qC,EAAU/qC,IACbqrC,GAAA,OAAO,aAAa,CAAC,EAGtBJ,GAAAI,QACT,EAAEzgC,GAEX,SAAS2gC,EAAWljB,EAAsB,CACpC,GAAA,CAAC,OAAO,KACJ,KAAA,iBAER,IAAIzU,EAAM,GACN,GAAA,OAAOyU,GAAQ,SACXzU,EAAAyU,MAEN,SAASxrB,EAAI,EAAGA,EAAIwrB,EAAK,OAAQxrB,IAC/B+W,GAAO,OAAO,aAAayU,EAAKxrB,CAAC,CAAC,EAGtC,OAAO,KAAK+W,CAAG,CACjB,CAEA,OACE23B,EAAWV,EAAiB,OAAOC,CAAgB,CAAC,EACpDS,EAAWN,CAAY,CAE3B,EAKO,SAASO,GAAmBhB,EAA8B,CACzD,KAAA,CAAE,MAAAiB,EAAO,OAAAC,CAAW,EAAAlB,EACpBH,EAAS,SAAS,cAAc,QAAQ,EACxCC,EAAMD,EAAO,WAAW,IAAI,EAClC,OAAAA,EAAO,MAAQoB,EACfpB,EAAO,OAASqB,EAChBpB,EAAI,aAAaE,EAAW,EAAG,EAAG,EAAG,EAAGiB,EAAOC,CAAM,EACrCrB,EAAO,UAAU,WAAW,CAE9C,CAGa,MAAAsB,GAAkB,CAC7BnB,EACAoB,EACA/e,IACG,CACG,KAAA,CAAE,MAAA4e,EAAO,OAAAC,CAAW,EAAAlB,EACpBH,EAAS,SAAS,cAAc,QAAQ,EACxCC,EAAMD,EAAO,WAAW,IAAI,EAClCA,EAAO,MAAQoB,EACfpB,EAAO,OAASqB,EAChBpB,EAAI,aAAaE,EAAW,EAAG,EAAG,EAAG,EAAGiB,EAAOC,CAAM,EACrD,MAAMG,EAAc,SAClBD,EAAkBA,EAAgB,cAAgB,KACpD,GACOvB,EAAA,OACJ7yB,GAAsB,CACrBqV,IAAK,KAAMrV,CAAI,CACjB,EACAq0B,EACA,CAAA,CAEJ,EAEgB,SAAAC,GAAgBt0B,EAAYhC,EAA8B,CACjE,OAAA,kBAAkBgC,EAAMhC,CAAO,CACxC,CAGO,SAASu2B,GAAkBvB,EAAsB,CACtD,MAAMwB,EAAO,CAAA,EACPC,EAAO,CAAA,EACPC,EAAO,CAAA,EACb,IAAIzqC,EAAI,EACC,QAAA5E,EAAI,EAAGsvC,EAAM3B,EAAU,KAAK,OAAQ3tC,EAAIsvC,EAAKtvC,GAAK,EACzDmvC,EAAKvqC,CAAC,EAAI+oC,EAAU,KAAK3tC,CAAC,EAC1BovC,EAAKxqC,CAAC,EAAI+oC,EAAU,KAAK3tC,EAAI,CAAC,EAC9BqvC,EAAKzqC,CAAC,EAAI+oC,EAAU,KAAK3tC,EAAI,CAAC,EACzB4E,GAAA,EAED,MAAA6P,EAAI86B,GAAoBJ,CAAI,EAC5Bj8B,EAAIq8B,GAAoBH,CAAI,EAC5BvlC,EAAI0lC,GAAoBF,CAAI,EAClC,MAAO,OAAS56B,EAAI,IAAMvB,EAAI,IAAMrJ,EAAI,GAC1C,CAEA,SAAS0lC,GAAoBp4B,EAAe,CAC1C,MAAMq4B,EAAW,CAAA,EACXC,EAAiB,CAAA,EACjBC,EAAmB,CAAA,EACzB,QAAS1vC,EAAI,EAAGA,EAAImX,EAAI,OAAQnX,IACzBwvC,EAASr4B,EAAInX,CAAC,CAAC,EAGHyvC,EAAA,KAAKt4B,EAAInX,CAAC,CAAC,EAFjBwvC,EAAAr4B,EAAInX,CAAC,CAAC,EAAI,EAKvB,IAAIsP,EAAI,EACR,QAAStP,EAAI,EAAGA,EAAIyvC,EAAe,OAAQzvC,IAAK,CAC1CsP,EAAA,EACJ,QAAS1K,EAAI,EAAGA,EAAI6qC,EAAe,OAAQ7qC,IACrC6qC,EAAezvC,CAAC,IAAMyvC,EAAe7qC,CAAC,IACnC0K,GAAA,GAEPogC,EAAiB1vC,CAAC,EAAIsP,CAE1B,CACA,MAAMqgC,EAAM,KAAK,IAAI,MAAM,KAAMD,CAAgB,EACjD,IAAIE,EAAW,EACR,KAAAA,EAAWF,EAAiB,OAAQE,IACrC,GAAAF,EAAiBE,CAAQ,IAAMD,EACjC,OAGJ,OAAOF,EAAeG,CAAQ,CAChC,CAGa,MAAAC,GAAkBlC,GAAyB,CACtD,KAAM,CAAE,KAAAniB,EAAM,MAAAojB,EAAO,OAAAC,CAAA,EAAWlB,EAC1BmC,EAAa,IAAI,kBAAkBtkB,EAAK,MAAM,EACpD,QAASzd,EAAI,EAAGA,EAAI8gC,EAAQ9gC,IAC1B,QAASE,EAAI,EAAGA,EAAI2gC,EAAO3gC,IAAK,CACxB,MAAA8hC,GAAchiC,EAAI6gC,EAAQ3gC,GAAK,EAC1B6hC,EAAAC,CAAU,EAAIvkB,GAAMzd,EAAI6gC,EAAQA,EAAQ3gC,EAAI,GAAK,CAAC,EAClD6hC,EAAAC,EAAa,CAAC,EAAIvkB,GAAMzd,EAAI6gC,EAAQA,EAAQ3gC,EAAI,GAAK,EAAI,CAAC,EAC1D6hC,EAAAC,EAAa,CAAC,EAAIvkB,GAAMzd,EAAI6gC,EAAQA,EAAQ3gC,EAAI,GAAK,EAAI,CAAC,EAC1D6hC,EAAAC,EAAa,CAAC,EAAIvkB,GAAMzd,EAAI6gC,EAAQA,EAAQ3gC,EAAI,GAAK,EAAI,CAAC,CACvE,CAGK,OADc,IAAI,UAAU6hC,EAAYlB,EAAOC,CAAM,CAE9D,EAGamB,GAAkBrC,GAAyB,CACtD,KAAM,CAAE,KAAAniB,EAAM,MAAAojB,EAAO,OAAAC,CAAA,EAAWlB,EAC1BmC,EAAa,IAAI,kBAAkBtkB,EAAK,MAAM,EACpD,QAASzd,EAAI,EAAGA,EAAI8gC,EAAQ9gC,IAC1B,QAASE,EAAI,EAAGA,EAAI2gC,EAAO3gC,IAAK,CACxB,MAAA8hC,GAAchiC,EAAI6gC,EAAQ3gC,GAAK,EAC1B6hC,EAAAC,CAAU,EAAIvkB,IAAOqjB,EAAS9gC,EAAI,GAAK6gC,EAAQ3gC,GAAK,CAAC,EACrD6hC,EAAAC,EAAa,CAAC,EAAIvkB,IAAOqjB,EAAS9gC,EAAI,GAAK6gC,EAAQ3gC,GAAK,EAAI,CAAC,EAC7D6hC,EAAAC,EAAa,CAAC,EAAIvkB,IAAOqjB,EAAS9gC,EAAI,GAAK6gC,EAAQ3gC,GAAK,EAAI,CAAC,EAC7D6hC,EAAAC,EAAa,CAAC,EAAIvkB,IAAOqjB,EAAS9gC,EAAI,GAAK6gC,EAAQ3gC,GAAK,EAAI,CAAC,CAC1E,CAGK,OADc,IAAI,UAAU6hC,EAAYlB,EAAOC,CAAM,CAE9D,EAGaoB,GAActC,GAAyB,CAClD,KAAM,CAAE,KAAAniB,EAAM,MAAAojB,EAAO,OAAAC,CAAA,EAAWlB,EAC1BmC,EAAa,IAAI,kBAAkBtkB,EAAK,MAAM,EACpD,QAASvd,EAAI,EAAGA,EAAI2gC,EAAO3gC,IACzB,QAASF,EAAI,EAAGA,EAAI8gC,EAAQ9gC,IAAK,CACzB,MAAAgiC,GAAc9hC,EAAI4gC,EAAS9gC,GAAK,EAC3B+hC,EAAAC,CAAU,EAAIvkB,GAAMzd,EAAI6gC,EAAQA,EAAQ3gC,EAAI,GAAK,CAAC,EAClD6hC,EAAAC,EAAa,CAAC,EAAIvkB,GAAMzd,EAAI6gC,EAAQA,EAAQ3gC,EAAI,GAAK,EAAI,CAAC,EAC1D6hC,EAAAC,EAAa,CAAC,EAAIvkB,GAAMzd,EAAI6gC,EAAQA,EAAQ3gC,EAAI,GAAK,EAAI,CAAC,EAC1D6hC,EAAAC,EAAa,CAAC,EAAIvkB,GAAMzd,EAAI6gC,EAAQA,EAAQ3gC,EAAI,GAAK,EAAI,CAAC,CACvE,CAGK,OADc,IAAI,UAAU6hC,EAAYjB,EAAQD,CAAK,CAE9D,EAGasB,GAAevC,GAAyB,CACnD,KAAM,CAAE,KAAAniB,EAAM,MAAAojB,EAAO,OAAAC,CAAA,EAAWlB,EAC1BmC,EAAa,IAAI,kBAAkBtkB,EAAK,MAAM,EACpD,QAASvd,EAAI,EAAGA,EAAI2gC,EAAO3gC,IACzB,QAASF,EAAI,EAAGA,EAAI8gC,EAAQ9gC,IAAK,CACzB,MAAAgiC,GAAc9hC,EAAI4gC,EAAS9gC,GAAK,EAC3B+hC,EAAAC,CAAU,EAAIvkB,IAAOqjB,EAAS9gC,EAAI,GAAK6gC,EAAQ3gC,GAAK,CAAC,EACrD6hC,EAAAC,EAAa,CAAC,EAAIvkB,IAAOqjB,EAAS9gC,EAAI,GAAK6gC,EAAQ3gC,GAAK,EAAI,CAAC,EAC7D6hC,EAAAC,EAAa,CAAC,EAAIvkB,IAAOqjB,EAAS9gC,EAAI,GAAK6gC,EAAQ3gC,GAAK,EAAI,CAAC,EAC7D6hC,EAAAC,EAAa,CAAC,EAAIvkB,IAAOqjB,EAAS9gC,EAAI,GAAK6gC,EAAQ3gC,GAAK,EAAI,CAAC,CAC1E,CAGK,OADc,IAAI,UAAU6hC,EAAYjB,EAAQD,CAAK,CAE9D,EAGauB,GAAUxC,GAAyB,CAC9C,KAAM,CAAE,KAAAniB,EAAM,MAAAojB,EAAO,OAAAC,CAAA,EAAWlB,EAC1BmC,EAAa,IAAI,kBAAkBtkB,EAAK,MAAM,EACpD,QAASzd,EAAI,EAAGA,EAAI8gC,EAAQ9gC,IAC1B,QAASE,EAAI,EAAGA,EAAI2gC,EAAO3gC,IAAK,CACxB,MAAA8hC,GAAchiC,EAAI6gC,EAAQ3gC,GAAK,EAC/BmiC,GACH5kB,EAAKukB,CAAU,EAAIvkB,EAAKukB,EAAa,CAAC,EAAIvkB,EAAKukB,EAAa,CAAC,GAAK,EACrED,EAAWC,CAAU,EAAIK,EACdN,EAAAC,EAAa,CAAC,EAAIK,EAClBN,EAAAC,EAAa,CAAC,EAAIK,EAC7BN,EAAWC,EAAa,CAAC,EAAIvkB,EAAKukB,EAAa,CAAC,CAClD,CAGK,OADc,IAAI,UAAUD,EAAYlB,EAAOC,CAAM,CAE9D,EAGawB,GAAW1C,GAAyB,CAC/C,KAAM,CAAE,KAAAniB,EAAM,MAAAojB,EAAO,OAAAC,CAAA,EAAWlB,EAC1BmC,EAAa,IAAI,kBAAkBtkB,EAAK,MAAM,EACpD,QAASzd,EAAI,EAAGA,EAAI8gC,EAAQ9gC,IAC1B,QAASE,EAAI,EAAGA,EAAI2gC,EAAO3gC,IAAK,CACxB,MAAA8hC,GAAchiC,EAAI6gC,EAAQ3gC,GAAK,EAE/BmiC,EACJ,MAAS5kB,EAAKukB,CAAU,EACxB,MAASvkB,EAAKukB,EAAa,CAAC,EAC5B,MAASvkB,EAAKukB,EAAa,CAAC,EAC9BD,EAAWC,CAAU,EAAIK,EACdN,EAAAC,EAAa,CAAC,EAAIK,EAClBN,EAAAC,EAAa,CAAC,EAAIK,EAC7BN,EAAWC,EAAa,CAAC,EAAIvkB,EAAKukB,EAAa,CAAC,CAClD,CAGK,OADc,IAAI,UAAUD,EAAYlB,EAAOC,CAAM,CAE9D,EAGayB,GAAmB3C,GAAyB,CACvD,KAAM,CAAE,KAAAniB,EAAM,MAAAojB,EAAO,OAAAC,CAAA,EAAWlB,EAC1BmC,EAAa,IAAI,kBAAkBtkB,EAAK,MAAM,EACpD,QAASzd,EAAI,EAAGA,EAAI8gC,EAAQ9gC,IAC1B,QAASE,EAAI,EAAGA,EAAI2gC,EAAO3gC,IAAK,CACxB,MAAA8hC,GAAchiC,EAAI6gC,EAAQ3gC,GAAK,EAG/BsiC,GADH/kB,EAAKukB,CAAU,EAAIvkB,EAAKukB,EAAa,CAAC,EAAIvkB,EAAKukB,EAAa,CAAC,GAAK,EACzC,IAAM,IAAM,EACxCD,EAAWC,CAAU,EAAIQ,EACdT,EAAAC,EAAa,CAAC,EAAIQ,EAClBT,EAAAC,EAAa,CAAC,EAAIQ,EAC7BT,EAAWC,EAAa,CAAC,EAAIvkB,EAAKukB,EAAa,CAAC,CAClD,CAGK,OADc,IAAI,UAAUD,EAAYlB,EAAOC,CAAM,CAE9D,EAGa2B,GAAc7C,GAAyB,CAClD,KAAM,CAAE,KAAAniB,EAAM,MAAAojB,EAAO,OAAAC,CAAA,EAAWlB,EAC1BmC,EAAa,IAAI,kBAAkBtkB,EAAK,MAAM,EACpD,QAASzd,EAAI,EAAGA,EAAI8gC,EAAQ9gC,IAC1B,QAASE,EAAI,EAAGA,EAAI2gC,EAAO3gC,IAAK,CACxB,MAAA8hC,GAAchiC,EAAI6gC,EAAQ3gC,GAAK,EACrC6hC,EAAWC,CAAU,EAAI,IAAMvkB,EAAKukB,CAAU,EAC9CD,EAAWC,EAAa,CAAC,EAAI,IAAMvkB,EAAKukB,EAAa,CAAC,EACtDD,EAAWC,EAAa,CAAC,EAAI,IAAMvkB,EAAKukB,EAAa,CAAC,EACtDD,EAAWC,EAAa,CAAC,EAAIvkB,EAAKukB,EAAa,CAAC,CAClD,CAGK,OADc,IAAI,UAAUD,EAAYlB,EAAOC,CAAM,CAE9D,EAGa4B,GAAS9C,GAAyB,CAC7C,KAAM,CAAE,KAAAniB,EAAM,MAAAojB,EAAO,OAAAC,CAAA,EAAWlB,EAC1BmC,EAAa,IAAI,kBAAkBtkB,EAAK,MAAM,EACpD,QAASzd,EAAI,EAAGA,EAAI8gC,EAAQ9gC,IAC1B,QAASE,EAAI,EAAGA,EAAI2gC,EAAO3gC,IAAK,CACxB,MAAA8hC,GAAchiC,EAAI6gC,EAAQ3gC,GAAK,EAC1B6hC,EAAAC,CAAU,EAAIvkB,EAAKukB,CAAU,EAC7BD,EAAAC,EAAa,CAAC,EAAI,EAClBD,EAAAC,EAAa,CAAC,EAAI,EAC7BD,EAAWC,EAAa,CAAC,EAAIvkB,EAAKukB,EAAa,CAAC,CAClD,CAGK,OADc,IAAI,UAAUD,EAAYlB,EAAOC,CAAM,CAE9D,EAGa6B,GAAW/C,GAAyB,CAC/C,KAAM,CAAE,KAAAniB,EAAM,MAAAojB,EAAO,OAAAC,CAAA,EAAWlB,EAC1BmC,EAAa,IAAI,kBAAkBtkB,EAAK,MAAM,EACpD,QAASzd,EAAI,EAAGA,EAAI8gC,EAAQ9gC,IAC1B,QAASE,EAAI,EAAGA,EAAI2gC,EAAO3gC,IAAK,CACxB,MAAA8hC,GAAchiC,EAAI6gC,EAAQ3gC,GAAK,EACrC6hC,EAAWC,CAAU,EAAI,EACzBD,EAAWC,EAAa,CAAC,EAAIvkB,EAAKukB,EAAa,CAAC,EACrCD,EAAAC,EAAa,CAAC,EAAI,EAC7BD,EAAWC,EAAa,CAAC,EAAIvkB,EAAKukB,EAAa,CAAC,CAClD,CAGK,OADc,IAAI,UAAUD,EAAYlB,EAAOC,CAAM,CAE9D,EAGa8B,GAAUhD,GAAyB,CAC9C,KAAM,CAAE,KAAAniB,EAAM,MAAAojB,EAAO,OAAAC,CAAA,EAAWlB,EAC1BmC,EAAa,IAAI,kBAAkBtkB,EAAK,MAAM,EACpD,QAASzd,EAAI,EAAGA,EAAI8gC,EAAQ9gC,IAC1B,QAASE,EAAI,EAAGA,EAAI2gC,EAAO3gC,IAAK,CACxB,MAAA8hC,GAAchiC,EAAI6gC,EAAQ3gC,GAAK,EACrC6hC,EAAWC,CAAU,EAAI,EACdD,EAAAC,EAAa,CAAC,EAAI,EAC7BD,EAAWC,EAAa,CAAC,EAAIvkB,EAAKukB,EAAa,CAAC,EAChDD,EAAWC,EAAa,CAAC,EAAIvkB,EAAKukB,EAAa,CAAC,CAClD,CAGK,OADc,IAAI,UAAUD,EAAYlB,EAAOC,CAAM,CAE9D,EAGa+B,GAAiBjD,GAAyB,CACrD,KAAM,CAAE,KAAAniB,EAAM,MAAAojB,EAAO,OAAAC,CAAA,EAAWlB,EAC1BmC,EAAa,IAAI,kBAAkBtkB,EAAK,MAAM,EACpD,QAASzd,EAAI,EAAGA,EAAI8gC,EAAQ9gC,IAC1B,QAASE,EAAI,EAAGA,EAAI2gC,EAAO3gC,IAAK,CACxB,MAAA8hC,GAAchiC,EAAI6gC,EAAQ3gC,GAAK,EAC1B6hC,EAAAC,CAAU,EAAIvkB,EAAKukB,CAAU,EACxCD,EAAWC,EAAa,CAAC,EAAIvkB,EAAKukB,EAAa,CAAC,EACrCD,EAAAC,EAAa,CAAC,EAAI,EAC7BD,EAAWC,EAAa,CAAC,EAAIvkB,EAAKukB,EAAa,CAAC,CAClD,CAGK,OADc,IAAI,UAAUD,EAAYlB,EAAOC,CAAM,CAE9D,EAGagC,GAAgBlD,GAAyB,CACpD,KAAM,CAAE,KAAAniB,EAAM,MAAAojB,EAAO,OAAAC,CAAA,EAAWlB,EAC1BmC,EAAa,IAAI,kBAAkBtkB,EAAK,MAAM,EACpD,QAASzd,EAAI,EAAGA,EAAI8gC,EAAQ9gC,IAC1B,QAASE,EAAI,EAAGA,EAAI2gC,EAAO3gC,IAAK,CACxB,MAAA8hC,GAAchiC,EAAI6gC,EAAQ3gC,GAAK,EAC1B6hC,EAAAC,CAAU,EAAIvkB,EAAKukB,CAAU,EAC7BD,EAAAC,EAAa,CAAC,EAAI,EAC7BD,EAAWC,EAAa,CAAC,EAAIvkB,EAAKukB,EAAa,CAAC,EAChDD,EAAWC,EAAa,CAAC,EAAIvkB,EAAKukB,EAAa,CAAC,CAClD,CAGK,OADc,IAAI,UAAUD,EAAYlB,EAAOC,CAAM,CAE9D,EAGaiC,GAAkBnD,GAAyB,CACtD,KAAM,CAAE,KAAAniB,EAAM,MAAAojB,EAAO,OAAAC,CAAA,EAAWlB,EAC1BmC,EAAa,IAAI,kBAAkBtkB,EAAK,MAAM,EACpD,QAASzd,EAAI,EAAGA,EAAI8gC,EAAQ9gC,IAC1B,QAASE,EAAI,EAAGA,EAAI2gC,EAAO3gC,IAAK,CACxB,MAAA8hC,GAAchiC,EAAI6gC,EAAQ3gC,GAAK,EACrC6hC,EAAWC,CAAU,EAAI,EACzBD,EAAWC,EAAa,CAAC,EAAIvkB,EAAKukB,EAAa,CAAC,EAChDD,EAAWC,EAAa,CAAC,EAAIvkB,EAAKukB,EAAa,CAAC,EAChDD,EAAWC,EAAa,CAAC,EAAIvkB,EAAKukB,EAAa,CAAC,CAClD,CAGK,OADc,IAAI,UAAUD,EAAYlB,EAAOC,CAAM,CAE9D,EAGakC,GAAgBpD,GAAyB,CACpD,KAAM,CAAE,KAAAniB,EAAM,MAAAojB,EAAO,OAAAC,CAAA,EAAWlB,EAC1BmC,EAAa,IAAI,kBAAkBtkB,EAAK,MAAM,EACpD,QAASzd,EAAI,EAAGA,EAAI8gC,EAAQ9gC,IAC1B,QAASE,EAAI,EAAGA,EAAI2gC,EAAO3gC,IAAK,CACxB,MAAA8hC,GAAchiC,EAAI6gC,EAAQ3gC,GAAK,EAC/B+iC,GAAaxlB,EAAKukB,EAAa,CAAC,EAAIvkB,EAAKukB,EAAa,CAAC,GAAK,EACvDD,EAAAC,CAAU,EAAIvkB,EAAKukB,CAAU,EAC7BD,EAAAC,EAAa,CAAC,EAAIiB,EAClBlB,EAAAC,EAAa,CAAC,EAAIiB,EAC7BlB,EAAWC,EAAa,CAAC,EAAIvkB,EAAKukB,EAAa,CAAC,CAClD,CAGK,OADc,IAAI,UAAUD,EAAYlB,EAAOC,CAAM,CAE9D,EAGaoC,GAAkBtD,GAAyB,CACtD,KAAM,CAAE,KAAAniB,EAAM,MAAAojB,EAAO,OAAAC,CAAA,EAAWlB,EAC1BmC,EAAa,IAAI,kBAAkBtkB,EAAK,MAAM,EACpD,QAASzd,EAAI,EAAGA,EAAI8gC,EAAQ9gC,IAC1B,QAASE,EAAI,EAAGA,EAAI2gC,EAAO3gC,IAAK,CACxB,MAAA8hC,GAAchiC,EAAI6gC,EAAQ3gC,GAAK,EAC/B+iC,GAAaxlB,EAAKukB,CAAU,EAAIvkB,EAAKukB,EAAa,CAAC,GAAK,EAC9DD,EAAWC,CAAU,EAAIiB,EACzBlB,EAAWC,EAAa,CAAC,EAAIvkB,EAAKukB,EAAa,CAAC,EACrCD,EAAAC,EAAa,CAAC,EAAIiB,EAC7BlB,EAAWC,EAAa,CAAC,EAAIvkB,EAAKukB,EAAa,CAAC,CAClD,CAGK,OADc,IAAI,UAAUD,EAAYlB,EAAOC,CAAM,CAE9D,EAGaqC,GAAiBvD,GAAyB,CACrD,KAAM,CAAE,KAAAniB,EAAM,MAAAojB,EAAO,OAAAC,CAAA,EAAWlB,EAC1BmC,EAAa,IAAI,kBAAkBtkB,EAAK,MAAM,EACpD,QAASzd,EAAI,EAAGA,EAAI8gC,EAAQ9gC,IAC1B,QAASE,EAAI,EAAGA,EAAI2gC,EAAO3gC,IAAK,CACxB,MAAA8hC,GAAchiC,EAAI6gC,EAAQ3gC,GAAK,EAC/B+iC,GAAaxlB,EAAKukB,CAAU,EAAIvkB,EAAKukB,EAAa,CAAC,GAAK,EAC9DD,EAAWC,CAAU,EAAIiB,EACdlB,EAAAC,EAAa,CAAC,EAAIiB,EAC7BlB,EAAWC,EAAa,CAAC,EAAIvkB,EAAKukB,EAAa,CAAC,EAChDD,EAAWC,EAAa,CAAC,EAAIvkB,EAAKukB,EAAa,CAAC,CAClD,CAGK,OADc,IAAI,UAAUD,EAAYlB,EAAOC,CAAM,CAE9D,EAGasC,GAAWxD,GAEDyD,GAAkBzD,EADxB,CAAC,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,EAAE,CACO,EAK7C0D,GAAiB1D,GAEPyD,GAAkBzD,EADxB,CAAC,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,EAAE,CACO,EAK7C2D,GAAY3D,GAAoC,CAC3D,KAAM,CAAE,KAAAniB,EAAM,MAAAojB,EAAO,OAAAC,CAAA,EAAWlB,EAC1BmC,EAAa,IAAI,kBAAkBtkB,EAAK,MAAM,EACpD,QAASzd,EAAI,EAAGA,EAAI8gC,EAAQ9gC,IAC1B,QAASE,EAAI,EAAGA,EAAI2gC,EAAO3gC,IAAK,CACxB,MAAA8hC,GAAchiC,EAAI6gC,EAAQ3gC,GAAK,EAC1B6hC,EAAAC,CAAU,EAAIvkB,EAAKukB,CAAU,EACxCD,EAAWC,EAAa,CAAC,EAAIvkB,EAAKukB,EAAa,CAAC,EAChDD,EAAWC,EAAa,CAAC,EAAIvkB,EAAKukB,EAAa,CAAC,EACrCD,EAAAC,EAAa,CAAC,EAAI,GAC/B,CAGK,OADc,IAAI,UAAUD,EAAYlB,EAAOC,CAAM,CAE9D,EAGa0C,GAAY5D,GAAoC,CAC3D,KAAM,CAAE,KAAAniB,EAAM,MAAAojB,EAAO,OAAAC,CAAA,EAAWlB,EAC1BmC,EAAa,IAAI,kBAAkBtkB,EAAK,MAAM,EACpD,QAASzd,EAAI,EAAGA,EAAI8gC,EAAQ9gC,IAC1B,QAASE,EAAI,EAAGA,EAAI2gC,EAAO3gC,IAAK,CACxB,MAAA8hC,GAAchiC,EAAI6gC,EAAQ3gC,GAAK,EACrC,GAAIud,EAAKukB,EAAa,CAAC,IAAM,EAC3BD,EAAWC,CAAU,EAAI,IACdD,EAAAC,EAAa,CAAC,EAAI,IAClBD,EAAAC,EAAa,CAAC,EAAI,IAClBD,EAAAC,EAAa,CAAC,EAAI,QACxB,CACL,MAAMQ,EAAWiB,GACf,CACEhmB,EAAKukB,CAAU,EACfvkB,EAAKukB,EAAa,CAAC,EACnBvkB,EAAKukB,EAAa,CAAC,EACnBvkB,EAAKukB,EAAa,CAAC,CACrB,EACA,CAAC,IAAK,IAAK,IAAK,GAAG,CAAA,EAEVD,EAAAC,CAAU,EAAIQ,EAAS,CAAC,EACnCT,EAAWC,EAAa,CAAC,EAAIQ,EAAS,CAAC,EACvCT,EAAWC,EAAa,CAAC,EAAIQ,EAAS,CAAC,EACvCT,EAAWC,EAAa,CAAC,EAAIQ,EAAS,CAAC,CACzC,CACF,CAGK,OADc,IAAI,UAAUT,EAAYlB,EAAOC,CAAM,CAE9D,EAagB,SAAA4C,GACd9D,EACA+D,EACAC,EACAC,EACAC,EACAC,EAAqB,GACrBC,EACW,CACX,KAAM,CAAE,KAAAvmB,EAAM,MAAAojB,EAAO,OAAAC,CAAA,EAAWlB,EAChC,IAAIqE,EAAYH,EACZI,EAAWL,EACXM,EAAaR,EACbS,EAAcR,EA4BlB,GA3BIK,EAAY,EACFA,EAAA,EACHA,EAAYpD,IACToD,EAAApD,GAEVqD,EAAW,EACFA,EAAA,EACFA,EAAWpD,IACToD,EAAApD,GAETqD,EAAa,EACFA,EAAA,EACJA,EAAatD,IACTsD,EAAAtD,GAEXuD,EAAc,EACFA,EAAA,EACLA,EAActD,IACTsD,EAAAtD,GAEZmD,EAAYE,EAAatD,IAC3BsD,EAAatD,EAAQoD,GAEnBC,EAAWE,EAActD,IAC3BsD,EAActD,EAASoD,GAGrBH,EAAoB,CACtB,MAAMhC,EAAa,IAAI,kBAAkBtkB,EAAK,MAAM,EACpD,QAASzd,EAAI,EAAGA,EAAI8gC,EAAQ9gC,IAC1B,QAASE,EAAI,EAAGA,EAAI2gC,EAAO3gC,IAAK,CACxB,MAAA8hC,GAAchiC,EAAI6gC,EAAQ3gC,GAAK,EAEnCA,GAAK+jC,GACL/jC,GAAK+jC,EAAYE,GACjBnkC,GAAKkkC,GACLlkC,GAAKkkC,EAAWE,GAELrC,EAAAC,CAAU,EAAIvkB,EAAKukB,CAAU,EACxCD,EAAWC,EAAa,CAAC,EAAIvkB,EAAKukB,EAAa,CAAC,EAChDD,EAAWC,EAAa,CAAC,EAAIvkB,EAAKukB,EAAa,CAAC,EAChDD,EAAWC,EAAa,CAAC,EAAIvkB,EAAKukB,EAAa,CAAC,IAEhDD,EAAWC,CAAU,EAAI,IACdD,EAAAC,EAAa,CAAC,EAAI,IAClBD,EAAAC,EAAa,CAAC,EAAI,IAC7BD,EAAWC,EAAa,CAAC,EACvBgC,GAAa,CAAC,MAAO,MAAM,EAAE,SAASA,EAAU,YAAa,CAAA,EACzD,IACA,EAEV,CAGK,OADc,IAAI,UAAUjC,EAAYlB,EAAOC,CAAM,CACrD,KACF,CACL,MAAMiB,EAAa,IAAI,kBAAkBoC,EAAaC,EAAc,CAAC,EACrE,QAASpkC,EAAIkkC,EAAUlkC,GAAKkkC,EAAWE,EAAapkC,IAClD,QAASE,EAAI+jC,EAAW/jC,GAAK+jC,EAAYE,EAAYjkC,IAAK,CACxD,MAAM8hC,IAAehiC,EAAIkkC,GAAYC,EAAajkC,EAAI+jC,GAAa,EAC7DI,GAAerkC,EAAI6gC,EAAQ3gC,GAAK,EAC3B6hC,EAAAC,CAAU,EAAIvkB,EAAK4mB,CAAW,EACzCtC,EAAWC,EAAa,CAAC,EAAIvkB,EAAK4mB,EAAc,CAAC,EACjDtC,EAAWC,EAAa,CAAC,EAAIvkB,EAAK4mB,EAAc,CAAC,EACjDtC,EAAWC,EAAa,CAAC,EAAIvkB,EAAK4mB,EAAc,CAAC,CACnD,CAGK,OADc,IAAI,UAAUtC,EAAYoC,EAAYC,CAAW,CAExE,CACF,CAUO,SAASE,GACd1E,EACA2E,EACAP,EACAQ,EACW,CACX,KAAM,CAAE,KAAA/mB,EAAM,MAAAojB,EAAO,OAAAC,CAAA,EAAWlB,EAChC,IAAI6E,EAAcF,EACdE,EAAc,KAAK,MAAM5D,EAAQ,CAAC,IACtB4D,EAAA,KAAK,MAAM5D,EAAQ,CAAC,GAEhC4D,EAAc,KAAK,MAAM3D,EAAS,CAAC,IACvB2D,EAAA,KAAK,MAAM3D,EAAS,CAAC,GAEjC2D,EAAc,IACFA,EAAA,GAEhB,MAAM1C,EAAa,IAAI,kBAAkBtkB,EAAK,MAAM,EACpD,QAASzd,EAAI,EAAGA,EAAI8gC,EAAQ9gC,IAC1B,QAASE,EAAI,EAAGA,EAAI2gC,EAAO3gC,IAAK,CACxB,MAAA8hC,GAAchiC,EAAI6gC,EAAQ3gC,GAAK,EACrC,IAAIzK,EAAI,GACJyK,EAAIukC,EACFzkC,EAAIykC,EACNhvC,EAAI,KAAK,KACP,KAAK,IAAIgvC,EAAcvkC,EAAI,EAAG,CAAC,EAAI,KAAK,IAAIukC,EAAczkC,EAAI,EAAG,CAAC,CAAA,EAE3DA,EAAI8gC,EAAS2D,EAAc,IACpChvC,EAAI,KAAK,KACP,KAAK,IAAIgvC,EAAcvkC,EAAI,EAAG,CAAC,EAC7B,KAAK,IAAIF,GAAK8gC,EAAS2D,GAAc,CAAC,CAAA,GAGnCvkC,EAAI2gC,EAAQ4D,EAAc,IAC/BzkC,EAAIykC,EACNhvC,EAAI,KAAK,KACP,KAAK,IAAIyK,GAAK2gC,EAAQ4D,GAAc,CAAC,EACnC,KAAK,IAAIA,EAAczkC,EAAI,EAAG,CAAC,CAAA,EAE1BA,EAAI8gC,EAAS2D,EAAc,IACpChvC,EAAI,KAAK,KACP,KAAK,IAAIyK,GAAK2gC,EAAQ4D,GAAc,CAAC,EACnC,KAAK,IAAIzkC,GAAK8gC,EAAS2D,GAAc,CAAC,CAAA,IAI1C,KAAK,MAAMhvC,CAAC,EAAIgvC,GAClB1C,EAAWC,CAAU,EAAI,IACdD,EAAAC,EAAa,CAAC,EAAI,IAClBD,EAAAC,EAAa,CAAC,EAAI,IAClBD,EAAAC,EAAa,CAAC,EACvBwC,GAAYR,EAAU,gBAAkB,MAAQ,EAAI,MAE3CjC,EAAAC,CAAU,EAAIvkB,EAAKukB,CAAU,EACxCD,EAAWC,EAAa,CAAC,EAAIvkB,EAAKukB,EAAa,CAAC,EAChDD,EAAWC,EAAa,CAAC,EAAIvkB,EAAKukB,EAAa,CAAC,EACrCD,EAAAC,EAAa,CAAC,EACvBwC,GAAYR,EAAU,gBAAkB,MACpCvmB,EAAKukB,EAAa,CAAC,EACnB,IAEV,CAGK,OADc,IAAI,UAAUD,EAAYlB,EAAOC,CAAM,CAE9D,CAYO,SAAS4D,GACdC,EACA9D,EACAC,EACA6C,EACAC,EACAgB,EAAiB,IACN,CACL,MAAAC,EAAM,IAAI,MAChBA,EAAI,IAAMF,EACJ,MAAAlF,EAAS,SAAS,cAAc,QAAQ,EACxCC,EAAMD,EAAO,WAAW,IAAI,EAClC,OAAAA,EAAO,MAAQmF,EACfnF,EAAO,OAASmF,EACZlF,EAAA,UAAUmF,EAAK,EAAG,EAAGhE,EAAOC,EAAQ,EAAG,EAAG6C,EAAUC,CAAS,EAC5ClE,EAAI,aAAa,EAAG,EAAGiE,EAAUC,CAAS,CAEjE,CAGgB,SAAAkB,GACdlF,EACAmF,EACW,CACX,KAAM,CAAE,KAAAtnB,EAAM,MAAAojB,EAAO,OAAAC,CAAA,EAAWlB,EAC1BmC,EAAa,IAAI,kBAAkBtkB,EAAK,MAAM,EACpD,QAASzd,EAAI,EAAGA,EAAI8gC,EAAQ9gC,IAC1B,QAASE,EAAI,EAAGA,EAAI2gC,EAAO3gC,IAAK,CACxB,MAAA8hC,GAAchiC,EAAI6gC,EAAQ3gC,GAAK,EAC1B6hC,EAAAC,CAAU,EAAI,KAAK,IAC5B,KAAK,IAAIvkB,EAAKukB,CAAU,EAAI+C,EAAW,GAAG,EAC1C,CAAA,EAEShD,EAAAC,EAAa,CAAC,EAAI,KAAK,IAChC,KAAK,IAAIvkB,EAAKukB,EAAa,CAAC,EAAI+C,EAAW,GAAG,EAC9C,CAAA,EAEShD,EAAAC,EAAa,CAAC,EAAI,KAAK,IAChC,KAAK,IAAIvkB,EAAKukB,EAAa,CAAC,EAAI+C,EAAW,GAAG,EAC9C,CAAA,EAEFhD,EAAWC,EAAa,CAAC,EAAIvkB,EAAKukB,EAAa,CAAC,CAClD,CAGK,OADc,IAAI,UAAUD,EAAYlB,EAAOC,CAAM,CAE9D,CAGO,SAASkE,GACdpF,EACAjmB,EACAsrB,EAAmB,GACR,CACX,KAAM,CAAE,KAAAxnB,EAAM,MAAAojB,EAAO,OAAAC,CAAA,EAAWlB,EAC1BmC,EAAa,IAAI,kBAAkBtkB,EAAK,MAAM,EACpD,QAASzd,EAAI,EAAGA,EAAI8gC,EAAQ9gC,IAC1B,QAASE,EAAI,EAAGA,EAAI2gC,EAAO3gC,IAAK,CACxB,MAAA8hC,GAAchiC,EAAI6gC,EAAQ3gC,GAAK,EACjCud,EAAKukB,EAAa,CAAC,IAAM,GAC3BD,EAAWC,CAAU,EAAI,IACdD,EAAAC,EAAa,CAAC,EAAI,IAClBD,EAAAC,EAAa,CAAC,EAAI,MAElBD,EAAAC,CAAU,EAAIvkB,EAAKukB,CAAU,EACxCD,EAAWC,EAAa,CAAC,EAAIvkB,EAAKukB,EAAa,CAAC,EAChDD,EAAWC,EAAa,CAAC,EAAIvkB,EAAKukB,EAAa,CAAC,GAE9C,IAAApnC,EAAI6iB,EAAKukB,EAAa,CAAC,EACvBiD,EACErqC,EAAA,KAAK,IAAI,KAAK,IAAI,KAAK,MAAM,IAAM+e,CAAK,EAAG,GAAG,EAAG,CAAC,EAEtD/e,EAAI,KAAK,IAAI,KAAK,IAAI,KAAK,MAAMA,EAAI,IAAM+e,CAAK,EAAG,GAAG,EAAG,CAAC,EAEjDooB,EAAAC,EAAa,CAAC,EAAIpnC,CAC/B,CAGK,OADc,IAAI,UAAUmnC,EAAYlB,EAAOC,CAAM,CAE9D,CAGO,SAASoE,GACdtF,EACAuF,EACAtB,EACAC,EACW,CACX,KAAM,CAAE,KAAArmB,EAAM,MAAAojB,EAAO,OAAAC,CAAA,EAAWlB,EAC1B,CACJ,KAAMwF,EACN,MAAOC,EACP,OAAQC,CACN,EAAAH,EACJ,IAAIjB,EAAWL,EACXI,EAAYH,EACZD,EAAMyB,EAAkBxE,IAC1BoD,EAAWpD,EAASwE,GAElBxB,EAAOuB,EAAiBxE,IAC1BoD,EAAYpD,EAAQwE,GAEtB,MAAMtD,EAAa,IAAI,kBAAkBtkB,EAAK,MAAM,EACpD,QAASzd,EAAI,EAAGA,EAAI8gC,EAAQ9gC,IAC1B,QAASE,EAAI,EAAGA,EAAI2gC,EAAO3gC,IAAK,CACxB,MAAA8hC,GAAchiC,EAAI6gC,EAAQ3gC,GAAK,EAEnC,GAAAA,EAAI+jC,GACJ/jC,EAAI+jC,EAAYoB,GAChBrlC,GAAKkkC,GACLlkC,GAAKkkC,EAAWoB,EAELvD,EAAAC,CAAU,EAAIvkB,EAAKukB,CAAU,EACxCD,EAAWC,EAAa,CAAC,EAAIvkB,EAAKukB,EAAa,CAAC,EAChDD,EAAWC,EAAa,CAAC,EAAIvkB,EAAKukB,EAAa,CAAC,EAChDD,EAAWC,EAAa,CAAC,EAAIvkB,EAAKukB,EAAa,CAAC,MAC3C,CACL,MAAMuD,GACHvlC,EAAI6gC,EACH3gC,IACEgkC,EAAW,GAAKrD,GACf7gC,GAAKkkC,EAAW,KAAOrD,EAAQwE,IAClCA,EACApB,EACA,GACF,EACIuB,EAA+C,CACnDJ,EAAcG,CAAmB,EACjCH,EAAcG,EAAsB,CAAC,EACrCH,EAAcG,EAAsB,CAAC,EACrCH,EAAcG,EAAsB,CAAC,CAAA,EAEjCE,EAA+C,CACnDhoB,EAAKukB,CAAU,EACfvkB,EAAKukB,EAAa,CAAC,EACnBvkB,EAAKukB,EAAa,CAAC,EACnBvkB,EAAKukB,EAAa,CAAC,CAAA,EAEf0D,EAAajC,GAAY+B,EAAYC,CAAU,EAC1C1D,EAAAC,CAAU,EAAI0D,EAAW,CAAC,EACrC3D,EAAWC,EAAa,CAAC,EAAI0D,EAAW,CAAC,EACzC3D,EAAWC,EAAa,CAAC,EAAI0D,EAAW,CAAC,EACzC3D,EAAWC,EAAa,CAAC,EAAI0D,EAAW,CAAC,CAC3C,CACF,CAGK,OADc,IAAI,UAAU3D,EAAYlB,EAAOC,CAAM,CAE9D,CAYO,SAAS6E,GACd/F,EACAgG,EACAC,EACAhC,EACAC,EACAgC,EAAa,GACF,CACX,KAAM,CAAE,KAAAroB,EAAM,MAAAojB,EAAO,OAAAC,CAAA,EAAWlB,EAChC,IAAIqE,EAAYH,EACZI,EAAWL,EACXM,EAAayB,EACbxB,EAAcyB,EACd5B,EAAY,EACFA,EAAA,EACHA,EAAYpD,IACToD,EAAApD,GAEVqD,EAAW,EACFA,EAAA,EACFA,EAAWpD,IACToD,EAAApD,GAETqD,EAAa,EACFA,EAAA,EACJA,EAAatD,IACTsD,EAAAtD,GAEXuD,EAAc,EACFA,EAAA,EACLA,EAActD,IACTsD,EAAAtD,GAEZmD,EAAYE,EAAatD,IAC3BsD,EAAatD,EAAQoD,GAEnBC,EAAWE,EAActD,IAC3BsD,EAActD,EAASoD,GAGzB,MAAMnC,EAAa,IAAI,kBAAkBtkB,EAAK,MAAM,EACpD,QAASzd,EAAI,EAAGA,EAAI8gC,EAAQ9gC,IAC1B,QAASE,EAAI,EAAGA,EAAI2gC,EAAO3gC,IAAK,CACxB,MAAA8hC,GAAchiC,EAAI6gC,EAAQ3gC,GAAK,EAEnC,GAAAA,GAAK+jC,GACL/jC,GAAK+jC,EAAYE,GACjBnkC,GAAKkkC,GACLlkC,GAAKkkC,EAAWE,EAChB,CACA,MAAM2B,EAAY,KAAK,OAAO7lC,EAAI+jC,GAAa6B,CAAU,EACnDE,EAAY,KAAK,OAAOhmC,EAAIkkC,GAAY4B,CAAU,EACxD,IAAIG,EAAkB,KAAK,MACzBH,GAAcC,EAAY,GAAKD,EAAa,EAAI7B,CAAA,EAE9CiC,EAAkB,KAAK,MACzBJ,GAAcE,EAAY,GAAKF,EAAa,EAAI5B,CAAA,EAE9C+B,EAAkBpF,EAAQ,IAC5BoF,EAAkBpF,EAAQ,GAExBqF,EAAkBpF,EAAS,IAC7BoF,EAAkBpF,EAAS,GAEvB,MAAAqF,GACHD,EAAkBrF,EAAQoF,GAAmB,EACrClE,EAAAC,CAAU,EAAIvkB,EAAK0oB,CAAmB,EACjDpE,EAAWC,EAAa,CAAC,EAAIvkB,EAAK0oB,EAAsB,CAAC,EACzDpE,EAAWC,EAAa,CAAC,EAAIvkB,EAAK0oB,EAAsB,CAAC,EACzDpE,EAAWC,EAAa,CAAC,EAAIvkB,EAAK0oB,EAAsB,CAAC,CAAA,MAE9CpE,EAAAC,CAAU,EAAIvkB,EAAKukB,CAAU,EACxCD,EAAWC,EAAa,CAAC,EAAIvkB,EAAKukB,EAAa,CAAC,EAChDD,EAAWC,EAAa,CAAC,EAAIvkB,EAAKukB,EAAa,CAAC,EAChDD,EAAWC,EAAa,CAAC,EAAIvkB,EAAKukB,EAAa,CAAC,CAEpD,CAGK,OADc,IAAI,UAAUD,EAAYlB,EAAOC,CAAM,CAE9D,CAyCgB,SAAAsF,GACdC,EACAC,EACA17B,EAGI,CACF,gBAAiB,CAAE,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAC5C,gBAAiB,CAAE,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAAE,CAC5C,EACW,CACX,GAAI07B,GAAe17B,EAAS,CAC1B,KAAM,CAAE,KAAA6S,EAAM,MAAAojB,EAAO,OAAAC,CAAA,EAAWuF,EAC1B,CAAE,KAAME,CAAW,EAAAD,EACnBvE,EAAa,IAAI,kBAAkBtkB,EAAK,MAAM,EAC9C,CAAE,gBAAA+oB,EAAiB,gBAAAC,CAAoB,EAAA77B,EAC7C,QAAS5K,EAAI,EAAGA,EAAI8gC,EAAQ9gC,IAC1B,QAASE,EAAI,EAAGA,EAAI2gC,EAAO3gC,IAAK,CACxB,MAAA8hC,GAAchiC,EAAI6gC,EAAQ3gC,GAAK,EAC/B5P,EAAIi2C,EAAOvE,CAAU,EACrB,EAAIuE,EAAOvE,EAAa,CAAC,EACzB3iC,EAAIknC,EAAOvE,EAAa,CAAC,EACzBpnC,EAAI2rC,EAAOvE,EAAa,CAAC,EAE7B1xC,IAAMk2C,EAAgB,GACtB,IAAMA,EAAgB,GACtBnnC,IAAMmnC,EAAgB,GACtB5rC,IAAM4rC,EAAgB,GACtBC,EAAgB,IAAM,GAEX1E,EAAAC,CAAU,EAAIyE,EAAgB,EAC9B1E,EAAAC,EAAa,CAAC,EAAIyE,EAAgB,EAClC1E,EAAAC,EAAa,CAAC,EAAIyE,EAAgB,EAClC1E,EAAAC,EAAa,CAAC,EAAIyE,EAAgB,IAElC1E,EAAAC,CAAU,EAAIvkB,EAAKukB,CAAU,EACxCD,EAAWC,EAAa,CAAC,EAAIvkB,EAAKukB,EAAa,CAAC,EAChDD,EAAWC,EAAa,CAAC,EAAIvkB,EAAKukB,EAAa,CAAC,EAChDD,EAAWC,EAAa,CAAC,EAAIvkB,EAAKukB,EAAa,CAAC,EAEpD,CAGK,OADc,IAAI,UAAUD,EAAYlB,EAAOC,CAAM,CAE9D,CACO,OAAAuF,CACT,CAGA,SAAShD,GAAkBzD,EAAsB8G,EAA6B,CAC5E,KAAM,CAAE,KAAAjpB,EAAM,MAAAojB,EAAO,OAAAC,CAAA,EAAWlB,EAC1BmC,EAAa,IAAI,kBAAkBtkB,EAAK,MAAM,EACpD,QAASzd,EAAI,EAAGA,EAAI8gC,EAAQ9gC,IAC1B,QAASE,EAAI,EAAGA,EAAI2gC,EAAO3gC,IAAK,CACxB,MAAA8hC,GAAchiC,EAAI6gC,EAAQ3gC,GAAK,EACrC,QAASjO,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAC1B,MAAMyc,EAAQszB,EAAa/vC,EACvBiO,IAAM,GAAKA,IAAM2gC,EAAQ,GAAK7gC,IAAM,GAAKA,IAAM8gC,EAAS,EAC/CiB,EAAArzB,CAAK,EAAI+O,EAAK/O,CAAK,EAE9BqzB,EAAWrzB,CAAK,EACdg4B,EAAO,CAAC,EAAIjpB,EAAK/O,EAAQmyB,EAAQ,EAAI,CAAC,EACtC6F,EAAO,CAAC,EAAIjpB,EAAK/O,EAAQmyB,EAAQ,CAAC,EAClC6F,EAAO,CAAC,EAAIjpB,EAAK/O,EAAQmyB,EAAQ,EAAI,CAAC,EACtC6F,EAAO,CAAC,EAAIjpB,EAAK/O,EAAQ,CAAC,EAC1Bg4B,EAAO,CAAC,EAAIjpB,EAAK/O,CAAK,EACtBg4B,EAAO,CAAC,EAAIjpB,EAAK/O,EAAQ,CAAC,EAC1Bg4B,EAAO,CAAC,EAAIjpB,EAAK/O,EAAQmyB,EAAQ,EAAI,CAAC,EACtC6F,EAAO,CAAC,EAAIjpB,EAAK/O,EAAQmyB,EAAQ,CAAC,EAClC6F,EAAO,CAAC,EAAIjpB,EAAK/O,EAAQmyB,EAAQ,EAAI,CAAC,CAE5C,CACAkB,EAAWC,EAAa,CAAC,EAAIvkB,EAAKukB,EAAa,CAAC,CAClD,CAGK,OADc,IAAI,UAAUD,EAAYlB,EAAOC,CAAM,CAE9D,CAGA,SAAS2C,GACP+B,EACAC,EACA,CACA,GACED,GACAA,EAAW,SAAW,GACtBC,GACAA,EAAW,SAAW,EACtB,CACM,MAAAkB,EAASnB,EAAW,CAAC,EACrBoB,EAASnB,EAAW,CAAC,EACvB,GAAAkB,IAAW,KAAOC,IAAW,EACxB,OAAApB,EACT,GAAWmB,IAAW,EACb,OAAAlB,EACF,CACL,MAAMoB,EAAmBF,EAAS,IAC5BG,EAAmBF,EAAS,IAC5BG,EAAY,KAAK,IACrB,KAAK,IACH,KAAK,MACHvB,EAAW,CAAC,EAAIqB,EACdpB,EAAW,CAAC,EAAIqB,GAAoB,EAAID,EAC5C,EACA,GACF,EACA,CAAA,EAEIG,EAAY,KAAK,IACrB,KAAK,IACH,KAAK,MACHxB,EAAW,CAAC,EAAIqB,EACdpB,EAAW,CAAC,EAAIqB,GAAoB,EAAID,EAC5C,EACA,GACF,EACA,CAAA,EAEII,EAAY,KAAK,IACrB,KAAK,IACH,KAAK,MACHzB,EAAW,CAAC,EAAIqB,EACdpB,EAAW,CAAC,EAAIqB,GAAoB,EAAID,EAC5C,EACA,GACF,EACA,CAAA,EAEIK,EAAY,KAAK,IACrB,KAAK,IACH,KAAK,OACFL,EAAmBC,GAAoB,EAAID,IAAqB,GACnE,EACA,GACF,EACA,CAAA,EAEF,MAAO,CAACE,EAAWC,EAAWC,EAAWC,CAAS,CACpD,CACF,CACA,MAAO,CAAC,IAAK,IAAK,IAAK,GAAG,CAC5B,CCpwCa,MAAAC,GAAwB,UAAY,CAC/C,MAAMC,EAAmB,CAAA,EAElB,MAAA,CACL,UAAU/nC,EAAG,CACJ+nC,EAAA,KAAK/nC,EAAI,GAAI,CACtB,EACA,WAAWpN,EAAG,CACZ,KAAK,UAAUA,CAAC,EACX,KAAA,UAAUA,IAAM,CAAC,CACxB,EACA,WAAWo1C,EAAIC,EAAM,EAAG/F,EAAM8F,EAAG,OAAQ,CACvC,QAAS,EAAI,EAAG,EAAI9F,EAAK,IACvB,KAAK,UAAU8F,EAAG,EAAIC,CAAG,CAAC,CAE9B,EACA,YAAYz1C,EAAG,CACb,QAASI,EAAI,EAAGsvC,EAAM1vC,EAAE,OAAQI,EAAIsvC,EAAKtvC,IACvC,KAAK,UAAUJ,EAAE,WAAWI,CAAC,CAAC,CAElC,EACA,aAAc,CACL,OAAAm1C,CACT,EACA,UAAW,CACT,IAAIv1C,EAAI,IACR,QAASI,EAAI,EAAGsvC,EAAM6F,EAAO,OAAQn1C,EAAIsvC,EAAKtvC,IACxCA,EAAI,IACDJ,GAAA,KAEPA,GAAKu1C,EAAOn1C,CAAC,EAEV,OAAAJ,GAAA,IACEA,CACT,CAAA,CAEJ,EAEa01C,GAA2B,UAAY,CAClD,IAAIxhB,EAAU,EACVyhB,EAAU,EACVC,EAAU,EACVC,EAAU,GAER,MAAAC,EAAS,SAAUt3C,EAAW,CAClC,GAAI,EAAAA,EAAI,GAER,IAAWA,EAAI,GACb,MAAO,IAAOA,EAChB,GAAWA,EAAI,GACb,MAAO,KAAQA,EAAI,IACrB,GAAWA,EAAI,GACb,MAAO,KAAQA,EAAI,IACrB,GAAWA,GAAK,GACP,MAAA,IACT,GAAWA,GAAK,GACP,MAAA,IAEH,MAAA,IAAI,MAAM,KAAOA,CAAC,CAAA,EAGpBu3C,EAAe,SAAUvoC,EAAW,CACxCqoC,GAAW,OAAO,aAAaC,EAAOtoC,EAAI,EAAI,CAAC,CAAA,EAG1C,MAAA,CACL,UAAUhP,EAAG,CAIX,IAHW01B,EAAAA,GAAW,EAAM11B,EAAI,IACrBm3C,GAAA,EACAC,GAAA,EACJD,GAAW,GACHI,EAAA7hB,IAAayhB,EAAU,CAAE,EAC3BA,GAAA,CAEf,EACA,OAAQ,CAMF,GALAA,EAAU,IACCI,EAAA7hB,GAAY,EAAIyhB,CAAQ,EAC3BzhB,EAAA,EACAyhB,EAAA,GAERC,EAAU,GAAK,EAAG,CAEd,MAAAI,EAAS,EAAKJ,EAAU,EAC9B,QAASx1C,EAAI,EAAGA,EAAI41C,EAAQ51C,IACfy1C,GAAA,GAEf,CACF,EACA,UAAW,CACF,OAAAA,CACT,CAAA,CAEJ,EAEaI,GAAW,SACtBC,EACAC,EACAC,EACA,CACA,MAAMC,EAAQ,IAAI,MAAMH,EAAOA,CAAI,EAE7BI,EAAkB,SAAUC,EAA4B,CAC5D,MAAMC,EAAOD,EACb,IAAIE,EAAa,EACbC,EAAa,EAEV,MAAA,CACL,MAAM9qB,EAAc5V,EAAgB,CAC9B,GAAA4V,IAAS5V,EACL,MAAA,IAAI,MAAM,aAAa,EAGxB,KAAAygC,EAAazgC,GAAU,GAC5BwgC,EAAK,UAAU,KAAS5qB,GAAQ6qB,EAAcC,EAAW,EACzD1gC,GAAU,EAAIygC,EACd7qB,KAAU,EAAI6qB,EACDC,EAAA,EACAD,EAAA,EAGfC,EAAc9qB,GAAQ6qB,EAAcC,EACpCD,EAAaA,EAAazgC,CAC5B,EAEA,OAAQ,CACFygC,EAAa,GACfD,EAAK,UAAUE,CAAU,CAE7B,CAAA,CACF,EAGIC,EAAe,SAAUC,EAAwB,CACrD,MAAMC,EAAY,GAAKD,EACjBE,GAAW,GAAKF,GAAkB,EACxC,IAAIG,EAAYH,EAAiB,EAGjC,MAAMI,EAAQC,IAEd,QAAS72C,EAAI,EAAGA,EAAIy2C,EAAWz2C,IAC7B42C,EAAM,IAAI,OAAO,aAAa52C,CAAC,CAAC,EAElC42C,EAAM,IAAI,OAAO,aAAaH,CAAS,CAAC,EACxCG,EAAM,IAAI,OAAO,aAAaF,CAAO,CAAC,EAEtC,MAAMI,EAAU5B,KACV6B,EAASb,EAAgBY,CAAO,EAG/BC,EAAA,MAAMN,EAAWE,CAAS,EAEjC,IAAIK,EAAY,EAEZp3C,EAAI,OAAO,aAAaq2C,EAAMe,CAAS,CAAC,EAGrC,IAFMA,GAAA,EAENA,EAAYf,EAAM,QAAQ,CAC/B,MAAM9yC,EAAI,OAAO,aAAa8yC,EAAMe,CAAS,CAAC,EACjCA,GAAA,EAETJ,EAAM,SAASh3C,EAAIuD,CAAC,EACtBvD,EAAIA,EAAIuD,GAER4zC,EAAO,MAAMH,EAAM,QAAQh3C,CAAC,EAAG+2C,CAAS,EAEpCC,EAAM,KAAK,EAAI,OACbA,EAAM,QAAU,GAAKD,IACVA,GAAA,GAGTC,EAAA,IAAIh3C,EAAIuD,CAAC,GAGbvD,EAAAuD,EAER,CAEA,OAAA4zC,EAAO,MAAMH,EAAM,QAAQh3C,CAAC,EAAG+2C,CAAS,EAGjCI,EAAA,MAAML,EAASC,CAAS,EAE/BI,EAAO,MAAM,EAEND,EAAQ,aAAY,EAGvBD,EAAW,UAAY,CAC3B,MAAMI,EAA+B,CAAA,EACrC,IAAIC,EAAQ,EAEL,MAAA,CACL,IAAIx4B,EAAa,CACX,GAAA,KAAK,SAASA,CAAG,EACb,MAAA,IAAI,MAAM,WAAaA,CAAG,EAElCu4B,EAAKv4B,CAAG,EAAIw4B,EACHA,GAAA,CACX,EAEA,MAAO,CACE,OAAAA,CACT,EAEA,QAAQx4B,EAAa,CACnB,OAAOu4B,EAAKv4B,CAAG,CACjB,EAEA,SAASA,EAAa,CACb,OAAA,OAAOu4B,EAAKv4B,CAAG,EAAK,GAC7B,CAAA,CACF,EAGK,MAAA,CACL,SAASzQ,EAAWF,EAAWopC,EAAe,CACtClB,EAAAloC,EAAI+nC,EAAO7nC,CAAC,EAAIkpC,CACxB,EACA,MAAMhB,EAA4B,CAEhCA,EAAI,YAAY,QAAQ,EAGxBA,EAAI,WAAWL,CAAI,EACnBK,EAAI,WAAWL,CAAI,EAEnBK,EAAI,UAAU,GAAI,EAClBA,EAAI,UAAU,CAAC,EACfA,EAAI,UAAU,CAAC,EAKXA,EAAA,UAAUiB,GAAoB,KAAOrB,EAAW,CAAC,EAAIA,EAAW,CAAC,CAAC,CAAC,EACnEI,EAAA,UAAUiB,GAAoB,KAAOrB,EAAW,CAAC,EAAIA,EAAW,CAAC,CAAC,CAAC,EACnEI,EAAA,UAAUiB,GAAoB,KAAOrB,EAAW,CAAC,EAAIA,EAAW,CAAC,CAAC,CAAC,EAGnEI,EAAA,UAAUiB,GAAoB,KAAOpB,EAAW,CAAC,EAAIA,EAAW,CAAC,CAAC,CAAC,EACnEG,EAAA,UAAUiB,GAAoB,KAAOpB,EAAW,CAAC,EAAIA,EAAW,CAAC,CAAC,CAAC,EACnEG,EAAA,UAAUiB,GAAoB,KAAOpB,EAAW,CAAC,EAAIA,EAAW,CAAC,CAAC,CAAC,EAGvEG,EAAI,YAAY,GAAG,EACnBA,EAAI,WAAW,CAAC,EAChBA,EAAI,WAAW,CAAC,EAChBA,EAAI,WAAWL,CAAI,EACnBK,EAAI,WAAWL,CAAI,EACnBK,EAAI,UAAU,CAAC,EAKf,MAAMK,EAAiB,EACjBa,EAASd,EAAaC,CAAc,EAE1CL,EAAI,UAAUK,CAAc,EAE5B,IAAIpzB,EAAS,EAEN,KAAAi0B,EAAO,OAASj0B,EAAS,KAC9B+yB,EAAI,UAAU,GAAG,EACbA,EAAA,WAAWkB,EAAQj0B,EAAQ,GAAG,EACxBA,GAAA,IAGR+yB,EAAA,UAAUkB,EAAO,OAASj0B,CAAM,EACpC+yB,EAAI,WAAWkB,EAAQj0B,EAAQi0B,EAAO,OAASj0B,CAAM,EACrD+yB,EAAI,UAAU,CAAI,EAGlBA,EAAI,YAAY,GAAG,CACrB,CAAA,CAEJ,EAEamB,GAAkB,SAC7BxB,EACAC,EACAC,EACAuB,EACA,CACA,MAAMC,EAAM3B,GAASC,EAAMC,EAAYC,CAAU,EAEjD,QAASjoC,EAAI,EAAGA,EAAI+nC,EAAM/nC,IACxB,QAASE,EAAI,EAAGA,EAAI6nC,EAAM7nC,IACxBupC,EAAI,SAASvpC,EAAGF,EAAGwpC,EAAStpC,EAAGF,CAAC,CAAC,EAIrC,MAAMX,EAAI8nC,KACVsC,EAAI,MAAMpqC,CAAC,EAEX,MAAMqqC,EAASnC,KACT59B,EAAQtK,EAAE,cAChB,QAASpN,EAAI,EAAGsvC,EAAM53B,EAAM,OAAQ1X,EAAIsvC,EAAKtvC,IACpCy3C,EAAA,UAAU//B,EAAM1X,CAAC,CAAC,EAE3By3C,EAAO,MAAM,EAEb,IAAI7E,EAAM,GACH,OAAAA,GAAA,yBACAA,GAAA6E,EAEA7E,CACT,ECjUM8E,GAAS,CACb,YAAa,EACb,eAAgB,EAChB,eAAgB,EAChB,WAAY,CACd,EAEMC,GAAsB,CAC1B,EAAG,EACH,EAAG,EACH,EAAG,EACH,EAAG,CACL,EAEMC,GAAgB,CACpB,WAAY,EACZ,WAAY,EACZ,WAAY,EACZ,WAAY,EACZ,WAAY,EACZ,WAAY,EACZ,WAAY,EACZ,WAAY,CACd,EAEMC,GAAS,CACb,KAAM,SAAUz5C,EAAW,CACzB,GAAIA,EAAI,EACN,MAAM,IAAI,MAAM,QAAUA,EAAI,GAAG,EAE5B,OAAAy5C,GAAO,UAAUz5C,CAAC,CAC3B,EACA,KAAM,SAAUA,EAAW,CACzB,KAAOA,EAAI,GACJA,GAAA,IAEP,KAAOA,GAAK,KACLA,GAAA,IAEA,OAAAy5C,GAAO,UAAUz5C,CAAC,CAC3B,EACA,UAAW,IAAI,MAAM,GAAG,EACxB,UAAW,IAAI,MAAM,GAAG,CAC1B,EAEA,QAAS4B,EAAI,EAAGA,EAAI,EAAGA,IACd63C,GAAA,UAAU73C,CAAC,EAAI,GAAKA,EAE7B,QAASA,EAAI,EAAGA,EAAI,IAAKA,IAChB63C,GAAA,UAAU73C,CAAC,EAChB63C,GAAO,UAAU73C,EAAI,CAAC,EACtB63C,GAAO,UAAU73C,EAAI,CAAC,EACtB63C,GAAO,UAAU73C,EAAI,CAAC,EACtB63C,GAAO,UAAU73C,EAAI,CAAC,EAE1B,QAASA,EAAI,EAAGA,EAAI,IAAKA,IACvB63C,GAAO,UAAUA,GAAO,UAAU73C,CAAC,CAAC,EAAIA,EAG1C,MAAM83C,EAAS,CACb,uBAAwB,CACtB,CAAC,EACD,CAAC,EAAG,EAAE,EACN,CAAC,EAAG,EAAE,EACN,CAAC,EAAG,EAAE,EACN,CAAC,EAAG,EAAE,EACN,CAAC,EAAG,EAAE,EACN,CAAC,EAAG,GAAI,EAAE,EACV,CAAC,EAAG,GAAI,EAAE,EACV,CAAC,EAAG,GAAI,EAAE,EACV,CAAC,EAAG,GAAI,EAAE,EACV,CAAC,EAAG,GAAI,EAAE,EACV,CAAC,EAAG,GAAI,EAAE,EACV,CAAC,EAAG,GAAI,EAAE,EACV,CAAC,EAAG,GAAI,GAAI,EAAE,EACd,CAAC,EAAG,GAAI,GAAI,EAAE,EACd,CAAC,EAAG,GAAI,GAAI,EAAE,EACd,CAAC,EAAG,GAAI,GAAI,EAAE,EACd,CAAC,EAAG,GAAI,GAAI,EAAE,EACd,CAAC,EAAG,GAAI,GAAI,EAAE,EACd,CAAC,EAAG,GAAI,GAAI,EAAE,EACd,CAAC,EAAG,GAAI,GAAI,GAAI,EAAE,EAClB,CAAC,EAAG,GAAI,GAAI,GAAI,EAAE,EAClB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAG,EACnB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAG,EACnB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAG,EACnB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAG,EACnB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAG,EACnB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,GAAG,EACvB,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,GAAG,EACxB,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,GAAG,EACxB,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,GAAG,EACxB,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,GAAG,EACxB,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,GAAG,EACxB,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,GAAG,EACxB,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,IAAK,GAAG,EAC7B,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,IAAK,GAAG,EAC7B,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,IAAK,GAAG,EAC7B,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,IAAK,GAAG,EAC7B,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,IAAK,GAAG,EAC7B,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,IAAK,GAAG,CAC/B,EAEA,IACG,KACH,IACG,KAQH,SAAW,MAEX,eAAgB,SAAUtsB,EAAc,CACtC,IAAI5kB,EAAI4kB,GAAQ,GACT,KAAAssB,EAAO,YAAYlxC,CAAC,EAAIkxC,EAAO,YAAYA,EAAO,GAAG,GAAK,GAE7DlxC,GAAAkxC,EAAO,KAAQA,EAAO,YAAYlxC,CAAC,EAAIkxC,EAAO,YAAYA,EAAO,GAAG,EAE/D,OAAAtsB,GAAQ,GAAM5kB,GAAKkxC,EAAO,QACrC,EAEA,iBAAkB,SAAUtsB,EAAc,CACxC,IAAI5kB,EAAI4kB,GAAQ,GACT,KAAAssB,EAAO,YAAYlxC,CAAC,EAAIkxC,EAAO,YAAYA,EAAO,GAAG,GAAK,GAE7DlxC,GAAAkxC,EAAO,KAAQA,EAAO,YAAYlxC,CAAC,EAAIkxC,EAAO,YAAYA,EAAO,GAAG,EAExE,OAAQtsB,GAAQ,GAAM5kB,CACxB,EAEA,YAAa,SAAU4kB,EAAc,CACnC,IAAIusB,EAAQ,EAEZ,KAAOvsB,GAAQ,GACbusB,IACUvsB,KAAA,EAGL,OAAAusB,CACT,EAEA,mBAAoB,SAAUC,EAAoB,CACzC,OAAAF,EAAO,uBAAuBE,EAAa,CAAC,CACrD,EAEA,QAAS,SAAUC,EAAqBj4C,EAAW4E,EAAW,CAC5D,OAAQqzC,EAAa,CACnB,KAAKL,GAAc,WACT,OAAA53C,EAAI4E,GAAK,GAAK,EACxB,KAAKgzC,GAAc,WACjB,OAAO53C,EAAI,GAAK,EAClB,KAAK43C,GAAc,WACjB,OAAOhzC,EAAI,GAAK,EAClB,KAAKgzC,GAAc,WACT,OAAA53C,EAAI4E,GAAK,GAAK,EACxB,KAAKgzC,GAAc,WACT,OAAA,KAAK,MAAM53C,EAAI,CAAC,EAAI,KAAK,MAAM4E,EAAI,CAAC,GAAK,GAAK,EACxD,KAAKgzC,GAAc,WACjB,OAAS53C,EAAI4E,EAAK,EAAO5E,EAAI4E,EAAK,GAAM,EAC1C,KAAKgzC,GAAc,WACjB,OAAU53C,EAAI4E,EAAK,EAAO5E,EAAI4E,EAAK,GAAM,GAAK,EAChD,KAAKgzC,GAAc,WACjB,OAAU53C,EAAI4E,EAAK,GAAO5E,EAAI4E,GAAK,GAAM,GAAK,EAEhD,QACQ,MAAA,IAAI,MAAM,mBAAqBqzC,CAAW,CACpD,CACF,EAEA,0BAA2B,SAAUC,EAA4B,CAC/D,IAAIvvC,EAAI,IAAIwvC,GAAa,CAAC,CAAC,EAAG,CAAC,EAE/B,QAASn4C,EAAI,EAAGA,EAAIk4C,EAAoBl4C,IACtC2I,EAAIA,EAAE,SAAS,IAAIwvC,GAAa,CAAC,EAAGN,GAAO,KAAK73C,CAAC,CAAC,EAAG,CAAC,CAAC,EAGlD,OAAA2I,CACT,EAEA,gBAAiB,SAAUmkC,EAAcr0B,EAAc,CACjD,GAAA,GAAKA,GAAQA,EAAO,GAGtB,OAAQq0B,EAAM,CACZ,KAAK4K,GAAO,YACH,MAAA,IACT,KAAKA,GAAO,eACH,MAAA,GACT,KAAKA,GAAO,eACH,MAAA,GACT,KAAKA,GAAO,WACH,MAAA,GACT,QACQ,MAAA,IAAI,MAAM,QAAU5K,CAAI,CAClC,SACSr0B,EAAO,GAGhB,OAAQq0B,EAAM,CACZ,KAAK4K,GAAO,YACH,MAAA,IACT,KAAKA,GAAO,eACH,MAAA,IACT,KAAKA,GAAO,eACH,MAAA,IACT,KAAKA,GAAO,WACH,MAAA,IACT,QACQ,MAAA,IAAI,MAAM,QAAU5K,CAAI,CAClC,SACSr0B,EAAO,GAGhB,OAAQq0B,EAAM,CACZ,KAAK4K,GAAO,YACH,MAAA,IACT,KAAKA,GAAO,eACH,MAAA,IACT,KAAKA,GAAO,eACH,MAAA,IACT,KAAKA,GAAO,WACH,MAAA,IACT,QACQ,MAAA,IAAI,MAAM,QAAU5K,CAAI,CAClC,KAEM,OAAA,IAAI,MAAM,QAAUr0B,CAAI,CAElC,EAEA,aAAc,SAAU2/B,EAAgB,CAChC,MAAAC,EAAcD,EAAO,iBAE3B,IAAIE,EAAY,EAIhB,QAASC,EAAM,EAAGA,EAAMF,EAAaE,IACnC,QAASC,EAAM,EAAGA,EAAMH,EAAaG,IAAO,CAC1C,IAAIC,EAAY,EAChB,MAAMC,EAAON,EAAO,OAAOG,EAAKC,CAAG,EAEnC,QAASn6C,EAAI,GAAIA,GAAK,EAAGA,IACvB,GAAI,EAAAk6C,EAAMl6C,EAAI,GAAKg6C,GAAeE,EAAMl6C,GAIxC,QAAS8E,EAAI,GAAIA,GAAK,EAAGA,IACnBq1C,EAAMr1C,EAAI,GAAKk1C,GAAeG,EAAMr1C,GAIpC9E,GAAK,GAAK8E,GAAK,GAIfu1C,GAAQN,EAAO,OAAOG,EAAMl6C,EAAGm6C,EAAMr1C,CAAC,GACxCs1C,IAKFA,EAAY,IACdH,GAAa,EAAIG,EAAY,EAEjC,CAKF,QAASF,EAAM,EAAGA,EAAMF,EAAc,EAAGE,IACvC,QAASC,EAAM,EAAGA,EAAMH,EAAc,EAAGG,IAAO,CAC9C,IAAIhV,EAAQ,EACR4U,EAAO,OAAOG,EAAKC,CAAG,GAAGhV,IACzB4U,EAAO,OAAOG,EAAM,EAAGC,CAAG,GAAGhV,IAC7B4U,EAAO,OAAOG,EAAKC,EAAM,CAAC,GAAGhV,IAC7B4U,EAAO,OAAOG,EAAM,EAAGC,EAAM,CAAC,GAAGhV,KACjCA,GAAS,GAAKA,GAAS,KACZ8U,GAAA,EAEjB,CAKF,QAASC,EAAM,EAAGA,EAAMF,EAAaE,IACnC,QAASC,EAAM,EAAGA,EAAMH,EAAc,EAAGG,IAErCJ,EAAO,OAAOG,EAAKC,CAAG,GACtB,CAACJ,EAAO,OAAOG,EAAKC,EAAM,CAAC,GAC3BJ,EAAO,OAAOG,EAAKC,EAAM,CAAC,GAC1BJ,EAAO,OAAOG,EAAKC,EAAM,CAAC,GAC1BJ,EAAO,OAAOG,EAAKC,EAAM,CAAC,GAC1B,CAACJ,EAAO,OAAOG,EAAKC,EAAM,CAAC,GAC3BJ,EAAO,OAAOG,EAAKC,EAAM,CAAC,IAEbF,GAAA,IAKnB,QAASE,EAAM,EAAGA,EAAMH,EAAaG,IACnC,QAASD,EAAM,EAAGA,EAAMF,EAAc,EAAGE,IAErCH,EAAO,OAAOG,EAAKC,CAAG,GACtB,CAACJ,EAAO,OAAOG,EAAM,EAAGC,CAAG,GAC3BJ,EAAO,OAAOG,EAAM,EAAGC,CAAG,GAC1BJ,EAAO,OAAOG,EAAM,EAAGC,CAAG,GAC1BJ,EAAO,OAAOG,EAAM,EAAGC,CAAG,GAC1B,CAACJ,EAAO,OAAOG,EAAM,EAAGC,CAAG,GAC3BJ,EAAO,OAAOG,EAAM,EAAGC,CAAG,IAEbF,GAAA,IAOnB,IAAIK,EAAY,EAEhB,QAASH,EAAM,EAAGA,EAAMH,EAAaG,IACnC,QAASD,EAAM,EAAGA,EAAMF,EAAaE,IAC/BH,EAAO,OAAOG,EAAKC,CAAG,GACxBG,IAKA,MAAAC,EACJ,KAAK,IAAK,IAAMD,EAAaN,EAAcA,EAAc,EAAE,EAAI,EACjE,OAAAC,GAAaM,EAAQ,GAEdN,CACT,CACF,EAEA,MAAMH,EAAa,CACjB,IAEA,YAAYzhC,EAAemiC,EAAe,CACpC,GAAAniC,EAAI,QAAU,KAChB,MAAM,IAAI,MAAMA,EAAI,OAAS,IAAMmiC,CAAK,EAE1C,IAAIz1B,EAAS,EACb,KAAOA,EAAS1M,EAAI,QAAUA,EAAI0M,CAAM,GAAK,GAC3CA,IAEF,KAAK,IAAM,IAAI,MAAM1M,EAAI,OAAS0M,EAASy1B,CAAK,EAChD,QAAS,EAAI,EAAG,EAAIniC,EAAI,OAAS0M,EAAQ,IACvC,KAAK,IAAI,CAAC,EAAI1M,EAAI,EAAI0M,CAAM,CAEhC,CAEA,IAAI3G,EAAe,CACV,OAAA,KAAK,IAAIA,CAAK,CACvB,CAEA,WAAY,CACV,OAAO,KAAK,IAAI,MAClB,CAEA,SAASte,EAAiB,CAClB,MAAAuY,EAAM,IAAI,MAAM,KAAK,UAAc,EAAAvY,EAAE,YAAc,CAAC,EAE1D,QAAS6B,EAAI,EAAGA,EAAI,KAAK,UAAA,EAAaA,IACpC,QAAS4E,EAAI,EAAGA,EAAIzG,EAAE,UAAA,EAAayG,IAC7B8R,EAAA1W,EAAI4E,CAAC,GAAKizC,GAAO,KACnBA,GAAO,KAAK,KAAK,IAAI73C,CAAC,CAAC,EAAI63C,GAAO,KAAK15C,EAAE,IAAIyG,CAAC,CAAC,CAAA,EAK9C,OAAA,IAAIuzC,GAAazhC,EAAK,CAAC,CAChC,CAEA,IAAIvY,EAA+B,CACjC,GAAI,KAAK,UAAU,EAAIA,EAAE,UAAA,EAAc,EAC9B,OAAA,KAGT,MAAMy6C,EAAQf,GAAO,KAAK,KAAK,IAAI,CAAC,CAAC,EAAIA,GAAO,KAAK15C,EAAE,IAAI,CAAC,CAAC,EAEvDuY,EAAM,IAAI,MAAM,KAAK,UAAW,CAAA,EAEtC,QAAS,EAAI,EAAG,EAAI,KAAK,UAAA,EAAa,IACpCA,EAAI,CAAC,EAAI,KAAK,IAAI,CAAC,EAGrB,QAAS,EAAI,EAAG,EAAIvY,EAAE,UAAA,EAAa,IAC7BuY,EAAA,CAAC,GAAKmhC,GAAO,KAAKA,GAAO,KAAK15C,EAAE,IAAI,CAAC,CAAC,EAAIy6C,CAAK,EAIrD,OAAO,IAAIT,GAAazhC,EAAK,CAAC,EAAE,IAAIvY,CAAC,CACvC,CACF,CAEA,MAAM26C,EAAU,CACd,WACA,UAEA,YAAYC,EAAoBC,EAAmB,CACjD,KAAK,WAAaD,EAClB,KAAK,UAAYC,CACnB,CAEA,OAAO,eAAiB,CAOtB,CAAC,EAAG,GAAI,EAAE,EACV,CAAC,EAAG,GAAI,EAAE,EACV,CAAC,EAAG,GAAI,EAAE,EACV,CAAC,EAAG,GAAI,CAAC,EAGT,CAAC,EAAG,GAAI,EAAE,EACV,CAAC,EAAG,GAAI,EAAE,EACV,CAAC,EAAG,GAAI,EAAE,EACV,CAAC,EAAG,GAAI,EAAE,EAGV,CAAC,EAAG,GAAI,EAAE,EACV,CAAC,EAAG,GAAI,EAAE,EACV,CAAC,EAAG,GAAI,EAAE,EACV,CAAC,EAAG,GAAI,EAAE,EAGV,CAAC,EAAG,IAAK,EAAE,EACX,CAAC,EAAG,GAAI,EAAE,EACV,CAAC,EAAG,GAAI,EAAE,EACV,CAAC,EAAG,GAAI,CAAC,EAGT,CAAC,EAAG,IAAK,GAAG,EACZ,CAAC,EAAG,GAAI,EAAE,EACV,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,EAAE,EACrB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,EAAE,EAGrB,CAAC,EAAG,GAAI,EAAE,EACV,CAAC,EAAG,GAAI,EAAE,EACV,CAAC,EAAG,GAAI,EAAE,EACV,CAAC,EAAG,GAAI,EAAE,EAGV,CAAC,EAAG,GAAI,EAAE,EACV,CAAC,EAAG,GAAI,EAAE,EACV,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,EAAE,EACrB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,EAAE,EAGrB,CAAC,EAAG,IAAK,EAAE,EACX,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,EAAE,EACrB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,EAAE,EACrB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,EAAE,EAGrB,CAAC,EAAG,IAAK,GAAG,EACZ,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,EAAE,EACrB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,EAAE,EACrB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,EAAE,EAGrB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,EAAE,EACrB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,EAAE,EACrB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,EAAE,EACrB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,EAAE,EAGrB,CAAC,EAAG,IAAK,EAAE,EACX,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,EAAE,EACrB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,EAAE,EACrB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,EAAE,EAGrB,CAAC,EAAG,IAAK,GAAI,EAAG,IAAK,EAAE,EACvB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,EAAE,EACrB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,EAAE,EACrB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,EAAE,EAGrB,CAAC,EAAG,IAAK,GAAG,EACZ,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,EAAE,EACrB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,EAAE,EACrB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,EAAE,EAGtB,CAAC,EAAG,IAAK,IAAK,EAAG,IAAK,GAAG,EACzB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,EAAE,EACrB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,EAAE,EACtB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,EAAE,EAGtB,CAAC,EAAG,IAAK,GAAI,EAAG,IAAK,EAAE,EACvB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,EAAE,EACrB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,EAAE,EACrB,CAAC,GAAI,GAAI,EAAE,EAGX,CAAC,EAAG,IAAK,GAAI,EAAG,IAAK,EAAE,EACvB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,EAAE,EACrB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,EAAE,EACtB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,EAAE,EAGtB,CAAC,EAAG,IAAK,IAAK,EAAG,IAAK,GAAG,EACzB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,EAAE,EACtB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,EAAE,EACtB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,EAAE,EAGtB,CAAC,EAAG,IAAK,IAAK,EAAG,IAAK,GAAG,EACzB,CAAC,EAAG,GAAI,GAAI,EAAG,GAAI,EAAE,EACrB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,EAAE,EACtB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,EAAE,EAGtB,CAAC,EAAG,IAAK,IAAK,EAAG,IAAK,GAAG,EACzB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,EAAE,EACtB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,EAAE,EACtB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,EAAE,EAGtB,CAAC,EAAG,IAAK,IAAK,EAAG,IAAK,GAAG,EACzB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,EAAE,EACtB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,EAAE,EACtB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EAGvB,CAAC,EAAG,IAAK,IAAK,EAAG,IAAK,GAAG,EACzB,CAAC,GAAI,GAAI,EAAE,EACX,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,EAAE,EACtB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,EAAE,EAGtB,CAAC,EAAG,IAAK,IAAK,EAAG,IAAK,GAAG,EACzB,CAAC,GAAI,GAAI,EAAE,EACX,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,EAAE,EACtB,CAAC,GAAI,GAAI,EAAE,EAGX,CAAC,EAAG,IAAK,IAAK,EAAG,IAAK,GAAG,EACzB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,EAAE,EACtB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EAGvB,CAAC,EAAG,IAAK,IAAK,EAAG,IAAK,GAAG,EACzB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,EAAE,EACtB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EACvB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,EAAE,EAGtB,CAAC,EAAG,IAAK,IAAK,EAAG,IAAK,GAAG,EACzB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,EAAE,EACtB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,EAAE,EACtB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EAGvB,CAAC,GAAI,IAAK,IAAK,EAAG,IAAK,GAAG,EAC1B,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,EAAE,EACtB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,EAAE,EACtB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,EAAE,EAGtB,CAAC,EAAG,IAAK,IAAK,EAAG,IAAK,GAAG,EACzB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,EAAE,EACtB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,EAAE,EACtB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EAGvB,CAAC,EAAG,IAAK,IAAK,GAAI,IAAK,GAAG,EAC1B,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,EAAE,EACtB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,EAAE,EACtB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EAGvB,CAAC,EAAG,IAAK,IAAK,EAAG,IAAK,GAAG,EACzB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,EAAE,EACtB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,EAAE,EACtB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EAGvB,CAAC,EAAG,IAAK,IAAK,GAAI,IAAK,GAAG,EAC1B,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EAGvB,CAAC,GAAI,IAAK,IAAK,EAAG,IAAK,GAAG,EAC1B,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,EAAE,EACtB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,EAAE,EACtB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EAGvB,CAAC,GAAI,IAAK,GAAG,EACb,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EAGvB,CAAC,GAAI,IAAK,IAAK,EAAG,IAAK,GAAG,EAC1B,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EAGvB,CAAC,GAAI,IAAK,IAAK,EAAG,IAAK,GAAG,EAC1B,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EACvB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,EAAE,EACtB,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,EAAE,EAGtB,CAAC,GAAI,IAAK,IAAK,EAAG,IAAK,GAAG,EAC1B,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EAGvB,CAAC,EAAG,IAAK,IAAK,GAAI,IAAK,GAAG,EAC1B,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,EAAE,EACtB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EACvB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,EAAE,EAGtB,CAAC,GAAI,IAAK,IAAK,EAAG,IAAK,GAAG,EAC1B,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EAGvB,CAAC,EAAG,IAAK,IAAK,GAAI,IAAK,GAAG,EAC1B,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EAGvB,CAAC,GAAI,IAAK,IAAK,EAAG,IAAK,GAAG,EAC1B,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,EAAE,EACtB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EAGvB,CAAC,GAAI,IAAK,IAAK,EAAG,IAAK,GAAG,EAC1B,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,EACvB,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,EAAE,CAAA,EAGzB,OAAO,YAAYhB,EAAoBiB,EAA2B,CAChE,MAAMC,EAAUJ,GAAU,gBAAgBd,EAAYiB,CAAiB,EAEvE,GAAIC,GAAW,KACb,MAAM,IAAI,MACR,6BACElB,EACA,sBACAiB,CAAA,EAIA,MAAArjC,EAASsjC,EAAQ,OAAS,EAE1BC,EAAO,CAAA,EAEb,QAASn5C,EAAI,EAAGA,EAAI4V,EAAQ5V,IAAK,CAC/B,MAAMwjC,EAAQ0V,EAAQl5C,EAAI,EAAI,CAAC,EACzB+4C,EAAaG,EAAQl5C,EAAI,EAAI,CAAC,EAC9Bg5C,EAAYE,EAAQl5C,EAAI,EAAI,CAAC,EAEnC,QAAS4E,EAAI,EAAGA,EAAI4+B,EAAO5+B,IACzBu0C,EAAK,KAAK,IAAIL,GAAUC,EAAYC,CAAS,CAAC,CAElD,CAEO,OAAAG,CACT,CAEA,OAAO,gBAAgBnB,EAAoBiB,EAA2B,CACpE,OAAQA,EAAmB,CACzB,KAAKtB,GAAoB,EACvB,OAAOmB,GAAU,gBAAgBd,EAAa,GAAK,EAAI,CAAC,EAC1D,KAAKL,GAAoB,EACvB,OAAOmB,GAAU,gBAAgBd,EAAa,GAAK,EAAI,CAAC,EAC1D,KAAKL,GAAoB,EACvB,OAAOmB,GAAU,gBAAgBd,EAAa,GAAK,EAAI,CAAC,EAC1D,KAAKL,GAAoB,EACvB,OAAOmB,GAAU,gBAAgBd,EAAa,GAAK,EAAI,CAAC,EAC1D,QACS,MACX,CACF,CACF,CAEA,MAAMoB,EAAY,CAChB,OACA,OAEA,aAAc,CACZ,KAAK,OAAS,GACd,KAAK,OAAS,CAChB,CAEA,IAAI38B,EAAe,CACjB,MAAM48B,EAAW,KAAK,MAAM58B,EAAQ,CAAC,EACrC,OAAS,KAAK,OAAO48B,CAAQ,IAAO,EAAK58B,EAAQ,EAAO,IAAM,CAChE,CAEA,IAAI/F,EAAad,EAAgB,CAC/B,QAAS5V,EAAI,EAAGA,EAAI4V,EAAQ5V,IAC1B,KAAK,QAAS0W,IAASd,EAAS5V,EAAI,EAAM,IAAM,CAAC,CAErD,CAEA,iBAAkB,CAChB,OAAO,KAAK,MACd,CAEA,OAAOs5C,EAAc,CACnB,MAAMD,EAAW,KAAK,MAAM,KAAK,OAAS,CAAC,EACvC,KAAK,OAAO,QAAUA,GACnB,KAAA,OAAO,KAAK,CAAC,EAGhBC,IACF,KAAK,OAAOD,CAAQ,GAAK,MAAS,KAAK,OAAS,GAG7C,KAAA,QACP,CACF,CAEA,MAAME,EAAW,CACf,KACA,KACA,YAAY/tB,EAAc,CACxB,KAAK,KAAOksB,GAAO,eACnB,KAAK,KAAOlsB,CACd,CACA,WAAY,CACV,OAAO,KAAK,KAAK,MACnB,CAEA,MAAM+O,EAAqB,CAChB,QAAAv6B,EAAI,EAAGsvC,EAAM,KAAK,KAAK,OAAQtvC,EAAIsvC,EAAKtvC,IAE/Cu6B,EAAO,IAAI,KAAK,KAAK,WAAWv6B,CAAC,EAAG,CAAC,CAEzC,CACF,CAEO,MAAMw5C,EAAO,CAClB,OAAO,KAAO,IACd,OAAO,KAAO,GAEd,WACA,kBACA,QACA,YACA,UACA,SAEA,YACExB,EACAiB,EACA,CACA,KAAK,WAAajB,EACb,KAAA,kBAAoBL,GAAoBsB,CAAiB,EAC9D,KAAK,QAAU,GACf,KAAK,YAAc,EACnB,KAAK,UAAY,KACjB,KAAK,SAAW,EAClB,CAEA,QAAQztB,EAAc,CACd,MAAAiuB,EAAU,IAAIF,GAAW/tB,CAAI,EAC9B,KAAA,SAAS,KAAKiuB,CAAO,EAC1B,KAAK,UAAY,IACnB,CAEA,OAAOlB,EAAaC,EAAa,CAE7B,GAAAD,EAAM,GACN,KAAK,aAAeA,GACpBC,EAAM,GACN,KAAK,aAAeA,EAEpB,MAAM,IAAI,MAAMD,EAAM,IAAMC,CAAG,EAEjC,OAAO,KAAK,QAAQD,CAAG,EAAEC,CAAG,CAC9B,CAEA,gBAAiB,CACf,OAAO,KAAK,WACd,CAEA,MAAO,CAED,GAAA,KAAK,WAAa,EAAG,CACvB,IAAIR,EAAa,EACjB,IAAKA,EAAa,EAAGA,EAAa,GAAIA,IAAc,CAClD,MAAM0B,EAAWZ,GAAU,YACzBd,EACA,KAAK,iBAAA,EAGDzd,EAAS,IAAI6e,GACnB,IAAIO,EAAiB,EACrB,QAAS35C,EAAI,EAAGA,EAAI05C,EAAS,OAAQ15C,IACjB25C,GAAAD,EAAS15C,CAAC,EAAE,UAGhC,QAASA,EAAI,EAAGA,EAAI,KAAK,SAAS,OAAQA,IAAK,CACvC,MAAAwrB,EAAO,KAAK,SAASxrB,CAAC,EACrBu6B,EAAA,IAAI/O,EAAK,KAAM,CAAC,EAChB+O,EAAA,IACL/O,EAAK,UAAU,EACfssB,EAAO,gBAAgBtsB,EAAK,KAAMwsB,CAAU,CAAA,EAE9CxsB,EAAK,MAAM+O,CAAM,CACnB,CACI,GAAAA,EAAO,mBAAqBof,EAAiB,EAAG,KACtD,CACA,KAAK,WAAa3B,CACpB,CACA,KAAK,SAAS,GAAO,KAAK,mBAAoB,CAAA,CAChD,CAEA,SAAS4B,EAAe3B,EAAqB,CACtC,KAAA,YAAc,KAAK,WAAa,EAAI,GACzC,KAAK,QAAU,IAAI,MAAM,KAAK,WAAW,EAEzC,QAASM,EAAM,EAAGA,EAAM,KAAK,YAAaA,IAAO,CAC/C,KAAK,QAAQA,CAAG,EAAI,IAAI,MAAM,KAAK,WAAW,EAE9C,QAASC,EAAM,EAAGA,EAAM,KAAK,YAAaA,IACxC,KAAK,QAAQD,CAAG,EAAEC,CAAG,EAAI,IAE7B,CAEK,KAAA,0BAA0B,EAAG,CAAC,EACnC,KAAK,0BAA0B,KAAK,YAAc,EAAG,CAAC,EACtD,KAAK,0BAA0B,EAAG,KAAK,YAAc,CAAC,EACtD,KAAK,2BAA2B,EAChC,KAAK,mBAAmB,EACnB,KAAA,cAAcoB,EAAM3B,CAAW,EAEhC,KAAK,YAAc,GACrB,KAAK,gBAAgB2B,CAAI,EAGvB,KAAK,WAAa,OACpB,KAAK,UAAYJ,GAAO,WACtB,KAAK,WACL,KAAK,kBACL,KAAK,QAAA,GAIJ,KAAA,QAAQ,KAAK,UAAWvB,CAAW,CAC1C,CAEA,0BAA0BM,EAAaC,EAAa,CAClD,QAASn6C,EAAI,GAAIA,GAAK,EAAGA,IACvB,GAAI,EAAAk6C,EAAMl6C,GAAK,IAAM,KAAK,aAAek6C,EAAMl6C,GAE/C,QAAS8E,EAAI,GAAIA,GAAK,EAAGA,IACnBq1C,EAAMr1C,GAAK,IAAM,KAAK,aAAeq1C,EAAMr1C,IAG5C,GAAK9E,GAAKA,GAAK,IAAM8E,GAAK,GAAKA,GAAK,IACpC,GAAKA,GAAKA,GAAK,IAAM9E,GAAK,GAAKA,GAAK,IACpC,GAAKA,GAAKA,GAAK,GAAK,GAAK8E,GAAKA,GAAK,EAEpC,KAAK,QAAQo1C,EAAMl6C,CAAC,EAAEm6C,EAAMr1C,CAAC,EAAI,GAEjC,KAAK,QAAQo1C,EAAMl6C,CAAC,EAAEm6C,EAAMr1C,CAAC,EAAI,GAIzC,CAEA,oBAAqB,CACnB,IAAI02C,EAAe,EACfC,EAAU,EAEd,QAAS95C,EAAI,EAAGA,EAAI,EAAGA,IAAK,CACrB,KAAA,SAAS,GAAMA,CAAC,EAEf,MAAAs4C,EAAYR,EAAO,aAAa,IAAI,GAEtC93C,GAAK,GAAK65C,EAAevB,KACZuB,EAAAvB,EACLwB,EAAA95C,EAEd,CAEO,OAAA85C,CACT,CAEA,gBACEC,EAWAC,EACAC,EACA,CACA,MAAMC,EAAQH,EAAU,qBAAqBC,EAAeC,CAAK,EAC3D16C,EAAK,EAEX,KAAK,KAAK,EAEV,QAASg5C,EAAM,EAAGA,EAAM,KAAK,QAAQ,OAAQA,IAAO,CAClD,MAAMxqC,EAAIwqC,EAAMh5C,EAEP,QAAAi5C,EAAM,EAAGA,EAAM,KAAK,QAAQD,CAAG,EAAE,OAAQC,IAAO,CACvD,MAAMvqC,EAAIuqC,EAAMj5C,EACH,KAAK,QAAQg5C,CAAG,EAAEC,CAAG,IAG1B0B,EAAA,UAAU,EAAG,GAAG,EAChBA,EAAA,OAAOjsC,EAAGF,CAAC,EACXmsC,EAAA,OAAOjsC,EAAI1O,EAAIwO,CAAC,EACtBmsC,EAAM,OAAOjsC,EAAI1O,EAAIwO,EAAIxO,CAAE,EACrB26C,EAAA,OAAOjsC,EAAGF,EAAIxO,CAAE,EACtB26C,EAAM,QAAQ,EAElB,CACF,CAEO,OAAAA,CACT,CAEA,oBAAqB,CACnB,QAAS77C,EAAI,EAAGA,EAAI,KAAK,YAAc,EAAGA,IACpC,KAAK,QAAQA,CAAC,EAAE,CAAC,GAAK,OAG1B,KAAK,QAAQA,CAAC,EAAE,CAAC,EAAIA,EAAI,GAAK,GAGhC,QAAS8E,EAAI,EAAGA,EAAI,KAAK,YAAc,EAAGA,IACpC,KAAK,QAAQ,CAAC,EAAEA,CAAC,GAAK,OAG1B,KAAK,QAAQ,CAAC,EAAEA,CAAC,EAAIA,EAAI,GAAK,EAElC,CAEA,4BAA6B,CAC3B,MAAMg3C,EAAMrC,EAAO,mBAAmB,KAAK,UAAU,EAErD,QAAS93C,EAAI,EAAGA,EAAIm6C,EAAI,OAAQn6C,IAC9B,QAAS4E,EAAI,EAAGA,EAAIu1C,EAAI,OAAQv1C,IAAK,CAC7B,MAAA2zC,EAAM4B,EAAIn6C,CAAC,EACXw4C,EAAM2B,EAAIv1C,CAAC,EAEjB,GAAI,KAAK,QAAQ2zC,CAAG,EAAEC,CAAG,GAAK,KAI9B,QAASn6C,EAAI,GAAIA,GAAK,EAAGA,IACvB,QAAS8E,EAAI,GAAIA,GAAK,EAAGA,IACnB9E,GAAK,IAAMA,GAAK,GAAK8E,GAAK,IAAMA,GAAK,GAAM9E,GAAK,GAAK8E,GAAK,EAC5D,KAAK,QAAQo1C,EAAMl6C,CAAC,EAAEm6C,EAAMr1C,CAAC,EAAI,GAEjC,KAAK,QAAQo1C,EAAMl6C,CAAC,EAAEm6C,EAAMr1C,CAAC,EAAI,EAIzC,CAEJ,CAEA,gBAAgBy2C,EAAe,CAC7B,MAAMQ,EAAOtC,EAAO,iBAAiB,KAAK,UAAU,EAEpD,QAAS93C,EAAI,EAAGA,EAAI,GAAIA,IAAK,CAC3B,MAAMq6C,EAAM,CAACT,IAAUQ,GAAQp6C,EAAK,IAAM,EAC1C,KAAK,QAAQ,KAAK,MAAMA,EAAI,CAAC,CAAC,EAAGA,EAAI,EAAK,KAAK,YAAc,EAAI,CAAC,EAAIq6C,CACxE,CAEA,QAASr6C,EAAI,EAAGA,EAAI,GAAIA,IAAK,CAC3B,MAAMq6C,EAAM,CAACT,IAAUQ,GAAQp6C,EAAK,IAAM,EAC1C,KAAK,QAASA,EAAI,EAAK,KAAK,YAAc,EAAI,CAAC,EAAE,KAAK,MAAMA,EAAI,CAAC,CAAC,EAAIq6C,CACxE,CACF,CAEA,cAAcT,EAAe3B,EAAqB,CAC1C,MAAAzsB,EAAQ,KAAK,mBAAqB,EAAKysB,EACvCmC,EAAOtC,EAAO,eAAetsB,CAAI,EAGvC,QAASxrB,EAAI,EAAGA,EAAI,GAAIA,IAAK,CAC3B,MAAMq6C,EAAM,CAACT,IAAUQ,GAAQp6C,EAAK,IAAM,EAEtCA,EAAI,EACN,KAAK,QAAQA,CAAC,EAAE,CAAC,EAAIq6C,EACZr6C,EAAI,EACb,KAAK,QAAQA,EAAI,CAAC,EAAE,CAAC,EAAIq6C,EAEzB,KAAK,QAAQ,KAAK,YAAc,GAAKr6C,CAAC,EAAE,CAAC,EAAIq6C,CAEjD,CAGA,QAASr6C,EAAI,EAAGA,EAAI,GAAIA,IAAK,CAC3B,MAAMq6C,EAAM,CAACT,IAAUQ,GAAQp6C,EAAK,IAAM,EAEtCA,EAAI,EACN,KAAK,QAAQ,CAAC,EAAE,KAAK,YAAcA,EAAI,CAAC,EAAIq6C,EACnCr6C,EAAI,EACb,KAAK,QAAQ,CAAC,EAAE,GAAKA,EAAI,EAAI,CAAC,EAAIq6C,EAElC,KAAK,QAAQ,CAAC,EAAE,GAAKr6C,EAAI,CAAC,EAAIq6C,CAElC,CAGA,KAAK,QAAQ,KAAK,YAAc,CAAC,EAAE,CAAC,EAAI,CAACT,CAC3C,CAEA,QAAQpuB,EAAgBysB,EAAqB,CAC3C,IAAIqC,EAAM,GACN/B,EAAM,KAAK,YAAc,EACzBgC,EAAW,EACXC,EAAY,EAEhB,QAAShC,EAAM,KAAK,YAAc,EAAGA,EAAM,EAAGA,GAAO,EAInD,IAHIA,GAAO,GAAGA,MAGD,CACX,QAASr1C,EAAI,EAAGA,EAAI,EAAGA,IACrB,GAAI,KAAK,QAAQo1C,CAAG,EAAEC,EAAMr1C,CAAC,GAAK,KAAM,CACtC,IAAIu1C,EAAO,GAEP8B,EAAYhvB,EAAK,SACnBktB,GAASltB,EAAKgvB,CAAS,IAAMD,EAAY,IAAM,GAGpCzC,EAAO,QAAQG,EAAaM,EAAKC,EAAMr1C,CAAC,IAGnDu1C,EAAO,CAACA,GAGV,KAAK,QAAQH,CAAG,EAAEC,EAAMr1C,CAAC,EAAIu1C,EAC7B6B,IAEIA,GAAY,KACdC,IACWD,EAAA,EAEf,CAKF,GAFOhC,GAAA+B,EAEH/B,EAAM,GAAK,KAAK,aAAeA,EAAK,CAC/BA,GAAA+B,EACPA,EAAM,CAACA,EACP,KACF,CACF,CAEJ,CAEA,OAAO,WACLtC,EACAiB,EACAwB,EACA,CACA,MAAMf,EAAWZ,GAAU,YAAYd,EAAYiB,CAAiB,EAE9D1e,EAAS,IAAI6e,GAEnB,QAASp5C,EAAI,EAAGA,EAAIy6C,EAAS,OAAQz6C,IAAK,CAClC,MAAAwrB,EAAOivB,EAASz6C,CAAC,EAChBu6B,EAAA,IAAI/O,EAAK,KAAM,CAAC,EAChB+O,EAAA,IACL/O,EAAK,UAAU,EACfssB,EAAO,gBAAgBtsB,EAAK,KAAMwsB,CAAU,CAAA,EAE9CxsB,EAAK,MAAM+O,CAAM,CACnB,CAGA,IAAIof,EAAiB,EACrB,QAAS35C,EAAI,EAAGA,EAAI05C,EAAS,OAAQ15C,IACjB25C,GAAAD,EAAS15C,CAAC,EAAE,UAGhC,GAAIu6B,EAAO,kBAAoBof,EAAiB,EAC9C,MAAM,IAAI,MACR,0BACEpf,EAAO,gBAAA,EACP,IACAof,EAAiB,EACjB,GAAA,EAUN,IALIpf,EAAO,gBAAA,EAAoB,GAAKof,EAAiB,GAC5Cpf,EAAA,IAAI,EAAG,CAAC,EAIVA,EAAO,kBAAoB,GAAK,GACrCA,EAAO,OAAO,EAAK,EAKrB,KACM,EAAAA,EAAO,mBAAqBof,EAAiB,IAG1Cpf,EAAA,IAAIif,GAAO,KAAM,CAAC,EAErBjf,EAAO,mBAAqBof,EAAiB,KAG1Cpf,EAAA,IAAIif,GAAO,KAAM,CAAC,EAGpB,OAAAA,GAAO,YAAYjf,EAAQmf,CAAQ,CAC5C,CAEA,OAAO,YAAYnf,EAAqBmf,EAAuB,CAC7D,IAAIt2B,EAAS,EAETs3B,EAAa,EACbC,EAAa,EAEjB,MAAMC,EAAS,IAAI,MAAMlB,EAAS,MAAM,EAClCmB,EAAS,IAAI,MAAMnB,EAAS,MAAM,EAExC,QAASr7C,EAAI,EAAGA,EAAIq7C,EAAS,OAAQr7C,IAAK,CAClC,MAAAy8C,EAAUpB,EAASr7C,CAAC,EAAE,UACtB08C,EAAUrB,EAASr7C,CAAC,EAAE,WAAay8C,EAE5BJ,EAAA,KAAK,IAAIA,EAAYI,CAAO,EAC5BH,EAAA,KAAK,IAAIA,EAAYI,CAAO,EAEzCH,EAAOv8C,CAAC,EAAI,IAAI,MAAMy8C,CAAO,EAE7B,QAAS96C,EAAI,EAAGA,EAAI46C,EAAOv8C,CAAC,EAAE,OAAQ2B,IAC7B46C,EAAAv8C,CAAC,EAAE2B,CAAC,EAAI,IAAOu6B,EAAO,OAAOv6B,EAAIojB,CAAM,EAEtCA,GAAA03B,EAEJ,MAAAE,EAASlD,EAAO,0BAA0BiD,CAAO,EAGjDE,EAFU,IAAI9C,GAAayC,EAAOv8C,CAAC,EAAG28C,EAAO,YAAc,CAAC,EAE1C,IAAIA,CAAM,EAClCH,EAAOx8C,CAAC,EAAI,IAAI,MAAM28C,EAAO,UAAA,EAAc,CAAC,EAC5C,QAASh7C,EAAI,EAAGA,EAAI66C,EAAOx8C,CAAC,EAAE,OAAQ2B,IAAK,CACzC,MAAMk7C,EAAWl7C,EAAIi7C,EAAQ,UAAc,EAAAJ,EAAOx8C,CAAC,EAAE,OAC9Cw8C,EAAAx8C,CAAC,EAAE2B,CAAC,EAAIk7C,GAAY,EAAID,EAAQ,IAAIC,CAAQ,EAAI,CACzD,CACF,CAEA,IAAIC,EAAiB,EACrB,QAASn7C,EAAI,EAAGA,EAAI05C,EAAS,OAAQ15C,IACjBm7C,GAAAzB,EAAS15C,CAAC,EAAE,WAG1B,MAAAwrB,EAAO,IAAI,MAAM2vB,CAAc,EACrC,IAAI1+B,EAAQ,EAEZ,QAASzc,EAAI,EAAGA,EAAI06C,EAAY16C,IAC9B,QAAS3B,EAAI,EAAGA,EAAIq7C,EAAS,OAAQr7C,IAC/B2B,EAAI46C,EAAOv8C,CAAC,EAAE,SAChBmtB,EAAK/O,GAAO,EAAIm+B,EAAOv8C,CAAC,EAAE2B,CAAC,GAKjC,QAASA,EAAI,EAAGA,EAAI26C,EAAY36C,IAC9B,QAAS3B,EAAI,EAAGA,EAAIq7C,EAAS,OAAQr7C,IAC/B2B,EAAI66C,EAAOx8C,CAAC,EAAE,SAChBmtB,EAAK/O,GAAO,EAAIo+B,EAAOx8C,CAAC,EAAE2B,CAAC,GAK1B,OAAAwrB,CACT,CACF,CAGA,MAAM4vB,GAAQ,KAAK,KACbC,GAAQ,KAAK,MACbC,GAAQ,KAAK,MAGH,SAAAC,GACdC,EACA7iC,EAOA,CACM,MAAA8iC,EAAMC,GAASF,CAAI,EACvBG,EAAMhjC,GAAS,KAAO,IACtBm9B,EAAOn9B,GAAS,MAAQ,IACxBq/B,EAAa,GACb4D,EAAUjjC,GAAS,SAAW,EAC9Bo9B,EAAap9B,GAAS,OAAS,UAC/Bq9B,EAAar9B,GAAS,YAAc,UAGhCkjC,EAAS,IAAIrC,GAAOxB,EAAY2D,CAAG,EACzCE,EAAO,QAAQJ,CAAG,EAClBI,EAAO,KAAK,EAGZ,MAAMrY,EAAQqY,EAAO,iBACnBjN,GAASkH,EAAO8F,EAAU,GAAKpY,EAE3BsY,EAAMF,EACVjM,EAAMmG,EAAO8F,EAEf,OAAOtE,GAAgBxB,EAAMC,EAAYC,EAAY,SAAU/nC,EAAGF,EAAG,CACnE,GAAI+tC,GAAO7tC,GAAKA,EAAI0hC,GAAOmM,GAAO/tC,GAAKA,EAAI4hC,EAAK,CAC9C,MAAMxsC,EAAIk4C,IAAOptC,EAAI6tC,GAAOlN,CAAK,EAC3BvwC,EAAIg9C,IAAOttC,EAAI+tC,GAAOlN,CAAK,EACjC,OAAOiN,EAAO,OAAOx9C,EAAG8E,CAAC,EAAI,EAAI,CAAA,KAE1B,OAAA,EACT,CACD,CACH,CAGgB,SAAA44C,GACdP,EACA7iC,EAUA,CACA,MAAM1K,EAAI0K,EAAQ,GAAK,EACrB5K,EAAI4K,EAAQ,GAAK,EACjB8iC,EAAMC,GAASF,CAAI,EACnB/N,EAAM90B,EAAQ,IACdgjC,EAAMhjC,EAAQ,KAAO,IACrBm9B,EAAO,OAAOn9B,EAAQ,MAAS,SAAW0iC,GAAM1iC,EAAQ,IAAI,EAAI,IAChEijC,EAAUjjC,EAAQ,SAAW,EAC7Bq/B,EAAa,GACbjC,EAAap9B,EAAQ,OAAS,UAC9Bq9B,EAAar9B,EAAQ,YAAc,UAG/BkjC,EAAS,IAAIrC,GAAOxB,EAAY2D,CAAG,EACzCE,EAAO,QAAQJ,CAAG,EAClBI,EAAO,KAAK,EAGZ,MAAMrY,EAAQqY,EAAO,iBACnBjN,GAASkH,EAAO8F,EAAU,GAAKpY,EAGjCiK,EAAI,UAAYuI,EAChBvI,EAAI,SAASx/B,EAAGF,EAAG+nC,EAAMA,CAAI,EAG7B,QAASyC,EAAM,EAAGA,EAAM/U,EAAO+U,IAC7B,QAASC,EAAM,EAAGA,EAAMhV,EAAOgV,IAAO,CAC9B,MAAAxqC,EAAIotC,IAAO5C,EAAM,GAAK5J,CAAK,EAAIyM,GAAM7C,EAAM5J,CAAK,EAChDloC,EAAI00C,IAAO7C,EAAM,GAAK3J,CAAK,EAAIyM,GAAM9C,EAAM3J,CAAK,EAEtDnB,EAAI,UAAYoO,EAAO,OAAOtD,EAAKC,CAAG,EAAIzC,EAAaC,EAEnDvI,EAAA,SACFx/B,EAAIqtC,GAAM9C,EAAM5J,CAAK,EAAIgN,EACzB7tC,EAAIutC,GAAM/C,EAAM3J,CAAK,EAAIgN,EACzB5tC,EACAtH,CAAA,CAEJ,CAEJ,CChtCO,SAASs1C,EAASC,EAAgB,CAC/B,OAAAA,EAAS,KAAK,GAAM,GAC9B,CAEO,SAASC,GAASC,EAAgB,CAC/B,OAAAA,EAAS,IAAO,KAAK,EAC/B,CAEO,SAASvmC,GAAO3H,EAAWF,EAAW0C,EAAI,EAAG,CAClD,OAAO,KAAK,KAAKxC,EAAIA,EAAIF,EAAIA,EAAI0C,EAAIA,CAAC,CACxC,CAEO,SAASqZ,GAASke,EAAYC,EAAYC,EAAYC,EAAY,CACvE,OAAOvyB,GAAOsyB,EAAKF,EAAIG,EAAKF,CAAE,CAChC,CAGO,SAASmU,GACdC,EACAC,EACAC,EACAC,EACQ,CACR,IAAIL,EAAS,KAAK,MAAMK,EAAOF,EAAQC,EAAOF,CAAM,EACpD,OAAIF,EAAS,IACXA,GAAU,KAAK,GAAK,GAEfA,CACT,CAEgB,SAAAM,GAAMN,EAAgBvmC,EAAgB,CAC7C,MAAA,CACL,GAAI,KAAK,IAAIumC,CAAM,EAAIvmC,EACvB,GAAI,KAAK,IAAIumC,CAAM,EAAIvmC,CAAA,CAE3B,CAEgB,SAAA8mC,GAAezuC,EAAWF,EAAW0C,EAAY,CAC3D,GAAA,OAAOA,GAAM,SAAU,CACzB,MAAMjN,EAAIoS,GAAO3H,EAAGF,EAAG0C,CAAC,EACjB,MAAA,CACL,EAAIxC,GAAKzK,EACT,EAAIuK,GAAKvK,EACT,EAAIiN,GAAKjN,CAAA,CACX,KACK,CACC,MAAAA,EAAIoS,GAAO3H,EAAGF,CAAC,EACd,MAAA,CACL,EAAIE,GAAKzK,EACT,EAAIuK,GAAKvK,CAAA,CAEb,CACF,CAGO,SAASsf,GACdu5B,EACAC,EACAC,EACAC,EACAG,EAAc,GAC2B,CAGvC,GAAA,KAAK,IAAIJ,EAAOF,CAAM,EAAIM,GAC1B,KAAK,IAAIH,EAAOF,CAAM,EAAIK,EAEnB,MAAA,KAET,MAAMV,EAASC,GAASE,GAAMC,EAAQC,EAAQC,EAAMC,CAAI,CAAC,EACrD,OAAAP,GAAU,MAAQA,GAAU,IACvB,KACEA,EAAS,IAAMA,EAAS,IAC1B,OAENA,GAAU,KAAOA,GAAU,KAC3BA,GAAU,MAAQA,EAAS,KAErB,OAGA,OAEX,CCxJO,MAAMW,EAAW,CAEd,GACA,GACA,GAEA,GAER,YAAY3uC,EAAI,EAAGF,EAAI,EAAG0C,EAAI,EAAGzC,EAAI,EAAG,CACtC,KAAK,GAAKC,EACV,KAAK,GAAKF,EACV,KAAK,GAAK0C,EACV,KAAK,GAAKzC,CACZ,CAEA,OAAO,UACL6uC,EACAC,EACAC,EACAC,EACAC,EACAC,EACArvC,EACA,CAGI,IAAAtB,EAAKwwC,EAAKC,EAAa,CAAC,EACxB/wC,EAAK8wC,EAAKC,EAAa,CAAC,EACxBjuC,EAAKguC,EAAKC,EAAa,CAAC,EACxB9wC,EAAK6wC,EAAKC,EAAa,CAAC,EAEtB,MAAAhV,EAAKiV,EAAKC,EAAa,CAAC,EACxBjV,EAAKgV,EAAKC,EAAa,CAAC,EACxBC,EAAKF,EAAKC,EAAa,CAAC,EACxBE,EAAKH,EAAKC,EAAa,CAAC,EAE9B,GAAIrvC,IAAM,EAAG,CACPgvC,EAAAC,EAAY,CAAC,EAAIvwC,EACjBswC,EAAAC,EAAY,CAAC,EAAI7wC,EACjB4wC,EAAAC,EAAY,CAAC,EAAI/tC,EACjB8tC,EAAAC,EAAY,CAAC,EAAI5wC,EACrB,MACF,CAEA,GAAI2B,IAAM,EAAG,CACPgvC,EAAAC,EAAY,CAAC,EAAI9U,EACjB6U,EAAAC,EAAY,CAAC,EAAI7U,EACjB4U,EAAAC,EAAY,CAAC,EAAIK,EACjBN,EAAAC,EAAY,CAAC,EAAIM,EACrB,MACF,CAEA,GAAIlxC,IAAOkxC,GAAM7wC,IAAOy7B,GAAM/7B,IAAOg8B,GAAMl5B,IAAOouC,EAAI,CACpD,IAAIv9C,EAAI,EAAIiO,EACZ,MAAMwvC,EAAM9wC,EAAKy7B,EAAK/7B,EAAKg8B,EAAKl5B,EAAKouC,EAAKjxC,EAAKkxC,EACzCE,EAAMD,GAAO,EAAI,EAAI,GACrBE,EAAS,EAAIF,EAAMA,EAGrB,GAAAE,EAAS,OAAO,QAAS,CACrB,MAAAC,EAAM,KAAK,KAAKD,CAAM,EACtBjO,EAAM,KAAK,MAAMkO,EAAKH,EAAMC,CAAG,EAErC19C,EAAI,KAAK,IAAIA,EAAI0vC,CAAG,EAAIkO,EACxB3vC,EAAI,KAAK,IAAIA,EAAIyhC,CAAG,EAAIkO,CAC1B,CAEA,MAAMC,EAAO5vC,EAAIyvC,EAQb,GANC/wC,EAAAA,EAAK3M,EAAIooC,EAAKyV,EACdxxC,EAAAA,EAAKrM,EAAIqoC,EAAKwV,EACd1uC,EAAAA,EAAKnP,EAAIu9C,EAAKM,EACdvxC,EAAAA,EAAKtM,EAAIw9C,EAAKK,EAGf79C,IAAM,EAAIiO,EAAG,CACT,MAAAV,EAAI,EAAI,KAAK,KAAKZ,EAAKA,EAAKN,EAAKA,EAAK8C,EAAKA,EAAK7C,EAAKA,CAAE,EAEvDK,GAAAY,EACAlB,GAAAkB,EACA4B,GAAA5B,EACAjB,GAAAiB,CACR,CACF,CAEA0vC,EAAIC,CAAS,EAAIvwC,EACbswC,EAAAC,EAAY,CAAC,EAAI7wC,EACjB4wC,EAAAC,EAAY,CAAC,EAAI/tC,EACjB8tC,EAAAC,EAAY,CAAC,EAAI5wC,CACvB,CAEA,OAAO,wBACL2wC,EACAC,EACAC,EACAC,EACAC,EACAC,EACA,CACM,MAAA3wC,EAAKwwC,EAAKC,CAAU,EACpB/wC,EAAK8wC,EAAKC,EAAa,CAAC,EACxBjuC,EAAKguC,EAAKC,EAAa,CAAC,EACxB9wC,EAAK6wC,EAAKC,EAAa,CAAC,EAExBhV,EAAKiV,EAAKC,CAAU,EACpBjV,EAAKgV,EAAKC,EAAa,CAAC,EACxBC,EAAKF,EAAKC,EAAa,CAAC,EACxBE,EAAKH,EAAKC,EAAa,CAAC,EAE1B,OAAAL,EAAAC,CAAS,EAAIvwC,EAAK6wC,EAAKlxC,EAAK87B,EAAK/7B,EAAKkxC,EAAKpuC,EAAKk5B,EAChD4U,EAAAC,EAAY,CAAC,EAAI7wC,EAAKmxC,EAAKlxC,EAAK+7B,EAAKl5B,EAAKi5B,EAAKz7B,EAAK4wC,EACpDN,EAAAC,EAAY,CAAC,EAAI/tC,EAAKquC,EAAKlxC,EAAKixC,EAAK5wC,EAAK07B,EAAKh8B,EAAK+7B,EACpD6U,EAAAC,EAAY,CAAC,EAAI5wC,EAAKkxC,EAAK7wC,EAAKy7B,EAAK/7B,EAAKg8B,EAAKl5B,EAAKouC,EAEjDN,CACT,CAEA,IAAI,GAAI,CACN,OAAO,KAAK,EACd,CAEA,IAAI,EAAEn1B,EAAe,CACnB,KAAK,GAAKA,EACV,KAAK,kBAAkB,CACzB,CAEA,IAAI,GAAI,CACN,OAAO,KAAK,EACd,CAEA,IAAI,EAAEA,EAAe,CACnB,KAAK,GAAKA,EACV,KAAK,kBAAkB,CACzB,CAEA,IAAI,GAAI,CACN,OAAO,KAAK,EACd,CAEA,IAAI,EAAEA,EAAe,CACnB,KAAK,GAAKA,EACV,KAAK,kBAAkB,CACzB,CAEA,IAAI,GAAI,CACN,OAAO,KAAK,EACd,CAEA,IAAI,EAAEA,EAAe,CACnB,KAAK,GAAKA,EACV,KAAK,kBAAkB,CACzB,CAEA,IAAIzZ,EAAI,KAAK,GAAIF,EAAI,KAAK,GAAI0C,EAAI,KAAK,GAAIzC,EAAI,KAAK,GAAI,CACtD,YAAK,GAAKC,EACV,KAAK,GAAKF,EACV,KAAK,GAAK0C,EACV,KAAK,GAAKzC,EACV,KAAK,kBAAkB,EAChB,IACT,CAEA,OAAQ,CACC,OAAA,IAAI4uC,GAAW,KAAK,GAAI,KAAK,GAAI,KAAK,GAAI,KAAK,EAAE,CAC1D,CAEA,KAAKc,EAAwB,CAC3B,YAAK,GAAKA,EAAW,EACrB,KAAK,GAAKA,EAAW,EACrB,KAAK,GAAKA,EAAW,EACrB,KAAK,GAAKA,EAAW,EACrB,KAAK,kBAAkB,EAChB,IACT,CAEA,aAAaC,EAAc7S,EAAS,GAAM,CACxC,MAAM78B,EAAI0vC,EAAM,EACV5vC,EAAI4vC,EAAM,EACVltC,EAAIktC,EAAM,EACVC,EAAQD,EAAM,MAMdN,EAAM,KAAK,IACXG,EAAM,KAAK,IAEXK,EAAKR,EAAIpvC,EAAI,CAAC,EACd6vC,EAAKT,EAAItvC,EAAI,CAAC,EACdgwC,EAAKV,EAAI5sC,EAAI,CAAC,EAEdutC,EAAKR,EAAIvvC,EAAI,CAAC,EACdgwC,EAAKT,EAAIzvC,EAAI,CAAC,EACdmwC,EAAKV,EAAI/sC,EAAI,CAAC,EAEpB,OAAQmtC,EAAO,CACb,IAAK,MACH,KAAK,GAAKI,EAAKF,EAAKC,EAAKF,EAAKI,EAAKC,EACnC,KAAK,GAAKL,EAAKI,EAAKF,EAAKC,EAAKF,EAAKI,EACnC,KAAK,GAAKL,EAAKC,EAAKI,EAAKF,EAAKC,EAAKF,EACnC,KAAK,GAAKF,EAAKC,EAAKC,EAAKC,EAAKC,EAAKC,EACnC,MAEF,IAAK,MACH,KAAK,GAAKF,EAAKF,EAAKC,EAAKF,EAAKI,EAAKC,EACnC,KAAK,GAAKL,EAAKI,EAAKF,EAAKC,EAAKF,EAAKI,EACnC,KAAK,GAAKL,EAAKC,EAAKI,EAAKF,EAAKC,EAAKF,EACnC,KAAK,GAAKF,EAAKC,EAAKC,EAAKC,EAAKC,EAAKC,EACnC,MAEF,IAAK,MACH,KAAK,GAAKF,EAAKF,EAAKC,EAAKF,EAAKI,EAAKC,EACnC,KAAK,GAAKL,EAAKI,EAAKF,EAAKC,EAAKF,EAAKI,EACnC,KAAK,GAAKL,EAAKC,EAAKI,EAAKF,EAAKC,EAAKF,EACnC,KAAK,GAAKF,EAAKC,EAAKC,EAAKC,EAAKC,EAAKC,EACnC,MAEF,IAAK,MACH,KAAK,GAAKF,EAAKF,EAAKC,EAAKF,EAAKI,EAAKC,EACnC,KAAK,GAAKL,EAAKI,EAAKF,EAAKC,EAAKF,EAAKI,EACnC,KAAK,GAAKL,EAAKC,EAAKI,EAAKF,EAAKC,EAAKF,EACnC,KAAK,GAAKF,EAAKC,EAAKC,EAAKC,EAAKC,EAAKC,EACnC,MAEF,IAAK,MACH,KAAK,GAAKF,EAAKF,EAAKC,EAAKF,EAAKI,EAAKC,EACnC,KAAK,GAAKL,EAAKI,EAAKF,EAAKC,EAAKF,EAAKI,EACnC,KAAK,GAAKL,EAAKC,EAAKI,EAAKF,EAAKC,EAAKF,EACnC,KAAK,GAAKF,EAAKC,EAAKC,EAAKC,EAAKC,EAAKC,EACnC,MAEF,IAAK,MACH,KAAK,GAAKF,EAAKF,EAAKC,EAAKF,EAAKI,EAAKC,EACnC,KAAK,GAAKL,EAAKI,EAAKF,EAAKC,EAAKF,EAAKI,EACnC,KAAK,GAAKL,EAAKC,EAAKI,EAAKF,EAAKC,EAAKF,EACnC,KAAK,GAAKF,EAAKC,EAAKC,EAAKC,EAAKC,EAAKC,EACnC,MAEF,QACU,QAAA,KACN,6DAA+DN,CAAA,CAErE,CAEA,OAAI9S,IAAW,IAAM,KAAK,kBAAkB,EACrC,IACT,CAEA,iBAAiBqT,EAAe/B,EAAe,CAG7C,MAAMgC,EAAYhC,EAAQ,EACpBx8C,EAAI,KAAK,IAAIw+C,CAAS,EACvB,YAAA,GAAKD,EAAK,EAAIv+C,EACd,KAAA,GAAKu+C,EAAK,EAAIv+C,EACd,KAAA,GAAKu+C,EAAK,EAAIv+C,EACd,KAAA,GAAK,KAAK,IAAIw+C,CAAS,EAC5B,KAAK,kBAAkB,EAChB,IACT,CAEA,uBAAuB33C,EAAY,CAIjC,MAAMN,EAAKM,EAAE,MACP43C,EAAMl4C,EAAG,CAAC,EACVm4C,EAAMn4C,EAAG,CAAC,EACVo4C,EAAMp4C,EAAG,CAAC,EACVq4C,EAAMr4C,EAAG,CAAC,EACVs4C,EAAMt4C,EAAG,CAAC,EACVu4C,EAAMv4C,EAAG,CAAC,EACVw4C,EAAMx4C,EAAG,CAAC,EACVy4C,EAAMz4C,EAAG,CAAC,EACV04C,EAAM14C,EAAG,EAAE,EACX24C,EAAQT,EAAMI,EAAMI,EAE1B,GAAIC,EAAQ,EAAG,CACb,MAAMl/C,EAAI,GAAM,KAAK,KAAKk/C,EAAQ,CAAG,EAErC,KAAK,GAAK,IAAOl/C,EACZ,KAAA,IAAMg/C,EAAMF,GAAO9+C,EACnB,KAAA,IAAM2+C,EAAMI,GAAO/+C,EACnB,KAAA,IAAM4+C,EAAMF,GAAO1+C,CACf,SAAAy+C,EAAMI,GAAOJ,EAAMQ,EAAK,CACjC,MAAMj/C,EAAI,EAAM,KAAK,KAAK,EAAMy+C,EAAMI,EAAMI,CAAG,EAE1C,KAAA,IAAMD,EAAMF,GAAO9+C,EACxB,KAAK,GAAK,IAAOA,EACZ,KAAA,IAAM0+C,EAAME,GAAO5+C,EACnB,KAAA,IAAM2+C,EAAMI,GAAO/+C,CAAA,SACf6+C,EAAMI,EAAK,CACpB,MAAMj/C,EAAI,EAAM,KAAK,KAAK,EAAM6+C,EAAMJ,EAAMQ,CAAG,EAE1C,KAAA,IAAMN,EAAMI,GAAO/+C,EACnB,KAAA,IAAM0+C,EAAME,GAAO5+C,EACxB,KAAK,GAAK,IAAOA,EACZ,KAAA,IAAM8+C,EAAME,GAAOh/C,CAAA,KACnB,CACL,MAAMA,EAAI,EAAM,KAAK,KAAK,EAAMi/C,EAAMR,EAAMI,CAAG,EAE1C,KAAA,IAAMD,EAAMF,GAAO1+C,EACnB,KAAA,IAAM2+C,EAAMI,GAAO/+C,EACnB,KAAA,IAAM8+C,EAAME,GAAOh/C,EACxB,KAAK,GAAK,IAAOA,CACnB,CAEA,YAAK,kBAAkB,EAChB,IACT,CAEA,mBAAmBm/C,EAAgBC,EAAc,CAG/C,IAAI3gD,EAAI0gD,EAAM,IAAIC,CAAG,EAAI,EAErB,OAAA3gD,EAAI,OAAO,SAGTA,EAAA,EAEA,KAAK,IAAI0gD,EAAM,CAAC,EAAI,KAAK,IAAIA,EAAM,CAAC,GACjC,KAAA,GAAK,CAACA,EAAM,EACjB,KAAK,GAAKA,EAAM,EAChB,KAAK,GAAK,EACV,KAAK,GAAK1gD,IAEV,KAAK,GAAK,EACL,KAAA,GAAK,CAAC0gD,EAAM,EACjB,KAAK,GAAKA,EAAM,EAChB,KAAK,GAAK1gD,KAKZ,KAAK,GAAK0gD,EAAM,EAAIC,EAAI,EAAID,EAAM,EAAIC,EAAI,EAC1C,KAAK,GAAKD,EAAM,EAAIC,EAAI,EAAID,EAAM,EAAIC,EAAI,EAC1C,KAAK,GAAKD,EAAM,EAAIC,EAAI,EAAID,EAAM,EAAIC,EAAI,EAC1C,KAAK,GAAK3gD,GAGL,KAAK,WACd,CAEA,QAAQ0V,EAAe,CACrB,MAAO,GAAI,KAAK,KAAK,KAAK,IAAIqC,EAAM,KAAK,IAAIrC,CAAC,EAAG,GAAI,CAAC,CAAC,CAAC,CAC1D,CAEA,cAAcA,EAAewY,EAAc,CACnC,MAAA6vB,EAAQ,KAAK,QAAQroC,CAAC,EAC5B,GAAIqoC,IAAU,EAAU,OAAA,KACxB,MAAMvuC,EAAI,KAAK,IAAI,EAAG0e,EAAO6vB,CAAK,EAC7B,YAAA,MAAMroC,EAAGlG,CAAC,EACR,IACT,CAEA,UAAW,CACT,OAAO,KAAK,IAAI,EAAG,EAAG,EAAG,CAAC,CAC5B,CAEA,QAAS,CAEP,OAAO,KAAK,WACd,CAEA,WAAY,CACV,YAAK,IAAM,GACX,KAAK,IAAM,GACX,KAAK,IAAM,GACX,KAAK,kBAAkB,EAChB,IACT,CAEA,IAAIkW,EAAe,CACjB,OAAO,KAAK,GAAKA,EAAE,GAAK,KAAK,GAAKA,EAAE,GAAK,KAAK,GAAKA,EAAE,GAAK,KAAK,GAAKA,EAAE,EACxE,CAEA,UAAW,CACT,OACE,KAAK,GAAK,KAAK,GACf,KAAK,GAAK,KAAK,GACf,KAAK,GAAK,KAAK,GACf,KAAK,GAAK,KAAK,EAEnB,CAEA,QAAS,CACP,OAAO,KAAK,KACV,KAAK,GAAK,KAAK,GACb,KAAK,GAAK,KAAK,GACf,KAAK,GAAK,KAAK,GACf,KAAK,GAAK,KAAK,EAAA,CAErB,CAEA,WAAY,CACN,IAAAvgB,EAAI,KAAK,SACb,OAAIA,IAAM,GACR,KAAK,GAAK,EACV,KAAK,GAAK,EACV,KAAK,GAAK,EACV,KAAK,GAAK,IAEVA,EAAI,EAAIA,EACH,KAAA,GAAK,KAAK,GAAKA,EACf,KAAA,GAAK,KAAK,GAAKA,EACf,KAAA,GAAK,KAAK,GAAKA,EACf,KAAA,GAAK,KAAK,GAAKA,GAEtB,KAAK,kBAAkB,EAChB,IACT,CAEA,SAASuQ,EAAe,CACf,OAAA,KAAK,oBAAoB,KAAMA,CAAC,CACzC,CAEA,YAAYA,EAAe,CAClB,OAAA,KAAK,oBAAoBA,EAAG,IAAI,CACzC,CAEA,oBAAoBpL,EAAeyE,EAAe,CAGhD,MAAM6xC,EAAMt2C,EAAE,GACRu2C,EAAMv2C,EAAE,GACRw2C,EAAMx2C,EAAE,GACRy2C,EAAMz2C,EAAE,GACR02C,EAAMjyC,EAAE,GACRkyC,EAAMlyC,EAAE,GACRmyC,EAAMnyC,EAAE,GACRoyC,EAAMpyC,EAAE,GAEd,YAAK,GAAK6xC,EAAMO,EAAMJ,EAAMC,EAAMH,EAAMK,EAAMJ,EAAMG,EACpD,KAAK,GAAKJ,EAAMM,EAAMJ,EAAME,EAAMH,EAAME,EAAMJ,EAAMM,EACpD,KAAK,GAAKJ,EAAMK,EAAMJ,EAAMG,EAAMN,EAAMK,EAAMJ,EAAMG,EACpD,KAAK,GAAKD,EAAMI,EAAMP,EAAMI,EAAMH,EAAMI,EAAMH,EAAMI,EAEpD,KAAK,kBAAkB,EAEhB,IACT,CAGA,MAAME,EAAgB5xC,EAAW,CAC/B,GAAIA,IAAM,EAAU,OAAA,KACpB,GAAIA,IAAM,EAAU,OAAA,KAAK,KAAK4xC,CAAE,EAEhC,MAAMxxC,EAAI,KAAK,GACTF,EAAI,KAAK,GACT0C,EAAI,KAAK,GACTzC,EAAI,KAAK,GAIX,IAAA0xC,EAAe1xC,EAAIyxC,EAAG,GAAKxxC,EAAIwxC,EAAG,GAAK1xC,EAAI0xC,EAAG,GAAKhvC,EAAIgvC,EAAG,GAa9D,GAXIC,EAAe,GACZ,KAAA,GAAK,CAACD,EAAG,GACT,KAAA,GAAK,CAACA,EAAG,GACT,KAAA,GAAK,CAACA,EAAG,GACT,KAAA,GAAK,CAACA,EAAG,GAEdC,EAAe,CAACA,GAEhB,KAAK,KAAKD,CAAE,EAGVC,GAAgB,EAClB,YAAK,GAAK1xC,EACV,KAAK,GAAKC,EACV,KAAK,GAAKF,EACV,KAAK,GAAK0C,EAEH,KAGH,MAAAkvC,EAAkB,EAAMD,EAAeA,EAEzC,GAAAC,GAAmB,OAAO,QAAS,CACrC,MAAM//C,EAAI,EAAIiO,EACd,YAAK,GAAKjO,EAAIoO,EAAIH,EAAI,KAAK,GAC3B,KAAK,GAAKjO,EAAIqO,EAAIJ,EAAI,KAAK,GAC3B,KAAK,GAAKjO,EAAImO,EAAIF,EAAI,KAAK,GAC3B,KAAK,GAAKjO,EAAI6Q,EAAI5C,EAAI,KAAK,GAE3B,KAAK,UAAU,EAER,IACT,CAEM,MAAA+xC,EAAe,KAAK,KAAKD,CAAe,EACxCE,EAAY,KAAK,MAAMD,EAAcF,CAAY,EACjDI,EAAS,KAAK,KAAK,EAAIjyC,GAAKgyC,CAAS,EAAID,EACzCG,EAAS,KAAK,IAAIlyC,EAAIgyC,CAAS,EAAID,EAEzC,YAAK,GAAK5xC,EAAI8xC,EAAS,KAAK,GAAKC,EACjC,KAAK,GAAK9xC,EAAI6xC,EAAS,KAAK,GAAKC,EACjC,KAAK,GAAKhyC,EAAI+xC,EAAS,KAAK,GAAKC,EACjC,KAAK,GAAKtvC,EAAIqvC,EAAS,KAAK,GAAKC,EAEjC,KAAK,kBAAkB,EAEhB,IACT,CAEA,iBAAiBC,EAAgBP,EAAgB5xC,EAAW,CAC1D,OAAO,KAAK,KAAKmyC,CAAE,EAAE,MAAMP,EAAI5xC,CAAC,CAClC,CAEA,QAAS,CAOP,MAAMoyC,EAAS,EAAI,KAAK,GAAK,KAAK,SAC5BC,EAAS,EAAI,KAAK,GAAK,KAAK,SAE5B3zC,EAAK,KAAK,SACV4zC,EAAK,KAAK,KAAK,EAAI5zC,CAAE,EACrB6zC,EAAK,KAAK,KAAK7zC,CAAE,EAEvB,OAAO,KAAK,IACV4zC,EAAK,KAAK,IAAIF,CAAM,EACpBE,EAAK,KAAK,IAAIF,CAAM,EACpBG,EAAK,KAAK,IAAIF,CAAM,EACpBE,EAAK,KAAK,IAAIF,CAAM,CAAA,CAExB,CAEA,OAAOxC,EAAwB,CAC7B,OACEA,EAAW,KAAO,KAAK,IACvBA,EAAW,KAAO,KAAK,IACvBA,EAAW,KAAO,KAAK,IACvBA,EAAW,KAAO,KAAK,EAE3B,CAEA,UAAU3mB,EAAiB3T,EAAS,EAAG,CAChC,YAAA,GAAK2T,EAAM3T,CAAM,EACjB,KAAA,GAAK2T,EAAM3T,EAAS,CAAC,EACrB,KAAA,GAAK2T,EAAM3T,EAAS,CAAC,EACrB,KAAA,GAAK2T,EAAM3T,EAAS,CAAC,EAC1B,KAAK,kBAAkB,EAChB,IACT,CAEA,QAAQ2T,EAAkB,GAAI3T,EAAS,EAAG,CAClC,OAAA2T,EAAA3T,CAAM,EAAI,KAAK,GACf2T,EAAA3T,EAAS,CAAC,EAAI,KAAK,GACnB2T,EAAA3T,EAAS,CAAC,EAAI,KAAK,GACnB2T,EAAA3T,EAAS,CAAC,EAAI,KAAK,GAClB2T,CACT,CAEA,oBAAoBspB,EAA4B5jC,EAAe,CACxD,YAAA,GAAK4jC,EAAU,KAAK5jC,CAAK,EACzB,KAAA,GAAK4jC,EAAU,KAAK5jC,CAAK,EACzB,KAAA,GAAK4jC,EAAU,KAAK5jC,CAAK,EACzB,KAAA,GAAK4jC,EAAU,KAAK5jC,CAAK,EAC9B,KAAK,kBAAkB,EAChB,IACT,CAEA,QAAS,CACP,OAAO,KAAK,SACd,CAEA,SAASwE,EAAsB,CAC7B,YAAK,kBAAoBA,EAClB,IACT,CAEA,mBAAoB,CAAC,CAErB,EAAE,OAAO,QAAQ,GAAI,CACnB,MAAM,KAAK,GACX,MAAM,KAAK,GACX,MAAM,KAAK,GACX,MAAM,KAAK,EACb,CACF,CC7kBO,MAAMq/B,EAAQ,CACnB,EAAI,EACJ,EAAI,EAEJ,YAAYryC,EAAI,EAAGF,EAAI,EAAG,CACxB,KAAK,EAAIE,EACT,KAAK,EAAIF,CACX,CAEA,IAAI,OAAQ,CACV,OAAO,KAAK,CACd,CAEA,IAAI,MAAM2Z,EAAe,CACvB,KAAK,EAAIA,CACX,CAEA,IAAI,QAAS,CACX,OAAO,KAAK,CACd,CAEA,IAAI,OAAOA,EAAe,CACxB,KAAK,EAAIA,CACX,CAEA,IAAIzZ,EAAI,EAAGF,EAAI,EAAG,CAChB,YAAK,EAAIE,EACT,KAAK,EAAIF,EACF,IACT,CAEA,UAAUwyC,EAAgB,CACxB,YAAK,EAAIA,EACT,KAAK,EAAIA,EACF,IACT,CAEA,KAAKtyC,EAAW,CACd,YAAK,EAAIA,EACF,IACT,CAEA,KAAKF,EAAW,CACd,YAAK,EAAIA,EACF,IACT,CAEA,aAAa0O,EAAeiL,EAAe,CACzC,OAAQjL,EAAO,CACb,IAAK,GACH,KAAK,EAAIiL,EACT,MACF,IAAK,GACH,KAAK,EAAIA,EACT,MACF,QACQ,MAAA,IAAI,MAAM,0BAA4BjL,CAAK,CACrD,CACO,OAAA,IACT,CAEA,aAAaA,EAAe,CAC1B,OAAQA,EAAO,CACb,IAAK,GACH,OAAO,KAAK,EACd,IAAK,GACH,OAAO,KAAK,EACd,QACQ,MAAA,IAAI,MAAM,0BAA4BA,CAAK,CACrD,CACF,CAEA,KAAKsH,EAAY,CACf,YAAK,EAAIA,EAAE,EACX,KAAK,EAAIA,EAAE,EACJ,IACT,CAEA,OAAQ,CACN,OAAO,IAAIu8B,GAAQ,KAAK,EAAG,KAAK,CAAC,CACnC,CAKA,IAAIv8B,EAAY,CACd,YAAK,GAAKA,EAAE,EACZ,KAAK,GAAKA,EAAE,EACL,IACT,CAEA,UAAUnkB,EAAW,CACnB,YAAK,GAAKA,EACV,KAAK,GAAKA,EACH,IACT,CAEA,WAAW+I,EAAYyE,EAAY,CAC5B,YAAA,EAAIzE,EAAE,EAAIyE,EAAE,EACZ,KAAA,EAAIzE,EAAE,EAAIyE,EAAE,EACV,IACT,CAEA,gBAAgB2W,EAAYnkB,EAAW,CAChC,YAAA,GAAKmkB,EAAE,EAAInkB,EACX,KAAA,GAAKmkB,EAAE,EAAInkB,EACT,IACT,CAGA,IAAImkB,EAAY,CACd,YAAK,GAAKA,EAAE,EACZ,KAAK,GAAKA,EAAE,EACL,IACT,CAEA,UAAUnkB,EAAW,CACnB,YAAK,GAAKA,EACV,KAAK,GAAKA,EACH,IACT,CAEA,WAAW+I,EAAYyE,EAAY,CAC5B,YAAA,EAAIzE,EAAE,EAAIyE,EAAE,EACZ,KAAA,EAAIzE,EAAE,EAAIyE,EAAE,EACV,IACT,CAMA,SAAS2W,EAAY,CACnB,YAAK,GAAKA,EAAE,EACZ,KAAK,GAAKA,EAAE,EACL,IACT,CAEA,eAAew8B,EAAgB,CAC7B,YAAK,GAAKA,EACV,KAAK,GAAKA,EACH,IACT,CAEA,OAAOx8B,EAAY,CACjB,YAAK,GAAKA,EAAE,EACZ,KAAK,GAAKA,EAAE,EACL,IACT,CAEA,aAAaw8B,EAAgB,CACpB,OAAA,KAAK,eAAe,EAAIA,CAAM,CACvC,CAEA,aAAa95C,EAAY,CACvB,MAAMwH,EAAI,KAAK,EACTF,EAAI,KAAK,EACf,YAAK,EAAItH,EAAE,IAAMwH,EAAIxH,EAAE,IAAMsH,EAAItH,EAAE,IACnC,KAAK,EAAIA,EAAE,IAAMwH,EAAIxH,EAAE,IAAMsH,EAAItH,EAAE,IAC5B,IACT,CAEA,IAAIsd,EAAY,CACd,YAAK,EAAI,KAAK,IAAI,KAAK,EAAGA,EAAE,CAAC,EAC7B,KAAK,EAAI,KAAK,IAAI,KAAK,EAAGA,EAAE,CAAC,EACtB,IACT,CAEA,IAAIA,EAAY,CACd,YAAK,EAAI,KAAK,IAAI,KAAK,EAAGA,EAAE,CAAC,EAC7B,KAAK,EAAI,KAAK,IAAI,KAAK,EAAGA,EAAE,CAAC,EACtB,IACT,CAEA,MAAM+3B,EAAcnM,EAAc,CAChC,YAAK,EAAIv5B,EAAM,KAAK,EAAG0lC,EAAI,EAAGnM,EAAI,CAAC,EACnC,KAAK,EAAIv5B,EAAM,KAAK,EAAG0lC,EAAI,EAAGnM,EAAI,CAAC,EAC5B,IACT,CAEA,YAAY6Q,EAAgBC,EAAgB,CAC1C,YAAK,EAAIrqC,EAAM,KAAK,EAAGoqC,EAAQC,CAAM,EACrC,KAAK,EAAIrqC,EAAM,KAAK,EAAGoqC,EAAQC,CAAM,EAC9B,IACT,CAEA,YAAY3E,EAAanM,EAAa,CAC9B,MAAA/5B,EAAS,KAAK,SACpB,OAAO,KAAK,aAAaA,GAAU,CAAC,EAAE,eACpCQ,EAAMR,EAAQkmC,EAAKnM,CAAG,CAAA,CAE1B,CAEA,OAAQ,CACN,YAAK,EAAI,KAAK,MAAM,KAAK,CAAC,EAC1B,KAAK,EAAI,KAAK,MAAM,KAAK,CAAC,EACnB,IACT,CAEA,MAAO,CACL,YAAK,EAAI,KAAK,KAAK,KAAK,CAAC,EACzB,KAAK,EAAI,KAAK,KAAK,KAAK,CAAC,EAClB,IACT,CAEA,OAAQ,CACN,YAAK,EAAI,KAAK,MAAM,KAAK,CAAC,EAC1B,KAAK,EAAI,KAAK,MAAM,KAAK,CAAC,EACnB,IACT,CAEA,aAAc,CACZ,YAAK,EAAI,KAAK,MAAM,KAAK,CAAC,EAC1B,KAAK,EAAI,KAAK,MAAM,KAAK,CAAC,EACnB,IACT,CAEA,QAAS,CACF,YAAA,EAAI,CAAC,KAAK,EACV,KAAA,EAAI,CAAC,KAAK,EACR,IACT,CAYA,IAAI5rB,EAAY,CACd,OAAO,KAAK,EAAIA,EAAE,EAAI,KAAK,EAAIA,EAAE,CACnC,CAyBA,MAAMA,EAAY,CAChB,OAAO,KAAK,EAAIA,EAAE,EAAI,KAAK,EAAIA,EAAE,CACnC,CAGA,gBAAgBA,EAAY,CACpB,MAAA28B,EAAc38B,EAAE,WACtB,GAAI28B,IAAgB,EACX,OAAA,KAAK,IAAI,EAAG,CAAC,EAEtB,MAAMH,EAASx8B,EAAE,IAAI,IAAI,EAAI28B,EAC7B,OAAO,KAAK,KAAK38B,CAAC,EAAE,eAAew8B,CAAM,CAC3C,CAGA,gBAAgBx8B,EAAY,CAC1B48B,OAAAA,GAAI,KAAK,IAAI,EAAE,gBAAgB58B,CAAC,EACzB,KAAK,IAAI48B,EAAG,CACrB,CAMA,QAAS,CACA,OAAA,KAAK,KAAK,KAAK,EAAI,KAAK,EAAI,KAAK,EAAI,KAAK,CAAC,CACpD,CAEA,UAAW,CACT,OAAO,KAAK,EAAI,KAAK,EAAI,KAAK,EAAI,KAAK,CACzC,CAEA,iBAAkB,CACT,OAAA,KAAK,IAAI,KAAK,CAAC,EAAI,KAAK,IAAI,KAAK,CAAC,CAC3C,CAGA,WAAY,CACV,OAAO,KAAK,aAAa,KAAK,UAAY,CAAC,CAC7C,CAGA,OAAQ,CACC,OAAA,KAAK,MAAM,CAAC,KAAK,EAAG,CAAC,KAAK,CAAC,EAAI,KAAK,EAC7C,CAEA,QAAQ58B,EAAY,CACZ,MAAA28B,EAAc,KAAK,KAAK,KAAK,WAAa38B,EAAE,UAAU,EAC5D,GAAI28B,IAAgB,EAClB,OAAO,KAAK,GAAK,EAEnB,MAAME,EAAQ,KAAK,IAAI78B,CAAC,EAAI28B,EAE5B,OAAO,KAAK,KAAKtqC,EAAMwqC,EAAO,GAAI,CAAC,CAAC,CACtC,CAEA,WAAW78B,EAAY,CACrB,OAAO,KAAK,KAAK,KAAK,kBAAkBA,CAAC,CAAC,CAC5C,CAEA,kBAAkBA,EAAY,CACtB,MAAA8C,EAAK,KAAK,EAAI9C,EAAE,EAChB+C,EAAK,KAAK,EAAI/C,EAAE,EACf,OAAA8C,EAAKA,EAAKC,EAAKA,CACxB,CAEA,oBAAoB/C,EAAY,CAC9B,OAAO,KAAK,IAAI,KAAK,EAAIA,EAAE,CAAC,EAAI,KAAK,IAAI,KAAK,EAAIA,EAAE,CAAC,CACvD,CAEA,UAAUnO,EAAgB,CACxB,OAAO,KAAK,UAAA,EAAY,eAAeA,CAAM,CAC/C,CAEA,KAAKmO,EAAY88B,EAAe,CAC9B,YAAK,IAAM98B,EAAE,EAAI,KAAK,GAAK88B,EAC3B,KAAK,IAAM98B,EAAE,EAAI,KAAK,GAAK88B,EACpB,IACT,CAEA,YAAYpY,EAAatjC,EAAa07C,EAAe,CACnD,YAAK,EAAIpY,EAAG,GAAKtjC,EAAG,EAAIsjC,EAAG,GAAKoY,EAChC,KAAK,EAAIpY,EAAG,GAAKtjC,EAAG,EAAIsjC,EAAG,GAAKoY,EACzB,IACT,CAEA,OAAO98B,EAAY,CACjB,OAAOA,EAAE,IAAM,KAAK,GAAKA,EAAE,IAAM,KAAK,CACxC,CAEA,UAAUgT,EAAiB3T,EAAS,EAAG,CAChC,YAAA,EAAI2T,EAAM3T,CAAM,EAChB,KAAA,EAAI2T,EAAM3T,EAAS,CAAC,EAClB,IACT,CAEA,QAAQ2T,EAAkB,GAAI3T,EAAS,EAAG,CAClC,OAAA2T,EAAA3T,CAAM,EAAI,KAAK,EACf2T,EAAA3T,EAAS,CAAC,EAAI,KAAK,EAClB2T,CACT,CAEA,oBAAoBspB,EAA4B5jC,EAAe,CACxD,YAAA,EAAI4jC,EAAU,KAAK5jC,CAAK,EACxB,KAAA,EAAI4jC,EAAU,KAAK5jC,CAAK,EACtB,IACT,CAEA,aAAagG,EAAiB25B,EAAe,CACrC,MAAAj5C,EAAI,KAAK,IAAIi5C,CAAK,EAClBx8C,EAAI,KAAK,IAAIw8C,CAAK,EAClBnuC,EAAI,KAAK,EAAIwU,EAAO,EACpB1U,EAAI,KAAK,EAAI0U,EAAO,EAC1B,YAAK,EAAIxU,EAAI9K,EAAI4K,EAAInO,EAAI6iB,EAAO,EAChC,KAAK,EAAIxU,EAAIrO,EAAImO,EAAI5K,EAAIsf,EAAO,EACzB,IACT,CAEA,QAAS,CACF,YAAA,EAAI,KAAK,SACT,KAAA,EAAI,KAAK,SACP,IACT,CAEA,EAAE,OAAO,QAAQ,GAAI,CACnB,MAAM,KAAK,EACX,MAAM,KAAK,CACb,CACF,CAEO,MAAMq+B,EAAQ,CACnB,EAAI,EACJ,EAAI,EACJ,EAAI,EAEJ,YAAY7yC,EAAI,EAAGF,EAAI,EAAG0C,EAAI,EAAG,CAC/B,KAAK,EAAIxC,EACT,KAAK,EAAIF,EACT,KAAK,EAAI0C,CACX,CAEA,IAAIxC,EAAI,EAAGF,EAAI,EAAG0C,EAAI,EAAG,CACvB,YAAK,EAAIxC,EACT,KAAK,EAAIF,EACT,KAAK,EAAI0C,EACF,IACT,CAEA,UAAU8vC,EAAgB,CACxB,YAAK,EAAIA,EACT,KAAK,EAAIA,EACT,KAAK,EAAIA,EACF,IACT,CAEA,KAAKtyC,EAAW,CACd,YAAK,EAAIA,EACF,IACT,CAEA,KAAKF,EAAW,CACd,YAAK,EAAIA,EACF,IACT,CAEA,KAAK0C,EAAW,CACd,YAAK,EAAIA,EACF,IACT,CAEA,aAAagM,EAAeiL,EAAe,CACzC,OAAQjL,EAAO,CACb,IAAK,GACH,KAAK,EAAIiL,EACT,MACF,IAAK,GACH,KAAK,EAAIA,EACT,MACF,IAAK,GACH,KAAK,EAAIA,EACT,MACF,QACQ,MAAA,IAAI,MAAM,0BAA4BjL,CAAK,CACrD,CACO,OAAA,IACT,CAEA,aAAaA,EAAe,CAC1B,OAAQA,EAAO,CACb,IAAK,GACH,OAAO,KAAK,EACd,IAAK,GACH,OAAO,KAAK,EACd,IAAK,GACH,OAAO,KAAK,EACd,QACQ,MAAA,IAAI,MAAM,0BAA4BA,CAAK,CACrD,CACF,CAEA,OAAQ,CACN,OAAO,IAAIqkC,GAAQ,KAAK,EAAG,KAAK,EAAG,KAAK,CAAC,CAC3C,CAEA,KAAK/8B,EAAY,CACf,YAAK,EAAIA,EAAE,EACX,KAAK,EAAIA,EAAE,EACX,KAAK,EAAIA,EAAE,EACJ,IACT,CAEA,IAAIA,EAAY,CACd,YAAK,GAAKA,EAAE,EACZ,KAAK,GAAKA,EAAE,EACZ,KAAK,GAAKA,EAAE,EACL,IACT,CAEA,UAAUnkB,EAAW,CACnB,YAAK,GAAKA,EACV,KAAK,GAAKA,EACV,KAAK,GAAKA,EACH,IACT,CAEA,WAAW+I,EAAYyE,EAAY,CAC5B,YAAA,EAAIzE,EAAE,EAAIyE,EAAE,EACZ,KAAA,EAAIzE,EAAE,EAAIyE,EAAE,EACZ,KAAA,EAAIzE,EAAE,EAAIyE,EAAE,EACV,IACT,CAEA,gBAAgB2W,EAAYnkB,EAAW,CAChC,YAAA,GAAKmkB,EAAE,EAAInkB,EACX,KAAA,GAAKmkB,EAAE,EAAInkB,EACX,KAAA,GAAKmkB,EAAE,EAAInkB,EACT,IACT,CAEA,IAAImkB,EAAY,CACd,YAAK,GAAKA,EAAE,EACZ,KAAK,GAAKA,EAAE,EACZ,KAAK,GAAKA,EAAE,EACL,IACT,CAEA,UAAUnkB,EAAW,CACnB,YAAK,GAAKA,EACV,KAAK,GAAKA,EACV,KAAK,GAAKA,EACH,IACT,CAEA,WAAW+I,EAAYyE,EAAY,CAC5B,YAAA,EAAIzE,EAAE,EAAIyE,EAAE,EACZ,KAAA,EAAIzE,EAAE,EAAIyE,EAAE,EACZ,KAAA,EAAIzE,EAAE,EAAIyE,EAAE,EACV,IACT,CAEA,SAAS2W,EAAY,CACnB,YAAK,GAAKA,EAAE,EACZ,KAAK,GAAKA,EAAE,EACZ,KAAK,GAAKA,EAAE,EACL,IACT,CAEA,eAAew8B,EAAgB,CAC7B,YAAK,GAAKA,EACV,KAAK,GAAKA,EACV,KAAK,GAAKA,EACH,IACT,CAEA,gBAAgB53C,EAAYyE,EAAY,CACjC,YAAA,EAAIzE,EAAE,EAAIyE,EAAE,EACZ,KAAA,EAAIzE,EAAE,EAAIyE,EAAE,EACZ,KAAA,EAAIzE,EAAE,EAAIyE,EAAE,EACV,IACT,CAEA,WAAWuwC,EAAc,CACvB,OAAO,KAAK,gBAAgBoD,GAAY,aAAapD,CAAK,CAAC,CAC7D,CAEA,eAAeQ,EAAe/B,EAAe,CAC3C,OAAO,KAAK,gBAAgB2E,GAAY,iBAAiB5C,EAAM/B,CAAK,CAAC,CACvE,CAEA,aAAa31C,EAAY,CACvB,MAAMwH,EAAI,KAAK,EACTF,EAAI,KAAK,EACT0C,EAAI,KAAK,EACTtS,EAAIsI,EAAE,MACP,YAAA,EAAItI,EAAE,CAAC,EAAI8P,EAAI9P,EAAE,CAAC,EAAI4P,EAAI5P,EAAE,CAAC,EAAIsS,EACjC,KAAA,EAAItS,EAAE,CAAC,EAAI8P,EAAI9P,EAAE,CAAC,EAAI4P,EAAI5P,EAAE,CAAC,EAAIsS,EACjC,KAAA,EAAItS,EAAE,CAAC,EAAI8P,EAAI9P,EAAE,CAAC,EAAI4P,EAAI5P,EAAE,CAAC,EAAIsS,EAC/B,IACT,CAEA,kBAAkBhK,EAAY,CAC5B,OAAO,KAAK,aAAaA,CAAC,EAAE,UAAU,CACxC,CAEA,aAAaA,EAAY,CACvB,MAAMwH,EAAI,KAAK,EACTF,EAAI,KAAK,EACT0C,EAAI,KAAK,EACTtS,EAAIsI,EAAE,MACNuH,EAAI,GAAK7P,EAAE,CAAC,EAAI8P,EAAI9P,EAAE,CAAC,EAAI4P,EAAI5P,EAAE,EAAE,EAAIsS,EAAItS,EAAE,EAAE,GACrD,YAAK,GAAKA,EAAE,CAAC,EAAI8P,EAAI9P,EAAE,CAAC,EAAI4P,EAAI5P,EAAE,CAAC,EAAIsS,EAAItS,EAAE,EAAE,GAAK6P,EACpD,KAAK,GAAK7P,EAAE,CAAC,EAAI8P,EAAI9P,EAAE,CAAC,EAAI4P,EAAI5P,EAAE,CAAC,EAAIsS,EAAItS,EAAE,EAAE,GAAK6P,EACpD,KAAK,GAAK7P,EAAE,CAAC,EAAI8P,EAAI9P,EAAE,CAAC,EAAI4P,EAAI5P,EAAE,EAAE,EAAIsS,EAAItS,EAAE,EAAE,GAAK6P,EAC9C,IACT,CAEA,gBAAgB+F,EAAe,CAE7B,MAAMitC,EAAK,KAAK,EACVC,EAAK,KAAK,EACVC,EAAK,KAAK,EACVC,EAAKptC,EAAE,EACPqtC,EAAKrtC,EAAE,EACPstC,EAAKttC,EAAE,EACPutC,EAAKvtC,EAAE,EAEPwtC,EAAK,GAAKH,EAAKF,EAAKG,EAAKJ,GACzBO,EAAK,GAAKH,EAAKL,EAAKG,EAAKD,GACzBO,EAAK,GAAKN,EAAKF,EAAKG,EAAKJ,GAE/B,YAAK,EAAIA,EAAKM,EAAKC,EAAKH,EAAKK,EAAKJ,EAAKG,EACvC,KAAK,EAAIP,EAAKK,EAAKE,EAAKH,EAAKE,EAAKJ,EAAKM,EACvC,KAAK,EAAIP,EAAKI,EAAKG,EAAKN,EAAKK,EAAKJ,EAAKG,EAChC,IACT,CAcA,mBAAmB96C,EAAY,CAG7B,MAAMwH,EAAI,KAAK,EACTF,EAAI,KAAK,EACT0C,EAAI,KAAK,EACTtS,EAAIsI,EAAE,MACP,YAAA,EAAItI,EAAE,CAAC,EAAI8P,EAAI9P,EAAE,CAAC,EAAI4P,EAAI5P,EAAE,CAAC,EAAIsS,EACjC,KAAA,EAAItS,EAAE,CAAC,EAAI8P,EAAI9P,EAAE,CAAC,EAAI4P,EAAI5P,EAAE,CAAC,EAAIsS,EACjC,KAAA,EAAItS,EAAE,CAAC,EAAI8P,EAAI9P,EAAE,CAAC,EAAI4P,EAAI5P,EAAE,EAAE,EAAIsS,EAChC,KAAK,WACd,CAEA,OAAOsT,EAAY,CACjB,YAAK,GAAKA,EAAE,EACZ,KAAK,GAAKA,EAAE,EACZ,KAAK,GAAKA,EAAE,EACL,IACT,CAEA,aAAaw8B,EAAgB,CACpB,OAAA,KAAK,eAAe,EAAIA,CAAM,CACvC,CAEA,IAAIx8B,EAAY,CACd,YAAK,EAAI,KAAK,IAAI,KAAK,EAAGA,EAAE,CAAC,EAC7B,KAAK,EAAI,KAAK,IAAI,KAAK,EAAGA,EAAE,CAAC,EAC7B,KAAK,EAAI,KAAK,IAAI,KAAK,EAAGA,EAAE,CAAC,EACtB,IACT,CAEA,IAAIA,EAAY,CACd,YAAK,EAAI,KAAK,IAAI,KAAK,EAAGA,EAAE,CAAC,EAC7B,KAAK,EAAI,KAAK,IAAI,KAAK,EAAGA,EAAE,CAAC,EAC7B,KAAK,EAAI,KAAK,IAAI,KAAK,EAAGA,EAAE,CAAC,EACtB,IACT,CAEA,MAAM+3B,EAAcnM,EAAc,CAEhC,YAAK,EAAIv5B,EAAM,KAAK,EAAG0lC,EAAI,EAAGnM,EAAI,CAAC,EACnC,KAAK,EAAIv5B,EAAM,KAAK,EAAG0lC,EAAI,EAAGnM,EAAI,CAAC,EACnC,KAAK,EAAIv5B,EAAM,KAAK,EAAG0lC,EAAI,EAAGnM,EAAI,CAAC,EAC5B,IACT,CAEA,YAAY6Q,EAAgBC,EAAgB,CAC1C,YAAK,EAAIrqC,EAAM,KAAK,EAAGoqC,EAAQC,CAAM,EACrC,KAAK,EAAIrqC,EAAM,KAAK,EAAGoqC,EAAQC,CAAM,EACrC,KAAK,EAAIrqC,EAAM,KAAK,EAAGoqC,EAAQC,CAAM,EAC9B,IACT,CAEA,YAAY3E,EAAanM,EAAa,CAC9B,MAAA/5B,EAAS,KAAK,SACpB,OAAO,KAAK,aAAaA,GAAU,CAAC,EAAE,eACpCQ,EAAMR,EAAQkmC,EAAKnM,CAAG,CAAA,CAE1B,CAEA,OAAQ,CACN,YAAK,EAAI,KAAK,MAAM,KAAK,CAAC,EAC1B,KAAK,EAAI,KAAK,MAAM,KAAK,CAAC,EAC1B,KAAK,EAAI,KAAK,MAAM,KAAK,CAAC,EACnB,IACT,CAEA,MAAO,CACL,YAAK,EAAI,KAAK,KAAK,KAAK,CAAC,EACzB,KAAK,EAAI,KAAK,KAAK,KAAK,CAAC,EACzB,KAAK,EAAI,KAAK,KAAK,KAAK,CAAC,EAClB,IACT,CAEA,OAAQ,CACN,YAAK,EAAI,KAAK,MAAM,KAAK,CAAC,EAC1B,KAAK,EAAI,KAAK,MAAM,KAAK,CAAC,EAC1B,KAAK,EAAI,KAAK,MAAM,KAAK,CAAC,EACnB,IACT,CAEA,aAAc,CACZ,YAAK,EAAI,KAAK,MAAM,KAAK,CAAC,EAC1B,KAAK,EAAI,KAAK,MAAM,KAAK,CAAC,EAC1B,KAAK,EAAI,KAAK,MAAM,KAAK,CAAC,EACnB,IACT,CAEA,QAAS,CACF,YAAA,EAAI,CAAC,KAAK,EACV,KAAA,EAAI,CAAC,KAAK,EACV,KAAA,EAAI,CAAC,KAAK,EACR,IACT,CAEA,IAAI5rB,EAAY,CACP,OAAA,KAAK,EAAIA,EAAE,EAAI,KAAK,EAAIA,EAAE,EAAI,KAAK,EAAIA,EAAE,CAClD,CAEA,UAAW,CACF,OAAA,KAAK,EAAI,KAAK,EAAI,KAAK,EAAI,KAAK,EAAI,KAAK,EAAI,KAAK,CAC3D,CAEA,QAAS,CACP,OAAO,KAAK,KAAK,KAAK,EAAI,KAAK,EAAI,KAAK,EAAI,KAAK,EAAI,KAAK,EAAI,KAAK,CAAC,CACtE,CAEA,iBAAkB,CAChB,OAAO,KAAK,IAAI,KAAK,CAAC,EAAI,KAAK,IAAI,KAAK,CAAC,EAAI,KAAK,IAAI,KAAK,CAAC,CAC9D,CAEA,WAAY,CACV,OAAO,KAAK,aAAa,KAAK,UAAY,CAAC,CAC7C,CAEA,UAAUnO,EAAgB,CACxB,OAAO,KAAK,UAAA,EAAY,eAAeA,CAAM,CAC/C,CAEA,KAAKmO,EAAY88B,EAAe,CAC9B,YAAK,IAAM98B,EAAE,EAAI,KAAK,GAAK88B,EAC3B,KAAK,IAAM98B,EAAE,EAAI,KAAK,GAAK88B,EAC3B,KAAK,IAAM98B,EAAE,EAAI,KAAK,GAAK88B,EACpB,IACT,CAEA,YAAYpY,EAAatjC,EAAa07C,EAAe,CACnD,YAAK,EAAIpY,EAAG,GAAKtjC,EAAG,EAAIsjC,EAAG,GAAKoY,EAChC,KAAK,EAAIpY,EAAG,GAAKtjC,EAAG,EAAIsjC,EAAG,GAAKoY,EAChC,KAAK,EAAIpY,EAAG,GAAKtjC,EAAG,EAAIsjC,EAAG,GAAKoY,EACzB,IACT,CAEA,MAAM98B,EAAY,CACT,OAAA,KAAK,aAAa,KAAMA,CAAC,CAClC,CAEA,aAAapb,EAAYyE,EAAY,CACnC,MAAMs0C,EAAK/4C,EAAE,EACPg5C,EAAKh5C,EAAE,EACPi5C,EAAKj5C,EAAE,EACPk5C,EAAKz0C,EAAE,EACP00C,EAAK10C,EAAE,EACP20C,EAAK30C,EAAE,EACR,YAAA,EAAIu0C,EAAKI,EAAKH,EAAKE,EACnB,KAAA,EAAIF,EAAKC,EAAKH,EAAKK,EACnB,KAAA,EAAIL,EAAKI,EAAKH,EAAKE,EACjB,IACT,CAGA,gBAAgB99B,EAAY,CACpB,MAAA28B,EAAc38B,EAAE,WACtB,GAAI28B,IAAgB,EAClB,OAAO,KAAK,IAAI,EAAG,EAAG,CAAC,EAEzB,MAAMH,EAASx8B,EAAE,IAAI,IAAI,EAAI28B,EAC7B,OAAO,KAAK,KAAK38B,CAAC,EAAE,eAAew8B,CAAM,CAC3C,CAGA,gBAAgBx8B,EAAY,CAC1Bi+B,OAAAA,GAAI,KAAK,IAAI,EAAE,gBAAgBj+B,CAAC,EACzB,KAAK,IAAIi+B,EAAG,CACrB,CAEA,eAAeC,EAAsB,CAG5B,OAAA,KAAK,gBAAgBA,CAAW,CACzC,CAEA,QAAQC,EAAiB,CAGvB,OAAO,KAAK,IAAIF,GAAI,KAAKE,CAAM,EAAE,eAAe,EAAI,KAAK,IAAIA,CAAM,CAAC,CAAC,CACvE,CAEA,QAAQn+B,EAAY,CACZ,MAAA28B,EAAc,KAAK,KAAK,KAAK,WAAa38B,EAAE,UAAU,EAC5D,GAAI28B,IAAgB,EAClB,OAAO,KAAK,GAAK,EAEnB,MAAME,EAAQ,KAAK,IAAI78B,CAAC,EAAI28B,EAE5B,OAAO,KAAK,KAAKtqC,EAAMwqC,EAAO,GAAI,CAAC,CAAC,CACtC,CAEA,WAAW78B,EAAY,CACrB,OAAO,KAAK,KAAK,KAAK,kBAAkBA,CAAC,CAAC,CAC5C,CAEA,kBAAkBA,EAAY,CACtB,MAAA8C,EAAK,KAAK,EAAI9C,EAAE,EAChB+C,EAAK,KAAK,EAAI/C,EAAE,EAChBo+B,EAAK,KAAK,EAAIp+B,EAAE,EACtB,OAAO8C,EAAKA,EAAKC,EAAKA,EAAKq7B,EAAKA,CAClC,CAEA,oBAAoBp+B,EAAY,CAC9B,OACE,KAAK,IAAI,KAAK,EAAIA,EAAE,CAAC,EAAI,KAAK,IAAI,KAAK,EAAIA,EAAE,CAAC,EAAI,KAAK,IAAI,KAAK,EAAIA,EAAE,CAAC,CAE3E,CAyBA,uBAAuBtd,EAAY,CACjC,MAAM,EAAIA,EAAE,MACP,YAAA,EAAI,EAAE,EAAE,EACR,KAAA,EAAI,EAAE,EAAE,EACR,KAAA,EAAI,EAAE,EAAE,EACN,IACT,CAEA,oBAAoBA,EAAY,CAC9B,MAAM27C,EAAK,KAAK,qBAAqB37C,EAAG,CAAC,EAAE,SACrC47C,EAAK,KAAK,qBAAqB57C,EAAG,CAAC,EAAE,SACrC67C,EAAK,KAAK,qBAAqB77C,EAAG,CAAC,EAAE,SAC3C,YAAK,EAAI27C,EACT,KAAK,EAAIC,EACT,KAAK,EAAIC,EACF,IACT,CAEA,qBAAqB77C,EAAYgW,EAAe,CAC9C,OAAO,KAAK,UAAUhW,EAAE,MAAOgW,EAAQ,CAAC,CAC1C,CAEA,qBAAqBhW,EAAYgW,EAAe,CAC9C,OAAO,KAAK,UAAUhW,EAAE,MAAOgW,EAAQ,CAAC,CAC1C,CAEA,aAAate,EAAU,CACrB,YAAK,EAAIA,EAAE,EACX,KAAK,EAAIA,EAAE,EACX,KAAK,EAAIA,EAAE,EACJ,IACT,CASA,OAAO4lB,EAAY,CACV,OAAAA,EAAE,IAAM,KAAK,GAAKA,EAAE,IAAM,KAAK,GAAKA,EAAE,IAAM,KAAK,CAC1D,CAEA,UAAUgT,EAAiB3T,EAAS,EAAG,CAChC,YAAA,EAAI2T,EAAM3T,CAAM,EAChB,KAAA,EAAI2T,EAAM3T,EAAS,CAAC,EACpB,KAAA,EAAI2T,EAAM3T,EAAS,CAAC,EAClB,IACT,CAEA,QAAQ2T,EAAkB,GAAI3T,EAAS,EAAG,CAClC,OAAA2T,EAAA3T,CAAM,EAAI,KAAK,EACf2T,EAAA3T,EAAS,CAAC,EAAI,KAAK,EACnB2T,EAAA3T,EAAS,CAAC,EAAI,KAAK,EAClB2T,CACT,CAEA,oBAAoBspB,EAA4B5jC,EAAe,CACxD,YAAA,EAAI4jC,EAAU,KAAK5jC,CAAK,EACxB,KAAA,EAAI4jC,EAAU,KAAK5jC,CAAK,EACxB,KAAA,EAAI4jC,EAAU,KAAK5jC,CAAK,EACtB,IACT,CAEA,QAAS,CACF,YAAA,EAAI,KAAK,SACT,KAAA,EAAI,KAAK,SACT,KAAA,EAAI,KAAK,SACP,IACT,CAEA,iBAAkB,CAEhB,MAAMmkC,EAAQ,KAAK,OAAO,EAAI,KAAK,GAAK,EAClCt9C,EAAI,KAAK,OAAO,EAAI,EAAI,EACxBH,EAAI,KAAK,KAAK,EAAIG,EAAIA,CAAC,EAC7B,YAAK,EAAIH,EAAI,KAAK,IAAIy9C,CAAK,EAC3B,KAAK,EAAIt9C,EACT,KAAK,EAAIH,EAAI,KAAK,IAAIy9C,CAAK,EACpB,IACT,CAEA,EAAE,OAAO,QAAQ,GAAI,CACnB,MAAM,KAAK,EACX,MAAM,KAAK,EACX,MAAM,KAAK,CACb,CACF,CAEO,MAAM2B,EAAQ,CACnB,EAAI,EACJ,EAAI,EACJ,EAAI,EACJ,EAAI,EAEJ,YAAYt0C,EAAI,EAAGF,EAAI,EAAG0C,EAAI,EAAGzC,EAAI,EAAG,CACtC,KAAK,EAAIC,EACT,KAAK,EAAIF,EACT,KAAK,EAAI0C,EACT,KAAK,EAAIzC,CACX,CAEA,IAAI,OAAQ,CACV,OAAO,KAAK,CACd,CAEA,IAAI,MAAM0Z,EAAO,CACf,KAAK,EAAIA,CACX,CAEA,IAAI,QAAS,CACX,OAAO,KAAK,CACd,CAEA,IAAI,OAAOA,EAAO,CAChB,KAAK,EAAIA,CACX,CAEA,IAAIzZ,EAAI,EAAGF,EAAI,EAAG0C,EAAI,EAAGzC,EAAI,EAAG,CAC9B,YAAK,EAAIC,EACT,KAAK,EAAIF,EACT,KAAK,EAAI0C,EACT,KAAK,EAAIzC,EACF,IACT,CAEA,UAAUuyC,EAAgB,CACxB,YAAK,EAAIA,EACT,KAAK,EAAIA,EACT,KAAK,EAAIA,EACT,KAAK,EAAIA,EACF,IACT,CAEA,KAAKtyC,EAAW,CACd,YAAK,EAAIA,EACF,IACT,CAEA,KAAKF,EAAW,CACd,YAAK,EAAIA,EACF,IACT,CAEA,KAAK0C,EAAW,CACd,YAAK,EAAIA,EACF,IACT,CAEA,KAAKzC,EAAW,CACd,YAAK,EAAIA,EACF,IACT,CAEA,aAAayO,EAAeiL,EAAe,CACzC,OAAQjL,EAAO,CACb,IAAK,GACH,KAAK,EAAIiL,EACT,MACF,IAAK,GACH,KAAK,EAAIA,EACT,MACF,IAAK,GACH,KAAK,EAAIA,EACT,MACF,IAAK,GACH,KAAK,EAAIA,EACT,MACF,QACQ,MAAA,IAAI,MAAM,0BAA4BjL,CAAK,CACrD,CACO,OAAA,IACT,CAEA,aAAaA,EAAe,CAC1B,OAAQA,EAAO,CACb,IAAK,GACH,OAAO,KAAK,EACd,IAAK,GACH,OAAO,KAAK,EACd,IAAK,GACH,OAAO,KAAK,EACd,IAAK,GACH,OAAO,KAAK,EACd,QACQ,MAAA,IAAI,MAAM,0BAA4BA,CAAK,CACrD,CACF,CAEA,OAAQ,CACC,OAAA,IAAI8lC,GAAQ,KAAK,EAAG,KAAK,EAAG,KAAK,EAAG,KAAK,CAAC,CACnD,CAEA,KAAKx+B,EAAY,CACf,YAAK,EAAIA,EAAE,EACX,KAAK,EAAIA,EAAE,EACX,KAAK,EAAIA,EAAE,EACX,KAAK,EAAIA,EAAE,EACJ,IACT,CAEA,IAAIA,EAAY,CACd,YAAK,GAAKA,EAAE,EACZ,KAAK,GAAKA,EAAE,EACZ,KAAK,GAAKA,EAAE,EACZ,KAAK,GAAKA,EAAE,EACL,IACT,CAEA,UAAUnkB,EAAW,CACnB,YAAK,GAAKA,EACV,KAAK,GAAKA,EACV,KAAK,GAAKA,EACV,KAAK,GAAKA,EACH,IACT,CAEA,WAAW+I,EAAYyE,EAAY,CAC5B,YAAA,EAAIzE,EAAE,EAAIyE,EAAE,EACZ,KAAA,EAAIzE,EAAE,EAAIyE,EAAE,EACZ,KAAA,EAAIzE,EAAE,EAAIyE,EAAE,EACZ,KAAA,EAAIzE,EAAE,EAAIyE,EAAE,EACV,IACT,CAEA,gBAAgB2W,EAAYnkB,EAAW,CAChC,YAAA,GAAKmkB,EAAE,EAAInkB,EACX,KAAA,GAAKmkB,EAAE,EAAInkB,EACX,KAAA,GAAKmkB,EAAE,EAAInkB,EACX,KAAA,GAAKmkB,EAAE,EAAInkB,EACT,IACT,CAEA,IAAImkB,EAAY,CACd,YAAK,GAAKA,EAAE,EACZ,KAAK,GAAKA,EAAE,EACZ,KAAK,GAAKA,EAAE,EACZ,KAAK,GAAKA,EAAE,EACL,IACT,CAEA,UAAUnkB,EAAW,CACnB,YAAK,GAAKA,EACV,KAAK,GAAKA,EACV,KAAK,GAAKA,EACV,KAAK,GAAKA,EACH,IACT,CAEA,WAAW+I,EAAYyE,EAAY,CAC5B,YAAA,EAAIzE,EAAE,EAAIyE,EAAE,EACZ,KAAA,EAAIzE,EAAE,EAAIyE,EAAE,EACZ,KAAA,EAAIzE,EAAE,EAAIyE,EAAE,EACZ,KAAA,EAAIzE,EAAE,EAAIyE,EAAE,EACV,IACT,CAEA,SAAS2W,EAAY,CACnB,YAAK,GAAKA,EAAE,EACZ,KAAK,GAAKA,EAAE,EACZ,KAAK,GAAKA,EAAE,EACZ,KAAK,GAAKA,EAAE,EACL,IACT,CAEA,eAAew8B,EAAgB,CAC7B,YAAK,GAAKA,EACV,KAAK,GAAKA,EACV,KAAK,GAAKA,EACV,KAAK,GAAKA,EACH,IACT,CAEA,aAAa95C,EAAY,CACvB,MAAMwH,EAAI,KAAK,EACTF,EAAI,KAAK,EACT0C,EAAI,KAAK,EACTzC,EAAI,KAAK,EACT7P,EAAIsI,EAAE,MACZ,YAAK,EAAItI,EAAE,CAAC,EAAI8P,EAAI9P,EAAE,CAAC,EAAI4P,EAAI5P,EAAE,CAAC,EAAIsS,EAAItS,EAAE,EAAE,EAAI6P,EAClD,KAAK,EAAI7P,EAAE,CAAC,EAAI8P,EAAI9P,EAAE,CAAC,EAAI4P,EAAI5P,EAAE,CAAC,EAAIsS,EAAItS,EAAE,EAAE,EAAI6P,EAClD,KAAK,EAAI7P,EAAE,CAAC,EAAI8P,EAAI9P,EAAE,CAAC,EAAI4P,EAAI5P,EAAE,EAAE,EAAIsS,EAAItS,EAAE,EAAE,EAAI6P,EACnD,KAAK,EAAI7P,EAAE,CAAC,EAAI8P,EAAI9P,EAAE,CAAC,EAAI4P,EAAI5P,EAAE,EAAE,EAAIsS,EAAItS,EAAE,EAAE,EAAI6P,EAC5C,IACT,CAEA,OAAO+V,EAAY,CACjB,YAAK,GAAKA,EAAE,EACZ,KAAK,GAAKA,EAAE,EACZ,KAAK,GAAKA,EAAE,EACZ,KAAK,GAAKA,EAAE,EACL,IACT,CAEA,aAAaw8B,EAAgB,CACpB,OAAA,KAAK,eAAe,EAAIA,CAAM,CACvC,CAEA,2BAA2BxsC,EAAe,CAGxC,KAAK,EAAI,EAAI,KAAK,KAAKA,EAAE,CAAC,EAC1B,MAAMnU,EAAI,KAAK,KAAK,EAAImU,EAAE,EAAIA,EAAE,CAAC,EACjC,OAAInU,EAAI,MACN,KAAK,EAAI,EACT,KAAK,EAAI,EACT,KAAK,EAAI,IAEJ,KAAA,EAAImU,EAAE,EAAInU,EACV,KAAA,EAAImU,EAAE,EAAInU,EACV,KAAA,EAAImU,EAAE,EAAInU,GAEV,IACT,CAEA,gCAAgC6G,EAAY,CAGtC,IAAA21C,EAAOnuC,EAAGF,EAAG0C,EAGjB,MAAMtK,EAAKM,EAAE,MACP43C,EAAMl4C,EAAG,CAAC,EACVm4C,EAAMn4C,EAAG,CAAC,EACVo4C,EAAMp4C,EAAG,CAAC,EACVq4C,EAAMr4C,EAAG,CAAC,EACVs4C,EAAMt4C,EAAG,CAAC,EACVu4C,EAAMv4C,EAAG,CAAC,EACVw4C,EAAMx4C,EAAG,CAAC,EACVy4C,EAAMz4C,EAAG,CAAC,EACV04C,EAAM14C,EAAG,EAAE,EACjB,GACE,KAAK,IAAIm4C,EAAME,CAAG,EAAI,KACtB,KAAK,IAAID,EAAMI,CAAG,EAAI,KACtB,KAAK,IAAID,EAAME,CAAG,EAAI,IACtB,CAKE,GAAA,KAAK,IAAIN,EAAME,CAAG,EAAI,IACtB,KAAK,IAAID,EAAMI,CAAG,EAAI,IACtB,KAAK,IAAID,EAAME,CAAG,EAAI,IACtB,KAAK,IAAIP,EAAMI,EAAMI,EAAM,CAAC,EAAI,GAGhC,YAAK,IAAI,EAAG,EAAG,EAAG,CAAC,EACZ,KAGTzC,EAAQ,KAAK,GACP,MAAAoG,GAAMnE,EAAM,GAAK,EACjBoE,GAAMhE,EAAM,GAAK,EACjBiE,GAAM7D,EAAM,GAAK,EACjB8D,GAAMrE,EAAME,GAAO,EACnBoE,GAAMrE,EAAMI,GAAO,EACnBkE,GAAMnE,EAAME,GAAO,EACrB,OAAA4D,EAAKC,GAAMD,EAAKE,EAEdF,EAAK,KACHv0C,EAAA,EACAF,EAAA,WACA0C,EAAA,aAEAxC,EAAA,KAAK,KAAKu0C,CAAE,EAChBz0C,EAAI40C,EAAK10C,EACTwC,EAAImyC,EAAK30C,GAEFw0C,EAAKC,EAEVD,EAAK,KACHx0C,EAAA,WACAF,EAAA,EACA0C,EAAA,aAEA1C,EAAA,KAAK,KAAK00C,CAAE,EAChBx0C,EAAI00C,EAAK50C,EACT0C,EAAIoyC,EAAK90C,GAIP20C,EAAK,KACHz0C,EAAA,WACAF,EAAA,WACA0C,EAAA,IAEAA,EAAA,KAAK,KAAKiyC,CAAE,EAChBz0C,EAAI20C,EAAKnyC,EACT1C,EAAI80C,EAAKpyC,GAGb,KAAK,IAAIxC,EAAGF,EAAG0C,EAAG2rC,CAAK,EAChB,IACT,CAEA,IAAIx8C,EAAI,KAAK,MACVg/C,EAAMF,IAAQE,EAAMF,IAClBH,EAAMI,IAAQJ,EAAMI,IACpBH,EAAMF,IAAQE,EAAMF,EAAA,EAErB,OAAA,KAAK,IAAI1+C,CAAC,EAAI,OAAWA,EAAA,GAGxB,KAAA,GAAKg/C,EAAMF,GAAO9+C,EAClB,KAAA,GAAK2+C,EAAMI,GAAO/+C,EAClB,KAAA,GAAK4+C,EAAMF,GAAO1+C,EACvB,KAAK,EAAI,KAAK,MAAMy+C,EAAMI,EAAMI,EAAM,GAAK,CAAC,EACrC,IACT,CAEA,uBAAuBp4C,EAAY,CACjC,MAAM,EAAIA,EAAE,MACP,YAAA,EAAI,EAAE,EAAE,EACR,KAAA,EAAI,EAAE,EAAE,EACR,KAAA,EAAI,EAAE,EAAE,EACR,KAAA,EAAI,EAAE,EAAE,EACN,IACT,CAEA,IAAIsd,EAAY,CACd,YAAK,EAAI,KAAK,IAAI,KAAK,EAAGA,EAAE,CAAC,EAC7B,KAAK,EAAI,KAAK,IAAI,KAAK,EAAGA,EAAE,CAAC,EAC7B,KAAK,EAAI,KAAK,IAAI,KAAK,EAAGA,EAAE,CAAC,EAC7B,KAAK,EAAI,KAAK,IAAI,KAAK,EAAGA,EAAE,CAAC,EACtB,IACT,CAEA,IAAIA,EAAY,CACd,YAAK,EAAI,KAAK,IAAI,KAAK,EAAGA,EAAE,CAAC,EAC7B,KAAK,EAAI,KAAK,IAAI,KAAK,EAAGA,EAAE,CAAC,EAC7B,KAAK,EAAI,KAAK,IAAI,KAAK,EAAGA,EAAE,CAAC,EAC7B,KAAK,EAAI,KAAK,IAAI,KAAK,EAAGA,EAAE,CAAC,EACtB,IACT,CAEA,MAAM+3B,EAAcnM,EAAc,CAEhC,YAAK,EAAIv5B,EAAM,KAAK,EAAG0lC,EAAI,EAAGnM,EAAI,CAAC,EACnC,KAAK,EAAIv5B,EAAM,KAAK,EAAG0lC,EAAI,EAAGnM,EAAI,CAAC,EACnC,KAAK,EAAIv5B,EAAM,KAAK,EAAG0lC,EAAI,EAAGnM,EAAI,CAAC,EACnC,KAAK,EAAIv5B,EAAM,KAAK,EAAG0lC,EAAI,EAAGnM,EAAI,CAAC,EAC5B,IACT,CAEA,YAAY6Q,EAAgBC,EAAgB,CAC1C,YAAK,EAAIrqC,EAAM,KAAK,EAAGoqC,EAAQC,CAAM,EACrC,KAAK,EAAIrqC,EAAM,KAAK,EAAGoqC,EAAQC,CAAM,EACrC,KAAK,EAAIrqC,EAAM,KAAK,EAAGoqC,EAAQC,CAAM,EACrC,KAAK,EAAIrqC,EAAM,KAAK,EAAGoqC,EAAQC,CAAM,EAC9B,IACT,CAEA,YAAY3E,EAAanM,EAAa,CAC9B,MAAA/5B,EAAS,KAAK,SACpB,OAAO,KAAK,aAAaA,GAAU,CAAC,EAAE,eACpCQ,EAAMR,EAAQkmC,EAAKnM,CAAG,CAAA,CAE1B,CAEA,OAAQ,CACN,YAAK,EAAI,KAAK,MAAM,KAAK,CAAC,EAC1B,KAAK,EAAI,KAAK,MAAM,KAAK,CAAC,EAC1B,KAAK,EAAI,KAAK,MAAM,KAAK,CAAC,EAC1B,KAAK,EAAI,KAAK,MAAM,KAAK,CAAC,EACnB,IACT,CAEA,MAAO,CACL,YAAK,EAAI,KAAK,KAAK,KAAK,CAAC,EACzB,KAAK,EAAI,KAAK,KAAK,KAAK,CAAC,EACzB,KAAK,EAAI,KAAK,KAAK,KAAK,CAAC,EACzB,KAAK,EAAI,KAAK,KAAK,KAAK,CAAC,EAClB,IACT,CAEA,OAAQ,CACN,YAAK,EAAI,KAAK,MAAM,KAAK,CAAC,EAC1B,KAAK,EAAI,KAAK,MAAM,KAAK,CAAC,EAC1B,KAAK,EAAI,KAAK,MAAM,KAAK,CAAC,EAC1B,KAAK,EAAI,KAAK,MAAM,KAAK,CAAC,EACnB,IACT,CAEA,aAAc,CACZ,YAAK,EAAI,KAAK,MAAM,KAAK,CAAC,EAC1B,KAAK,EAAI,KAAK,MAAM,KAAK,CAAC,EAC1B,KAAK,EAAI,KAAK,MAAM,KAAK,CAAC,EAC1B,KAAK,EAAI,KAAK,MAAM,KAAK,CAAC,EACnB,IACT,CAEA,QAAS,CACF,YAAA,EAAI,CAAC,KAAK,EACV,KAAA,EAAI,CAAC,KAAK,EACV,KAAA,EAAI,CAAC,KAAK,EACV,KAAA,EAAI,CAAC,KAAK,EACR,IACT,CAEA,IAAI5rB,EAAY,CACd,OAAO,KAAK,EAAIA,EAAE,EAAI,KAAK,EAAIA,EAAE,EAAI,KAAK,EAAIA,EAAE,EAAI,KAAK,EAAIA,EAAE,CACjE,CAEA,UAAW,CACT,OACE,KAAK,EAAI,KAAK,EAAI,KAAK,EAAI,KAAK,EAAI,KAAK,EAAI,KAAK,EAAI,KAAK,EAAI,KAAK,CAExE,CAEA,QAAS,CACP,OAAO,KAAK,KACV,KAAK,EAAI,KAAK,EAAI,KAAK,EAAI,KAAK,EAAI,KAAK,EAAI,KAAK,EAAI,KAAK,EAAI,KAAK,CAAA,CAExE,CAEA,iBAAkB,CAChB,OACE,KAAK,IAAI,KAAK,CAAC,EAAI,KAAK,IAAI,KAAK,CAAC,EAAI,KAAK,IAAI,KAAK,CAAC,EAAI,KAAK,IAAI,KAAK,CAAC,CAE5E,CAEA,WAAY,CACV,OAAO,KAAK,aAAa,KAAK,UAAY,CAAC,CAC7C,CAEA,UAAUnO,EAAgB,CACxB,OAAO,KAAK,UAAA,EAAY,eAAeA,CAAM,CAC/C,CAGA,gBAAgBmO,EAAY,CACpB,MAAA28B,EAAc38B,EAAE,WACtB,GAAI28B,IAAgB,EAClB,OAAO,KAAK,IAAI,EAAG,EAAG,EAAG,CAAC,EAE5B,MAAMH,EAASx8B,EAAE,IAAI,IAAI,EAAI28B,EAC7B,OAAO,KAAK,KAAK38B,CAAC,EAAE,eAAew8B,CAAM,CAC3C,CAQA,KAAKx8B,EAAY88B,EAAe,CAC9B,YAAK,IAAM98B,EAAE,EAAI,KAAK,GAAK88B,EAC3B,KAAK,IAAM98B,EAAE,EAAI,KAAK,GAAK88B,EAC3B,KAAK,IAAM98B,EAAE,EAAI,KAAK,GAAK88B,EAC3B,KAAK,IAAM98B,EAAE,EAAI,KAAK,GAAK88B,EACpB,IACT,CAEA,YAAYpY,EAAatjC,EAAa07C,EAAe,CACnD,YAAK,EAAIpY,EAAG,GAAKtjC,EAAG,EAAIsjC,EAAG,GAAKoY,EAChC,KAAK,EAAIpY,EAAG,GAAKtjC,EAAG,EAAIsjC,EAAG,GAAKoY,EAChC,KAAK,EAAIpY,EAAG,GAAKtjC,EAAG,EAAIsjC,EAAG,GAAKoY,EAChC,KAAK,EAAIpY,EAAG,GAAKtjC,EAAG,EAAIsjC,EAAG,GAAKoY,EACzB,IACT,CAEA,OAAO98B,EAAY,CACjB,OAAOA,EAAE,IAAM,KAAK,GAAKA,EAAE,IAAM,KAAK,GAAKA,EAAE,IAAM,KAAK,GAAKA,EAAE,IAAM,KAAK,CAC5E,CAEA,UAAUgT,EAAiB3T,EAAS,EAAG,CAChC,YAAA,EAAI2T,EAAM3T,CAAM,EAChB,KAAA,EAAI2T,EAAM3T,EAAS,CAAC,EACpB,KAAA,EAAI2T,EAAM3T,EAAS,CAAC,EACpB,KAAA,EAAI2T,EAAM3T,EAAS,CAAC,EAClB,IACT,CAEA,QAAQ2T,EAAkB,GAAI3T,EAAS,EAAG,CAClC,OAAA2T,EAAA3T,CAAM,EAAI,KAAK,EACf2T,EAAA3T,EAAS,CAAC,EAAI,KAAK,EACnB2T,EAAA3T,EAAS,CAAC,EAAI,KAAK,EACnB2T,EAAA3T,EAAS,CAAC,EAAI,KAAK,EAClB2T,CACT,CAEA,oBAAoBspB,EAA4B5jC,EAAe,CACxD,YAAA,EAAI4jC,EAAU,KAAK5jC,CAAK,EACxB,KAAA,EAAI4jC,EAAU,KAAK5jC,CAAK,EACxB,KAAA,EAAI4jC,EAAU,KAAK5jC,CAAK,EACxB,KAAA,EAAI4jC,EAAU,KAAK5jC,CAAK,EACtB,IACT,CAEA,QAAS,CACF,YAAA,EAAI,KAAK,SACT,KAAA,EAAI,KAAK,SACT,KAAA,EAAI,KAAK,SACT,KAAA,EAAI,KAAK,SACP,IACT,CAEA,EAAE,OAAO,QAAQ,GAAI,CACnB,MAAM,KAAK,EACX,MAAM,KAAK,EACX,MAAM,KAAK,EACX,MAAM,KAAK,CACb,CACF,CAEA,MAAMkkC,GAAM,IAAIL,GACV0B,GAAM,IAAIlB,GAEVC,GAAc,IAAInE,GC36ClBkG,GAAgBC,GACpB,+rEAyBA,EACF,EAEA,SAASA,GAA4BC,EAAqBC,EAAQ,GAAI,CACpE,MAAMC,EAAS,CAAA,EACTC,EAAQH,EAAY,MAAM,GAAG,EAEnC,QAAS,EAAI,EAAG,EAAIG,EAAM,OAAQ,GAAK,EAAG,CACxC,MAAMC,EAAS,IAAMD,EAAM,EAAI,CAAC,EAAI,IAC9BE,EAAS,SAASF,EAAM,CAAC,EAAGF,CAAK,EAChCC,EAAAE,CAAM,EAAI,KAAOC,EAAS,GACnC,CAEA,OAAAH,EAAO,OAAO,EAAI,SACXA,CACT,CAEA,SAASI,GAAOvsC,EAAayG,EAAuC,CAC5D,MAAAR,EAAO,OAAO,KAAKQ,CAAI,EAC7B,QAASxd,EAAI,EAAGA,EAAIgd,EAAK,OAAQhd,IAC/B+W,EAAMA,EAAI,QACR,IAAI,OAAO,IAAMiG,EAAKhd,CAAC,EAAI,IAAK,IAAI,EACpC,GAAKwd,EAAKR,EAAKhd,CAAC,CAAC,CAAA,EAGd,OAAA+W,CACT,CAEA,SAASwsC,GAAaC,EAA8B,CAClD,IAAIC,EAAczjD,EAClB,GAAI,CAACwjD,EACH,MAAM,IAAI,MACR,+DAAA,EAGJ,MAAME,EAAQ,sDACCD,EAAA,GACZ,EAED,KADeA,EAAA,GACVzjD,EAAI,EAAGA,EAAI,GAAIA,IACFyjD,GAAAC,EAAM,KAAK,MAAM,KAAK,SAAWA,EAAM,MAAM,CAAC,QAEzDF,EAAOC,CAAY,GACrB,OAAAA,CACT,CAGA,SAASE,GAAcC,EAAmB,CAExC,MAAMC,EAAU,CACd,KAAM,QACN,MAAO,MACP,OAAQ,SACR,MAAO,QACP,IAAK,KAAA,EAEA,OAAAA,EAAQD,CAAS,GAAKC,EAAQ,KACvC,CAGA,SAASC,GAAoBC,EAAsB,CAEjD,MAAMF,EAAU,CACd,WAAY,aACZ,QAAS,UACT,IAAK,mBACL,OAAQ,kBACR,OAAQ,SAAA,EAEH,OAAAA,EAAQE,CAAY,GAAKF,EAAQ,UAC1C,CAGA,MAAMG,GAQF,CACF,YAAa,CACX,QAAS,SACT,OAAQ,UACR,IAAK,OACL,MAAO,QACT,EACA,UAAW,CACT,QAAS,OACT,OAAQ,UACR,IAAK,KACL,MAAO,MACT,EACA,QAAS,CACP,QAAS,iBACT,OAAQ,OACR,IAAK,OACL,MAAO,QACT,EACA,SAAU,CACR,QAAS,kBACT,OAAQ,QACR,IAAK,QACL,MAAO,QACT,EACA,WAAY,CACV,QAAS,oBACT,OAAQ,GACR,IAAK,EACL,MAAO,QACT,EACA,UAAW,CACT,QAAS,eACT,OAAQ,EACR,IAAK,EACL,MAAO,QACT,EACA,YAAa,CACX,QAAS,UACT,OAAQ,EACR,IAAK,EACL,MAAO,aACT,EACA,KAAM,CAEJ,OAAQ,iBACV,EACA,YAAa,CACX,OAAQ,SACV,EACA,cAAe,CACb,OAAQ,CACV,EACA,cAAe,CACb,OAAQ,CACV,EACA,WAAY,CACV,OAAQ,CACV,EACA,UAAW,CACT,OAAQ,OACV,EACA,aAAc,CACZ,OAAQ,YACV,EACA,SAAU,CACR,QAAS,mBACT,OAAQ,CAAC,EACT,IAAK,KACL,MAAO,QACT,EACA,eAAgB,CACd,QAAS,oBACT,OAAQ,EACR,IAAK,EACL,MAAO,QACT,CACF,EAEO,IAAAC,GAAA,KAA2B,CAChC,OACA,MACA,YAAYC,EAA0BzW,EAA0B,CAC9D,KAAK,OAASyW,EACd,KAAK,MAAQzW,CACf,CAKA,aAAarqB,EAAgB+gC,EAAe,CAC1C,MAAMC,EAAO,KAAK,MAAM,gBAAgB,MAAM,EAE9C,GADKA,EAAA,aAAa,SAAU,GAAKhhC,CAAM,EACnC+gC,EAAM,QAAQ,MAAM,IAAM,GAAI,CAI1B,MAAAE,EADJ,kEACoB,KAAKF,CAAK,EAC5BE,IACGD,EAAA,aACH,aACAd,GAAO,mBAAoB,CACzB,EAAGe,EAAQ,CAAC,EACZ,EAAGA,EAAQ,CAAC,EACZ,EAAGA,EAAQ,CAAC,CAAA,CACb,CAAA,EAEHD,EAAK,aAAa,eAAgBC,EAAQ,CAAC,CAAC,EAC9C,MAEKD,EAAA,aAAa,aAAcD,CAAK,EAElC,KAAA,OAAO,YAAYC,CAAI,CAC9B,CACF,EAEOE,GAAA,KAA0B,CAC/B,OACA,MACA,YAAYxK,EAAqBrM,EAA0B,CACzD,KAAK,OAASqM,EACd,KAAK,MAAQrM,CACf,CACF,EAKO8W,GAAA,MAAMC,EAAoB,CAG/B,WAAuB,SACvB,SACA,MACA,MACA,OACA,aACA,aACA,UACA,MACA,UACA,iBACA,yBAGW,KAEX,YAAY,CACV,OAAAhX,EACA,MAAAoB,EAAQ,IACR,OAAAC,EAAS,GAAA,EAKR,CACGrB,GACF,KAAK,SAAWA,EACX,KAAA,MAAQA,EAAO,WAAW,IAAI,EACnC,KAAK,MAAQA,EAAO,MACpB,KAAK,OAASA,EAAO,SAErB,KAAK,SAAW,KAAK,WAAW,cAAc,QAAQ,EACtD,KAAK,MAAQ,KAAK,SAAS,WAAW,IAAI,EAC1C,KAAK,MAAQoB,EACb,KAAK,OAASC,GAGhB,KAAK,mBAAmB,EACxB,KAAK,aAAe,CAAC,KAAK,gBAAiB,CAAA,EAC3C,KAAK,aAAe,GAEf,KAAA,UAAY,KAAK,WAAW,gBAC/B,6BACA,KAAA,EAEG,KAAA,UAAU,aAAa,UAAW,KAAK,EACvC,KAAA,UAAU,aAAa,QAAS,4BAA4B,EACjE,KAAK,UAAU,eACb,gCACA,cACA,8BAAA,EAEF,KAAK,UAAU,aAAa,QAAS,GAAK,KAAK,KAAK,EACpD,KAAK,UAAU,aAAa,SAAU,GAAK,KAAK,MAAM,EAGtD,KAAK,MAAQ,GAGR,KAAA,UAAY,KAAK,WAAW,gBAC/B,6BACA,MAAA,EAEG,KAAA,UAAU,YAAY,KAAK,SAAS,EAGpC,KAAA,iBAAmB,KAAK,WAAW,gBACtC,6BACA,GAAA,EAEG,KAAA,UAAU,YAAY,KAAK,gBAAgB,CAClD,CAKA,oBAAqB,CAEb,MAAA7xB,EAAO,OAAO,KAAKgnC,EAAM,EAC/B,QAAShkD,EAAI,EAAG4V,EAASoH,EAAK,OAAQhd,EAAI4V,EAAQ5V,IAAK,CAC/C,MAAA0e,EAAM1B,EAAKhd,CAAC,EAClB,KAAK0e,CAAG,EAAIslC,GAAOtlC,CAAG,EAAE,MAC1B,CACF,CAKA,iBAAkB,CAChB,MAAM+lC,EAAkC,CAAA,EAClCznC,EAAO,OAAO,KAAKgnC,EAAM,EAC/B,QAAShkD,EAAI,EAAG4V,EAASoH,EAAK,OAAQhd,EAAI4V,EAAQ5V,IAAK,CAC/C,MAAA0e,EAAM1B,EAAKhd,CAAC,EACPykD,EAAA/lC,CAAG,EAAI,KAAKA,CAAG,CAC5B,CACO,OAAA+lC,CACT,CAKA,kBAAkBA,EAAiC,CAC3C,MAAAznC,EAAO,OAAO,KAAKynC,CAAU,EACnC,QAASzkD,EAAI,EAAG4V,EAASoH,EAAK,OAAQhd,EAAI4V,EAAQ5V,IAAK,CAC/C,MAAA0e,EAAM1B,EAAKhd,CAAC,EACb,KAAA0e,CAAG,EAAI+lC,EAAW/lC,CAAG,CAC5B,CACF,CAKA,gBACEgmC,EACAtnC,EAAkC,CAAA,EAClCunC,EAAY,GACZ,CACM,MAAArlC,EAAU,KAAK,WAAW,gBAC9B,6BACAolC,CAAA,EAEI1nC,EAAO,OAAO,KAAKI,CAAU,EAC/BunC,IAEMrlC,EAAA,aAAa,OAAQ,MAAM,EAC3BA,EAAA,aAAa,SAAU,MAAM,GAEvC,QAAStf,EAAI,EAAGA,EAAIgd,EAAK,OAAQhd,IAAK,CAC9B,MAAA0e,EAAM1B,EAAKhd,CAAC,EAClBsf,EAAQ,aAAaZ,EAAKtB,EAAWsB,CAAG,CAAC,CAC3C,CACO,OAAAY,CACT,CAKA,6BAA6B7G,EAAyB,CACpD,IAAImsC,EAAiB,KAAK,iBAC1B,MAAMC,EAAoB,KAAK,yBAC3BA,IACaD,EAAA,aAAansC,EAAM,EAAE,EACpCmsC,EAAiBC,EAAkB,QACjBA,EAAA,SAAS,QAAS3mC,GAAqB,CAClDA,EAAA,aAAazF,EAAM,EAAE,CAAA,CAC3B,GAGG,MAAAuE,EAAO,OAAO,KAAKgnC,EAAM,EAC/B,QAAShkD,EAAI,EAAGA,EAAIgd,EAAK,OAAQhd,IAAK,CACpC,MAAM8kD,EAAQd,GAAOhnC,EAAKhd,CAAC,CAAC,EACtB0nB,EAAQ,KAAK1K,EAAKhd,CAAC,CAAC,EAC1B,GAAI8kD,EAAM,OACR,GAAIp9B,aAAiBq9B,GAAqB,CACxC,GAAIr9B,EAAM,MAER,KAAOA,EAAM,MAAM,UAAU,WAAW,QAAQ,CACxC,MAAA8M,EACJ9M,EAAM,MAAM,UAAU,WAAW,CAAC,EAClC,aAAa,IAAI,EACd,KAAA,MAAM8M,CAAE,EAAIA,EACjB,KAAK,UAAU,YAAY9M,EAAM,MAAM,UAAU,WAAW,CAAC,CAAC,CAChE,CAEak9B,EAAA,aACbE,EAAM,MACNxB,GAAO,aAAc,CACnB,GAAI57B,EAAM,OAAO,aAAa,IAAI,CAAA,CACnC,CAAA,CACH,SACSA,aAAiBs9B,GACXJ,EAAA,aACbE,EAAM,MACNxB,GAAO,aAAc,CACnB,GAAI57B,EAAM,OAAO,aAAa,IAAI,CAAA,CACnC,CAAA,UAEMo9B,EAAM,MAAM,QAAQrsC,CAAI,IAAM,IAAMqsC,EAAM,MAAQp9B,EAExD,IAAAo9B,EAAM,UAAY,UAAYA,EAAM,UAAY,SACjDp9B,EAAM,QAAQ,MAAM,IAAM,GAC1B,CAIM,MAAA28B,EADJ,kEACoB,KAAK38B,CAAK,EAChC,GAAI28B,EAAS,CACIO,EAAA,aACbE,EAAM,QACNxB,GAAO,mBAAoB,CACzB,EAAGe,EAAQ,CAAC,EACZ,EAAGA,EAAQ,CAAC,EACZ,EAAGA,EAAQ,CAAC,CAAA,CACb,CAAA,EAGH,IAAIY,EAAU,WAAWZ,EAAQ,CAAC,CAAC,EACnC,MAAMa,EAAc,KAAK,YACrBA,GAAe,OACND,GAAAC,GAEEN,EAAA,aACbE,EAAM,QAAU,WAChB,GAAKG,CAAA,CAET,CAAA,KACK,CACL,IAAIE,EAAOL,EAAM,QACb,GAAA9nC,EAAKhd,CAAC,IAAM,gBACPmlD,EAAA1sC,EAAO,IAAMqsC,EAAM,QACtBF,EAAe,aAAaO,CAAI,GAElC,SAIAA,GAAqBP,EAAA,aAAaO,EAAMz9B,CAAK,CACnD,EAGN,CACF,CAKA,oBAAoBxJ,EAAsC,CAExD,OADAA,EAAOA,GAAQ,KAAK,iBAChBA,EAAK,WAAa,KAAOA,EAAK,WAAa,MACtCA,EAEA,KAAK,oBAAoBA,EAAK,UAAmC,CAE5E,CAQA,iBAAiBknC,EAA2B,CAC1C,IAAIC,EAAa,IAAI,cAAA,EAAgB,kBAAkB,KAAK,SAAS,EAYrE,GARE,sFACQ,KAAKA,CAAU,IACvBA,EAAaA,EAAW,QACtB,oCACA,2CAAA,GAIAD,EAAkB,CACd,MAAApoC,EAAO,OAAO,KAAK8lC,EAAa,EAEtC,QAAS9iD,EAAI,EAAG4V,EAASoH,EAAK,OAAQhd,EAAI4V,EAAQ5V,IAAK,CAC/C,MAAA0e,EAAM1B,EAAKhd,CAAC,EACZ0nB,EAAQo7B,GAAcpkC,CAAG,EACzB4mC,EAAS,IAAI,OAAO5mC,EAAK,IAAI,EAC/B4mC,EAAO,KAAKD,CAAU,IACXA,EAAAA,EAAW,QAAQC,EAAQ59B,CAAK,EAEjD,CACF,CAEO,OAAA29B,CACT,CAKA,QAAS,CACP,OAAO,KAAK,SACd,CAKA,MAAO,CACC,MAAArb,EAAQ,KAAK,gBAAgB,GAAG,EAChC7rB,EAAS,KAAK,sBACf,KAAA,aAAa,KAAKA,CAAM,EAC7BA,EAAO,YAAY6rB,CAAK,EACxB,KAAK,iBAAmBA,EACxB,KAAK,aAAa,KAAK,KAAK,gBAAiB,CAAA,CAC/C,CAKA,SAAU,CACR,KAAK,yBAA2B,KAC1B,MAAA4a,EAAiB,KAAK,aAAa,IAAI,EAExCA,EAIH,KAAK,iBAAmBA,EAHxB,KAAK,iBAAmB,KAAK,UAC1B,WAAW,CAAC,EAIX,MAAAjvC,EAAQ,KAAK,aAAa,IAAI,EAChCA,GACF,KAAK,kBAAkBA,CAAK,CAEhC,CAKA,eAAe,EAAW,CAElB,MAAAwI,EAAS,KAAK,sBAChB,GAAAA,EAAO,WAAW,OAAS,EAAG,CAC5B,KAAK,iBAAiB,WAAa,SAChC,KAAK,2BACR,KAAK,yBAA2B,CAAE,QAASA,EAAQ,SAAU,CAAA,IAC/D,KAAK,yBAAyB,SAAS,KAAK,KAAK,gBAAgB,EACjE,KAAK,0BAA0B,GAE3B,MAAA6rB,EAAQ,KAAK,gBAAgB,GAAG,EACtC7rB,EAAO,YAAY6rB,CAAK,EACxB,KAAK,iBAAmBA,CAC1B,CAEA,IAAIub,EAAY,KAAK,iBAAiB,aAAa,WAAW,EAC1DA,EACWA,GAAA,IAEDA,EAAA,GAEDA,GAAA,EACR,KAAA,iBAAiB,aAAa,YAAaA,CAAS,CAC3D,CAKA,MAAMt3C,EAAWF,EAAY,CACvBA,IAAM,SACJA,EAAAE,GAEN,KAAK,eAAeq1C,GAAO,iBAAkB,CAAE,EAAAr1C,EAAM,EAAAF,CAAM,CAAA,CAAC,CAC9D,CAKA,OAAOquC,EAAe,CACd,MAAAoJ,EAAWpJ,EAAQ,IAAO,KAAK,GAChC,KAAA,eACHkH,GAAO,4BAA6B,CAClC,MAAOkC,EACP,GAAI,EACJ,GAAI,CAAA,CACL,CAAA,CAEL,CAKA,UAAUv3C,EAAWF,EAAW,CAC9B,KAAK,eAAeu1C,GAAO,qBAAsB,CAAE,EAAAr1C,EAAM,EAAAF,CAAM,CAAA,CAAC,CAClE,CAKA,UAAUpF,EAAWyE,EAAWjK,EAAWyD,EAAWzI,EAAWgP,EAAW,CACrE,KAAA,eACHm2C,GAAO,kCAAmC,CACxC,EAAA36C,EACA,EAAAyE,EACA,EAAAjK,EACA,EAAAyD,EACA,EAAAzI,EACA,EAAAgP,CAAA,CACD,CAAA,CAEL,CAKA,WAAY,CAGV,KAAK,qBAAuB,GAC5B,KAAK,kBAAoB,GAEzB,MAAMs4C,EAAO,KAAK,gBAAgB,OAAQ,CAAA,EAAI,EAAI,EACnC,KAAK,sBACb,YAAYA,CAAI,EACvB,KAAK,iBAAmBA,CAC1B,CAKA,2BAA4B,CAC1B,MAAMb,EAAiB,KAAK,iBACxBA,EAAe,WAAa,QACfA,EAAA,aAAa,IAAK,KAAK,oBAAoB,CAO9D,CAKA,iBAAiBc,EAAiB,CAChC,KAAK,sBAAwB,IAC7B,KAAK,sBAAwBA,CAC/B,CAMA,OAAOz3C,EAAWF,EAAW,CACvB,KAAK,iBAAiB,WAAa,QACrC,KAAK,UAAU,EAIZ,KAAA,kBAAoB,CAAE,EAAAE,EAAM,EAAAF,CAAK,EACtC,KAAK,iBAAiBu1C,GAAO,YAAa,KAAK,iBAAiB,CAAC,CACnE,CAKA,WAAY,CACN,KAAK,sBACP,KAAK,iBAAiB,GAAG,CAE7B,CAKA,OAAOr1C,EAAWF,EAAW,CACtB,KAAA,kBAAoB,CAAE,EAAAE,EAAM,EAAAF,CAAK,EAClC,KAAK,qBAAqB,QAAQ,GAAG,EAAI,GAC3C,KAAK,iBAAiBu1C,GAAO,YAAa,KAAK,iBAAiB,CAAC,EAEjE,KAAK,iBAAiBA,GAAO,YAAa,KAAK,iBAAiB,CAAC,CAErE,CAKA,cACEqC,EACAC,EACAC,EACAC,EACA73C,EACAF,EACA,CACK,KAAA,kBAAoB,CAAE,EAAAE,EAAM,EAAAF,CAAK,EACjC,KAAA,iBACHu1C,GAAO,wCAAyC,CAC9C,KAAAqC,EACA,KAAAC,EACA,KAAAC,EACA,KAAAC,EACA,EAAA73C,EACA,EAAAF,CAAA,CACD,CAAA,CAEL,CAKA,iBAAiBg4C,EAAaC,EAAa/3C,EAAWF,EAAW,CAC1D,KAAA,kBAAoB,CAAE,EAAAE,EAAM,EAAAF,CAAK,EACjC,KAAA,iBACHu1C,GAAO,wBAAyB,CAAE,IAAAyC,EAAU,IAAAC,EAAU,EAAA/3C,EAAM,EAAAF,EAAM,CAAA,CAEtE,CAKA,UAAUk4C,EAA0B,CAClC,MAAM3W,EAAM,KAAK,KAAK2W,EAAO,CAAC,EAAIA,EAAO,CAAC,EAAIA,EAAO,CAAC,EAAIA,EAAO,CAAC,CAAC,EAC5D,MAAA,CAACA,EAAO,CAAC,EAAI3W,EAAK2W,EAAO,CAAC,EAAI3W,CAAG,CAC1C,CAOA,MAAMtH,EAAYC,EAAYC,EAAYC,EAAY+d,EAAgB,CAEpE,MAAM35C,EAAK,KAAK,mBAAqB,KAAK,kBAAkB,EACtDN,EAAK,KAAK,mBAAqB,KAAK,kBAAkB,EAG5D,GAAI,OAAOM,EAAM,KAAe,OAAON,EAAM,IAC3C,OAIF,GAAIi6C,EAAS,EACX,MAAM,IAAI,MACR,wCAA0CA,EAAS,gBAAA,EASlD,GAAA35C,IAAOy7B,GAAM/7B,IAAOg8B,GAAQD,IAAOE,GAAMD,IAAOE,GAAO+d,IAAW,EAAG,CACnE,KAAA,OAAOle,EAAIC,CAAE,EAClB,MACF,CAKM,MAAAke,EAAiB,KAAK,UAAU,CAAC55C,EAAKy7B,EAAI/7B,EAAKg8B,CAAE,CAAC,EAClDme,EAAiB,KAAK,UAAU,CAACle,EAAKF,EAAIG,EAAKF,CAAE,CAAC,EAEtD,GAAAke,EAAe,CAAC,EAAIC,EAAe,CAAC,IACpCD,EAAe,CAAC,EAAIC,EAAe,CAAC,EACpC,CACK,KAAA,OAAOpe,EAAIC,CAAE,EAClB,MACF,CAQM,MAAAoV,EACJ8I,EAAe,CAAC,EAAIC,EAAe,CAAC,EACpCD,EAAe,CAAC,EAAIC,EAAe,CAAC,EAChCxF,EAAQ,KAAK,KAAK,KAAK,IAAIvD,CAAG,CAAC,EAG/BgJ,EAAqB,KAAK,UAAU,CACxCF,EAAe,CAAC,EAAIC,EAAe,CAAC,EACpCD,EAAe,CAAC,EAAIC,EAAe,CAAC,CAAA,CACrC,EACKE,EAAgBJ,EAAS,KAAK,IAAItF,EAAQ,CAAC,EAC3C3yC,EAAI+5B,EAAKse,EAAgBD,EAAmB,CAAC,EAC7Ct4C,EAAIk6B,EAAKqe,EAAgBD,EAAmB,CAAC,EAI7CE,EAAgC,CACpC,CAACJ,EAAe,CAAC,EACjBA,EAAe,CAAC,CAAA,EAGZK,EAA8B,CAACJ,EAAe,CAAC,EAAG,CAACA,EAAe,CAAC,CAAC,EACpEzjC,EAAW,SAAUsjC,EAAkB,CAErCh4C,MAAAA,EAAIg4C,EAAO,CAAC,EAElB,OADUA,EAAO,CAAC,GACT,EAEA,KAAK,KAAKh4C,CAAC,EAEX,CAAC,KAAK,KAAKA,CAAC,CACrB,EAEIw4C,EAAa9jC,EAAS4jC,CAA6B,EACnDG,EAAW/jC,EAAS6jC,CAA2B,EAGhD,KAAA,OACHv4C,EAAIs4C,EAA8B,CAAC,EAAIL,EACvCn4C,EAAIw4C,EAA8B,CAAC,EAAIL,CAAA,EAKzC,KAAK,IAAIj4C,EAAGF,EAAGm4C,EAAQO,EAAYC,CAAQ,CAC7C,CAKA,QAAS,CACH,KAAK,iBAAiB,WAAa,QAChC,KAAA,iBAAiB,aAAa,cAAe,qBAAqB,EAEzE,KAAK,0BAA0B,EAC/B,KAAK,6BAA6B,QAAQ,CAC5C,CAKA,MAAO,CACD,KAAK,iBAAiB,WAAa,QAChC,KAAA,iBAAiB,aAAa,cAAe,qBAAqB,EAEzE,KAAK,0BAA0B,EAC/B,KAAK,6BAA6B,MAAM,CAC1C,CAKA,KAAKz4C,EAAWF,EAAW6gC,EAAeC,EAAgB,CACpD,KAAK,iBAAiB,WAAa,QACrC,KAAK,UAAU,EAEZ,KAAA,OAAO5gC,EAAGF,CAAC,EACX,KAAA,OAAOE,EAAI2gC,EAAO7gC,CAAC,EACxB,KAAK,OAAOE,EAAI2gC,EAAO7gC,EAAI8gC,CAAM,EAC5B,KAAA,OAAO5gC,EAAGF,EAAI8gC,CAAM,EACpB,KAAA,OAAO5gC,EAAGF,CAAC,EAChB,KAAK,UAAU,CACjB,CAKA,SAASE,EAAWF,EAAW6gC,EAAeC,EAAgB,CAC5D,MAAM8X,EAAO,KAAK,gBAChB,OACA,CACE,EAAA14C,EACA,EAAAF,EACA,MAAA6gC,EACA,OAAAC,CACF,EACA,EAAA,EAEa,KAAK,sBACb,YAAY8X,CAAI,EACvB,KAAK,iBAAmBA,EACxB,KAAK,6BAA6B,MAAM,CAC1C,CAKA,WAAW14C,EAAWF,EAAW6gC,EAAeC,EAAgB,CAC9D,MAAM8X,EAAO,KAAK,gBAChB,OACA,CACE,EAAA14C,EACA,EAAAF,EACA,MAAA6gC,EACA,OAAAC,CACF,EACA,EAAA,EAEa,KAAK,sBACb,YAAY8X,CAAI,EACvB,KAAK,iBAAmBA,EACxB,KAAK,6BAA6B,QAAQ,CAC5C,CAOA,eAAgB,CAER,MAAApB,EADU,KAAK,sBACK,aAAa,WAAW,EAC5CqB,EAAY,KAAK,UAAU,WAAW,CAAC,EACvCC,EAAaD,EAAU,WAC7B,QAAS5mD,EAAI6mD,EAAW,OAAS,EAAG7mD,GAAK,EAAGA,IACtC6mD,EAAW7mD,CAAC,GACJ4mD,EAAA,YAAYC,EAAW7mD,CAAC,CAAC,EAGvC,KAAK,iBAAmB4mD,EAExB,KAAK,aAAe,GAChBrB,GACF,KAAK,eAAeA,CAAS,CAEjC,CAKA,UAAUt3C,EAAWF,EAAW6gC,EAAeC,EAAgB,CAEzD,GAAA5gC,IAAM,GAAKF,IAAM,GAAK6gC,IAAU,KAAK,OAASC,IAAW,KAAK,OAAQ,CACxE,KAAK,cAAc,EACnB,MACF,CACM,MAAA1wB,EAAS,KAAK,sBACdwoC,EAAO,KAAK,gBAChB,OACA,CACE,EAAA14C,EACA,EAAAF,EACA,MAAA6gC,EACA,OAAAC,EACA,KAAM,SACR,EACA,EAAA,EAEF1wB,EAAO,YAAYwoC,CAAI,CACzB,CAMA,qBAAqB3e,EAAYC,EAAYC,EAAYC,EAAY,CACnE,MAAM2e,EAAO,KAAK,gBAChB,iBACA,CACE,GAAIvD,GAAa,KAAK,KAAK,EAC3B,GAAIvb,EAAK,KACT,GAAIE,EAAK,KACT,GAAID,EAAK,KACT,GAAIE,EAAK,KACT,cAAe,gBACjB,EACA,EAAA,EAEG,YAAA,UAAU,YAAY2e,CAAI,EACxB,IAAI9B,GAAqB8B,EAA+B,IAAI,CACrE,CAMA,qBACEv6C,EACAN,EACAnB,EACAk9B,EACAC,EACAkY,EACA,CACA,MAAM2G,EAAO,KAAK,gBAChB,iBACA,CACE,GAAIvD,GAAa,KAAK,KAAK,EAC3B,GAAIvb,EAAK,KACT,GAAIC,EAAK,KACT,EAAGkY,EAAK,KACR,GAAI5zC,EAAK,KACT,GAAIN,EAAK,KACT,cAAe,gBACjB,EACA,EAAA,EAEG,YAAA,UAAU,YAAY66C,CAAI,EACxB,IAAI9B,GAAqB8B,EAA+B,IAAI,CACrE,CAKA,aAAc,CAGZ,MAAMC,EADJ,kXACqB,KAAK,KAAK,IAAI,EAC/Bv7B,EAAO,CACX,MAAOu7B,EAAS,CAAC,GAAK,SACtB,KAAMA,EAAS,CAAC,GAAK,OACrB,OAAQA,EAAS,CAAC,GAAK,aACvB,OAAQA,EAAS,CAAC,GAAK,SACvB,WAAYA,EAAS,CAAC,GAAK,SAC3B,KAAM,IAAA,EAIJ,OAAA,KAAK,kBAAoB,cAC3Bv7B,EAAK,WAAa,aAIhB,KAAK,aACPA,EAAK,KAAO,KAAK,YAGZA,CACT,CAKA,eAAew7B,EAA+B1nC,EAAsB,CAClE,GAAI0nC,EAAK,KAAM,CACP,MAAAr+C,EAAI,KAAK,gBAAgB,GAAG,EAClC,OAAAA,EAAE,eAAe,+BAAgC,aAAcq+C,EAAK,IAAI,EACxEr+C,EAAE,YAAY2W,CAAO,EACd3W,CACT,CACO,OAAA2W,CACT,CASA,YAAYk8B,EAAcvtC,EAAWF,EAAWmnB,EAA2B,CACnE,MAAA8xB,EAAO,KAAK,cAChB7oC,EAAS,KAAK,oBACd,EAAA8oC,EAAc,KAAK,gBACjB,OACA,CACE,cAAeD,EAAK,OACpB,YAAaA,EAAK,KAClB,aAAcA,EAAK,MACnB,cAAeA,EAAK,OACpB,kBAAmBA,EAAK,WACxB,EAAA/4C,EACA,EAAAF,EACA,cAAe41C,GAAc,KAAK,SAAS,EAC3C,oBAAqBG,GAAoB,KAAK,YAAY,CAC5D,EACA,EAAA,EAGJmD,EAAY,YAAY,KAAK,WAAW,eAAezL,CAAI,CAAC,EAC5D,KAAK,iBAAmByL,EACxB,KAAK,6BAA6B/xB,CAAM,EACjC/W,EAAA,YACL,KAAK,eAAe6oC,EAAMC,CAAqC,CAAA,CAEnE,CAQA,SAASzL,EAAcvtC,EAAWF,EAAW,CAC3C,KAAK,YAAYytC,EAAMvtC,EAAGF,EAAG,MAAM,CACrC,CAQA,WAAWytC,EAAcvtC,EAAWF,EAAW,CAC7C,KAAK,YAAYytC,EAAMvtC,EAAGF,EAAG,QAAQ,CACvC,CAOA,YAAYytC,EAAc,CACnB,YAAA,MAAM,KAAO,KAAK,KAChB,KAAK,MAAM,YAAYA,CAAI,CACpC,CAKA,IACEvtC,EACAF,EACAm4C,EACAO,EACAC,EACAQ,EACA,CAEA,GAAIT,IAAeC,EACjB,OAEWD,EAAAA,GAAc,EAAI,KAAK,IACzBC,EAAAA,GAAY,EAAI,KAAK,IAC5BD,IAAeC,IAGdA,GAAAA,EAAW,EAAI,KAAK,GAAK,MAASQ,EAAmB,GAAK,KAC1D,EAAI,KAAK,KAEd,MAAM3K,EAAOtuC,EAAIi4C,EAAS,KAAK,IAAIQ,CAAQ,EACzClK,EAAOzuC,EAAIm4C,EAAS,KAAK,IAAIQ,CAAQ,EACrCrK,EAASpuC,EAAIi4C,EAAS,KAAK,IAAIO,CAAU,EACzCnK,EAASvuC,EAAIm4C,EAAS,KAAK,IAAIO,CAAU,EACzCU,EAAYD,EAAmB,EAAI,EACrC,IAAIE,EAAe,EACftjB,EAAO4iB,EAAWD,EAGlB3iB,EAAO,IACTA,GAAQ,EAAI,KAAK,IAGfojB,EACaE,EAAAtjB,EAAO,KAAK,GAAK,EAAI,EAErBsjB,EAAAtjB,EAAO,KAAK,GAAK,EAAI,EAGjC,KAAA,OAAOuY,EAAQC,CAAM,EACrB,KAAA,iBACHgH,GACE,uEACA,CACE,GAAI4C,EACJ,GAAIA,EACJ,cAAe,EACf,aAAAkB,EACA,UAAAD,EACA,KAAA5K,EACA,KAAAC,CACF,CACF,CAAA,EAGF,KAAK,kBAAoB,CAAE,EAAGD,EAAM,EAAGC,EACzC,CAKA,MAAO,CACL,MAAMxS,EAAQ,KAAK,oBAAA,EACjBqd,EAAW,KAAK,gBAAgB,UAAU,EAC1C7yB,EAAK+uB,GAAa,KAAK,KAAK,EAC5B+D,EAAW,KAAK,gBAAgB,GAAG,EAErC,KAAK,0BAA0B,EACzBtd,EAAA,YAAY,KAAK,gBAAgB,EAC9Bqd,EAAA,aAAa,KAAM7yB,CAAE,EACrB6yB,EAAA,YAAY,KAAK,gBAAgB,EAErC,KAAA,UAAU,YAAYA,CAAQ,EAGnCrd,EAAM,aAAa,YAAasZ,GAAO,aAAc,CAAE,GAAA9uB,CAAQ,CAAA,CAAC,EAIhEwV,EAAM,YAAYsd,CAAQ,EAE1B,KAAK,iBAAmBA,CAC1B,CAOA,aAAa9pC,EAAa,CACxB,IAAI+vB,EAAQ/vB,EAAK,CAAC,EAChBqJ,EACAC,EACAygC,EACAC,EACApF,EAAK,EACLC,EAAK,EACLoF,EACAC,EACAC,EACAC,EACA5d,EACA6d,EACAra,EACAhZ,EAEE,GAAAhX,EAAK,SAAW,EAClBqJ,EAAKrJ,EAAK,CAAC,EACXsJ,EAAKtJ,EAAK,CAAC,EACXiqC,EAAKla,EAAM,MACXma,EAAKna,EAAM,OACNga,EAAAE,EACAD,EAAAE,UACIlqC,EAAK,SAAW,EACzBqJ,EAAKrJ,EAAK,CAAC,EACXsJ,EAAKtJ,EAAK,CAAC,EACX+pC,EAAK/pC,EAAK,CAAC,EACXgqC,EAAKhqC,EAAK,CAAC,EACXiqC,EAAKla,EAAM,MACXma,EAAKna,EAAM,eACF/vB,EAAK,SAAW,EACzB4kC,EAAK5kC,EAAK,CAAC,EACX6kC,EAAK7kC,EAAK,CAAC,EACXiqC,EAAKjqC,EAAK,CAAC,EACXkqC,EAAKlqC,EAAK,CAAC,EACXqJ,EAAKrJ,EAAK,CAAC,EACXsJ,EAAKtJ,EAAK,CAAC,EACX+pC,EAAK/pC,EAAK,CAAC,EACXgqC,EAAKhqC,EAAK,CAAC,MAEX,OAAM,IAAI,MACR,oDAAsD,UAAU,MAAA,EAI9D,MAAAW,EAAS,KAAK,sBACG,KAAK,iBAC5B,MAAM2pC,EAAqB,aAAejhC,EAAK,KAAOC,EAAK,IAC3D,GAAIymB,aAAiBiX,IAInB,GADAmD,EAAMpa,EAAM,OAAS,EAAA,UAAU,EAAI,EAC/Boa,EAAI,YAAcA,EAAI,WAAW,OAAS,EAAG,CAExC,IADAC,EAAAD,EAAI,WAAW,CAAC,EAChBC,EAAK,WAAW,QACrBpzB,EAAMozB,EAAK,WAAW,CAAC,EAAiB,aAAa,IAAI,EACpD,KAAA,MAAMpzB,CAAE,EAAIA,EACjB,KAAK,UAAU,YAAYozB,EAAK,WAAW,CAAC,CAAC,EAG/C,GADQ5d,EAAA2d,EAAI,WAAW,CAAC,EACpB3d,EAAO,CAEH,MAAA+d,EAAkB/d,EAAM,aAAa,WAAW,EAClD,IAAAge,EACAD,EACFC,EAAqBD,EAAkB,IAAMD,EAExBE,EAAAF,EAEjB9d,EAAA,aAAa,YAAage,CAAkB,EAClD7pC,EAAO,YAAY6rB,CAAK,CAC1B,CACF,OACSuD,EAAM,WAAa,UAAYA,EAAM,WAAa,SAEhDsa,EAAA,KAAK,gBAAgB,OAAO,EAC9BA,EAAA,aAAa,QAASN,CAAE,EACxBM,EAAA,aAAa,SAAUL,CAAE,EACzBK,EAAA,aAAa,sBAAuB,MAAM,GAE/CzF,GAAMC,GAAMoF,IAAOla,EAAM,OAASma,IAAOna,EAAM,UAExCC,EAAA,KAAK,WAAW,cAAc,QAAQ,EAC/CA,EAAO,MAAQ+Z,EACf/Z,EAAO,OAASga,EACAha,EAAO,WAAW,IAAI,GAC7B,UAAUD,EAAO6U,EAAIC,EAAIoF,EAAIC,EAAI,EAAG,EAAGH,EAAIC,CAAE,EAC9Cja,EAAAC,GAEDqa,EAAA,aAAa,YAAaC,CAAkB,EAC5CD,EAAA,eACP,+BACA,aACAta,EAAM,WAAa,SACfA,EAAM,YACNA,EAAM,aAAa,KAAK,CAAA,EAE9BpvB,EAAO,YAAY0pC,CAAQ,EAE/B,CAKA,cACEta,EACA0a,EACA,CACM,MAAAnO,EAAU,KAAK,WAAW,gBAC5B,6BACA,SAEF,EAAAtlB,EAAK+uB,GAAa,KAAK,KAAK,EAC1B,IAAA3Q,EACI,OAAAkH,EAAA,aAAa,KAAMtlB,CAAE,EAEzB+Y,EAAM,WAAa,UAAYA,EAAM,WAAa,OACpDqF,EAAM,KAAK,WAAW,gBACpB,6BACA,OAAA,EAEEA,EAAA,aACF,QACA,GAAMrF,EAA+C,KAAA,EAEnDqF,EAAA,aACF,SACA,GAAMrF,EAA+C,MAAA,EAEnDqF,EAAA,eACF,+BACA,aACArF,EAAM,WAAa,SACdA,EAA4B,YAC7BA,EAAM,aAAa,KAAK,CAAA,EAE9BuM,EAAQ,YAAYlH,CAAG,EAClB,KAAA,UAAU,YAAYkH,CAAO,GACzBvM,aAAiBiX,KAC1B1K,EAAQ,aAAa,QAAS,GAAMvM,EAA8B,KAAK,EAC/DuM,EAAA,aACN,SACA,GAAMvM,EAA8B,MAAA,EAEtCuM,EAAQ,YAAYvM,EAAM,UAAU,WAAW,CAAC,CAAC,EAC5C,KAAA,UAAU,YAAYuM,CAAO,GAE7B,IAAIiL,GAAoBjL,EAAkC,IAAI,CACvE,CAEA,YAAYoO,EAAqB,CAC3BA,GAAaA,EAAU,OAAS,EAC7B,KAAA,SAAWA,EAAU,KAAK,GAAG,EAElC,KAAK,SAAW,IAEpB,CAEA,eAAgB,CAEhB,CACA,iBAAkB,CAElB,CACA,cAAe,CAEf,CACA,cAAe,CAEf,CACA,0BAA2B,CAE3B,CACA,cAAe,CAEf,CACF,ECtzCOC,GAAA,KAAsB,CAC3B,OAEA,QAMA,cAGA,cAAwB,IAAI,OAC5B,QAAoB,CAAA,EAGpB,cAA2B,IAAI,UAK/B,wBAA0B,GAC1B,sBAAwB,GAExB,YACE3a,EACAoB,EACAC,EACAuZ,EAAsB,GACtB,CACA,KAAK,OAAS5a,EACT,KAAA,QAAUA,EAAO,WAAW,KAAM,CACrC,mBAAoB,EAAA,CACrB,EACG4a,IACG,KAAA,cAAgB,IAAI5D,GAAoB,CAC3C,OAAQ,KAAK,OACb,MAAO5V,GAAS,KAAK,OAAO,MAC5B,OAAQC,GAAU,KAAK,OAAO,MAAA,CAC/B,EAEL,CAEA,IAAI,UAAUwZ,EAAmB,CAC/B,KAAK,wBAA0B,GAC/B,KAAK,QAAQ,UAAYA,EACrB,KAAK,gBAAe,KAAK,cAAc,UAAYA,EACzD,CAEA,IAAI,WAAoB,CACtB,OAAO,KAAK,QAAQ,SACtB,CAEA,IAAI,QAAQC,EAAwB,CAClC,KAAK,wBAA0B,GAC/B,KAAK,QAAQ,QAAUA,EACnB,KAAK,gBAAe,KAAK,cAAc,QAAUA,EACvD,CAEA,IAAI,SAAyB,CAC3B,OAAO,KAAK,QAAQ,OACtB,CAEA,IAAI,SAASC,EAA0B,CACrC,KAAK,wBAA0B,GAC/B,KAAK,QAAQ,SAAWA,EACpB,KAAK,gBAAe,KAAK,cAAc,QAAUA,EACvD,CAEA,IAAI,UAA2B,CAC7B,OAAO,KAAK,QAAQ,QACtB,CAEA,IAAI,eAAeC,EAAwB,CACzC,KAAK,wBAA0B,GAC/B,KAAK,QAAQ,eAAiBA,EAC1B,KAAK,gBAAe,KAAK,cAAc,eAAiBA,EAC9D,CAEA,IAAI,gBAAyB,CAC3B,OAAO,KAAK,QAAQ,cACtB,CAEA,IAAI,WAAWC,EAAoB,CACjC,KAAK,wBAA0B,GAC/B,KAAK,QAAQ,WAAaA,EACtB,KAAK,gBAAe,KAAK,cAAc,WAAaA,EAC1D,CAEA,IAAI,YAAqB,CACvB,OAAO,KAAK,QAAQ,UACtB,CAEA,IAAI,YAAY5H,EAAe,CAC7B,KAAK,QAAQ,YAAcA,EACvB,KAAK,gBAAe,KAAK,cAAc,YAAcA,EAC3D,CAEA,IAAI,aAAsB,CACxB,OAAO,KAAK,QAAQ,WACtB,CAKA,IAAI,UACFiE,EAKA,CACA,KAAK,sBAAwB,GAE3B,OAAOA,GAAS,UAChBA,aAAiB,gBACjBA,aAAiB,eAEjB,KAAK,QAAQ,UAAYA,EACrB,KAAK,gBAAe,KAAK,cAAc,UAAYA,KAElD,KAAA,QAAQ,UAAYA,EAAM,SAC3B,KAAK,gBACF,KAAA,cAAc,UAAYA,EAAM,gBAE3C,CAEA,IAAI,WAAqD,CACvD,OAAO,KAAK,QAAQ,SACtB,CAEA,IAAI,YACFA,EAKA,CACA,KAAK,wBAA0B,GAE7B,OAAOA,GAAS,UAChBA,aAAiB,gBACjBA,aAAiB,eAEjB,KAAK,QAAQ,YAAcA,EACvB,KAAK,gBAAe,KAAK,cAAc,YAAcA,KAEpD,KAAA,QAAQ,YAAcA,EAAM,SAC7B,KAAK,gBACF,KAAA,cAAc,YAAcA,EAAM,gBAE7C,CAEA,IAAI,aAAuD,CACzD,OAAO,KAAK,QAAQ,WACtB,CAGA,IAAI,KAAKkC,EAAc,CACrB,KAAK,QAAQ,KAAOA,EAChB,KAAK,gBAAe,KAAK,cAAc,KAAOA,EACpD,CAEA,IAAI,MAAe,CACjB,OAAO,KAAK,QAAQ,IACtB,CAEA,IAAI,aAAajD,EAAkC,CACjD,KAAK,QAAQ,aAAeA,EACxB,KAAK,gBAAe,KAAK,cAAc,aAAeA,EAC5D,CAEA,IAAI,cAAmC,CACrC,OAAO,KAAK,QAAQ,YACtB,CAEA,IAAI,UAAUH,EAA4B,CACxC,KAAK,QAAQ,UAAYA,EACrB,KAAK,gBAAe,KAAK,cAAc,UAAYA,EACzD,CAEA,IAAI,WAA6B,CAC/B,OAAO,KAAK,QAAQ,SACtB,CAEA,KAAK6B,EAAe,CAClB,OAAIA,EACG,KAAA,QAAQ,KAAKA,CAAI,GAGtB,KAAK,QAAQ,OACT,KAAK,eAAe,KAAK,cAAc,QAEtC,IACT,CAEA,SAASx3C,EAAWF,EAAWC,EAAWtH,EAAW,CACnD,YAAK,QAAQ,SAASuH,EAAGF,EAAGC,EAAGtH,CAAC,EAC5B,KAAK,eAAe,KAAK,cAAc,SAASuH,EAAGF,EAAGC,EAAGtH,CAAC,EACvD,IACT,CAEA,SAAS80C,EAAcvtC,EAAWF,EAAW26C,EAA+B,CAC1E,YAAK,sBAAwB,GAC7B,KAAK,QAAQ,SAASlN,EAAMvtC,EAAGF,EAAG26C,CAAQ,EACtC,KAAK,eAAe,KAAK,cAAc,SAASlN,EAAMvtC,EAAGF,CAAC,EACvD,IACT,CAEA,YAAYm6C,EAAqB,CAC1B,YAAA,QAAQ,YAAYA,CAAS,EAC9B,KAAK,eAAoB,KAAA,cAAc,YAAYA,CAAS,EACzD,IACT,CAEA,OAAOzC,EAAe,CACpB,OAAIA,EACG,KAAA,QAAQ,OAAOA,CAAI,GAGxB,KAAK,QAAQ,SACT,KAAK,eAAe,KAAK,cAAc,UAEtC,IACT,CAEA,WACEjK,EACAvtC,EACAF,EACA26C,EACA,CACA,YAAK,QAAQ,WAAWlN,EAAMvtC,EAAGF,EAAG26C,CAAQ,EACxC,KAAK,eAAe,KAAK,cAAc,WAAWlN,EAAMvtC,EAAGF,CAAC,EACzD,IACT,CAEA,WAAWE,EAAWF,EAAWC,EAAWtH,EAAW,CACrD,YAAK,QAAQ,WAAWuH,EAAGF,EAAGC,EAAGtH,CAAC,EAC9B,KAAK,eAAe,KAAK,cAAc,WAAWuH,EAAGF,EAAGC,EAAGtH,CAAC,EACzD,IACT,CAEA,YAAY80C,EAA2B,CAC9B,OAAA,KAAK,QAAQ,YAAYA,CAAI,CAEtC,CAEA,UAAUvtC,EAAI,EAAGF,EAAI,EAAGC,EAAI,KAAK,OAAO,MAAOtH,EAAI,KAAK,OAAO,OAAQ,CACrE,YAAK,QAAQ,UAAUuH,EAAGF,EAAGC,EAAGtH,CAAC,EAC7B,KAAK,eAAe,KAAK,cAAc,UAAUuH,EAAGF,EAAGC,EAAGtH,CAAC,EACxD,IACT,CAEA,MAAO,CACL,YAAK,QAAQ,OACT,KAAK,eAAe,KAAK,cAAc,OACtC,KAAA,cAAgB,IAAI,UACpB,KAAA,QAAQ,KAAK,KAAK,aAAa,EAC/B,KAAA,cAAgB,IAAI,OAClB,IACT,CAEA,SAAU,CACR,YAAK,QAAQ,UACT,KAAK,eAAe,KAAK,cAAc,UAC3C,KAAK,wBAA0B,GAC/B,KAAK,sBAAwB,GACxB,KAAA,cAAgB,IAAI,UACzB,KAAK,cAAgB,KAAK,QAAQ,IAAI,GAAK,IAAI,OACxC,IACT,CAEA,WAAY,CACV,YAAK,QAAQ,YACT,KAAK,eAAe,KAAK,cAAc,YACpC,IACT,CAEA,WAAY,CACV,YAAK,QAAQ,YACT,KAAK,eAAe,KAAK,cAAc,YAC3C,KAAK,cAAc,YACZ,IACT,CAEA,aAAa++C,EAAO,KAAK,cAAeF,EAAY,KAAK,cAAe,CAChE,MAAAoD,EAAU,IAAI,OACZA,EAAA,QAAQlD,EAAMF,CAAS,EAC/B,KAAK,cAAgBoD,CACvB,CAIA,mBAAmBnrC,EAAsB,CACnC,OAAAA,EAAK,CAAC,YAAa,OACd,KAAK,QAAQ,gBAAgBA,EAAK,CAAC,EAAGA,EAAK,CAAC,EAAGA,EAAK,CAAC,CAAC,EAExD,KAAK,QAAQ,gBAAgBA,EAAK,CAAC,EAAGA,EAAK,CAAC,CAAC,CAEtD,CAIA,iBAAiBA,EAAsB,CACjC,OAAAA,EAAK,CAAC,YAAa,OACd,KAAK,QAAQ,cAAcA,EAAK,CAAC,EAAGA,EAAK,CAAC,EAAGA,EAAK,CAAC,CAAC,EAEtD,KAAK,QAAQ,cAAcA,EAAK,CAAC,EAAGA,EAAK,CAAC,CAAC,CAEpD,CAQA,UAAUvP,EAAWF,EAAW,CACzB,YAAA,QAAQ,UAAUE,EAAGF,CAAC,EACvB,KAAK,eACF,KAAA,cAAc,UAAUE,EAAGF,CAAC,EAE9B,KAAA,cAAc,UAAUE,EAAGF,CAAC,EACjC,KAAK,aAAa,EACX,IACT,CAEA,OAAOouC,EAAgByM,EAAU,EAAGC,EAAU,EAAG,CAE1C,YAAA,UAAUD,EAASC,CAAO,EAC1B,KAAA,QAAQ,OAAO1M,CAAM,EACtB,KAAK,eACF,KAAA,cAAc,OAAOA,CAAM,EAE7B,KAAA,cAAc,OAAOA,CAAM,EAChC,KAAK,UAAU,CAACyM,EAAS,CAACC,CAAO,EACjC,KAAK,aAAa,EACX,IACT,CAEA,MAAM56C,EAAWF,EAAIE,EAAG26C,EAAU,EAAGC,EAAU,EAAG,CAE3C,YAAA,UAAUD,EAASC,CAAO,EAC1B,KAAA,QAAQ,MAAM56C,EAAGF,CAAC,EACnB,KAAK,eACF,KAAA,cAAc,MAAME,EAAGF,CAAC,EAE1B,KAAA,cAAc,MAAME,EAAGF,CAAC,EAC7B,KAAK,UAAU,CAAC66C,EAAS,CAACC,CAAO,EACjC,KAAK,aAAa,EACX,IACT,CAEA,OAAO56C,EAAWF,EAAW,CACtB,YAAA,QAAQ,OAAOE,EAAGF,CAAC,EACpB,KAAK,eAAoB,KAAA,cAAc,OAAOE,EAAGF,CAAC,EACjD,KAAA,cAAc,OAAOE,EAAGF,CAAC,EACvB,IACT,CAEA,OAAOE,EAAWF,EAAW,CACtB,YAAA,QAAQ,OAAOE,EAAGF,CAAC,EACpB,KAAK,eAAoB,KAAA,cAAc,OAAOE,EAAGF,CAAC,EACjD,KAAA,cAAc,OAAOE,EAAGF,CAAC,EACvB,IACT,CAEA,IACEE,EACAF,EACAm4C,EACAO,EACAC,EACAQ,EACA,CACA,YAAK,QAAQ,IAAIj5C,EAAGF,EAAGm4C,EAAQO,EAAYC,EAAUQ,CAAgB,EACjE,KAAK,eACP,KAAK,cAAc,IACjBj5C,EACAF,EACAm4C,EACAO,EACAC,EACAQ,EAAmB,GAAK,CAAA,EAE5B,KAAK,cAAc,IACjBj5C,EACAF,EACAm4C,EACAO,EACAC,EACAQ,CAAA,EAEK,IACT,CAEA,MAAMlf,EAAYC,EAAYC,EAAYC,EAAY+d,EAAgB,CACpE,YAAK,QAAQ,MAAMle,EAAIC,EAAIC,EAAIC,EAAI+d,CAAM,EACrC,KAAK,eAAe,KAAK,cAAc,MAAMle,EAAIC,EAAIC,EAAIC,EAAI+d,CAAM,EACvE,KAAK,cAAc,MAAMle,EAAIC,EAAIC,EAAIC,EAAI+d,CAAM,EACxC,IACT,CAEA,QACEj4C,EACAF,EACA+6C,EACAC,EACAC,EACAvC,EACAC,EACAQ,EACA,CACA,YAAK,QAAQ,QACXj5C,EACAF,EACA+6C,EACAC,EACAC,EACAvC,EACAC,EACAQ,CAAA,EAGF,KAAK,cAAc,QACjBj5C,EACAF,EACA+6C,EACAC,EACAC,EACAvC,EACAC,EACAQ,CAAA,EAEK,IACT,CAEA,iBAAiBnB,EAAaC,EAAa/3C,EAAWF,EAAW,CAC/D,YAAK,QAAQ,iBAAiBg4C,EAAKC,EAAK/3C,EAAGF,CAAC,EACxC,KAAK,eAAe,KAAK,cAAc,iBAAiBg4C,EAAKC,EAAK/3C,EAAGF,CAAC,EAC1E,KAAK,cAAc,iBAAiBg4C,EAAKC,EAAK/3C,EAAGF,CAAC,EAC3C,IACT,CAEA,cACE43C,EACAC,EACAC,EACAC,EACA73C,EACAF,EACA,CACA,YAAK,QAAQ,cAAc43C,EAAMC,EAAMC,EAAMC,EAAM73C,EAAGF,CAAC,EACnD,KAAK,eACP,KAAK,cAAc,cAAc43C,EAAMC,EAAMC,EAAMC,EAAM73C,EAAGF,CAAC,EAC/D,KAAK,cAAc,cAAc43C,EAAMC,EAAMC,EAAMC,EAAM73C,EAAGF,CAAC,EACtD,IACT,CAEA,KAAKE,EAAWF,EAAWC,EAAWtH,EAAW,CAC/C,YAAK,QAAQ,KAAKuH,EAAGF,EAAGC,EAAGtH,CAAC,EACxB,KAAK,eAAe,KAAK,cAAc,KAAKuH,EAAGF,EAAGC,EAAGtH,CAAC,EAC1D,KAAK,cAAc,KAAKuH,EAAGF,EAAGC,EAAGtH,CAAC,EAC3B,IACT,CAGA,qBACEshC,EACAC,EACAC,EACAC,EACA8gB,EACA,CACM,MAAAC,EAA2B,KAAK,QAAQ,qBAC5ClhB,EACAC,EACAC,EACAC,CAAA,EAIF,OAAI8gB,GACK,OAAA,QAAQA,CAAU,EAAE,QAAQ,CAAC,CAACvqC,EAAKgJ,CAAK,IAAM,CACnDwhC,EAAS,aAAa,WAAWxqC,CAAG,EAAGgJ,CAAK,CAAA,CAE7C,EAEIwhC,CAKT,CAEA,qBACE38C,EACAN,EACAnB,EACAk9B,EACAC,EACAkY,EACA8I,EACA,CACM,MAAAC,EAA2B,KAAK,QAAQ,qBAC5C38C,EACAN,EACAnB,EACAk9B,EACAC,EACAkY,CAAA,EAIF,OAAI8I,GACK,OAAA,QAAQA,CAAU,EAAE,QAAQ,CAAC,CAACvqC,EAAKgJ,CAAK,IAAM,CACnDwhC,EAAS,aAAa,WAAWxqC,CAAG,EAAGgJ,CAAK,CAAA,CAE7C,EAEIwhC,CAKT,CAOA,UACE5pC,KAMG9B,EACH,CACI,GAAAA,EAAK,SAAW,EAClB,KAAK,QAAQ,UAAU8B,EAAS,EAAG,CAAC,UAC3B9B,EAAK,SAAW,EAAG,CACtB,MAAAqJ,EAAKrJ,EAAK,CAAC,EACXsJ,EAAKtJ,EAAK,CAAC,EACjB,KAAK,QAAQ,UAAU8B,EAASuH,EAAIC,CAAE,CAAA,SAC7BtJ,EAAK,SAAW,EAAG,CACtB,MAAAqJ,EAAKrJ,EAAK,CAAC,EACXsJ,EAAKtJ,EAAK,CAAC,EACX+pC,EAAK/pC,EAAK,CAAC,EACXgqC,EAAKhqC,EAAK,CAAC,EACjB,KAAK,QAAQ,UAAU8B,EAASuH,EAAIC,EAAIygC,EAAIC,CAAE,CAAA,SACrChqC,EAAK,SAAW,EAAG,CACtB,MAAA4kC,EAAK5kC,EAAK,CAAC,EACX6kC,EAAK7kC,EAAK,CAAC,EACXiqC,EAAKjqC,EAAK,CAAC,EACXkqC,EAAKlqC,EAAK,CAAC,EACXqJ,EAAKrJ,EAAK,CAAC,EACXsJ,EAAKtJ,EAAK,CAAC,EACX+pC,EAAK/pC,EAAK,CAAC,EACXgqC,EAAKhqC,EAAK,CAAC,EACZ,KAAA,QAAQ,UAAU8B,EAAS8iC,EAAIC,EAAIoF,EAAIC,EAAI7gC,EAAIC,EAAIygC,EAAIC,CAAE,CAAA,KAE9D,OAAM,IAAI,MACR,oDAAsDhqC,EAAK,MAAA,EAG/D,OAAI,KAAK,eAAe,KAAK,cAAc,UAAU8B,EAAS,GAAG9B,CAAI,EAC9D,IACT,CAEA,aACE4kC,EAAK,EACLC,EAAK,EACLoF,EAAK,KAAK,OAAO,MACjBC,EAAK,KAAK,OAAO,OACjByB,EACW,CACX,OAAO,KAAK,QAAQ,aAAa/G,EAAIC,EAAIoF,EAAIC,EAAIyB,CAAQ,CAE3D,CAEA,aAAaxb,EAAsB9mB,EAAK,EAAGC,EAAK,EAAG,CACjD,OAAO,KAAK,QAAQ,aAAa6mB,EAAW9mB,EAAIC,CAAE,CAEpD,CAEA,cACEymB,EAOA0a,EACsB,CACtB,OAAO,KAAK,QAAQ,cAAc1a,EAAO0a,CAAU,CAErD,CAEA,UAAW,CACT,GAAI,KAAK,cAAe,CACtB,MAAMmB,EAAwB,KAAK,cAAc,iBAAiB,EAAI,EAChEC,EAAyB,KAAK,cAAc,OAAO,EACzD,MAAO,CAAE,IAAKD,EAAe,QAASC,CAAW,CAAA,KAEjD,OAAO,CAAE,IAAK,GAAI,QAAS,IAAK,CAEpC,CACF,EC3oBOC,GAAA,KAAQ,CACb,EACA,EACA,IACA,IAEA,YAAY3wC,EAAqB,CAC1B,KAAA,EAAIA,GAAS,GAAK,EAClB,KAAA,EAAIA,GAAS,GAAK,EAClB,KAAA,IAAMA,GAAS,KAAO,EACtB,KAAA,IAAMA,GAAS,KAAO,CAC7B,CAEA,eAAsC,CACpC,MAAO,CAAC,CAAC,IAAK,KAAK,IAAK,KAAK,GAAG,CAAC,CACnC,CAEA,gBAAgB80B,EAAsB,CACpCA,EAAI,OAAO,KAAK,IAAK,KAAK,GAAG,CAC/B,CAEA,uBAAwB,CAChB,MAAA8b,EAAYnN,GAAM,KAAK,EAAG,KAAK,EAAG,KAAK,IAAK,KAAK,GAAG,EAC1D,GAAImN,IAAc,EAAG,CACnB,MAAMC,EAAO,KAAK,IAAI,KAAK,EAAG,KAAK,GAAG,EAChCC,EAAO,KAAK,IAAI,KAAK,EAAG,KAAK,GAAG,EAChCC,EAAO,KAAK,IAAI,KAAK,EAAG,KAAK,GAAG,EAChCC,EAAO,KAAK,IAAI,KAAK,EAAG,KAAK,GAAG,EAC/B,MAAA,CACL,EAAGH,EACH,EAAGC,EACH,MAAOC,EAAOF,EACd,OAAQG,EAAOF,CAAA,CACjB,KACK,CACC,MAAAjM,EAAM,KAAK,IAAI+L,CAAS,EACxBlM,EAAM,KAAK,IAAIkM,CAAS,EACxBK,EAAMvM,EAAM,KAAK,EAAIG,EAAM,KAAK,EAChCqM,EAAMxM,EAAM,KAAK,IAAMG,EAAM,KAAK,IAClCsM,EAAMzM,EAAM,KAAK,EAAIG,EAAM,KAAK,EAChCuM,EAAM1M,EAAM,KAAK,IAAMG,EAAM,KAAK,IACjC,MAAA,CACL,EAAG,KAAK,IAAIoM,EAAKC,CAAG,EACpB,EAAG,KAAK,IAAIC,EAAKC,CAAG,EACpB,MAAO,KAAK,IAAIH,EAAKC,CAAG,EAAI,KAAK,IAAID,EAAKC,CAAG,EAC7C,OAAQ,KAAK,IAAIC,EAAKC,CAAG,EAAI,KAAK,IAAID,EAAKC,CAAG,CAAA,CAElD,CACF,CAGA,YAAY,EAAqC,CACxC,MAAA,CACL,EAAG,KAAK,EAAI,GAAK,KAAK,IAAM,KAAK,GACjC,EAAG,KAAK,EAAI,GAAK,KAAK,IAAM,KAAK,EAAA,CAErC,CAEA,aAAaC,EAA0C,CACrD,MAAMhiB,EAAK,KAAK,EACVC,EAAK,KAAK,EACVgiB,EAAKD,EAAK,IACVE,EAAKF,EAAK,IACVG,EAAM,KAAK,IAAMniB,EACjBoiB,EAAMJ,EAAK,EAAIC,EACjB,GAAA,CAACE,GAAO,CAACC,EACJ,OAAA,KAEH,MAAAC,GAAM,KAAK,IAAMpiB,GAAMkiB,EACvBG,GAAMN,EAAK,EAAIE,GAAME,EAC3B,GAAKD,GAGL,GAAW,CAACC,EAEV,MAAO,CAAE,EAAGH,EAAI,EAAGI,GAAMJ,EAAKjiB,GAAMC,OAHpC,OAAO,CAAE,EAAGD,EAAI,EAAGsiB,GAAMtiB,EAAKiiB,GAAMC,GAKhC,MAAAK,GAAQ,CAACD,EAAKL,EAAKC,EAAKG,EAAKriB,EAAKC,IAAOoiB,EAAKC,GAC9CE,EAAOH,GAAME,EAAOviB,GAAMC,EAChC,OAAI,MAAMsiB,CAAI,GAAK,MAAMC,CAAI,EACpB,KAEF,CAAE,EAAGD,EAAM,EAAGC,CAAK,CAC5B,CACF,EC4CA,MAAAC,GA9HO,cAAkBvgD,EAAE,CAElB,GAEA,GAEA,YAEA,aAEA,UAEP,YAAYyO,EAAuB,CACjC,MAAMA,CAAO,EACb,KAAK,GAAKA,EAAQ,GAClB,KAAK,GAAKA,EAAQ,GACb,KAAA,YAAcA,GAAS,aAAe,EACtC,KAAA,aAAeA,GAAS,cAAgB,EACxC,KAAA,UAAYA,GAAS,WAAa,EACvC,KAAK,IAAMA,EAAQ,IACnB,KAAK,IAAMA,EAAQ,GACrB,CAGA,eAAsC,CAC7B,MAAA,CACL,CACE,IACA,KAAK,GACL,KAAK,GACL,KAAK,YACL,KAAK,aACL,KAAK,UACL,KAAK,IACL,KAAK,GACP,CAAA,CAEJ,CAEA,gBAAgB80B,EAA4B,CACpC,KAAA,CAACid,EAAIC,EAAIC,EAAIC,EAAIC,EAAarE,EAAYC,CAAQ,EAAI,KAAK,QAC/D,KAAK,EACL,KAAK,EACL,KAAK,IACL,KAAK,IACL,KAAK,GACL,KAAK,GACL,KAAK,YACL,KAAK,aACL,KAAK,SAAA,EAEHjZ,EAAA,QACFid,EACAC,EACAC,EACAC,EACAC,EACArE,EACAC,EACA,CAAC,KAAK,SAAA,CAIV,CAEA,QACE1e,EACAC,EACAC,EACAC,EACAyiB,EACAC,EACAE,EACA74C,EACAjS,EACA,CACM,MAAA0G,EAAKokD,EAAM,IAAO,KAAK,GACvBC,GAAOhjB,EAAKE,GAAM,EAClB+iB,GAAOhjB,EAAKE,GAAM,EAElB+iB,EAAO,KAAK,IAAIvkD,CAAC,EAAIqkD,EAAM,KAAK,IAAIrkD,CAAC,EAAIskD,EACzCE,EAAO,CAAC,KAAK,IAAIxkD,CAAC,EAAIqkD,EAAM,KAAK,IAAIrkD,CAAC,EAAIskD,EAE1CG,EACHF,EAAOA,GAASN,EAAKA,GAAOO,EAAOA,GAASN,EAAKA,GACpD,GAAIO,EAAqB,EAAG,CAKpB,MAAAC,EAAO,KAAK,KAAKD,CAAkB,EACzC,MAAAR,EAAKS,EAAOT,EACZC,EAAKQ,EAAOR,EAEN,IAAI,MACR,2DAA2DD,CAAE,IAAIC,CAAE,GAAA,CAEvE,CAEA,MAAMS,EAAK,KAAK,MACbV,EAAKA,EAAKC,EAAKA,EAAKD,EAAKA,EAAKO,EAAOA,EAAON,EAAKA,EAAKK,EAAOA,IAC3DN,EAAKA,EAAKO,EAAOA,EAAON,EAAKA,EAAKK,EAAOA,EAAA,EAGxCtrD,EAAIsS,GAAMjS,EAAK,EAAI,GACnBsrD,EAAQ3rD,EAAI0rD,EAAKV,EAAKO,EAAQN,EAC9BW,EAAQ5rD,EAAI0rD,EAAK,CAACT,EAAKK,EAAQN,EAE/Ba,GAASzjB,EAAKE,GAAM,EACpBwjB,GAASzjB,EAAKE,GAAM,EACpBuiB,EAAK,KAAK,IAAI/jD,CAAC,EAAI4kD,EAAO,KAAK,IAAI5kD,CAAC,EAAI6kD,EAAOC,EAC/Cd,EAAK,KAAK,IAAIhkD,CAAC,EAAI4kD,EAAO,KAAK,IAAI5kD,CAAC,EAAI6kD,EAAOE,EAE/CC,EAAc,CAACC,EAAYC,EAAY7K,GAAYC,MACtD2K,EAAK3K,IAAM4K,EAAK7K,GAAK,EAAI,IAC1B,KAAK,MACF4K,EAAK5K,GAAK6K,EAAK5K,KACb,KAAK,KAAK2K,EAAKA,EAAKC,EAAKA,CAAE,EAAI,KAAK,KAAK7K,GAAKA,GAAKC,GAAKA,EAAE,EAAA,EAE3D6K,EAAUH,EAAY,EAAG,EAAG3jB,EAAK0iB,EAAIziB,EAAK0iB,CAAE,EAAIhkD,EAChDolD,EAAcJ,EAAY3jB,EAAK0iB,EAAIziB,EAAK0iB,EAAIziB,EAAKwiB,EAAIviB,EAAKwiB,CAAE,EAE3D,MAAA,CAACD,EAAIC,EAAIC,EAAIC,EAAIlkD,EAAGmlD,EAASA,EAAUC,CAAW,CAC3D,CACF,EChDAC,GA9EO,cAA8B9hD,EAAE,CAC9B,GACA,GACA,cAEP,YAAYyO,EAAkC,CAC5C,MAAMA,CAAO,EACb,KAAK,GAAKA,EAAQ,GAClB,KAAK,GAAKA,EAAQ,GAClB,KAAK,cACH,OAAOA,EAAQ,eAAiB,UAAYA,EAAQ,cAAgB,EACxE,CAIA,eAAsC,CACpC,GAAI,KAAK,cAAe,CACtB,MAAMszC,EAAM,KAAK,GAAK,GAAK,KAAK,EAAI,KAAK,KAAO,EAC1CC,EAAM,KAAK,GAAK,GAAK,KAAK,EAAI,KAAK,KAAO,EACzC,MAAA,CAAC,CAAC,IAAKD,EAAKC,EAAK,KAAK,IAAK,KAAK,GAAG,CAAC,CAAA,KAEpC,OAAA,CAAC,CAAC,IAAK,KAAK,GAAI,KAAK,GAAI,KAAK,IAAK,KAAK,GAAG,CAAC,CAEvD,CAEA,gBAAgBze,EAAsB,CACpC,GAAI,KAAK,cAAe,CACtB,MAAMwe,EAAM,KAAK,GAAK,GAAK,KAAK,EAAI,KAAK,KAAO,EAC1CC,EAAM,KAAK,GAAK,GAAK,KAAK,EAAI,KAAK,KAAO,EAChDze,EAAI,iBAAiBwe,EAAKC,EAAK,KAAK,IAAK,KAAK,GAAG,CAAA,MAE7Cze,EAAA,iBAAiB,KAAK,GAAI,KAAK,GAAI,KAAK,IAAK,KAAK,GAAG,CAE7D,CAEA,uBAAwB,CACtB,MAAM0e,EAAO,CAAC,KAAK,EAAG,KAAK,GAAG,EACxBC,EAAO,CAAC,KAAK,EAAG,KAAK,GAAG,EAC1B,IAAAzjD,EAAGyE,EAAGjK,EAAG0K,EACb,QAAS7N,EAAI,EAAGA,EAAI,EAAG,EAAEA,EACvB2I,EACE3I,GAAK,EACD,KAAK,EAAI,EAAI,KAAK,GAAK,KAAK,IAC5B,KAAK,EAAI,EAAI,KAAK,GAAK,KAAK,IAClCoN,EAAIpN,GAAK,EAAI,GAAK,KAAK,EAAI,EAAI,KAAK,GAAK,GAAK,KAAK,EAAI,EAAI,KAAK,GAChEmD,EAAInD,GAAK,EAAI,KAAK,EAAI,KAAK,EACvB,KAAK,IAAI2I,CAAC,EAAI,QACZkF,EAAA,CAACT,GAAK,EAAIzE,GACV,EAAIkF,GAAKA,EAAI,GACd,CAAAs+C,EAAMC,CAAI,EAAEpsD,CAAC,EAAE,KAAK2I,EAAIkF,EAAIA,EAAIT,EAAIS,EAAI1K,CAAC,GAIhD,MAAM24C,EAAM,CAAE,EAAG,KAAK,IAAI,MAAM,EAAGqQ,CAAI,EAAG,EAAG,KAAK,IAAI,MAAM,EAAGC,CAAI,GAC7Dzc,EAAM,CAAE,EAAG,KAAK,IAAI,MAAM,EAAGwc,CAAI,EAAG,EAAG,KAAK,IAAI,MAAM,EAAGC,CAAI,GAC5D,MAAA,CACL,EAAGtQ,EAAI,EACP,EAAGA,EAAI,EACP,MAAOnM,EAAI,EAAImM,EAAI,EACnB,OAAQnM,EAAI,EAAImM,EAAI,CAAA,CAExB,CAGA,YAAY,EAAqC,CACxC,MAAA,CACL,GACG,EAAI,IAAM,EAAI,GAAK,KAAK,EACzB,GAAK,EAAI,GAAK,EAAI,KAAK,GACvB,EAAI,EAAI,KAAK,IACf,GACG,EAAI,IAAM,EAAI,GAAK,KAAK,EACzB,GAAK,EAAI,GAAK,EAAI,KAAK,GACvB,EAAI,EAAI,KAAK,GAAA,CAEnB,CACF,ECwQAuQ,GAnVO,MAAMC,WAAoBpiD,EAAE,CAC1B,IACA,IACA,IACA,IAEP,YAAYyO,EAA8B,CACxC,MAAMA,CAAO,EACb,KAAK,IAAMA,EAAQ,IACnB,KAAK,IAAMA,EAAQ,IACnB,KAAK,IAAMA,EAAQ,IACnB,KAAK,IAAMA,EAAQ,GACrB,CAIA,eAAsC,CACpC,MAAO,CAAC,CAAC,IAAK,KAAK,IAAK,KAAK,IAAK,KAAK,IAAK,KAAK,IAAK,KAAK,IAAK,KAAK,GAAG,CAAC,CAC3E,CAEA,gBAAgB80B,EAAsB,CAChCA,EAAA,cACF,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,GAAA,CAET,CAEA,uBAAwB,CA6EtB,IAAI9kC,EACF,KAAK,IAAM,EAAI,KAAK,IAAM,KAAK,GAAK,KAAK,IAAM,EAAI,KAAK,IAAM,KAAK,KACjEyE,EAAI,GAAK,KAAK,IAAM,KAAK,GAAK,GAAK,KAAK,IAAM,KAAK,KACnDjK,EAAI,KAAK,EAAI,KAAK,IAClBopD,GAAM,CAACn/C,EAAI,KAAK,KAAKA,EAAIA,EAAI,EAAIzE,EAAIxF,CAAC,GAAK,EAAIwF,EAC/C+/B,GAAM,CAACt7B,EAAI,KAAK,KAAKA,EAAIA,EAAI,EAAIzE,EAAIxF,CAAC,GAAK,EAAIwF,EACnD,MAAMoF,EAAI,CAAC,KAAK,EAAG,KAAK,GAAG,EACrBE,EAAI,CAAC,KAAK,EAAG,KAAK,GAAG,EACvB,IAAAu+C,EACJ,MAAMC,EAAO,CAAA,EACb,KAAK,IAAIF,CAAE,EAAI,OAASA,EAAK,IAC7B,KAAK,IAAI7jB,CAAE,EAAI,OAASA,EAAK,IACzB6jB,GAAM,GAAKA,GAAM,IACbC,EAAA,KAAK,YAAYD,CAAE,EACvBt+C,EAAA,KAAKu+C,EAAI,CAAC,EACVz+C,EAAA,KAAKy+C,EAAI,CAAC,EACPC,EAAA,KAAK,CAAE,EAAGD,EAAI,EAAG,EAAGA,EAAI,EAAG,GAE9B9jB,GAAM,GAAKA,GAAM,IACb8jB,EAAA,KAAK,YAAY9jB,CAAE,EACvBz6B,EAAA,KAAKu+C,EAAI,CAAC,EACVz+C,EAAA,KAAKy+C,EAAI,CAAC,EACPC,EAAA,KAAK,CAAE,EAAGD,EAAI,EAAG,EAAGA,EAAI,EAAG,GAElC7jD,EAAI,KAAK,IAAM,EAAI,KAAK,IAAM,KAAK,GAAK,KAAK,IAAM,EAAI,KAAK,IAAM,KAAK,KACnEyE,EAAA,GAAK,KAAK,IAAM,KAAK,GAAK,GAAK,KAAK,IAAM,KAAK,KAC/CjK,EAAA,KAAK,EAAI,KAAK,IACZopD,GAAA,CAACn/C,EAAI,KAAK,KAAKA,EAAIA,EAAI,EAAIzE,EAAIxF,CAAC,GAAK,EAAIwF,EACzC+/B,GAAA,CAACt7B,EAAI,KAAK,KAAKA,EAAIA,EAAI,EAAIzE,EAAIxF,CAAC,GAAK,EAAIwF,EAC/C,KAAK,IAAI4jD,CAAE,EAAI,OAASA,EAAK,IAC7B,KAAK,IAAI7jB,CAAE,EAAI,OAASA,EAAK,IACzB6jB,GAAM,GAAKA,GAAM,IACbC,EAAA,KAAK,YAAYD,CAAE,EACvBt+C,EAAA,KAAKu+C,EAAI,CAAC,EACVz+C,EAAA,KAAKy+C,EAAI,CAAC,EACPC,EAAA,KAAK,CAAE,EAAGD,EAAI,EAAG,EAAGA,EAAI,EAAG,GAE9B9jB,GAAM,GAAKA,GAAM,IACb8jB,EAAA,KAAK,YAAY9jB,CAAE,EACvBz6B,EAAA,KAAKu+C,EAAI,CAAC,EACVz+C,EAAA,KAAKy+C,EAAI,CAAC,EACPC,EAAA,KAAK,CAAE,EAAGD,EAAI,EAAG,EAAGA,EAAI,EAAG,GAGlC,MAAME,EAAQ,CAAA,EACRlpD,EAAIipD,EAAK,OACf,QAASzsD,EAAI,EAAGA,EAAIwD,EAAGxD,IAAK,CAC1B,QAAS4E,EAAI5E,EAAI,EAAG4E,EAAIpB,EAAGoB,IACrB6nD,EAAKzsD,CAAC,EAAE,IAAMysD,EAAK7nD,CAAC,EAAE,GAAK6nD,EAAKzsD,CAAC,EAAE,IAAMysD,EAAK7nD,CAAC,EAAE,IAAGA,EAAI,EAAE5E,GAEhE0sD,EAAM,KAAK,CAAE,EAAGD,EAAKzsD,CAAC,EAAE,EAAG,EAAGysD,EAAKzsD,CAAC,EAAE,CAAG,CAAA,CAC3C,CACA,MAAM87C,EAAM,CAAE,EAAG,KAAK,IAAI,MAAM,KAAM7tC,CAAC,EAAG,EAAG,KAAK,IAAI,MAAM,KAAMF,CAAC,GAC7D4hC,EAAM,CAAE,EAAG,KAAK,IAAI,MAAM,KAAM1hC,CAAC,EAAG,EAAG,KAAK,IAAI,MAAM,KAAMF,CAAC,GAC5D,MAAA,CACL,EAAG+tC,EAAI,EACP,EAAGA,EAAI,EACP,MAAOnM,EAAI,EAAImM,EAAI,EACnB,OAAQnM,EAAI,EAAImM,EAAI,EACpB,KAAM4Q,CAAA,CAEV,CAGA,YAAY,EAAqC,CACxC,MAAA,CACL,EACE,KAAK,IAAI,EAAI,EAAG,CAAC,EAAI,KAAK,EAC1B,EAAI,KAAK,IAAI,EAAI,EAAG,CAAC,EAAI,EAAI,KAAK,IAClC,EAAI,KAAK,IAAI,EAAI,EAAG,CAAC,EAAI,KAAK,IAAI,EAAG,CAAC,EAAI,KAAK,IAC/C,KAAK,IAAI,EAAG,CAAC,EAAI,KAAK,IACxB,EACE,KAAK,IAAI,EAAI,EAAG,CAAC,EAAI,KAAK,EAC1B,EAAI,KAAK,IAAI,EAAI,EAAG,CAAC,EAAI,EAAI,KAAK,IAClC,EAAI,KAAK,IAAI,EAAI,EAAG,CAAC,EAAI,KAAK,IAAI,EAAG,CAAC,EAAI,KAAK,IAC/C,KAAK,IAAI,EAAG,CAAC,EAAI,KAAK,GAAA,CAE5B,CAEA,OAAO,MACL,EACA1oC,EACAC,EACAukB,EACAmkB,EACQ,CACR,MAAMJ,EAAK,GAAKvoC,EAAK,EAAIC,EAAK,EAAIukB,EAAK,EAAImkB,EACrCjkB,EAAK,EAAI6jB,EAAK,EAAIvoC,EAAK,GAAKC,EAAK,EAAIukB,EAC3C,OAAO,EAAIE,EAAK,EAAI1kB,EAAK,EAAIC,CAC/B,CAOA,OAAO,OACL+jB,EACAC,EACAC,EACAC,EACAykB,EACAC,EACA5C,EACAC,EACAz5C,EAAI,EACI,CACRA,EAAI,KAAK,IAAI,EAAG,KAAK,IAAIA,EAAG,CAAC,CAAC,EAC9B,MAAMq8C,EAAKr8C,EAAI,EACTs8C,EAAU,CACd,OAAS,MAAQ,OAAS,MAAQ,OAAS,MAAQ,OAAS,MAC5D,OAAS,MAAQ,OAAS,KAAA,EAEtBC,EAAU,CACd,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAChE,MAAQ,MAAQ,KAAA,EAElB,IAAIC,EAAM,EAEV,QAASjtD,EAAI,EAAGA,EAAI,GAAIA,IAAK,CAC3B,MAAMR,EAAKstD,EAAKC,EAAQ/sD,CAAC,EAAI8sD,EACvBI,EAAQ,KAAK,MAAM1tD,EAAIwoC,EAAIE,EAAI0kB,EAAI3C,CAAE,EACrCkD,EAAQ,KAAK,MAAM3tD,EAAIyoC,EAAIE,EAAI0kB,EAAI3C,CAAE,EACpC+C,GAAAD,EAAQhtD,CAAC,EAAI,KAAK,KAAKktD,EAAQA,EAAQC,EAAQA,CAAK,CAC7D,CACA,OAAOL,EAAKG,CACd,CAEA,OAAOx8C,EAAI,EAAW,CACpB,OAAO67C,GAAY,OACjB,KAAK,EACL,KAAK,EACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL77C,CAAA,CAEJ,CAGA,UAAU28C,EAAoB,CAC5B,MAAMplB,EAAK,KAAK,EACVC,EAAK,KAAK,EACVC,EAAK,KAAK,IACVC,EAAK,KAAK,IACVykB,EAAK,KAAK,IACVC,EAAK,KAAK,IACV5C,EAAK,KAAK,IACVC,EAAK,KAAK,IAChB,GAAIkD,EAAK,GAAKd,GAAY,OAAOtkB,EAAIC,EAAIC,EAAIC,EAAIykB,EAAIC,EAAI5C,EAAIC,CAAE,EAAIkD,EAC1D,MAAA,GAET,MAAMv/C,EAAI,EACV,IAAI0e,EAAO1e,EAAI,EACX66B,EAAK76B,EAAI0e,EACT/oB,EAAI8oD,GAAY,OAAOtkB,EAAIC,EAAIC,EAAIC,EAAIykB,EAAIC,EAAI5C,EAAIC,EAAIxhB,CAAE,EAC7D,KAAO,KAAK,IAAIllC,EAAI4pD,CAAE,EAAI,KAChB7gC,GAAA,EACDmc,IAAAllC,EAAI4pD,EAAK,EAAI,IAAM7gC,EACtB/oB,EAAA8oD,GAAY,OAAOtkB,EAAIC,EAAIC,EAAIC,EAAIykB,EAAIC,EAAI5C,EAAIC,EAAIxhB,CAAE,EAEpD,OAAAA,CACT,CAGA,wBAAwB9yB,EAAgB,CAChC,MAAA/H,EAAI,KAAK,UAAU+H,CAAM,EACzB22C,EAAK,EAAI1+C,EACbw/C,EAAM,KAAK,IAAId,EAAI,CAAC,EACpBe,EAAM,KAAK,IAAIf,EAAI,CAAC,EACpB7jB,EAAK76B,EAAIA,EACT86B,EAAKD,EAAK76B,EACVI,EACEo/C,EAAM,KAAK,EACXC,EAAM,EAAIz/C,EAAI,KAAK,IACnB0+C,EAAK,EAAI1+C,EAAIA,EAAI,KAAK,IACtB86B,EAAK,KAAK,IACZ56B,EACEs/C,EAAM,KAAK,EACXC,EAAM,EAAIz/C,EAAI,KAAK,IACnB0+C,EAAK,EAAI1+C,EAAIA,EAAI,KAAK,IACtB86B,EAAK,KAAK,IACZ4kB,EACE,KAAK,EACL,EAAI1/C,GAAK,KAAK,IAAM,KAAK,GACzB66B,GAAM,KAAK,IAAM,EAAI,KAAK,IAAM,KAAK,GACvC8kB,EACE,KAAK,EACL,EAAI3/C,GAAK,KAAK,IAAM,KAAK,GACzB66B,GAAM,KAAK,IAAM,EAAI,KAAK,IAAM,KAAK,GACvC+kB,EACE,KAAK,IACL,EAAI5/C,GAAK,KAAK,IAAM,KAAK,KACzB66B,GAAM,KAAK,IAAM,EAAI,KAAK,IAAM,KAAK,KACvCglB,EACE,KAAK,IACL,EAAI7/C,GAAK,KAAK,IAAM,KAAK,KACzB66B,GAAM,KAAK,IAAM,EAAI,KAAK,IAAM,KAAK,KACvCgZ,EAAK6K,EAAK,KAAK,EAAI1+C,EAAI,KAAK,IAC5B8zC,EAAK4K,EAAK,KAAK,EAAI1+C,EAAI,KAAK,IAC5B68C,EAAK6B,EAAK,KAAK,IAAM1+C,EAAI,KAAK,IAC9B88C,EAAK4B,EAAK,KAAK,IAAM1+C,EAAI,KAAK,IAC9BgzC,EAAQ,GAAM,KAAK,MAAM0M,EAAKE,EAAID,EAAKE,CAAE,EAAI,IAAO,KAAK,GAEpD,MAAA,CACL,EAAAz/C,EACA,EAAAF,EACA,EAAG,CACD,EAAGw/C,EACH,EAAGC,CACL,EACA,EAAG,CACD,EAAGC,EACH,EAAGC,CACL,EACA,MAAO,CACL,EAAGhM,EACH,EAAGC,CACL,EACA,IAAK,CACH,EAAG+I,EACHC,CACF,EACA,MAAA9J,CAAA,CAEJ,CACF,ECzVM8M,GAAM,KAAK,GAAK,EAOtB,SAASC,GAAkBhC,EAAYC,EAAY7K,EAAYC,EAAY,CACzE,MAAM4M,EAAOjC,EAAK3K,EAAK4K,EAAK7K,EAAK,EAAI,GAAK,EACtC,IAAAwL,EAAMZ,EAAK5K,EAAK6K,EAAK5K,EAMzB,OAAIuL,EAAM,IACFA,EAAA,GAEJA,EAAM,KACFA,EAAA,IAGDqB,EAAO,KAAK,KAAKrB,CAAG,CAC7B,CAOA,SAASsB,GACP9lB,EACAC,EACAC,EACAC,EACAj2B,EACAjS,EACA2qD,EACAC,EACAkD,EACAC,EACA,CAOA,MAAMC,EAAOD,GAAWhmB,EAAKE,GAAO,EAAK6lB,GAAW9lB,EAAKE,GAAO,EAC1D+lB,EAAO,CAACH,GAAW/lB,EAAKE,GAAO,EAAK8lB,GAAW/lB,EAAKE,GAAO,EAE3DgmB,EAAQvD,EAAKA,EACbwD,EAAQvD,EAAKA,EACbwD,EAASJ,EAAMA,EACfK,EAASJ,EAAMA,EAOrB,IAAIK,EAAWJ,EAAQC,EAAQD,EAAQG,EAASF,EAAQC,EAEpDE,EAAW,IAEFA,EAAA,GAGDA,GAAAJ,EAAQG,EAASF,EAAQC,EACrCE,EAAW,KAAK,KAAKA,CAAQ,GAAKr8C,IAAOjS,EAAK,GAAK,GAE7C,MAAAuuD,EAAQD,EAAW3D,EAAMC,EAAMqD,EAC/BO,EAAQF,EAAW,CAAC1D,EAAMD,EAAMqD,EAOhCvD,EAAKsD,EAAUQ,EAAMT,EAAUU,GAAOzmB,EAAKE,GAAM,EACjDyiB,EAAKoD,EAAUS,EAAMR,EAAUS,GAAOxmB,EAAKE,GAAM,EAMjDumB,GAAOT,EAAMO,GAAO5D,EACpB+D,GAAOT,EAAMO,GAAO5D,EACpB+D,GAAO,CAACX,EAAMO,GAAO5D,EACrBiE,GAAO,CAACX,EAAMO,GAAO5D,EAErB5K,EAAS2N,GAAkB,EAAG,EAAGc,EAAKC,CAAG,EAC/C,IAAI5C,EAAc6B,GAAkBc,EAAKC,EAAKC,EAAKC,CAAG,EAElD,OAAA5uD,IAAO,GAAK8rD,EAAc,IACbA,GAAA4B,IAEb1tD,IAAO,GAAK8rD,EAAc,IACbA,GAAA4B,IAGV,CAACjD,EAAIC,EAAI1K,EAAQ8L,CAAW,CACrC,CAMA,SAAS+C,GAAqB7O,EAAgB8L,EAAqB,CACjE,MAAMlL,EAAS,mBAAS,KAAK,IAAIkL,EAAc,CAAC,EAW1C/jB,EAAK,KAAK,IAAIiY,CAAM,EACpBhY,EAAK,KAAK,IAAIgY,CAAM,EACpB/X,EAAK,KAAK,IAAI+X,EAAS8L,CAAW,EAClC5jB,EAAK,KAAK,IAAI8X,EAAS8L,CAAW,EAEjC,MAAA,CACL/jB,EACAC,EACAD,EAAKC,EAAK4Y,EACV5Y,EAAKD,EAAK6Y,EACV3Y,EAAKC,EAAK0Y,EACV1Y,EAAKD,EAAK2Y,EACV3Y,EACAC,CAAA,CAEJ,CAagB,SAAA4mB,GACd/mB,EACAC,EACAC,EACAC,EACAj2B,EACAjS,EACA2qD,EACAC,EACAE,EACA,CACA,MAAMgD,EAAU,KAAK,IAAKhD,EAAM4C,GAAO,GAAG,EACpCK,EAAU,KAAK,IAAKjD,EAAM4C,GAAO,GAAG,EAIpCM,EAAOD,GAAWhmB,EAAKE,GAAO,EAAK6lB,GAAW9lB,EAAKE,GAAO,EAC1D+lB,EAAO,CAACH,GAAW/lB,EAAKE,GAAO,EAAK8lB,GAAW/lB,EAAKE,GAAO,EAE7D,GAAA8lB,IAAQ,GAAKC,IAAQ,EAEvB,MAAO,GAGL,GAAAtD,IAAO,GAAKC,IAAO,EAErB,MAAO,GAKJD,EAAA,KAAK,IAAIA,CAAE,EACXC,EAAA,KAAK,IAAIA,CAAE,EAEhB,MAAMmE,EAAUf,EAAMA,GAAQrD,EAAKA,GAAOsD,EAAMA,GAAQrD,EAAKA,GACzDmE,EAAS,IACLpE,GAAA,KAAK,KAAKoE,CAAM,EAChBnE,GAAA,KAAK,KAAKmE,CAAM,GAKlB,MAAAC,EAAKnB,GAAe9lB,EAAIC,EAAIC,EAAIC,EAAIj2B,EAAIjS,EAAI2qD,EAAIC,EAAIkD,EAASC,CAAO,EAEpEx2C,EAAS,CAAA,EACX,IAAAyoC,EAASgP,EAAG,CAAC,EACblD,EAAckD,EAAG,CAAC,EAKtB,MAAMC,EAAW,KAAK,IAAI,KAAK,KAAK,KAAK,IAAInD,CAAW,GAAK4B,GAAM,EAAE,EAAG,CAAC,EAY1D5B,GAAAmD,EAEf,QAASlvD,EAAI,EAAGA,EAAIkvD,EAAUlvD,IAC5BwX,EAAO,KAAKs3C,GAAqB7O,EAAQ8L,CAAW,CAAC,EAC3C9L,GAAA8L,EAML,OAAAv0C,EAAO,IAAK23C,GAAU,CAC3B,QAASnvD,EAAI,EAAGA,EAAImvD,EAAM,OAAQnvD,GAAK,EAAG,CACpC,IAAAiO,EAAIkhD,EAAMnvD,EAAI,CAAC,EACf+N,EAAIohD,EAAMnvD,EAAI,CAAC,EAGdiO,GAAA28C,EACA78C,GAAA88C,EAGC,MAAAuE,EAAKpB,EAAU//C,EAAI8/C,EAAUhgD,EAC7BshD,EAAKtB,EAAU9/C,EAAI+/C,EAAUjgD,EAGnCohD,EAAMnvD,EAAI,CAAC,EAAIovD,EAAKH,EAAG,CAAC,EACxBE,EAAMnvD,EAAI,CAAC,EAAIqvD,EAAKJ,EAAG,CAAC,CAC1B,CAEO,OAAAE,CAAA,CACR,CACH,CAwHO,SAASG,GACdtnB,EACAC,EACAyiB,EACAC,EACAziB,EACAC,EACA,CACO,MAAA,CACLH,EAAK,EAAK,EAAI,EAAK0iB,EACnBziB,EAAK,EAAK,EAAI,EAAK0iB,EACnBziB,EAAK,EAAK,EAAI,EAAKwiB,EACnBviB,EAAK,EAAK,EAAI,EAAKwiB,EACnBziB,EACAC,CAAA,CAEJ,CAEO,SAASonB,GAAIvnB,EAAYC,EAAYC,EAAYC,EAAY,CAClE,MAAO,CAACH,EAAIC,EAAIC,EAAIC,EAAID,EAAIC,CAAE,CAChC,CC1XO,MAAMqnB,GAAkD,CAC7D,EAAG,EACH,EAAG,EACH,EAAG,EACH,EAAG,EACH,EAAG,EACH,EAAG,EACH,EAAG,EACH,EAAG,EACH,EAAG,EACH,EAAG,CAEL,EAYO,MAAMC,EAAW,CACtB,OAAO,iBACLC,EAAU,OACVC,EACoB,CACd,MAAAp3C,EAAK,SAAS,gBAAgB,KAClC,SACA,6BACAm3C,CAAA,EAEF,OAAIC,GACFC,GAAar3C,EAAIo3C,CAAK,EAEjBp3C,CACT,CAEA,OAAO,cAAc3R,EAAW4tB,EAA6B,CAEpD,OADM,KAAK,iBAAiB,OAAQ,CAAE,EAAA5tB,EAAG,GAAI4tB,GAAMq7B,GAAa,CAAA,CAAG,CAE5E,CAEA,OAAO,uBAAuBC,EAA0B71C,EAAO,QAAS,CAC/D,OAAA81C,GACLr3C,GAAUo3C,CAAsC,EAChD,GAAG71C,CAAI,MAAA,CAEX,CAEA,OAAO,sBAAsB+1C,EAAmB/1C,EAAO,QAAS,CAC9D,OAAO81C,GAAUj3C,GAAOk3C,CAAS,EAAG,GAAG/1C,CAAI,MAAM,CACnD,CAEA,OAAO,2BAA2B1B,EAAiB,CACjD,OAAOD,GAAYC,CAAE,CACvB,CAMA,OAAO,UAAUxB,EAAa,CAC5B,OAAI,OAAOA,GAAQ,SAAiB,IACpCA,EAAMA,EAAI,OAGR,0CAA0C,KAAKA,CAAG,GAAK,UAAU,KAAKA,CAAG,EAG7E,CAEA,OAAO,eAAe0uC,EAAoC,CACjD,OAAAA,EACJ,IAAKx6B,GAAS,CACT,GAAA,CAACA,EAAK,CAAC,EACF,MAAA,GAET,OAAQA,EAAK,CAAC,EAAE,YAAe,EAAA,CAC7B,IAAK,IACH,MAAO,GAAGA,EAAK,CAAC,CAAC,IAAIA,EAAK,CAAC,CAAC,IAAIA,EAAK,CAAC,CAAC,IAAIA,EAAK,CAAC,CAAC,IAAIA,EAAK,CAAC,CAAC,IAAIA,EAAK,CAAC,CAAC,IAAIA,EAAK,CAAC,CAAC,IAAIA,EAAK,CAAC,CAAC,GAChG,IAAK,IACI,MAAA,GAAGA,EAAK,CAAC,CAAC,IAAIA,EAAK,CAAC,CAAC,IAAIA,EAAK,CAAC,CAAC,IAAIA,EAAK,CAAC,CAAC,IAAIA,EAAK,CAAC,CAAC,IAAIA,EAAK,CAAC,CAAC,IAAIA,EAAK,CAAC,CAAC,GACrF,IAAK,IACL,IAAK,IACH,MAAO,GAAGA,EAAK,CAAC,CAAC,IAAIA,EAAK,CAAC,CAAC,IAAIA,EAAK,CAAC,CAAC,IAAIA,EAAK,CAAC,CAAC,IAAIA,EAAK,CAAC,CAAC,GAC/D,QACS,OAAAA,EAAK,CAAC,EAAI,IAAMA,EAAK,MAAM,CAAC,EAAE,KAAK,GAAG,CACjD,CAAA,CACD,EACA,KAAK,GAAG,CACb,CAGA,OAAO,aAAaw6B,EAAoC,CACtD,MAAMj6B,EAA6B,CAAA,EACnC,OAAKikC,GAAW,UAAUhK,CAAI,GAIzBA,EAAA,QACH,mCACA,CAACwK,EAAmBvK,EAAiBwK,IAA+B,CAC9D,IAAAz3C,EAAOitC,EAAQ,cACb,MAAAloC,EAAiB2yC,GAAkBD,CAAU,EAYnD,IATIz3C,GAAQ,KAAO+E,EAAK,OAASgyC,GAAwB/2C,CAAI,IAC3D+S,EAAK,KAAK,CACRk6B,EACA,GAAGloC,EAAK,OAAO,EAAGgyC,GAAwB/2C,CAAI,CAAC,CAAA,CAChD,EACMA,EAAA,IACGitC,EAAAA,GAAW,IAAM,IAAM,KAG5BloC,EAAK,QAAQ,CAClB,GAAIA,EAAK,OAASgyC,GAAwB/2C,CAAI,EAC5C,MAAM,IAAI,MACR,4BAA4Bw3C,CAAS,gBAAgBvK,CAAO,aAAaloC,CAAI,IAAA,EAG/EgO,EAAK,KAAK,CACRk6B,EACA,GAAGloC,EAAK,OAAO,EAAGgyC,GAAwB/2C,CAAI,CAAC,CAAA,CAChD,CAEL,CAEA,OAAIA,GAAQ,KACL+S,EAAA,KAAK,CAACk6B,CAAO,CAAC,EAGd,EACT,CAAA,EAEKl6B,CACT,CAGA,OAAO,kBAAkBi6B,EAAkD,CACzE,IAAIpJ,EAAS,EACTC,EAAS,EACTruC,EAAI,EACJF,EAAI,EAED,OAAA03C,EAAK,IAAI,SAAU2K,EAAK,CACvB,MAAA33C,EAAO23C,EAAI,CAAC,EACZ1K,EAAUjtC,EAAK,cAGrB,GAAIA,GAAQitC,EAEV,OADA0K,EAAI,CAAC,EAAI1K,EACDjtC,EAAM,CACZ,IAAK,IACH23C,EAAI,CAAC,GAAKniD,EACVmiD,EAAI,CAAC,GAAKriD,EACV,MACF,IAAK,IACHqiD,EAAI,CAAC,GAAKriD,EACV,MACF,IAAK,IACHqiD,EAAI,CAAC,GAAKniD,EACV,MACF,QACE,QAASjO,EAAI,EAAGA,EAAIowD,EAAI,QACrBA,EAAIpwD,GAAG,GAAgBiO,EACvBmiD,EAAIpwD,GAAG,GAAgB+N,CAE9B,CAGF,OAAQ23C,EAAS,CACf,IAAK,IACCz3C,EAAAouC,EACAtuC,EAAAuuC,EACJ,MACF,IAAK,IACHruC,EAAImiD,EAAI,CAAC,EACT,MACF,IAAK,IACHriD,EAAIqiD,EAAI,CAAC,EACT,MACF,IAAK,IACCniD,EAAAouC,EAAS+T,EAAI,CAAC,EACdriD,EAAAuuC,EAAS8T,EAAI,CAAC,EAClB,MACF,QACMniD,EAAAmiD,EAAIA,EAAI,OAAS,CAAC,EAClBriD,EAAAqiD,EAAIA,EAAI,OAAS,CAAC,CAC1B,CAEO,OAAAA,CAAA,CACR,CACH,CAEA,OAAO,gBAAgB3K,EAAkD,CACvE,IAAIpJ,EAAS,EACTC,EAAS,EACTruC,EAAI,EACJF,EAAI,EAED,OAAA03C,EAAK,IAAI,SAAU2K,EAAK,CACvB,MAAA33C,EAAO23C,EAAI,CAAC,EACZ1K,EAAUjtC,EAAK,cAGrB,GAAIA,GAAQitC,EAEV,OADA0K,EAAI,CAAC,EAAI1K,EACDjtC,EAAM,CACZ,IAAK,IACH23C,EAAI,CAAC,GAAKniD,EACVmiD,EAAI,CAAC,GAAKriD,EACV,MACF,IAAK,IACHqiD,EAAI,CAAC,GAAKriD,EACV,MACF,IAAK,IACHqiD,EAAI,CAAC,GAAKniD,EACV,MACF,QACE,QAASjO,EAAI,EAAGA,EAAIowD,EAAI,QACrBA,EAAIpwD,GAAG,GAAgBiO,EACvBmiD,EAAIpwD,GAAG,GAAgB+N,CAE9B,CAGF,OAAQ23C,EAAS,CACf,IAAK,IACCz3C,EAAAouC,EACAtuC,EAAAuuC,EACJ,MACF,IAAK,IACHruC,GAAKmiD,EAAI,CAAC,EACV,MACF,IAAK,IACHriD,GAAKqiD,EAAI,CAAC,EACV,MACF,IAAK,IACHniD,GAAKmiD,EAAI,CAAC,EACVriD,GAAKqiD,EAAI,CAAC,EACV/T,GAAU+T,EAAI,CAAC,EACf9T,GAAU8T,EAAI,CAAC,EACf,MACF,QACOniD,GAAAmiD,EAAIA,EAAI,OAAS,CAAC,EAClBriD,GAAAqiD,EAAIA,EAAI,OAAS,CAAC,CAC3B,CAEO,OAAAA,CAAA,CACR,CACH,CAIA,OAAO,iBAAiB3K,EAAkD,CACxE,MAAMjuC,EAA+B,CAAA,EACrC,IAAI6kC,EAAS,EACTC,EAAS,EACTruC,EAAI,EACJF,EAAI,EACJsiD,EAAQ,EACRC,EAAQ,EACRC,EAAU,EACVC,EAAU,EAEVC,EAEJ,QAASzwD,EAAI,EAAGsvC,EAAMmW,EAAK,OAAQzlD,EAAIsvC,EAAKtvC,IAAK,CAC3C,IAAAowD,EAAM3K,EAAKzlD,CAAC,EACV,MAAA0lD,EAAU0K,EAAI,CAAC,EAErB,OAAQ1K,EAAS,CACf,IAAK,IACHrJ,EAAS+T,EAAI,CAAC,EACd9T,EAAS8T,EAAI,CAAC,EACd,MACF,IAAK,IACH,MAAMM,EAAS3B,GACb9gD,EACAF,EACAqiD,EAAI,CAAC,EACLA,EAAI,CAAC,EACLA,EAAI,CAAC,EACLA,EAAI,CAAC,EACLA,EAAI,CAAC,EACLA,EAAI,CAAC,EACLA,EAAI,CAAC,CAAA,EAaP,GAAI,CAACM,EAAO,OAAQ,SACbA,EAAA,QAAQ,CAACvB,EAAOvqD,IAAM,CAErB,KAAA,CAAC2H,EAAIN,EAAI+7B,EAAIC,EAAIC,EAAIC,EAAIykB,EAAIC,CAAE,EAAIsC,EAGzCiB,EAAM,CAAC,IAAKpoB,EAAIC,EAAIC,EAAIC,EAAIykB,EAAIC,CAAE,EAC9BjoD,EAAI8rD,EAAO,OAAS,GACtBl5C,EAAO,KAAK44C,CAAG,CACjB,CACD,EACD,MACF,IAAK,IAEH,IAAI1F,EAAKz8C,EACL08C,EAAK58C,GACL0iD,GAAe,KAAOA,GAAe,OACvC/F,GAAMA,EAAK6F,EACX5F,GAAMA,EAAK6F,GAEbJ,EAAM,CAAC,IAAK1F,EAAIC,EAAIyF,EAAI,CAAC,EAAGA,EAAI,CAAC,EAAGA,EAAI,CAAC,EAAGA,EAAI,CAAC,CAAC,EAClD,MACF,IAAK,IACCK,GAAe,KAAOA,GAAe,KACvCJ,EAAQpiD,EAAI,EAAIoiD,EAChBC,EAAQviD,EAAI,EAAIuiD,IAERD,EAAApiD,EACAqiD,EAAAviD,GAEVqiD,EAAM,CAAC,IAAK,GAAGd,GAAIrhD,EAAGF,EAAGsiD,EAAOC,EAAOF,EAAI,CAAC,EAAGA,EAAI,CAAC,CAAC,CAAC,EACtD,MACF,IAAK,IACHC,EAAQD,EAAI,CAAC,EACbE,EAAQF,EAAI,CAAC,EACbA,EAAM,CAAC,IAAK,GAAGd,GAAIrhD,EAAGF,EAAGqiD,EAAI,CAAC,EAAGA,EAAI,CAAC,EAAGA,EAAI,CAAC,EAAGA,EAAI,CAAC,CAAC,CAAC,EACxD,MACF,IAAK,IACHA,EAAM,CAAC,IAAK,GAAGb,GAAIthD,EAAGF,EAAGqiD,EAAI,CAAC,EAAGA,EAAI,CAAC,CAAC,CAAC,EACxC,MACF,IAAK,IACGA,EAAA,CAAC,IAAK,GAAGb,GAAIthD,EAAGF,EAAGqiD,EAAI,CAAC,EAAGriD,CAAC,CAAC,EACnC,MACF,IAAK,IACGqiD,EAAA,CAAC,IAAK,GAAGb,GAAIthD,EAAGF,EAAGE,EAAGmiD,EAAI,CAAC,CAAC,CAAC,EACnC,MACF,IAAK,IACGA,EAAA,CAAC,IAAK,GAAGb,GAAIthD,EAAGF,EAAGsuC,EAAQC,CAAM,CAAC,EACxC,KACJ,CAEcmU,EAAA/K,EACVz3C,EAAAmiD,EAAIA,EAAI,OAAS,CAAC,EAClBriD,EAAAqiD,EAAIA,EAAI,OAAS,CAAC,EAClBA,EAAI,OAAS,GACLG,EAAAH,EAAIA,EAAI,OAAS,CAAC,EAClBI,EAAAJ,EAAIA,EAAI,OAAS,CAAC,IAElBG,EAAAtiD,EACAuiD,EAAAziD,GAGZyJ,EAAO,KAAK44C,CAAG,CACjB,CAEO,OAAA54C,CACT,CAIA,OAAO,kBAAkBm5C,EAAqC,CAC5D,MAAM/pD,EAA0B,CAAA,EACvB,QAAA5G,EAAI,EAAG4wD,EAAOD,EAAI,OAAQC,EAAO,EAAI5wD,EAAGA,GAAK,EAAG,CACnD,IAAA2G,EACK3G,GAAL,EACE2G,EAAA,CACF,CAAE,EAAGgqD,EAAI3wD,CAAC,EAAG,EAAG2wD,EAAI3wD,EAAI,CAAC,CAAE,EAC3B,CAAE,EAAG2wD,EAAI3wD,CAAC,EAAG,EAAG2wD,EAAI3wD,EAAI,CAAC,CAAE,EAC3B,CAAE,EAAG2wD,EAAI3wD,EAAI,CAAC,EAAG,EAAG2wD,EAAI3wD,EAAI,CAAC,CAAE,EAC/B,CAAE,EAAG2wD,EAAI3wD,EAAI,CAAC,EAAG,EAAG2wD,EAAI3wD,EAAI,CAAC,CAAE,CAAA,EAExB4wD,EAAO,GAAK5wD,EACjB2G,EAAA,CACF,CAAE,EAAGgqD,EAAI3wD,EAAI,CAAC,EAAG,EAAG2wD,EAAI3wD,EAAI,CAAC,CAAE,EAC/B,CAAE,EAAG2wD,EAAI3wD,CAAC,EAAG,EAAG2wD,EAAI3wD,EAAI,CAAC,CAAE,EAC3B,CAAE,EAAG2wD,EAAI3wD,EAAI,CAAC,EAAG,EAAG2wD,EAAI3wD,EAAI,CAAC,CAAE,EAC/B,CAAE,EAAG2wD,EAAI3wD,EAAI,CAAC,EAAG,EAAG2wD,EAAI3wD,EAAI,CAAC,CAAE,CAAA,EAG7B2G,EAAA,CACF,CAAE,EAAGgqD,EAAI3wD,EAAI,CAAC,EAAG,EAAG2wD,EAAI3wD,EAAI,CAAC,CAAE,EAC/B,CAAE,EAAG2wD,EAAI3wD,CAAC,EAAG,EAAG2wD,EAAI3wD,EAAI,CAAC,CAAE,EAC3B,CAAE,EAAG2wD,EAAI3wD,EAAI,CAAC,EAAG,EAAG2wD,EAAI3wD,EAAI,CAAC,CAAE,EAC/B,CAAE,EAAG2wD,EAAI3wD,EAAI,CAAC,EAAG,EAAG2wD,EAAI3wD,EAAI,CAAC,CAAE,CAAA,EAUnC,MAAM6wD,EAAK,CACT,CAAE,EAAGlqD,EAAE,CAAC,EAAE,EAAG,EAAGA,EAAE,CAAC,EAAE,CAAE,EACvB,CACE,GAAI,CAACA,EAAE,CAAC,EAAE,EAAI,EAAIA,EAAE,CAAC,EAAE,EAAIA,EAAE,CAAC,EAAE,GAAK,EACrC,GAAI,CAACA,EAAE,CAAC,EAAE,EAAI,EAAIA,EAAE,CAAC,EAAE,EAAIA,EAAE,CAAC,EAAE,GAAK,CACvC,EACA,CACE,GAAIA,EAAE,CAAC,EAAE,EAAI,EAAIA,EAAE,CAAC,EAAE,EAAIA,EAAE,CAAC,EAAE,GAAK,EACpC,GAAIA,EAAE,CAAC,EAAE,EAAI,EAAIA,EAAE,CAAC,EAAE,EAAIA,EAAE,CAAC,EAAE,GAAK,CACtC,EACA,CAAE,EAAGA,EAAE,CAAC,EAAE,EAAG,EAAGA,EAAE,CAAC,EAAE,CAAE,CAAA,EAGvBC,EAAA,KAAK,CAAC,IAAKiqD,EAAG,CAAC,EAAE,EAAGA,EAAG,CAAC,EAAE,EAAGA,EAAG,CAAC,EAAE,EAAGA,EAAG,CAAC,EAAE,EAAGA,EAAG,CAAC,EAAE,EAAGA,EAAG,CAAC,EAAE,CAAC,CAAC,CACpE,CAEO,OAAAjqD,CACT,CAGA,OAAO,cAAc6+C,EAAkD,CACrE,MAAMjuC,EAA+B,CAAA,EACrC,IAAIs5C,EAAiC,CAAC,IAAK,EAAG,CAAC,EAC3CC,EACJ,QAAS/wD,EAAI,EAAGsvC,EAAMmW,EAAK,OAAQzlD,EAAIsvC,EAAKtvC,IAAK,CACzC,MAAAgxD,EAAKvL,EAAKzlD,CAAC,EACT,OAAAgxD,EAAG,CAAC,EAAG,CACb,IAAK,IACHF,EAAa,CAAC,IAAKE,EAAG,CAAC,EAAGA,EAAG,CAAC,CAAC,EAC/Bx5C,EAAO,KAAKw5C,CAAE,EACd,MACF,IAAK,IACHx5C,EAAO,KAAKs5C,CAAU,EACtB,MACF,IAAK,IACSC,EAAAv5C,EAAOA,EAAO,OAAS,CAAC,GAAK,CAAC,IAAK,EAAG,CAAC,EACnDA,EAAO,KAAK,CACV,IACAw5C,EAAG,CAAC,EACJD,EAAUA,EAAU,OAAS,CAAC,CAAA,CACT,EACvB,MACF,IAAK,IACSA,EAAAv5C,EAAOA,EAAO,OAAS,CAAC,GAAK,CAAC,IAAK,EAAG,CAAC,EACnDA,EAAO,KAAK,CACV,IACAu5C,EAAUA,EAAU,OAAS,CAAC,EAC9BC,EAAG,CAAC,CAAA,CACiB,EACvB,MACF,QACEx5C,EAAO,KAAKw5C,CAAE,CAClB,CACF,CACO,OAAAx5C,CACT,CAIA,OAAO,gBAAgBiuC,EAAkD,CACvE,MAAMwL,EAAwD,CAC5D,EAAG,CAAE,GAAI,IAAK,EAAG,CAAE,EACnB,EAAG,CAAE,GAAI,IAAK,EAAG,CAAE,CAAA,EAEjB,IAAA7/B,EACA4W,EAAK,EACLC,EAAK,EACT,QAASjoC,EAAI,EAAGsvC,EAAMmW,EAAK,OAAQzlD,EAAIsvC,EAAKtvC,IAAK,CACzC,MAAAkxD,EAAMzL,EAAKzlD,CAAC,EACZmxD,EAAUF,EAAWC,EAAI,CAAC,CAAC,EAC7BC,IACED,EAAA,CAAC,EAAIC,EAAQ,GACb//B,IACEA,EAAK,CAAC,IAAM+/B,EAAQ,IACtBnpB,EAAK,EAAI,OAAO5W,EAAK+/B,EAAQ,EAAI,CAAC,CAAC,EAAI,OAAO//B,EAAK+/B,EAAQ,CAAC,CAAC,EAC7DlpB,EAAK,EAAI,OAAO7W,EAAK+/B,EAAQ,EAAI,CAAC,CAAC,EAAI,OAAO//B,EAAK+/B,EAAQ,EAAI,CAAC,CAAC,IAEjEnpB,EAAK,OAAO5W,EAAKA,EAAK,OAAS,CAAC,CAAC,EACjC6W,EAAK,OAAO7W,EAAKA,EAAK,OAAS,CAAC,CAAC,IAGrC8/B,EAAI,OAAO,EAAG,EAAGlpB,EAAIC,CAAE,GAElB7W,EAAA8/B,CACT,CACO,OAAAzL,CACT,CACF,CCzeO,IAAA2L,GAAA,MAAMC,EAAM,CAEV,GACA,GACA,EACA,EACA,OACA,QACA,QAGA,WAAa,EACb,WAAa,EACb,UAAY,EACZ,UAAY,EACZ,gBAAiC,CAAA,EAIxC,YAAY14C,EAWT,CACD,KAAK,GAAK,EACV,KAAK,GAAK,EACL,KAAA,EAAIA,GAAS,GAAK,EAClB,KAAA,EAAIA,GAAS,GAAK,EAErB,OAAOA,GAAS,SAAW,UAC3B,OAAOA,GAAS,SAAW,WAEtB,KAAA,GAAKA,EAAQ,QAAU,KAAK,EAC5B,KAAA,GAAKA,EAAQ,QAAU,KAAK,GAE9B,KAAA,OAASA,GAAS,QAAU,EACjC,KAAK,QAAU,EACf,KAAK,QAAU,EACXA,GAAS,SAAW,SACtB,KAAK,QAAUA,EAAQ,OACvB,KAAK,QAAUA,EAAQ,QAErBA,GAAS,UAAY,SACvB,KAAK,QAAUA,EAAQ,SAErBA,GAAS,UAAY,SACvB,KAAK,QAAUA,EAAQ,SAEzB,KAAK,MAAMA,GAAS,EAAGA,GAAS,YAAY,CAC9C,CAEO,MACL/R,EACA0qD,EACA,CACI,OAAO1qD,GAAK,SACd,KAAK,qBAAqB6oD,GAAW,aAAa7oD,CAAC,EAAG0qD,CAAY,EACzD1qD,aAAayqD,GACtB,KAAK,qBAAqBzqD,EAAE,cAAc,EAAG0qD,CAAY,EAEzD,KAAK,qBAAqB1qD,GAAK,CAAC,EAAG0qD,CAAY,CAEnD,CAEQ,qBACN9lC,EACA8lC,EACA,CACA,KAAK,gBAAkB,GAEvB,MAAMC,EAAQ9B,GAAW,iBACvBA,GAAW,kBAAkBjkC,CAAI,CAAA,EAE9B,KAAA,UAAY,KAAK,WAAa,EAC9B,KAAA,UAAY,KAAK,WAAa,EACnC,IAAIgmC,EAAe,GACnB,QAASxxD,EAAI,EAAGwjC,EAAQ+tB,EAAM,OAAQvxD,EAAIwjC,EAAOxjC,IAAK,CAC9C,MAAAylD,EAAO8L,EAAMvxD,CAAC,EAEpB,GADgBylD,EAAK,CAAC,GACP,IAAK,CACb+L,IACYA,EAAA,GACV,KAAA,WAAa/L,EAAK,CAAC,EACnB,KAAA,WAAaA,EAAK,CAAC,GAErB,KAAA,UAAYA,EAAK,CAAC,EAClB,KAAA,UAAYA,EAAK,CAAC,EACvB,QACF,CACK,KAAA,WACH,IAAI6G,GAAY,CACd,IAAK7G,EAAK,CAAC,EACX,IAAKA,EAAK,CAAC,EACX,IAAKA,EAAK,CAAC,EACX,IAAKA,EAAK,CAAC,EACX,IAAKA,EAAK,CAAC,EACX,IAAKA,EAAK,CAAC,CAAA,CACZ,CAAA,CAEL,CACI6L,IACD,CAAE,EAAG,KAAK,WAAY,EAAG,KAAK,YAAeA,EAAa,eACzD,CACE,EAAG,KAAK,WACR,EAAG,KAAK,UACV,CAAA,EAED,CAAE,EAAG,KAAK,UAAW,EAAG,KAAK,SAAA,EAAcA,EAAa,eAAe,CACtE,EAAG,KAAK,UACR,EAAG,KAAK,SAAA,CACT,EACI,KAAA,gBAAgB,QAAS9tD,GAAM,EACjC,CAAE,EAAGA,EAAE,EAAG,EAAGA,EAAE,GAAM8tD,EAAa,eAAe,CAAE,EAAG9tD,EAAE,EAAG,EAAGA,EAAE,EAAG,GACnE,CAAE,EAAGA,EAAE,IAAK,EAAGA,EAAE,GAAA,EAAQ8tD,EAAa,eAAe,CACpD,EAAG9tD,EAAE,IACL,EAAGA,EAAE,GAAA,CACN,EACA,CAAE,EAAGA,EAAE,IAAK,EAAGA,EAAE,GAAA,EAAQ8tD,EAAa,eAAe,CACpD,EAAG9tD,EAAE,IACL,EAAGA,EAAE,GAAA,CACN,EACA,CAAE,EAAGA,EAAE,IAAK,EAAGA,EAAE,GAAA,EAAQ8tD,EAAa,eAAe,CACpD,EAAG9tD,EAAE,IACL,EAAGA,EAAE,GAAA,CACN,CAAA,CACF,EAEL,CAEA,OAAO,oBAAoBiuD,EAAyB,CAC5C,MAAA7qD,EAAI,IAAIyqD,GACdzqD,EAAE,UAAYA,EAAE,WAAa6qD,EAAO,CAAC,GAAK,EAC1C7qD,EAAE,UAAYA,EAAE,WAAa6qD,EAAO,CAAC,GAAK,EACjC,QAAAniD,EAAI,EAAGk0B,EAAQiuB,EAAO,OAAQniD,EAAI,EAAIk0B,EAAOl0B,GAAK,EACvD1I,EAAA,WACA,IAAI0lD,GAAY,CACd,IAAKmF,EAAOniD,CAAC,EACb,IAAKmiD,EAAOniD,EAAI,CAAC,EACjB,IAAKmiD,EAAOniD,EAAI,CAAC,EACjB,IAAKmiD,EAAOniD,EAAI,CAAC,EACjB,IAAKmiD,EAAOniD,EAAI,CAAC,EACjB,IAAKmiD,EAAOniD,EAAI,CAAC,CAAA,CAClB,CAAA,EAGE,OAAA1I,CACT,CAEA,OAAO,UAAU8qD,EAAmB,CAC5B,MAAA9qD,EAAI,IAAIyqD,GACdzqD,EAAE,UAAYA,EAAE,WAAa8qD,EAAM,CAAC,EAAE,GAAK,EAC3C9qD,EAAE,UAAYA,EAAE,WAAa8qD,EAAM,CAAC,EAAE,GAAK,EAC3C,QAAS1xD,EAAI,EAAGwjC,EAAQkuB,EAAM,OAAQ1xD,EAAIwjC,EAAOxjC,IAC7C4G,EAAA,WAAW8qD,EAAM1xD,CAAC,CAAC,EAEhB,OAAA4G,CACT,CAGQ,WAAWojD,EAAS,CAC1B,GAAIA,aAAgB2H,GAAK,CACR5C,GACb,KAAK,UACL,KAAK,UACL/E,EAAK,IACLA,EAAK,IACLA,EAAK,aACLA,EAAK,UACLA,EAAK,GACLA,EAAK,GACLA,EAAK,WAAA,EAEA,QAASmF,GAAU,CAClB,KAAA,CAAC5iD,EAAIN,EAAI+7B,EAAIC,EAAIC,EAAIC,EAAIl6B,EAAG,CAAC,EAAIkhD,EACvC,KAAK,gBAAgB,KACnB,IAAI7C,GAAY,CACd,EAAG,KAAK,UACR,EAAG,KAAK,UACR,IAAKtkB,EACL,IAAKC,EACL,IAAKC,EACL,IAAKC,EACL,IAAKl6B,EACL,IAAK,CAAA,CACN,CAAA,EAEH,KAAK,UAAYA,EACjB,KAAK,UAAY,CAAA,CAClB,EACD,MACF,CACA,IAAI+5B,EAAIC,EAAIC,EAAIC,EAAIypB,EAAKC,EACrB7H,aAAgBsC,IAClBtkB,EAAKgiB,EAAK,IACV/hB,EAAK+hB,EAAK,IACV9hB,EAAK8hB,EAAK,IACV7hB,EAAK6hB,EAAK,IACV4H,EAAM5H,EAAK,IACX6H,EAAM7H,EAAK,KACFA,aAAgB8H,GACzB,CAAC9pB,EAAIC,EAAIC,EAAIC,EAAIypB,EAAKC,CAAG,EAAIvC,GAC3B,KAAK,UACL,KAAK,UACLtF,EAAK,GACLA,EAAK,GACLA,EAAK,IACLA,EAAK,GAAA,EAIP,CAAChiB,EAAIC,EAAIC,EAAIC,EAAIypB,EAAKC,CAAG,EAAItC,GAC3B,KAAK,UACL,KAAK,UACLvF,EAAK,IACLA,EAAK,GAAA,EAGT,KAAK,gBAAgB,KACnB,IAAIsC,GAAY,CACd,EAAG,KAAK,UACR,EAAG,KAAK,UACR,IAAKtkB,EACL,IAAKC,EACL,IAAKC,EACL,IAAKC,EACL,IAAAypB,EACA,IAAAC,CAAA,CACD,CAAA,EAEH,KAAK,UAAYD,EACjB,KAAK,UAAYC,CACnB,CAGA,eAAsC,CACpC,KAAM,CAAE,WAAAE,EAAY,WAAAC,EAAY,gBAAAC,CAAgB,EAAI,KAAK,kBACnDzmC,EAA6B,CAAA,EACnCA,EAAK,KAAK,CAAC,IAAKumC,EAAYC,CAAU,CAAC,EACvC,QAAShyD,EAAI,EAAGwjC,EAAQyuB,EAAgB,OAAQjyD,EAAIwjC,EAAOxjC,IACzDwrB,EAAK,KAAK,GAAGymC,EAAgBjyD,CAAC,EAAE,eAAe,EAG1C,OAAAwrB,CACT,CAEA,YAAqB,CACnB,OAAOikC,GAAW,eAAe,KAAK,cAAe,CAAA,CACvD,CAGA,gBAAgBhiB,EAAsB,CACpC,KAAM,CAAE,WAAAskB,EAAY,WAAAC,EAAY,gBAAAC,CAAgB,EAAI,KAAK,kBACzDxkB,EAAI,UAAU,EACVA,EAAA,OAAOskB,EAAYC,CAAU,EACjBC,EAAA,QAAS9uD,GAAM,CAC7BA,EAAE,gBAAgBsqC,CAAG,CAAA,CACtB,CAEH,CAGO,uBAAwB,CAC7B,KAAM,CAAE,gBAAAwkB,CAAA,EAAoB,KAAK,gBAAgB,EAC3C9+C,EAAc,CAAA,EACdrS,EAAc,CAAA,EAMpB,GALgBmxD,EAAA,QAASzuD,GAAM,CACvB,MAAAmjD,EAAOnjD,EAAE,wBACf2P,EAAE,KAAKwzC,EAAK,EAAGA,EAAK,EAAIA,EAAK,KAAK,EAClC7lD,EAAE,KAAK6lD,EAAK,EAAGA,EAAK,EAAIA,EAAK,MAAM,CAAA,CACpC,EACGxzC,EAAE,QAAU,GAAKrS,EAAE,QAAU,EACxB,MAAA,CAAE,EAAG,EAAG,EAAG,EAAG,MAAO,EAAG,OAAQ,GAEzC,MAAMoxD,EAAO,KAAK,IAAI,MAAM,EAAG/+C,CAAC,EAC1Bg/C,EAAO,KAAK,IAAI,MAAM,EAAGrxD,CAAC,EAC1BsxD,EAAO,KAAK,IAAI,MAAM,EAAGj/C,CAAC,EAC1Bk/C,EAAO,KAAK,IAAI,MAAM,EAAGvxD,CAAC,EACzB,MAAA,CACL,EAAGoxD,EACH,EAAGC,EACH,MAAOC,EAAOF,EACd,OAAQG,EAAOF,CAAA,CAEnB,CAEO,OAAO,EAQX,CACD,KAAK,GAAK,OAAO,EAAE,IAAM,SAAW,EAAE,GAAK,KAAK,GAChD,KAAK,GAAK,OAAO,EAAE,IAAM,SAAW,EAAE,GAAK,KAAK,GAChD,KAAK,EAAI,EAAE,EACX,KAAK,EAAI,EAAE,EACX,KAAK,OAAS,EAAE,OAChB,KAAK,QAAU,EAAE,QACjB,KAAK,QAAU,EAAE,OACnB,CAEQ,iBAAkB,CAGlB,MAAA1rD,EAAI,IAAI6rD,GAmCV,GALF7rD,EAAA,UAAU,KAAK,EAAI,KAAK,GAAI,KAAK,EAAI,KAAK,EAAE,EAC5CA,EAAA,OAAO,KAAK,MAAM,EACpBA,EAAE,MAAM,KAAK,QAAS,KAAK,OAAO,EAClCA,EAAE,UAAU,CAAC,KAAK,GAAI,CAAC,KAAK,EAAE,EAEzBA,EAAE,WA+BE,MAAA,CACL,WAAY,KAAK,WACjB,WAAY,KAAK,WACjB,gBAAiB,KAAK,eAAA,EAlCP,CACjB,IAAIsrD,EAAa,KAAK,WAClBC,EAAa,KAAK,YACrB,CAAE,EAAGD,EAAY,EAAGC,CAAW,EAAIvrD,EAAE,eAAe,CACnD,EAAGsrD,EACH,EAAGC,CAAA,CACJ,GACD,MAAMC,EAAiC,CAAA,EAClC,YAAA,gBAAgB,QAASzuD,GAAM,CAClC,IAAIyK,EAAIzK,EAAE,EACNuK,EAAIvK,EAAE,EACNyoD,EAAMzoD,EAAE,IACR0oD,EAAM1oD,EAAE,IACR+uD,EAAM/uD,EAAE,IACRgvD,EAAMhvD,EAAE,IACRouD,EAAMpuD,EAAE,IACRquD,EAAMruD,EAAE,KACX,CAAE,EAAAyK,EAAM,EAAAF,GAAStH,EAAE,eAAe,CAAE,EAAAwH,EAAM,EAAAF,CAAA,CAAM,GAChD,CAAE,EAAGk+C,EAAK,EAAGC,CAAI,EAAIzlD,EAAE,eAAe,CAAE,EAAGwlD,EAAK,EAAGC,CAAK,CAAA,EACxD,CAAE,EAAGqG,EAAK,EAAGC,CAAI,EAAI/rD,EAAE,eAAe,CAAE,EAAG8rD,EAAK,EAAGC,CAAK,CAAA,EACxD,CAAE,EAAGZ,EAAK,EAAGC,CAAI,EAAIprD,EAAE,eAAe,CAAE,EAAGmrD,EAAK,EAAGC,CAAK,CAAA,EACzCI,EAAA,KACd,IAAI3F,GAAY,CAAE,EAAAr+C,EAAG,EAAAF,EAAG,IAAAk+C,EAAK,IAAAC,EAAK,IAAAqG,EAAK,IAAAC,EAAK,IAAAZ,EAAK,IAAAC,EAAK,CAAA,CACxD,CACD,EACM,CACL,WAAAE,EACA,WAAAC,EACA,gBAAAC,CAAA,CACF,CAQJ,CAGA,gBAAyB,CACvB,KAAM,CAAE,gBAAAA,CAAA,EAAoB,KAAK,gBAAgB,EAE1C,OAAAA,EAAgB,OAAO,CAACQ,EAAKjvD,IAAOivD,GAAOjvD,EAAE,SAAW,CAAC,CAIlE,CAEA,iBAAiBoS,EAIf,CACA,KAAM,CAAE,gBAAAq8C,CAAA,EAAoB,KAAK,gBAAgB,EAEjD,IAAI3iB,EAAM,EACV,MAAMojB,EAAaT,EAAgB,OACnC,QAASjyD,EAAI,EAAGA,EAAI0yD,EAAY1yD,IAAK,CAC7B,MAAA2G,EAAIsrD,EAAgBjyD,CAAC,EACrBwD,EAAImD,EAAE,SACR,GAAA2oC,EAAM9rC,GAAKoS,EACN,OAAAjP,EAAE,wBAAwBiP,EAAS05B,CAAG,EAExCA,GAAA9rC,CACT,CACA,OAAOyuD,EAAgBS,EAAa,CAAC,EAAE,wBAAwB,CAAC,CAIlE,CAIA,YAAY,EAAqC,CAC/C,KAAM,CAAE,WAAAX,EAAY,WAAAC,EAAY,gBAAAC,CAAgB,EAAI,KAAK,kBACnDS,EAAaT,EAAgB,OACnC,GAAIS,IAAe,EACjB,MAAO,CAAE,EAAGX,EAAY,EAAGC,CAAW,EACxC,GAAWU,IAAe,EACxB,OAAOT,EAAgB,CAAC,EAAE,YAAY,CAAC,EAClC,CACL,IAAIrZ,EAAQ,EAAI8Z,EACZjN,EAAOwM,EAAgB,CAAC,EAE5B,GADArZ,IACIA,EAAQ,EACV,QAAS54C,EAAI,EAAGA,EAAI0yD,IAClBjN,EAAOwM,EAAgBjyD,CAAC,EACpB44C,EAAQ,GAFkB54C,IAGnB44C,GAAA,EAMR,OAAA6M,EAAK,YAAY7M,CAAK,CAC/B,CACF,CAGA,WAAWtiC,EAAcC,EAAmB,CAC1C,GAAI,KAAK,iBAAmBA,EAAK,KACxB,OAAA,KAAK,oBAAoB,KAAMD,CAAI,EACrC,CACL,MAAM3N,EAAI,KAAK,oBAAoB,KAAM4N,EAAI,CAAC,EAC9C,OAAOD,EAAO,KAAK,oBAAoB3N,EAAG2N,CAAI,EAAI3N,CACpD,CACF,CAEA,oBAAoB88C,EAAa7vC,EAAgB+8C,EAA2B,CAC1E,KAAM,CAAE,WAAAZ,EAAY,WAAAC,EAAY,gBAAAC,CAAgB,EAAIxM,EAAK,kBAEzD,IAAIprC,EAAsB,KACtBi1B,EAAM,EAEJ,MAAAsjB,EAAK,IAAIvB,GACZuB,EAAA,UAAYA,EAAG,WAAab,EAC5Ba,EAAA,UAAYA,EAAG,WAAaZ,EAC/B,QAAShyD,EAAI,EAAGg7B,EAAKi3B,EAAgB,OAAQjyD,EAAIg7B,EAAIh7B,IAAK,CAClD,MAAA2G,EAAIsrD,EAAgBjyD,CAAC,EACrBwD,EAAImD,EAAE,SACR,GAAA2oC,EAAM9rC,EAAIoS,GACR,CAACyE,EAAO,CACV,MAAMw4C,EAAQlsD,EAAE,wBAAwBiP,EAAS05B,CAAG,EAWpD,GAVGsjB,EAAA,WACD,IAAItG,GAAY,CACd,IAAKuG,EAAM,MAAM,EACjB,IAAKA,EAAM,MAAM,EACjB,IAAKA,EAAM,EAAE,EACb,IAAKA,EAAM,EAAE,EACb,IAAKA,EAAM,EACX,IAAKA,EAAM,CAAA,CACZ,CAAA,EAECF,EACK,OAAAC,EAEDv4C,EAAAu4C,EAILA,EAAA,WACD,IAAItG,GAAY,CACd,IAAKuG,EAAM,EAAE,EACb,IAAKA,EAAM,EAAE,EACb,IAAKA,EAAM,IAAI,EACf,IAAKA,EAAM,IAAI,EACf,IAAKlsD,EAAE,EACP,IAAKA,EAAE,CAAA,CACR,CAAA,EAEI2oC,GAAA9rC,EACP,QACF,CAEK8rC,GAAA9rC,EACPovD,EAAG,WAAWjsD,CAAC,CACjB,CAEO,OAAAisD,CACT,CAGA,aACEE,EACAC,EAQA,CACM,MAAAC,EAAa,KAAK,iBACxB,IAAIC,EAAO,CAAE,EAAGH,EAAQ,EAAGC,CAAO,EAC9BG,EAAa,EACbC,EAAe,IACfC,EAAY,EAGhB,QACMC,EAAa,EACjBA,GAAcL,EACdK,GAAcD,EACd,CACM,MAAAE,EAAO,KAAK,iBAAiBD,CAAU,EACvCE,EAAe,KAAK,IACxBzpC,GAASwpC,EAAK,EAAGA,EAAK,EAAGR,EAAQC,CAAM,EACvC,CAAA,EAEEQ,EAAeJ,IACVF,EAAAK,EACMJ,EAAAG,EACEF,EAAAI,EAEnB,CAIA,IADaH,GAAA,EACNA,EAAY,IAAK,CACtB,MAAMI,EAAeN,EAAaE,EAC5BK,EAAS,KAAK,iBAAiBD,CAAY,EAC3CE,EAAiB,KAAK,IAC1B5pC,GAAS2pC,EAAO,EAAGA,EAAO,EAAGX,EAAQC,CAAM,EAC3C,CAAA,EAEIY,EAAcT,EAAaE,EAC3BQ,EAAQ,KAAK,iBAAiBD,CAAW,EACzCE,EAAgB,KAAK,IACzB/pC,GAAS8pC,EAAM,EAAGA,EAAM,EAAGd,EAAQC,CAAM,EACzC,CAAA,EAEES,GAAgB,GAAKE,EAAiBP,GACjCF,EAAAQ,EACMP,EAAAM,EACEL,EAAAO,GACNC,GAAeX,GAAca,EAAgBV,GAC/CF,EAAAW,EACMV,EAAAS,EACER,EAAAU,GAEFT,GAAA,CAEjB,CAEA,MAAMzsD,EAAI,KAAK,iBACbusD,GAAcA,IAAeF,EAAa,IAAO,GAAA,EAG5C,MAAA,CACL,MAAOC,EACP,SACEC,GAAcF,EACV5W,GAAMz1C,EAAE,EAAGA,EAAE,EAAGssD,EAAK,EAAGA,EAAK,CAAC,EAC9B7W,GAAM6W,EAAK,EAAGA,EAAK,EAAGtsD,EAAE,EAAGA,EAAE,CAAC,EACpC,SAAU,KAAK,KAAKwsD,CAAY,CAAA,CAEpC,CAEA,IAAI,iBAA4B,CAC9B,KAAM,CAAE,WAAApB,EAAY,WAAAC,EAAY,gBAAAC,CAAgB,EAAI,KAAK,kBAClD,MAAA,CAACF,EAAYC,CAAU,EAAE,OAC9BC,EAAgB,OACd,CAACQ,EAAKjvD,IAAMivD,EAAI,OAAO,CAACjvD,EAAE,IAAKA,EAAE,IAAKA,EAAE,IAAKA,EAAE,IAAKA,EAAE,IAAKA,EAAE,GAAG,CAAC,EACjE,CAAC,CACH,CAAA,CAEJ,CAEA,iBAA0B,CACxB,MAAMswD,EAAM,KAAK,gBACX11D,EAAI01D,EAAI,OACV,IAAA5rB,EAAK4rB,EAAI11D,EAAI,CAAC,EACd+pC,EAAK2rB,EAAI11D,EAAI,CAAC,EACduI,EAAI,EACR,QAAS3G,EAAI,EAAGA,EAAI5B,EAAG4B,GAAK,EACrB2G,GAAAmjB,GAASgqC,EAAI9zD,CAAC,EAAG8zD,EAAI9zD,EAAI,CAAC,EAAGkoC,EAAIC,CAAE,EACxCD,EAAK4rB,EAAI9zD,CAAC,EACLmoC,EAAA2rB,EAAI9zD,EAAI,CAAC,EAET,OAAA,KAAK,MAAM2G,CAAC,CACrB,CAEA,WAAWotD,EAA2C,CACpD,MAAM91D,EAAK,KAAK,gBACV+1D,EAAW/1D,EAAG,OACpB,IAAIg2D,EAAYF,EAAcC,EAC9B,MAAMpb,EAAQ,KAAK,KAAKmb,EAAcC,CAAQ,EACxCvC,EAA+B,CAAA,EAC9BA,EAAA,KAAK,CAAC,IAAKxzD,EAAG,CAAC,EAAGA,EAAG,CAAC,CAAC,CAAC,EAC/B,IAAIqR,EAAI,EACD,KAAAA,EAAI,GAAK0kD,EAAW,GAAG,CACtB,MAAA/H,EAAMhuD,EAAGqR,GAAG,EACZ48C,EAAMjuD,EAAGqR,GAAG,EACZijD,EAAMt0D,EAAGqR,GAAG,EACZkjD,EAAMv0D,EAAGqR,GAAG,EACZrB,EAAIhQ,EAAGqR,GAAG,EACVvB,EAAI9P,EAAGqR,GAAG,EACTmiD,EAAA,KAAK,CAAC,IAAKxF,EAAKC,EAAKqG,EAAKC,EAAKvkD,EAAGF,CAAC,CAAC,EAC3C,IAAIZ,EAAI,EACD,KAAAA,EAAIyrC,GAASqb,EAAY,GACvBxC,EAAA,KAAK,CAAC,IAAKxjD,EAAGF,EAAGE,EAAGF,EAAGE,EAAGF,CAAC,CAAC,EACtBkmD,GAAA,EACb9mD,GAEJ,CACO,OAAAskD,CACT,CAEA,OAAO,UAAU9oD,EAAayE,EAAa/H,EAAqB,CAC9D,MAAM6uD,EAAOvrD,EAAE,OACTiW,EAAU,IAAI,MAAMs1C,CAAI,EAC9B,QAASl0D,EAAI,EAAGA,EAAIk0D,EAAMl0D,IACxB4e,EAAQ5e,CAAC,EAAIm0D,EAAaxrD,EAAE3I,CAAC,GAAKoN,EAAEpN,CAAC,EAAI2I,EAAE3I,CAAC,GAAKqF,EAAG,CAAC,EAEhD,OAAAuZ,CACT,CAGA,OAAO,oBACLizB,EACAuiB,EAC0C,CAC1C,OAAQhxC,GACF,KAAK,IAAIA,EAAS,CAAC,EAAI,OAAO,QAEzByuB,EAEL,KAAK,IAAIzuB,EAAS,CAAC,EAAI,OAAO,QAEzBgxC,EAEI/C,GAAM,oBACjBA,GAAM,UACJ,IAAIA,GAAM,CAAE,EAAGxf,CAAA,CAAM,EAAE,gBACvB,IAAIwf,GAAM,CAAE,EAAG+C,CAAA,CAAO,EAAE,gBACxBhxC,CACF,CAAA,EAEU,eAEhB,CACF,KCtkBO,cAAoBixC,EAAiC,CAGnD,GACA,QACA,aAEA,4BAEA,SAAW,GAGX,GACA,GAEA,EACA,EAEA,OAEA,QACA,QAEA,aACA,aACA,kBACA,mBACA,mBAEA,GACA,GACA,GACA,GACA,KAEC,MAED,WACA,UAEA,WAAa,GACb,UAAY,GAEZ,sBAMA,YAEA,eACA,qBAAuB,EACvB,sBAAwB,EAExB,OAAS,GACT,GAEA,MACA,wBAA0B,GAE1B,OACA,OAAkB,CAAA,EAEzB,YAAY17C,EAAyB,CAuEnC,GAtEM,QAEN,KAAK,GAAKk3C,KACNl3C,GAAS,IACX,KAAK,QAAUA,GAAS,GAEtBA,GAAS,eACX,KAAK,aAAeA,EAAQ,cAG9B,KAAK,4BACH,OAAOA,GAAS,6BAA+B,UAC3CA,EAAQ,4BACR,GAED,KAAA,EAAIA,GAAS,GAAK,EAClB,KAAA,EAAIA,GAAS,GAAK,EAEvB,KAAK,GAAK,EACV,KAAK,GAAK,EAER,OAAOA,GAAS,SAAW,UAC3B,OAAOA,GAAS,SAAW,UAEtB,KAAA,YAAYA,EAAQ,QAAU,KAAK,EAAGA,EAAQ,QAAU,KAAK,CAAC,EAGhE,KAAA,OAASA,GAAS,QAAU,EAEjC,KAAK,QAAU,EACf,KAAK,QAAU,EACXA,GAAS,SAAW,SACtB,KAAK,QAAUA,EAAQ,OACvB,KAAK,QAAUA,EAAQ,QAErBA,GAAS,UAAY,SACvB,KAAK,QAAUA,EAAQ,SAErBA,GAAS,UAAY,SACvB,KAAK,QAAUA,EAAQ,SAGpB,KAAA,aAAeA,GAAS,cAAgB,EACxC,KAAA,aAAeA,GAAS,cAAgB,EACxC,KAAA,kBAAoBA,GAAS,mBAAqB,EAClD,KAAA,mBAAqBA,GAAS,oBAAsB,EACpD,KAAA,mBAAqBA,GAAS,oBAAsB,EAEpD,KAAA,GAAKA,GAAS,IAAM,EACpB,KAAA,GAAKA,GAAS,IAAM,EACpB,KAAA,GAAKA,GAAS,IAAM,EACpB,KAAA,GAAKA,GAAS,IAAM,EACpB,KAAA,KAAOA,GAAS,MAAQ,EAC7B,KAAK,MAAQ,CAGX,OAAQ,OACR,KAAM,MAAA,EAGJA,GAAS,OACN,KAAA,QAAQA,GAAS,KAAK,EAExB,KAAA,WAAaA,GAAS,YAAc,GACzC,KAAK,UAAYA,GAAS,UAC1B,KAAK,sBAAwBA,GAAS,sBACjC,KAAA,YAAcA,GAAS,aAAe,GAC3C,KAAK,OAAS,OAAOA,GAAS,QAAU,UAAYA,GAAS,OAAS,GACjE,KAAA,eAAiBA,GAAS,gBAAkB,GAE7C,KAAK,eAAgB,CACvB,MAAM27C,EAAkB,KAAK,QAAQ,mBAAoB,KAAK,EACzD,KAAA,QAAQ,mBAAoBA,CAAe,EAChD,KAAK,sBAAwBnE,GAC3BmE,CAAA,EACA,OAAO,CAAC7B,EAAK7rD,IAAM6rD,EAAM7rD,EAAG,CAAC,CACjC,CASO,OADO2tD,GAAS,IAAI,CAE7B,CAGO,YAAYC,EAAYC,EAAY,CACzC,KAAK,GAAKD,EACV,KAAK,GAAKC,EACV,KAAK,SAAW,EAClB,CAGO,WAAY,CAEnB,CAGO,WAAmB,CACpB,GAAA,CAAC,KAAK,MAAO,CAUf,GARK,KAAA,MAAQ,IAAIpD,GAEjBqD,GAAY,IAAM,CAChB,KAAK,OAAO,MACV,KAAK,SAAW,KAAK,cAAc,EACnC,KAAK,YAAA,CACP,CACD,EACG,KAAK,OAAS,CAAC,KAAK,SAAU,CAE1B,MAAA/N,EACJ,KAAK,OAAO,QAAU,EAClB,KAAK,MAAM,sBAAA,EACX,KAAK,sBAAsB,EAE7BA,IACG,KAAA,MAAM,GAAK,KAAK,GAAKA,EAAK,EAAIA,EAAK,MAAQ,EAAI,KAAK,MAAM,EAC1D,KAAA,MAAM,GAAK,KAAK,GAAKA,EAAK,EAAIA,EAAK,OAAS,EAAI,KAAK,MAAM,EAGpE,CACA,KAAK,UAAU,CACjB,CACA,OAAO,KAAK,KACd,CAEO,WAAWgO,EAAwC,CAE1D,CAEO,YACLA,EACAlnB,EACM,CAED,KAAA,MAAQ,KAAK,YACb,KAAA,MAAM,OAAO,IAAI,EAElB,KAAK,iBACF,KAAK,YACR,KAAK,QAAQ,oBAAqB,OAAO,KAAK,sBAAsB,CAAC,EACjE,KAAK,qBAAuB,KAAK,wBACnC,KAAK,qBAAuB,IAIpC,CAEO,SAASknB,EAAwC,CAExD,CAOO,eAAsC,CAE3C,MAAO,EACT,CAIO,YAAqB,CACnB,OAAA,KAAK,OAAO,WAAA,GAAgB,EACrC,CAWO,gBACLlnB,EAMM,CACN,KAAK,wBAA0B,GAC1B,KAAA,OAAO,gBAAgBA,CAAG,CACjC,CAKO,uBAKE,CACA,OAAA,KAAK,OAAO,sBAAA,GAA2B,IAChD,CAGA,IAAW,QAAmC,CACtC,MAAAkZ,EAAO,KAAK,wBACZxjD,EAAI,CAAE,EAAG,KAAK,EAAG,EAAG,KAAK,GAC/B,OAAIwjD,IACFxjD,EAAE,EAAIwjD,EAAK,EAAIA,EAAK,MAAQ,EAC5BxjD,EAAE,EAAIwjD,EAAK,EAAIA,EAAK,OAAS,GAExBxjD,CACT,CAEO,MAAO,CACZ,GAAI,KAAK,OACP,OAEI,MAAAwjD,EAAO,KAAK,wBAClB,GAAI,CAACA,EACH,OAEG,KAAA,OAAO,QAAS/mD,GAAM,CACnB0xD,MAAAA,EAAe1xD,EAAE,aACnBA,EAAE,aAAa,MAAM,EACrB,IAAI0yD,GACRhB,EAAa,UAAU,CAAC3K,EAAK,EAAI/mD,EAAE,EAAG,CAAC+mD,EAAK,EAAI/mD,EAAE,CAAC,EACnDA,EAAE,aAAe0xD,CAAA,CAClB,EACK,MAAAA,EAAe,KAAK,aACtB,KAAK,aAAa,MAAM,EACxB,IAAIgB,GACKhB,EAAA,UAAU,CAAC3K,EAAK,EAAI,KAAK,EAAG,CAACA,EAAK,EAAI,KAAK,CAAC,EACzD,KAAK,aAAe2K,CACtB,CAEO,cACLrjD,EACAF,EACA0/B,EACS,CACT,GAAIA,aAAemnB,GACV,OAAAnnB,EAAI,cAAc,IAAI,OAAO,KAAK,YAAY,EAAGx/B,EAAGF,CAAC,EAG1D,IAAA8kD,EACA,GAAA,CACMA,EAAA,IAAI,SAAS5kD,EAAGF,CAAC,OACf,CAEV8kD,EAAQplB,EAAI,iBACZolB,EAAM,EAAI5kD,EACV4kD,EAAM,EAAI9kD,CACZ,CACI,GAAA,KAAK,cAAc,mBACd,OAAA,KAAK,GAAG,cAAc8kD,CAAK,EAC7B,CACC,MAAAlM,EAAO,KAAK,wBAClB,GAAIA,EACF,OACE14C,GAAK04C,EAAK,GACV14C,GAAK04C,EAAK,EAAIA,EAAK,OACnB54C,GAAK44C,EAAK,GACV54C,GAAK44C,EAAK,EAAIA,EAAK,MAczB,CACO,MAAA,EACT,CAEO,gBACL14C,EACAF,EACA0/B,EACS,CACT,GAAIA,aAAemnB,GACV,OAAAnnB,EAAI,gBAAgB,IAAI,OAAO,KAAK,YAAY,EAAGx/B,EAAGF,CAAC,EAG5D,IAAA8kD,EACA,GAAA,CACMA,EAAA,IAAI,SAAS5kD,EAAGF,CAAC,OACf,CAEV8kD,EAAQplB,EAAI,iBACZolB,EAAM,EAAI5kD,EACV4kD,EAAM,EAAI9kD,CACZ,CACI,OAAA,KAAK,cAAc,mBACd,KAAK,GAAG,gBAAgB8kD,CAAK,EAE/B,EAET,CAEO,OAAQ,CAEb,OAAOgC,GAAe,IAAI,EAAE,KAAK,IAAI,CAEvC,CAEO,KAAKC,EAAc,CACxB,YAAK,GAAKA,EAAM,GAChB,KAAK,QAAUA,EAAM,QACrB,KAAK,aAAeA,EAAM,aAC1B,KAAK,4BAA8BA,EAAM,4BACzC,KAAK,EAAIA,EAAM,EACf,KAAK,EAAIA,EAAM,EACf,KAAK,GAAKA,EAAM,GAChB,KAAK,GAAKA,EAAM,GAChB,KAAK,OAASA,EAAM,OACpB,KAAK,QAAUA,EAAM,QACrB,KAAK,QAAUA,EAAM,QACrB,KAAK,aAAeA,EAAM,aAC1B,KAAK,aAAeA,EAAM,aAC1B,KAAK,kBAAoBA,EAAM,kBAC/B,KAAK,mBAAqBA,EAAM,mBAChC,KAAK,mBAAqBA,EAAM,mBAChC,KAAK,GAAKA,EAAM,GAChB,KAAK,GAAKA,EAAM,GAChB,KAAK,GAAKA,EAAM,GAChB,KAAK,GAAKA,EAAM,GAChB,KAAK,KAAOA,EAAM,KAClB,KAAK,MAAQ,CACX,GAAGA,EAAM,KAAA,EAEX,KAAK,WAAaA,EAAM,WACxB,KAAK,UAAYA,EAAM,UACvB,KAAK,sBAAwBA,EAAM,sBACnC,KAAK,YAAcA,EAAM,YACzB,KAAK,OAASA,EAAM,OACpB,KAAK,eAAiBA,EAAM,eAC5B,KAAK,sBAAwBA,EAAM,sBAC5B,IACT,CAEO,MAAO,CAId,CAEO,SAAU,CAIjB,CAIO,QACLC,EACArtC,EACM,CACF,OAAOqtC,GAAc,SAChB,OAAA,OACL,KAAK,MACL,OAAO,YACL,OAAO,QAAQA,CAAS,EAAE,IAAI,CAAC,CAACzlD,EAAGyU,CAAC,IAC3B,CAACixC,GAAQ1lD,CAAC,EAAGyU,CAAC,CACtB,CACH,CAAA,EAGE2D,IACF,KAAK,MAAMstC,GAAQD,CAAS,CAAC,EAAIrtC,EAGvC,CAOO,QACLzN,EACAyb,EACqC,CAC9B,OAAA,KAAK,MAAMzb,CAAI,GAAK,KAAK,MAAM+6C,GAAQ/6C,CAAI,CAAC,GAAKyb,CAC1D,CAEO,UAAoD,CACzD,OAAO,KAAK,KACd,CAEO,QAAQzb,EAAuB,CACpC,MAAO,CAAC,CAAC,KAAK,MAAMA,CAAI,GAAK,CAAC,CAAC,KAAK,MAAM+6C,GAAQ/6C,CAAI,CAAC,CACzD,CAEO,SAAStD,EAA0C,CACjD,OAAAmT,GAAS,KAAK,EAAG,KAAK,EAAGnT,EAAO,EAAGA,EAAO,CAAC,CACpD,CAEO,SAASA,EAAkC,CAC3C,KAAA,OAASulC,GAASE,GAAM,KAAK,EAAG,KAAK,EAAGzlC,EAAO,EAAGA,EAAO,CAAC,CAAC,CAClE,CAEO,SAASA,EAAkCf,EAAS,EAAG,CAC5D,KAAK,SAASe,CAAM,EACd,KAAA,CAAE,GAAIqqC,EAAI,GAAIC,CAAO,EAAAxE,GAAMT,EAAS,KAAK,MAAM,EAAGpmC,CAAM,EAC9D,KAAK,GAAKorC,EACV,KAAK,GAAKC,EACV,KAAK,IAAI,CACX,CAEO,qBAAqBtqC,EAAkCf,EAAS,IAAM,CAC3E,KAAK,SAASe,CAAM,EACd,KAAA,CAAE,GAAI+qC,EAAI,GAAIC,CAAO,EAAAlF,GAAMT,EAAS,KAAK,MAAM,EAAGpmC,CAAM,EAC9D,KAAK,GAAK8rC,EACV,KAAK,GAAKC,EACV,KAAK,IAAI,CACX,CAGO,eAAehrC,EAAe,CAErC,CAGO,UAAUgC,EAGd,CAEH,CAGO,YAAYhC,EAAe,CAC1B,MAAAkQ,EAAKlQ,EAAO,EAAI,KAAK,EACrBmQ,EAAKnQ,EAAO,EAAI,KAAK,EACrBs+C,EAASpuC,EAAKA,EAAKC,EAAKA,EACxB4gB,EAAO,KAAK,KAAKutB,CAAM,EACvB/pC,EAAS,KAAK,KAAOvU,EAAO,KAAQs+C,EACpCvT,EAAMx2B,EAAQrE,EAAM6gB,EACpBia,EAAMz2B,EAAQpE,EAAM4gB,EACrB,KAAA,IAAMga,EAAK,KAAK,KAChB,KAAA,IAAMC,EAAK,KAAK,KACdhrC,EAAA,IAAM+qC,EAAK/qC,EAAO,KAClBA,EAAA,IAAMgrC,EAAKhrC,EAAO,IAC3B,CAEO,IAAIgC,EAA4B,CAErC,KAAK,IAAM,KAAK,GAChB,KAAK,IAAM,KAAK,GAGhB,MAAMu8C,EAAUC,GAAYx8C,GAAS,QAAS,CAAC,EAC/C,KAAK,IAAMu8C,EAiBX,MAAME,EAAWD,GAAYx8C,GAAS,SAAU,CAAC,EACjD,KAAK,IAAMy8C,EACX,KAAK,IAAMA,EAEX,KAAK,GAAK,KAAK,GACf,KAAK,GAAK,KAAK,EACjB,CAEO,UACLz+C,EACAgC,EACA,CACA,MAAM8sB,EAAS0vB,GAAYx8C,GAAS,OAAQ,GAAI,EAC1CkO,EAAKlQ,EAAO,EAAI,KAAK,GAAK,KAAK,EAC/BmQ,EAAKnQ,EAAO,EAAI,KAAK,GAAK,KAAK,EACrC,KAAK,GAAKkQ,EAAK4e,EACf,KAAK,GAAK3e,EAAK2e,EACf,KAAK,IAAI9sB,CAAO,CAClB,CAEO,YACLhC,EACAgC,EACA,CACA,MAAM08C,EAASF,GAAYx8C,GAAS,OAAQ,GAAI,GAC/C,MAAM,QAAQhC,CAAM,EAAIA,EAAS,CAACA,CAAM,GAAG,QAAS9I,GAAM,CACzD,MAAMgZ,EAAKhZ,EAAE,EAAI,KAAK,GAAK,KAAK,EAC1BiZ,EAAKjZ,EAAE,EAAI,KAAK,GAAK,KAAK,EAC1B6zC,EAAK76B,EAAKwuC,EACV1T,EAAK76B,EAAKuuC,EAChB,KAAK,IAAM3T,EACX,KAAK,IAAMC,CAAA,CACZ,EACD,KAAK,IAAI,CAAE,SAAU,GAAK,GAAGhpC,EAAS,CACxC,CAEO,aACLhC,EACAgC,EAIQ,CACR,MAAM28C,EAAeH,GAAYx8C,GAAS,aAAc,GAAG,EACrD08C,EAASF,GAAYx8C,GAAS,OAAQ,IAAM,EAC5CkO,EAAKlQ,EAAO,EAAI,KAAK,EACrBmQ,EAAKnQ,EAAO,EAAI,KAAK,EACrB+wB,EAAO,KAAK,KAAK7gB,EAAKA,EAAKC,EAAKA,CAAE,EACxC,GAAI4gB,EAAO4tB,EAAc,CACvB,MAAM5T,EAAK76B,EAAKwuC,EACV1T,EAAK76B,EAAKuuC,EACX,YAAA,IAAM3T,EAAK,KAAK,KAChB,KAAA,IAAMC,EAAK,KAAK,KACdhrC,EAAA,IAAM+qC,EAAK/qC,EAAO,KAClBA,EAAA,IAAMgrC,EAAKhrC,EAAO,KAClB,EAAI+wB,EAAO4tB,CACpB,CACO,MAAA,EACT,CAEA,gBAAyB,CAChB,OAAA,KAAK,YAAY,gBAC1B,CAEA,YAAY,EAAqC,CAC/C,OAAO,KAAK,UAAA,EAAY,YAAY,CAAC,CACvC,CAEA,iBAAiB1/C,EAIf,CACA,OAAO,KAAK,UAAA,EAAY,iBAAiBA,CAAM,CACjD,CAEO,UACL2/C,EACAC,EAAW,EAKX,CACM,MAAAzB,EAAc,KAAK,iBACzB,OAAAwB,EAAM,QAAU,KAAK,UAAA,EAAY,WAAW,EAAGC,EAAWzB,CAAW,EAC9D,KAAK,iBAAiByB,EAAWzB,CAAW,CACrD,CAEO,gBAAgBroB,EAAgB,IAAM/yB,EAA2B,CAChE,MAAA88C,EAAQ,KAAK,YACb1B,EAAcI,EAAasB,EAAM,iBAAkB,CAAC,EAC1D,KAAK,QAAQ,CACX,gBAAiB,GAAG1B,CAAW,IAAIA,CAAW,GAC9C,iBAAkB,GAAGA,CAAW,EAAA,CACjC,EACD,MAAM2B,EAAe/8C,GAAS,SACxBg9C,EAAK,IAAIzqB,GAAS,CAAE,cAAAQ,CAAe,CAAA,EACtCiqB,EAAA,SACD,CAAE,OAAQ5B,CAAY,EACtB,CAAE,OAAQ,CAAE,EACZ,OAAO,OAAOp7C,GAAW,GAAI,CAC3B,SAAU,CAACi9C,EAAoBtrB,IAAoB,CACjD,KAAK,QAAQ,mBAAoB,GAAK6pB,EAAayB,EAAO,OAAQ,CAAC,CAAC,EACpEF,IAAeE,EAAQtrB,CAAO,CAChC,CAAA,CACD,CAAA,EAEHqrB,EAAG,KAAK,CACV,CACF,EChuBO,MAAME,WAAgBC,EAAM,CAC1B,EACA,EACA,EAEA,GACA,IACA,IACA,GACA,GACA,GACA,OAEP,YAAYn9C,EAA2B,CACrC,MAAMA,CAAO,EACR,KAAA,EAAIA,GAAS,GAAK,EAClB,KAAA,EAAIA,GAAS,GAAK,EAClB,KAAA,EAAIA,GAAS,GAAK,EAClB,KAAA,GAAKA,GAAS,IAAM,IACpB,KAAA,IAAMA,GAAS,KAAO,EACtB,KAAA,IAAMA,GAAS,KAAO,EACtB,KAAA,GAAKA,GAAS,IAAM,EACpB,KAAA,GAAKA,GAAS,IAAM,EACpB,KAAA,GAAKA,GAAS,IAAM,EACpB,KAAA,OAASA,GAAS,QAAU,CACnC,CAEA,eAAsC,CACpC,OAAI,KAAK,OACA,CACL,CAAC,IAAK,KAAK,aAAc,KAAK,WAAe,EAAA,KAAK,MAAM,EACxD,CAAC,IAAK,KAAK,OAAQ,KAAK,OAAQ,EAAG,EAAG,EAAG,EAAG,EAAI,KAAK,MAAM,EAC3D,CAAC,IAAK,KAAK,OAAQ,KAAK,OAAQ,EAAG,EAAG,EAAG,EAAG,GAAK,KAAK,MAAM,EAC5D,CAAC,GAAG,CAAA,EAGC,CAAC,CAAC,IAAK,KAAK,WAAc,EAAA,KAAK,WAAY,CAAA,CAAC,CAEvD,CAEA,gBAAgB80B,EAAsB,CACpCA,EAAI,UAAU,EACVA,EAAA,IAAI,EAAG,EAAG,KAAK,OAAQ,EAAG,KAAK,GAAK,EAAG,EAAI,EAC/CA,EAAI,UAAU,CAChB,CAEA,kBAAkBsoB,EAAaC,EAAa,CAC1C,KAAK,IAAMD,EACX,KAAK,IAAMC,CACb,CAEA,UAAUxB,EAAYC,EAAYwB,EAAY,CAC5C,KAAK,GAAKzB,EACV,KAAK,GAAKC,EACV,KAAK,GAAKwB,CACZ,CAEA,QAAQC,EAAc,EACnB,CAAE,EAAG,KAAK,EAAG,EAAG,KAAK,CAAM,EAAAC,GAAYna,EAASka,CAAI,EAAG,KAAK,EAAG,KAAK,CAAC,EACxE,CAEA,QAAQE,EAAc,EACnB,CAAE,EAAG,KAAK,EAAG,EAAG,KAAK,CAAM,EAAAD,GAAYna,EAASoa,CAAI,EAAG,KAAK,EAAG,KAAK,CAAC,EACxE,CAEA,QAAQC,EAAc,EACnB,CAAE,EAAG,KAAK,EAAG,EAAG,KAAK,CAAM,EAAAF,GAAYna,EAASqa,CAAI,EAAG,KAAK,EAAG,KAAK,CAAC,EACxE,CAEA,YAAa,CACX,MAAMC,EAAQ,KAAK,IAAM,KAAK,GAAK,KAAK,EAAI,KAAK,IACjD,OAAO,KAAK,KAAO,KAAK,GAAK,KAAK,GAAKA,CACzC,CAEA,YAAa,CACX,MAAMA,EAAQ,KAAK,IAAM,KAAK,GAAK,KAAK,EAAI,KAAK,IACjD,OAAO,KAAK,KAAO,KAAK,GAAK,KAAK,GAAKA,CACzC,CAEA,GAAGzD,EAAyB,CAC1B,OACE,KAAK,IAAMA,EAAM,GACjB,KAAK,IAAMA,EAAM,GACjB,KAAK,IAAMA,EAAM,GACjB,KAAK,SAAWA,EAAM,QACtB,KAAK,OAASA,EAAM,IAExB,CAEA,QAAS,CACP,OAAOj9C,GAAO,KAAK,EAAG,KAAK,EAAG,KAAK,CAAC,CACtC,CAEA,SAASo7C,EAAqB,CACtB,MAAAnqC,EAAKmqC,EAAG,EAAI,KAAK,EACjBlqC,EAAKkqC,EAAG,EAAI,KAAK,EACjB7O,EAAK6O,EAAG,EAAI,KAAK,EACvB,OAAO,KAAK,KAAKnqC,EAAKA,EAAKC,EAAKA,EAAKq7B,EAAKA,CAAE,CAC9C,CAEA,OAAOmU,EAAe,CACpB,YAAK,GAAKA,EACV,KAAK,GAAKA,EACV,KAAK,GAAKA,EACH,IACT,CAEA,UAAUhnB,EAAM,EAAY,CACpB,MAAAykB,EAAc,KAAK,SACzB,GAAIA,EAAa,CACf,MAAMuC,EAAQhnB,EAAMykB,EACpB,KAAK,OAAOuC,CAAK,CACnB,CACO,OAAA,IACT,CAEA,MAAMhnB,EAAa,CACX,MAAAykB,EAAc,KAAK,SACrB,OAAAA,GAAeA,EAAczkB,GAC1B,KAAA,OAAOA,EAAMykB,CAAW,EAExB,IACT,CAEA,MAAM/C,EAAa,CACjB,MAAM/iD,EAAI,KAAK,EACTF,EAAI,KAAK,EACT0C,EAAI,KAAK,EACR,MAAA,CACL,EAAG1C,EAAIijD,EAAG,EAAIvgD,EAAIugD,EAAG,EACrB,EAAGvgD,EAAIugD,EAAG,EAAI/iD,EAAI+iD,EAAG,EACrB,EAAG/iD,EAAI+iD,EAAG,EAAIjjD,EAAIijD,EAAG,CAAA,CAEzB,CAEA,SAASA,EAAa,CACb,MAAA,CACL,EAAG,KAAK,EAAIA,EAAG,EACf,EAAG,KAAK,EAAIA,EAAG,EACf,EAAG,KAAK,EAAIA,EAAG,CAAA,CAEnB,CAEA,IAAIA,EAAa,CACR,MAAA,CACL,EAAG,KAAK,EAAIA,EAAG,EACf,EAAG,KAAK,EAAIA,EAAG,EACf,EAAG,KAAK,EAAIA,EAAG,CAAA,CAEnB,CAEA,IAAIA,EAAa,CACR,MAAA,CACL,EAAG,KAAK,EAAIA,EAAG,EACf,EAAG,KAAK,EAAIA,EAAG,EACf,EAAG,KAAK,EAAIA,EAAG,CAAA,CAEnB,CAEA,IAAIA,EAAa,CACR,MAAA,CACL,EAAG,KAAK,EAAIA,EAAG,EACf,EAAG,KAAK,EAAIA,EAAG,EACf,EAAG,KAAK,EAAIA,EAAG,CAAA,CAEnB,CAEA,IAAIA,EAAqB,CAChB,OAAA,KAAK,EAAIA,EAAG,EAAI,KAAK,EAAIA,EAAG,EAAI,KAAK,EAAIA,EAAG,CACrD,CAEA,QAAQA,EAAa,CACb,MAAAuF,EAAK,KAAK,IAAIvF,CAAE,EACf,MAAA,CACL,EAAG,KAAK,EAAI,EAAIuF,EAAKvF,EAAG,EACxB,EAAG,KAAK,EAAI,EAAIuF,EAAKvF,EAAG,EACxB,EAAG,KAAK,EAAI,EAAIuF,EAAKvF,EAAG,CAAA,CAE5B,CACF,CAEA,MAAAwF,GAAeX,GChMFY,GAAwB,IACxBC,GAAyB,KAIhCC,GAAuC,CAAC,EAAG,EAAG,EAAG,CAAC,EAIlDC,GAAqC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,EActDC,GAAuC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,EAqBjEC,GAAuC,CAC3C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAC/C,EAEO,MAAMC,EAAQ,CAEnB,MAEA,YAAYrvC,EAAuBivC,GAAuB,CACnD,KAAA,MAAQ,MAAM,KAAKjvC,CAAK,CAC/B,CAEA,IAAI,KAAM,CACD,OAAA,KAAK,MAAM,CAAC,CACrB,CACA,IAAI,KAAM,CACD,OAAA,KAAK,MAAM,CAAC,CACrB,CACA,IAAI,KAAM,CACD,OAAA,KAAK,MAAM,CAAC,CACrB,CACA,IAAI,KAAM,CACD,OAAA,KAAK,MAAM,CAAC,CACrB,CAEA,IAAI,IAAI3D,EAAW,CACZ,KAAA,MAAM,CAAC,EAAIA,CAClB,CACA,IAAI,IAAIA,EAAW,CACZ,KAAA,MAAM,CAAC,EAAIA,CAClB,CACA,IAAI,IAAIA,EAAW,CACZ,KAAA,MAAM,CAAC,EAAIA,CAClB,CACA,IAAI,IAAIA,EAAW,CACZ,KAAA,MAAM,CAAC,EAAIA,CAClB,CAGA,IAAIizC,EAAM,EAAGC,EAAM,EAAGC,EAAM,EAAGC,EAAM,EAAG,CACtC,YAAK,IAAMH,EACX,KAAK,IAAMC,EACX,KAAK,IAAMC,EACX,KAAK,IAAMC,EACJ,IACT,CAEA,UAAW,CACJ,YAAA,MAAQ,MAAM,KAAKR,EAAqB,EACtC,IACT,CAEA,IAAI,YAAsB,CACjB,OAAA,KAAK,KAAO,GAAK,KAAK,KAAO,GAAK,KAAK,KAAO,GAAK,KAAK,KAAO,CACxE,CAEA,KAAKlwD,EAAY,CACf,YAAK,IAAMA,EAAE,IACb,KAAK,IAAMA,EAAE,IACb,KAAK,IAAMA,EAAE,IACb,KAAK,IAAMA,EAAE,IACN,IACT,CAEA,OAAiB,CACR,OAAA,IAAIswD,GAAQ,KAAK,KAAK,CAC/B,CAEA,UAAUhgC,EAAiB3T,EAAS,EAAG,CACrC,QAASpjB,EAAI,EAAGA,EAAI,EAAGA,IACrB,KAAK,MAAMA,CAAC,EAAI+2B,EAAM/2B,EAAIojB,CAAM,EAE3B,OAAA,IACT,CAEA,QAAQ2T,EAAkB,GAAI3T,EAAS,EAAG,CAClC,OAAA2T,EAAA3T,CAAM,EAAI,KAAK,IACf2T,EAAA3T,EAAS,CAAC,EAAI,KAAK,IACnB2T,EAAA3T,EAAS,CAAC,EAAI,KAAK,IACnB2T,EAAA3T,EAAS,CAAC,EAAI,KAAK,IAClB2T,CACT,CAEA,iBAAiBpuB,EAAYyE,EAAY,CACvC,MAAMyF,EAAKlK,EAAE,MACP2J,EAAKlF,EAAE,MACPjH,EAAK,KAAK,MAEVixD,EAAMvkD,EAAG,CAAC,EACVwkD,EAAMxkD,EAAG,CAAC,EACVykD,EAAMzkD,EAAG,CAAC,EACV0kD,EAAM1kD,EAAG,CAAC,EAEV2kD,EAAMllD,EAAG,CAAC,EACVmlD,EAAMnlD,EAAG,CAAC,EACVolD,EAAMplD,EAAG,CAAC,EACVqlD,EAAMrlD,EAAG,CAAC,EAEhB,OAAAnM,EAAG,CAAC,EAAIixD,EAAMI,EAAMH,EAAMK,EAC1BvxD,EAAG,CAAC,EAAIixD,EAAMK,EAAMJ,EAAMM,EAE1BxxD,EAAG,CAAC,EAAImxD,EAAME,EAAMD,EAAMG,EAC1BvxD,EAAG,CAAC,EAAImxD,EAAMG,EAAMF,EAAMI,EAEnB,IACT,CAEA,SAASlxD,EAAY,CACZ,OAAA,KAAK,iBAAiB,KAAMA,CAAC,CACtC,CAEA,YAAYA,EAAY,CACf,OAAA,KAAK,iBAAiBA,EAAG,IAAI,CACtC,CAEA,eAAe7G,EAAW,CACxB,YAAK,KAAOA,EACZ,KAAK,KAAOA,EACZ,KAAK,KAAOA,EACZ,KAAK,KAAOA,EACL,IACT,CAGA,aAAsB,CACpB,OAAO,KAAK,IAAM,KAAK,IAAM,KAAK,IAAM,KAAK,GAC/C,CACF,CAEO,MAAMg4D,EAAQ,CAEnB,MAEA,YAAYlwC,EAAuBmvC,GAAuB,CACnD,KAAA,MAAQ,MAAM,KAAKnvC,CAAK,CAC/B,CAEA,IAAI,KAAM,CACD,OAAA,KAAK,MAAM,CAAC,CACrB,CACA,IAAI,KAAM,CACD,OAAA,KAAK,MAAM,CAAC,CACrB,CACA,IAAI,KAAM,CACD,OAAA,KAAK,MAAM,CAAC,CACrB,CACA,IAAI,KAAM,CACD,OAAA,KAAK,MAAM,CAAC,CACrB,CACA,IAAI,KAAM,CACD,OAAA,KAAK,MAAM,CAAC,CACrB,CACA,IAAI,KAAM,CACD,OAAA,KAAK,MAAM,CAAC,CACrB,CACA,IAAI,KAAM,CACD,OAAA,KAAK,MAAM,CAAC,CACrB,CACA,IAAI,KAAM,CACD,OAAA,KAAK,MAAM,CAAC,CACrB,CACA,IAAI,KAAM,CACD,OAAA,KAAK,MAAM,CAAC,CACrB,CAEA,IAAI,IAAI3D,EAAW,CACZ,KAAA,MAAM,CAAC,EAAIA,CAClB,CACA,IAAI,IAAIA,EAAW,CACZ,KAAA,MAAM,CAAC,EAAIA,CAClB,CACA,IAAI,IAAIA,EAAW,CACZ,KAAA,MAAM,CAAC,EAAIA,CAClB,CACA,IAAI,IAAIA,EAAW,CACZ,KAAA,MAAM,CAAC,EAAIA,CAClB,CACA,IAAI,IAAIA,EAAW,CACZ,KAAA,MAAM,CAAC,EAAIA,CAClB,CACA,IAAI,IAAIA,EAAW,CACZ,KAAA,MAAM,CAAC,EAAIA,CAClB,CACA,IAAI,IAAIA,EAAW,CACZ,KAAA,MAAM,CAAC,EAAIA,CAClB,CACA,IAAI,IAAIA,EAAW,CACZ,KAAA,MAAM,CAAC,EAAIA,CAClB,CACA,IAAI,IAAIA,EAAW,CACZ,KAAA,MAAM,CAAC,EAAIA,CAClB,CAGA,IACEizC,EAAM,EACNC,EAAM,EACNY,EAAM,EACNX,EAAM,EACNC,EAAM,EACNW,EAAM,EACNC,EAAM,EACNC,EAAM,EACNC,EAAM,EACN,CACA,MAAM9xD,EAAK,KAAK,MAChB,OAAAA,EAAG,CAAC,EAAI6wD,EACR7wD,EAAG,CAAC,EAAI+wD,EACR/wD,EAAG,CAAC,EAAI4xD,EACR5xD,EAAG,CAAC,EAAI8wD,EACR9wD,EAAG,CAAC,EAAIgxD,EACRhxD,EAAG,CAAC,EAAI6xD,EACR7xD,EAAG,CAAC,EAAI0xD,EACR1xD,EAAG,CAAC,EAAI2xD,EACR3xD,EAAG,CAAC,EAAI8xD,EACD,IACT,CAEA,UAAW,CACJ,YAAA,MAAQ,MAAM,KAAKpB,EAAqB,EACtC,IACT,CAEA,IAAI,YAAsB,CAEtB,OAAA,KAAK,KAAO,GACZ,KAAK,KAAO,GACZ,KAAK,KAAO,GACZ,KAAK,KAAO,GACZ,KAAK,KAAO,GACZ,KAAK,KAAO,GACZ,KAAK,KAAO,GACZ,KAAK,KAAO,GACZ,KAAK,KAAO,CAEhB,CAEA,KAAKpwD,EAAY,CACf,YAAK,IAAMA,EAAE,IACb,KAAK,IAAMA,EAAE,IACb,KAAK,IAAMA,EAAE,IACb,KAAK,IAAMA,EAAE,IACb,KAAK,IAAMA,EAAE,IACb,KAAK,IAAMA,EAAE,IACb,KAAK,IAAMA,EAAE,IACb,KAAK,IAAMA,EAAE,IACb,KAAK,IAAMA,EAAE,IACN,IACT,CAEA,OAAiB,CACR,OAAA,IAAImxD,GAAQ,KAAK,KAAK,CAC/B,CAEA,UAAU7gC,EAAiB3T,EAAS,EAAG,CACrC,QAASpjB,EAAI,EAAGA,EAAI,EAAGA,IACrB,KAAK,MAAMA,CAAC,EAAI+2B,EAAM/2B,EAAIojB,CAAM,EAE3B,OAAA,IACT,CAEA,QAAQ2T,EAAkB,GAAI3T,EAAS,EAAG,CAClC,OAAA2T,EAAA3T,CAAM,EAAI,KAAK,IACf2T,EAAA3T,EAAS,CAAC,EAAI,KAAK,IACnB2T,EAAA3T,EAAS,CAAC,EAAI,KAAK,IACnB2T,EAAA3T,EAAS,CAAC,EAAI,KAAK,IACnB2T,EAAA3T,EAAS,CAAC,EAAI,KAAK,IACnB2T,EAAA3T,EAAS,CAAC,EAAI,KAAK,IACnB2T,EAAA3T,EAAS,CAAC,EAAI,KAAK,IACnB2T,EAAA3T,EAAS,CAAC,EAAI,KAAK,IACnB2T,EAAA3T,EAAS,CAAC,EAAI,KAAK,IAClB2T,CACT,CAEA,aAAamhC,EAAgBC,EAAgBC,EAAgB,CACrD,OAAAF,EAAA,qBAAqB,KAAM,CAAC,EAC5BC,EAAA,qBAAqB,KAAM,CAAC,EAC5BC,EAAA,qBAAqB,KAAM,CAAC,EAC3B,IACT,CAEA,eAAe3xD,EAAY,CACzB,YAAK,IAAIA,EAAE,IAAKA,EAAE,IAAKA,EAAE,IAAKA,EAAE,IAAKA,EAAE,IAAKA,EAAE,IAAKA,EAAE,IAAKA,EAAE,IAAKA,EAAE,GAAG,EAC/D,IACT,CAEA,iBAAiBkC,EAAYyE,EAAY,CACvC,MAAMyF,EAAKlK,EAAE,MACP2J,EAAKlF,EAAE,MACPjH,EAAK,KAAK,MAEVixD,EAAMvkD,EAAG,CAAC,EACVwkD,EAAMxkD,EAAG,CAAC,EACVwlD,EAAMxlD,EAAG,CAAC,EACVykD,EAAMzkD,EAAG,CAAC,EACV0kD,EAAM1kD,EAAG,CAAC,EACVylD,EAAMzlD,EAAG,CAAC,EACV0lD,EAAM1lD,EAAG,CAAC,EACV2lD,EAAM3lD,EAAG,CAAC,EACV4lD,EAAM5lD,EAAG,CAAC,EAEV2kD,EAAMllD,EAAG,CAAC,EACVmlD,EAAMnlD,EAAG,CAAC,EACVomD,EAAMpmD,EAAG,CAAC,EACVolD,EAAMplD,EAAG,CAAC,EACVqlD,EAAMrlD,EAAG,CAAC,EACVqmD,EAAMrmD,EAAG,CAAC,EACVsmD,EAAMtmD,EAAG,CAAC,EACVumD,EAAMvmD,EAAG,CAAC,EACVwmD,EAAMxmD,EAAG,CAAC,EAEhB,OAAAnM,EAAG,CAAC,EAAIixD,EAAMI,EAAMH,EAAMK,EAAMW,EAAMO,EACtCzyD,EAAG,CAAC,EAAIixD,EAAMK,EAAMJ,EAAMM,EAAMU,EAAMQ,EACtC1yD,EAAG,CAAC,EAAIixD,EAAMsB,EAAMrB,EAAMsB,EAAMN,EAAMS,EAEtC3yD,EAAG,CAAC,EAAImxD,EAAME,EAAMD,EAAMG,EAAMY,EAAMM,EACtCzyD,EAAG,CAAC,EAAImxD,EAAMG,EAAMF,EAAMI,EAAMW,EAAMO,EACtC1yD,EAAG,CAAC,EAAImxD,EAAMoB,EAAMnB,EAAMoB,EAAML,EAAMQ,EAEtC3yD,EAAG,CAAC,EAAIoyD,EAAMf,EAAMgB,EAAMd,EAAMe,EAAMG,EACtCzyD,EAAG,CAAC,EAAIoyD,EAAMd,EAAMe,EAAMb,EAAMc,EAAMI,EACtC1yD,EAAG,CAAC,EAAIoyD,EAAMG,EAAMF,EAAMG,EAAMF,EAAMK,EAE/B,IACT,CAEA,SAASryD,EAAY,CACZ,OAAA,KAAK,iBAAiB,KAAMA,CAAC,CACtC,CAEA,YAAYA,EAAY,CACf,OAAA,KAAK,iBAAiBA,EAAG,IAAI,CACtC,CAEA,eAAe7G,EAAW,CACxB,YAAK,KAAOA,EACZ,KAAK,KAAOA,EACZ,KAAK,KAAOA,EACZ,KAAK,KAAOA,EACZ,KAAK,KAAOA,EACZ,KAAK,KAAOA,EACZ,KAAK,KAAOA,EACZ,KAAK,KAAOA,EACZ,KAAK,KAAOA,EACL,IACT,CAGA,aAAsB,CACpB,MAAMuG,EAAK,KAAK,MACVwC,EAAIxC,EAAG,CAAC,EACRiH,EAAIjH,EAAG,CAAC,EACRhD,EAAIgD,EAAG,CAAC,EACRS,EAAIT,EAAG,CAAC,EACRhI,EAAIgI,EAAG,CAAC,EACRgH,EAAIhH,EAAG,CAAC,EACRU,EAAIV,EAAG,CAAC,EACRO,EAAIP,EAAG,CAAC,EACRnG,EAAImG,EAAG,CAAC,EACd,OACEwC,EAAIxK,EAAI6B,EAAI2I,EAAIwE,EAAIzG,EAAI0G,EAAIxG,EAAI5G,EAAIoN,EAAID,EAAItG,EAAI1D,EAAIyD,EAAIF,EAAIvD,EAAIhF,EAAI0I,CAExE,CAEA,SAAU,CACR,MAAMV,EAAK,KAAK,MACV6wD,EAAM7wD,EAAG,CAAC,EACV+wD,EAAM/wD,EAAG,CAAC,EACV4xD,EAAM5xD,EAAG,CAAC,EACV8wD,EAAM9wD,EAAG,CAAC,EACVgxD,EAAMhxD,EAAG,CAAC,EACV6xD,EAAM7xD,EAAG,CAAC,EACV0xD,EAAM1xD,EAAG,CAAC,EACV2xD,EAAM3xD,EAAG,CAAC,EACV8xD,EAAM9xD,EAAG,CAAC,EACV4yD,EAAMd,EAAMd,EAAMa,EAAMF,EACxBxK,EAAM0K,EAAMH,EAAMI,EAAMhB,EACxB5J,EAAMyK,EAAMb,EAAME,EAAMU,EACxBmB,EAAMhC,EAAM+B,EAAM7B,EAAM5J,EAAMyK,EAAM1K,EAE1C,GAAI2L,IAAQ,EACH,OAAA,KAAK,IAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,EAG3C,MAAMC,EAAS,EAAID,EAEhB,OAAA7yD,EAAA,CAAC,EAAI4yD,EAAME,EACd9yD,EAAG,CAAC,GAAK4xD,EAAMD,EAAMG,EAAMf,GAAO+B,EAClC9yD,EAAG,CAAC,GAAK6xD,EAAMd,EAAMa,EAAMZ,GAAO8B,EAE/B9yD,EAAA,CAAC,EAAImnD,EAAM2L,EACd9yD,EAAG,CAAC,GAAK8xD,EAAMjB,EAAMe,EAAMF,GAAOoB,EAClC9yD,EAAG,CAAC,GAAK4xD,EAAMd,EAAMe,EAAMhB,GAAOiC,EAE/B9yD,EAAA,CAAC,EAAIknD,EAAM4L,EACd9yD,EAAG,CAAC,GAAK+wD,EAAMW,EAAMC,EAAMd,GAAOiC,EAClC9yD,EAAG,CAAC,GAAKgxD,EAAMH,EAAME,EAAMD,GAAOgC,EAE3B,IACT,CAEA,WAAY,CACN,IAAAnjD,EACJ,MAAMrP,EAAI,KAAK,MAEf,OAAAqP,EAAMrP,EAAE,CAAC,EACPA,EAAA,CAAC,EAAIA,EAAE,CAAC,EACVA,EAAE,CAAC,EAAIqP,EACPA,EAAMrP,EAAE,CAAC,EACPA,EAAA,CAAC,EAAIA,EAAE,CAAC,EACVA,EAAE,CAAC,EAAIqP,EACPA,EAAMrP,EAAE,CAAC,EACPA,EAAA,CAAC,EAAIA,EAAE,CAAC,EACVA,EAAE,CAAC,EAAIqP,EAEA,IACT,CAEA,gBAAgBojD,EAAkB,CAChC,OAAO,KAAK,eAAeA,CAAO,EAAE,QAAA,EAAU,WAChD,CAEA,mBAAmB76D,EAAa,CAC9B,MAAMoI,EAAI,KAAK,MACb,OAAApI,EAAA,CAAC,EAAIoI,EAAE,CAAC,EACRpI,EAAA,CAAC,EAAIoI,EAAE,CAAC,EACRpI,EAAA,CAAC,EAAIoI,EAAE,CAAC,EACRpI,EAAA,CAAC,EAAIoI,EAAE,CAAC,EACRpI,EAAA,CAAC,EAAIoI,EAAE,CAAC,EACRpI,EAAA,CAAC,EAAIoI,EAAE,CAAC,EACRpI,EAAA,CAAC,EAAIoI,EAAE,CAAC,EACRpI,EAAA,CAAC,EAAIoI,EAAE,CAAC,EACRpI,EAAA,CAAC,EAAIoI,EAAE,CAAC,EACH,IACT,CAEA,eACE86C,EACAC,EACAY,EACAC,EACA2G,EACA0B,EACAC,EACA,CACM,MAAAxnD,EAAI,KAAK,IAAI6lD,CAAQ,EACrBppD,EAAI,KAAK,IAAIopD,CAAQ,EACtB,YAAA,IACH5G,EAAKj/C,EACLi/C,EAAKxiD,EACL,CAACwiD,GAAMj/C,EAAIunD,EAAK9qD,EAAI+qD,GAAMD,EAAKnJ,EAC/B,CAACc,EAAKziD,EACNyiD,EAAKl/C,EACL,CAACk/C,GAAM,CAACziD,EAAI8qD,EAAKvnD,EAAIwnD,GAAMA,EAAKnJ,EAChC,EACA,EACA,CAAA,EAEK,IACT,CAEA,MAAMY,EAAYC,EAAY,CAC5B,YAAK,YAAY8W,GAAI,UAAU/W,EAAIC,CAAE,CAAC,EAC/B,IACT,CAEA,OAAOzB,EAAe,CACpB,YAAK,YAAYuY,GAAI,aAAa,CAACvY,CAAK,CAAC,EAClC,IACT,CAEA,UAAUW,EAAYC,EAAY,CAChC,YAAK,YAAY2X,GAAI,gBAAgB5X,EAAIC,CAAE,CAAC,EACrC,IACT,CAEA,gBAAgBvzC,EAAqBF,EAAY,CAC3C,OAAA,OAAOE,GAAM,SACV,KAAA,IAAI,EAAG,EAAGA,EAAG,EAAG,EAAGF,EAAG,EAAG,EAAG,CAAC,EAE7B,KAAA,IAAI,EAAG,EAAGE,EAAE,EAAG,EAAG,EAAGA,EAAE,EAAG,EAAG,EAAG,CAAC,EAEjC,IACT,CAGA,aAAa2yC,EAAe,CACpB,MAAAz9C,EAAI,KAAK,IAAIy9C,CAAK,EAClBhhD,EAAI,KAAK,IAAIghD,CAAK,EACnB,YAAA,IAAIz9C,EAAG,CAACvD,EAAG,EAAGA,EAAGuD,EAAG,EAAG,EAAG,EAAG,CAAC,EAC5B,IACT,CAEA,UAAU8K,EAAWF,EAAW,CACzB,YAAA,IAAIE,EAAG,EAAG,EAAG,EAAGF,EAAG,EAAG,EAAG,EAAG,CAAC,EAC3B,IACT,CAEA,OAAOqrD,EAAiB,CACtB,QAASp5D,EAAI,EAAGA,EAAI,EAAGA,IACrB,GAAI,KAAK,MAAMA,CAAC,IAAMo5D,EAAO,MAAMp5D,CAAC,EAC3B,MAAA,GAGJ,MAAA,EACT,CACF,CAEO,MAAMq5D,EAAQ,CAEnB,MACA,YAAc,GAEd,YAAY3xC,EAAuBovC,GAAuB,CACnD,KAAA,MAAQ,MAAM,KAAKpvC,CAAK,CAC/B,CAEA,IAAI,KAAM,CACD,OAAA,KAAK,MAAM,CAAC,CACrB,CACA,IAAI,KAAM,CACD,OAAA,KAAK,MAAM,CAAC,CACrB,CACA,IAAI,KAAM,CACD,OAAA,KAAK,MAAM,CAAC,CACrB,CACA,IAAI,KAAM,CACD,OAAA,KAAK,MAAM,CAAC,CACrB,CACA,IAAI,KAAM,CACD,OAAA,KAAK,MAAM,CAAC,CACrB,CACA,IAAI,KAAM,CACD,OAAA,KAAK,MAAM,CAAC,CACrB,CACA,IAAI,KAAM,CACD,OAAA,KAAK,MAAM,CAAC,CACrB,CACA,IAAI,KAAM,CACD,OAAA,KAAK,MAAM,CAAC,CACrB,CACA,IAAI,KAAM,CACD,OAAA,KAAK,MAAM,CAAC,CACrB,CACA,IAAI,KAAM,CACD,OAAA,KAAK,MAAM,CAAC,CACrB,CACA,IAAI,KAAM,CACD,OAAA,KAAK,MAAM,EAAE,CACtB,CACA,IAAI,KAAM,CACD,OAAA,KAAK,MAAM,EAAE,CACtB,CACA,IAAI,KAAM,CACD,OAAA,KAAK,MAAM,EAAE,CACtB,CACA,IAAI,KAAM,CACD,OAAA,KAAK,MAAM,EAAE,CACtB,CACA,IAAI,KAAM,CACD,OAAA,KAAK,MAAM,EAAE,CACtB,CACA,IAAI,KAAM,CACD,OAAA,KAAK,MAAM,EAAE,CACtB,CAEA,IAAI,IAAI3D,EAAW,CACZ,KAAA,MAAM,CAAC,EAAIA,CAClB,CACA,IAAI,IAAIA,EAAW,CACZ,KAAA,MAAM,CAAC,EAAIA,CAClB,CACA,IAAI,IAAIA,EAAW,CACZ,KAAA,MAAM,CAAC,EAAIA,CAClB,CACA,IAAI,IAAIA,EAAW,CACZ,KAAA,MAAM,CAAC,EAAIA,CAClB,CACA,IAAI,IAAIA,EAAW,CACZ,KAAA,MAAM,CAAC,EAAIA,CAClB,CACA,IAAI,IAAIA,EAAW,CACZ,KAAA,MAAM,CAAC,EAAIA,CAClB,CACA,IAAI,IAAIA,EAAW,CACZ,KAAA,MAAM,CAAC,EAAIA,CAClB,CACA,IAAI,IAAIA,EAAW,CACZ,KAAA,MAAM,CAAC,EAAIA,CAClB,CACA,IAAI,IAAIA,EAAW,CACZ,KAAA,MAAM,CAAC,EAAIA,CAClB,CACA,IAAI,IAAIA,EAAW,CACZ,KAAA,MAAM,CAAC,EAAIA,CAClB,CACA,IAAI,IAAIA,EAAW,CACZ,KAAA,MAAM,EAAE,EAAIA,CACnB,CACA,IAAI,IAAIA,EAAW,CACZ,KAAA,MAAM,EAAE,EAAIA,CACnB,CACA,IAAI,IAAIA,EAAW,CACZ,KAAA,MAAM,EAAE,EAAIA,CACnB,CACA,IAAI,IAAIA,EAAW,CACZ,KAAA,MAAM,EAAE,EAAIA,CACnB,CACA,IAAI,IAAIA,EAAW,CACZ,KAAA,MAAM,EAAE,EAAIA,CACnB,CACA,IAAI,IAAIA,EAAW,CACZ,KAAA,MAAM,EAAE,EAAIA,CACnB,CAGA,IACEizC,EAAM,EACNC,EAAM,EACNY,EAAM,EACNyB,EAAM,EACNpC,EAAM,EACNC,EAAM,EACNW,EAAM,EACNyB,EAAM,EACNxB,EAAM,EACNC,EAAM,EACNC,EAAM,EACNuB,EAAM,EACNC,EAAM,EACNC,EAAM,EACNC,EAAM,EACNC,EAAM,EACN,CACA,MAAMzzD,EAAK,KAAK,MAChB,OAAAA,EAAG,CAAC,EAAI6wD,EACR7wD,EAAG,CAAC,EAAI8wD,EACR9wD,EAAG,CAAC,EAAI0xD,EACR1xD,EAAG,EAAE,EAAImzD,EACTnzD,EAAG,CAAC,EAAI+wD,EACR/wD,EAAG,CAAC,EAAIgxD,EACRhxD,EAAG,CAAC,EAAI2xD,EACR3xD,EAAG,EAAE,EAAIozD,EACTpzD,EAAG,CAAC,EAAI4xD,EACR5xD,EAAG,CAAC,EAAI6xD,EACR7xD,EAAG,EAAE,EAAI8xD,EACT9xD,EAAG,EAAE,EAAIqzD,EACTrzD,EAAG,CAAC,EAAIszD,EACRtzD,EAAG,CAAC,EAAIuzD,EACRvzD,EAAG,EAAE,EAAIwzD,EACTxzD,EAAG,EAAE,EAAIyzD,EACF,IACT,CAEA,MAAgB,CACd,MACE,CAAC,KAAK,aACN,KAAK,KAAO,GACZ,KAAK,KAAO,GACZ,KAAK,KAAO,GACZ,KAAK,KAAO,GACZ,KAAK,KAAO,GACZ,KAAK,KAAO,CAEhB,CAEA,MAAgB,CACP,MAAA,CAAC,KAAK,MACf,CAEA,UAAW,CACJ,YAAA,MAAQ,MAAM,KAAK9C,EAAqB,EACtC,IACT,CAEA,IAAI,YAAsB,CAEtB,OAAA,KAAK,KAAO,GACZ,KAAK,KAAO,GACZ,KAAK,KAAO,GACZ,KAAK,KAAO,GACZ,KAAK,KAAO,GACZ,KAAK,KAAO,GACZ,KAAK,KAAO,GACZ,KAAK,KAAO,GACZ,KAAK,KAAO,GACZ,KAAK,KAAO,GACZ,KAAK,KAAO,GACZ,KAAK,KAAO,GACZ,KAAK,KAAO,GACZ,KAAK,KAAO,GACZ,KAAK,KAAO,GACZ,KAAK,KAAO,CAEhB,CAEA,KAAKrwD,EAAY,CACf,YAAK,IAAMA,EAAE,IACb,KAAK,IAAMA,EAAE,IACb,KAAK,IAAMA,EAAE,IACb,KAAK,IAAMA,EAAE,IACb,KAAK,IAAMA,EAAE,IACb,KAAK,IAAMA,EAAE,IACb,KAAK,IAAMA,EAAE,IACb,KAAK,IAAMA,EAAE,IACb,KAAK,IAAMA,EAAE,IACb,KAAK,IAAMA,EAAE,IACb,KAAK,IAAMA,EAAE,IACb,KAAK,IAAMA,EAAE,IACb,KAAK,IAAMA,EAAE,IACb,KAAK,IAAMA,EAAE,IACb,KAAK,IAAMA,EAAE,IACb,KAAK,IAAMA,EAAE,IACN,IACT,CAEA,OAAiB,CACR,OAAA,IAAI4yD,GAAQ,KAAK,KAAK,CAC/B,CAGA,OAAO,WAAWz5D,EAAW,CACrB,MAAA6G,EAAI,IAAI4yD,GACRz6C,EAAUi7C,GAAY,SAAUj6D,CAAC,EACnC,OAAAgf,EAAQ,SAAW,IACbA,EAAA,QAAQ,CAACpH,EAAQiF,IAAU,CAC7BjF,EAAO,YACT/Q,EAAE,MAAMgW,CAAK,EAAI,WAAWjF,EAAO,SAAS,EAC9C,CACD,EAEI/Q,CACT,CAEA,UAAUswB,EAAiB3T,EAAS,EAAG,CACrC,QAASpjB,EAAI,EAAGA,EAAI,GAAIA,IACtB,KAAK,MAAMA,CAAC,EAAI+2B,EAAM/2B,EAAIojB,CAAM,EAE3B,OAAA,IACT,CAEA,QAAQ2T,EAAkB,GAAI3T,EAAS,EAAG,CACxC,MAAMjd,EAAK,KAAK,MAEV,OAAA4wB,EAAA3T,CAAM,EAAIjd,EAAG,CAAC,EACpB4wB,EAAM3T,EAAS,CAAC,EAAIjd,EAAG,CAAC,EACxB4wB,EAAM3T,EAAS,CAAC,EAAIjd,EAAG,CAAC,EACxB4wB,EAAM3T,EAAS,CAAC,EAAIjd,EAAG,CAAC,EAExB4wB,EAAM3T,EAAS,CAAC,EAAIjd,EAAG,CAAC,EACxB4wB,EAAM3T,EAAS,CAAC,EAAIjd,EAAG,CAAC,EACxB4wB,EAAM3T,EAAS,CAAC,EAAIjd,EAAG,CAAC,EACxB4wB,EAAM3T,EAAS,CAAC,EAAIjd,EAAG,CAAC,EAExB4wB,EAAM3T,EAAS,CAAC,EAAIjd,EAAG,CAAC,EACxB4wB,EAAM3T,EAAS,CAAC,EAAIjd,EAAG,CAAC,EACxB4wB,EAAM3T,EAAS,EAAE,EAAIjd,EAAG,EAAE,EAC1B4wB,EAAM3T,EAAS,EAAE,EAAIjd,EAAG,EAAE,EAE1B4wB,EAAM3T,EAAS,EAAE,EAAIjd,EAAG,EAAE,EAC1B4wB,EAAM3T,EAAS,EAAE,EAAIjd,EAAG,EAAE,EAC1B4wB,EAAM3T,EAAS,EAAE,EAAIjd,EAAG,EAAE,EAC1B4wB,EAAM3T,EAAS,EAAE,EAAIjd,EAAG,EAAE,EAEnB4wB,CACT,CAEA,aAAatwB,EAAY,CACvB,MAAMN,EAAK,KAAK,MACV2D,EAAKrD,EAAE,MACV,OAAAN,EAAA,EAAE,EAAI2D,EAAG,EAAE,EACX3D,EAAA,EAAE,EAAI2D,EAAG,EAAE,EACX3D,EAAA,EAAE,EAAI2D,EAAG,EAAE,EACP,IACT,CAEA,eAAerD,EAAY,CACzB,MAAMqD,EAAKrD,EAAE,MACR,YAAA,IACHqD,EAAG,CAAC,EACJA,EAAG,CAAC,EACJA,EAAG,CAAC,EACJ,EACAA,EAAG,CAAC,EACJA,EAAG,CAAC,EACJA,EAAG,CAAC,EACJ,EACAA,EAAG,CAAC,EACJA,EAAG,CAAC,EACJA,EAAG,CAAC,EACJ,EACA,EACA,EACA,EACA,CAAA,EAEK,IACT,CAEA,aAAaouD,EAAgBC,EAAgBC,EAAgB,CACrD,OAAAF,EAAA,qBAAqB,KAAM,CAAC,EAC5BC,EAAA,qBAAqB,KAAM,CAAC,EAC5BC,EAAA,qBAAqB,KAAM,CAAC,EAC3B,IACT,CAEA,UAAUF,EAAgBC,EAAgBC,EAAgB,CACnD,YAAA,IACHF,EAAM,EACNC,EAAM,EACNC,EAAM,EACN,EACAF,EAAM,EACNC,EAAM,EACNC,EAAM,EACN,EACAF,EAAM,EACNC,EAAM,EACNC,EAAM,EACN,EACA,EACA,EACA,EACA,CAAA,EAEK,IACT,CAEA,WAAY,CACV,OAAO,KAAK,eAAe,GAAK,KAAK,KAAO,KAAO,CACrD,CAGA,eAAevF,EAKb,CACM,MAAApiD,EAAIoiD,EAAM,GAAK,EACf7kD,EAAI6kD,EAAM,GAAK,EACd,MAAA,CACL,EAAGA,EAAM,EAAI,KAAK,IAAMA,EAAM,EAAI,KAAK,IAAMpiD,EAAI,KAAK,IAAMzC,EAAI,KAAK,IACrE,EAAG6kD,EAAM,EAAI,KAAK,IAAMA,EAAM,EAAI,KAAK,IAAMpiD,EAAI,KAAK,IAAMzC,EAAI,KAAK,IACrE,EAAG6kD,EAAM,EAAI,KAAK,IAAMA,EAAM,EAAI,KAAK,IAAMpiD,EAAI,KAAK,IAAMzC,EAAI,KAAK,IACrE,EAAG6kD,EAAM,EAAI,KAAK,IAAMA,EAAM,EAAI,KAAK,IAAMpiD,EAAI,KAAK,IAAMzC,EAAI,KAAK,GAAA,CAEzE,CAEA,SAASorD,EAAiB,CAClB,KAAA,CAAE,QAAAU,EAAS,QAAAC,EAAS,MAAAC,EAAO,MAAAC,EAAO,EAAAhsD,EAAG,EAAAF,CAAM,EAAA,KAAK,QAChD2Z,EAAsB,CAACoyC,EAASG,EAAOD,EAAOD,EAAS9rD,EAAGF,CAAC,EACjE,OAAIqrD,GACFA,EAAO,MAAQ1xC,EACR0xC,GAEA,IAAI9G,GAAO5qC,CAAK,CAe3B,CAEA,SAAmB,CACjB,YAAK,IAAM,EACX,KAAK,IAAM,EACX,KAAK,IAAM,EACX,KAAK,IAAM,EACX,KAAK,IAAM,EACX,KAAK,IAAM,EACX,KAAK,IAAM,EACX,KAAK,IAAM,EACJ,IACT,CAEA,SAASwyC,EAAmB,EAAG,CAC7B,MAAO,YAAY,KAAK,MACrB,IAAKn2C,GAAMowC,EAAapwC,EAAGm2C,CAAgB,CAAC,EAC5C,KAAK,GAAG,CAAC,GACd,CAEA,OAAQ,CACN,MAAMJ,EAAU,KAAK,KACnB,KAAK,IAAM,KAAK,IAAM,KAAK,IAAM,KAAK,IAAM,KAAK,IAAM,KAAK,GAAA,EAExDC,EAAU,KAAK,KACnB,KAAK,IAAM,KAAK,IAAM,KAAK,IAAM,KAAK,IAAM,KAAK,IAAM,KAAK,GAAA,EAExDI,EAAU,KAAK,KACnB,KAAK,IAAM,KAAK,IAAM,KAAK,IAAM,KAAK,IAAM,KAAK,IAAM,KAAK,GAAA,EAExDC,EAAUle,GAAS9lC,EAAM,KAAK,KAAK,CAAC,KAAK,GAAG,EAAG,GAAI,CAAC,CAAC,EACvD,IAAAikD,EAAUne,GAAS,KAAK,MAAM,KAAK,IAAK,KAAK,GAAG,CAAC,EACjD,KAAK,IAAIF,EAASoe,CAAO,CAAC,IAAM,IACxBC,EAAAne,GAAS,KAAK,MAAM,CAAC,KAAK,IAAK,KAAK,GAAG,CAAC,GAGhD,IAAAoe,EAAUpe,GAAS,KAAK,MAAM,KAAK,IAAK,KAAK,GAAG,CAAC,EACrD,OAAI,KAAK,IAAM,GAAK,KAAK,KAAO,IACnBoe,GAAA,KAEN,CACL,EAAG,KAAK,IACR,EAAG,KAAK,IACR,EAAG,KAAK,IACR,QAAAR,EACA,QAAAC,EACA,QAAAI,EACA,QAAAE,EACA,QAAAD,EACA,QAAAE,EACA,MAAOpe,GAAS,KAAK,GAAG,EACxB,MAAOA,GAAS,KAAK,GAAG,EACxB,MAAOA,GAAS,KAAK,GAAG,EACxB,MAAO,KAAK,IACZ,YAAa,KAAK,IAAM,EAAE,EAAI,KAAK,KAAO,CAAA,CAE9C,CAEA,gBAAgBz1C,EAAY,CAE1B,MAAMN,EAAK,KAAK,MACV2D,EAAKrD,EAAE,MAEP8zD,EAAS,EAAIvY,GAAI,qBAAqBv7C,EAAG,CAAC,EAAE,SAC5C+zD,EAAS,EAAIxY,GAAI,qBAAqBv7C,EAAG,CAAC,EAAE,SAC5Cg0D,EAAS,EAAIzY,GAAI,qBAAqBv7C,EAAG,CAAC,EAAE,SAElD,OAAAN,EAAG,CAAC,EAAI2D,EAAG,CAAC,EAAIywD,EAChBp0D,EAAG,CAAC,EAAI2D,EAAG,CAAC,EAAIywD,EAChBp0D,EAAG,CAAC,EAAI2D,EAAG,CAAC,EAAIywD,EAChBp0D,EAAG,CAAC,EAAI,EAERA,EAAG,CAAC,EAAI2D,EAAG,CAAC,EAAI0wD,EAChBr0D,EAAG,CAAC,EAAI2D,EAAG,CAAC,EAAI0wD,EAChBr0D,EAAG,CAAC,EAAI2D,EAAG,CAAC,EAAI0wD,EAChBr0D,EAAG,CAAC,EAAI,EAERA,EAAG,CAAC,EAAI2D,EAAG,CAAC,EAAI2wD,EAChBt0D,EAAG,CAAC,EAAI2D,EAAG,CAAC,EAAI2wD,EAChBt0D,EAAG,EAAE,EAAI2D,EAAG,EAAE,EAAI2wD,EAClBt0D,EAAG,EAAE,EAAI,EAETA,EAAG,EAAE,EAAI,EACTA,EAAG,EAAE,EAAI,EACTA,EAAG,EAAE,EAAI,EACTA,EAAG,EAAE,EAAI,EAEF,IACT,CAEA,sBAAsBw3C,EAAc,CAClC,MAAMx3C,EAAK,KAAK,MAEV8H,EAAI0vC,EAAM,EACV5vC,EAAI4vC,EAAM,EACVltC,EAAIktC,EAAM,EACVh1C,EAAI,KAAK,IAAIsF,CAAC,EACdb,EAAI,KAAK,IAAIa,CAAC,EACd9K,EAAI,KAAK,IAAI4K,CAAC,EACdnH,EAAI,KAAK,IAAImH,CAAC,EACd5P,EAAI,KAAK,IAAIsS,CAAC,EACdtD,EAAI,KAAK,IAAIsD,CAAC,EAEhB,GAAAktC,EAAM,QAAU,MAAO,CACzB,MAAM9qC,EAAKlK,EAAIxK,EACTu8D,EAAK/xD,EAAIwE,EACTmF,EAAKlF,EAAIjP,EACTw8D,EAAKvtD,EAAID,EAEZhH,EAAA,CAAC,EAAIhD,EAAIhF,EACTgI,EAAA,CAAC,EAAI,CAAChD,EAAIgK,EACbhH,EAAG,CAAC,EAAIS,EAELT,EAAA,CAAC,EAAIu0D,EAAKpoD,EAAK1L,EACfT,EAAA,CAAC,EAAI0M,EAAK8nD,EAAK/zD,EACfT,EAAA,CAAC,EAAI,CAACiH,EAAIjK,EAEVgD,EAAA,CAAC,EAAIw0D,EAAK9nD,EAAKjM,EACfT,EAAA,CAAC,EAAImM,EAAKooD,EAAK9zD,EACfT,EAAA,EAAE,EAAIwC,EAAIxF,CAAA,SACJw6C,EAAM,QAAU,MAAO,CAChC,MAAM3pC,EAAK7Q,EAAIhF,EACTy8D,EAAKz3D,EAAIgK,EACT0tD,EAAKj0D,EAAIzI,EACT28D,EAAKl0D,EAAIuG,EAEZhH,EAAA,CAAC,EAAI6N,EAAK8mD,EAAK1tD,EACfjH,EAAA,CAAC,EAAI00D,EAAKztD,EAAIwtD,EACdz0D,EAAA,CAAC,EAAIwC,EAAI/B,EAETT,EAAA,CAAC,EAAIwC,EAAIwE,EACThH,EAAA,CAAC,EAAIwC,EAAIxK,EACTgI,EAAA,CAAC,EAAI,CAACiH,EAENjH,EAAA,CAAC,EAAIy0D,EAAKxtD,EAAIytD,EACd10D,EAAA,CAAC,EAAI20D,EAAK9mD,EAAK5G,EACfjH,EAAA,EAAE,EAAIwC,EAAIxF,CAAA,SACJw6C,EAAM,QAAU,MAAO,CAChC,MAAM3pC,EAAK7Q,EAAIhF,EACTy8D,EAAKz3D,EAAIgK,EACT0tD,EAAKj0D,EAAIzI,EACT28D,EAAKl0D,EAAIuG,EAEZhH,EAAA,CAAC,EAAI6N,EAAK8mD,EAAK1tD,EACfjH,EAAA,CAAC,EAAI,CAACwC,EAAIwE,EACVhH,EAAA,CAAC,EAAI00D,EAAKD,EAAKxtD,EAEfjH,EAAA,CAAC,EAAIy0D,EAAKC,EAAKztD,EACfjH,EAAA,CAAC,EAAIwC,EAAIxK,EACTgI,EAAA,CAAC,EAAI20D,EAAK9mD,EAAK5G,EAEfjH,EAAA,CAAC,EAAI,CAACwC,EAAI/B,EACbT,EAAG,CAAC,EAAIiH,EACLjH,EAAA,EAAE,EAAIwC,EAAIxF,CAAA,SACJw6C,EAAM,QAAU,MAAO,CAChC,MAAM9qC,EAAKlK,EAAIxK,EACTu8D,EAAK/xD,EAAIwE,EACTmF,EAAKlF,EAAIjP,EACTw8D,EAAKvtD,EAAID,EAEZhH,EAAA,CAAC,EAAIhD,EAAIhF,EACTgI,EAAA,CAAC,EAAImM,EAAK1L,EAAI8zD,EACdv0D,EAAA,CAAC,EAAI0M,EAAKjM,EAAI+zD,EAEdx0D,EAAA,CAAC,EAAIhD,EAAIgK,EACThH,EAAA,CAAC,EAAIw0D,EAAK/zD,EAAIiM,EACd1M,EAAA,CAAC,EAAIu0D,EAAK9zD,EAAI0L,EAEdnM,EAAA,CAAC,EAAI,CAACS,EACNT,EAAA,CAAC,EAAIiH,EAAIjK,EACTgD,EAAA,EAAE,EAAIwC,EAAIxF,CAAA,SACJw6C,EAAM,QAAU,MAAO,CAChC,MAAMod,EAAKpyD,EAAIxF,EACT63D,EAAKryD,EAAI/B,EACTrG,EAAK6M,EAAIjK,EACT83D,EAAK7tD,EAAIxG,EAEZT,EAAA,CAAC,EAAIhD,EAAIhF,EACTgI,EAAA,CAAC,EAAI80D,EAAKF,EAAK5tD,EACfhH,EAAA,CAAC,EAAI5F,EAAK4M,EAAI6tD,EAEjB70D,EAAG,CAAC,EAAIgH,EACLhH,EAAA,CAAC,EAAIwC,EAAIxK,EACTgI,EAAA,CAAC,EAAI,CAACiH,EAAIjP,EAEVgI,EAAA,CAAC,EAAI,CAACS,EAAIzI,EACVgI,EAAA,CAAC,EAAI60D,EAAK7tD,EAAI5M,EACd4F,EAAA,EAAE,EAAI40D,EAAKE,EAAK9tD,CAAA,SACVwwC,EAAM,QAAU,MAAO,CAChC,MAAMod,EAAKpyD,EAAIxF,EACT63D,EAAKryD,EAAI/B,EACTrG,EAAK6M,EAAIjK,EACT83D,EAAK7tD,EAAIxG,EAEZT,EAAA,CAAC,EAAIhD,EAAIhF,EACTgI,EAAA,CAAC,EAAI,CAACgH,EACNhH,EAAA,CAAC,EAAIS,EAAIzI,EAETgI,EAAA,CAAC,EAAI40D,EAAK5tD,EAAI8tD,EACd90D,EAAA,CAAC,EAAIwC,EAAIxK,EACTgI,EAAA,CAAC,EAAI60D,EAAK7tD,EAAI5M,EAEd4F,EAAA,CAAC,EAAI5F,EAAK4M,EAAI6tD,EACd70D,EAAA,CAAC,EAAIiH,EAAIjP,EACTgI,EAAA,EAAE,EAAI80D,EAAK9tD,EAAI4tD,CACpB,CAGA,OAAA50D,EAAG,CAAC,EAAI,EACRA,EAAG,CAAC,EAAI,EACRA,EAAG,EAAE,EAAI,EAGTA,EAAG,EAAE,EAAI,EACTA,EAAG,EAAE,EAAI,EACTA,EAAG,EAAE,EAAI,EACTA,EAAG,EAAE,EAAI,EAEF,IACT,CAEA,2BAA2B4N,EAAe,CACxC,OAAO,KAAK,QAAQmnD,GAAOnnD,EAAGonD,EAAI,CACpC,CAEA,OAAOC,EAAczkD,EAAiB0kD,EAAa,CACjD,MAAMl1D,EAAK,KAAK,MAEb,OAAAm1D,GAAA,WAAWF,EAAKzkD,CAAM,EAErB2kD,GAAG,SAAS,IAAM,IAEpBA,GAAG,EAAI,GAGTA,GAAG,UAAU,EACVC,GAAA,aAAaF,EAAIC,EAAE,EAElBC,GAAG,SAAS,IAAM,IAGhB,KAAK,IAAIF,EAAG,CAAC,IAAM,EACrBC,GAAG,GAAK,KAERA,GAAG,GAAK,KAGVA,GAAG,UAAU,EACVC,GAAA,aAAaF,EAAIC,EAAE,GAGxBC,GAAG,UAAU,EACVC,GAAA,aAAaF,GAAIC,EAAE,EAEnBp1D,EAAA,CAAC,EAAIo1D,GAAG,EACRp1D,EAAA,CAAC,EAAIq1D,GAAG,EACRr1D,EAAA,CAAC,EAAIm1D,GAAG,EACRn1D,EAAA,CAAC,EAAIo1D,GAAG,EACRp1D,EAAA,CAAC,EAAIq1D,GAAG,EACRr1D,EAAA,CAAC,EAAIm1D,GAAG,EACRn1D,EAAA,CAAC,EAAIo1D,GAAG,EACRp1D,EAAA,CAAC,EAAIq1D,GAAG,EACRr1D,EAAA,EAAE,EAAIm1D,GAAG,EAEL,IACT,CAEA,iBAAiB3yD,EAAYyE,EAAY,CACvC,MAAMyF,EAAKlK,EAAE,MACP2J,EAAKlF,EAAE,MACPjH,EAAK,KAAK,MAEVixD,EAAMvkD,EAAG,CAAC,EACVwkD,EAAMxkD,EAAG,CAAC,EACVwlD,EAAMxlD,EAAG,CAAC,EACV4oD,EAAM5oD,EAAG,EAAE,EACXykD,EAAMzkD,EAAG,CAAC,EACV0kD,EAAM1kD,EAAG,CAAC,EACVylD,EAAMzlD,EAAG,CAAC,EACV6oD,EAAM7oD,EAAG,EAAE,EACX0lD,EAAM1lD,EAAG,CAAC,EACV2lD,EAAM3lD,EAAG,CAAC,EACV4lD,EAAM5lD,EAAG,EAAE,EACX8oD,EAAM9oD,EAAG,EAAE,EACX+oD,EAAM/oD,EAAG,CAAC,EACVgpD,EAAMhpD,EAAG,CAAC,EACVipD,EAAMjpD,EAAG,EAAE,EACXkpD,EAAMlpD,EAAG,EAAE,EAEX2kD,EAAMllD,EAAG,CAAC,EACVmlD,EAAMnlD,EAAG,CAAC,EACVomD,EAAMpmD,EAAG,CAAC,EACV0pD,EAAM1pD,EAAG,EAAE,EACXolD,EAAMplD,EAAG,CAAC,EACVqlD,EAAMrlD,EAAG,CAAC,EACVqmD,EAAMrmD,EAAG,CAAC,EACV2pD,GAAM3pD,EAAG,EAAE,EACXsmD,GAAMtmD,EAAG,CAAC,EACVumD,GAAMvmD,EAAG,CAAC,EACVwmD,GAAMxmD,EAAG,EAAE,EACX4pD,GAAM5pD,EAAG,EAAE,EACX6pD,GAAM7pD,EAAG,CAAC,EACV8pD,EAAM9pD,EAAG,CAAC,EACV+pD,EAAM/pD,EAAG,EAAE,EACXgqD,EAAMhqD,EAAG,EAAE,EAEd,OAAAnM,EAAA,CAAC,EAAIixD,EAAMI,EAAMH,EAAMK,EAAMW,EAAMO,GAAM6C,EAAMU,GAC/Ch2D,EAAA,CAAC,EAAIixD,EAAMK,EAAMJ,EAAMM,EAAMU,EAAMQ,GAAM4C,EAAMW,EAC/Cj2D,EAAA,CAAC,EAAIixD,EAAMsB,EAAMrB,EAAMsB,EAAMN,EAAMS,GAAM2C,EAAMY,EAC/Cl2D,EAAA,EAAE,EAAIixD,EAAM4E,EAAM3E,EAAM4E,GAAM5D,EAAM6D,GAAMT,EAAMa,EAEhDn2D,EAAA,CAAC,EAAImxD,EAAME,EAAMD,EAAMG,EAAMY,EAAMM,GAAM8C,EAAMS,GAC/Ch2D,EAAA,CAAC,EAAImxD,EAAMG,EAAMF,EAAMI,EAAMW,EAAMO,GAAM6C,EAAMU,EAC/Cj2D,EAAA,CAAC,EAAImxD,EAAMoB,EAAMnB,EAAMoB,EAAML,EAAMQ,GAAM4C,EAAMW,EAC/Cl2D,EAAA,EAAE,EAAImxD,EAAM0E,EAAMzE,EAAM0E,GAAM3D,EAAM4D,GAAMR,EAAMY,EAEhDn2D,EAAA,CAAC,EAAIoyD,EAAMf,EAAMgB,EAAMd,EAAMe,EAAMG,GAAM+C,EAAMQ,GAC/Ch2D,EAAA,CAAC,EAAIoyD,EAAMd,EAAMe,EAAMb,EAAMc,EAAMI,GAAM8C,EAAMS,EAC/Cj2D,EAAA,EAAE,EAAIoyD,EAAMG,EAAMF,EAAMG,EAAMF,EAAMK,GAAM6C,EAAMU,EAChDl2D,EAAA,EAAE,EAAIoyD,EAAMyD,EAAMxD,EAAMyD,GAAMxD,EAAMyD,GAAMP,EAAMW,EAEhDn2D,EAAA,CAAC,EAAIy1D,EAAMpE,EAAMqE,EAAMnE,EAAMoE,EAAMlD,GAAMmD,EAAMI,GAC/Ch2D,EAAA,CAAC,EAAIy1D,EAAMnE,EAAMoE,EAAMlE,EAAMmE,EAAMjD,GAAMkD,EAAMK,EAC/Cj2D,EAAA,EAAE,EAAIy1D,EAAMlD,EAAMmD,EAAMlD,EAAMmD,EAAMhD,GAAMiD,EAAMM,EAChDl2D,EAAA,EAAE,EAAIy1D,EAAMI,EAAMH,EAAMI,GAAMH,EAAMI,GAAMH,EAAMO,EAE5C,IACT,CAEA,SAAS71D,EAAY,CACZ,OAAA,KAAK,iBAAiB,KAAMA,CAAC,CACtC,CAEA,YAAYA,EAAY,CACf,OAAA,KAAK,iBAAiBA,EAAG,IAAI,CACtC,CAEA,eAAe7G,EAAW,CACxB,YAAK,KAAOA,EACZ,KAAK,KAAOA,EACZ,KAAK,KAAOA,EACZ,KAAK,KAAOA,EACZ,KAAK,KAAOA,EACZ,KAAK,KAAOA,EACZ,KAAK,KAAOA,EACZ,KAAK,KAAOA,EACZ,KAAK,KAAOA,EACZ,KAAK,KAAOA,EACZ,KAAK,KAAOA,EACZ,KAAK,KAAOA,EACL,IACT,CAGA,aAAc,CACZ,MAAMuG,EAAK,KAAK,MAEV6wD,EAAM7wD,EAAG,CAAC,EACV8wD,EAAM9wD,EAAG,CAAC,EACV0xD,EAAM1xD,EAAG,CAAC,EACVmzD,EAAMnzD,EAAG,EAAE,EACX+wD,EAAM/wD,EAAG,CAAC,EACVgxD,EAAMhxD,EAAG,CAAC,EACV2xD,EAAM3xD,EAAG,CAAC,EACVozD,EAAMpzD,EAAG,EAAE,EACX4xD,EAAM5xD,EAAG,CAAC,EACV6xD,EAAM7xD,EAAG,CAAC,EACV8xD,EAAM9xD,EAAG,EAAE,EACXqzD,EAAMrzD,EAAG,EAAE,EACXszD,EAAMtzD,EAAG,CAAC,EACVuzD,EAAMvzD,EAAG,CAAC,EACVwzD,EAAMxzD,EAAG,EAAE,EACXyzD,EAAMzzD,EAAG,EAAE,EAKjB,OACEszD,GACG,CAACH,EAAMxB,EAAME,EACZH,EAAM0B,EAAMvB,EACZsB,EAAMnC,EAAMc,EACZhB,EAAMsC,EAAMtB,EACZJ,EAAMV,EAAMqC,EACZvC,EAAMa,EAAM0B,GAChBE,GACG,CAAC1C,EAAMc,EAAM0B,EACZxC,EAAMuC,EAAMtB,EACZqB,EAAMpC,EAAMe,EACZJ,EAAMX,EAAMsC,EACZ3B,EAAM0B,EAAMxB,EACZuB,EAAMxB,EAAMC,GAChB4B,GACG,CAAC3C,EAAMuC,EAAMvB,EACZhB,EAAMG,EAAMqC,EACZF,EAAMpC,EAAMc,EACZf,EAAMC,EAAMsC,EACZF,EAAMnC,EAAMY,EACZd,EAAMsC,EAAMxB,GAChB6B,GACG,CAAC/B,EAAMV,EAAMY,EACZf,EAAMc,EAAME,EACZhB,EAAMG,EAAMc,EACZJ,EAAMX,EAAMc,EACZf,EAAMC,EAAMe,EACZhB,EAAMa,EAAMC,EAEpB,CAEA,WAAY,CACV,MAAM5xD,EAAK,KAAK,MACZ,IAAA2P,EAEJ,OAAAA,EAAM3P,EAAG,CAAC,EACPA,EAAA,CAAC,EAAIA,EAAG,CAAC,EACZA,EAAG,CAAC,EAAI2P,EACRA,EAAM3P,EAAG,CAAC,EACPA,EAAA,CAAC,EAAIA,EAAG,CAAC,EACZA,EAAG,CAAC,EAAI2P,EACRA,EAAM3P,EAAG,CAAC,EACPA,EAAA,CAAC,EAAIA,EAAG,CAAC,EACZA,EAAG,CAAC,EAAI2P,EAERA,EAAM3P,EAAG,CAAC,EACPA,EAAA,CAAC,EAAIA,EAAG,EAAE,EACbA,EAAG,EAAE,EAAI2P,EACTA,EAAM3P,EAAG,CAAC,EACPA,EAAA,CAAC,EAAIA,EAAG,EAAE,EACbA,EAAG,EAAE,EAAI2P,EACTA,EAAM3P,EAAG,EAAE,EACRA,EAAA,EAAE,EAAIA,EAAG,EAAE,EACdA,EAAG,EAAE,EAAI2P,EAEF,IACT,CAIA,YAAY7H,EAAqBF,EAAY0C,EAAkB,CAC7D,MAAMtK,EAAK,KAAK,MAChB,OAAI8H,aAAa6yC,IACZ36C,EAAA,EAAE,EAAI8H,EAAE,EACR9H,EAAA,EAAE,EAAI8H,EAAE,EACR9H,EAAA,EAAE,EAAI8H,EAAE,GAEX,OAAOA,GAAK,UACZ,OAAOF,GAAK,UACZ,OAAO0C,GAAK,WAEZtK,EAAG,EAAE,EAAI8H,EACT9H,EAAG,EAAE,EAAI4H,EACT5H,EAAG,EAAE,EAAIsK,GAEJ,IACT,CAEA,SAAU,CACR,MAAMtK,EAAK,KAAK,MACV6wD,EAAM7wD,EAAG,CAAC,EACV+wD,EAAM/wD,EAAG,CAAC,EACV4xD,EAAM5xD,EAAG,CAAC,EACVszD,EAAMtzD,EAAG,CAAC,EACV8wD,EAAM9wD,EAAG,CAAC,EACVgxD,EAAMhxD,EAAG,CAAC,EACV6xD,EAAM7xD,EAAG,CAAC,EACVuzD,EAAMvzD,EAAG,CAAC,EACV0xD,EAAM1xD,EAAG,CAAC,EACV2xD,EAAM3xD,EAAG,CAAC,EACV8xD,EAAM9xD,EAAG,EAAE,EACXwzD,EAAMxzD,EAAG,EAAE,EACXmzD,EAAMnzD,EAAG,EAAE,EACXozD,EAAMpzD,EAAG,EAAE,EACXqzD,EAAMrzD,EAAG,EAAE,EACXyzD,EAAMzzD,EAAG,EAAE,EACX4yD,EACJjB,EAAM0B,EAAME,EACZH,EAAMtB,EAAMyB,EACZH,EAAMvB,EAAM2B,EACZxC,EAAMqC,EAAMG,EACZ7B,EAAME,EAAM4B,EACZzC,EAAMc,EAAM2B,EACRtM,EACJgM,EAAMrB,EAAMyB,EACZ7B,EAAM2B,EAAME,EACZJ,EAAMtB,EAAM2B,EACZ1C,EAAMuC,EAAMG,EACZ9B,EAAMG,EAAM4B,EACZ3C,EAAMgB,EAAM2B,EACRvM,EACJwK,EAAM0B,EAAMG,EACZJ,EAAMxB,EAAM4B,EACZJ,EAAMnC,EAAMwC,EACZ1C,EAAMsC,EAAMI,EACZ9B,EAAMV,EAAMyC,EACZ3C,EAAMa,EAAM8B,EACR2C,EACJjD,EAAMxB,EAAME,EACZH,EAAM0B,EAAMvB,EACZsB,EAAMnC,EAAMc,EACZhB,EAAMsC,EAAMtB,EACZJ,EAAMV,EAAMqC,EACZvC,EAAMa,EAAM0B,EAERR,EAAMhC,EAAM+B,EAAM7B,EAAM5J,EAAMyK,EAAM1K,EAAMoM,EAAM8C,EAEtD,GAAIvD,IAAQ,EACV,OAAO,KAAK,IAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,EAGhE,MAAMC,EAAS,EAAID,EAEhB,OAAA7yD,EAAA,CAAC,EAAI4yD,EAAME,EACd9yD,EAAG,CAAC,GACDozD,EAAMtB,EAAMwB,EACX3B,EAAM0B,EAAMC,EACZF,EAAMxB,EAAM4B,EACZzC,EAAMsC,EAAMG,EACZ7B,EAAMC,EAAM6B,EACZ1C,EAAMe,EAAM2B,GACdX,EACF9yD,EAAG,CAAC,GACDgxD,EAAMqC,EAAMC,EACXF,EAAMvB,EAAMyB,EACZF,EAAMxB,EAAM2B,EACZxC,EAAMsC,EAAME,EACZvC,EAAMY,EAAM6B,EACZ1C,EAAMc,EAAM4B,GACdX,EACF9yD,EAAG,CAAC,GACD2xD,EAAME,EAAMyB,EACXtC,EAAMc,EAAMwB,EACZ3B,EAAMC,EAAM2B,EACZxC,EAAMe,EAAMyB,EACZvC,EAAMY,EAAM4B,EACZzC,EAAMc,EAAM2B,GACdV,EAEC9yD,EAAA,CAAC,EAAImnD,EAAM2L,EACd9yD,EAAG,CAAC,GACD0xD,EAAM2B,EAAMC,EACXH,EAAMrB,EAAMwB,EACZH,EAAMvB,EAAM4B,EACZ3C,EAAMwC,EAAMG,EACZ9B,EAAME,EAAM6B,EACZ5C,EAAMiB,EAAM2B,GACdX,EACF9yD,EAAG,CAAC,GACDmzD,EAAMtB,EAAMyB,EACXxC,EAAMuC,EAAMC,EACZH,EAAMvB,EAAM2B,EACZ1C,EAAMwC,EAAME,EACZzC,EAAMc,EAAM6B,EACZ5C,EAAMgB,EAAM4B,GACdX,EACF9yD,EAAG,CAAC,GACD8wD,EAAMgB,EAAMwB,EACX5B,EAAMG,EAAMyB,EACZ5B,EAAME,EAAM2B,EACZ1C,EAAMiB,EAAMyB,EACZzC,EAAMc,EAAM4B,EACZ3C,EAAMgB,EAAM2B,GACdV,EAEC9yD,EAAA,CAAC,EAAIknD,EAAM4L,EACd9yD,EAAG,CAAC,GACDmzD,EAAMxB,EAAM2B,EACX5B,EAAM0B,EAAME,EACZH,EAAMpC,EAAMyC,EACZ3C,EAAMuC,EAAMI,EACZ9B,EAAMX,EAAM0C,EACZ5C,EAAMc,EAAM8B,GACdX,EACF9yD,EAAG,EAAE,GACF8wD,EAAMsC,EAAME,EACXH,EAAMnC,EAAMsC,EACZH,EAAMpC,EAAMwC,EACZ1C,EAAMuC,EAAMG,EACZzC,EAAMC,EAAM0C,EACZ5C,EAAMG,EAAMyC,GACdX,EACF9yD,EAAG,EAAE,GACF0xD,EAAMV,EAAMsC,EACXxC,EAAMa,EAAM2B,EACZ5B,EAAMX,EAAMwC,EACZ1C,EAAMc,EAAM4B,EACZzC,EAAMC,EAAMyC,EACZ3C,EAAMG,EAAMwC,GACdV,EAEC9yD,EAAA,EAAE,EAAIo2D,EAAMtD,EACf9yD,EAAG,EAAE,GACF0xD,EAAM0B,EAAMxB,EACXuB,EAAMxB,EAAMC,EACZuB,EAAMpC,EAAMe,EACZjB,EAAMuC,EAAMtB,EACZJ,EAAMX,EAAMsC,EACZxC,EAAMc,EAAM0B,GACdP,EACF9yD,EAAG,EAAE,GACFmzD,EAAMnC,EAAMY,EACXd,EAAMsC,EAAMxB,EACZuB,EAAMpC,EAAMc,EACZhB,EAAMuC,EAAMvB,EACZf,EAAMC,EAAMsC,EACZxC,EAAMG,EAAMqC,GACdP,EACF9yD,EAAG,EAAE,GACF8wD,EAAMa,EAAMC,EACXF,EAAMV,EAAMY,EACZF,EAAMX,EAAMc,EACZhB,EAAMc,EAAME,EACZf,EAAMC,EAAMe,EACZjB,EAAMG,EAAMc,GACdgB,EACK,IACT,CAEA,mBAAoB,CAClB,MAAM9yD,EAAK,KAAK,MACVq2D,EAAWr2D,EAAG,CAAC,EAAIA,EAAG,CAAC,EAAIA,EAAG,CAAC,EAAIA,EAAG,CAAC,EAAIA,EAAG,CAAC,EAAIA,EAAG,CAAC,EACvDs2D,EAAWt2D,EAAG,CAAC,EAAIA,EAAG,CAAC,EAAIA,EAAG,CAAC,EAAIA,EAAG,CAAC,EAAIA,EAAG,CAAC,EAAIA,EAAG,CAAC,EACvDu2D,EAAWv2D,EAAG,CAAC,EAAIA,EAAG,CAAC,EAAIA,EAAG,CAAC,EAAIA,EAAG,CAAC,EAAIA,EAAG,EAAE,EAAIA,EAAG,EAAE,EAC/D,OAAO,KAAK,KAAK,KAAK,IAAIq2D,EAAUC,EAAUC,CAAQ,CAAC,CACzD,CAEA,gBAAgBzuD,EAAqBF,EAAY0C,EAAY,CAC3D,OAAIxC,aAAa6yC,GACf,KAAK,IAAI,EAAG,EAAG,EAAG7yC,EAAE,EAAG,EAAG,EAAG,EAAGA,EAAE,EAAG,EAAG,EAAG,EAAGA,EAAE,EAAG,EAAG,EAAG,EAAG,CAAC,EAE7D,KAAK,IAAI,EAAG,EAAG,EAAGA,EAAG,EAAG,EAAG,EAAGF,EAAG,EAAG,EAAG,EAAG0C,EAAG,EAAG,EAAG,EAAG,CAAC,EAElD,IACT,CAEA,cAAcmwC,EAAe,CACrB,MAAAz9C,EAAI,KAAK,IAAIy9C,CAAK,EAClBhhD,EAAI,KAAK,IAAIghD,CAAK,EACxB,YAAK,IAAI,EAAG,EAAG,EAAG,EAAG,EAAGz9C,EAAG,CAACvD,EAAG,EAAG,EAAGA,EAAGuD,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,EACjD,IACT,CAEA,cAAcy9C,EAAe,CACrB,MAAAz9C,EAAI,KAAK,IAAIy9C,CAAK,EAClBhhD,EAAI,KAAK,IAAIghD,CAAK,EACxB,YAAK,IAAIz9C,EAAG,EAAGvD,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAACA,EAAG,EAAGuD,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,EACjD,IACT,CAEA,cAAcy9C,EAAe,CACrB,MAAAz9C,EAAI,KAAK,IAAIy9C,CAAK,EAClBhhD,EAAI,KAAK,IAAIghD,CAAK,EACxB,YAAK,IAAIz9C,EAAG,CAACvD,EAAG,EAAG,EAAGA,EAAGuD,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,EACjD,IACT,CAEA,iBAAiBg7C,EAAe/B,EAAe,CAGvC,MAAAj5C,EAAI,KAAK,IAAIi5C,CAAK,EAClBx8C,EAAI,KAAK,IAAIw8C,CAAK,EAClBvuC,EAAI,EAAI1K,EACR8K,EAAIkwC,EAAK,EACTpwC,EAAIowC,EAAK,EACT1tC,EAAI0tC,EAAK,EACToD,EAAK1zC,EAAII,EACTuzC,EAAK3zC,EAAIE,EAEV,YAAA,IACHwzC,EAAKtzC,EAAI9K,EACTo+C,EAAKxzC,EAAInO,EAAI6Q,EACb8wC,EAAK9wC,EAAI7Q,EAAImO,EACb,EACAwzC,EAAKxzC,EAAInO,EAAI6Q,EACb+wC,EAAKzzC,EAAI5K,EACTq+C,EAAK/wC,EAAI7Q,EAAIqO,EACb,EACAszC,EAAK9wC,EAAI7Q,EAAImO,EACbyzC,EAAK/wC,EAAI7Q,EAAIqO,EACbJ,EAAI4C,EAAIA,EAAItN,EACZ,EACA,EACA,EACA,EACA,CAAA,EAGK,IACT,CAEA,UAAU8K,EAAWF,EAAW0C,EAAW,CACzC,YAAK,IAAIxC,EAAG,EAAG,EAAG,EAAG,EAAGF,EAAG,EAAG,EAAG,EAAG,EAAG0C,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,EAChD,IACT,CAEA,UACEkyC,EACAC,EACA+Z,EACA9Z,EACA+Z,EACAC,EACA,CACA,YAAK,IAAI,EAAGF,EAAIC,EAAI,EAAGja,EAAI,EAAGka,EAAI,EAAGja,EAAIC,EAAI,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,EACtD,IACT,CAEA,gBACEhR,EACAuiB,EACAxiB,EACAkrB,EACAC,EACAC,EACAC,EAAmBxG,GACnB,CACA,MAAMtwD,EAAK,KAAK,MACV8H,EAAK,EAAI8uD,GAAS3I,EAAQviB,GAC1B9jC,EAAK,EAAIgvD,GAASnrB,EAAMkrB,GAExBn0D,GAAKyrD,EAAQviB,IAASuiB,EAAQviB,GAC9BzkC,GAAKwkC,EAAMkrB,IAAWlrB,EAAMkrB,GAElC,IAAI35D,EAAGyD,EAEP,GAAIq2D,IAAqBxG,GACnBtzD,EAAA,EAAE65D,EAAMD,IAASC,EAAMD,GACtBn2D,EAAA,GAAKo2D,EAAMD,GAASC,EAAMD,WACtBE,IAAqBvG,GAC1BvzD,EAAA,CAAC65D,GAAOA,EAAMD,GACbn2D,EAAA,CAACo2D,EAAMD,GAASC,EAAMD,OAE3B,OAAM,IAAI,MACR,yDACEE,CAAA,EAIN,OAAA92D,EAAG,CAAC,EAAI8H,EACR9H,EAAG,CAAC,EAAI,EACRA,EAAG,CAAC,EAAIwC,EACRxC,EAAG,EAAE,EAAI,EACTA,EAAG,CAAC,EAAI,EACRA,EAAG,CAAC,EAAI4H,EACR5H,EAAG,CAAC,EAAIiH,EACRjH,EAAG,EAAE,EAAI,EACTA,EAAG,CAAC,EAAI,EACRA,EAAG,CAAC,EAAI,EACRA,EAAG,EAAE,EAAIhD,EACTgD,EAAG,EAAE,EAAIS,EACTT,EAAG,CAAC,EAAI,EACRA,EAAG,CAAC,EAAI,EACRA,EAAG,EAAE,EAAI,GACTA,EAAG,EAAE,EAAI,EAEF,IACT,CAEA,iBACE0rC,EACAuiB,EACAxiB,EACAkrB,EACAC,EACAC,EACAC,EAAmBxG,GACnB,CACA,MAAMtwD,EAAK,KAAK,MACV6H,EAAI,GAAOomD,EAAQviB,GACnBnrC,EAAI,GAAOkrC,EAAMkrB,GACjBn2D,EAAI,GAAOq2D,EAAMD,GAEjB9uD,GAAKmmD,EAAQviB,GAAQ7jC,EACrBD,GAAK6jC,EAAMkrB,GAAUp2D,EAE3B,IAAI+J,EAAGysD,EAEP,GAAID,IAAqBxG,GACvBhmD,GAAKusD,EAAMD,GAAQp2D,EACnBu2D,EAAO,GAAKv2D,UACHs2D,IAAqBvG,GAC9BjmD,EAAIssD,EAAOp2D,EACXu2D,EAAO,GAAKv2D,MAEZ,OAAM,IAAI,MACR,0DACEs2D,CAAA,EAIH,OAAA92D,EAAA,CAAC,EAAI,EAAI6H,EACZ7H,EAAG,CAAC,EAAI,EACRA,EAAG,CAAC,EAAI,EACLA,EAAA,EAAE,EAAI,CAAC8H,EACV9H,EAAG,CAAC,EAAI,EACLA,EAAA,CAAC,EAAI,EAAIO,EACZP,EAAG,CAAC,EAAI,EACLA,EAAA,EAAE,EAAI,CAAC4H,EACV5H,EAAG,CAAC,EAAI,EACRA,EAAG,CAAC,EAAI,EACRA,EAAG,EAAE,EAAI+2D,EACN/2D,EAAA,EAAE,EAAI,CAACsK,EACVtK,EAAG,CAAC,EAAI,EACRA,EAAG,CAAC,EAAI,EACRA,EAAG,EAAE,EAAI,EACTA,EAAG,EAAE,EAAI,EAEF,IACT,CAEA,QAAQg3D,EAAmBzf,EAAwB4Y,EAAgB,CACjE,MAAMnwD,EAAK,KAAK,MAEV8H,EAAIyvC,EAAW,EACf3vC,EAAI2vC,EAAW,EACfjtC,EAAIitC,EAAW,EACf1vC,EAAI0vC,EAAW,EACfxV,EAAKj6B,EAAIA,EACTk6B,EAAKp6B,EAAIA,EACT++C,EAAKr8C,EAAIA,EACT+xC,EAAKv0C,EAAIi6B,EACTya,EAAK10C,EAAIk6B,EACTya,EAAK30C,EAAI6+C,EACTrK,EAAK10C,EAAIo6B,EACT0a,EAAK90C,EAAI++C,EACTpK,EAAKjyC,EAAIq8C,EACTsQ,EAAKpvD,EAAIk6B,EACTm1B,EAAKrvD,EAAIm6B,EACTm1B,EAAKtvD,EAAI8+C,EAET1K,EAAKkU,EAAM,EACXjU,EAAKiU,EAAM,EACXhU,EAAKgU,EAAM,EAEjB,OAAAnwD,EAAG,CAAC,GAAK,GAAKs8C,EAAKC,IAAON,EACvBj8C,EAAA,CAAC,GAAKw8C,EAAK2a,GAAMlb,EACjBj8C,EAAA,CAAC,GAAKy8C,EAAKya,GAAMjb,EACpBj8C,EAAG,CAAC,EAAI,EAELA,EAAA,CAAC,GAAKw8C,EAAK2a,GAAMjb,EACpBl8C,EAAG,CAAC,GAAK,GAAKq8C,EAAKE,IAAOL,EACvBl8C,EAAA,CAAC,GAAK08C,EAAKua,GAAM/a,EACpBl8C,EAAG,CAAC,EAAI,EAELA,EAAA,CAAC,GAAKy8C,EAAKya,GAAM/a,EACjBn8C,EAAA,CAAC,GAAK08C,EAAKua,GAAM9a,EACpBn8C,EAAG,EAAE,GAAK,GAAKq8C,EAAKC,IAAOH,EAC3Bn8C,EAAG,EAAE,EAAI,EAENA,EAAA,EAAE,EAAIg3D,EAAS,EACfh3D,EAAA,EAAE,EAAIg3D,EAAS,EACfh3D,EAAA,EAAE,EAAIg3D,EAAS,EAClBh3D,EAAG,EAAE,EAAI,EAEF,IACT,CAEA,UAAUg3D,EAAmBzf,EAAwB4Y,EAAgB,CACnE,MAAMnwD,EAAK,KAAK,MAEhB,IAAIi8C,EAAKJ,GAAI,IAAI77C,EAAG,CAAC,EAAGA,EAAG,CAAC,EAAGA,EAAG,CAAC,CAAC,EAAE,OAAO,EAC7C,MAAMk8C,EAAKL,GAAI,IAAI77C,EAAG,CAAC,EAAGA,EAAG,CAAC,EAAGA,EAAG,CAAC,CAAC,EAAE,OAAO,EACzCm8C,EAAKN,GAAI,IAAI77C,EAAG,CAAC,EAAGA,EAAG,CAAC,EAAGA,EAAG,EAAE,CAAC,EAAE,OAAO,EAGpC,KAAK,cACP,IAAGi8C,EAAK,CAACA,GAEV+a,EAAA,EAAIh3D,EAAG,EAAE,EACTg3D,EAAA,EAAIh3D,EAAG,EAAE,EACTg3D,EAAA,EAAIh3D,EAAG,EAAE,EAGlBo3D,GAAI,KAAK,IAAI,EAEb,MAAMC,EAAQ,EAAIpb,EACZqb,EAAQ,EAAIpb,EACZqb,EAAQ,EAAIpb,EAEd,OAAAib,GAAA,MAAM,CAAC,GAAKC,EACZD,GAAA,MAAM,CAAC,GAAKC,EACZD,GAAA,MAAM,CAAC,GAAKC,EAEZD,GAAA,MAAM,CAAC,GAAKE,EACZF,GAAA,MAAM,CAAC,GAAKE,EACZF,GAAA,MAAM,CAAC,GAAKE,EAEZF,GAAA,MAAM,CAAC,GAAKG,EACZH,GAAA,MAAM,CAAC,GAAKG,EACZH,GAAA,MAAM,EAAE,GAAKG,EAEjBhgB,EAAW,uBAAuB6f,EAAG,EAErCjH,EAAM,EAAIlU,EACVkU,EAAM,EAAIjU,EACViU,EAAM,EAAIhU,EAEH,IACT,CAEA,OAAO8W,EAAiB,CACtB,QAASp5D,EAAI,EAAGA,EAAI,GAAIA,IACtB,GAAI,KAAK,MAAMA,CAAC,IAAMo5D,EAAO,MAAMp5D,CAAC,EAC3B,MAAA,GAGJ,MAAA,EACT,CAEA,UAAUiO,EAAI,EAAGF,EAAI,EAAG0C,EAAI,EAAG,CAC7B,OAAO,KAAK,SACV,IAAI4oD,GAAQ,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAGprD,EAAGF,EAAG0C,EAAG,CAAC,CAAC,CAAA,CAEhE,CAEA,MAAMxC,EAAI,EAAGF,EAAI,EAAG0C,EAAI,EAAG,CACzB,OAAO,KAAK,SACV,IAAI4oD,GAAQ,CAACprD,EAAG,EAAG,EAAG,EAAG,EAAGF,EAAG,EAAG,EAAG,EAAG,EAAG0C,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,CAAC,CAAA,CAEhE,CAEA,aAAasT,EAAY,CACvB,MAAM5d,EAAK,KAAK,MACV8H,EAAI8V,EAAE,EACNhW,EAAIgW,EAAE,EACNtT,EAAIsT,EAAE,EAEZ,OAAA5d,EAAG,CAAC,GAAK8H,EACT9H,EAAG,CAAC,GAAK4H,EACT5H,EAAG,CAAC,GAAKsK,EACTtK,EAAG,CAAC,GAAK8H,EACT9H,EAAG,CAAC,GAAK4H,EACT5H,EAAG,CAAC,GAAKsK,EACTtK,EAAG,CAAC,GAAK8H,EACT9H,EAAG,CAAC,GAAK4H,EACT5H,EAAG,EAAE,GAAKsK,EACVtK,EAAG,CAAC,GAAK8H,EACT9H,EAAG,CAAC,GAAK4H,EACT5H,EAAG,EAAE,GAAKsK,EAEH,IACT,CA+BA,QAAQwrC,EAAgB,CAChB,MAAAtzC,EAAIqzC,EAASC,CAAM,EACnB94C,EAAI,KAAK,IAAIwF,CAAC,EACd/I,EAAI,KAAK,IAAI+I,CAAC,EACpB,OAAO,KAAK,SAEV,IAAI0wD,GAAQ,CAAC,EAAG,EAAG,EAAG,EAAG,EAAGl2D,EAAGvD,EAAG,EAAG,EAAG,CAACA,EAAGuD,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,CAAC,CAAA,CAEjE,CAEA,QAAQ84C,EAAgB,CAChB,MAAAtzC,EAAIqzC,EAASC,CAAM,EACnB94C,EAAI,KAAK,IAAIwF,CAAC,EACd/I,EAAI,KAAK,IAAI+I,CAAC,EACpB,OAAO,KAAK,SAEV,IAAI0wD,GAAQ,CAACl2D,EAAG,EAAG,CAACvD,EAAG,EAAG,EAAG,EAAG,EAAG,EAAGA,EAAG,EAAGuD,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,CAAC,CAAA,CAEjE,CAGA,QAAQ84C,EAAgB,CACtB,KAAK,YAAc,GACb,MAAAtzC,EAAIqzC,EAASC,CAAM,EACnB94C,EAAI,KAAK,IAAIwF,CAAC,EACd/I,EAAI,KAAK,IAAI+I,CAAC,EACpB,OAAO,KAAK,SAEV,IAAI0wD,GAAQ,CAACl2D,EAAGvD,EAAG,EAAG,EAAG,CAACA,EAAGuD,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,CAAC,CAAA,CAEjE,CAEA,KAAK+yD,EAAO,EAAGE,EAAO,EAAGC,EAAO,EAAG,CACjC,OAAO,KAAK,SACV,IAAIgD,GAAQ,CACV,EACA,EACA,EACArd,EAASka,CAAI,EACb,EACA,EACA,EACAla,EAASoa,CAAI,EACb,EACA,EACA,EACApa,EAASqa,CAAI,EACb,EACA,EACA,EACA,CAAA,CACD,CAAA,CAEL,CAEA,YAAYsH,EAAqB,CAC/B,OAAO,KAAK,SACV,IAAItE,GAAQ,CACV,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACAsE,EAAc,EAAE,EAAIA,GAAe,EACnC,EACA,EACA,EACA,CAAA,CACD,CAAA,CAEL,CAGA,UAAU9K,EAAiC,CACrC,IAAA5kD,EAAI4kD,EAAM,EAAI,KAAK,IAAMA,EAAM,EAAI,KAAK,IAAM,KAAK,IACnD9kD,EAAI8kD,EAAM,EAAI,KAAK,IAAMA,EAAM,EAAI,KAAK,IAAM,KAAK,IACnDpiD,EAAIoiD,EAAM,EAAI,KAAK,IAAMA,EAAM,EAAI,KAAK,IAAM,KAAK,IACnD7kD,EAAI6kD,EAAM,EAAI,KAAK,IAAMA,EAAM,EAAI,KAAK,IAAM,KAAK,IAEnD1R,EAAKlzC,EAAI,KAAK,IACdmzC,EAAKrzC,EAAI,KAAK,IACdszC,EAAK5wC,EAAI,KAAK,IACd6wC,EAAKtzC,EAAI,KAAK,IAEdA,GAAK,IAAOA,EAAA,MACXC,GAAAD,EACAD,GAAAC,EACAyC,GAAAzC,EAEDszC,GAAM,IAAQA,EAAA,MACZH,GAAAG,EACAF,GAAAE,EACAD,GAAAC,EAGN,MAAMgc,EAAKjc,EAAK5wC,EAChB,GAAI6sD,GAAM,EACR,MAAO,CAAE,EAAArvD,EAAG,EAAAF,EAAG,EAAA0C,EAAG,KAAMzC,CAAE,EAGtB,MAAAH,EAAI,CAAC4C,EAAI6sD,EACf,OAAArvD,GAAKJ,GAAKszC,EAAKlzC,GACfF,GAAKF,GAAKuzC,EAAKrzC,GAER,CAAE,EAAAE,EAAG,EAAAF,EAAG,EAAA0C,EAAG,KAAMzC,CAAE,CAC5B,CAGA,QAAQ6kD,EAAgB,CACtB,MAAMpiD,EAAIoiD,EAAM,EAChB,IAAI5kD,EAAI4kD,EAAM,EAAI,KAAK,IAAMA,EAAM,EAAI,KAAK,IAAMpiD,EAAI,KAAK,IAAM,KAAK,IAClE1C,EAAI8kD,EAAM,EAAI,KAAK,IAAMA,EAAM,EAAI,KAAK,IAAMpiD,EAAI,KAAK,IAAM,KAAK,IAClEzC,EAAI6kD,EAAM,EAAI,KAAK,IAAMA,EAAM,EAAI,KAAK,IAAMpiD,EAAI,KAAK,IAAM,KAAK,IAEtE,OAAIzC,GAAK,IAAOA,EAAA,MACXC,GAAAD,EACAD,GAAAC,EAQDA,EAAI,IACNC,GAAK,KAAK,IACVF,GAAK,KAAK,IACVE,GAAK,EAAID,EACTD,GAAK,EAAIC,EACTC,GAAK,KAAK,IACVF,GAAK,KAAK,KAEL,CAAE,EAAAE,EAAG,EAAAF,EAAG,EAAA0C,EAAG,KAAMzC,CAAE,CAC5B,CAEA,OACEC,EACAF,EACA6gC,EACAC,EACyD,CACzD,MAAM+uB,EAAM,IAAI/H,GAAQ,CAAE,EAAA5nD,EAAG,EAAAF,CAAG,CAAA,EAC1B8vD,EAAM,IAAIhI,GAAQ,CAAE,EAAG5nD,EAAI2gC,EAAO,EAAA7gC,EAAG,EACrC+vD,EAAM,IAAIjI,GAAQ,CAAE,EAAG5nD,EAAI2gC,EAAO,EAAG7gC,EAAI8gC,CAAA,CAAQ,EACjDkvB,EAAM,IAAIlI,GAAQ,CAAE,EAAA5nD,EAAG,EAAGF,EAAI8gC,EAAQ,GAE3C,CAAE,EAAG+uB,EAAI,EAAG,EAAGA,EAAI,EAAG,EAAGA,EAAI,EAAG,KAAMA,EAAI,IAAS,EAAA,KAAK,QAAQA,CAAG,GACnE,CAAE,EAAGC,EAAI,EAAG,EAAGA,EAAI,EAAG,EAAGA,EAAI,EAAG,KAAMA,EAAI,IAAS,EAAA,KAAK,QAAQA,CAAG,EACnE,CAAE,EAAGC,EAAI,EAAG,EAAGA,EAAI,EAAG,EAAGA,EAAI,EAAG,KAAMA,EAAI,IAAS,EAAA,KAAK,QAAQA,CAAG,EACnE,CAAE,EAAGC,EAAI,EAAG,EAAGA,EAAI,EAAG,EAAGA,EAAI,EAAG,KAAMA,EAAI,IAAS,EAAA,KAAK,QAAQA,CAAG,EAE9D,MAAA71B,EAAK,KAAK,IAAI01B,EAAI,EAAGC,EAAI,EAAGC,EAAI,EAAGC,EAAI,CAAC,EACxC51B,EAAK,KAAK,IAAIy1B,EAAI,EAAGC,EAAI,EAAGC,EAAI,EAAGC,EAAI,CAAC,EACxCC,EAAS,KAAK,IAAIJ,EAAI,EAAGC,EAAI,EAAGC,EAAI,EAAGC,EAAI,CAAC,EAAI71B,EAChD+1B,EAAU,KAAK,IAAIL,EAAI,EAAGC,EAAI,EAAGC,EAAI,EAAGC,EAAI,CAAC,EAAI51B,EAEhD,MAAA,CAAE,EAAGD,EAAI,EAAGC,EAAI,MAAO61B,EAAQ,OAAQC,EAChD,CACF,CAEO,MAAM3L,EAAO,CAElB,MACQ,KAAO,EACP,KAAO,EACP,KAAO,EAEf,QAEA,YAAY5qC,EAAsBkvC,GAAsB,CACjD,KAAA,MAAQ,MAAM,KAAKlvC,CAAK,EACxB,KAAA,QAAU,KAAK,WACtB,CAEA,IAAI,KAAM,CACD,OAAA,KAAK,MAAM,CAAC,CACrB,CACA,IAAI,KAAM,CACD,OAAA,KAAK,MAAM,CAAC,CACrB,CACA,IAAI,KAAM,CACR,OAAO,KAAK,IACd,CACA,IAAI,KAAM,CACD,OAAA,KAAK,MAAM,CAAC,CACrB,CACA,IAAI,KAAM,CACD,OAAA,KAAK,MAAM,CAAC,CACrB,CACA,IAAI,KAAM,CACR,OAAO,KAAK,IACd,CACA,IAAI,KAAM,CACD,OAAA,KAAK,MAAM,CAAC,CACrB,CACA,IAAI,KAAM,CACD,OAAA,KAAK,MAAM,CAAC,CACrB,CACA,IAAI,KAAM,CACR,OAAO,KAAK,IACd,CAEA,IAAI,IAAI3D,EAAW,CACZ,KAAA,MAAM,CAAC,EAAIA,CAClB,CACA,IAAI,IAAIA,EAAW,CACZ,KAAA,MAAM,CAAC,EAAIA,CAClB,CACA,IAAI,IAAIA,EAAW,CACjB,KAAK,KAAOA,CACd,CACA,IAAI,IAAIA,EAAW,CACZ,KAAA,MAAM,CAAC,EAAIA,CAClB,CACA,IAAI,IAAIA,EAAW,CACZ,KAAA,MAAM,CAAC,EAAIA,CAClB,CACA,IAAI,IAAIA,EAAW,CACjB,KAAK,KAAOA,CACd,CACA,IAAI,IAAIA,EAAW,CACZ,KAAA,MAAM,CAAC,EAAIA,CAClB,CACA,IAAI,IAAIA,EAAW,CACZ,KAAA,MAAM,CAAC,EAAIA,CAClB,CACA,IAAI,IAAIA,EAAW,CACjB,KAAK,KAAOA,CACd,CAGA,OAAO,WAAWnkB,EAAW,CACrB,MAAA6G,EAAI,IAAI6rD,GACR1zC,EAAUi7C,GAAY,SAAUj6D,CAAC,EACnC,OAAAgf,EAAQ,SAAW,GACbA,EAAA,QAAQ,CAACpH,EAAQiF,IAAU,CAC7BjF,EAAO,YACT/Q,EAAE,MAAMgW,CAAK,EAAI,WAAWjF,EAAO,SAAS,EAC9C,CACD,EAEI/Q,CACT,CAEA,UAAUyyD,EAAU,KAAK,QAAS,CAChC,MAAMxxC,EAAuB,CAC3B,KAAK,IACL,KAAK,IACL,EACA,KAAK,IACL,KAAK,IACL,KAAK,IACL,EACA,KAAK,IACL,EACA,EACA,EACA,EACA,KAAK,IACL,KAAK,IACL,EACA,KAAK,GAAA,EAEP,OAAIwxC,GACFA,EAAQ,MAAQxxC,EACTwxC,GAEF,IAAIG,GAAQ3xC,CAAK,CAC1B,CAEA,UAAW,CACJ,YAAA,MAAQ,MAAM,KAAKkvC,EAAoB,EAC5C,KAAK,IAAM,EACX,KAAK,IAAM,EACX,KAAK,IAAM,EACN,KAAA,QAAU,KAAK,YACb,IACT,CAEA,IAAI,YAAsB,CAEtB,OAAA,KAAK,KAAO,GACZ,KAAK,KAAO,GACZ,KAAK,KAAO,GACZ,KAAK,KAAO,GACZ,KAAK,KAAO,GACZ,KAAK,KAAO,GACZ,KAAK,KAAO,GACZ,KAAK,KAAO,GACZ,KAAK,KAAO,CAEhB,CAEA,eAAeh3D,EAAW,CACxB,YAAK,KAAOA,EACZ,KAAK,KAAOA,EACZ,KAAK,KAAOA,EACZ,KAAK,KAAOA,EACZ,KAAK,KAAOA,EACZ,KAAK,KAAOA,EACZ,KAAK,KAAOA,EACZ,KAAK,KAAOA,EACZ,KAAK,KAAOA,EACL,IACT,CAEA,WAAY,CACJ,MAAAi/C,EAAM,KAAK,KAAO,KACjB,OAAA,KAAK,eAAe,EAAIA,CAAG,CACpC,CAEA,eAAegU,EAIb,CACM,MAAApiD,EAAIoiD,EAAM,GAAK,EACd,MAAA,CACL,EAAGA,EAAM,EAAI,KAAK,IAAMA,EAAM,EAAI,KAAK,IAAMpiD,EAAI,KAAK,IACtD,EAAGoiD,EAAM,EAAI,KAAK,IAAMA,EAAM,EAAI,KAAK,IAAMpiD,EAAI,KAAK,IACtD,EAAGoiD,EAAM,EAAI,KAAK,IAAMA,EAAM,EAAI,KAAK,IAAMpiD,EAAI,KAAK,GAAA,CAE1D,CAEA,OAAgB,CACP,OAAA,IAAI6hD,GAAO,KAAK,KAAK,CAC9B,CAEA,SAAS8G,EAA+B,CAChC,MAAAzwD,EAAI,KAAK,QACTyE,EAAIgsD,aAAkB9G,GAAS8G,EAAS,IAAI9G,GAAO8G,CAAM,EAC1D,YAAA,IAAMhsD,EAAE,IAAMzE,EAAE,IAAMyE,EAAE,IAAMzE,EAAE,IAAMyE,EAAE,IAAMzE,EAAE,IAChD,KAAA,IAAMyE,EAAE,IAAMzE,EAAE,IAAMyE,EAAE,IAAMzE,EAAE,IAAMyE,EAAE,IAAMzE,EAAE,IAChD,KAAA,IAAMyE,EAAE,IAAMzE,EAAE,IAAMyE,EAAE,IAAMzE,EAAE,IAAMyE,EAAE,IAAMzE,EAAE,IAChD,KAAA,IAAMyE,EAAE,IAAMzE,EAAE,IAAMyE,EAAE,IAAMzE,EAAE,IAAMyE,EAAE,IAAMzE,EAAE,IAChD,KAAA,IAAMyE,EAAE,IAAMzE,EAAE,IAAMyE,EAAE,IAAMzE,EAAE,IAAMyE,EAAE,IAAMzE,EAAE,IAChD,KAAA,IAAMyE,EAAE,IAAMzE,EAAE,IAAMyE,EAAE,IAAMzE,EAAE,IAAMyE,EAAE,IAAMzE,EAAE,IAChD,KAAA,IAAMyE,EAAE,IAAMzE,EAAE,IAAMyE,EAAE,IAAMzE,EAAE,IAAMyE,EAAE,IAAMzE,EAAE,IAChD,KAAA,IAAMyE,EAAE,IAAMzE,EAAE,IAAMyE,EAAE,IAAMzE,EAAE,IAAMyE,EAAE,IAAMzE,EAAE,IAChD,KAAA,IAAMyE,EAAE,IAAMzE,EAAE,IAAMyE,EAAE,IAAMzE,EAAE,IAAMyE,EAAE,IAAMzE,EAAE,IAC9C,IACT,CAEA,OAAOywD,EAAgB,CACd,OAAA,KAAK,SAASA,CAAM,CAC7B,CAEA,QAAQA,EAAgB,CACtB,OAAAA,EAAO,SAAS,IAAI,EACb,IACT,CAEA,SAAU,CAiBR,MAAM8E,EAAM,KAAK,IACXC,EAAM,KAAK,IACXC,EAAM,KAAK,IACXC,EAAM,KAAK,IACXjH,EAAM,KAAK,IACXC,EAAM,KAAK,IACXiH,EAAM,KAAK,IACXhH,EAAM,KAAK,IACXC,EAAM,KAAK,IAEXgH,EAAMhH,EAAMH,EAAMC,EAAMC,EACxBE,EAAM,CAACD,EAAM8G,EAAMhH,EAAMiH,EACzB5G,EAAMJ,EAAM+G,EAAMjH,EAAMkH,EAG9B,IAAItF,EAAMkF,EAAMK,EAAMJ,EAAM3G,EAAM4G,EAAM1G,EAExC,OAAKsB,GAGLA,EAAM,EAAMA,EAEZ,KAAK,IAAMuF,EAAMvF,EACjB,KAAK,KAAO,CAACzB,EAAM4G,EAAMC,EAAM9G,GAAO0B,EACtC,KAAK,KAAO3B,EAAM8G,EAAMC,EAAMhH,GAAO4B,EACrC,KAAK,IAAMxB,EAAMwB,EACjB,KAAK,KAAOzB,EAAM2G,EAAME,EAAME,GAAOtF,EACrC,KAAK,KAAO,CAAC3B,EAAM6G,EAAME,EAAMC,GAAOrF,EACtC,KAAK,IAAMtB,EAAMsB,EACjB,KAAK,KAAO,CAAC1B,EAAM4G,EAAMC,EAAMG,GAAOtF,EACtC,KAAK,KAAO5B,EAAM8G,EAAMC,EAAME,GAAOrF,EAC9B,MAbE,IAcX,CAEA,UAAmB,CACX,MAAAI,EAAS,IAAI9G,GACnB,OAAA8G,EAAO,IAAM,KAAK,IAAM,KAAK,IAAM,KAAK,IAAM,KAAK,IACnDA,EAAO,IAAM,KAAK,IAAM,KAAK,IAAM,KAAK,IAAM,KAAK,IACnDA,EAAO,IAAM,KAAK,IAAM,KAAK,IAAM,KAAK,IAAM,KAAK,IACnDA,EAAO,IAAM,KAAK,IAAM,KAAK,IAAM,KAAK,IAAM,KAAK,IACnDA,EAAO,IAAM,KAAK,IAAM,KAAK,IAAM,KAAK,IAAM,KAAK,IACnDA,EAAO,IAAM,KAAK,IAAM,KAAK,IAAM,KAAK,IAAM,KAAK,IACnDA,EAAO,IAAM,KAAK,IAAM,KAAK,IAAM,KAAK,IAAM,KAAK,IACnDA,EAAO,IAAM,KAAK,IAAM,KAAK,IAAM,KAAK,IAAM,KAAK,IACnDA,EAAO,IAAM,KAAK,IAAM,KAAK,IAAM,KAAK,IAAM,KAAK,IAC5CA,CACT,CAEA,OAAQ,CACF,IAAAnd,EAASC,GAAS,KAAK,MAAM,KAAK,IAAK,KAAK,GAAG,CAAC,EACpD,OAAI,KAAK,IAAM,GAAK,KAAK,KAAO,IACpBD,GAAA,KAEL,CACL,EAAG,KAAK,IACR,EAAG,KAAK,IACR,OAAAA,EACA,OAAQ,KAAK,KAAK,KAAK,IAAM,KAAK,IAAM,KAAK,IAAM,KAAK,GAAG,EAC3D,OAAQ,KAAK,KAAK,KAAK,IAAM,KAAK,IAAM,KAAK,IAAM,KAAK,GAAG,EAC3D,MAAOC,GAAS,KAAK,MAAM,CAAC,KAAK,IAAK,KAAK,GAAG,CAAC,EAC/C,MAAOA,GAAS,KAAK,MAAM,KAAK,IAAK,KAAK,GAAG,CAAC,CAAA,CAElD,CAEA,eAAelS,EAAe,CAEtB,MAAAllC,EAAI,KAAK,MAAM,CAAC,EACpBzC,EAAI,KAAK,MAAM,CAAC,EAChB6L,EAAI,KAAK,MAAM,CAAC,EAChB9H,EAAI,KAAK,MAAM,CAAC,EAChBqO,EAAI,KAAK,MAAM,CAAC,EAChBtG,EAAI,KAAK,MAAM,CAAC,EAChB2D,EAAIk4B,EAAM,MAAM,CAAC,EACjBngC,EAAImgC,EAAM,MAAM,CAAC,EACjB/2B,EAAI+2B,EAAM,MAAM,CAAC,EACjBw0B,EAAIx0B,EAAM,MAAM,CAAC,EACjBjnC,EAAIinC,EAAM,MAAM,CAAC,EACjBy0B,EAAIz0B,EAAM,MAAM,CAAC,EACjB00B,EAAK5sD,EAAI0sD,EACTG,EAAK90D,EAAIoJ,EACTC,GAAKD,EAAI5Q,EAAIyC,EAAI05D,IAAMG,EAAKD,GAC5BE,GAAK9sD,EAAIzP,EAAIyC,EAAI+E,IAAM60D,EAAKC,GAC5Bt7D,GAAK4P,EAAI7M,EAAI8H,EAAIswD,IAAMG,EAAKD,GAC5Bt/D,GAAK0S,EAAI1L,EAAI8H,EAAIrE,IAAM60D,EAAKC,GAC5Bz8D,GAAK+Q,GAAK9E,EAAIswD,GAAKD,GAAKz7D,EAAI0R,KAAOkqD,EAAKD,GACxCx0D,GAAK4H,GAAK3D,EAAIswD,GAAK50D,GAAK9G,EAAI0R,KAAOiqD,EAAKC,GACpCvF,EAAS,CAAClmD,EAAG0rD,EAAGv7D,EAAGjE,EAAG8C,EAAGgI,CAAC,EACzB,OAAA,IAAIooD,GAAO8G,CAAsB,CAC1C,CAEA,SAASc,EAAmB,EAAG,CACzB,OAAA,KAAK,QAAQ,OACR,UAAU,KAAK,MACnB,IAAKn2C,GAAMowC,EAAapwC,EAAGm2C,CAAgB,CAAC,EAC5C,KAAK,GAAG,CAAC,IAEL,KAAK,QAAQ,UAExB,CAqBA,UAAUjsD,EAAWF,EAAW,CACzB,YAAA,SAAS,CAAC,EAAG,EAAG,EAAG,EAAGE,EAAGF,CAAC,CAAC,EAChC,KAAK,UAAU,EACR,IACT,CAEA,YAAYE,EAAWF,EAAW,CAChC,OAAO,KAAK,UAAUE,EAAI,KAAK,IAAKF,EAAI,KAAK,GAAG,CAClD,CACA,WAAWE,EAAW,CACb,OAAA,KAAK,UAAUA,EAAG,CAAC,CAC5B,CACA,aAAaA,EAAW,CACtB,OAAO,KAAK,YAAYA,EAAG,KAAK,GAAG,CACrC,CACA,WAAWF,EAAW,CACb,OAAA,KAAK,UAAU,EAAGA,CAAC,CAC5B,CACA,aAAaA,EAAW,CACtB,OAAO,KAAK,YAAY,KAAK,IAAKA,CAAC,CACrC,CACA,WAAW0C,EAAW,CACpB,YAAK,QAAQ,UAAU,EAAG,EAAGA,CAAC,EACzB,KAAA,QAAQ,SAAS,IAAI,EACnB,IACT,CACA,aAAaA,EAAW,CACtB,YAAK,WAAWA,EAAI,KAAK,QAAQ,GAAG,EAC7B,IACT,CACA,YAAYxC,EAAWF,EAAW0C,EAAW,CAC3C,YAAK,QAAQ,UAAUxC,EAAGF,EAAG0C,CAAC,EACzB,KAAA,QAAQ,SAAS,IAAI,EACnB,IACT,CACA,cAAcxC,EAAWF,EAAW0C,EAAW,CACxC,YAAA,YACHxC,EAAI,KAAK,QAAQ,IACjBF,EAAI,KAAK,QAAQ,IACjB0C,EAAI,KAAK,QAAQ,GAAA,EAEZ,IACT,CAEA,OAAOouD,EAAajW,EAAU,EAAGC,EAAU,EAAG,CACtC,MAAAiW,EAAM9iB,EAAS6iB,CAAG,EAClB17D,EAAI,KAAK,IAAI27D,CAAG,EAChBl/D,EAAI,KAAK,IAAIk/D,CAAG,EACjB,YAAA,UAAUlW,EAASC,CAAO,EAC1B,KAAA,SAAS,CAAC1lD,EAAGvD,EAAG,CAACA,EAAGuD,EAAG,EAAG,CAAC,CAAC,EACjC,KAAK,UAAU,CAACylD,EAAS,CAACC,CAAO,EACjC,KAAK,UAAU,EACR,IACT,CACA,SAASkW,EAAmBnW,EAAU,EAAGC,EAAU,EAAG,CACpD,KAAM,CAAE,OAAA5M,CAAA,EAAW,KAAK,MAAM,EAC9B,YAAK,OAAO8iB,EAAY9iB,EAAQ2M,EAASC,CAAO,EACzC,IACT,CACA,QAAQgW,EAAa,CACd,YAAA,QAAQ,QAAQA,CAAG,EACnB,KAAA,QAAQ,SAAS,IAAI,EACnB,IACT,CACA,UAAUE,EAAmB,CAC3B,KAAM,CAAE,QAAA1E,CAAY,EAAA,KAAK,QAAQ,MAAM,EAClC,YAAA,QAAQ0E,EAAY1E,CAAO,EACzB,IACT,CACA,QAAQwE,EAAa,CACd,YAAA,QAAQ,QAAQA,CAAG,EACnB,KAAA,QAAQ,SAAS,IAAI,EACnB,IACT,CACA,UAAUE,EAAmB,CAC3B,KAAM,CAAE,QAAA3E,CAAY,EAAA,KAAK,QAAQ,MAAM,EAClC,YAAA,QAAQ2E,EAAY3E,CAAO,EACzB,IACT,CAEA,QAAQyE,EAAa,CACd,YAAA,QAAQ,QAAQA,CAAG,EAEnB,KAAA,QAAQ,SAAS,IAAI,EACnB,IACT,CACA,UAAUE,EAAmB,CAC3B,KAAM,CAAE,QAAAzE,CAAY,EAAA,KAAK,QAAQ,MAAM,EAClC,YAAA,QAAQyE,EAAYzE,CAAO,EACzB,IACT,CACA,SAASrsD,EAAWF,EAAW0C,EAAW,CAEnC,YAAA,QAAQ,QAAQxC,CAAC,EAAE,QAAQF,CAAC,EAAE,QAAQ0C,CAAC,EACvC,KAAA,QAAQ,SAAS,IAAI,EACnB,IACT,CACA,WAAWuuD,EAAiBC,EAAiBC,EAAiB,CAC5D,KAAM,CAAE,QAAA7E,EAAS,QAAAD,EAAS,QAAAE,CAAY,EAAA,KAAK,QAAQ,QACnD,YAAK,SAAS0E,EAAU3E,EAAS4E,EAAU7E,EAAS8E,EAAU5E,CAAO,EAC9D,IACT,CAEA,MAAMlY,EAAYC,EAAKD,EAAIwG,EAAU,EAAGC,EAAU,EAAG,CAC9C,YAAA,UAAUD,EAASC,CAAO,EAC1B,KAAA,SAAS,CAACzG,EAAI,EAAG,EAAGC,EAAI,EAAG,CAAC,CAAC,EAClC,KAAK,UAAU,CAACuG,EAAS,CAACC,CAAO,EACjC,KAAK,UAAU,EACR,IACT,CACA,QAAQsW,EAAkBC,EAAWD,EAAUvW,EAAU,EAAGC,EAAU,EAAG,CACvE,OAAO,KAAK,MACVsW,EAAW,KAAK,IAChBC,EAAW,KAAK,IAChBxW,EACAC,CAAA,CAEJ,CACA,OAAOzG,EAAY,CACV,OAAA,KAAK,MAAMA,EAAI,CAAC,CACzB,CACA,SAASA,EAAY,CACnB,OAAO,KAAK,MAAMA,EAAK,KAAK,IAAK,CAAC,CACpC,CACA,OAAOC,EAAY,CACV,OAAA,KAAK,MAAM,EAAGA,CAAE,CACzB,CACA,SAASA,EAAY,CACnB,OAAO,KAAK,MAAM,EAAGA,EAAK,KAAK,GAAG,CACpC,CACA,OAAOC,EAAY,CACjB,YAAK,QAAQ,MAAM,EAAG,EAAGA,CAAE,EACtB,KAAA,QAAQ,SAAS,IAAI,EACnB,IACT,CACA,SAASA,EAAY,CACnB,KAAM,CAAE,QAAA6X,CAAY,EAAA,KAAK,QAAQ,MAAM,EAClC,YAAA,OAAO7X,EAAK6X,CAAO,EACjB,IACT,CACA,QAAQ/X,EAAYC,EAAKD,EAAIE,EAAKF,EAAI,CACpC,YAAK,QAAQ,MAAMA,EAAIC,EAAIC,CAAE,EACxB,KAAA,QAAQ,SAAS,IAAI,EACnB,IACT,CACA,UAAUF,EAAYC,EAAKD,EAAIE,EAAKF,EAAI,CACtC,KAAM,CAAE,QAAA0X,EAAS,QAAAC,EAAS,QAAAI,CAAY,EAAA,KAAK,QAAQ,QACnD,YAAK,QAAQ/X,EAAK0X,EAASzX,EAAK0X,EAASzX,EAAK6X,CAAO,EAC9C,IACT,CAEA,KAAKjE,EAAcE,EAAOF,EAAM,CAI9B,YAAK,SAAS,CACZ,KAAK,IAAIla,EAASoa,CAAI,CAAC,EACvB,KAAK,IAAIpa,EAASoa,CAAI,CAAC,EACvB,CAAC,KAAK,IAAIpa,EAASka,CAAI,CAAC,EACxB,KAAK,IAAIla,EAASka,CAAI,CAAC,EACvB,EACA,CAAA,CACD,EACD,KAAK,UAAU,EACR,IACT,CACA,OAAOA,EAAcE,EAAOF,EAAM,CAChC,KAAM,CAAE,MAAA8D,EAAO,MAAAC,CAAM,EAAI,KAAK,MAAM,EACpC,OAAO,KAAK,KAAK/D,EAAO8D,EAAO5D,EAAO6D,CAAK,CAC7C,CACA,MAAM4E,EAAa,CACjB,KAAM,CAAE,MAAA5E,CAAA,EAAU,KAAK,MAAM,EACtB,OAAA,KAAK,KAAK4E,EAAK5E,CAAK,CAC7B,CACA,QAAQ4E,EAAa,CACnB,KAAM,CAAE,MAAA5E,CAAA,EAAU,KAAK,MAAM,EACtB,OAAA,KAAK,OAAO4E,EAAK5E,CAAK,CAC/B,CACA,MAAM4E,EAAa,CACjB,KAAM,CAAE,MAAA7E,CAAA,EAAU,KAAK,MAAM,EACtB,OAAA,KAAK,KAAKA,EAAO6E,CAAG,CAC7B,CACA,QAAQA,EAAa,CACnB,KAAM,CAAE,MAAA7E,CAAA,EAAU,KAAK,MAAM,EACtB,OAAA,KAAK,OAAOA,EAAO6E,CAAG,CAC/B,CACA,MAAMA,EAAa,CAEV,OAAA,IACT,CACA,QAAQA,EAAa,CAEZ,OAAA,IACT,CACA,OAAOQ,EAAcC,EAAcC,EAAc,CAExC,OAAA,IACT,CACA,SAASF,EAAcC,EAAcC,EAAc,CAE1C,OAAA,IACT,CAEA,YAAY5B,EAAqB,CAC1B,YAAA,QAAQ,YAAYA,CAAW,EAC/B,KAAA,QAAQ,SAAS,IAAI,EACnB,IACT,CACF,CAIA,MAAMzC,GAAQ,IAAIpa,GAAQ,EAAG,EAAG,CAAC,EAC3Bqa,GAAO,IAAIra,GAAQ,EAAG,EAAG,CAAC,EAC1Bya,GAAK,IAAIza,GACT0a,GAAK,IAAI1a,GACTwa,GAAK,IAAIxa,GACTkB,GAAM,IAAIlB,GACVqY,GAAM,IAAIvB,GACV2F,GAAM,IAAIlE,GAQT,SAASmG,GAAuB3xD,EAAW,CAC1C,MAAAurD,EAAS,IAAI9G,GACjB,OAAAzkD,EAAA,QAEA,+EACA,SAAUyX,EAAKogC,EAAS+Z,EAAa,CAC/BA,EAAY,QAAQ,GAAG,GAAK,EAChBA,EAAAA,EAAY,MAAM,SAAS,EAE3BA,EAAAA,EAAY,MAAM,KAAK,EAEvC,MAAM5gD,EAAmB,CAAA,EACzB,QAAS7e,EAAI,EAAGwjC,EAAQi8B,EAAY,OAAQz/D,EAAIwjC,EAAOxjC,IACjDy/D,EAAYz/D,CAAC,EAAE,QACjB6e,EAAO,KAAK,WAAW,GAAK4gD,EAAYz/D,CAAC,CAAC,CAAC,EAGvC,OAAA0lD,EAAQ,YAAe,EAAA,CAC7B,IAAK,IACL,IAAK,YACH0T,EAAO,UAAUv6C,EAAO,CAAC,EAAGA,EAAO,CAAC,CAAC,EACrC,MACF,IAAK,aACIu6C,EAAA,WAAWv6C,EAAO,CAAC,CAAC,EAC3B,MACF,IAAK,aACIu6C,EAAA,WAAWv6C,EAAO,CAAC,CAAC,EAC3B,MACF,IAAK,aACIu6C,EAAA,WAAWv6C,EAAO,CAAC,CAAC,EAC3B,MACF,IAAK,cACIu6C,EAAA,YAAYv6C,EAAO,CAAC,EAAGA,EAAO,CAAC,EAAGA,EAAO,CAAC,CAAC,EAClD,MACF,IAAK,IACL,IAAK,SACIu6C,EAAA,OAAOv6C,EAAO,CAAC,EAAGA,EAAO,CAAC,GAAK,EAAGA,EAAO,CAAC,GAAK,CAAC,EACvD,MACF,IAAK,UACIu6C,EAAA,QAAQv6C,EAAO,CAAC,CAAC,EACxB,MACF,IAAK,UACIu6C,EAAA,QAAQv6C,EAAO,CAAC,CAAC,EACxB,MACF,IAAK,UACIu6C,EAAA,QAAQv6C,EAAO,CAAC,CAAC,EACxB,MACF,IAAK,WACIu6C,EAAA,SAASv6C,EAAO,CAAC,EAAGA,EAAO,CAAC,EAAGA,EAAO,CAAC,CAAC,EAC/C,MACF,IAAK,IACL,IAAK,QACIu6C,EAAA,MAAMv6C,EAAO,CAAC,EAAGA,EAAO,CAAC,GAAKA,EAAO,CAAC,CAAC,EAC9C,MACF,IAAK,SACIu6C,EAAA,OAAOv6C,EAAO,CAAC,CAAC,EACvB,MACF,IAAK,SACIu6C,EAAA,OAAOv6C,EAAO,CAAC,CAAC,EACvB,MACF,IAAK,SACIu6C,EAAA,OAAOv6C,EAAO,CAAC,CAAC,EACvB,MACF,IAAK,UACIu6C,EAAA,QAAQv6C,EAAO,CAAC,EAAGA,EAAO,CAAC,EAAGA,EAAO,CAAC,CAAC,EAC9C,MACF,IAAK,OACHu6C,EAAO,KAAKv6C,EAAO,CAAC,EAAGA,EAAO,CAAC,GAAK,CAAC,EACrC,MACF,IAAK,QACIu6C,EAAA,MAAMv6C,EAAO,CAAC,CAAC,EACtB,MACF,IAAK,QACIu6C,EAAA,MAAMv6C,EAAO,CAAC,CAAC,EACtB,MACF,IAAK,QACIu6C,EAAA,MAAMv6C,EAAO,CAAC,CAAC,EACtB,MACF,IAAK,SACIu6C,EAAA,OAAOv6C,EAAO,CAAC,EAAGA,EAAO,CAAC,EAAGA,EAAO,CAAC,CAAC,EAC7C,MACF,IAAK,IACL,IAAK,SACHu6C,EAAO,SAAS,CACdv6C,EAAO,CAAC,EACRA,EAAO,CAAC,EACRA,EAAO,CAAC,EACRA,EAAO,CAAC,EACRA,EAAO,CAAC,EACRA,EAAO,CAAC,CAAA,CACT,EACDu6C,EAAO,UAAU,EACjB,MACF,IAAK,WACHA,EAAO,QAAQ,SAAS,IAAIC,GAAQx6C,CAAuB,CAAC,EACrDu6C,EAAA,QAAQ,SAASA,CAAM,EAC9B,KACJ,CACO,MAAA,EACT,CAAA,EAEKA,CACT,CAEgB,SAAAjD,GACdha,EACA2W,EACAC,EAC0B,CACpB,MAAAtsD,EAAI,IAAI6rD,GACZ,OAAA7rD,EAAA,OAAOy1C,GAASC,CAAM,CAAC,EAClB11C,EAAE,eAAe,CAAE,EAAGqsD,EAAQ,EAAGC,EAAQ,CAClD,CAGO,SAAS2M,GAAa/mD,EAOf,CACZ,MAAM1K,EAAI,OAAO0K,GAAS,GAAK,SAAWA,GAAS,EAAI,EACjD5K,EAAI,OAAO4K,GAAS,GAAK,SAAWA,GAAS,EAAI,EACjDsjC,EAAS,OAAOtjC,GAAS,QAAU,SAAWA,GAAS,OAAS,EAChEmhD,EAAU,OAAOnhD,GAAS,SAAW,SAAWA,GAAS,QAAU,EACnEohD,EAAU,OAAOphD,GAAS,SAAW,SAAWA,GAAS,QAAU,EACnEwjC,EAASH,EAASC,CAAM,EACxB94C,EAAI,KAAK,IAAIg5C,CAAM,EACnBv8C,EAAI,KAAK,IAAIu8C,CAAM,EACnBid,EAAS,IAAI,UAAU,CAC3Bj2D,EAAI22D,EACJl6D,EAAIk6D,EACJ,CAACl6D,EAAIm6D,EACL52D,EAAI42D,EACJ9rD,EACAF,CAAA,CACD,EACD,OAAAqrD,EAAO,aAAa,IAAI,UAAUzgD,GAAS,cAAgB,EAAE,CAAC,EACvDygD,CACT,CAIgB,SAAAuG,GACdC,EACAjnD,EAQQ,CAwBF,MAAAknD,EAAS,IAAI,OAAOD,CAAU,EAC9B/xD,EAAI,IAAI,OACd,OAAAA,EAAE,QAAQgyD,EAAQH,GAAa/mD,CAAO,CAAC,EAChC9K,CACT,CCpuFA,MAAM8yC,GAAM,IAAIL,GACV0B,GAAM,IAAIlB,GAEhB,SAASgf,GAAYp4C,EAAeqP,EAA2B,CAC7D,OAAQA,EAAM,YAAa,CACzB,KAAK,aACI,OAAArP,EACT,KAAK,YACH,OAAOA,EAAQ,WACjB,KAAK,YACH,OAAOA,EAAQ,MACjB,KAAK,WACH,OAAOA,EAAQ,IACjB,KAAK,WACH,OAAO,KAAK,IAAIA,EAAQ,WAAc,EAAI,EAC5C,KAAK,WACH,OAAO,KAAK,IAAIA,EAAQ,MAAS,EAAI,EACvC,KAAK,UACH,OAAO,KAAK,IAAIA,EAAQ,IAAO,EAAI,EACrC,QACQ,MAAA,IAAI,MAAM,yBAAyB,CAC7C,CACF,CAEA,SAASq4C,GAAUr4C,EAAeqP,EAA2B,CAC3D,OAAQA,EAAM,YAAa,CACzB,KAAK,aACI,OAAArP,EACT,KAAK,YACI,OAAA,KAAK,MAAMA,EAAQ,UAAY,EACxC,KAAK,YACI,OAAA,KAAK,MAAMA,EAAQ,KAAO,EACnC,KAAK,WACI,OAAA,KAAK,MAAMA,EAAQ,GAAK,EACjC,KAAK,WACI,OAAA,KAAK,MAAMA,EAAQ,UAAY,EACxC,KAAK,WACI,OAAA,KAAK,MAAMA,EAAQ,KAAO,EACnC,KAAK,UACI,OAAA,KAAK,MAAMA,EAAQ,GAAK,EACjC,QACQ,MAAA,IAAI,MAAM,yBAAyB,CAC7C,CACF,CAEO,MAAMs4C,EAAgB,CAC3B,MACA,SACA,MACA,WACA,aACA,QAEA,YAAYjpC,EAAmBkpC,EAAkBC,EAAa,GAAO,CAC/D,GAAA,MAAM,QAAQnpC,CAAK,EACf,MAAA,IAAI,UAAU,iDAAiD,EAEvE,KAAK,MAAQA,EACb,KAAK,SAAWkpC,EACX,KAAA,MAAQlpC,EAAM,OAASkpC,EAC5B,KAAK,WAAaC,EAClB,KAAK,aAAe,GACpB,KAAK,QAAU,CACjB,CAEA,mBAAoB,CAAC,CAErB,IAAI,YAAYx4C,EAAgB,CAC1BA,IAAU,IAAW,KAAA,SAC3B,CAEA,eAAerN,EAAempB,EAAe,CAC3C,KAAK,aAAa,KAAK,CAAE,MAAAnpB,EAAO,MAAAmpB,CAAO,CAAA,CACzC,CAEA,mBAAoB,CAClB,KAAK,aAAa,OAAS,CAC7B,CAEA,KAAK9mB,EAAyB,CAEvB,YAAA,MAAQyjD,GAAgBzjD,EAAO,KAAK,EACzC,KAAK,SAAWA,EAAO,SACvB,KAAK,MAAQA,EAAO,MACpB,KAAK,WAAaA,EAAO,WAClB,IACT,CAEA,OAAO0jD,EAAgB/f,EAA4BggB,EAAgB,CACjED,GAAU,KAAK,SACfC,GAAUhgB,EAAU,SACpB,QAAS,EAAI,EAAG78C,EAAI,KAAK,SAAU,EAAIA,EAAG,IACxC,KAAK,MAAM48D,EAAS,CAAC,EAAI/f,EAAU,MAAMggB,EAAS,CAAC,EAE9C,OAAA,IACT,CAEA,UAAUtpC,EAAmB,CACtB,YAAA,MAAM,IAAIA,CAAK,EACb,IACT,CAEA,aAAatwB,EAAY,CACnB,GAAA,KAAK,WAAa,EACpB,QAASzG,EAAI,EAAGwD,EAAI,KAAK,MAAOxD,EAAIwD,EAAGxD,IACjC2gD,GAAA,oBAAoB,KAAM3gD,CAAC,EAC/B2gD,GAAI,aAAal6C,CAAC,EAClB,KAAK,MAAMzG,EAAG2gD,GAAI,EAAGA,GAAI,CAAC,UAEnB,KAAK,WAAa,EAC3B,QAAS3gD,EAAI,EAAGwD,EAAI,KAAK,MAAOxD,EAAIwD,EAAGxD,IACjCgiD,GAAA,oBAAoB,KAAMhiD,CAAC,EAC/BgiD,GAAI,aAAav7C,CAAC,EAClB,KAAK,OAAOzG,EAAGgiD,GAAI,EAAGA,GAAI,EAAGA,GAAI,CAAC,EAG/B,OAAA,IACT,CAEA,aAAav7C,EAAY,CACvB,QAASzG,EAAI,EAAGwD,EAAI,KAAK,MAAOxD,EAAIwD,EAAGxD,IACjCgiD,GAAA,oBAAoB,KAAMhiD,CAAC,EAC/BgiD,GAAI,aAAav7C,CAAC,EAClB,KAAK,OAAOzG,EAAGgiD,GAAI,EAAGA,GAAI,EAAGA,GAAI,CAAC,EAE7B,OAAA,IACT,CAEA,kBAAkBv7C,EAAY,CAC5B,QAASzG,EAAI,EAAGwD,EAAI,KAAK,MAAOxD,EAAIwD,EAAGxD,IACjCgiD,GAAA,oBAAoB,KAAMhiD,CAAC,EAC/BgiD,GAAI,kBAAkBv7C,CAAC,EACvB,KAAK,OAAOzG,EAAGgiD,GAAI,EAAGA,GAAI,EAAGA,GAAI,CAAC,EAE7B,OAAA,IACT,CAEA,mBAAmBv7C,EAAY,CAC7B,QAASzG,EAAI,EAAGwD,EAAI,KAAK,MAAOxD,EAAIwD,EAAGxD,IACjCgiD,GAAA,oBAAoB,KAAMhiD,CAAC,EAC/BgiD,GAAI,mBAAmBv7C,CAAC,EACxB,KAAK,OAAOzG,EAAGgiD,GAAI,EAAGA,GAAI,EAAGA,GAAI,CAAC,EAE7B,OAAA,IACT,CAEA,IAAIt6B,EAA0BtE,EAAS,EAAG,CAEnC,YAAA,MAAM,IAAIsE,EAAOtE,CAAM,EACrB,IACT,CAEA,aAAa3G,EAAe6jD,EAAmB,CAC7C,IAAI54C,EAAQ,KAAK,MAAMjL,EAAQ,KAAK,SAAW6jD,CAAS,EACxD,OAAI,KAAK,aAAoB54C,EAAAo4C,GAAYp4C,EAAO,KAAK,KAAK,GACnDA,CACT,CAEA,aAAajL,EAAe6jD,EAAmB54C,EAAe,CAC5D,OAAI,KAAK,aAAoBA,EAAAq4C,GAAUr4C,EAAO,KAAK,KAAK,GACxD,KAAK,MAAMjL,EAAQ,KAAK,SAAW6jD,CAAS,EAAI54C,EACzC,IACT,CAEA,KAAKjL,EAAe,CAClB,IAAIxO,EAAI,KAAK,MAAMwO,EAAQ,KAAK,QAAQ,EACxC,OAAI,KAAK,aAAgBxO,EAAA6xD,GAAY7xD,EAAG,KAAK,KAAK,GAC3CA,CACT,CAEA,KAAKwO,EAAexO,EAAW,CAC7B,OAAI,KAAK,aAAgBA,EAAA8xD,GAAU9xD,EAAG,KAAK,KAAK,GAChD,KAAK,MAAMwO,EAAQ,KAAK,QAAQ,EAAIxO,EAC7B,IACT,CAEA,KAAKwO,EAAe,CAClB,IAAI1O,EAAI,KAAK,MAAM0O,EAAQ,KAAK,SAAW,CAAC,EAC5C,OAAI,KAAK,aAAgB1O,EAAA+xD,GAAY/xD,EAAG,KAAK,KAAK,GAC3CA,CACT,CAEA,KAAK0O,EAAe1O,EAAW,CAC7B,OAAI,KAAK,aAAgBA,EAAAgyD,GAAUhyD,EAAG,KAAK,KAAK,GAChD,KAAK,MAAM0O,EAAQ,KAAK,SAAW,CAAC,EAAI1O,EACjC,IACT,CAEA,KAAK0O,EAAe,CAClB,IAAIhM,EAAI,KAAK,MAAMgM,EAAQ,KAAK,SAAW,CAAC,EAC5C,OAAI,KAAK,aAAgBhM,EAAAqvD,GAAYrvD,EAAG,KAAK,KAAK,GAC3CA,CACT,CAEA,KAAKgM,EAAehM,EAAW,CAC7B,OAAI,KAAK,aAAgBA,EAAAsvD,GAAUtvD,EAAG,KAAK,KAAK,GAChD,KAAK,MAAMgM,EAAQ,KAAK,SAAW,CAAC,EAAIhM,EACjC,IACT,CAEA,KAAKgM,EAAe,CAClB,IAAIzO,EAAI,KAAK,MAAMyO,EAAQ,KAAK,SAAW,CAAC,EAC5C,OAAI,KAAK,aAAgBzO,EAAA8xD,GAAY9xD,EAAG,KAAK,KAAK,GAC3CA,CACT,CAEA,KAAKyO,EAAezO,EAAW,CAC7B,OAAI,KAAK,aAAgBA,EAAA+xD,GAAU/xD,EAAG,KAAK,KAAK,GAChD,KAAK,MAAMyO,EAAQ,KAAK,SAAW,CAAC,EAAIzO,EACjC,IACT,CAEA,MAAMyO,EAAexO,EAAWF,EAAW,CACzC,OAAA0O,GAAS,KAAK,SACV,KAAK,aACHxO,EAAA8xD,GAAU9xD,EAAG,KAAK,KAAK,EACvBF,EAAAgyD,GAAUhyD,EAAG,KAAK,KAAK,GAExB,KAAA,MAAM0O,EAAQ,CAAC,EAAIxO,EACnB,KAAA,MAAMwO,EAAQ,CAAC,EAAI1O,EACjB,IACT,CAEA,OAAO0O,EAAexO,EAAWF,EAAW0C,EAAW,CACrD,OAAAgM,GAAS,KAAK,SACV,KAAK,aACHxO,EAAA8xD,GAAU9xD,EAAG,KAAK,KAAK,EACvBF,EAAAgyD,GAAUhyD,EAAG,KAAK,KAAK,EACvB0C,EAAAsvD,GAAUtvD,EAAG,KAAK,KAAK,GAExB,KAAA,MAAMgM,EAAQ,CAAC,EAAIxO,EACnB,KAAA,MAAMwO,EAAQ,CAAC,EAAI1O,EACnB,KAAA,MAAM0O,EAAQ,CAAC,EAAIhM,EACjB,IACT,CAEA,QAAQgM,EAAexO,EAAWF,EAAW0C,EAAWzC,EAAW,CACjE,OAAAyO,GAAS,KAAK,SACV,KAAK,aACHxO,EAAA8xD,GAAU9xD,EAAG,KAAK,KAAK,EACvBF,EAAAgyD,GAAUhyD,EAAG,KAAK,KAAK,EACvB0C,EAAAsvD,GAAUtvD,EAAG,KAAK,KAAK,EACvBzC,EAAA+xD,GAAU/xD,EAAG,KAAK,KAAK,GAExB,KAAA,MAAMyO,EAAQ,CAAC,EAAIxO,EACnB,KAAA,MAAMwO,EAAQ,CAAC,EAAI1O,EACnB,KAAA,MAAM0O,EAAQ,CAAC,EAAIhM,EACnB,KAAA,MAAMgM,EAAQ,CAAC,EAAIzO,EACjB,IACT,CAEA,SAASiT,EAAsB,CAC7B,YAAK,kBAAoBA,EAClB,IACT,CAEA,OAAQ,CAEC,OAAA4zC,GACL,KACA,KAAK,MACL,KAAK,SACL,KAAK,UAAA,EACL,KAAK,IAAI,CACb,CAEA,QAAS,CACA,MAAA,CACL,SAAU,KAAK,SACf,KAAM,KAAK,MAAM,YAAY,KAC7B,MAAO,MAAM,KAAK,KAAK,KAAK,EAC5B,WAAY,KAAK,UAAA,CAErB,CACF,CAEO,MAAM0L,WAA4BP,EAAgB,CACvD,YAAYjpC,EAAiBkpC,EAAkBC,EAAa,GAAO,CACjE,MAAM,IAAI,UAAUnpC,CAAK,EAAGkpC,EAAUC,CAAU,CAClD,CACF,CAEO,MAAMM,WAA6BR,EAAgB,CACxD,YAAYjpC,EAAiBkpC,EAAkBC,EAAa,GAAO,CACjE,MAAM,IAAI,WAAWnpC,CAAK,EAAGkpC,EAAUC,CAAU,CACnD,CACF,CAEO,MAAMO,WAAoCT,EAAgB,CAC/D,YAAYjpC,EAAiBkpC,EAAkBC,EAAa,GAAO,CACjE,MAAM,IAAI,kBAAkBnpC,CAAK,EAAGkpC,EAAUC,CAAU,CAC1D,CACF,CAEO,MAAMQ,WAA6BV,EAAgB,CACxD,YAAYjpC,EAAiBkpC,EAAkBC,EAAa,GAAO,CACjE,MAAM,IAAI,WAAWnpC,CAAK,EAAGkpC,EAAUC,CAAU,CACnD,CACF,CAEO,MAAMS,WAA8BX,EAAgB,CACzD,YAAYjpC,EAAiBkpC,EAAkBC,EAAa,GAAO,CACjE,MAAM,IAAI,YAAYnpC,CAAK,EAAGkpC,EAAUC,CAAU,CACpD,CACF,CAEO,MAAMU,WAA6BZ,EAAgB,CACxD,YAAYjpC,EAAiBkpC,EAAkBC,EAAa,GAAO,CACjE,MAAM,IAAI,WAAWnpC,CAAK,EAAGkpC,EAAUC,CAAU,CACnD,CACF,CAEO,MAAMW,WAA8Bb,EAAgB,CACzD,YAAYjpC,EAAiBkpC,EAAkBC,EAAa,GAAO,CACjE,MAAM,IAAI,YAAYnpC,CAAK,EAAGkpC,EAAUC,CAAU,CACpD,CACF,CAiGO,MAAMY,WAA+Bd,EAAgB,CAC1D,YAAYjpC,EAAiBkpC,EAAkBC,EAAa,GAAO,CACjE,MAAM,IAAI,aAAanpC,CAAK,EAAGkpC,EAAUC,CAAU,CACrD,CACF,CCxaO,MAAMa,GAAe,CAC1B,QAAS,IAOT,UAAW,SAAUC,EAAoD,CACvE,GAAIC,GACK,OAAAD,EAET,GAAI,KAAK,IAAI,IAAIA,CAAM,EACd,OAAA,KAAK,IAAI,IAAIA,CAAM,EAE5B,MAAMxzB,EAAS,IAAI,gBAAgBwzB,EAAO,MAAOA,EAAO,MAAM,EAEzD,OADOxzB,EAAO,WAAW,IAAI,GAC7B,UAAUwzB,EAAQ,EAAG,CAAC,EACtB,KAAA,IAAI,IAAIA,EAAQxzB,CAAM,EACpBA,CACT,EAEA,MAAO,UAAY,CACjB,KAAK,IAAI,OACX,CACF,EAEgB,SAAA0zB,GACdtyB,EACAC,EACA7e,EACyB,CACzB,MAAMwd,EAAS,IAAI,gBAAgBoB,EAAOC,CAAM,EAC1CpB,EAAMD,EAAO,WAAW,IAAI,EAClC,GAAIC,EACF,OAAAzd,EAAGyd,CAAG,EACCD,EAAO,uBAElB,CAEgB,SAAA2zB,GACd1zB,EACAuzB,EACAroD,EAQA,CACA,MAAMmhC,EAAUrM,EAAI,cAClBszB,GAAa,UAAUC,CAAM,EAC7B,WAAA,EAEF,GAAIlnB,EAAS,CACL,MAAAsf,EAASsG,GAAa/mD,CAAO,EACnCmhC,EAAQ,aAAasf,CAAM,EAC3B3rB,EAAI,UAAYqM,CAClB,CAQF,CCdO,MAAMsnB,GAAc,CAAC,GAAI,WAAY,QAAS,MAAO,MAAM,EAElD,SAAA7b,GACdhtC,EACAI,EAKA,CACM,MAAA1K,EAAI0K,EAAQ,GAAK,EACjB5K,EAAI4K,EAAQ,GAAK,EACjBlI,EAAIkI,EAAQ,GAAK,EACvB0oD,GACE9oD,EACA,YACA,aAAatK,CAAC,OAAOF,CAAC,kBAAkB0C,CAAC,KAAA,CAE7C,CAEgB,SAAA6wD,GACd/oD,EACAI,EAOA,CACA,MAAM4oD,EAAW5oD,GAAS,UAAYusB,EAAO,OAAO,KAC9C5E,EAAW3nB,GAAS,UAAY,EAChC0b,EAAQ1b,GAAS,OAAS,EAC1B0qB,EAAY2B,KACZw8B,EAAWn+B,EAAY/C,EAC7B,IAAIryB,EAAI,EACJF,EAAI,EACR,MAAM8V,EAASlL,EAAQ,OACjBmL,EAASnL,EAAQ,OACvB,SAAS4T,GAAO,CACd,MAAMhR,EAAMypB,KACZ,GAAIzpB,GAAOimD,EAAU,CACTjc,GAAAhtC,EAAI,CAAE,EAAGsL,EAAS5V,EAAG,EAAG6V,EAAS/V,EAAG,EAC9C,MACF,CACM,MAAAF,GAAK0N,EAAM8nB,GAAa/C,EACxBmF,EAAS87B,EAAS1zD,CAAC,EACnB4zD,EAAO59C,EAAS4hB,EAChBi8B,EAAO59C,EAAS2hB,EACZ8f,GAAAhtC,EAAI,CAAE,EAAGkpD,EAAOxzD,EAAG,EAAGyzD,EAAO3zD,EAAG,EACtCE,EAAAwzD,EACA1zD,EAAA2zD,EACJ/+B,EAAA,IAAIpW,CAAI,CACV,CACA,WAAW,IAAM,CACVA,KACJ8H,CAAK,CACV,CAGa,MAAAstC,GACX,OAAO,aAAgB,SACnB,SAAuB5lD,EAAU,CAC/B,OAAOA,aAAe,WACxB,EACA,SAAyBA,EAAU,CAE/B,OAAAA,GACA,OAAOA,GAAQ,UACfA,EAAI,WAAa,GACjB,OAAOA,EAAI,UAAa,QAE5B,EAEC,SAAS6lD,GAAgBjnD,EAAiC,CACxD,OAAA,OAAO,IAAI,gBAAgBA,CAAI,CACxC,CAEO,SAASknD,GAAgBC,EAAa,CACpC,OAAA,OAAO,IAAI,gBAAgBA,CAAG,CACvC,CAKO,SAASC,GAAgB/xC,EAAgB,CAC9C,IAAI6U,EAAW,GACf,SAASm9B,GAAQ,CAGX,kBAAkB,KAAK,SAAS,UAAU,GAAK,CAACn9B,IAClD/I,IACG9L,IACQ6U,EAAA,GAEf,CACA,MAAMo9B,EAAU3gC,EAAiB,SAAU,mBAAoB0gC,CAAK,EAC9DE,EAAU5gC,EAAiB,OAAQ,OAAQ0gC,CAAK,EAChD5lC,EAAQ,YAAY4lC,EAAO,GAAG,EAC9BlmC,EAAS,IAAM,CACnB,cAAcM,CAAK,EACT6lC,MACAC,KAAA,EAELpmC,OAAAA,CACT,CAEO,SAASqmC,GAAenyC,EAAoC,CACjE,OAAOsR,EAAiB,OAAQ,eAAiBnjC,GAAyB,CACxE6xB,EAAG7xB,CAAC,CAAA,CACL,CACH,CAEsB,eAAAikE,GACpBN,EACAO,EAAK,IASL,CACA,OAAO,IAAI,QAAQ,CAACjpD,EAASC,IAAW,CAChC,MAAAipD,EAAS,SAAS,cAAc,QAAQ,EAC9CA,EAAO,KAAO,kBAEdA,EAAO,MAAQ,GACRA,EAAA,OAAUnkE,GAAM,CACrB,aAAasd,CAAO,EAEpBrC,EAAQjb,CAAC,EAEFmkE,EAAA,QAAUA,EAAO,OAAS,IAAA,EAE5BA,EAAA,QAAWnkE,GAAM,CACtB,aAAasd,CAAO,EAEpBpC,EAAOlb,CAAC,CAAA,EAEVmkE,EAAO,IAAMR,EACP,MAAArmD,EAAyC,WAAW,IAAM,CAC9DpC,EAAO,UAAU,GAChBgpD,CAAE,EACI,SAAA,KAAK,YAAYC,CAAM,CAAA,CACjC,CACH,CAEgB,SAAAvS,GAAUwS,EAA0BxoD,EAAkB,CAC9D,MAAApR,EAAI,SAAS,cAAc,GAAG,EACpCA,EAAE,MAAM,WAAa,SACrBA,EAAE,SAAWoR,EACT,OAAOwoD,GAAc,SACvB55D,EAAE,KAAO45D,EAET55D,EAAE,KAAO,OAAO,IAAI,gBAAgB45D,CAAS,EAG/C55D,EAAE,MAAM,CAGV,CAIsB,eAAA65D,GACpBV,EACA3jD,EAAS,SAAS,qBAAqB,MAAM,EAAE,CAAC,EAChDkkD,EAAK,IASL,CACA,OAAO,IAAI,QAAQ,CAACjpD,EAASC,IAAW,CAChC,MAAAopD,EAAO,SAAS,cAAc,MAAM,EAErCA,EAAA,aAAa,OAAQ,UAAU,EAE/BA,EAAA,aAAa,MAAO,YAAY,EAChCA,EAAA,OAAUtkE,GAAM,CACnB,aAAasd,CAAO,EAEpBrC,EAAQjb,CAAC,EAEJskE,EAAA,QAAUA,EAAK,OAAS,IAAA,EAE1BA,EAAA,QAAWtkE,GAAM,CACpB,aAAasd,CAAO,EAEpBpC,EAAOlb,CAAC,CAAA,EAGLskE,EAAA,aAAa,OAAQX,CAAG,EACvB,MAAArmD,EAAyC,WAAW,IAAM,CAC9DpC,EAAO,UAAU,GAChBgpD,CAAE,EACLlkD,EAAO,YAAYskD,CAAI,CAAA,CACxB,CACH,CAGO,SAASC,IAA2B,CAClC,OAAA,IAAI,QAAetpD,GAAY,CACpC,MAAMupD,EAAQ,MAAM,KAClB,SAAS,iBAAiB,sBAAsB,CAAA,EAE9C,IAAAC,EAAc,SAAS,YAAY,QAAU,EACjD,MAAMZ,EAAQ,IACRY,GAAeD,EAAM,QACfvpD,IACD,IAEF,GAEJ4oD,KACGW,EAAA,QAASE,GAAe,CAC5BA,EAAW,OAAS,IAAM,CACTD,GAAA,EACTZ,GAAA,CACR,CACD,CACH,CACD,CACH,CAmBA,MAAMc,GAAS,IAAIC,GAKG,eAAAC,GAAalB,EAA2BO,EAAK,IAAO,CACxE,OAAO,IAAI,QAAsB,CAACjpD,EAASC,IAAW,CACpD,MAAM4pD,EAAW,OAAOnB,GAAQ,SAAWA,EAAMF,GAAgBE,CAAG,EAC9DoB,EAASJ,GAAO,IAAIG,CAAQ,EAClC,GAAIC,EACF,OAAO9pD,EAAQ8pD,CAAM,EAEjB,MAAAznD,EAAyC,WAAW,IAAM,CAC9DpC,EAAO,UAAU,GAChBgpD,CAAE,EAEC90B,EAAQ,SAAS,cAAc,KAAK,EAI1CA,EAAM,OAAS,IAAM,CACnB,aAAa9xB,CAAO,EAEd8xB,EAAA,QAAUA,EAAM,OAAS,KACzB,MAAAqB,EAAQrB,EAAM,cAAgBA,EAAM,MACpCsB,EAAStB,EAAM,eAAiBA,EAAM,OACtC41B,EAAe,CACnB,MAAAv0B,EACA,OAAAC,EACA,YAAaD,EAAQC,EACrB,QAAStB,EACT,UAAWD,GAAaC,CAAK,CAAA,EAExBu1B,GAAA,IAAIG,EAAUE,CAAY,EACjC/pD,EAAQ+pD,CAAY,CAAA,EAEhB51B,EAAA,QAAWpvC,GAAM,CACrB,aAAasd,CAAO,EACpBpC,EAAOlb,CAAC,CAAA,EAEVovC,EAAM,IAAM01B,CAAA,CAGb,CACH,CAEA,eAAsBG,GACpBC,EAA8B7pD,GAAkB,KAChDR,EAAoB,CAAC,GAAG,EACxB,CAEM,MAAAO,GADQ,MAAMR,GAAoBC,CAAO,GAC5B,CAAC,EACdwS,EAAO,MAAMlS,GAAqBC,EAAM8pD,CAAQ,EAC/C,MAAA,CACL,KAAM9pD,EAAK,KACX,KAAMA,EAAK,KACX,KAAMA,EAAK,KACX,KAAAiS,CAAA,CAEJ,CAEA,eAAsB83C,GAAmBtqD,EAAoB,CAAC,SAAS,EAAG,CAElE,MAAAO,GADQ,MAAMR,GAAoBC,CAAO,GAC5B,CAAC,EACpB,GAAI,CAACO,EAAK,KAAK,MAAM,UAAU,EACtB,OAAA,IAAI,MAAM,iBAAiB,EAEpC,MAAM67B,EAAK,MAAM97B,GACfC,EACAC,GAAkB,WAAA,EAEdmB,EAAO7B,GAAOs8B,CAAE,EAChB+tB,EAAe,MAAMH,GAAaroD,CAAI,EACrC,MAAA,CACL,KAAMpB,EAAK,KACX,KAAMA,EAAK,KACX,KAAMA,EAAK,KACX,KAAM67B,EACN,MAAO+tB,EAAa,MACpB,OAAQA,EAAa,OACrB,YAAaA,EAAa,YAC1B,UAAWA,EAAa,SAAA,CAE5B,CAEO,SAASI,IAA0B,CACxC,OAAO,OAAO,aAAA,GAAgB,SAAA,GAAc,EAC9C,CAEO,SAASC,GAAeC,EAAe,CAC5C,SAAS,qBAAqB,OAAO,EAAE,CAAC,EAAE,UAAYA,EACtD,SAAS,MAAQA,CACnB,CAEgB,SAAAC,GAAQrB,EAAK,IAAK,CAC5B,YAAa,UACR,OAAA,UAAU,QAAQA,CAAE,EAE3B,QAAQ,MAAM,qDAAqD,CAEvE,CAEA,eAAsBsB,GAAanoB,EAAc,CAC/C,GAAI,UAAU,UACZ,OAAO,MAAM,UAAU,UAAU,UAAUA,CAAI,EAC1C,CACC,MAAAooB,EAAW,SAAS,cAAc,UAAU,EAClD,OAAAA,EAAS,MAAQpoB,EACjBooB,EAAS,MAAM,QAAU,IAEzBA,EAAS,MAAM,SAAW,QAC1BA,EAAS,MAAM,IAAM,IACrBA,EAAS,MAAM,KAAO,IAEtBA,EAAS,MAAM,EACfA,EAAS,OAAO,EAET,SAAS,YAAY,MAAM,CACpC,CACF,CAQO,SAASC,GAAS51D,EAAI,EAAGF,EAAI,EAAG,CAC9B,OAAA,SAASE,EAAGF,CAAC,CACtB,CAEO,SAAS+1D,IAAkB,CAChC,IAAI7B,EAAUnyC,GACVoyC,EAAUpyC,GACV,MAAA,sBAAuB,OAAO,UAChC,OAAO,QAAQ,kBAAoB,SAInCmyC,EAAUE,GAAe,IAAM,CAC7B,OAAO,QAAQ,kBAAoB,MAAA,CACpC,EAEDD,EAAUH,GAAgB,IAAM,CAC9B,OAAO,QAAQ,kBAAoB,QAAA,CACpC,GAEI,IAAM,CACHE,IACAC,GAAA,CAEZ,CAEO,SAAS6B,GAASxrD,EAAgB,CACvC,MAAO,eAAe,KAAKA,EAAG,OAAO,GAAKA,IAAO,SAAS,eAC5D,CAEa,MAAAyrD,GAAczrD,GAGvBA,IAAO,SAAS,gBAAmBA,EAAW,MAASA,EAAW,MAI/D,SAAS0rD,IAAqB,CACnC,OAAO,WAAW,iBAAiB,SAAS,eAAe,EAAE,QAAQ,CACvE,CAEO,SAASC,GAAOC,EAAqB,CAC1C,OAAOA,EAAMF,IACf,CAEO,SAASG,GAAU7rD,EAAwB,CACzC,OAAAA,EAAG,cACN,WAAW,iBAAiBA,EAAG,aAAa,EAAE,QAAQ,EACtD0rD,IACN,CAEa,MAAAI,GAAkB9rD,GAAmB,CAChD,IAAI+rD,EAA+B/rD,EAC5B,KAAA+rD,GAAOA,EAAI,WAAa,GAAiB,CACxCnmD,MAAAA,EAASmmD,EAAI,eAAiB/rD,EAAG,WACvC,GAAI,CAAC4F,EACH,MAEIA,EAAAA,CACR,CACO,OAAAmmD,CACT,EAEanmD,GAAU5F,GACdA,EAAG,cAICgsD,GAAU,CACrBrmD,EACAsmD,EAAmB,KAEf,CAACtmD,GAASA,EAAK,gBAAkB,MAAQA,EAAK,aAAe,KACxDsmD,EAGFD,GAAQrmD,EAAK,cAAesmD,EAAG,OAAO,CAACtmD,CAAI,CAAC,CAAC,EAG/C,SAASumD,GAAalsD,EAAgB,CACrC,MAAAisD,EAAKD,GAAQhsD,CAAE,EACrB,QAASvY,EAAI,EAAG,EAAIwkE,EAAG,OAAQxkE,EAAI,EAAGA,IACpC,GACE,gBAAgB,KACd0kE,GAASF,EAAGxkE,CAAC,EAAG,UAAU,EACxB0kE,GAASF,EAAGxkE,CAAC,EAAG,YAAY,EAC5B0kE,GAASF,EAAGxkE,CAAC,EAAG,YAAY,CAAA,EAGhC,OAAOwkE,EAAGxkE,CAAC,EAGR,OAAA,SAAS,kBAAoB,SAAS,eAC/C,CAEa,MAAA2kE,GAAgB,CAACpsD,EAAgB2E,IACxC3E,EAAG,SACEA,GAAM2E,GAAS3E,EAAG,SAAS2E,CAAK,EAEhC,CAAC,EAAE3E,EAAG,wBAAwB2E,CAAK,EAAI,IAIrC0nD,GAAYrsD,GAChB,MAAM,UAAU,MACpB,KAAKA,EAAG,eAAe,QAAQ,EAC/B,OAAQ2E,GAAUA,IAAU3E,CAAE,EAGtBssD,GAAsBtsD,GAC1BA,EAAG,mBAGCusD,GAA0BvsD,GAC9BA,EAAG,uBAGCwsD,GAAU,CAACxsD,EAAgBysD,IAC/BzsD,EAAG,QAAQysD,CAAQ,EAGfC,GAAc1sD,GAClBA,EAAG,WAGC2sD,GAAW3sD,GACfA,EAAG,UAAY,SAAWA,aAAc,iBAGpC4sD,GAAY5sD,GAChBA,EAAG,UAAY,UAAYA,aAAc,kBAGrC6sD,GAAc7sD,GAClBA,EAAG,UAAY,YAAcA,aAAc,oBAGvC8sD,GAAmB9sD,GACvB2sD,GAAQ3sD,CAAE,GAAKA,EAAG,aAAa,MAAM,IAAM,WAGvC+sD,GAAgB/sD,GACpB2sD,GAAQ3sD,CAAE,GAAKA,EAAG,aAAa,MAAM,IAAM,QAGvCgtD,GAAehtD,GACnB2sD,GAAQ3sD,CAAE,GAAKA,EAAG,aAAa,MAAM,IAAM,OAGvCitD,GAAiBjtD,GACrB2sD,GAAQ3sD,CAAE,GAAKA,EAAG,aAAa,MAAM,IAAM,SAGpC,SAAAktD,GAAeltD,EAAgBmtD,EAAuB,CAChE,GAAAP,GAAS5sD,CAAE,EAAG,CAChB,MAAMI,EAAWJ,EAAyB,QAC1C,QAASvY,EAAI,EAAGsvC,EAAM32B,EAAQ,OAAQ3Y,EAAIsvC,EAAKtvC,IAC7C2Y,EAAQ3Y,CAAC,EAAE,SAAW2Y,EAAQ3Y,CAAC,EAAE,OAAS0lE,CAE9C,CACF,CAEgB,SAAAC,GAAmBptD,EAAgBqtD,EAAsB,CACnE,GAAAN,GAAa/sD,CAAE,EAAG,CACpB,MAAMI,EAAU,SAAS,kBAAmBJ,EAAwB,IAAI,EACxE,QAASvY,EAAI,EAAGsvC,EAAM32B,EAAQ,OAAQ3Y,EAAIsvC,EAAKtvC,IAAK,CAC5C,MAAA6lE,EAASltD,EAAQ3Y,CAAC,EACjB6lE,EAAA,QAAUA,EAAO,OAASD,CACnC,CACF,CACF,CAEgB,SAAAE,GAAsBvtD,EAAgBwtD,EAAkB,CAClEV,GAAgB9sD,CAAE,IACnBA,EAAwB,QAAUwtD,EAEvC,CAEO,SAASC,GACdztD,EACA0tD,EACA/pD,EAMoB,SACpB,CACI,OAAO+pD,GAAQ,SACjB1tD,EAAG2D,CAAM,EAAEgqD,GAAeD,CAAI,CAAC,EAE5B1tD,EAAA2D,CAAM,EAAE+pD,CAAI,CAEnB,CAEgB,SAAAA,GAAK1tD,EAAgB0tD,EAA2B,CAC1D,GAAA,OAAOA,GAAQ,SAAU,CAC3B1tD,EAAG,UAAY0tD,EACT,MAAAE,EAAQC,GAAc7tD,CAAE,EAC1B4tD,GAAS5tD,IACNA,EAAA4tD,EACP,MAEAH,GAAOC,EAAM,aAAa,CAE9B,CAEa,MAAA52C,GAAQ,SAAU9W,EAAgB,CAC7C0tD,GAAK1tD,EAAI,EAAE,CACb,EAEaijC,GAAO,CAACjjC,EAAgBijC,IAAiB,CACpDjjC,EAAG,YAAcijC,CACnB,EAEa6qB,GAAgB9tD,GAAmB,CAC9C,GAAIA,aAAc,WACT,MAAA,GAET,IAAI+tD,EAAW/tD,EAAG,UAClB,GAAI,CAAC+tD,EAAU,CACb,MAAMC,EAAQhuD,EAAG,cAAc,MAAM,GAAG,iBAAmB,GAC3D,IAAIkE,EAAQ,EACZ,KAAO,CAAC6pD,GAAY7pD,GAAS8pD,EAAM,OAAS,GACtC,cAAeA,EAAM9pD,CAAK,IAChB6pD,EAAAC,EAAM9pD,CAAK,EAAkB,WAE3CA,GAEJ,CACO,OAAA6pD,CACT,EAEaxqC,GAAUvjB,GACdA,EAAG,SAKI,SAAAiuD,GAAgBjuD,EAAgB2S,EAAiB,CAE5Dw5C,GAASnsD,EAAI,SAAS,GAAK,QAAU2S,IAAU,QAChDA,IAAU,GAEVu7C,GAAOluD,CAAE,EAETmuD,GAAOnuD,CAAE,CAEb,CAEO,SAASkuD,GAAOluD,EAAgB,CACrCouD,GACEpuD,EACA,UACAA,aAAc,oBACV,YACAA,aAAc,qBACd,aACA,OAAA,CAER,CAEO,SAASmuD,GAAOnuD,EAAgB,CAC5BouD,GAAApuD,EAAI,UAAW,MAAM,CAChC,CAEO,SAASquD,GACdruD,EACAsuD,EACAC,EAAmC,SACnC,CACM,MAAAC,EAAaF,EAAU,MAAM,QAAQ,EAC3C,GAAItuD,EAAG,UACMwuD,EAAA,QAASC,GAAoB,CAChC,MAAA/sD,EAAO+sD,EAAgB,OACzB/sD,IAAS,IACR1B,EAAA,UAAUuuD,CAAG,EAAE7sD,CAAI,CACxB,CACD,MACI,CACL,MAAMgtD,EAAS1uD,EAAG,UAAU,MAAM,IAAI,EACtC,IAAI2uD,EAAW,GACJH,EAAA,QAASC,GAAoB,CAChC,MAAA/sD,EAAO+sD,EAAgB,OAC7B,GAAI/sD,IAAS,GAAI,CACT,MAAAwC,EAAQwqD,EAAO,QAAQhtD,CAAI,EACjC,OAAQ6sD,EAAK,CACX,IAAK,MACCrqD,IAAU,KACZwqD,EAAO,KAAKhtD,CAAI,EACLitD,EAAA,IAEb,MACF,IAAK,SACCzqD,IAAU,KACLwqD,EAAA,OAAOxqD,EAAO,CAAC,EACXyqD,EAAA,IAEb,MACF,IAAK,SACCzqD,IAAU,GACZwqD,EAAO,KAAKhtD,CAAI,EAETgtD,EAAA,OAAOxqD,EAAO,CAAC,EAEbyqD,EAAA,GACX,KACJ,CACF,CAAA,CACD,EACGA,GACFC,GACE5uD,EACA,QACA0uD,EAAO,KAAK,GAAG,EAAE,QAAQ,OAAQ,EAAE,EAAE,QAAQ,OAAQ,EAAE,CAAA,CAG7D,CACF,CAEgB,SAAAG,GAAS7uD,EAAgBsuD,EAAmB,CAC9CD,GAAAruD,EAAIsuD,EAAW,KAAK,CAClC,CAEgB,SAAAQ,GAAY9uD,EAAgBsuD,EAAmB,CACjDD,GAAAruD,EAAIsuD,EAAW,QAAQ,CACrC,CAEgB,SAAAS,GAAS/uD,EAAgBsuD,EAA4B,CAC5D,OAAA,IAAI,OAAO,aAAeA,EAAY,YAAY,EAAE,KAAKtuD,EAAG,SAAS,CAC9E,CAKgB,SAAA2tD,GACdD,EACA9U,EAAU,GACQ,CACZ,MAAAoW,EAAO,SAAS,cAAc,UAAU,EAC9C,OAAAA,EAAK,UAAYtB,EACb9U,GACFoW,EAAK,QAAQ,WAAW,QAASrpD,GAAS,CAClC,MAAAspD,EAAUpB,GAAcloD,CAAkB,EAC5CspD,GAAWtpD,GACRqpD,EAAA,QAAQ,aAAaC,EAAStpD,CAAI,CACzC,CACD,EAEIqpD,EAAK,OACd,CAEO,SAASE,GAAc/X,EAAiB,CAC7C,OAAO,SAAS,cAAc,KAAK,SAAUA,CAAO,CACtD,CAEO,SAASgY,GAAgBztD,EAAc,CACrC,OAAA,SAAS,gBAAgB,+BAAgCA,CAAI,CACtE,CAEO,SAAS0tD,GAAen8C,EAAc,CAC3C,OAAO,SAAS,eAAe,KAAK,SAAUA,CAAI,CACpD,CAEA,SAAS46C,GAAc7tD,EAAgB,CACjC,OAAAA,EAAG,SAAW,WAChBA,EAAK44C,GAAQ54C,CAAuB,GAElCA,EAAG,kBACLA,EAAG,iBAAiB,QAAQ,EAAE,QAASpa,GAAM,CAC3CA,EAAE,YAAY,aAAagzD,GAAQhzD,CAAC,EAAGA,CAAC,CAAA,CACzC,EAEIoa,CACT,CAGA,SAAS44C,GAAQ54C,EAAuB,CACtC,MAAM+pD,EAAS/pD,EAAG,cAAc,cAAc,QAAQ,EACtD+pD,EAAO,KAAO/pD,EAAG,KACjB,MAAMo3C,EAAQp3C,EAAG,WACjB,QAASvY,EAAI,EAAG5B,EAAIuxD,EAAM,OAAQ3vD,EAAI5B,EAAG4B,IAChCsiE,EAAA,aAAa3S,EAAM3vD,CAAC,EAAE,KAAM2vD,EAAM3vD,CAAC,EAAE,KAAK,EAE5C,OAAAsiE,CACT,CAWgB,SAAAsF,GACdzrD,EACA0rD,EAAe,oCACf,CAEM,MAAAC,EAAS,SAAS,cAAc,QAAQ,EAC9CA,EAAO,IAAMD,EACJ,SAAA,KAAK,OAAOC,CAAM,EAC3B,WAAW,UAAY,CACdA,EAAA,eAAe,YAAY3rD,EAAS0rD,CAAY,GACtD,GAAI,EACP,WAAW,UAAY,CACrBC,EAAO,OAAO,GACb,GAAI,CACT,CAGO,SAASC,GAAaC,EAAc,CACnC,MAAAC,EAAsB,IAAI,MAAc,OAAQ,CACpD,IAAItxD,EAAQ+H,EAAKwpD,EAAU,CAEvB,GAAA,OAAOxpD,GAAO,UACd,CAAC,OAAQ,WAAY,UAAU,EAAE,SAASA,CAAG,EAE7C,MAAM,IAAI,MAAM,aAAaA,CAAG,EAAE,EAEpC,OAAIA,IAAQ,SACHupD,EAEF,QAAQ,IAAItxD,EAAQ+H,EAAKwpD,CAAQ,CAC1C,EACA,IAAIvxD,EAAQ+H,EAAKgJ,EAAOwgD,EAAU,CAChC,OAAO,QAAQ,IAAIvxD,EAAQ+H,EAAKgJ,EAAOwgD,CAAQ,CACjD,CAAA,CACD,EACD,IAAI,SAAS,SAAU,kBAAkBF,CAAI,IAAI,EAAEC,EAAa,IAAI,CACtE,CC7yBO,SAASE,IAAuB,CACrC,IAAIC,EAAM,KACV,GAAI,OAAO,cAAe,CACxB,MAAMC,EAAW,CACf,oBACA,iBACA,iBACA,iBACA,iBACA,iBACA,eAAA,EAEF,QAASroE,EAAI,EAAGmD,EAAIklE,EAAS,OAAQroE,EAAImD,EAAGnD,IACtC,GAAA,CACFooE,EAAM,IAAI,OAAO,cAAcC,EAASroE,CAAC,CAAC,EAC1C,WACU,CACV,QACF,CACF,MAEAooE,EAAM,IAAI,eAEL,OAAAA,CACT,CAEgB,SAAAE,GACdxG,EACAnpD,EAgBA,CACA,OAAO,IAAI,QAAQ,CAACS,EAASC,IAAW,CAChC,KAAA,CACJ,OAAA6C,EAAS,MACT,KAAAsP,EAAO,CAAC,EACR,wBAAA+8C,EAA0B,GAC1B,SAAAC,EAAW,GACX,QAAAC,EAAU,CAAC,EACX,gBAAAC,EAAkB,GAClB,aAAAC,EAAe,OACf,QAAAltD,EAAU,GAAA,EACR9C,GAAW,CAAA,EACTyvD,EAAMD,KACZC,EAAI,QAAU3sD,EACd2sD,EAAI,aAAeO,EACfP,EAAA,mBAAqB,SAAUjqE,EAAQ,CAMrCiqE,EAAI,aAAe,IACjBA,EAAI,SAAW,IACjBhvD,EAAQgvD,EAAI,QAAQ,EAEpB/uD,EAAO+uD,EAAI,UAAU,EAEzB,EAEFA,EAAI,UAAY,IAAM,CACpB/uD,EAAO,GAAGyoD,CAAG,qBAAqBrmD,CAAO,KAAK,CAAA,EAG5C2sD,EAAA,iBAAiB,OAASjqE,GAAWwa,GAAS,OAAOxa,EAAGiqE,CAAG,EAAG,EAAK,EACnEA,EAAA,iBACF,YACCjqE,GAAWwa,GAAS,YAAYxa,EAAGiqE,CAAG,EACvC,EAAA,EAEEA,EAAA,iBACF,UACCjqE,GAAWwa,GAAS,UAAUxa,EAAGiqE,CAAG,EACrC,EAAA,EAGEA,EAAA,iBACF,WACCjqE,GAAW,CACV,GAAIA,EAAE,iBAAkB,CACtB,MAAMyqE,EAAa,KAAK,MAAOzqE,EAAE,OAAS,IAAOA,EAAE,KAAK,EAC/Cwa,GAAA,WAAWxa,EAAGiqE,EAAKQ,CAAU,CACxC,CACF,EACA,EAAA,EAGER,EAAA,iBAAiB,QAAUjqE,GAAWwa,GAAS,QAAQxa,EAAGiqE,CAAG,EAAG,EAAK,EAErEA,EAAA,iBAAiB,QAAUjqE,GAAWwa,GAAS,QAAQxa,EAAGiqE,CAAG,EAAG,EAAK,EACnE,MAAAS,EAAkB3sD,EAAO,cAC/B,OAAO,OAAOusD,EAAS,CACrB,OAAQ,KAAA,CAIT,EACD,IAAIK,EAAsB,GACtBC,EAAc,GACdC,EAAa,GACjB,SAASC,GAAa,CAEhBb,EAAA,iBAAiB,oBAAqB,8BAA8B,EACpEM,IACFN,EAAI,gBAAkB,IAExB,UAAWc,KAAcT,EAErBzT,GAAQkU,CAAU,EAAE,eAAiB,gBACrCT,EAAQS,CAAU,EAAE,YAAY,GAAK,uBAEfJ,EAAA,GAClBV,EAAA,iBACF,eACA,iCAAmCI,CAAA,IAGjCxT,GAAQkU,CAAU,EAAE,YAAA,GAAiB,iBACnCT,EAAQS,CAAU,EAAE,cAAc,QAAQ,YAAY,GAAK,EAC/CH,EAAA,GAGdN,EAAQS,CAAU,EAAE,YAAc,EAAA,QAAQ,kBAAkB,GAAK,IAEpDF,EAAA,KAGjBZ,EAAI,iBAAiBc,EAAYT,EAAQS,CAAU,CAAC,EAG1D,CAEA,OAAQL,EAAiB,CACvB,IAAK,MACH,IAAIM,EAAa,GACb39C,aAAgB,SAClB29C,EAAaC,GAAiB59C,CAAI,EAElC29C,EAAaE,GAAe79C,CAAI,EAElC48C,EAAI,KAAK,MAAOkB,GAAUxH,EAAKqH,CAAU,EAAG,EAAI,EACrCF,IACXb,EAAI,KAAK,IAAI,EACb,MACF,QACMA,EAAA,KAAKS,EAAiB/G,EAAK,EAAI,EACxBmH,IACPH,EACFV,EAAI,aAAaG,CAAuB,EAEpCS,EACFZ,EAAI,KAAK,KAAK,UAAU58C,CAAI,CAAC,EACpBu9C,EACLX,EAAA,KACF,OAAO,QAAQ58C,CAAI,EAChB,IAAI,CAAC,CAAClc,EAAGyU,CAAC,IAAM,GAAGzU,CAAC,IAAIyU,CAAC,EAAE,EAC3B,KAAK;AAAA,CAAM,CAAA,EAGZqkD,EAAA,KACF,OAAO,QAAQ58C,CAAI,EAChB,IACC,CAAC,CAAClc,EAAGyU,CAAC,IACJ,GAAG,mBAAmBzU,CAAC,CAAC,IAAI,mBAAmByU,CAAC,CAAC,EAAA,EAEpD,KAAK,GAAG,CAAA,EAIjB,KACJ,CAAA,CAID,CACH,CAEA,eAAsBwlD,GAAkBC,EAA8B,CACpE,MAAMhyD,EAAS,CACb,IAAKgyD,EAAY,QAAU,GAC3B,KAAM,CAAC,EACP,YACEA,EAAY,OAAO,gBAAkB,QAAUA,EAAY,QACvDA,EAAY,QACZ,oCACN,wBAAyB,GACzB,SAAU,8BAAgC,KAAK,IAAI,EAAE,SAAS,EAAE,CAAA,EAE5Dta,EAAqB,CAAA,EACrB4Z,EAAsBtxD,EAAO,aAAe,sBAClD,QAAS,EAAI,EAAG,EAAIgyD,EAAY,SAAS,OAAQ,IAAK,CAC9C,MAAAlqD,EAAUkqD,EAAY,SAAS,CAAC,EACtC,GAAI,CAAClqD,EAAQ,aAAa,MAAM,EAC9B,SAEI,MAAAmqD,EAAcnqD,EAAQ,aAAa,MAAM,EAK/C,OAHEA,EAAQ,SAAS,gBAAkB,SAAWmqD,EAC1CA,EAAY,YACZ,EAAA,GACoB,CACxB,IAAK,OACH,MAAMC,EAAcpqD,EACpB,GAAIwpD,EAEO,QAAAlkE,EAAI,EAAGzB,EAAIumE,EAAY,OAAO,QAAU,EAAG9kE,EAAIzB,EAAGyB,IAAK,CACxD,MAAA2U,EAAOmwD,EAAY,QAAQ9kE,CAAC,EAClC,GAAI2U,EAAM,CACR,MAAMowD,EAAmB,MAAMrwD,GAC7BC,EACAC,GAAkB,YAAA,EAEX01C,EAAA,KACP,yCACEwa,EAAY,KACZ,gBACAnwD,EAAK,KACL;AAAA,gBACAA,EAAK,KACL;AAAA;AAAA,EACAowD,EACA;AAAA,CAAA,CAEN,CACF,CAIF,MACF,IAAK,QACL,IAAK,WAEH,GAAI,CADiBrqD,EACJ,QAGf,MAGJ,QACE,MAAMsqD,EAAgBtqD,EAIlBwpD,EACO5Z,EAAA,KACP,yCACE0a,EAAc,KACd;AAAA;AAAA,EACAA,EAAc,MACd;AAAA,CAAA,EAGJpyD,EAAO,KAAKoyD,EAAc,IAAI,EAAIA,EAAc,MAElD,KACJ,CACF,CACA,OAAApyD,EAAO,wBACL,KACAA,EAAO,SACP;AAAA,EACA03C,EAAS,KAAK,KAAO13C,EAAO,SAAW;AAAA,CAAM,EAC7C,KACAA,EAAO,SACP;AAAA,EACKA,CACT,CCzTA,SAASqyD,GAAsBC,EAA6B,CAC1D,MAAMC,EAAQ,CAAA,EACd,QAAS/pE,EAAI,EAAGwD,EAAI49D,GAAY,OAAQphE,EAAIwD,EAAGxD,IAAK,CAClD,MAAMia,EAAO+6C,GAAQoM,GAAYphE,CAAC,EAAI8pE,CAAS,EAC/CC,EAAM,KAAK9vD,CAAI,CACjB,CACO,OAAA8vD,CACT,CAmDgB,SAAArF,GACdnsD,EACA0G,EACA+qD,EACA,CAEM,MAAA59B,EAAQF,GAAS3zB,CAAE,EAEzB,OADA6zB,EAAM,MAAM,MAAQA,EAAM,MAAM,OAAS,GACpCntB,EAQDmtB,EAAM,MAAM,MAAMntB,CAAI,GACtBmtB,EAAM,MAAM,MAAM69B,GAAQhrD,CAAI,CAAC,GAC/BmtB,EAAM,MAAM,MAAM4oB,GAAQ/1C,CAAI,CAAC,GAC/B,GARKmtB,EAAM,MAAM,KAWvB,CAGgB,SAAAu6B,GACdpuD,EACA0G,EACAyI,EACA,CACY4kB,GAAA/zB,EAAK6zB,GAAiB,CAChCA,EAAM,MAAM,MAAQA,EAAM,MAAM,OAAS,GACrC,OAAOntB,GAAQ,UAAYyI,EACvB0kB,EAAA,MAAM,MAAMntB,CAAI,EAAIyI,EACjBzI,aAAgB,QACzB,OAAO,KAAKA,CAAI,EAAE,QAASP,GAAgB,CACzC0tB,EAAM,MAAM,MAAM1tB,CAAG,EAAIO,EAAKP,CAAG,CAAA,CAClC,CACH,CACD,EACiBkuB,IACpB,CAEgB,SAAAs9B,GACd3xD,EACA4xD,EAAkB,GACM,CACxB,MAAMC,EAAiC,CAAA,EACvC,GAAI,CAACD,EACH,GAAI,iBAAkB,CACd,MAAAvqE,EAAI,iBAAiB2Y,CAAE,EAC7B,QAAS,EAAI,EAAGna,EAAIwB,EAAE,OAAQ,EAAIxB,EAAG,IAAK,CAClC,MAAA6gB,EAAOrf,EAAE,CAAC,EAChBwqE,EAAOnrD,CAAI,EAAIrf,EAAE,iBAAiBqf,CAAI,CACxC,CAAA,KACK,CAEC,MAAArf,EAAI2Y,EAAG,OAASA,EAAG,aACzB,UAAW0G,KAAQrf,EACb,OAAO,UAAU,eAAe,KAAKA,EAAGqf,CAAI,IACvCmrD,EAAAnrD,CAAI,EAAIrf,EAAEqf,CAAI,EAG3B,CAGE,OAAA1G,EAAG,MAAM,SACXA,EAAG,MAAM,QACN,MAAM,GAAG,EACT,OAAQ5P,GAAc,CAAC,CAACA,CAAC,EACzB,QAASA,GAAc,CACtB,KAAM,CAAC2G,EAAGyU,CAAC,EAAIpb,EAAE,MAAM,GAAG,EAAE,IAAK/I,GAAMA,EAAE,KAAM,CAAA,EAC3C0P,GAAKyU,IACPqmD,EAAO96D,CAAC,EAAIyU,EACd,CACD,EAEEqmD,CACT,CAEgB,SAAAC,GACdD,EACAnrD,EACQ,CACF,MAAAqrD,EAAgBT,GAAsB5qD,CAAI,EAC1CsrD,EAAqBD,EAAc,OACzC,IAAI5iD,EAAQ,GACZ,QAAS1nB,EAAI,EAAGA,EAAIuqE,EAAoBvqE,IAAK,CACrC,MAAAwqE,EAAeF,EAActqE,CAAC,EAEpC,GADQ0nB,EAAA0iD,EAAOI,CAAY,GAAK,GAC5B9iD,EACK,OAAAA,CAEX,CACO,OAAAA,CACT,CAEgB,SAAA+iD,GACdlyD,EACA0G,EACA+qD,EACQ,CACF,MAAAM,EAAgBT,GAAsB5qD,CAAI,EAC1CsrD,EAAqBD,EAAc,OACzC,IAAI5iD,EAAQ,GACZ,QAAS1nB,EAAI,EAAGA,EAAIuqE,EAAoBvqE,IAAK,CACrC,MAAAwqE,EAAeF,EAActqE,CAAC,EAKpC,GAHG0nB,EAAA,UAAWnP,GAAMA,EAAG,MAAMiyD,CAAY,GACtC,iBAAkBjyD,GAAMA,EAAG,aAAaiyD,CAAY,GACrD,GACE9iD,EACK,OAAAA,CAEX,CACA,GAAI,iBAAkB,CACd,MAAAo9B,EAAQ,iBAAiBvsC,EAAIyxD,CAAM,EACzC,QAAShqE,EAAI,EAAGA,EAAIuqE,EAAoBvqE,IAAK,CACrC,MAAAwqE,EAAeF,EAActqE,CAAC,EAMpC,GADA0nB,EAAQo9B,EAAM,iBAAiB0lB,CAAY,EAAE,KAAK,EAC9C9iD,EACK,OAAAA,CAEX,CACF,CACO,OAAAA,CACT,CAEgB,SAAA25C,GACd9oD,EACA0G,EACAyI,EACA,CACA,GAAKzI,EAGD,GAAA,OAAOA,GAAQ,UAAYyI,EACzB,GAAA,CACFnP,EAAG,MAAM,YACP0G,EACAyI,EAAM,QAAQ,cAAe,EAAE,EAC/BA,EAAM,YAAY,EAAE,SAAS,YAAY,EAAI,YAAc,EAAA,OAEnD,CACPnP,EAAA,MAAM0G,CAAI,EAAIyI,CACnB,MACSzI,aAAgB,QACzB,OAAO,KAAKA,CAAI,EAAE,QAAS3P,GAAc,CACvC+xD,GAAe9oD,EAAIjJ,EAAG2P,EAAK3P,CAAC,CAAC,CAAA,CAC9B,CAEL,CAEgB,SAAAo7D,GACdnyD,EACA0G,EACA,CACI,OAAOA,GAAQ,SACjB1G,EAAG,MAAM,eAAey8C,GAAQ/1C,CAAI,CAAC,EAErC,OAAO,KAAKA,CAAI,EAAE,QAASP,GAAgB,CACzCgsD,GAAgBnyD,EAAImG,CAAG,CAAA,CACxB,CAEL,CAYgB,SAAAisD,GACdC,EACAryD,EACA,CACI,IAAAsyD,EACA,GAAA,OAAOtyD,GAAO,SAAU,CAC1B,MAAM0sD,EAAa,SAAS,cAAc1sD,CAAE,GAAG,WAC3C0sD,EACI4F,EAAA5F,EAEA4F,EAAA,SAAS,cAActyD,CAAE,CACjC,MAEAsyD,EAAMtyD,GAAM,SAAS,qBAAqB,MAAM,EAAE,CAAC,EAErD,GAAIsyD,EAAK,CACD,MAAA/lB,EAAQ,SAAS,cAAc,OAAO,EAC5C,OAAAA,EAAM,UAAY8lB,EAClBC,EAAI,YAAY/lB,CAAK,EACd,IAAM,EACP+lB,aAAe,aAAeA,aAAe,aAC/CA,EAAI,YAAY/lB,CAAK,CACvB,CACF,KACK,CAOL,MAAMqY,EAAW,SAAS,YAAY,CAAC,EAAE,WAAWyN,CAAmB,EAEvE,MAAO,IAAM,CACX,SAAS,YAAY,CAAC,EAAE,WAAWzN,CAAQ,CAAA,CAE/C,CACF,CAEA,MAAM2N,EAAQ,CACL,SACA,KACA,MAEP,YAAY9F,EAAkB/qD,EAAcyN,EAAe,CACzD,KAAK,SAAWs9C,EAChB,KAAK,KAAO/qD,EACZ,KAAK,MAAQyN,CACf,CAEO,UAAW,CACT,MAAA,GAAG,KAAK,QAAQ,MAAM,KAAK,IAAI,KAAK,KAAK,KAAK,IACvD,CACF,CAEA,MAAMqjD,EAAS,CACN,aACA,OAAoB,CAAA,EAE3B,YAAYC,EAAsB,CAChC,KAAK,aAAeA,CACtB,CAEO,IAAIhG,EAAkBt9C,EAAe,CACrC,KAAA,OAAO,KAAK,IAAIojD,GAAQ9F,EAAU,KAAK,aAAct9C,CAAK,CAAC,CAClE,CACF,CAEA,eAAsBujD,IAAiB,CACrC,MAAMC,EAAwB,CAAA,EACxBC,EAAa,SAAS,iBAAiB,aAAa,EAC1D,QAASnrE,EAAI,EAAGmD,EAAIgoE,EAAW,OAAQnrE,EAAImD,EAAGnD,IAAK,CAC3C,MAAAke,EAAOitD,EAAWnrE,CAAC,EACzB,IAAIorE,EAAeltD,EAAK,UAChB,OAAAA,EAAK,SAAS,YAAe,EAAA,CACnC,IAAK,QAQH,MACF,IAAK,OACaktD,EAAA,MAAM9C,GAAMpqD,EAAa,KAAM,CAC7C,OAAQ,MACR,aAAc,MAAA,CACf,EACD,KACJ,CACektD,EAAAA,EACZ,QAAQ,uCAAwC,EAAE,EAClD,QAAQ,+BAAgC,EAAE,EAC1C,QAAQ,4BAA6B,EAAE,EAC1CF,EAAY,KAAKE,CAAY,CAC/B,CACO,OAAAF,CACT,CAEA,eAAsBG,IAAW,CAC/B,MAAMC,EAA2C,CAAA,EAC3CJ,EAAc,MAAMD,KAC1B,QAASjrE,EAAI,EAAG,EAAIkrE,EAAY,OAAQlrE,EAAI,EAAGA,IAAK,CAE5C,MAAAurE,EADQL,EAAYlrE,CAAC,EACP,MAAM,eAAe,EACzC,GAAKurE,EAGL,QAAS3mE,EAAI,EAAGzB,EAAIooE,EAAM,OAAQ3mE,EAAIzB,EAAGyB,IAAK,CAC5C,MAAM4mE,EAAaD,EAAM3mE,CAAC,EAAE,MAAM,OAAO,EACnCogE,EAAWwG,EAAW,CAAC,EAAE,KAAK,EAE9BpuD,EADgBouD,EAAW,CAAC,EACD,MAAM,GAAG,EAC1C,QAASl8D,EAAI,EAAGA,EAAI8N,EAAW,OAAQ9N,IACrC,GAAI8N,EAAW9N,CAAC,EAAE,KAAA,GAAU,GAAI,CAC9B,MAAMm8D,EAAgBruD,EAAW9N,CAAC,EAAE,MAAM,GAAG,EACvC2K,EAAOwxD,EAAc,CAAC,EAAE,KAAA,EAAO,cAC/B/jD,EAAQ+jD,EAAc,CAAC,EACxBH,EAAUrxD,CAAI,IACjBqxD,EAAUrxD,CAAI,EAAI,IAAI8wD,GAAS9wD,CAAI,GAEjCyN,GACF4jD,EAAUrxD,CAAI,EAAE,IAAI+qD,EAAUt9C,EAAM,MAAM,CAE9C,CAEJ,CACF,CACO,OAAA4jD,CACT,CC1XgB,SAAA1b,GACdr3C,EACA0G,EACAyI,EACA,CAEI,GAAAzI,IAAS,QAAayI,IAAU,OAClC,OAAOgkD,GAAmBnzD,CAAE,EAG9B,GAAI,OAAO0G,GAAQ,UAAYyI,IAAU,OAChC,OAAAikD,GAAkBpzD,EAAI0G,CAAI,EAG/B,OAAOA,GAAQ,SAGLqtB,GAAA/zB,EAAK6zB,GAAiB,CAChC,UAAW98B,KAAK2P,EACV3P,GAAK,QACPq3D,GAASpuD,EAAIjJ,EAAG2P,EAAK3P,CAAC,CAAC,EAEnB,OAAO,UAAU,eAAe,KAAK2P,EAAM3P,CAAC,IAC9C88B,EAAM,MAAM98B,CAAC,EAAI,GAAK2P,EAAK3P,CAAC,EAGlC,CACD,EACQ,OAAO2P,GAAQ,UAAY,OAAOyI,GAAS,WAGhDzI,GAAQ,QACD0nD,GAAApuD,EAAI0G,EAAMyI,CAAK,EAEZ4kB,GAAA/zB,EAAK6zB,GAAiB,CAC1BA,EAAA,MAAMntB,CAAI,EAAI,GAAKyI,CAAA,CAC1B,GAOaklB,IACpB,CAEO,SAAS8+B,GAAmBnzD,EAAgB,CACjD,MAAMwD,EAAuD,CAAA,EACpD,QAAA/b,EAAI,EAAG2vD,EAAQp3C,EAAG,WAAYna,EAAIuxD,EAAM,OAAQ3vD,EAAI5B,EAAG4B,IAAK,CAC7D,MAAAmlD,EAAOwK,EAAM3vD,CAAC,EAChBmlD,EAAK,UAAYA,EAAK,YACpBA,EAAK,WAAa,QACpBppC,EAAIopC,EAAK,QAAQ,EAAI+kB,GAAe3xD,EAAI,EAAI,EAExCwD,EAAAopC,EAAK,QAAQ,EAAIA,EAAK,UAGhC,CACO,OAAAppC,CACT,CAEgB,SAAA4vD,GAAkBpzD,EAAgB0G,EAAc,CAC9D,OAAIA,IAAS,QACJirD,GAAe3xD,EAAI,EAAI,EAEvBA,EAAG,aAAay8C,GAAQ/1C,CAAI,CAAC,CAExC,CAEgB,SAAAkoD,GACd5uD,EACA0G,EACAyI,EACA,CACA,OAAOnP,EAAG,aAAay8C,GAAQ/1C,CAAI,EAAG,GAAKyI,CAAK,CAClD,CAEgB,SAAAkkD,GAAoBrzD,EAAgBo3C,EAAe,CACjEA,EAAM,MAAM,SAAS,EAAE,QAASxK,GAAS,CACvC,MAAMx8C,EAAIqsD,GAAQ7P,EAAK,KAAM,CAAA,EACzBx8C,GAAK,IACP4P,EAAG,gBAAgB5P,CAAC,CACtB,CACD,CACH,CAGgB,SAAAkjE,GACdp+B,EACAkiB,EACA,CAIA,UAAWjxC,KAAOixC,EAAO,CACjB,MAAAjoC,EAAQioC,EAAMjxC,CAAG,EACvB,OAAQA,EAAK,CACX,IAAK,OAECgJ,IAAU,SACZ+lB,EAAI,UAAY/lB,GAElB,MACF,IAAK,SAECA,IAAU,SACZ+lB,EAAI,YAAc/lB,GAEpB,MACF,IAAK,eACL,IAAK,cACC+lB,EAAA,UAAY,OAAO/lB,CAAK,EAC5B,MACF,IAAK,iBACL,IAAK,gBAGH+lB,EAAI,QAAU/lB,EACd,MACF,IAAK,kBACL,IAAK,iBACH,OAAQA,EAAO,CACb,IAAK,QACL,IAAK,QACL,IAAK,QACH+lB,EAAI,SAAW/lB,EACf,MACF,QACE+lB,EAAI,SAAW,QACf,KACJ,CACA,MACF,IAAK,oBACL,IAAK,mBAECA,EAAA,WAAa,OAAO/lB,CAAK,EAC7B,MACF,IAAK,iBACL,IAAK,gBACH,MACF,IAAK,oBACL,IAAK,mBACC+lB,EAAA,eAAiB,OAAO/lB,CAAK,EACjC,MACF,IAAK,mBACL,IAAK,kBAEC,OAAOA,GAAU,UACf+lB,EAAA,YAAY/lB,EAAM,MAAM,KAAK,EAAE,IAAK9nB,GAAM,OAAOA,CAAC,CAAC,CAAC,EAE1D,MACF,IAAK,SACH,MACF,IAAK,OACC,OAAO8nB,GAAU,WACnB+lB,EAAI,KAAO/lB,GAEb,MACF,IAAK,YACL,IAAK,WACC+lB,EAAA,MAAQ,IAAI/lB,CAAK,GACrB,MACF,IAAK,cACL,IAAK,aACC+lB,EAAA,MAAQ,IAAI/lB,CAAK,GACrB,MACF,IAAK,cACL,IAAK,aACH,MACF,IAAK,aACL,IAAK,YACH,MACF,IAAK,cACL,IAAK,aACH,OAAQA,EAAO,CACb,IAAK,SACH+lB,EAAI,UAAY,SAChB,MACF,IAAK,MAEHA,EAAI,UAAY,MAChB,MACF,IAAK,QAEHA,EAAI,UAAY,QAChB,KACJ,CACA,MACF,IAAK,qBACL,IAAK,oBACH,OAAQ/lB,EAAO,CACb,IAAK,SACL,IAAK,SACL,IAAK,MACL,IAAK,aACL,IAAK,UACL,IAAK,cACH+lB,EAAI,aAAe/lB,EACnB,MACF,QACE+lB,EAAI,aAAe,aACnB,KACJ,CACA,KAEJ,CACF,CACF,CC3KO,SAASq+B,IAA0B,CACxC,MACE,iBAAkB,QAClB,eAAgB,UAChB,UAAU,eAAiB,CAE/B,CAEO,SAASC,IAA4B,CAEnC,MAAA,CAAC,CAAC,OAAO,YAClB,CAOgB,SAAAC,GAAeC,EAAezwC,EAA4B,CACpE,IAAAjjB,EAAK,SAAS,cAAc0zD,CAAQ,EACxCzwC,EAAY,KAAOA,EACnB,IAAI0wC,EAAc1wC,KAAajjB,EAC/B,OAAK2zD,IACA3zD,EAAA,aAAaijB,EAAW,SAAS,EACtB0wC,EAAA,OAAO3zD,EAAGijB,CAAS,GAAK,YAEnCjjB,EAAA,KACE2zD,CACT,CAaO,SAASC,IAA0B,CACjC,MAAA,CACL,EAAG,EACH,EAAG,EACH,OAAQ,EAAA,CAEZ,CAEO,SAASC,IAAgB,CAC9B,MAAMC,EAA8BF,KAC9BG,EAAgCH,KAE/B,MAAA,CACL,MAAOE,EACP,QAASC,EAET,SAAU,SACR3lE,EACA4lE,EACA,CACAF,EAAgB,EAAI1lE,EAAE,EACtB0lE,EAAgB,EAAI1lE,EAAE,EACN0lE,EAAA,OACd,OAAOE,GAAU,UACbA,EACA,OAAO5lE,EAAE,QAAU,UACnBA,EAAE,OACF,GACD,KAAA,WAAWA,EAAG4lE,CAAM,CAC3B,EAEA,WAAY,CACV5lE,EACA4lE,IACG,CACHD,EAAkB,EAAI3lE,EAAE,EACxB2lE,EAAkB,EAAI3lE,EAAE,EACN2lE,EAAA,OAChB,OAAOC,GAAU,UACbA,EACA,OAAO5lE,EAAE,QAAU,UACnBA,EAAE,OACF,EACR,CAAA,CAEJ,CAGO,SAAS6lE,GACdj0D,EAA0B,SAAS,gBACnCgpB,EAAa,GACW,CACjB,OAAAI,EAAUppB,EAAI,YAAagpB,CAAU,CAC9C,CACO,SAASkrC,GACdl0D,EAA0B,SAAS,gBACnCgpB,EAAa,GACW,CACjB,OAAAI,EAAUppB,EAAI,YAAagpB,CAAU,CAC9C,CACO,SAASmrC,GACdn0D,EAA0B,SAAS,gBACnCgpB,EAAa,GACW,CACjB,OAAAI,EAAUppB,EAAI,UAAWgpB,CAAU,CAC5C,CACO,SAASorC,GACdp0D,EAA0B,SAAS,gBACnCgpB,EAAa,GACW,CACjB,OAAAI,EAAUppB,EAAI,YAAagpB,CAAU,CAC9C,CACO,SAASqrC,GACdr0D,EAA0B,SAAS,gBACnCgpB,EAAa,GACW,CACjB,OAAAI,EAAUppB,EAAI,WAAYgpB,CAAU,CAC7C,CACO,SAASsrC,GACdt0D,EAA0B,SAAS,gBACnCgpB,EAAa,GACW,CACjB,OAAAI,EAAUppB,EAAI,aAAcgpB,CAAU,CAC/C,CACO,SAASurC,GACdv0D,EAA0B,SAAS,gBACnCgpB,EAAa,GACW,CACjB,OAAAI,EAAUppB,EAAI,aAAcgpB,CAAU,CAC/C,CACO,SAASwrC,GACdx0D,EAA0B,SAAS,gBACnCgpB,EAAa,GACW,CACjB,OAAAI,EAAUppB,EAAI,QAASgpB,CAAU,CAC1C,CACO,SAASyrC,GACdz0D,EAA0B,SAAS,gBACnCgpB,EAAa,GACW,CACjB,OAAAI,EAAUppB,EAAI,WAAYgpB,CAAU,CAC7C,CACO,SAAS0rC,GACd10D,EAA0B,SAAS,gBACnCgpB,EAAa,GACW,CACjB,OAAAI,EACLppB,EACA,YAAa,SAAS,cAAc,KAAK,EACrC,QACA,SAAS,eAAiB,OAC1B,aACA,iBACJgpB,CAAA,CAEJ,CACO,SAAS2rC,GACd30D,EAA0B,SAAS,gBACnCgpB,EAAa,GACW,CACjB,OAAAI,EAAUppB,EAAI,cAAegpB,CAAU,CAChD,CAGO,SAAS4rC,GACd50D,EAA0B,SAAS,gBACnCgpB,EAAa,GACW,CACjB,OAAAI,EAAUppB,EAAI,YAAagpB,CAAU,CAC9C,CACO,SAAS6rC,GACd70D,EAA0B,SAAS,gBACnCgpB,EAAa,GACW,CACjB,OAAAI,EAAUppB,EAAI,aAAcgpB,CAAU,CAC/C,CACO,SAAS8rC,GACd90D,EAA0B,SAAS,gBACnCgpB,EAAa,GACW,CACjB,OAAAI,EAAUppB,EAAI,WAAYgpB,CAAU,CAC7C,CACO,SAAS+rC,GACd/0D,EAA0B,SAAS,gBACnCgpB,EAAa,GACW,CACjB,OAAAI,EAAUppB,EAAI,cAAegpB,CAAU,CAChD,CAGO,SAASgsC,GACdh1D,EAA0B,SAAS,gBACnCgpB,EAAa,GACa,CACnB,OAAAI,EAAUppB,EAAI,cAAegpB,CAAU,CAChD,CACO,SAASisC,GACdj1D,EAA0B,SAAS,gBACnCgpB,EAAa,GACa,CACnB,OAAAI,EAAUppB,EAAI,cAAegpB,CAAU,CAChD,CACO,SAASksC,GACdl1D,EAA0B,SAAS,gBACnCgpB,EAAa,GACa,CACnB,OAAAI,EAAUppB,EAAI,YAAagpB,CAAU,CAC9C,CACO,SAASmsC,GACdn1D,EAA0B,SAAS,gBACnCgpB,EAAa,GACa,CACnB,OAAAI,EAAUppB,EAAI,gBAAiBgpB,CAAU,CAClD,CAIgB,SAAAosC,GACdp1D,EAA0B,SAAS,gBACV,CACnB,MAAAq1D,EAAS,IAAIhjD,GAAOrS,CAAE,EACrB,OAAAyjB,GACJ3L,GAAS,CACDu9C,EAAA,GAAG,MAAOv9C,CAAI,CACvB,EACCA,GAAS,CACDu9C,EAAA,IAAI,MAAOv9C,CAAI,CACxB,CAAA,CAWJ,CACgB,SAAAw9C,GACdt1D,EAA0B,SAAS,gBACV,CACnB,MAAAq1D,EAAS,IAAIhjD,GAAOrS,CAAE,EACrB,OAAAyjB,GACJ3L,GAAS,CACDu9C,EAAA,GAAG,UAAWv9C,CAAI,CAC3B,EACCA,GAAS,CACDu9C,EAAA,IAAI,UAAWv9C,CAAI,CAC5B,CAAA,CAEJ,CACgB,SAAAy9C,GACdv1D,EAA0B,SAAS,gBACV,CACnB,MAAAq1D,EAAS,IAAIhjD,GAAOrS,CAAE,EACrB,OAAAyjB,GACJ3L,GAAS,CACDu9C,EAAA,GAAG,WAAYv9C,CAAI,CAC5B,EACCA,GAAS,CACDu9C,EAAA,IAAI,WAAYv9C,CAAI,CAC7B,CAAA,CAEJ,CACgB,SAAA09C,GACdx1D,EAA0B,SAAS,gBACV,CACnB,MAAAq1D,EAAS,IAAIhjD,GAAOrS,CAAE,EACrB,OAAAyjB,GACJ3L,GAAS,CACDu9C,EAAA,GAAG,SAAUv9C,CAAI,CAC1B,EACCA,GAAS,CACDu9C,EAAA,IAAI,SAAUv9C,CAAI,CAC3B,CAAA,CAEJ,CACgB,SAAA29C,GACdz1D,EAA0B,SAAS,gBACV,CACnB,MAAAq1D,EAAS,IAAIhjD,GAAOrS,CAAE,EACrB,OAAAyjB,GACJ3L,GAAS,CACDu9C,EAAA,GAAG,YAAav9C,CAAI,CAC7B,EACCA,GAAS,CACDu9C,EAAA,IAAI,YAAav9C,CAAI,CAC9B,CAAA,CAEJ,CACgB,SAAA49C,GACd11D,EAA0B,SAAS,gBACV,CACnB,MAAAq1D,EAAS,IAAIhjD,GAAOrS,CAAE,EACrB,OAAAyjB,GACJ3L,GAAS,CACDu9C,EAAA,GAAG,UAAWv9C,CAAI,CAC3B,EACCA,GAAS,CACDu9C,EAAA,IAAI,UAAWv9C,CAAI,CAC5B,CAAA,CAEJ,CACgB,SAAA69C,GACd31D,EAA0B,SAAS,gBACV,CACnB,MAAAq1D,EAAS,IAAIhjD,GAAOrS,CAAE,EACrB,OAAAyjB,GACJ3L,GAAS,CACDu9C,EAAA,GAAG,WAAYv9C,CAAI,CAC5B,EACCA,GAAS,CACDu9C,EAAA,IAAI,WAAYv9C,CAAI,CAC7B,CAAA,CAEJ,CACgB,SAAA89C,GACd51D,EAA0B,SAAS,gBACV,CACnB,MAAAq1D,EAAS,IAAIhjD,GAAOrS,CAAE,EACrB,OAAAyjB,GACJ3L,GAAS,CACDu9C,EAAA,GAAG,QAASv9C,CAAI,CACzB,EACCA,GAAS,CACDu9C,EAAA,IAAI,QAASv9C,CAAI,CAC1B,CAAA,CAEJ,CACgB,SAAA+9C,GACd71D,EAA0B,SAAS,gBACV,CACnB,MAAAq1D,EAAS,IAAIhjD,GAAOrS,CAAE,EACrB,OAAAyjB,GACJ3L,GAAS,CACDu9C,EAAA,GAAG,UAAWv9C,CAAI,CAC3B,EACCA,GAAS,CACDu9C,EAAA,IAAI,UAAWv9C,CAAI,CAC5B,CAAA,CAEJ,CAEgB,SAAAg+C,GACd91D,EAA0B,SAAS,gBACV,CACnB,MAAAq1D,EAAS,IAAIhjD,GAAOrS,CAAE,EACrB,OAAAyjB,GACJ3L,GAAS,CACDu9C,EAAA,GAAG,QAASv9C,CAAI,CACzB,EACCA,GAAS,CACDu9C,EAAA,IAAI,QAASv9C,CAAI,CAC1B,CAAA,CAEJ,CACgB,SAAAi+C,GACd/1D,EAA0B,SAAS,gBACV,CACnB,MAAAq1D,EAAS,IAAIhjD,GAAOrS,CAAE,EACrB,OAAAyjB,GACJ3L,GAAS,CACDu9C,EAAA,GAAG,UAAWv9C,CAAI,CAC3B,EACCA,GAAS,CACDu9C,EAAA,IAAI,UAAWv9C,CAAI,CAC5B,CAAA,CAEJ,CACgB,SAAAk+C,GACdh2D,EAA0B,SAAS,gBACV,CACnB,MAAAq1D,EAAS,IAAIhjD,GAAOrS,CAAE,EACrB,OAAAyjB,GACJ3L,GAAS,CACDu9C,EAAA,GAAG,WAAYv9C,CAAI,CAC5B,EACCA,GAAS,CACDu9C,EAAA,IAAI,WAAYv9C,CAAI,CAC7B,CAAA,CAEJ,CAEgB,SAAAm+C,GACdj2D,EAA0B,SAAS,gBACV,CACnB,MAAAq1D,EAAS,IAAIhjD,GAAOrS,CAAE,EACrB,OAAAyjB,GACJ3L,GAAS,CACDu9C,EAAA,GAAG,QAASv9C,CAAI,CACzB,EACCA,GAAS,CACDu9C,EAAA,IAAI,QAASv9C,CAAI,CAC1B,CAAA,CAEJ,CAEgB,SAAAo+C,GACdl2D,EAA0B,SAAS,gBACV,CACnB,MAAAq1D,EAAS,IAAIhjD,GAAOrS,CAAE,EACrB,OAAAyjB,GACJ3L,GAAS,CACDu9C,EAAA,GAAG,SAAUv9C,CAAI,CAC1B,EACCA,GAAS,CACDu9C,EAAA,IAAI,SAAUv9C,CAAI,CAC3B,CAAA,CAEJ,CAEgB,SAAAq+C,GACdn2D,EAA0B,SAAS,gBACV,CACnB,MAAAq1D,EAAS,IAAIhjD,GAAOrS,CAAE,EACrB,OAAAyjB,GACJ3L,GAAS,CACDu9C,EAAA,GAAG,QAASv9C,CAAI,CACzB,EACCA,GAAS,CACDu9C,EAAA,IAAI,QAASv9C,CAAI,CAC1B,CAAA,CAEJ,CACgB,SAAAs+C,GACdp2D,EAA0B,SAAS,gBACV,CACnB,MAAAq1D,EAAS,IAAIhjD,GAAOrS,CAAE,EACrB,OAAAyjB,GACJ3L,GAAS,CACDu9C,EAAA,GAAG,YAAav9C,CAAI,CAC7B,EACCA,GAAS,CACDu9C,EAAA,IAAI,YAAav9C,CAAI,CAC9B,CAAA,CAEJ,CACgB,SAAAu+C,GACdr2D,EAA0B,SAAS,gBACV,CACnB,MAAAq1D,EAAS,IAAIhjD,GAAOrS,CAAE,EACrB,OAAAyjB,GACJ3L,GAAS,CACDu9C,EAAA,GAAG,aAAcv9C,CAAI,CAC9B,EACCA,GAAS,CACDu9C,EAAA,IAAI,aAAcv9C,CAAI,CAC/B,CAAA,CAEJ,CACgB,SAAAw+C,GACdt2D,EAA0B,SAAS,gBACV,CACnB,MAAAq1D,EAAS,IAAIhjD,GAAOrS,CAAE,EACrB,OAAAyjB,GACJ3L,GAAS,CACDu9C,EAAA,GAAG,UAAWv9C,CAAI,CAC3B,EACCA,GAAS,CACDu9C,EAAA,IAAI,UAAWv9C,CAAI,CAC5B,CAAA,CAEJ,CACgB,SAAAy+C,GACdv2D,EAA0B,SAAS,gBACV,CACnB,MAAAq1D,EAAS,IAAIhjD,GAAOrS,CAAE,EACrB,OAAAyjB,GACJ3L,GAAS,CACDu9C,EAAA,GAAG,YAAav9C,CAAI,CAC7B,EACCA,GAAS,CACDu9C,EAAA,IAAI,YAAav9C,CAAI,CAC9B,CAAA,CAEJ,CAEgB,SAAA0+C,GACdx2D,EAA0B,SAAS,gBACV,CACnB,MAAAq1D,EAAS,IAAIhjD,GAAOrS,CAAE,EACrB,OAAAyjB,GACJ3L,GAAS,CACDu9C,EAAA,GAAG,MAAOv9C,CAAI,CACvB,EACCA,GAAS,CACDu9C,EAAA,IAAI,MAAOv9C,CAAI,CACxB,CAAA,CAEJ,CAEgB,SAAA2+C,GACdz2D,EAA0B,SAAS,gBACV,CACzB,MAAMq1D,EAAS,IAAIhjD,GAAO,SAAS,eAAe,EAC3C,OAAAoR,GACJ3L,GAAS,CACF,MAAAvS,EAAW3f,GAAmB,CAC9B,CAACA,EAAE,QAAUoa,GAAMpa,EAAE,QAAUoa,EAAG,SAASpa,EAAE,MAAc,GAG/DkyB,EAAKlyB,CAAC,CAAA,EAED,OAAAyvE,EAAA,GAAG,MAAO9vD,CAAO,EACjBA,CACT,EACA,CAACuS,EAAMvS,IAAY,CACV8vD,EAAA,IAAI,MAAO9vD,CAAO,CAC3B,CAAA,CAEJ,CAGO,SAASmxD,GACd12D,EAA0B,SAAS,gBACnCgpB,EAAa,GACgB,CACtB,OAAAI,EAAUppB,EAAI,kBAAmBgpB,CAAU,CACpD,CACO,SAAS2tC,GACd32D,EAA0B,SAAS,gBACnCgpB,EAAa,GACgB,CACtB,OAAAxkB,GACL4kB,EAAUppB,EAAI,gBAAiBgpB,CAAU,EACzCI,EACEppB,EACA,sBACAgpB,CACF,EACAI,EAAUppB,EAAI,iBAAkBgpB,CAAU,EAC1CI,EAAUppB,EAAI,kBAAmBgpB,CAAU,CAAA,CAE/C,CAGO,SAAS4tC,GACd52D,EAA0B,SAAS,gBACnCgpB,EAAa,GACe,CACrB,OAAAI,EAAUppB,EAAI,iBAAkBgpB,CAAU,CACnD,CACO,SAAS6tC,GACd72D,EAA0B,SAAS,gBACnCgpB,EAAa,GACe,CACrB,OAAAI,EAAUppB,EAAI,eAAgBgpB,CAAU,CACjD,CAGO,SAAS8tC,GACd92D,EAA0B,SAAS,gBACnCgpB,EAAa,GACU,CAChB,OAAAI,EAAUppB,EAAI,OAAQgpB,CAAU,CACzC,CACO,SAAS+tC,GACd/2D,EAA0B,SAAS,gBACnCgpB,EAAa,GACU,CAChB,OAAAI,EAAUppB,EAAI,YAAagpB,CAAU,CAC9C,CACO,SAASguC,GACdh3D,EAA0B,SAAS,gBACnCgpB,EAAa,GACU,CAChB,OAAAI,EAAUppB,EAAI,UAAWgpB,CAAU,CAC5C,CACO,SAASiuC,GACdj3D,EAA0B,SAAS,gBACnCgpB,EAAa,GACU,CAChB,OAAAI,EAAUppB,EAAI,OAAQgpB,CAAU,CACzC,CACO,SAASkuC,GACdl3D,EAA0B,SAAS,gBACnCgpB,EAAa,GACU,CAChB,OAAAI,EAAUppB,EAAI,YAAagpB,CAAU,CAC9C,CACO,SAASmuC,GACdn3D,EAA0B,SAAS,gBACnCgpB,EAAa,GACU,CAChB,OAAAI,EAAUppB,EAAI,YAAagpB,CAAU,CAC9C,CACO,SAASouC,GACdp3D,EAA0B,SAAS,gBACnCgpB,EAAa,GACU,CAChB,OAAAI,EAAUppB,EAAI,WAAYgpB,CAAU,CAC7C,CAGO,SAASquC,GACdr3D,EAA0B,SAAS,gBACnCgpB,EAAa,GACc,CACpB,OAAAI,EAAUppB,EAAI,UAAWgpB,CAAU,CAC5C,CACO,SAASsuC,GACdt3D,EAA0B,SAAS,gBACnCgpB,EAAa,GACc,CACpB,OAAAI,EAAUppB,EAAI,QAASgpB,CAAU,CAC1C,CACO,SAASuuC,GACdv3D,EAA0B,SAAS,gBACnCgpB,EAAa,GACc,CACpB,OAAAI,EAAUppB,EAAI,WAAYgpB,CAAU,CAC7C,CAUO,SAASwuC,GACdx3D,EAAkB,SAAS,gBAC3BI,EAC6B,CACvB,MAAAq3D,EAAMr3D,GAAS,eAAiByzD,GAAc,EAC7C,OAAAI,GAAWj0D,CAAE,EAAE,KACpBmgB,GAAKv6B,IACH6xE,EAAI,WAAWC,GAA0B9xE,EAAGoa,CAAE,CAAC,EACxCy3D,EACR,CAAA,CAEL,CAEO,SAASE,GACd33D,EAAkB,SAAS,gBAC3BI,EAC6B,CACvB,MAAAq3D,EAAMr3D,GAAS,eAAiByzD,GAAc,EAC7C,OAAAI,GAAWj0D,CAAE,EAAE,KACpBioB,GACEisC,GAAWl0D,CAAE,EAAE,KACbgnB,GAAKphC,GAAM,CACT6xE,EAAI,SAASC,GAA0B9xE,EAAGoa,CAAE,EAAG,EAAI,EAC1CI,GAAA,QAAQxa,EAAG6xE,CAAG,CAAA,CACxB,CACH,EACA,IACEtD,GAASn0D,CAAE,EAAE,KACXgnB,GAAKphC,GAAM,CACT6xE,EAAI,WAAWC,GAA0B9xE,EAAGoa,CAAE,EAAG,EAAK,EAC7CI,GAAA,MAAMxa,EAAG6xE,CAAG,CAAA,CACtB,CACH,CACJ,EACA5wC,GAAU,EACV1G,GAAKv6B,IACH6xE,EAAI,WAAWC,GAA0B9xE,EAAGoa,CAAE,EAAG,EAAI,EAC9Cy3D,EACR,CAAA,CAEL,CAEO,SAASG,GACd53D,EAAkB,SAAS,gBAC3BI,EAC6B,CACvB,MAAAq3D,EAAMr3D,GAAS,eAAiByzD,GAAc,EAC7C,OAAAgB,GAAY70D,CAAE,EAAE,KACrBgnB,GAAKphC,GAAM,CACH,MAAA6nB,EAAQ7nB,EAAE,eAAe,CAAC,EAChC6xE,EAAI,SAASC,GAA0BjqD,EAAOzN,CAAE,EAAG,EAAI,EAC9CI,GAAA,QAAQqN,EAAOgqD,CAAG,CAAA,CAC5B,EACDhxC,GAAU,IACRmuC,GAAW50D,CAAE,EAAE,KACb8mB,GACExC,GAAKwwC,GAAU90D,CAAE,EAAG+0D,GAAa/0D,CAAE,CAAC,EAAE,KACpCgnB,GAAKphC,GAAM,CACH,MAAA6nB,EAAQ7nB,EAAE,eAAe,CAAC,EAChC6xE,EAAI,WAAWC,GAA0BjqD,EAAOzN,CAAE,EAAG,EAAK,EACjDI,GAAA,MAAMqN,EAAOgqD,CAAG,CAAA,CAC1B,CACH,CACF,CACF,CACF,EACAt3C,GAAKv6B,GAAM,CACH,MAAA6nB,EAAQ7nB,EAAE,eAAe,CAAC,EAChC,OAAA6xE,EAAI,WAAWC,GAA0BjqD,EAAOzN,CAAE,EAAG,EAAI,EAClDy3D,CAAA,CACR,CAAA,CAEL,CAGO,SAASI,GACd73D,EAAkB,SAAS,gBAC3BI,EAC6B,CACvB,MAAAq3D,EAAMr3D,GAAS,eAAiByzD,GAAc,EAC7C,OAAAoB,GAAaj1D,CAAE,EAAE,KACtBgnB,GAAKphC,GAAM,CACT6xE,EAAI,SAASC,GAA0B9xE,EAAGoa,CAAE,EAAG,EAAI,EAC1CI,GAAA,QAAQxa,EAAG6xE,CAAG,CAAA,CACxB,EACDhxC,GAAU,IACRuuC,GAAah1D,CAAE,EAAE,KACf8mB,GACExC,GAAK4wC,GAAWl1D,CAAE,EAAGm1D,GAAen1D,CAAE,CAAC,EAAE,KACvCgnB,GAAKphC,GAAM,CACT6xE,EAAI,WAAWC,GAA0B9xE,EAAGoa,CAAE,EAAG,EAAK,EAC7CI,GAAA,MAAMxa,EAAG6xE,CAAG,CAAA,CACtB,CACH,CACF,CACF,CACF,EACAt3C,GAAKv6B,IACH6xE,EAAI,WAAWC,GAA0B9xE,EAAGoa,CAAE,EAAG,EAAI,EAC9Cy3D,EACR,CAAA,CAEL,CAGO,SAASK,GACd93D,EAAkB,SAAS,gBAC3BI,EAC6B,CACtB,OAAAkkB,GACLqzC,GAAuB33D,EAAII,CAAO,EAClCw3D,GAAuB53D,EAAII,CAAO,CAAA,CAGtC,CAEO,SAAS23D,GACd/3D,EAAkB,SAAS,gBAC3BI,EAC6B,CACvB,MAAAq3D,EAAMr3D,GAAS,eAAiByzD,GAAc,EACpD,OAAOrvD,GAAMyvD,GAAWj0D,CAAE,EAAGi1D,GAAaj1D,CAAE,CAAC,EAAE,KAC7C+kB,GAAYn/B,GACNA,aAAa,cAEf6xE,EAAI,SAASC,GAA0B9xE,EAAGoa,CAAE,EAAG,EAAI,EAC1CI,GAAA,QAAQxa,EAAG6xE,CAAG,EAChBzC,GAAah1D,CAAE,EAAE,KACtB8mB,GACExC,GAAK4wC,GAAWl1D,CAAE,EAAGm1D,GAAen1D,CAAE,CAAC,EAAE,KACvCgnB,GAAKphC,GAAM,CACT6xE,EAAI,WAAWC,GAA0B9xE,EAAGoa,CAAE,EAAG,EAAK,EAC7CI,GAAA,MAAMxa,EAAG6xE,CAAG,CAAA,CACtB,CACH,CACF,CAAA,GAEO7xE,aAAa,WAEfk6B,GAAGl6B,CAAC,EAEJk3B,EAEV,EACDqD,GAAKv6B,IACC6xE,EAAA,WACFC,GAA0B9xE,EAAGoa,CAAE,EAC/Bpa,aAAa,YAAA,EAER6xE,EACR,CAAA,CAEL,CAMO,SAASO,GAASh4D,EAAqC,CACrD,OAAA,IAAI8Y,GAAoB4B,GACRm9C,GAAyB73D,EAAI,CAChD,MAAO,IAAM,CACX0a,EAAS,KAAK,CAAC,CACjB,CAAA,CACD,EAAE,UAAW+8C,GAAQ,CACpB/8C,EAAS,KAAK+8C,EAAI,QAAQ,EAAIA,EAAI,MAAM,CAAC,CAAA,CAC1C,EACmB,WACrB,EAAE,KAAKhzC,GAAA,CAAsB,CAChC,CAGgB,SAAAwzC,GACdj4D,EACAI,EAKY,CACOwuD,GAAA5uD,EAAI,YAAa,MAAM,EAE1C,MAAMk4D,EAAwBnB,GAAW/2D,EAAI,EAAI,EAAE,UAChDpa,GAAiB,CAChB0jC,GAAe1jC,CAAC,EAChB2jC,GAAgB3jC,CAAC,EACjB,MAAM6C,EAAK7C,EAAE,aACT6C,IACFA,EAAG,cAAgB,OAEhBA,EAAA,QAAQ,aAAc,WAAW,GAMtC2X,GAAS,UAAUxa,CAAC,CACtB,CAAA,EAGIuyE,EAAmBrB,GAAM92D,CAAE,EAAE,UAAWpa,GAAiB,CAC7D0jC,GAAe1jC,CAAC,EAChBwa,GAAS,SAASxa,CAAC,CAAA,CACpB,EAEKwyE,EAAsBpB,GAASh3D,CAAE,EAAE,UAAWpa,GAAiB,CACnE0jC,GAAe1jC,CAAC,EAChBwa,GAAS,QAAQxa,CAAC,CAAA,CACnB,EAED,MAAO,IAAM,CACXsyE,EAAsB,YAAY,EAClCC,EAAiB,YAAY,EAC7BC,EAAoB,YAAY,CAAA,CAEpC,CAGgB,SAAAC,GACdr4D,EACAI,EAMY,CACZ,MAAMk4D,EAAwBpB,GAAWl3D,CAAE,EAAE,UAAWpa,GAAiB,CACvE0jC,GAAe1jC,CAAC,EAChBwa,GAAS,UAAUxa,CAAC,CAAA,CACrB,EAEK2yE,EAAuBnB,GAAUp3D,CAAE,EAAE,UAAWpa,GAAiB,CACrE0jC,GAAe1jC,CAAC,EAChB,MAAM6C,EAAK7C,EAAE,aACT6C,IACFA,EAAG,WAAa,QAElB2X,GAAS,SAASxa,CAAC,CAAA,CACpB,EAEK4yE,EAAwBrB,GAAWn3D,CAAE,EAAE,UAAWpa,GAAiB,CACvE0jC,GAAe1jC,CAAC,EAChBwa,GAAS,UAAUxa,CAAC,CAAA,CACrB,EAEK6yE,EAAmBxB,GAAMj3D,CAAE,EAAE,UAAWpa,GAAiB,CAC7D0jC,GAAe1jC,CAAC,EAChB,MAAM6C,EAAK7C,EAAE,aACb,GAAI,CAAC6C,EAAI,CACE2X,GAAA,SAASxa,EAAG,CAAA,CAAE,EACvB,MACF,CACAwa,GAAS,SAASxa,EAAG,CAAC,GAAG6C,EAAG,KAAK,CAAC,CAAA,CAqBnC,EAED,MAAO,IAAM,CACX6vE,EAAsB,YAAY,EAClCC,EAAqB,YAAY,EACjCC,EAAsB,YAAY,EAClCC,EAAiB,YAAY,CAAA,CAEjC,CAIgB,SAAAC,GAAW9tC,EAAO,GAAuB,CAGhD,OAAAxB,EAAU,OAAQ,SAAU,EAAI,EAAE,KAAKtB,GAAa8C,CAAI,CAAC,CAClE,CAEO,SAAS+tC,IAA2C,CACzD,OAAOvvC,EAAU,SAAU,mBAAoB,EAAI,EAAE,KACnDjJ,GAAI,IAEK,SAAS,kBAAoB,SACrC,EACDsE,GAAqB,CAAA,CAYzB,CAGO,SAASm0C,IAAqC,CAC5C,OAAAxvC,EAAwB,OAAQ,UAAW,EAAK,CACzD,CAIO,SAASyvC,IAAY,CACnB,MAAA,CACL,YAAa,OAAO,OAAO,MAC3B,aAAc,OAAO,OAAO,OAC5B,WAAY,OAAO,WACnB,YAAa,OAAO,YACpB,QAAS,OAAO,QAChB,QAAS,OAAO,QAChB,YAAa,OAAO,YACpB,YAAa,OAAO,WAAA,CAExB,CAKO,SAASC,IAAqB,CAC7B,MAAA94D,EAAK,SAAS,iBAAmB,SAAS,KAOzC,MAAA,CACL,GAAAA,EAGA,YAAaA,EAAG,YAChB,aAAcA,EAAG,aACjB,UAAWA,EAAG,UACd,WAAYA,EAAG,WAWf,YAAaA,EAAG,YAChB,aAAcA,EAAG,aACjB,UAAWA,EAAG,UACd,WAAYA,EAAG,WAGf,YAAaA,EAAG,YAChB,aAAcA,EAAG,aACjB,UAAWA,EAAG,UACd,WAAYA,EAAG,WAEf,aAAcA,EAAG,YAAA,CAErB,CAGO,SAAS+4D,IAAc,CAC5B,KAAM,CAAE,YAAAC,EAAa,aAAAC,EAAc,WAAAC,EAAY,UAAAC,CAAA,EAC7CL,KACK,MAAA,CACL,MAAO,OAAO,YAAcE,EAC5B,OAAQ,OAAO,aAAeC,EAC9B,EAAG,OAAO,aAAeC,EACzB,EAAG,OAAO,aAAeC,CAAA,CAE7B,CAGO,SAASC,IAAU,CACxB,KAAM,CAAE,YAAAC,EAAa,aAAAC,EAAc,WAAAJ,EAAY,UAAAC,CAAA,EAC7CL,KACK,MAAA,CACL,MAAOO,EACP,OAAQC,EACR,QAAS,OAAO,aAAeJ,EAC/B,QAAS,OAAO,aAAeC,CAAA,CAEnC,CAEO,SAASI,GAA6Bv5D,EAAiB,CAC5D,OAAOA,EAAG,uBACZ,CAEO,SAASw5D,GAA8B70D,EAAoB,CACzD,MAAA,CACL,EAAGA,EAAM,WACT,EAAGA,EAAM,UACT,MAAOA,EAAM,YACb,OAAQA,EAAM,YAAA,CAElB,CAEO,SAAS80D,GACdz5D,EACA,CACA,KAAM,CAAE,IAAAq5B,EAAK,KAAAC,EAAM,MAAAjD,EAAO,OAAAC,GAAWt2B,EAAG,wBAClC,CAAE,WAAAk5D,EAAY,UAAAC,CAAU,EAAIL,GAAmB,EAC9C,MAAA,CACL,EAAGx/B,EAAO4/B,EACV,EAAG7/B,EAAM8/B,EACT,MAAA9iC,EACA,OAAAC,CAAA,CAEJ,CAEO,SAASojC,GAA0B15D,EAAiB,CACzD,IAAI25D,EAA2B35D,EAC3B45D,EAAa,EACbC,EAAY,EAChB,KAAOF,IAAS,MACdC,GAAcD,EAAK,WACnBE,GAAaF,EAAK,UACdA,EAAK,wBAAwB,YAC/BA,EAAOA,EAAK,aAELA,EAAA,KAGJ,MAAA,CACL,EAAGC,EACH,EAAGC,EACH,MAAO75D,EAAG,YACV,OAAQA,EAAG,YAAA,CAEf,CAEO,SAAS85D,IAAoC,CAClD,KAAM,CAAE,aAAAb,EAAc,UAAAE,EAAW,aAAAG,GAAiBR,GAAmB,EAC/DxiC,EAASgjC,EAAeL,EAEvB,OADS3iC,GAAU,EAAI,EAAK6iC,EAAY7iC,EAAU,GAE3D,CAGO,SAASyjC,GAAa/5D,EAA0B,CACrD,MAAMg6D,EAAWjB,KACX3qB,EAAOmrB,GAA6Bv5D,CAAE,EAC5C,OACEouC,EAAK,QAAU,GACfA,EAAK,KAAO4rB,EAAS,QACrB5rB,EAAK,OAAS,GACdA,EAAK,MAAQ4rB,EAAS,KAE1B,CAoDO,SAASC,GAA2BrxD,EAAqB,CAC9D,GAAI,WAAYA,EAAI,CAClB,MAAMsB,EAAUtB,EAAmB,OAC7BwlC,EAAOmrB,GAA6B3wD,EAAG,MAAM,EAC5C,MAAA,CACL,EAAGsB,EAAO,EAAIkkC,EAAK,EACnB,EAAGlkC,EAAO,EAAIkkC,EAAK,CAAA,CAEvB,CACO,MAAA,CACL,EAAGxlC,EAAG,QACN,EAAGA,EAAG,OAAA,CAEV,CAEO,SAASsxD,GAAuBtxD,EAAqB,CAC1D,GAAI,WAAYA,EACd,OAAQA,EAAmB,OAE7B,GAAI,OAAOA,EAAG,OAAS,UAAY,OAAOA,EAAG,OAAS,SAC7C,MAAA,CACL,EAAGA,EAAG,MACN,EAAGA,EAAG,KAAA,EAGV,KAAM,CAAE,WAAAswD,EAAY,UAAAC,CAAU,EAAIL,GAAmB,EAC9C,MAAA,CACL,EAAGlwD,EAAG,QAAUswD,EAChB,EAAGtwD,EAAG,QAAUuwD,CAAA,CAEpB,CAEgB,SAAAzB,GACd9uD,EACA7B,EACA,CACA,MAAMjhB,EAAI,CACR,EAAG,EACH,EAAG,CAAA,EAEL,GAAKihB,EA4BE,CACC,MAAAq1C,EAAQ8d,GAAuBtxD,CAAE,EACjCxa,EAAIqrE,GAAyB1yD,CAAO,EACxCjhB,EAAA,EAAI+X,EAAMu+C,EAAM,EAAIhuD,EAAE,EAAG,EAAGA,EAAE,KAAK,EACnCtI,EAAA,EAAI+X,EAAMu+C,EAAM,EAAIhuD,EAAE,EAAG,EAAGA,EAAE,MAAM,CACxC,KAjCc,CAEZ,IAAI+rE,EAAe,EACfC,EAAe,EAEjB,GAAA,kBAAmBxxD,GACnBA,EAAG,eACHA,EAAG,QACHA,EAAG,eAAiBA,EAAG,OAGvB,CACM,MAAAyxD,EACJzxD,EAAG,cACH,sBAAsB,EAClB0xD,EAAc1xD,EAAG,OAAsB,sBAAsB,EACpDuxD,EAAAG,EAAW,KAAOD,EAAkB,KACpCD,EAAAE,EAAW,IAAMD,EAAkB,GACpD,CACA,GAAI,YAAazxD,EACb9iB,EAAA,EAAI8iB,EAAG,QAAUuxD,EACjBr0E,EAAA,EAAI8iB,EAAG,QAAUwxD,MACd,CACC,MAAAhe,EAAQ8d,GAAuBtxD,CAAE,EACjCxa,EAAIqrE,GAAyB7wD,EAAG,MAAoB,EACxD9iB,EAAA,EAAI+X,EAAMu+C,EAAM,EAAIhuD,EAAE,EAAI+rE,EAAc,EAAG/rE,EAAE,KAAK,EAClDtI,EAAA,EAAI+X,EAAMu+C,EAAM,EAAIhuD,EAAE,EAAIgsE,EAAc,EAAGhsE,EAAE,MAAM,CACvD,CAAA,CAOK,OAAAtI,CACT,CAQO,SAASy0E,GAAoB30E,EAAQ,CAC1C,IAAI40E,EAAQ,EACZ,OAAK50E,IAAiBA,EAAI,OAAO,OAC7BA,EAAE,YAEJ40E,EAAQ50E,EAAE,WAAa,IAGlB,OAAe,QAClB40E,EAAQ,CAACA,IAEF50E,EAAE,SAKH40E,EAAA,CAAC50E,EAAE,OAAS,GAEf40E,CACT,CAOO,SAASC,GAAe5pD,EAAmB,CAChD,GAAI,SAAS,eAAe,WAAW,cAAe,KAAK,EACzD,OAAOA,EAAM,OAEb,OAAQA,EAAM,OAAQ,CACpB,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACL,IAAK,GACI,MAAA,GACT,IAAK,GACL,IAAK,GACI,MAAA,GACT,IAAK,GACI,MAAA,EACX,CAEJ,CAIO,MAAM6pD,GAAgB,CAC3B,UAAW,EACX,IAAK,EACL,MAAO,IACP,OAAQ,GACR,IAAK,GACL,MAAO,GACP,OAAQ,GACR,KAAM,GACN,KAAM,GACN,GAAI,GACJ,KAAM,GACN,UAAW,GACX,QAAS,GACT,OAAQ,IACR,MAAO,GACP,MAAO,EACT,EAUaC,GAAM,CACjB,KAAM,IACN,OAAQ,IACR,KAAM,IACN,WAAY,IACZ,IAAK,IACL,MAAO,IACP,OAAQ,IACR,MAAO,IACP,MAAO,IACP,QAAS,IACT,IAAK,IACL,MAAO,IACP,OAAQ,IACR,MAAO,IACP,QAAS,IACT,UAAW,IACX,IAAK,IACL,KAAM,IACN,WAAY,IACZ,KAAM,IACN,SAAU,IACV,GAAI,IACJ,YAAa,IACb,MAAO,IACP,WAAY,IACZ,KAAM,IACN,OAAQ,IACR,OAAQ,IACR,UAAW,IACX,OAAQ,IAER,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,QAAS,IACT,SAAU,IACV,IAAK,IACL,UAAW,IACX,SAAU,IACV,QAAS,IACT,OAAQ,IAER,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,IAAK,IACL,IAAK,IACL,IAAK,IAEL,QAAS,IACT,KAAM,IAON,gBAAiB,GACnB,EAEO,SAASC,GAAWh1E,EAAkB,CAC3C,GAAIA,EAAE,IACJ,OAAOA,EAAE,IACX,GAAWA,EAAE,QACX,OAAOA,EAAE,QACX,GAAWA,EAAE,MACX,OAAOA,EAAE,KAEb,CAYA,SAASi1E,GACPhqD,EACAzQ,EACS,CACH,MAAA06D,EAAU16D,EAAQ,MAAQ,GAC1B26D,EAAW36D,EAAQ,OAAS,GAC5B46D,EAAS56D,EAAQ,KAAO,GAE3B,OAAA06D,IAAYjqD,EAAM,SAAWiqD,IAAYjqD,EAAM,UAChDkqD,IAAalqD,EAAM,UACnBmqD,IAAWnqD,EAAM,QACjBzQ,EAAQ,KAAK,IAAKrJ,GAAMA,EAAE,aAAa,EAAE,SAAS8Z,EAAM,IAAI,YAAa,CAAA,CAE7E,CAMO,SAASoqD,GAAe76D,EAA0C,CACvE,OAAOi3D,GAASj3D,EAAQ,QAAU,UAAY,MAAM,EAAE,KACpDgkB,GAAQx+B,GAAqBi1E,GAAkBj1E,EAAGwa,CAAO,CAAC,EAC1D+f,GAAKv6B,GAAqB,CACxBA,EAAE,gBAAgB,EAClBA,EAAE,eAAe,CACjB,CACD,CAAA,CAEL,CAGO,SAASs1E,GAAa96D,EAA0C,CACrE,OAAOk3D,GAAOl3D,EAAQ,QAAU,UAAY,MAAM,EAAE,KAClDgkB,GAAQx+B,GAAqBi1E,GAAkBj1E,EAAGwa,CAAO,CAAC,EAC1D+f,GAAKv6B,GAAqB,CACxBA,EAAE,gBAAgB,EAClBA,EAAE,eAAe,CACjB,CACD,CAAA,CAEL,CAGgB,SAAAu1E,GACdC,EAA+B,CAAE,KAAM,CAAC,GAAG,GAC3Cl7D,EAA0Be,GAAkB,KAC5C,CACO,OAAAg6D,GAAeG,CAAa,EAAE,KAEnC30C,GAAU,SACD,MAAMokC,GAAc3qD,CAAI,CAChC,CAAA,CAML,CAGsB,eAAAm7D,GACpBD,EAA+B,CAAE,KAAM,CAAC,GAAG,GAC3Cl7D,EAA0Be,GAAkB,KAC5C,CACA,OAAO+e,GAAem7C,GAAeC,EAAel7D,CAAI,CAAC,CAC3D,CCp9CsB,eAAAo7D,GAAUt7D,EAAgByX,EAA0B,CACjE,OAAA,IAAI,QAAqB5W,GAAY,CAC1C,MAAM6Z,EAAW,IAAI,eAAgB6gD,GAAmC,CAGhE,MAAAntB,EAAOpuC,EAAG,wBAChByX,EAAG22B,CAAI,EACPvtC,EAAQ,IAAM,CACZ6Z,EAAS,UAAU1a,CAAE,CAAA,CACtB,CAAA,CACF,EACD0a,EAAS,QAAQ1a,CAAE,CAAA,CACpB,CACH,CAGO,SAASw7D,GACdx7D,EAAiB,SAAS,gBAC1BI,EACqB,CACd,OAAA,IAAI0Y,GAAY4B,GAAa,CAE5B,MAAA0zB,EAAOpuC,EAAG,wBAChB,IAAIy7D,EAAQrtB,EAAK,EACbstB,EAAQttB,EAAK,EACbutB,EAAYvtB,EAAK,MACjBwtB,EAAaxtB,EAAK,OACtB1zB,EAAS,KAAK0zB,CAAI,EAClB,MAAMytB,EAAK,IAAI,eAAgBN,GAAmC,CAG1DntB,MAAAA,EAAOpuC,EAAG,yBAEdy7D,GAASrtB,EAAK,GACdstB,GAASttB,EAAK,GACdutB,GAAavtB,EAAK,OAClBwtB,GAAcxtB,EAAK,UAEnBqtB,EAAQrtB,EAAK,EACbstB,EAAQttB,EAAK,EACbutB,EAAYvtB,EAAK,MACjBwtB,EAAaxtB,EAAK,OAClB1zB,EAAS,KAAK0zB,CAAI,EACpB,CACD,EACE,OAAAytB,EAAA,QAAQ77D,EAAII,CAAO,EACf,IAAM,CACXy7D,EAAG,UAAU77D,CAAE,EACf67D,EAAG,WAAW,CAAA,CAChB,CACD,CACH,CAEO,SAASC,IAGb,CACM,OAAA1yC,EACL,OACA,sBAAuB,OAAS,oBAAsB,QAAA,EACtD,KACAjJ,GAAKv6B,IACI,CACL,MAAQA,EAAE,OAAkB,WAC5B,OAASA,EAAE,OAAkB,WAAA,EAEhC,EACD4gC,GAAU,CACR,MAAO,OAAO,WACd,OAAQ,OAAO,WAAA,CAChB,CAAA,CAEL,CCpDA,SAASqtC,IAAgB,CACvB,MAAMC,EAA8B,CAClC,EAAG,EACH,EAAG,EACH,GAAI,EACJ,GAAI,EACJ,QAAS,EACT,QAAS,EACT,OAAQ,EAAA,EAGJC,EAAgC,CACpC,EAAG,EACH,EAAG,EACH,GAAI,EACJ,GAAI,EACJ,QAAS,EACT,QAAS,EACT,OAAQ,EAAA,EAGH,MAAA,CACL,WAAYA,EAEZ,mBAAoB,SAClB3lE,EACA4lE,EACA,CACAF,EAAgB,EAAI1lE,EAAE,EACtB0lE,EAAgB,EAAI1lE,EAAE,EACtB0lE,EAAgB,OAAS,OAAOE,GAAU,UAAYA,EAAS,GAC1D,KAAA,qBAAqB5lE,EAAG4lE,CAAM,CACrC,EAEA,qBAAsB,CAAC5lE,EAA6B4lE,IAAqB,CACvE,MAAMyH,EAAQ1H,EAAkB,EAC1B2H,EAAQ3H,EAAkB,EAChCA,EAAkB,EAAI3lE,EAAE,EACxB2lE,EAAkB,EAAI3lE,EAAE,EACN2lE,EAAA,GAAKA,EAAkB,EAAI0H,EAC3B1H,EAAA,GAAKA,EAAkB,EAAI2H,EAC3B3H,EAAA,QAAUA,EAAkB,EAAID,EAAgB,EAChDC,EAAA,QAAUA,EAAkB,EAAID,EAAgB,EAClEC,EAAkB,OAAS,OAAOC,GAAU,UAAYA,EAAS,EACnE,CAAA,CAEJ,CAyEgB,SAAA+H,GAAmB/7D,EAAkB,SAAS,gBAAiB,CACvE,MAAAg8D,EAAK,IAAIlgB,GACTuZ,EAAS,IAAIhjD,GAAOrS,CAAE,EAC5B,IAAIi8D,EAA0B,CAAA,EAE9B,MAAMC,EAAMrI,KACNsI,EAAaD,EAAI,WAEjBE,EAAax2E,GAAkB,CAGhCo2E,EAAA,KAAK,YAAap2E,CAAC,CAAA,EAElBy2E,EAAWz2E,GAAkB,CAG9Bo2E,EAAA,KAAK,UAAWp2E,CAAC,CAAA,EAEhB02E,EAAa12E,GAAkB,CAC9Bu2E,EAAW,QACdD,EAAI,qBAAqBxE,GAA0B9xE,EAAGoa,CAAE,CAAC,EAExDg8D,EAAA,KAAK,YAAap2E,CAAC,CAAA,EAIlB22E,EAAa32E,GAAkB,CAChCo2E,EAAA,KAAK,YAAap2E,CAAC,CAAA,EAElB42E,EAAY52E,GAAkB,CAC/Bo2E,EAAA,KAAK,WAAYp2E,CAAC,CAAA,EAEjB62E,EAAc72E,GAAkB,CACjCo2E,EAAA,KAAK,aAAcp2E,CAAC,CAAA,EAEnB82E,EAAc92E,GAAkB,CACjCo2E,EAAA,KAAK,aAAcp2E,CAAC,CAAA,EAEnB+2E,EAAc/2E,GAAkB,CACjCo2E,EAAA,KAAK,aAAcp2E,CAAC,CAAA,EAEnBg3E,EAAoBh3E,GAAkB,CACvCo2E,EAAA,KAAK,mBAAoBp2E,CAAC,CAAA,EAEzBi3E,EAAcj3E,GAAkB,CAEjCo2E,EAAA,KAAK,aAAcp2E,CAAC,CAAA,EAEnBk3E,EAAoBl3E,GAAkB,CACvCo2E,EAAA,KAAK,mBAAoBp2E,CAAC,CAAA,EAGzBm3E,EAAcn3E,GAAkB,CAEjCo2E,EAAA,KAAK,aAAcp2E,CAAC,CAAA,EAEnBo3E,EAAYp3E,GAAkB,CAE/Bo2E,EAAA,KAAK,WAAYp2E,CAAC,CAAA,EAEjBq3E,EAAer3E,GAAkB,CAElCo2E,EAAA,KAAK,cAAep2E,CAAC,CAAA,EAEpBs3E,EAAat3E,GAAkB,CAE7B,MAAA6nB,GAAQ7nB,EAAE,eAAe,CAAC,EAC3Bu2E,EAAW,QACdD,EAAI,qBAAqBxE,GAA0BjqD,GAAOzN,CAAE,CAAC,EAE5Dg8D,EAAA,KAAK,YAAap2E,CAAC,CAAA,EAGlBu3E,EAAev3E,GAAoB,CAEpCo2E,EAAA,KAAK,cAAep2E,CAAC,CAAA,EAEpBw3E,EAAax3E,GAAoB,CAElCo2E,EAAA,KAAK,YAAap2E,CAAC,CAAA,EAElBy3E,EAAiBz3E,GAAoB,CAEtCo2E,EAAA,KAAK,gBAAiBp2E,CAAC,CAAA,EAEtB03E,EAAe13E,GAAoB,CACpCo2E,EAAA,KAAK,cAAep2E,CAAC,CAAA,EAGpB23E,EAAO33E,GAAmB,CAC3Bo2E,EAAA,KAAK,MAAOp2E,CAAC,CAAA,EAEZ43E,EAAY53E,GAAmB,CAChCo2E,EAAA,KAAK,WAAYp2E,CAAC,CAAA,EAEjB63E,EAAW73E,GAAmB,CAC/Bo2E,EAAA,KAAK,UAAWp2E,CAAC,CAAA,EAEhB83E,EAAU93E,GAAmB,CAC9Bo2E,EAAA,KAAK,SAAUp2E,CAAC,CAAA,EAEf+3E,GAAa/3E,GAAmB,CACjCo2E,EAAA,KAAK,YAAap2E,CAAC,CAAA,EAElBg4E,GAAWh4E,GAAmB,CAC/Bo2E,EAAA,KAAK,UAAWp2E,CAAC,CAAA,EAEhBi4E,GAAYj4E,GAAmB,CAChCo2E,EAAA,KAAK,WAAYp2E,CAAC,CAAA,EAEjBk4E,GAASl4E,GAAmB,CAC7Bo2E,EAAA,KAAK,QAASp2E,CAAC,CAAA,EAEdm4E,GAAWn4E,GAAmB,CAC/Bo2E,EAAA,KAAK,UAAWp2E,CAAC,CAAA,EAGhBo4E,GAASp4E,GAAmB,CAC7Bo2E,EAAA,KAAK,QAASp2E,CAAC,CAAA,EAEdq4E,EAAWr4E,GAAmB,CAC/Bo2E,EAAA,KAAK,UAAWp2E,CAAC,CAAA,EAEhBs4E,EAAYt4E,GAAmB,CAChCo2E,EAAA,KAAK,WAAYp2E,CAAC,CAAA,EAGjBu4E,EAASv4E,GAAmB,CAC7Bo2E,EAAA,KAAK,QAASp2E,CAAC,CAAA,EAGdw4E,EAAUx4E,GAAmB,CAC9Bo2E,EAAA,KAAK,SAAUp2E,CAAC,CAAA,EAGfy4E,GAASz4E,GAAmB,CAC7Bo2E,EAAA,KAAK,QAASp2E,CAAC,CAAA,EAEd04E,GAAa14E,GAAmB,CACjCo2E,EAAA,KAAK,YAAap2E,CAAC,CAAA,EAElB24E,GAAc34E,GAAmB,CAClCo2E,EAAA,KAAK,aAAcp2E,CAAC,CAAA,EAEnB44E,GAAW54E,GAAmB,CAC/Bo2E,EAAA,KAAK,UAAWp2E,CAAC,CAAA,EAEhB64E,GAAa74E,GAAmB,CACjCo2E,EAAA,KAAK,YAAap2E,CAAC,CAAA,EAGlBohC,GAAOphC,GAAmB,CAC3Bo2E,EAAA,KAAK,MAAOp2E,CAAC,CAAA,EAGZ84E,GAAc94E,GAAa,CAC3B,CAACA,EAAE,QAAUoa,GAAMpa,EAAE,QAAUoa,EAAG,SAASpa,EAAE,MAAc,GAG5Do2E,EAAA,KAAK,aAAcp2E,CAAC,CAAA,EAGnB+4E,GAAmB/4E,GAAuB,CAC3Co2E,EAAA,KAAK,kBAAmBp2E,CAAC,CAAA,EAExBg5E,GAAiBh5E,GAAuB,CACzCo2E,EAAA,KAAK,gBAAiBp2E,CAAC,CAAA,EAEtBi5E,GAAkBj5E,GAAsB,CACzCo2E,EAAA,KAAK,iBAAkBp2E,CAAC,CAAA,EAEvBk5E,GAAgBl5E,GAAsB,CACvCo2E,EAAA,KAAK,eAAgBp2E,CAAC,CAAA,EAG3B,IAAIm5E,GAAQ,CACV,GAAG/+D,EAAG,sBAAsB,EAC5B,MAAOA,EAAG,YACV,OAAQA,EAAG,YAAA,EAGN,MAAA,CACL,GAAAA,EACA,IAAI,MAAO,CACF,OAAA++D,EACT,EACA,WAAA5C,EACA,GAAAH,EACA,MAAO,gBAAkB,CACvBC,EAAQ,KAAKlzC,EAAiB/oB,EAAI,YAAao8D,CAAS,CAAC,EACzDH,EAAQ,KAAKlzC,EAAiB/oB,EAAI,UAAWq8D,CAAO,CAAC,EACrDJ,EAAQ,KAAKlzC,EAAiB/oB,EAAI,YAAas8D,CAAS,CAAC,EACzDL,EAAQ,KAAKlzC,EAAiB/oB,EAAI,YAAau8D,CAAS,CAAC,EACzDN,EAAQ,KAAKlzC,EAAiB/oB,EAAI,WAAYw8D,CAAQ,CAAC,EACvDP,EAAQ,KAAKlzC,EAAiB/oB,EAAI,aAAcy8D,CAAU,CAAC,EAC3DR,EAAQ,KAAKlzC,EAAiB/oB,EAAI,aAAc08D,CAAU,CAAC,EAC3DT,EAAQ,KAAKlzC,EAAiB/oB,EAAI,QAAS28D,CAAU,CAAC,EACtDV,EAAQ,KAAKlzC,EAAiB/oB,EAAI,WAAY48D,CAAgB,CAAC,EACvDX,EAAA,KACNlzC,EACE/oB,EACA,YAAa,SAAS,cAAc,KAAK,EACrC,QACA,SAAS,eAAiB,OAC1B,aACA,iBACJ68D,CACF,CAAA,EAEFZ,EAAQ,KAAKlzC,EAAiB/oB,EAAI,cAAe88D,CAAgB,CAAC,EAElEb,EAAQ,KAAKlzC,EAAiB/oB,EAAI,aAAc+8D,CAAU,CAAC,EAC3Dd,EAAQ,KAAKlzC,EAAiB/oB,EAAI,WAAYg9D,CAAQ,CAAC,EACvDf,EAAQ,KAAKlzC,EAAiB/oB,EAAI,cAAei9D,CAAW,CAAC,EAC7DhB,EAAQ,KAAKlzC,EAAiB/oB,EAAI,YAAak9D,CAAS,CAAC,EAEzDjB,EAAQ,KAAKlzC,EAAiB/oB,EAAI,cAAem9D,CAAW,CAAC,EAC7DlB,EAAQ,KAAKlzC,EAAiB/oB,EAAI,YAAao9D,CAAS,CAAC,EACzDnB,EAAQ,KAAKlzC,EAAiB/oB,EAAI,gBAAiBq9D,CAAa,CAAC,EACjEpB,EAAQ,KAAKlzC,EAAiB/oB,EAAI,cAAes9D,CAAW,CAAC,EAEtDjI,EAAA,GAAG,MAAOkI,CAAG,EACblI,EAAA,GAAG,WAAYmI,CAAQ,EACvBnI,EAAA,GAAG,UAAWoI,CAAO,EACrBpI,EAAA,GAAG,SAAUqI,CAAM,EACnBrI,EAAA,GAAG,YAAasI,EAAS,EACzBtI,EAAA,GAAG,UAAWuI,EAAO,EACrBvI,EAAA,GAAG,WAAYwI,EAAQ,EACvBxI,EAAA,GAAG,QAASyI,EAAK,EACjBzI,EAAA,GAAG,UAAW0I,EAAO,EAErB1I,EAAA,GAAG,QAAS2I,EAAK,EACjB3I,EAAA,GAAG,UAAW4I,CAAO,EACrB5I,EAAA,GAAG,WAAY6I,CAAQ,EAEvB7I,EAAA,GAAG,QAAS8I,CAAK,EAEjB9I,EAAA,GAAG,SAAU+I,CAAM,EAEnB/I,EAAA,GAAG,QAASgJ,EAAK,EACjBhJ,EAAA,GAAG,YAAaiJ,EAAS,EACzBjJ,EAAA,GAAG,aAAckJ,EAAU,EAC3BlJ,EAAA,GAAG,UAAWmJ,EAAO,EACrBnJ,EAAA,GAAG,YAAaoJ,EAAS,EAEzBpJ,EAAA,GAAG,MAAOruC,EAAG,EAGpBi1C,EAAQ,KAAKlzC,EAAiB,SAAU,cAAe21C,EAAU,CAAC,EAQlEzC,EAAQ,KAAKlzC,EAAiB/oB,EAAI,kBAAmB2+D,EAAe,CAAC,EACrE1C,EAAQ,KAAKlzC,EAAiB/oB,EAAI,gBAAiB4+D,EAAa,CAAC,EACjE3C,EAAQ,KAAKlzC,EAAiB/oB,EAAI,iBAAkB6+D,EAAc,CAAC,EACnE5C,EAAQ,KAAKlzC,EAAiB/oB,EAAI,eAAgB8+D,EAAY,CAAC,EAG/D,MAAM5gE,EAAM,MAAMo9D,GAAUt7D,EAAKouC,IAAS,CAChC2wB,GAAA3wB,GACL4tB,EAAA,KAAK,SAAU5tB,EAAI,CAAA,CACvB,EACD6tB,EAAQ,KAAK/9D,CAAG,EAGR+9D,EAAA,KACN+C,GAAiB,KAAM,CACrB,MAAQp5E,IAAM,CACZs2E,EAAI,mBAAmBxE,GAA0B9xE,GAAGoa,CAAE,EAAG,EAAI,CAC/D,EACA,KAAOpa,IAAM,CACXs2E,EAAI,qBAAqBxE,GAA0B9xE,GAAGoa,CAAE,CAAC,CAC3D,EACA,IAAMpa,IAAM,CACVs2E,EAAI,qBAAqBxE,GAA0B9xE,GAAGoa,CAAE,EAAG,EAAK,CAClE,CAAA,CACD,CAAA,CAEL,EACA,IAAK,IAAM,CACTg8D,EAAG,mBAAmB,EAEtBC,EAAQ,QAASn2E,GAAMA,EAAG,CAAA,EAC1Bm2E,EAAU,CAAA,EAEH5G,EAAA,IAAI,MAAOkI,CAAG,EACdlI,EAAA,IAAI,WAAYmI,CAAQ,EACxBnI,EAAA,IAAI,UAAWoI,CAAO,EACtBpI,EAAA,IAAI,SAAUqI,CAAM,EACpBrI,EAAA,IAAI,YAAasI,EAAS,EAC1BtI,EAAA,IAAI,UAAWuI,EAAO,EACtBvI,EAAA,IAAI,WAAYwI,EAAQ,EACxBxI,EAAA,IAAI,QAASyI,EAAK,EAClBzI,EAAA,IAAI,UAAW0I,EAAO,EAEtB1I,EAAA,IAAI,QAAS2I,EAAK,EAClB3I,EAAA,IAAI,UAAW4I,CAAO,EACtB5I,EAAA,IAAI,WAAY6I,CAAQ,EAExB7I,EAAA,IAAI,QAAS8I,CAAK,EAElB9I,EAAA,IAAI,SAAU+I,CAAM,EAEpB/I,EAAA,IAAI,QAASgJ,EAAK,EAClBhJ,EAAA,IAAI,YAAaiJ,EAAS,EAC1BjJ,EAAA,IAAI,aAAckJ,EAAU,EAC5BlJ,EAAA,IAAI,UAAWmJ,EAAO,EACtBnJ,EAAA,IAAI,YAAaoJ,EAAS,EAE1BpJ,EAAA,IAAI,MAAOruC,EAAG,CACvB,CAAA,CAEJ,CAQgB,SAAAg4C,GACdC,EACA7+D,EACY,CACL,OAAA8+D,GAA4BD,EAAY7+D,CAAO,CAMxD,CAEgB,SAAA8+D,GACdD,EACA7+D,EACY,CACZ,MAAM47D,EAAKiD,EAAW,GAEhBn9D,EAASlc,GAAoB,CAG9Bo2E,EAAA,GAAG,cAAemD,CAAI,EACtBnD,EAAA,GAAG,YAAa99D,CAAG,EACnB89D,EAAA,GAAG,gBAAiB99D,CAAG,EAC1BkC,GAAS,QAAQxa,CAAC,CAAA,EAGdsY,EAAOtY,GAAoB,CAG5Bo2E,EAAA,IAAI,cAAemD,CAAI,EACvBnD,EAAA,IAAI,YAAa99D,CAAG,EACpB89D,EAAA,IAAI,gBAAiB99D,CAAG,EAC3BkC,GAAS,MAAMxa,CAAC,CAAA,EAGZu5E,EAAQv5E,GAAoB,CAGhCwa,GAAS,OAAOxa,CAAC,CAAA,EAGhB,OAAAo2E,EAAA,GAAG,cAAel6D,CAAK,EAEnB,IAAMk6D,EAAG,IAAI,cAAel6D,CAAK,CAC1C,CAEgB,SAAAs9D,GACdH,EACA7+D,EACY,CACZ,MAAM47D,EAAKiD,EAAW,GAEhBn9D,EAASlc,GAAkB,CAGtB,SAAA,iBAAiB,YAAau5E,EAAM,EAAK,EACzC,SAAA,iBAAiB,UAAWjhE,EAAK,EAAK,EAC/CkC,GAAS,QAAQxa,CAAC,CAAA,EAGdsY,EAAOtY,GAAkB,CAGpB,SAAA,oBAAoB,YAAau5E,EAAM,EAAK,EAC5C,SAAA,oBAAoB,UAAWjhE,EAAK,EAAK,EAClDkC,GAAS,MAAMxa,CAAC,CAAA,EAGZu5E,EAAQv5E,GAAkB,CAG9Bwa,GAAS,OAAOxa,CAAC,CAAA,EAGhB,OAAAo2E,EAAA,GAAG,YAAal6D,CAAK,EAEjB,IAAMk6D,EAAG,IAAI,YAAal6D,CAAK,CACxC,CAEgB,SAAAu9D,GACdJ,EACA7+D,EACY,CACZ,MAAM47D,EAAKiD,EAAW,GAEhBn9D,EAASlc,GAAkB,CAG5Bo2E,EAAA,GAAG,YAAamD,CAAI,EACpBnD,EAAA,GAAG,WAAY99D,CAAG,EAClB89D,EAAA,GAAG,cAAe99D,CAAG,EAClB,MAAAuP,EAAQ7nB,EAAE,eAAe,CAAC,EAChCwa,GAAS,QAAQqN,CAAK,CAAA,EAGlBvP,EAAOtY,GAAkB,CAG1Bo2E,EAAA,IAAI,YAAamD,CAAI,EACrBnD,EAAA,IAAI,WAAY99D,CAAG,EACnB89D,EAAA,IAAI,cAAe99D,CAAG,EACnB,MAAAuP,EAAQ7nB,EAAE,eAAe,CAAC,EAChCwa,GAAS,MAAMqN,CAAK,CAAA,EAGhB0xD,EAAQv5E,GAAkB,CAGxB,MAAA6nB,EAAQ7nB,EAAE,eAAe,CAAC,EAChCwa,GAAS,OAAOqN,CAAK,CAAA,EAGpB,OAAAuuD,EAAA,GAAG,aAAcl6D,CAAK,EAElB,IAAMk6D,EAAG,IAAI,aAAcl6D,CAAK,CACzC,CC9jBO,IAAAw9D,GAAA,KAAQ,CACb,EACA,EACA,IACA,IAEA,YAAYl/D,EAAoB,CAC9B,KAAK,EAAIw7C,EAAax7C,GAAS,GAAK,EAAG,CAAC,EACxC,KAAK,EAAIw7C,EAAax7C,GAAS,GAAK,EAAG,CAAC,EACxC,KAAK,IAAMw7C,EAAax7C,GAAS,KAAO,EAAG,CAAC,EAC5C,KAAK,IAAMw7C,EAAax7C,GAAS,KAAO,EAAG,CAAC,CAC9C,CAGO,eAAqC,CAC1C,MAAO,CAAC,CAAC,IAAK,KAAK,IAAK,KAAK,GAAG,CAAC,CACnC,CAGO,gBAAgB80B,EAAsB,CAC3CA,EAAI,OAAO,KAAK,IAAK,KAAK,GAAG,CAC/B,CAEO,sBAAsBtvC,EAAI,EAAG,CAC5B,MAAAorD,EAAYnN,GAAM,KAAK,EAAG,KAAK,EAAG,KAAK,IAAK,KAAK,GAAG,EAC1D,GAAImN,IAAc,EAAG,CACnB,MAAMC,EAAO,KAAK,IAAI,KAAK,EAAG,KAAK,GAAG,EAChCC,EAAO,KAAK,IAAI,KAAK,EAAG,KAAK,GAAG,EAChCC,EAAO,KAAK,IAAI,KAAK,EAAG,KAAK,GAAG,EAChCC,EAAO,KAAK,IAAI,KAAK,EAAG,KAAK,GAAG,EAC/B,MAAA,CACL,EAAGH,EACH,EAAGC,EACH,MAAOC,EAAOF,EACd,OAAQG,EAAOF,CAAA,CACjB,KACK,CACC,MAAAjM,EAAM,KAAK,IAAI+L,CAAS,EACxBlM,EAAM,KAAK,IAAIkM,CAAS,EACxBK,EAAMvM,EAAM,KAAK,EAAIG,EAAM,KAAK,EAChCqM,EAAMxM,EAAM,KAAK,IAAMG,EAAM,KAAK,IAClCsM,EAAMzM,EAAM,KAAK,EAAIG,EAAM,KAAK,EAChCuM,EAAM1M,EAAM,KAAK,IAAMG,EAAM,KAAK,IACjC,MAAA,CACL,EAAG2W,EAAa,KAAK,IAAIvK,EAAKC,CAAG,EAAG1rD,CAAC,EACrC,EAAGg2D,EAAa,KAAK,IAAIrK,EAAKC,CAAG,EAAG5rD,CAAC,EACrC,MAAOg2D,EAAa,KAAK,IAAIvK,EAAKC,CAAG,EAAI,KAAK,IAAID,EAAKC,CAAG,EAAG1rD,CAAC,EAC9D,OAAQg2D,EAAa,KAAK,IAAIrK,EAAKC,CAAG,EAAI,KAAK,IAAID,EAAKC,CAAG,EAAG5rD,CAAC,CAAA,CAEnE,CACF,CAGO,YAAY,EAAqC,CAC/C,MAAA,CACL,EAAG,KAAK,EAAI,GAAK,KAAK,IAAM,KAAK,GACjC,EAAG,KAAK,EAAI,GAAK,KAAK,IAAM,KAAK,EAAA,CAErC,CAEO,aAAa6rD,EAA0C,CAC5D,MAAMhiB,EAAK,KAAK,EACVC,EAAK,KAAK,EACVgiB,EAAKD,EAAK,IACVE,EAAKF,EAAK,IACVG,EAAM,KAAK,IAAMniB,EACjBoiB,EAAMJ,EAAK,EAAIC,EACjB,GAAA,CAACE,GAAO,CAACC,EACJ,OAAA,KAEH,MAAAC,GAAM,KAAK,IAAMpiB,GAAMkiB,EACvBG,GAAMN,EAAK,EAAIE,GAAME,EAC3B,GAAKD,GAGL,GAAW,CAACC,EAEV,MAAO,CAAE,EAAGH,EAAI,EAAGI,GAAMJ,EAAKjiB,GAAMC,OAHpC,OAAO,CAAE,EAAGD,EAAI,EAAGsiB,GAAMtiB,EAAKiiB,GAAMC,GAKhC,MAAAK,GAAQ,CAACD,EAAKL,EAAKC,EAAKG,EAAKriB,EAAKC,IAAOoiB,EAAKC,GAC9CE,EAAOH,GAAME,EAAOviB,GAAMC,EAChC,OAAI,MAAMsiB,CAAI,GAAK,MAAMC,CAAI,EACpB,KAEF,CAAE,EAAGD,EAAM,EAAGC,CAAK,CAC5B,CACF,ECpFO,MAAMmH,WAAYznD,EAAE,CAClB,GACA,GACA,YACA,aACA,UAEP,YAAYyO,EAAqB,CAC/B,MAAMA,CAAO,EACb,KAAK,GAAKw7C,EAAax7C,EAAQ,GAAI,CAAC,EACpC,KAAK,GAAKw7C,EAAax7C,EAAQ,GAAI,CAAC,EACpC,KAAK,YACH,OAAOA,GAAS,aAAe,SAAWA,GAAS,YAAc,EACnE,KAAK,aACH,OAAOA,GAAS,cAAgB,SAAWA,GAAS,aAAe,EACrE,KAAK,UACH,OAAOA,GAAS,WAAa,SAAWA,GAAS,UAAY,CACjE,CAGO,eAAqC,CACnC,MAAA,CACL,CACE,IACA,KAAK,GACL,KAAK,GACL,KAAK,YACL,KAAK,aACL,KAAK,UACL,KAAK,IACL,KAAK,GACP,CAAA,CAEJ,CAEO,gBAAgB80B,EAA4B,CAC3C,KAAA,CAACid,EAAIC,EAAIC,EAAIC,EAAIC,EAAarE,EAAYC,CAAQ,EAAI,KAAK,QAC/D,KAAK,EACL,KAAK,EACL,KAAK,IACL,KAAK,IACL,KAAK,GACL,KAAK,GACL,KAAK,YACL,KAAK,aACL,KAAK,SAAA,EAEHjZ,EAAA,QACFid,EACAC,EACAC,EACAC,EACAC,EACArE,EACAC,EACA,CAAC,KAAK,SAAA,CAIV,CAEQ,QACN1e,EACAC,EACAC,EACAC,EACAyiB,EACAC,EACAE,EACA74C,EACAjS,EACA,CACM,MAAA0G,EAAKokD,EAAM,IAAO,KAAK,GACvBC,GAAOhjB,EAAKE,GAAM,EAClB+iB,GAAOhjB,EAAKE,GAAM,EAElB+iB,EAAO,KAAK,IAAIvkD,CAAC,EAAIqkD,EAAM,KAAK,IAAIrkD,CAAC,EAAIskD,EACzCE,EAAO,CAAC,KAAK,IAAIxkD,CAAC,EAAIqkD,EAAM,KAAK,IAAIrkD,CAAC,EAAIskD,EAE1CG,EACHF,EAAOA,GAASN,EAAKA,GAAOO,EAAOA,GAASN,EAAKA,GACpD,GAAIO,EAAqB,EAAG,CAKpB,MAAAC,EAAO,KAAK,KAAKD,CAAkB,EACzC,MAAAR,EAAKS,EAAOT,EACZC,EAAKQ,EAAOR,EAEN,IAAI,MACR,2DAA2DD,CAAE,IAAIC,CAAE,GAAA,CAEvE,CAEA,MAAMS,EAAK,KAAK,MACbV,EAAKA,EAAKC,EAAKA,EAAKD,EAAKA,EAAKO,EAAOA,EAAON,EAAKA,EAAKK,EAAOA,IAC3DN,EAAKA,EAAKO,EAAOA,EAAON,EAAKA,EAAKK,EAAOA,EAAA,EAGxCtrD,EAAIsS,GAAMjS,EAAK,EAAI,GACnBsrD,EAAQ3rD,EAAI0rD,EAAKV,EAAKO,EAAQN,EAC9BW,EAAQ5rD,EAAI0rD,EAAK,CAACT,EAAKK,EAAQN,EAE/Ba,GAASzjB,EAAKE,GAAM,EACpBwjB,GAASzjB,EAAKE,GAAM,EACpBuiB,EAAK,KAAK,IAAI/jD,CAAC,EAAI4kD,EAAO,KAAK,IAAI5kD,CAAC,EAAI6kD,EAAOC,EAC/Cd,EAAK,KAAK,IAAIhkD,CAAC,EAAI4kD,EAAO,KAAK,IAAI5kD,CAAC,EAAI6kD,EAAOE,EAE/CC,EAAc,CAACC,EAAYC,EAAY7K,GAAYC,MACtD2K,EAAK3K,IAAM4K,EAAK7K,GAAK,EAAI,IAC1B,KAAK,MACF4K,EAAK5K,GAAK6K,EAAK5K,KACb,KAAK,KAAK2K,EAAKA,EAAKC,EAAKA,CAAE,EAAI,KAAK,KAAK7K,GAAKA,GAAKC,GAAKA,EAAE,EAAA,EAE3D6K,EAAUH,EAAY,EAAG,EAAG3jB,EAAK0iB,EAAIziB,EAAK0iB,CAAE,EAAIhkD,EAChDolD,EAAcJ,EAAY3jB,EAAK0iB,EAAIziB,EAAK0iB,EAAIziB,EAAKwiB,EAAIviB,EAAKwiB,CAAE,EAE3D,MAAA,CAACD,EAAIC,EAAIC,EAAIC,EAAIlkD,EAAGmlD,EAASA,EAAUC,CAAW,CAC3D,CACF,CC1HO,MAAM+F,WAAwB5nD,EAAE,CAC9B,GACA,GACA,cAEP,YAAYyO,EAAiC,CAC3C,MAAMA,CAAO,EACb,KAAK,GAAKw7C,EAAax7C,EAAQ,GAAI,CAAC,EACpC,KAAK,GAAKw7C,EAAax7C,EAAQ,GAAI,CAAC,EACpC,KAAK,cACH,OAAOA,EAAQ,eAAiB,UAAYA,EAAQ,cAAgB,EACxE,CAIO,eAAqC,CAC1C,GAAI,KAAK,cAAe,CACtB,MAAMszC,EAAM,KAAK,GAAK,GAAK,KAAK,EAAI,KAAK,KAAO,EAC1CC,EAAM,KAAK,GAAK,GAAK,KAAK,EAAI,KAAK,KAAO,EACzC,MAAA,CAAC,CAAC,IAAKD,EAAKC,EAAK,KAAK,IAAK,KAAK,GAAG,CAAC,CAAA,KAEpC,OAAA,CAAC,CAAC,IAAK,KAAK,GAAI,KAAK,GAAI,KAAK,IAAK,KAAK,GAAG,CAAC,CAEvD,CAEO,gBAAgBze,EAAsB,CAC3C,GAAI,KAAK,cAAe,CACtB,MAAMwe,EAAM,KAAK,GAAK,GAAK,KAAK,EAAI,KAAK,KAAO,EAC1CC,EAAM,KAAK,GAAK,GAAK,KAAK,EAAI,KAAK,KAAO,EAChDze,EAAI,iBAAiBwe,EAAKC,EAAK,KAAK,IAAK,KAAK,GAAG,CAAA,MAE7Cze,EAAA,iBAAiB,KAAK,GAAI,KAAK,GAAI,KAAK,IAAK,KAAK,GAAG,CAE7D,CAEO,sBAAsBtvC,EAAI,EAAG,CAClC,MAAMguD,EAAO,CAAC,KAAK,EAAG,KAAK,GAAG,EACxBC,EAAO,CAAC,KAAK,EAAG,KAAK,GAAG,EAC1B,IAAAzjD,EAAGyE,EAAGjK,EAAG0K,EACb,QAAS7N,EAAI,EAAGA,EAAI,EAAG,EAAEA,EACvB2I,EACE3I,GAAK,EACD,KAAK,EAAI,EAAI,KAAK,GAAK,KAAK,IAC5B,KAAK,EAAI,EAAI,KAAK,GAAK,KAAK,IAClCoN,EAAIpN,GAAK,EAAI,GAAK,KAAK,EAAI,EAAI,KAAK,GAAK,GAAK,KAAK,EAAI,EAAI,KAAK,GAChEmD,EAAInD,GAAK,EAAI,KAAK,EAAI,KAAK,EACvB,KAAK,IAAI2I,CAAC,EAAI,QACZkF,EAAA,CAACT,GAAK,EAAIzE,GACV,EAAIkF,GAAKA,EAAI,GACd,CAAAs+C,EAAMC,CAAI,EAAEpsD,CAAC,EAAE,KAAK2I,EAAIkF,EAAIA,EAAIT,EAAIS,EAAI1K,CAAC,GAIhD,MAAM24C,EAAM,CAAE,EAAG,KAAK,IAAI,EAAG,GAAGqQ,CAAI,EAAG,EAAG,KAAK,IAAI,EAAG,GAAGC,CAAI,CAAE,EACzDzc,EAAM,CAAE,EAAG,KAAK,IAAI,EAAG,GAAGwc,CAAI,EAAG,EAAG,KAAK,IAAI,EAAG,GAAGC,CAAI,CAAE,EACxD,MAAA,CACL,EAAG+H,EAAarY,EAAI,EAAG39C,CAAC,EACxB,EAAGg2D,EAAarY,EAAI,EAAG39C,CAAC,EACxB,MAAOg2D,EAAaxkB,EAAI,EAAImM,EAAI,EAAG39C,CAAC,EACpC,OAAQg2D,EAAaxkB,EAAI,EAAImM,EAAI,EAAG39C,CAAC,CAAA,CAEzC,CAGO,YAAY,EAAqC,CAC/C,MAAA,CACL,GACG,EAAI,IAAM,EAAI,GAAK,KAAK,EACzB,GAAK,EAAI,GAAK,EAAI,KAAK,GACvB,EAAI,EAAI,KAAK,IACf,GACG,EAAI,IAAM,EAAI,GAAK,KAAK,EACzB,GAAK,EAAI,GAAK,EAAI,KAAK,GACvB,EAAI,EAAI,KAAK,GAAA,CAEnB,CACF,CAEA,MAAA25E,GAAehmB,GC7ER,MAAMxF,WAAoBpiD,EAAE,CAC1B,IACA,IACA,IACA,IAEP,YAAYyO,EAA6B,CACvC,MAAMA,CAAO,EACb,KAAK,IAAMw7C,EAAax7C,EAAQ,IAAK,CAAC,EACtC,KAAK,IAAMw7C,EAAax7C,EAAQ,IAAK,CAAC,EACtC,KAAK,IAAMw7C,EAAax7C,EAAQ,IAAK,CAAC,EACtC,KAAK,IAAMw7C,EAAax7C,EAAQ,IAAK,CAAC,CACxC,CAEO,OAAqB,CAC1B,OAAO,IAAI2zC,GAAY,CACrB,EAAG,KAAK,EACR,EAAG,KAAK,EACR,IAAK,KAAK,IACV,IAAK,KAAK,IACV,IAAK,KAAK,IACV,IAAK,KAAK,IACV,IAAK,KAAK,IACV,IAAK,KAAK,GAAA,CACX,CACH,CAIO,eAAqC,CAC1C,MAAO,CAAC,CAAC,IAAK,KAAK,IAAK,KAAK,IAAK,KAAK,IAAK,KAAK,IAAK,KAAK,IAAK,KAAK,GAAG,CAAC,CAC3E,CAEO,gBAAgB7e,EAAsB,CACvCA,EAAA,cACF,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,GAAA,CAET,CAEO,sBAAsBtvC,EAAI,EAAG,CA6ElC,IAAIwK,EACF,KAAK,IAAM,EAAI,KAAK,IAAM,KAAK,GAAK,KAAK,IAAM,EAAI,KAAK,IAAM,KAAK,KACjEyE,EAAI,GAAK,KAAK,IAAM,KAAK,GAAK,GAAK,KAAK,IAAM,KAAK,KACnDjK,EAAI,KAAK,EAAI,KAAK,IAClBopD,GAAM,CAACn/C,EAAI,KAAK,KAAKA,EAAIA,EAAI,EAAIzE,EAAIxF,CAAC,GAAK,EAAIwF,EAC/C+/B,GAAM,CAACt7B,EAAI,KAAK,KAAKA,EAAIA,EAAI,EAAIzE,EAAIxF,CAAC,GAAK,EAAIwF,EACnD,MAAMoF,EAAI,CAAC,KAAK,EAAG,KAAK,GAAG,EACrBE,EAAI,CAAC,KAAK,EAAG,KAAK,GAAG,EACvB,IAAAu+C,EACJ,MAAMC,EAAO,CAAA,EACb,KAAK,IAAIF,CAAE,EAAI,OAASA,EAAK,IAC7B,KAAK,IAAI7jB,CAAE,EAAI,OAASA,EAAK,IACzB6jB,GAAM,GAAKA,GAAM,IACbC,EAAA,KAAK,YAAYD,CAAE,EACvBt+C,EAAA,KAAKu+C,EAAI,CAAC,EACVz+C,EAAA,KAAKy+C,EAAI,CAAC,EACPC,EAAA,KAAK,CAAE,EAAGD,EAAI,EAAG,EAAGA,EAAI,EAAG,GAE9B9jB,GAAM,GAAKA,GAAM,IACb8jB,EAAA,KAAK,YAAY9jB,CAAE,EACvBz6B,EAAA,KAAKu+C,EAAI,CAAC,EACVz+C,EAAA,KAAKy+C,EAAI,CAAC,EACPC,EAAA,KAAK,CAAE,EAAGD,EAAI,EAAG,EAAGA,EAAI,EAAG,GAElC7jD,EAAI,KAAK,IAAM,EAAI,KAAK,IAAM,KAAK,GAAK,KAAK,IAAM,EAAI,KAAK,IAAM,KAAK,KACnEyE,EAAA,GAAK,KAAK,IAAM,KAAK,GAAK,GAAK,KAAK,IAAM,KAAK,KAC/CjK,EAAA,KAAK,EAAI,KAAK,IACZopD,GAAA,CAACn/C,EAAI,KAAK,KAAKA,EAAIA,EAAI,EAAIzE,EAAIxF,CAAC,GAAK,EAAIwF,EACzC+/B,GAAA,CAACt7B,EAAI,KAAK,KAAKA,EAAIA,EAAI,EAAIzE,EAAIxF,CAAC,GAAK,EAAIwF,EAC/C,KAAK,IAAI4jD,CAAE,EAAI,OAASA,EAAK,IAC7B,KAAK,IAAI7jB,CAAE,EAAI,OAASA,EAAK,IACzB6jB,GAAM,GAAKA,GAAM,IACbC,EAAA,KAAK,YAAYD,CAAE,EACvBt+C,EAAA,KAAKu+C,EAAI,CAAC,EACVz+C,EAAA,KAAKy+C,EAAI,CAAC,EACPC,EAAA,KAAK,CAAE,EAAGD,EAAI,EAAG,EAAGA,EAAI,EAAG,GAE9B9jB,GAAM,GAAKA,GAAM,IACb8jB,EAAA,KAAK,YAAY9jB,CAAE,EACvBz6B,EAAA,KAAKu+C,EAAI,CAAC,EACVz+C,EAAA,KAAKy+C,EAAI,CAAC,EACPC,EAAA,KAAK,CAAE,EAAGD,EAAI,EAAG,EAAGA,EAAI,EAAG,GAGlC,MAAME,EAAQ,CAAA,EACRlpD,EAAIipD,EAAK,OACf,QAASzsD,EAAI,EAAGA,EAAIwD,EAAGxD,IAAK,CAC1B,QAAS4E,EAAI5E,EAAI,EAAG4E,EAAIpB,EAAGoB,IACrB6nD,EAAKzsD,CAAC,EAAE,IAAMysD,EAAK7nD,CAAC,EAAE,GAAK6nD,EAAKzsD,CAAC,EAAE,IAAMysD,EAAK7nD,CAAC,EAAE,IAAGA,EAAI,EAAE5E,GAEhE0sD,EAAM,KAAK,CAAE,EAAGD,EAAKzsD,CAAC,EAAE,EAAG,EAAGysD,EAAKzsD,CAAC,EAAE,CAAG,CAAA,CAC3C,CACA,MAAM87C,EAAM,CAAE,EAAG,KAAK,IAAI,GAAG7tC,CAAC,EAAG,EAAG,KAAK,IAAI,GAAGF,CAAC,CAAE,EAC7C4hC,EAAM,CAAE,EAAG,KAAK,IAAI,GAAG1hC,CAAC,EAAG,EAAG,KAAK,IAAI,GAAGF,CAAC,CAAE,EAC5C,MAAA,CACL,EAAGomD,EAAarY,EAAI,EAAG39C,CAAC,EACxB,EAAGg2D,EAAarY,EAAI,EAAG39C,CAAC,EACxB,MAAOg2D,EAAaxkB,EAAI,EAAImM,EAAI,EAAG39C,CAAC,EACpC,OAAQg2D,EAAaxkB,EAAI,EAAImM,EAAI,EAAG39C,CAAC,EACrC,KAAMuuD,CAAA,CAEV,CAEA,OAAO,MACL,EACA1oC,EACAC,EACAukB,EACAmkB,EACQ,CACR,MAAMJ,EAAK,GAAKvoC,EAAK,EAAIC,EAAK,EAAIukB,EAAK,EAAImkB,EACrCjkB,EAAK,EAAI6jB,EAAK,EAAIvoC,EAAK,GAAKC,EAAK,EAAIukB,EAC3C,OAAO,EAAIE,EAAK,EAAI1kB,EAAK,EAAIC,CAC/B,CAOA,OAAO,OACL+jB,EACAC,EACAC,EACAC,EACAykB,EACAC,EACA5C,EACAC,EACAz5C,EAAI,EACI,CACRA,EAAI,KAAK,IAAI,EAAG,KAAK,IAAIA,EAAG,CAAC,CAAC,EAC9B,MAAMq8C,EAAKr8C,EAAI,EACTs8C,EAAU,CACd,OAAS,MAAQ,OAAS,MAAQ,OAAS,MAAQ,OAAS,MAC5D,OAAS,MAAQ,OAAS,KAAA,EAEtBC,EAAU,CACd,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAChE,MAAQ,MAAQ,KAAA,EAElB,IAAIC,EAAM,EAEV,QAASjtD,EAAI,EAAGA,EAAI,GAAIA,IAAK,CAC3B,MAAMR,EAAKstD,EAAKC,EAAQ/sD,CAAC,EAAI8sD,EACvBI,EAAQZ,GAAY,MAAM9sD,EAAIwoC,EAAIE,EAAI0kB,EAAI3C,CAAE,EAC5CkD,EAAQb,GAAY,MAAM9sD,EAAIyoC,EAAIE,EAAI0kB,EAAI3C,CAAE,EAC3C+C,GAAAD,EAAQhtD,CAAC,EAAI,KAAK,KAAKktD,EAAQA,EAAQC,EAAQA,CAAK,CAC7D,CACA,OAAOL,EAAKG,CACd,CAGO,OAAOx8C,EAAI,EAAW,CAC3B,OAAO67C,GAAY,OACjB,KAAK,EACL,KAAK,EACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL77C,CAAA,CAEJ,CAGO,wBAAwBmF,EAAgB,CACvC,MAAA/H,EAAI,KAAK,UAAU+H,CAAM,EACzB22C,EAAK,EAAI1+C,EACbw/C,EAAM,KAAK,IAAId,EAAI,CAAC,EACpBe,EAAM,KAAK,IAAIf,EAAI,CAAC,EACpB7jB,EAAK76B,EAAIA,EACT86B,EAAKD,EAAK76B,EACVI,EACEo/C,EAAM,KAAK,EACXC,EAAM,EAAIz/C,EAAI,KAAK,IACnB0+C,EAAK,EAAI1+C,EAAIA,EAAI,KAAK,IACtB86B,EAAK,KAAK,IACZ56B,EACEs/C,EAAM,KAAK,EACXC,EAAM,EAAIz/C,EAAI,KAAK,IACnB0+C,EAAK,EAAI1+C,EAAIA,EAAI,KAAK,IACtB86B,EAAK,KAAK,IACZ4kB,EACE,KAAK,EACL,EAAI1/C,GAAK,KAAK,IAAM,KAAK,GACzB66B,GAAM,KAAK,IAAM,EAAI,KAAK,IAAM,KAAK,GACvC8kB,EACE,KAAK,EACL,EAAI3/C,GAAK,KAAK,IAAM,KAAK,GACzB66B,GAAM,KAAK,IAAM,EAAI,KAAK,IAAM,KAAK,GACvC+kB,EACE,KAAK,IACL,EAAI5/C,GAAK,KAAK,IAAM,KAAK,KACzB66B,GAAM,KAAK,IAAM,EAAI,KAAK,IAAM,KAAK,KACvCglB,EACE,KAAK,IACL,EAAI7/C,GAAK,KAAK,IAAM,KAAK,KACzB66B,GAAM,KAAK,IAAM,EAAI,KAAK,IAAM,KAAK,KACvCgZ,EAAK6K,EAAK,KAAK,EAAI1+C,EAAI,KAAK,IAC5B8zC,EAAK4K,EAAK,KAAK,EAAI1+C,EAAI,KAAK,IAC5B68C,EAAK6B,EAAK,KAAK,IAAM1+C,EAAI,KAAK,IAC9B88C,EAAK4B,EAAK,KAAK,IAAM1+C,EAAI,KAAK,IAC9BgzC,EAAQ,GAAM,KAAK,MAAM0M,EAAKE,EAAID,EAAKE,CAAE,EAAI,IAAO,KAAK,GAEpD,MAAA,CACL,EAAAz/C,EACA,EAAAF,EACA,EAAG,CACD,EAAGw/C,EACH,EAAGC,CACL,EACA,EAAG,CACD,EAAGC,EACH,EAAGC,CACL,EACA,MAAO,CACL,EAAGhM,EACH,EAAGC,CACL,EACA,IAAK,CACH,EAAG+I,EACHC,CACF,EACA,MAAA9J,CAAA,CAEJ,CAGO,UAAUjrC,EAAwB,CACvC,MAAMoyB,EAAK,KAAK,EACVC,EAAK,KAAK,EACVC,EAAK,KAAK,IACVC,EAAK,KAAK,IACVykB,EAAK,KAAK,IACVC,EAAK,KAAK,IACV5C,EAAK,KAAK,IACVC,EAAK,KAAK,IAChB,GACEt0C,EAAS,GACT02C,GAAY,OAAOtkB,EAAIC,EAAIC,EAAIC,EAAIykB,EAAIC,EAAI5C,EAAIC,CAAE,EAAIt0C,EAE9C,MAAA,GAET,MAAM/H,EAAI,EACV,IAAI0e,EAAO1e,EAAI,EACX66B,EAAK76B,EAAI0e,EACT/oB,EAAI8oD,GAAY,OAAOtkB,EAAIC,EAAIC,EAAIC,EAAIykB,EAAIC,EAAI5C,EAAIC,EAAIxhB,CAAE,EAC7D,KAAO,KAAK,IAAIllC,EAAIoS,CAAM,EAAI,KACpB2W,GAAA,EACDmc,IAAAllC,EAAIoS,EAAS,EAAI,IAAM2W,EAC1B/oB,EAAA8oD,GAAY,OAAOtkB,EAAIC,EAAIC,EAAIC,EAAIykB,EAAIC,EAAI5C,EAAIC,EAAIxhB,CAAE,EAEpD,OAAAA,CACT,CAGO,YAAY,EAAqC,CAC/C,MAAA,CACL,EACE,KAAK,IAAI,EAAI,EAAG,CAAC,EAAI,KAAK,EAC1B,EAAI,KAAK,IAAI,EAAI,EAAG,CAAC,EAAI,EAAI,KAAK,IAClC,EAAI,KAAK,IAAI,EAAI,EAAG,CAAC,EAAI,KAAK,IAAI,EAAG,CAAC,EAAI,KAAK,IAC/C,KAAK,IAAI,EAAG,CAAC,EAAI,KAAK,IACxB,EACE,KAAK,IAAI,EAAI,EAAG,CAAC,EAAI,KAAK,EAC1B,EAAI,KAAK,IAAI,EAAI,EAAG,CAAC,EAAI,EAAI,KAAK,IAClC,EAAI,KAAK,IAAI,EAAI,EAAG,CAAC,EAAI,KAAK,IAAI,EAAG,CAAC,EAAI,KAAK,IAC/C,KAAK,IAAI,EAAG,CAAC,EAAI,KAAK,GAAA,CAE5B,CACF,CC3WA,MAAMilB,GAAM,KAAK,GAAK,EAOtB,SAASC,GAAkBhC,EAAYC,EAAY7K,EAAYC,EAAY,CACzE,MAAM4M,EAAOjC,EAAK3K,EAAK4K,EAAK7K,EAAK,EAAI,GAAK,EACtC,IAAAwL,EAAMZ,EAAK5K,EAAK6K,EAAK5K,EAMzB,OAAIuL,EAAM,IACFA,EAAA,GAEJA,EAAM,KACFA,EAAA,IAGDqB,EAAO,KAAK,KAAKrB,CAAG,CAC7B,CAOA,SAASsB,GACP9lB,EACAC,EACAC,EACAC,EACAj2B,EACAjS,EACA2qD,EACAC,EACAkD,EACAC,EACA,CAOA,MAAMC,EAAOD,GAAWhmB,EAAKE,GAAO,EAAK6lB,GAAW9lB,EAAKE,GAAO,EAC1D+lB,EAAO,CAACH,GAAW/lB,EAAKE,GAAO,EAAK8lB,GAAW/lB,EAAKE,GAAO,EAE3DgmB,EAAQvD,EAAKA,EACbwD,EAAQvD,EAAKA,EACbwD,EAASJ,EAAMA,EACfK,EAASJ,EAAMA,EAOrB,IAAIK,EAAWJ,EAAQC,EAAQD,EAAQG,EAASF,EAAQC,EAEpDE,EAAW,IAEFA,EAAA,GAGDA,GAAAJ,EAAQG,EAASF,EAAQC,EACrCE,EAAW,KAAK,KAAKA,CAAQ,GAAKr8C,IAAOjS,EAAK,GAAK,GAE7C,MAAAuuD,EAAQD,EAAW3D,EAAMC,EAAMqD,EAC/BO,EAAQF,EAAW,CAAC1D,EAAMD,EAAMqD,EAOhCvD,EAAKsD,EAAUQ,EAAMT,EAAUU,GAAOzmB,EAAKE,GAAM,EACjDyiB,EAAKoD,EAAUS,EAAMR,EAAUS,GAAOxmB,EAAKE,GAAM,EAMjDumB,GAAOT,EAAMO,GAAO5D,EACpB+D,GAAOT,EAAMO,GAAO5D,EACpB+D,GAAO,CAACX,EAAMO,GAAO5D,EACrBiE,GAAO,CAACX,EAAMO,GAAO5D,EAErB5K,EAAS2N,GAAkB,EAAG,EAAGc,EAAKC,CAAG,EAC/C,IAAI5C,EAAc6B,GAAkBc,EAAKC,EAAKC,EAAKC,CAAG,EAElD,OAAA5uD,IAAO,GAAK8rD,EAAc,IACbA,GAAA4B,IAEb1tD,IAAO,GAAK8rD,EAAc,IACbA,GAAA4B,IAGV,CAACjD,EAAIC,EAAI1K,EAAQ8L,CAAW,CACrC,CAMA,SAAS+C,GAAqB7O,EAAgB8L,EAAqB,CACjE,MAAMlL,EAAS,mBAAS,KAAK,IAAIkL,EAAc,CAAC,EAW1C/jB,EAAK,KAAK,IAAIiY,CAAM,EACpBhY,EAAK,KAAK,IAAIgY,CAAM,EACpB/X,EAAK,KAAK,IAAI+X,EAAS8L,CAAW,EAClC5jB,EAAK,KAAK,IAAI8X,EAAS8L,CAAW,EAEjC,MAAA,CACL/jB,EACAC,EACAD,EAAKC,EAAK4Y,EACV5Y,EAAKD,EAAK6Y,EACV3Y,EAAKC,EAAK0Y,EACV1Y,EAAKD,EAAK2Y,EACV3Y,EACAC,CAAA,CAEJ,CAagB,SAAA4mB,GACd/mB,EACAC,EACAC,EACAC,EACAj2B,EACAjS,EACA2qD,EACAC,EACAE,EACA,CACA,MAAMgD,EAAU,KAAK,IAAKhD,EAAM4C,GAAO,GAAG,EACpCK,EAAU,KAAK,IAAKjD,EAAM4C,GAAO,GAAG,EAIpCM,EAAOD,GAAWhmB,EAAKE,GAAO,EAAK6lB,GAAW9lB,EAAKE,GAAO,EAC1D+lB,EAAO,CAACH,GAAW/lB,EAAKE,GAAO,EAAK8lB,GAAW/lB,EAAKE,GAAO,EAE7D,GAAA8lB,IAAQ,GAAKC,IAAQ,EAEvB,MAAO,GAGL,GAAAtD,IAAO,GAAKC,IAAO,EAErB,MAAO,GAKJD,EAAA,KAAK,IAAIA,CAAE,EACXC,EAAA,KAAK,IAAIA,CAAE,EAEhB,MAAMmE,EAAUf,EAAMA,GAAQrD,EAAKA,GAAOsD,EAAMA,GAAQrD,EAAKA,GACzDmE,EAAS,IACLpE,GAAA,KAAK,KAAKoE,CAAM,EAChBnE,GAAA,KAAK,KAAKmE,CAAM,GAKlB,MAAAC,EAAKnB,GAAe9lB,EAAIC,EAAIC,EAAIC,EAAIj2B,EAAIjS,EAAI2qD,EAAIC,EAAIkD,EAASC,CAAO,EAEpEx2C,EAAS,CAAA,EACX,IAAAyoC,EAASgP,EAAG,CAAC,EACblD,EAAckD,EAAG,CAAC,EAKtB,MAAMC,EAAW,KAAK,IAAI,KAAK,KAAK,KAAK,IAAInD,CAAW,GAAK4B,GAAM,EAAE,EAAG,CAAC,EAY1D5B,GAAAmD,EAEf,QAASlvD,EAAI,EAAGA,EAAIkvD,EAAUlvD,IAC5BwX,EAAO,KAAKs3C,GAAqB7O,EAAQ8L,CAAW,CAAC,EAC3C9L,GAAA8L,EAML,OAAAv0C,EAAO,IAAK23C,GAAU,CAC3B,QAASnvD,EAAI,EAAGA,EAAImvD,EAAM,OAAQnvD,GAAK,EAAG,CACpC,IAAAiO,EAAIkhD,EAAMnvD,EAAI,CAAC,EACf+N,EAAIohD,EAAMnvD,EAAI,CAAC,EAGdiO,GAAA28C,EACA78C,GAAA88C,EAGC,MAAAuE,EAAKpB,EAAU//C,EAAI8/C,EAAUhgD,EAC7BshD,EAAKtB,EAAU9/C,EAAI+/C,EAAUjgD,EAGnCohD,EAAMnvD,EAAI,CAAC,EAAIovD,EAAKH,EAAG,CAAC,EACxBE,EAAMnvD,EAAI,CAAC,EAAIqvD,EAAKJ,EAAG,CAAC,CAC1B,CAEO,OAAAE,CAAA,CACR,CACH,CAwHO,SAASG,GACdtnB,EACAC,EACAyiB,EACAC,EACAziB,EACAC,EACA,CACO,MAAA,CACLH,EAAK,EAAK,EAAI,EAAK0iB,EACnBziB,EAAK,EAAK,EAAI,EAAK0iB,EACnBziB,EAAK,EAAK,EAAI,EAAKwiB,EACnBviB,EAAK,EAAK,EAAI,EAAKwiB,EACnBziB,EACAC,CAAA,CAEJ,CAEO,SAASonB,GAAIvnB,EAAYC,EAAYC,EAAYC,EAAY,CAClE,MAAO,CAACH,EAAIC,EAAIC,EAAIC,EAAID,EAAIC,CAAE,CAChC,CCnXO,MAAMqnB,GAAkD,CAC7D,EAAG,EACH,EAAG,EACH,EAAG,EACH,EAAG,EACH,EAAG,EACH,EAAG,EACH,EAAG,EACH,EAAG,EACH,EAAG,EACH,EAAG,CAEL,EAYgB,SAAAuoB,GAAiBroB,EAAU,OAA4B,CAM9D,OALI,SAAS,gBAAgB,KAClC,SACA,6BACAA,CAAA,CAGJ,CAEO,SAASsoB,IAAgC,CAEvC,OADMD,GAAiB,MAAM,CAEtC,CAEa,MAAAE,GAAoB1/D,GACxBA,aAAc,YAAcA,EAAG,UAAY,OAGpC,SAAA2/D,GACdpoB,EACA71C,EAAO,QACP,CACO,OAAA81C,GACLr3C,GAAUo3C,CAAsC,EAChD,GAAG71C,CAAI,MAAA,CAEX,CAcO,SAASk+D,GAAUphE,EAAa,CACrC,OAAI,OAAOA,GAAQ,SAAiB,IACpCA,EAAMA,EAAI,OAGR,0CAA0C,KAAKA,CAAG,GAAK,UAAU,KAAKA,CAAG,EAG7E,CAEO,SAASqhE,GAAe3yB,EAAmC,CACzD,OAAAA,EACJ,IAAKx6B,GAAS,CACT,GAAA,CAACA,EAAK,CAAC,EACF,MAAA,GAET,OAAQA,EAAK,CAAC,EAAE,YAAe,EAAA,CAC7B,IAAK,IACH,MAAO,GAAGA,EAAK,CAAC,CAAC,IAAIA,EAAK,CAAC,CAAC,IAAIA,EAAK,CAAC,CAAC,IAAIA,EAAK,CAAC,CAAC,IAAIA,EAAK,CAAC,CAAC,IAAIA,EAAK,CAAC,CAAC,IAAIA,EAAK,CAAC,CAAC,IAAIA,EAAK,CAAC,CAAC,GAChG,IAAK,IACI,MAAA,GAAGA,EAAK,CAAC,CAAC,IAAIA,EAAK,CAAC,CAAC,IAAIA,EAAK,CAAC,CAAC,IAAIA,EAAK,CAAC,CAAC,IAAIA,EAAK,CAAC,CAAC,IAAIA,EAAK,CAAC,CAAC,IAAIA,EAAK,CAAC,CAAC,GACrF,IAAK,IACL,IAAK,IACH,MAAO,GAAGA,EAAK,CAAC,CAAC,IAAIA,EAAK,CAAC,CAAC,IAAIA,EAAK,CAAC,CAAC,IAAIA,EAAK,CAAC,CAAC,IAAIA,EAAK,CAAC,CAAC,GAC/D,QACS,OAAAA,EAAK,CAAC,EAAI,IAAMA,EAAK,MAAM,CAAC,EAAE,KAAK,GAAG,CACjD,CAAA,CACD,EACA,KAAK,GAAG,CACb,CAGO,SAASotD,GAAa5yB,EAAmC,CAC9D,MAAMj6B,EAA4B,CAAA,EAC9B,OAAC2sD,GAAU1yB,CAAI,GAIdA,EAAA,QACH,mCACA,CAACwK,EAAmBvK,EAAiBwK,IAA+B,CAC9D,IAAAz3C,EAAOitC,EAAQ,cACb,MAAAloC,EAAiB2yC,GAAkBD,CAAU,EASnD,IANIz3C,GAAQ,KAAO+E,EAAK,OAASgyC,GAAwB/2C,CAAI,IACtD+S,EAAA,KAAK,CAACk6B,EAAS,GAAGloC,EAAK,OAAO,EAAGgyC,GAAwB/2C,CAAI,CAAC,CAAC,CAAC,EAC9DA,EAAA,IACGitC,EAAAA,GAAW,IAAM,IAAM,KAG5BloC,EAAK,QAAQ,CAClB,GAAIA,EAAK,OAASgyC,GAAwB/2C,CAAI,EAC5C,MAAM,IAAI,MACR,4BAA4Bw3C,CAAS,gBAAgBvK,CAAO,aAAaloC,CAAI,IAAA,EAG/EgO,EAAK,KAAK,CACRk6B,EACA,GAAGloC,EAAK,OAAO,EAAGgyC,GAAwB/2C,CAAI,CAAC,CAAA,CAChD,CAEL,CAEA,OAAIA,GAAQ,KACL+S,EAAA,KAAK,CAACk6B,CAAO,CAAC,EAGd,EACT,CAAA,EAEKl6B,CACT,CAGO,SAAS8sD,GACd7yB,EACqB,CACrB,IAAIpJ,EAAS,EACTC,EAAS,EACTruC,EAAI,EACJF,EAAI,EAED,OAAA03C,EAAK,IAAI,SAAU2K,EAAK,CACvB,MAAA33C,EAAO23C,EAAI,CAAC,EACZ1K,EAAUjtC,EAAK,cAGrB,GAAIA,GAAQitC,EAEV,OADA0K,EAAI,CAAC,EAAI1K,EACDjtC,EAAM,CACZ,IAAK,IACH23C,EAAI,CAAC,GAAKniD,EACVmiD,EAAI,CAAC,GAAKriD,EACV,MACF,IAAK,IACHqiD,EAAI,CAAC,GAAKriD,EACV,MACF,IAAK,IACHqiD,EAAI,CAAC,GAAKniD,EACV,MACF,QACE,QAASjO,EAAI,EAAGA,EAAIowD,EAAI,QACrBA,EAAIpwD,GAAG,GAAgBiO,EACvBmiD,EAAIpwD,GAAG,GAAgB+N,CAE9B,CAGF,OAAQ23C,EAAS,CACf,IAAK,IACCz3C,EAAAouC,EACAtuC,EAAAuuC,EACJ,MACF,IAAK,IACHruC,EAAImiD,EAAI,CAAC,EACT,MACF,IAAK,IACHriD,EAAIqiD,EAAI,CAAC,EACT,MACF,IAAK,IACCniD,EAAAouC,EAAS+T,EAAI,CAAC,EACdriD,EAAAuuC,EAAS8T,EAAI,CAAC,EAClB,MACF,QACMniD,EAAAmiD,EAAIA,EAAI,OAAS,CAAC,EAClBriD,EAAAqiD,EAAIA,EAAI,OAAS,CAAC,CAC1B,CAEO,OAAAA,CAAA,CACR,CACH,CAgEO,SAASmoB,GACd9yB,EACqB,CACrB,MAAMjuC,EAA8B,CAAA,EACpC,IAAI6kC,EAAS,EACTC,EAAS,EACTruC,EAAI,EACJF,EAAI,EACJsiD,EAAQ,EACRC,EAAQ,EACRC,EAAU,EACVC,EAAU,EAEVC,EAEJ,QAASzwD,EAAI,EAAGsvC,EAAMmW,EAAK,OAAQzlD,EAAIsvC,EAAKtvC,IAAK,CAC3C,IAAAowD,EAAM3K,EAAKzlD,CAAC,EACV,MAAA0lD,EAAU0K,EAAI,CAAC,EAErB,OAAQ1K,EAAS,CACf,IAAK,IACHrJ,EAAS+T,EAAI,CAAC,EACd9T,EAAS8T,EAAI,CAAC,EACd,MACF,IAAK,IACH,MAAMM,EAAS3B,GACb9gD,EACAF,EACAqiD,EAAI,CAAC,EACLA,EAAI,CAAC,EACLA,EAAI,CAAC,EACLA,EAAI,CAAC,EACLA,EAAI,CAAC,EACLA,EAAI,CAAC,EACLA,EAAI,CAAC,CAAA,EAaP,GAAI,CAACM,EAAO,OAAQ,SACbA,EAAA,QAAQ,CAACvB,EAAOvqD,IAAM,CAErB,KAAA,CAAC2H,EAAIN,EAAI+7B,EAAIC,EAAIC,EAAIC,EAAIykB,EAAIC,CAAE,EAAIsC,EAGzCiB,EAAM,CAAC,IAAKpoB,EAAIC,EAAIC,EAAIC,EAAIykB,EAAIC,CAAE,EAC9BjoD,EAAI8rD,EAAO,OAAS,GACtBl5C,EAAO,KAAK44C,CAAG,CACjB,CACD,EACD,MACF,IAAK,IAEH,IAAI1F,EAAKz8C,EACL08C,EAAK58C,GACL0iD,GAAe,KAAOA,GAAe,OACvC/F,GAAMA,EAAK6F,EACX5F,GAAMA,EAAK6F,GAEbJ,EAAM,CAAC,IAAK1F,EAAIC,EAAIyF,EAAI,CAAC,EAAGA,EAAI,CAAC,EAAGA,EAAI,CAAC,EAAGA,EAAI,CAAC,CAAC,EAClD,MACF,IAAK,IACCK,GAAe,KAAOA,GAAe,KACvCJ,EAAQpiD,EAAI,EAAIoiD,EAChBC,EAAQviD,EAAI,EAAIuiD,IAERD,EAAApiD,EACAqiD,EAAAviD,GAEVqiD,EAAM,CAAC,IAAK,GAAGd,GAAIrhD,EAAGF,EAAGsiD,EAAOC,EAAOF,EAAI,CAAC,EAAGA,EAAI,CAAC,CAAC,CAAC,EACtD,MACF,IAAK,IACHC,EAAQD,EAAI,CAAC,EACbE,EAAQF,EAAI,CAAC,EACbA,EAAM,CAAC,IAAK,GAAGd,GAAIrhD,EAAGF,EAAGqiD,EAAI,CAAC,EAAGA,EAAI,CAAC,EAAGA,EAAI,CAAC,EAAGA,EAAI,CAAC,CAAC,CAAC,EACxD,MACF,IAAK,IACHA,EAAM,CAAC,IAAK,GAAGb,GAAIthD,EAAGF,EAAGqiD,EAAI,CAAC,EAAGA,EAAI,CAAC,CAAC,CAAC,EACxC,MACF,IAAK,IACGA,EAAA,CAAC,IAAK,GAAGb,GAAIthD,EAAGF,EAAGqiD,EAAI,CAAC,EAAGriD,CAAC,CAAC,EACnC,MACF,IAAK,IACGqiD,EAAA,CAAC,IAAK,GAAGb,GAAIthD,EAAGF,EAAGE,EAAGmiD,EAAI,CAAC,CAAC,CAAC,EACnC,MACF,IAAK,IACGA,EAAA,CAAC,IAAK,GAAGb,GAAIthD,EAAGF,EAAGsuC,EAAQC,CAAM,CAAC,EACxC,KACJ,CAEcmU,EAAA/K,EACVz3C,EAAAmiD,EAAIA,EAAI,OAAS,CAAC,EAClBriD,EAAAqiD,EAAIA,EAAI,OAAS,CAAC,EAClBA,EAAI,OAAS,GACLG,EAAAH,EAAIA,EAAI,OAAS,CAAC,EAClBI,EAAAJ,EAAIA,EAAI,OAAS,CAAC,IAElBG,EAAAtiD,EACAuiD,EAAAziD,GAGZyJ,EAAO,KAAK44C,CAAG,CACjB,CAEO,OAAA54C,CACT,CCnYO,MAAMghE,EAAS,CACpB,MAEA,YAAYC,EAA4C,CACtD,KAAK,MAAQA,CACf,CAEA,aAAaC,EAA0B,CACrC,KAAK,MAAM,iBAAiB,iBAAmB,GAAM,CACrC,EAAE,MAOhB,CACD,EACD,KAAK,MAAM,UAAYA,CACzB,CAEA,kBAAmB,CACjB,UAAU,aACP,aAAa,CACZ,MAAO,EAAA,CACR,EACA,KAAMC,GAAW,CAChB,KAAK,aAAaA,CAAM,CAAA,CACzB,CACL,CAGA,aAAa,yBAA0B,CAC9B,OAAA,IAAI,QAAkBv/D,GAAY,CACjC,MAAA0uD,EAAS,SAAS,cAAc,QAAQ,EACxC2Q,EAAQ,SAAS,cAAc,OAAO,EACtC/7D,EAAS,SAAS,cAAc,QAAQ,EACxCk8D,EAAc,IAAI,YACxBA,EAAY,iBAAiB,aAAc,IAAMx/D,EAAQ,EAAI,CAAC,EACvDsD,EAAA,IAAM,IAAI,gBAAgBk8D,CAAW,EAC5Cl8D,EAAO,MAAQ,mBACf+7D,EAAM,OAAO/7D,CAAM,EACnBorD,EAAO,MAAQ,IACfA,EAAO,MAAM,QAAU,0CACd,SAAA,gBAAgB,OAAOA,CAAM,EAC/BA,EAAA,iBAAiB,KAAK,OAAO2Q,CAAK,EACzC,WAAW,IAAM,CACf3Q,EAAO,MAAQ,IAAA,CAChB,EACD,WAAW,IAAM,CACfA,EAAO,OAAO,EACd1uD,EAAQ,EAAK,GACZ,GAAI,CAAA,CACR,CACH,CAEA,OAAO,gCACLq/D,EACA,CACO,OAAA,IAAI,QAAkBr/D,GAAY,CAEpCq/D,EAAA,OACA,KAAK,IAAM,CACVA,EAAM,SAAW,GACjBr/D,EAAQ,EAAI,CAAA,CACb,EACA,MAAM,IAAM,CACXo/D,GAAS,qBAAqBC,CAAK,EACnCr/D,EAAQ,EAAK,CAAA,CACd,CAAA,CACJ,CACH,CAGA,OAAO,qBAAqBq/D,EAA4C,CACtE,SAASI,GAAc,CACrBJ,EAAM,SAAW,GACjBA,EAAM,KAAK,EACF,SAAA,oBAAoB,QAASI,CAAW,EACxC,SAAA,oBAAoB,WAAYA,CAAW,CACtD,CACS,SAAA,iBAAiB,QAASA,CAAW,EACrC,SAAA,iBAAiB,WAAYA,CAAW,CACnD,CACF,CC7DO,MAAMC,WAAiBzkB,EAA4B,CACxD,OAEA,IAAM,GACN,KAAO,OACP,QAAU,GACV,SAAW,GACX,UAAY,GACZ,OAAS,GACT,MAAQ,GACR,MAAgC,CAAA,EAEhC,YAAY0kB,EAAsB,CAC1B,QACN,KAAK,OAASA,CAChB,CAEA,OAAQ,CACA,MAAAnjE,EAASojE,GAAa,KAAK,MAAM,EACvC,GAAIpjE,IAAW,EAAG,CAChB,KAAK,KAAK,QAAQ,EAClB,MACF,CACI,IAAAwb,EACA6nD,EACA5oD,EAAO6oD,GAAO,KAAK,OAAQ,CAAC,EAChC,QAASl5E,EAAI,EAAGA,EAAI4V,EAAQ5V,IACnBoxB,EAAA6nD,EACGA,EAAA5oD,EACHA,EAAA6oD,GAAO,KAAK,OAAQl5E,CAAC,EAC5B,KAAK,KAAOi5E,EACRA,GACG,KAAA,KAAKA,EAAS5oD,EAAMe,CAAI,EAG7Bf,GACG,KAAA,KAAKA,EAAM,OAAW4oD,CAAO,EAEpC,KAAK,KAAK,QAAQ,CACpB,CAEA,KAAK91E,EAAW/E,EAAYuI,EAAY,CACjCxD,GAAA;AAAA,GAAQ,KAAK,KAAK,SAAS,EAC3B,KAAA,IAAIA,EAAG/E,EAAGuI,CAAC,CAClB,CAEA,IAAIxD,EAAW/E,EAAYuI,EAAY,CACrC,OAAQ,KAAK,KAAM,CACjB,IAAK,OACH,OAAQxD,EAAG,CACT,IAAK,IACL,IAAK,MACH,KAAK,SAAW,GAChB,KAAK,MAAQ,GACb,KAAK,KAAO,iBACZ,KAAK,IAAM,KAAK,IAAI,MAAM,EAAG,EAAE,EAC/B,KAAK,WAAa,KAAK,KAAK,OAAQ,KAAK,SAAS,EAClD,KAAK,KAAOA,EACZ,KAAK,UAAY,GACjB,MACF,IAAK,IACH,KAAK,KAAO,SACZ,KAAK,OAAS,GACd,MACF,QACE,KAAK,WAAaA,EAClB,KACJ,CACA,MAEF,IAAK,SACCg2E,GAAQ,aAAch2E,CAAC,GACpB,KAAA,WAAai2E,GAAY,KAAK,MAAM,EACzC,KAAK,KAAO,QACHj2E,GAAK,KACd,KAAK,WAAai2E,GAAY,KAAK,OAASj2E,CAAC,EAC7C,KAAK,KAAO,QAEZ,KAAK,QAAUA,EAEjB,MAEF,IAAK,UACH,GAAIwD,GAAK,KAAOxD,GAAK,KAAO/E,GAAK,IAAK,CACpC,KAAK,KAAO,gBACZ,KACF,CACA,GAAI,KAAK,WAAa,UAAY+E,GAAK,IAAK,CAC1C,KAAK,KAAO,QACZ,KAAK,UAAY,GACjB,KACF,CACI,GAAAA,GAAK,KAAOA,GAAK,MAAO,CACrB,KAAA,KAAK,UAAW,KAAK,SAAS,EACnC,KAAK,KAAO,OACZ,KAAK,UAAY,GACjB,KACF,CACA,KAAK,WAAaA,EAClB,MAEF,IAAK,QACH,GAAIwD,GAAK,KAAOxD,GAAK,KAAO/E,GAAK,IAAK,CACpC,KAAK,KAAO,YACZ,KAAK,UAAY,KAAK,UAAU,MAAM,EAAG,EAAE,EAC3C,KACF,CACI+E,GAAK,QACP,KAAK,KAAO,YACP,KAAA,IAAIA,EAAG/E,EAAGuI,CAAC,GAElB,KAAK,WAAaxD,EAClB,MAEF,IAAK,YACE,KAAA,KAAK,QAAS,KAAK,SAAS,EACjC,KAAK,UAAY,GACjB,KAAK,KAAO,OACZ,MAEF,IAAK,gBACC/E,GAAK,KAAO+E,GAAK,OACd,KAAA,KAAK,UAAW,EAAE,EACvB,KAAK,KAAO,QAEZ,KAAK,KAAO,UAEd,MAEF,IAAK,OACH,KAAK,KAAO,OACZ,MAEF,IAAK,UACCA,GAAK,KAAOwD,GAAK,KAAOvI,GAAK,KAC/B,KAAK,KAAO,cACZ,KAAK,UAAY,KAAK,UAAU,MAAM,EAAG,EAAE,GAClC+E,GAAK,MACT,KAAA,KAAK,UAAW,KAAK,SAAS,EAEnC,KAAK,WAAaA,EAEpB,MAEF,IAAK,cACE,KAAA,KAAK,UAAW,KAAK,SAAS,EACnC,KAAK,UAAY,GACjB,KAAK,KAAO,OACZ,MAEF,IAAK,cACC,GAAAA,GAAK,KAAO/E,GAAK,IAAK,CACxB,KAAK,KAAO,kBACZ,KACF,CACI+E,GAAK,OACF,KAAA,KAAK,UAAW,KAAK,SAAS,EAErC,KAAK,WAAaA,EAClB,MAEF,IAAK,kBACE,KAAA,KAAK,UAAW,KAAK,SAAS,EACnC,KAAK,UAAY,GACjB,KAAK,KAAO,OACZ,MAEF,IAAK,iBACH,GAAIA,GAAK,MAAO,CACT,KAAA,KAAK,OAAQ,GAAG,EACrB,KACF,CACA,GAAI,CAACg2E,GAAQ,aAAch2E,CAAC,EAAG,CAE7B,GADA,KAAK,KAAO,WACRA,GAAK,IAAK,CACZ,KAAK,KAAO,uBACZ,KAAA,SACSA,GAAK,IAAK,CACnB,KAAK,KAAO,UACZ,KAAK,UAAY,GACjB,KAAA,SACSA,GAAK,IAAK,CACnB,KAAK,KAAO,cACZ,KACF,CACK,KAAA,IAAIA,EAAG/E,EAAGuI,CAAC,CAClB,CACA,MAEF,IAAK,uBACEwyE,GAAQ,aAAch2E,CAAC,IAC1B,KAAK,KAAO,iBACZ,KAAK,QAAU,GACf,KAAK,SAAW,GACX,KAAA,IAAIA,EAAG/E,EAAGuI,CAAC,GAElB,MAEF,IAAK,iBACC,GAAAwyE,GAAQ,aAAch2E,CAAC,EACzB,KAAK,QAAU,KAAK,aAEpB,QAAQA,EAAG,CACT,IAAK,IACH,KAAK,KAAK,OAAQ,KAAK,SAAW,KAAK,SAAU,KAAK,KAAK,EAC3D,KAAK,KAAO,OACZ,MACF,QACG,CAAA,KAAK,UAAY,KAAK,UAAYA,GACnC,KACJ,CACF,MAEF,IAAK,WACC,GAAAg2E,GAAQ,aAAch2E,CAAC,EACzB,KAAK,QAAU,KAAK,SACpB,KAAK,SAAW,GAChB,KAAK,KAAO,iBAEZ,QAAQA,EAAG,CACT,IAAK,IACH,KAAK,KAAK,MAAO,KAAK,SAAU,KAAK,KAAK,EAC1C,KAAK,KAAO,OACZ,MACF,IAAK,IACH,KAAK,KAAO/E,EACZ,KAAK,KAAK,MAAO,KAAK,SAAU,KAAK,KAAK,EAC1C,KAAK,KAAK,OAAQ,KAAK,SAAU,KAAK,KAAK,EAC3C,KAAK,KAAO,OACZ,MACF,QACE,KAAK,UAAY+E,EACjB,KACJ,CACF,MAEF,IAAK,aACEg2E,GAAQ,aAAch2E,CAAC,IAC1B,KAAK,KAAO,OACZ,KAAK,SAAW,GACX,KAAA,IAAIA,EAAG/E,EAAGuI,CAAC,GAElB,MAEF,IAAK,OACH,GAAIwyE,GAAQ,aAAch2E,CAAC,GAAKA,GAAK,IAC9B,KAAA,MAAM,KAAK,QAAQ,EAAI,GAC5B,KAAK,KAAO,uBAEZ,QAAQA,EAAG,CACT,IAAK,IACC,KAAK,UAAY,KACZ,OAAA,KAAK,MAAM,GAAG,EACrB,KAAK,KAAK,MAAO,KAAK,QAAS,KAAK,KAAK,EACzC,KAAK,KAAK,OAAQ,KAAK,QAAS,KAAK,KAAK,IAE1C,KAAK,WAAa,KAAK,MAAM,KAAK,QAAQ,EAAI,IAC9C,KAAK,KAAK,MAAO,KAAK,QAAS,KAAK,KAAK,GAE3C,KAAK,KAAO,OACZ,MACF,QACE,KAAK,UAAYA,EACjB,KACJ,CACF,MAEF,IAAK,mBACH,GAAI,CAACg2E,GAAQ,aAAch2E,CAAC,EAAG,CAGzB,GAFJ,KAAK,KAAO,aACZ,KAAK,MAAQ,GACTA,GAAK,KAAOA,GAAK,IAAK,CACxB,KAAK,MAAQA,EACb,MACF,CACK,KAAA,IAAIA,EAAG/E,EAAGuI,CAAC,CAClB,CACA,MAEF,IAAK,aACH,GAAIwyE,GAAQ,aAAch2E,CAAC,GAAK,CAAC,KAAK,MACpC,KAAK,KAAO,qBACHA,GAAK,KAAO,CAAC,KAAK,MAC3B,KAAK,KAAK,MAAO,KAAK,QAAS,KAAK,KAAK,EACzC,KAAK,KAAO,WAEZ,QAAQA,EAAG,CACT,IAAK,IACL,IAAK,IACC,KAAK,OAASA,GAAKwD,GAAK,OAC1B,KAAK,KAAO,cAEd,MACF,QACO,KAAA,MAAM,KAAK,QAAQ,GAAKxD,EAC7B,KACJ,CACF,KACJ,CACF,CACF,CAKA,SAASi2E,GAAYh2B,EAAgB,CACnC,MAAMi2B,EAAmC,CACvC,GAAI,GACJ,MAAO,GACP,OAAQ,GACR,IAAK,GACL,MAAO,GACP,GAAI,GACJ,QAAS,GACT,KAAM,GACN,QAAS,GACT,QAAS,KACT,UAAW,KACX,QAAS,IACT,KAAM,IACN,OAAQ,IACR,IAAK,GAAA,EAEH,IAAArR,EACJ,OAAI5kB,EAAO,OAAO,CAAC,GAAK,IAClBA,EAAO,OAAO,CAAC,EAAE,YAAA,GAAiB,IACpC4kB,EAAO,SAAS5kB,EAAO,UAAU,CAAC,EAAG,EAAE,EAEvC4kB,EAAO,SAAS5kB,EAAO,UAAU,CAAC,EAAG,EAAE,EAGzC4kB,EAAOqR,EAASj2B,CAAM,EAEjB4kB,EAAO,OAAO,aAAaA,CAAI,EAAI,IAAM5kB,CAClD,CClWA,IAAIk2B,GAAY,kCAET,SAASC,GAASC,EAAK7gE,EAAU,GAAI,CAK1C,IAAI8gE,EAAS,EACTC,EAAS,EAMb,SAASC,EAAe5iE,EAAK,CAC3B,IAAI26C,EAAQ36C,EAAI,MAAM,KAAK,EACvB26C,IAAO+nB,GAAU/nB,EAAM,QAC3B,IAAI1xD,EAAI+W,EAAI,YAAY;AAAA,CAAI,EAC5B2iE,EAAS,CAAC15E,EAAI+W,EAAI,OAAS/W,EAAI05E,EAAS3iE,EAAI,MAC7C,CAMD,SAASomD,GAAW,CAClB,IAAI9iD,EAAQ,CAAE,KAAMo/D,EAAQ,OAAQC,CAAM,EAC1C,OAAO,SAAUx7D,EAAM,CACrB,OAAAA,EAAK,SAAW,IAAI07D,EAASv/D,CAAK,EAClCw/D,IACO37D,CACb,CACG,CAMD,SAAS07D,EAASv/D,EAAO,CACvB,KAAK,MAAQA,EACb,KAAK,IAAM,CAAE,KAAMo/D,EAAQ,OAAQC,GACnC,KAAK,OAAS/gE,EAAQ,MACvB,CAMDihE,EAAS,UAAU,QAAUJ,EAM7B,IAAIM,EAAa,CAAA,EAEjB,SAAS/sD,EAAMgtD,EAAK,CAClB,IAAI9rD,EAAM,IAAI,MACZtV,EAAQ,OAAS,IAAM8gE,EAAS,IAAMC,EAAS,KAAOK,CAC5D,EAOI,GANA9rD,EAAI,OAAS8rD,EACb9rD,EAAI,SAAWtV,EAAQ,OACvBsV,EAAI,KAAOwrD,EACXxrD,EAAI,OAASyrD,EACbzrD,EAAI,OAASurD,EAET7gE,EAAQ,OACVmhE,EAAW,KAAK7rD,CAAG,MAEnB,OAAMA,CAET,CAMD,SAAS40C,GAAa,CACpB,IAAImX,EAAYzO,IAEhB,MAAO,CACL,KAAM,aACN,WAAY,CACV,OAAQ5yD,EAAQ,OAChB,MAAOqhE,EACP,cAAeF,CAChB,CACP,CACG,CAMD,SAASG,GAAO,CACd,OAAOC,EAAM,OAAO,CACrB,CAMD,SAASC,GAAQ,CACf,OAAOD,EAAM,IAAI,CAClB,CAMD,SAAS3O,GAAQ,CACf,IAAIrtD,EACAqtD,EAAQ,CAAA,EAGZ,IAFAsO,IACAO,EAAS7O,CAAK,EACPiO,EAAI,QAAUA,EAAI,OAAO,CAAC,GAAK,MAAQt7D,EAAOm8D,MAAYC,GAAM,IACjEp8D,IAAS,KACXqtD,EAAM,KAAKrtD,CAAI,EACfk8D,EAAS7O,CAAK,GAGlB,OAAOA,CACR,CAMD,SAAS2O,EAAMK,EAAI,CACjB,IAAI9zE,EAAI8zE,EAAG,KAAKf,CAAG,EACnB,GAAK/yE,EACL,KAAIsQ,EAAMtQ,EAAE,CAAC,EACb,OAAAkzE,EAAe5iE,CAAG,EAClByiE,EAAMA,EAAI,MAAMziE,EAAI,MAAM,EACnBtQ,EACR,CAMD,SAASozE,GAAa,CACpBK,EAAM,MAAM,CACb,CAMD,SAASE,EAAS7O,EAAO,CACvB,IAAIpoE,EAEJ,IADAooE,EAAQA,GAAS,GACTpoE,EAAIq3E,KACNr3E,IAAM,IACRooE,EAAM,KAAKpoE,CAAC,EAGhB,OAAOooE,CACR,CAMD,SAASiP,GAAU,CACjB,IAAIrgC,EAAMgjB,IACV,GAAI,EAAOqc,EAAI,OAAO,CAAC,GAAnB,KAA+BA,EAAI,OAAO,CAAC,GAAnB,KAG5B,SADIx5E,EAAI,EAEAw5E,EAAI,OAAOx5E,CAAC,GAAlB,KACQw5E,EAAI,OAAOx5E,CAAC,GAAnB,KAA+Bw5E,EAAI,OAAOx5E,EAAI,CAAC,GAAvB,MAEzB,EAAEA,EAGJ,GAFAA,GAAK,EAEMw5E,EAAI,OAAOx5E,EAAI,CAAC,IAAvB,GACF,OAAO+sB,EAAM,wBAAwB,EAGvC,IAAIhW,EAAMyiE,EAAI,MAAM,EAAGx5E,EAAI,CAAC,EAC5B,OAAA05E,GAAU,EACVC,EAAe5iE,CAAG,EAClByiE,EAAMA,EAAI,MAAMx5E,CAAC,EACjB05E,GAAU,EAEHv/B,EAAI,CACT,KAAM,UACN,QAASpjC,CACf,CAAK,EACF,CAMD,SAASiuD,GAAW,CAClB,IAAIv+D,EAAIyzE,EAAM,UAAU,EACxB,GAAKzzE,EAGL,OAAOg0E,GAAKh0E,EAAE,CAAC,CAAC,EACb,QAAQ,+CAAgD,EAAE,EAC1D,QAAQ,mCAAoC,SAAUA,EAAG,CACxD,OAAOA,EAAE,QAAQ,KAAM,GAAQ,CACvC,CAAO,EACA,MAAM,oBAAoB,EAC1B,IAAI,SAAU7G,EAAG,CAChB,OAAOA,EAAE,QAAQ,UAAW,GAAG,CACvC,CAAO,CACJ,CAMD,SAAS86E,GAAc,CACrB,IAAIvgC,EAAMgjB,IAGNl+C,EAAOi7D,EAAM,wCAAwC,EACzD,GAAKj7D,EAIL,IAHAA,EAAOw7D,GAAKx7D,EAAK,CAAC,CAAC,EAGf,CAACi7D,EAAM,OAAO,EAAG,OAAOntD,EAAM,sBAAsB,EAGxD,IAAI1W,EAAM6jE,EAAM,sDAAsD,EAElEpiE,EAAMqiC,EAAI,CACZ,KAAM,cACN,SAAUl7B,EAAK,QAAQq6D,GAAW,EAAE,EACpC,MAAOjjE,EAAMokE,GAAKpkE,EAAI,CAAC,CAAC,EAAE,QAAQijE,GAAW,EAAE,EAAI,EACzD,CAAK,EAGD,OAAAY,EAAM,SAAS,EAERpiE,EACR,CAMD,SAAS6iE,GAAe,CACtB,IAAIC,EAAQ,CAAA,EAEZ,GAAI,CAACX,EAAM,EAAE,OAAOltD,EAAM,aAAa,EACvCqtD,EAASQ,CAAK,EAId,QADIC,EACIA,EAAOH,KACTG,IAAS,KACXD,EAAM,KAAKC,CAAI,EACfT,EAASQ,CAAK,GAIlB,OAAKT,EAAO,EACLS,EADc7tD,EAAM,aAAa,CAEzC,CAMD,SAAS+tD,GAAW,CAKlB,QAJIr0E,EACAs0E,EAAO,CAAA,EACP5gC,EAAMgjB,IAEF12D,EAAIyzE,EAAM,qCAAqC,GACrDa,EAAK,KAAKt0E,EAAE,CAAC,CAAC,EACdyzE,EAAM,OAAO,EAGf,GAAKa,EAAK,OAEV,OAAO5gC,EAAI,CACT,KAAM,WACN,OAAQ4gC,EACR,aAAcJ,EAAc,CAClC,CAAK,CACF,CAMD,SAASK,GAAc,CACrB,IAAI7gC,EAAMgjB,IACN12D,EAAIyzE,EAAM,yBAAyB,EAEvC,GAAKzzE,EACL,KAAIw0E,EAASx0E,EAAE,CAAC,EAIhB,GADAA,EAAIyzE,EAAM,cAAc,EACpB,CAACzzE,EAAG,OAAOsmB,EAAM,yBAAyB,EAC9C,IAAI9S,EAAOxT,EAAE,CAAC,EAEd,GAAI,CAACwzE,EAAM,EAAE,OAAOltD,EAAM,wBAAwB,EAIlD,QAFImW,GACAg4C,GAASd,IACLl3C,GAAQ43C,KACdI,GAAO,KAAKh4C,EAAK,EACjBg4C,GAASA,GAAO,OAAOd,EAAU,CAAA,EAGnC,OAAKD,EAAO,EAELhgC,EAAI,CACT,KAAM,YACN,KAAMlgC,EACN,OAAQghE,EACR,UAAWC,EACjB,CAAK,EAPoBnuD,EAAM,wBAAwB,EAQpD,CAMD,SAASouD,GAAa,CACpB,IAAIhhC,EAAMgjB,IACN12D,EAAIyzE,EAAM,qBAAqB,EAEnC,GAAKzzE,EACL,KAAI20E,EAAWX,GAAKh0E,EAAE,CAAC,CAAC,EAExB,GAAI,CAACwzE,EAAM,EAAE,OAAOltD,EAAM,uBAAuB,EAEjD,IAAI+3B,EAAQs1B,EAAQ,EAAG,OAAO7O,EAAO,CAAA,EAErC,OAAK4O,EAAO,EAELhgC,EAAI,CACT,KAAM,WACN,SAAUihC,EACV,MAAOt2B,CACb,CAAK,EANoB/3B,EAAM,uBAAuB,EAOnD,CAMD,SAASsuD,GAAS,CAChB,IAAIlhC,EAAMgjB,IACN12D,EAAIyzE,EAAM,WAAW,EAEzB,GAAKzzE,EAEL,IAAI,CAACwzE,EAAM,EAAE,OAAOltD,EAAM,mBAAmB,EAE7C,IAAI+3B,EAAQs1B,EAAQ,EAAG,OAAO7O,EAAO,CAAA,EAErC,OAAK4O,EAAO,EAELhgC,EAAI,CACT,KAAM,OACN,MAAO2K,CACb,CAAK,EALoB/3B,EAAM,mBAAmB,EAM/C,CAMD,SAASuuD,GAAU,CACjB,IAAInhC,EAAMgjB,IACN12D,EAAIyzE,EAAM,kBAAkB,EAEhC,GAAKzzE,EACL,KAAI80E,EAAQd,GAAKh0E,EAAE,CAAC,CAAC,EAErB,GAAI,CAACwzE,EAAM,EAAE,OAAOltD,EAAM,oBAAoB,EAE9C,IAAI+3B,EAAQs1B,EAAQ,EAAG,OAAO7O,EAAO,CAAA,EAErC,OAAK4O,EAAO,EAELhgC,EAAI,CACT,KAAM,QACN,MAAOohC,EACP,MAAOz2B,CACb,CAAK,EANoB/3B,EAAM,oBAAoB,EAOhD,CAMD,SAASyuD,GAAgB,CACvB,IAAIrhC,EAAMgjB,IACN12D,EAAIyzE,EAAM,yCAAyC,EACvD,GAAKzzE,EAEL,OAAO0zC,EAAI,CACT,KAAM,eACN,KAAMsgC,GAAKh0E,EAAE,CAAC,CAAC,EACf,MAAOg0E,GAAKh0E,EAAE,CAAC,CAAC,CACtB,CAAK,CACF,CAMD,SAASg1E,GAAS,CAChB,IAAIthC,EAAMgjB,IACN12D,EAAIyzE,EAAM,UAAU,EACxB,GAAKzzE,EAEL,KAAIi1E,EAAM1W,EAAU,GAAI,GAExB,GAAI,CAACiV,EAAM,EAAE,OAAOltD,EAAM,mBAAmB,EAK7C,QAJI6tD,EAAQR,IAGRS,GACIA,GAAOH,KACbE,EAAM,KAAKC,EAAI,EACfD,EAAQA,EAAM,OAAOR,EAAU,CAAA,EAGjC,OAAKD,EAAO,EAELhgC,EAAI,CACT,KAAM,OACN,UAAWuhC,EACX,aAAcd,CACpB,CAAK,EANoB7tD,EAAM,mBAAmB,EAO/C,CAMD,SAAS4uD,GAAa,CACpB,IAAIxhC,EAAMgjB,IACN12D,EAAIyzE,EAAM,8BAA8B,EAC5C,GAAKzzE,EAEL,KAAIw0E,EAASR,GAAKh0E,EAAE,CAAC,CAAC,EAClB8Y,EAAMk7D,GAAKh0E,EAAE,CAAC,CAAC,EAEnB,GAAI,CAACwzE,EAAM,EAAE,OAAOltD,EAAM,uBAAuB,EAEjD,IAAI+3B,GAAQs1B,EAAQ,EAAG,OAAO7O,EAAO,CAAA,EAErC,OAAK4O,EAAO,EAELhgC,EAAI,CACT,KAAM,WACN,SAAU56B,EACV,OAAQ07D,EACR,MAAOn2B,EACb,CAAK,EAPoB/3B,EAAM,uBAAuB,EAQnD,CAMD,SAAS6uD,GAAa,CACpB,IAAIzhC,EAAMgjB,IACN12D,EAAIyzE,EAAM,gBAAgB,EAC9B,GAAKzzE,EAEL,IAAI,CAACwzE,EAAM,EAAE,OAAOltD,EAAM,wBAAwB,EAKlD,QAJI6tD,EAAQR,IAGRS,EACIA,EAAOH,KACbE,EAAM,KAAKC,CAAI,EACfD,EAAQA,EAAM,OAAOR,EAAU,CAAA,EAGjC,OAAKD,EAAO,EAELhgC,EAAI,CACT,KAAM,YACN,aAAcygC,CACpB,CAAK,EALoB7tD,EAAM,wBAAwB,EAMpD,CAMD,IAAI8uD,GAAWC,GAAe,QAAQ,EAMlCC,GAAYD,GAAe,SAAS,EAMpCE,GAAcF,GAAe,WAAW,EAM5C,SAASA,GAAe7hE,EAAM,CAC5B,IAAIsgE,EAAK,IAAI,OAAO,KAAOtgE,EAAO,cAAc,EAChD,OAAO,UAAY,CACjB,IAAIkgC,EAAMgjB,IACN12D,EAAIyzE,EAAMK,CAAE,EAChB,GAAK9zE,EACL,KAAIqR,GAAM,CAAE,KAAMmC,GAClB,OAAAnC,GAAImC,CAAI,EAAIxT,EAAE,CAAC,EAAE,KAAI,EACd0zC,EAAIriC,EAAG,EACpB,CACG,CAMD,SAASuiE,IAAS,CAChB,GAAIb,EAAI,CAAC,GAAK,IAEd,OACEwB,EAAa,GACbM,EAAS,GACTE,EAAe,GACfL,EAAY,GACZU,GAAU,GACVE,GAAW,GACXC,GAAa,GACbL,EAAY,GACZF,EAAQ,GACRJ,EAAQ,GACRO,EAAY,CAEf,CAMD,SAAStB,IAAO,CACd,IAAIngC,EAAMgjB,IACNue,EAAM1W,IAEV,OAAK0W,GACLtB,IAEOjgC,EAAI,CACT,KAAM,OACN,UAAWuhC,EACX,aAAcf,EAAc,CAClC,CAAK,GAPgB5tD,EAAM,kBAAkB,CAQ1C,CAED,OAAOkvD,GAAUpZ,EAAU,CAAE,CAC/B,CAIA,SAAS4X,GAAK1jE,EAAK,CACjB,OAAOA,EAAMA,EAAI,QAAQ,aAAc,EAAE,EAAI,EAC/C,CAKA,SAASklE,GAAUlgE,EAAKoC,EAAQ,CAC9B,IAAI+9D,EAASngE,GAAO,OAAOA,EAAI,MAAS,SACpCogE,EAAcD,EAASngE,EAAMoC,EAEjC,QAAS7O,KAAKyM,EAAK,CACjB,IAAI2L,EAAQ3L,EAAIzM,CAAC,EACb,MAAM,QAAQoY,CAAK,EACrBA,EAAM,QAAQ,SAAU3D,EAAG,CACzBk4D,GAAUl4D,EAAGo4D,CAAW,CAChC,CAAO,EACQz0D,GAAS,OAAOA,GAAU,UACnCu0D,GAAUv0D,EAAOy0D,CAAW,CAE/B,CAED,OAAID,GACF,OAAO,eAAengE,EAAK,SAAU,CACnC,aAAc,GACd,SAAU,GACV,WAAY,GACZ,MAAOoC,GAAU,IACvB,CAAK,EAGIpC,CACT,QCtlBO,cAAuB+8D,EAAS,CACrC,YAAsC,CAAA,EACtC,MAAkC,CAAA,EAElC,OAAmC,CAAA,EAEnC,aAAyC,CAAA,EAEzC,KAA4B,CAAA,EAC5B,OAAiC,CAAA,EACjC,KAAO,GAEP,YAAYC,EAAsB,CAChC,MAAMA,CAAY,EAElB,KAAK,GAAG,MAAO,CAACqD,EAAiBzsB,IAAkC,CAGjE,OAFA,KAAK,KAAO,GACP,KAAA,YAAc,CAAE,KAAMysB,CAAQ,EAC3BA,EAAS,CACf,IAAK,IACE,KAAA,OAAO,KAAK,KAAK,WAAW,EACjC,KACJ,CACK,KAAA,aAAaA,EAASzsB,CAAK,CAAA,CACjC,EAEI,KAAA,GAAG,OAASnU,GAAiB,CAC5B,GAAA,KAAK,YAAY,MAAQ,QAAS,CAChC,GAAA,CACI,MAAA6gC,EAAY9C,GAAS/9B,CAAI,EACpB,UAAA8+B,KAAQ+B,EAAU,WAAW,MAC3B,UAAA3B,KAAeJ,EAAK,aAClB,UAAAtV,KAAYsV,EAAK,UAC1B,KAAK,aAAatV,CAAQ,EAAI,KAAK,aAAaA,CAAQ,GAAK,GACxD,KAAA,aAAaA,CAAQ,EAAE,KAC1B,GAAG0V,EAAY,QAAQ,IAAIA,EAAY,KAAK,EAAA,OAM1C,CACF,QAAA,MAAM,yBAA2Bl/B,CAAI,CAC/C,CACA,MACF,CACA,KAAK,MAAQA,CAAA,CACd,EAED,KAAK,GAAG,OAAQ,CAAC4gC,EAAiBzsB,IAAkC,CAE9D,IAAA,EAAI,KAAK,OAAO,OACpB,KAAO,KACL,GAAI,KAAK,OAAO,CAAC,GAAK,KAAK,YAAa,CACtC,IAAI2sB,EAAiB,GACjBC,EAAa,GACjB,UAAW79D,KAAO,KAAK,OAAO,CAAC,EACzBA,GAAO,YACQ49D,EAAA,KAAK,OAAO,CAAC,EAAE,UAEhC59D,GAAO,SACP,KAAK,aAAa,IAAM,KAAK,OAAO,CAAC,EAAEA,CAAG,CAAC,EAE3C69D,EACE,KAAK,aAAa,IAAM,KAAK,OAAO,CAAC,EAAE79D,CAAG,CAAC,EAAE,KAAK,GAAG,EACrD,IACA69D,EAEF79D,GAAO,MACP,KAAK,aAAa,IAAM,KAAK,OAAO,CAAC,EAAEA,CAAG,CAAC,EAE3C69D,EACE,KAAK,aAAa,IAAM,KAAK,OAAO,CAAC,EAAE79D,CAAG,CAAC,EAAE,KAAK,GAAG,EACrD,IACA69D,EACO,OAAO,KAAK,YAAY79D,CAAG,EAAM,MAE1C,KAAK,YAAYA,CAAG,EAAI,KAAK,OAAO,CAAC,EAAEA,CAAG,GAG1C,OAAO,KAAK,YAAY,UAAc,IACxC,KAAK,YAAY,UAAY49D,EAExB,KAAA,YAAY,WAAa,IAAMA,EAGlC,OAAO,KAAK,YAAY,MAAU,IACpC,KAAK,YAAY,MAAQC,EAEzB,KAAK,YAAY,MAAQA,EAAa,KAAK,YAAY,MAIvD,KAAK,YAAY,OACjB,KAAK,aAAa,IAAM,KAAK,YAAY,KAAK,EAE9C,KAAK,YAAY,MACf,KAAK,aAAa,IAAM,KAAK,YAAY,KAAK,EAAE,KAAK,GAAG,EACxD,IACA,KAAK,YAAY,MAEnB,KAAK,YAAY,IACjB,KAAK,aAAa,IAAM,KAAK,YAAY,EAAE,IAE3C,KAAK,YAAY,MACf,KAAK,aAAa,IAAM,KAAK,YAAY,EAAE,EAAE,KAAK,GAAG,EACrD,IACA,KAAK,YAAY,OAErBC,GACE,KAAK,YAAY,MACjB,KAAK,YACLC,EAAA,CAEJ,CAKF,OAFK,KAAA,aAAaL,EAASzsB,CAAK,EAExBysB,EAAS,CACf,IAAK,IACH,KAAK,OAAO,MACZ,MACF,IAAK,SACH,KAAK,WAAW,EAChB,MACF,IAAK,UACH,KAAK,WAAW,EAChB,MACF,IAAK,UACH,KAAK,WAAW,EAChB,MACF,IAAK,OACH,KAAK,WAAW,EAChB,MACF,IAAK,OACH,KAAK,WAAW,EAChB,MACF,IAAK,OACH,KAAK,WAAW,EAChB,MACF,IAAK,QACH,KAAK,WAAW,EAChB,MACF,IAAK,OACE,KAAA,YAAY,KAAO,KAAK,KAC7B,KAAK,YAAY,aAAa,EAC5B,KAAK,YAAY,aAAa,GAAK,QACrC,KAAK,WAAW,EAChB,KACJ,CAAA,CACD,EAEI,KAAA,GAAG,SAAU,IAAM,CACjB,KAAA,KAAK,SAAU,KAAK,KAAK,CAAA,CAC/B,CACH,CAEA,OAAQ,CACN,aAAM,MAAM,EACL,KAAK,KACd,CAEA,aAAaA,EAAiBzsB,EAA+B,CAC3D,IAAI/vD,EAAW,CAAA,EACXwkD,EAEJ,OAAQg4B,EAAS,CACf,IAAK,MACH,IAAIxtC,EAAQ,GACRC,EAAS,GACT,GAAA8gB,EAAM,OAASA,EAAM,OACvB/gB,EAAQ+gB,EAAM,MACd9gB,EAAS8gB,EAAM,eACNA,EAAM,QAAS,CACxB,MAAM+sB,EAAW/sB,EAAM,QAAQ,MAAM,OAAO,EACxC+sB,EAAS,QAAU,IACb9tC,EAAA,OAAO,WAAW8tC,EAAS,CAAC,CAAC,EAAI,WAAWA,EAAS,CAAC,CAAC,CAAC,EACvD7tC,EAAA,OAAO,WAAW6tC,EAAS,CAAC,CAAC,EAAI,WAAWA,EAAS,CAAC,CAAC,CAAC,EAErE,CACI9tC,GAASC,GACX,KAAK,MAAM,KAAK,CACd,KAAM,UACN,MAAAD,EACA,OAAAC,CAAA,CACD,EAEH,MACF,IAAK,OAED,OAAO8gB,EAAM,IAAM,UACnB,OAAOA,EAAM,IAAM,UACnB,OAAOA,EAAM,IAAM,UACnB,OAAOA,EAAM,IAAM,WAEd,KAAA,YAAY,KACf,IAAM,CAACA,EAAM,GAAIA,EAAM,GAAIA,EAAM,GAAIA,EAAM,EAAE,GAEjD,MACF,IAAK,OACHvL,EAAO,CAAA,EACHuL,EAAM,OACG6sB,GAAA7sB,EAAM,MAAOvL,CAAI,EAEzBA,EAAA,OAASA,EAAK,QAAUuL,EAAM,OACnCvL,EAAK,MAAQA,EAAK,YAAY,GAAKuL,EAAM,YAAY,EACrDvL,EAAK,QAAUA,EAAK,cAAc,GAAKuL,EAAM,cAAc,EACvD,EAAEvL,EAAK,OAAS,IAAI,QAAQ,GAAG,EAC5BA,EAAA,OAAS,WAAWA,EAAK,MAAM,EAEpCA,EAAK,OAAS,WAAWA,EAAK,MAAM,EAAI,IAE1CA,EAAK,OAAS,CAACA,EAAK,OAAO,QAAQ,CAAC,EAC/B,KAAA,KAAK,MAAM,KAAKA,CAAI,EACzB,MACF,IAAK,iBACE,KAAA,KAAK,OACR,IACAhI,GACE,WAAWuT,EAAM,EAAE,EACnB,WAAWA,EAAM,EAAE,EACnB,WAAWA,EAAM,EAAE,EACnB,WAAWA,EAAM,EAAE,EACnB,WAAWA,EAAM,EAAE,EAAI,IACvB,WAAWA,EAAM,EAAE,CAAA,GAErB,QAAQ,CAAC,EACP/vD,EAAA,CAAC,KAAK,KAAK,KAAK,EACX,QAAAI,EAAI,EAAGg7B,EAAK,KAAK,KAAK,MAAM,OAAQh7B,EAAIg7B,EAAIh7B,IAC5CokD,EAAA,KAAK,KAAK,MAAMpkD,CAAC,EACpBA,GAAKA,GAAKg7B,EAAK,EACjBp7B,EAAE,KAAKwkD,EAAK,MAAQ,IAAMA,EAAK,MAAM,EAEnCxkD,EAAA,KAAKwkD,EAAK,KAAK,EAGrB,KAAK,OAAO,KAAK,KAAK,EAAE,EAAIxkD,EAAE,KAAK,GAAG,EACjC,KAAA,MAAM,QAASqrB,GAAS,CACvBA,EAAK,QAAU,KAAK,KAAK,KAC3BA,EAAK,KAAO,KAAK,OAAO,KAAK,KAAK,EAAE,EACtC,CACD,EACD,MACF,IAAK,iBACHrrB,EAAI,CAAA,EACK,QAAAI,EAAI,EAAGg7B,EAAK,KAAK,KAAK,MAAM,OAAQh7B,EAAIg7B,EAAIh7B,IAC5CokD,EAAA,KAAK,KAAK,MAAMpkD,CAAC,EACpBA,GAAKA,GAAKg7B,EAAK,EACjBp7B,EAAE,KAAKwkD,EAAK,MAAQ,IAAMA,EAAK,MAAM,EAEnCxkD,EAAA,KAAKwkD,EAAK,KAAK,EAGrB,KAAK,OAAO,KAAK,KAAK,EAAE,EAAIxkD,EAAE,KAAK,GAAG,EACjC,KAAA,MAAM,QAASqrB,GAAS,CACvBA,EAAK,QAAU,KAAK,KAAK,KAC3BA,EAAK,KAAO,KAAK,OAAO,KAAK,KAAK,EAAE,EACtC,CACD,EACD,KACJ,CAEA,UAAWvM,KAAOixC,EAAO,CACjB,MAAAjoC,EAAQioC,EAAMjxC,CAAG,EA2BvB,GAzBI+9D,GAAkB,SAAS/9D,CAAG,IAC3B,KAAA,YAAYA,CAAG,EAAIgJ,GAEtBhJ,IAAQ,OACN,KAAK,YAAY,OAAS,mBAC5B,KAAK,KAAO,CACV,GAAIA,EACJ,MAAO,CAAC,CAAA,GAGR,KAAK,YAAY,OAAS,mBAC5B,KAAK,KAAO,CACV,GAAIA,EACJ,MAAO,CAAC,CAAA,IAIVA,IAAQ,SAEC89D,GAAA90D,EAAO,KAAK,YAAa+0D,EAAiB,EAEnD/9D,IAAQ,cACV,KAAK,YAAY,UACfgJ,GAAS,KAAK,YAAY,WAAa,MAEvChJ,IAAQ,OAAQ,CACZ,MAAAlH,EAASkQ,EAAM,MAAM,iBAAiB,EAC5C,GAAIlQ,EAAQ,CACJ,MAAAgd,EAAKhd,EAAO,CAAC,EACnB,KAAK,YAAY,OAASgd,EACtB,KAAK,OAAOA,CAAE,IAChB,KAAK,YAAY,KAAO,KAAK,OAAOA,CAAE,EAE1C,CACF,CACI9V,IAAQ,UACN,KAAK,YAAY,MAAQ,YACtB,KAAA,YAAY,KAAO,IAAMgJ,EAAQ,KAGtChJ,IAAQ,KACN,KAAK,YAAY,MAAQ,SAC3B,KAAK,YAAY,KAAOgJ,GAGxBhJ,IAAQ,cACN,KAAK,YAAY,MAAQ,UAC3B,KAAK,YAAY,IAAMgJ,EAG7B,CACF,CAEA,YAAa,CACN,KAAA,MAAM,KAAK,KAAK,WAAW,CAClC,CACF,EAIA,SAAS00B,GACPpU,EACAC,EACAC,EACAC,EACAykB,EACAC,EACQ,CACR,GAAI,OAAOD,EAAM,KAAe,OAAOC,EAAM,IAAa,CACxD,MAAM5+C,EAAI+5B,EAAKE,EACTn6B,EAAIk6B,EAAKE,EACX,MAAA,CAACl6B,GAAK,CAACF,EACF,GAED,IAAO,KAAK,MAAM,CAACA,EAAG,CAACE,CAAC,EAAI,IAAO,KAAK,GAAK,KAAO,GAAA,KAErD,QAAAmuC,GAAMpU,EAAIC,EAAI2kB,EAAIC,CAAE,EAAIzQ,GAAMlU,EAAIC,EAAIykB,EAAIC,CAAE,CAEvD,CAEA,SAAS2vB,GACPhD,EACAjhE,EACAkkE,EACA,CACA,MAAMlR,GAASiO,EAAM,IAAI,MAAM,GAAG,EAC5BiB,EAAO,aACb,QAASz6E,EAAI,EAAGg7B,EAAKuwC,EAAM,OAAQvrE,EAAIg7B,EAAIh7B,IAAK,CAC9C,MAAM28E,EAAOpR,EAAMvrE,CAAC,EAAE,MAAM,GAAG,EACzB0e,EAAMi+D,EAAK,CAAC,EAAE,QAAQlC,EAAM,EAAE,EAAE,QAAQ,SAAU,SAAUmC,EAAQ,CACjE,MAAA,IAAMA,EAAO,aAAY,CACjC,GACG,CAACH,GAAqBA,EAAkB,SAAS/9D,CAAG,KACtDnG,EAAGmG,CAAG,EAAIi+D,EAAK,CAAC,EAAE,QAAQlC,EAAM,EAAE,EAEtC,CACF,CAEA,MAAMgC,GAA8B,CAClC,KACA,QACA,UACA,QACA,SACA,IACA,IACA,KACA,KACA,IACA,KACA,KAEA,SACA,UACA,MAEA,OACA,eAEA,SACA,mBACA,iBACA,kBACA,oBACA,iBACA,eAEA,cAEA,OACA,cACA,YACA,aACA,cACA,gBACF,EClYO,MAAMprB,EAAM,CAEV,UAAY,EACZ,UAAY,EAGX,qBAAuB,GACvB,kBAAoB,GACpB,4BAA8B,GAC9B,yBAA2B,GAC3B,qBAAuB,GAExB,gBAAiC,CAAA,EAIxC,YAAYzqD,EAAkC,CACtC,MAAA4kB,EAAO,OAAO5kB,GAAK,SAAWyxE,GAAazxE,CAAC,EAAIA,GAAK,GAErD2qD,EAAQgnB,GAAiBD,GAAkB9sD,CAAI,CAAC,EACtD,QAAS,EAAI,EAAGgY,EAAQ+tB,EAAM,OAAQ,EAAI/tB,EAAO,IAAK,CAC9C,MAAAiiB,EAAO8L,EAAM,CAAC,EACJ9L,EAAK,CAAC,GACP,KACR,KAAA,UAAYA,EAAK,CAAC,EAClB,KAAA,UAAYA,EAAK,CAAC,GAElB,KAAA,YACH,IAAI6G,GAAY,CACd,EAAG,KAAK,UACR,EAAG,KAAK,UACR,IAAK7G,EAAK,CAAC,EACX,IAAKA,EAAK,CAAC,EACX,IAAKA,EAAK,CAAC,EACX,IAAKA,EAAK,CAAC,EACX,IAAKA,EAAK,CAAC,EACX,IAAKA,EAAK,CAAC,CAAA,CACZ,CAAA,CAGP,CACF,CAEQ,YAAYuE,EAAS,CAM3B,GALA,KAAK,qBAAuB,GAC5B,KAAK,kBAAoB,GACzB,KAAK,4BAA8B,GACnC,KAAK,yBAA2B,GAChC,KAAK,qBAAuB,GACxBA,aAAgB2H,GAAK,CACR5C,GACb,KAAK,UACL,KAAK,UACL/E,EAAK,IACLA,EAAK,IACLA,EAAK,aACLA,EAAK,UACLA,EAAK,GACLA,EAAK,GACLA,EAAK,WAAA,EAEA,QAASmF,GAAU,CAClB,KAAA,CAAC5iD,EAAIN,EAAI+7B,EAAIC,EAAIC,EAAIC,EAAIl6B,EAAG,CAAC,EAAIkhD,EACvC,KAAK,gBAAgB,KACnB,IAAI7C,GAAY,CACd,EAAG,KAAK,UACR,EAAG,KAAK,UACR,IAAKtkB,EACL,IAAKC,EACL,IAAKC,EACL,IAAKC,EACL,IAAKl6B,EACL,IAAK,CAAA,CACN,CAAA,EAEH,KAAK,UAAYA,EACjB,KAAK,UAAY,CAAA,CAClB,EACD,MACF,CACA,GAAI+7C,aAAgBsC,GAAa,CAC/B,KAAK,gBAAgB,KAAKtC,EAAK,MAAO,CAAA,EACtC,KAAK,UAAYA,EAAK,IACtB,KAAK,UAAYA,EAAK,IACtB,MACF,CACA,IAAIhiB,EAAIC,EAAIC,EAAIC,EAAIypB,EAAKC,EACrB7H,aAAgB8H,GAClB,CAAC9pB,EAAIC,EAAIC,EAAIC,EAAIypB,EAAKC,CAAG,EAAIvC,GAC3B,KAAK,UACL,KAAK,UACLtF,EAAK,GACLA,EAAK,GACLA,EAAK,IACLA,EAAK,GAAA,EAIP,CAAChiB,EAAIC,EAAIC,EAAIC,EAAIypB,EAAKC,CAAG,EAAItC,GAC3B,KAAK,UACL,KAAK,UACLvF,EAAK,IACLA,EAAK,GAAA,EAGT,KAAK,gBAAgB,KACnB,IAAIsC,GAAY,CACd,EAAG,KAAK,UACR,EAAG,KAAK,UACR,IAAKtkB,EACL,IAAKC,EACL,IAAKC,EACL,IAAKC,EACL,IAAAypB,EACA,IAAAC,CAAA,CACD,CAAA,EAEH,KAAK,UAAYD,EACjB,KAAK,UAAYC,CACnB,CAEA,OAAc,oBAAoBJ,EAAyB,CACnD,MAAA7qD,EAAI,IAAIyqD,GACR7tB,EAAQiuB,EAAO,OACrB,GAAIjuB,EAAO,CACP58B,EAAA,UAAY6qD,EAAO,CAAC,EACpB7qD,EAAA,UAAY6qD,EAAO,CAAC,EACtB,QAASniD,EAAI,EAAGA,EAAI,EAAIk0B,EAAOl0B,GAAK,EAChC1I,EAAA,YACA,IAAI0lD,GAAY,CACd,EAAG1lD,EAAE,UACL,EAAGA,EAAE,UACL,IAAK6qD,EAAOniD,CAAC,EACb,IAAKmiD,EAAOniD,EAAI,CAAC,EACjB,IAAKmiD,EAAOniD,EAAI,CAAC,EACjB,IAAKmiD,EAAOniD,EAAI,CAAC,EACjB,IAAKmiD,EAAOniD,EAAI,CAAC,EACjB,IAAKmiD,EAAOniD,EAAI,CAAC,CAAA,CAClB,CAAA,CAGP,CACO,OAAA1I,CACT,CAEA,OAAc,UAAU8qD,EAAmB,CACnC,MAAA9qD,EAAI,IAAIyqD,GACR7tB,EAAQkuB,EAAM,OACpB,GAAIluB,EAAO,CACP58B,EAAA,UAAY8qD,EAAM,CAAC,EAAE,EACrB9qD,EAAA,UAAY8qD,EAAM,CAAC,EAAE,EACvB,QAAS,EAAI,EAAG,EAAIluB,EAAO,IACvB58B,EAAA,YAAY8qD,EAAM,CAAC,CAAC,CAE1B,CACO,OAAA9qD,CACT,CAEO,OAAe,CACb,OAAAyqD,GAAM,UAAU,KAAK,eAAe,CAC7C,CAGQ,kBAAyC,CAAA,EAC1C,eAAqC,CAC1C,GAAI,KAAK,qBAAsB,CAC7B,MAAM7lC,EAA4B,CAAA,EACzB,QAAAxrB,EAAI,EAAGwjC,EAAQ,KAAK,gBAAgB,OAAQxjC,EAAIwjC,EAAOxjC,IAAK,CAC7D,MAAAgqD,EAAO,KAAK,gBAAgBhqD,CAAC,EAC/BA,GAAK,GACPwrB,EAAK,KAAK,CAAC,IAAKw+B,EAAK,EAAGA,EAAK,CAAC,CAAC,EAEjCx+B,EAAK,KAAK,GAAGw+B,EAAK,cAAe,CAAA,CACnC,CAEA,KAAK,kBAAoBx+B,EACzB,KAAK,qBAAuB,EAC9B,CACA,OAAO,KAAK,iBACd,CAGQ,eAAiB,GAClB,YAAqB,CAC1B,OAAI,KAAK,oBACP,KAAK,eAAiB4sD,GAAe,KAAK,cAAe,CAAA,EACzD,KAAK,kBAAoB,IAEpB,KAAK,cACd,CAGO,gBAAgB3qC,EAAsB,CAC3CA,EAAI,UAAU,EACL,QAAAztC,EAAI,EAAGwjC,EAAQ,KAAK,gBAAgB,OAAQxjC,EAAIwjC,EAAOxjC,IAAK,CAC7D,MAAAgqD,EAAO,KAAK,gBAAgBhqD,CAAC,EAC/BA,GAAK,GACPytC,EAAI,OAAOuc,EAAK,EAAGA,EAAK,CAAC,EAE3BA,EAAK,gBAAgBvc,CAAG,CAC1B,CAEF,CAIQ,yBAA2B,CACjC,EAAG,EACH,EAAG,EACH,MAAO,EACP,OAAQ,CAAA,EAEH,sBAAsB+e,EAAM,EAAG,CACpC,GAAI,KAAK,4BAA6B,CACpC,MAAMr5C,EAAc,CAAA,EACdrS,EAAc,CAAA,EAMpB,GALK,KAAA,gBAAgB,QAAS0C,GAAM,CAC5B,MAAAmjD,EAAOnjD,EAAE,sBAAsBgpD,CAAG,EACxCr5C,EAAE,KAAKwzC,EAAK,EAAGA,EAAK,EAAIA,EAAK,KAAK,EAClC7lD,EAAE,KAAK6lD,EAAK,EAAGA,EAAK,EAAIA,EAAK,MAAM,CAAA,CACpC,EACGxzC,EAAE,QAAU,GAAKrS,EAAE,QAAU,EAC1B,KAAA,yBAA2B,CAAE,EAAG,EAAG,EAAG,EAAG,MAAO,EAAG,OAAQ,CAAE,MAC7D,CACL,MAAMoxD,EAAO,KAAK,IAAI,GAAG/+C,CAAC,EACpBg/C,EAAO,KAAK,IAAI,GAAGrxD,CAAC,EACpBsxD,EAAO,KAAK,IAAI,GAAGj/C,CAAC,EACpBk/C,EAAO,KAAK,IAAI,GAAGvxD,CAAC,EAC1B,KAAK,yBAA2B,CAC9B,EAAGqzD,EAAajC,EAAM1F,CAAG,EACzB,EAAG2H,EAAahC,EAAM3F,CAAG,EACzB,MAAO2H,EAAa/B,EAAOF,EAAM1F,CAAG,EACpC,OAAQ2H,EAAa9B,EAAOF,EAAM3F,CAAG,CAAA,CAEzC,CACA,KAAK,4BAA8B,EACrC,CACA,OAAO,KAAK,wBACd,CAGO,4BAA4BA,EAAM,EAAG,CACpC,MAAA7F,EAAO,KAAK,sBAAsB6F,CAAG,EACpC,MAAA,CACL,EAAG2H,EAAaxN,EAAK,EAAIA,EAAK,MAAQ,GAAK6F,CAAG,EAC9C,EAAG2H,EAAaxN,EAAK,EAAIA,EAAK,OAAS,GAAK6F,CAAG,CAAA,CAEnD,CAGO,UAAU7zC,EASP,CACJ,IAAAlS,EAgBA,OAfAkS,EAAQ,EACVlS,EAAIkS,EAAQ,GAIZlS,EAAI,IAAI6rD,GACR7rD,EAAE,UAAUkS,EAAQ,GAAK,EAAGA,EAAQ,GAAK,CAAC,EAC1ClS,EAAE,OAAOkS,EAAQ,QAAU,EAAGA,EAAQ,QAASA,EAAQ,OAAO,EAC5DlS,EAAA,MACAkS,EAAQ,QAAU,EAClBA,EAAQ,QAAU,EAClBA,EAAQ,QACRA,EAAQ,OAAA,GAGPlS,EAAE,WAmBE,KAAK,QAlBL4qD,GAAM,UACX,KAAK,gBAAgB,IAAK7tD,GAAM,CAC9B,IAAIyK,EAAIzK,EAAE,EACNuK,EAAIvK,EAAE,EACNyoD,EAAMzoD,EAAE,IACR0oD,EAAM1oD,EAAE,IACR+uD,EAAM/uD,EAAE,IACRgvD,EAAMhvD,EAAE,IACRouD,EAAMpuD,EAAE,IACRquD,EAAMruD,EAAE,IACX,MAAA,CAAE,EAAAyK,EAAM,EAAAF,GAAStH,EAAE,eAAe,CAAE,EAAAwH,EAAM,EAAAF,CAAA,CAAM,EAChD,CAAE,EAAGk+C,EAAK,EAAGC,CAAI,EAAIzlD,EAAE,eAAe,CAAE,EAAGwlD,EAAK,EAAGC,CAAK,CAAA,EACxD,CAAE,EAAGqG,EAAK,EAAGC,CAAI,EAAI/rD,EAAE,eAAe,CAAE,EAAG8rD,EAAK,EAAGC,CAAK,CAAA,EACxD,CAAE,EAAGZ,EAAK,EAAGC,CAAI,EAAIprD,EAAE,eAAe,CAAE,EAAGmrD,EAAK,EAAGC,CAAK,CAAA,EAClD,IAAIvF,GAAY,CAAE,EAAAr+C,EAAG,EAAAF,EAAG,IAAAk+C,EAAK,IAAAC,EAAK,IAAAqG,EAAK,IAAAC,EAAK,IAAAZ,EAAK,IAAAC,CAAK,CAAA,CAAA,CAC9D,CAAA,CAMP,CAGQ,kBACD,gBAAyB,CAC9B,OACI,OAAO,KAAK,mBAAqB,UACnC,KAAK,wBAEL,KAAK,kBAAoB,KAAK,MAC5B,KAAK,gBAAgB,OAAO,CAACY,EAAKjvD,IAAOivD,GAAOjvD,EAAE,OAAO,EAAI,CAAC,CAAA,EAIhE,KAAK,qBAAuB,IAEvB,KAAK,iBACd,CAGO,iBAAiBoS,EAItB,CACA,IAAI05B,EAAM,EACN9rC,EAAI,EACF,MAAAkvD,EAAa,KAAK,gBAAgB,OACxC,QAAS1yD,EAAI,EAAGA,EAAI0yD,EAAY1yD,IAAK,CAC7B,MAAA2G,EAAI,KAAK,gBAAgB3G,CAAC,EAE5B,GADJwD,EAAImD,EAAE,SACF2oC,EAAM9rC,GAAKoS,EACN,OAAAjP,EAAE,wBAAwBiP,EAAS05B,CAAG,EAExCA,GAAA9rC,CACT,CACA,OAAO,KAAK,gBAAgBkvD,EAAa,CAAC,EAAE,wBAAwBlvD,CAAC,CAGvE,CAGO,YAAY,EAAqC,CAChD,MAAAkvD,EAAa,KAAK,gBAAgB,OACxC,GAAIA,IAAe,EACjB,MAAO,CAAE,EAAG,EAAG,EAAG,CAAE,EACtB,GAAWA,IAAe,EACxB,OAAO,KAAK,gBAAgB,CAAC,EAAE,YAAY,CAAC,EACvC,CACL,IAAI9Z,EAAQ,EAAI8Z,EACZjN,EAAO,KAAK,gBAAgB,CAAC,EAEjC,GADA7M,IACIA,EAAQ,EACV,QAAS54C,EAAI,EAAGA,EAAI0yD,IACXjN,EAAA,KAAK,gBAAgBzlD,CAAC,EACzB44C,EAAQ,GAFkB54C,IAGnB44C,GAAA,EAMR,OAAA6M,EAAK,YAAY7M,CAAK,CAC/B,CACF,CAEO,YACLikC,EACAC,EACAC,EAAS,KACF,CACP,MAAMp2E,EAAI,KAAK,oBAAoBm2E,EAAU,EAAI,EACjD,OAAIE,GAAwBD,CAAM,EAAEF,EAAY,CAAC,EACxCl2E,EAEAA,EAAE,oBAAoBk2E,EAAY,EAAK,CAElD,CAEQ,oBACNjnE,EACAqnE,EAAW,GACJ,CACD,MAAArqB,EAAK,IAAIvB,GACf,IAAI/hB,EAAM,EACN4tC,EAAY,GACP,QAAAl9E,EAAI,EAAGg7B,EAAK,KAAK,gBAAgB,OAAQh7B,EAAIg7B,EAAIh7B,IAAK,CACvD,MAAAgqD,EAAO,KAAK,gBAAgBhqD,CAAC,EAC/BA,GAAK,IACP4yD,EAAG,UAAY5I,EAAK,EACpB4I,EAAG,UAAY5I,EAAK,GAEhB,MAAAxmD,EAAIwmD,EAAK,SACf,GAAI1a,EAAM9rC,EAAIoS,GAAU,CAACsnE,EAAW,CAEtBA,EAAA,GACZ,MAAMrqB,EAAQ7I,EAAK,wBAAwBp0C,EAAS05B,CAAG,EAavD,GAZGsjB,EAAA,YACD,IAAItG,GAAY,CACd,EAAGsG,EAAG,UACN,EAAGA,EAAG,UACN,IAAKC,EAAM,MAAM,EACjB,IAAKA,EAAM,MAAM,EACjB,IAAKA,EAAM,EAAE,EACb,IAAKA,EAAM,EAAE,EACb,IAAKA,EAAM,EACX,IAAKA,EAAM,CAAA,CACZ,CAAA,EAECoqB,EACK,OAAArqB,EAGTA,EAAG,gBAAkB,GAClBA,EAAA,YACD,IAAItG,GAAY,CACd,EAAGsG,EAAG,UACN,EAAGA,EAAG,UACN,IAAKC,EAAM,EAAE,EACb,IAAKA,EAAM,EAAE,EACb,IAAKA,EAAM,IAAI,EACf,IAAKA,EAAM,IAAI,EACf,IAAK7I,EAAK,IACV,IAAKA,EAAK,GAAA,CACX,CAAA,EAEI1a,GAAA9rC,EACP,QACF,CACAovD,EAAG,YAAY5I,CAAI,EACZ1a,GAAA9rC,CACT,CACO,OAAAovD,CACT,CAEO,aACLE,EACAC,EAQA,CACM,MAAAC,EAAa,KAAK,iBACxB,IAAIC,EAAO,CAAE,EAAGH,EAAQ,EAAGC,CAAO,EAC9BG,EAAa,EACbC,EAAe,IACfC,EAAY,EAGhB,QACMC,EAAa,EACjBA,GAAcL,EACdK,GAAcD,EACd,CACM,MAAAE,EAAO,KAAK,iBAAiBD,CAAU,EACvCE,GACHT,EAASQ,EAAK,IAAMR,EAASQ,EAAK,IAClCP,EAASO,EAAK,IAAMP,EAASO,EAAK,GACjCC,EAAeJ,IACVF,EAAAK,EACMJ,EAAAG,EACEF,EAAAI,EAEnB,CAIA,IADaH,GAAA,EACNA,EAAY,IAAK,CACtB,MAAMI,EAAeN,EAAaE,EAC5BK,EAAS,KAAK,iBAAiBD,CAAY,EAC3CE,GACHZ,EAASW,EAAO,IAAMX,EAASW,EAAO,IACtCV,EAASU,EAAO,IAAMV,EAASU,EAAO,GACnCE,EAAcT,EAAaE,EAC3BQ,EAAQ,KAAK,iBAAiBD,CAAW,EACzCE,GACHf,EAASc,EAAM,IAAMd,EAASc,EAAM,IACpCb,EAASa,EAAM,IAAMb,EAASa,EAAM,GACnCJ,GAAgB,GAAKE,EAAiBP,GACjCF,EAAAQ,EACMP,EAAAM,EACEL,EAAAO,GACNC,GAAeX,GAAca,EAAgBV,GAC/CF,EAAAW,EACMV,EAAAS,EACER,EAAAU,GAEFT,GAAA,CAEjB,CAEA,MAAMzsD,EAAI,KAAK,iBACbusD,GAAcA,IAAeF,EAAa,IAAO,GAAA,EAG5C,MAAA,CACL,MAAOC,EACP,SACEC,GAAcF,EACV5W,GAAMz1C,EAAE,EAAGA,EAAE,EAAGssD,EAAK,EAAGA,EAAK,CAAC,EAC9B7W,GAAM6W,EAAK,EAAGA,EAAK,EAAGtsD,EAAE,EAAGA,EAAE,CAAC,EACpC,SAAU,KAAK,KAAKwsD,CAAY,CAAA,CAEpC,CAGQ,sBAAkC,CAAA,EACnC,oBAA+B,CACpC,GAAI,KAAK,yBAA0B,CAC7B,GAAA,KAAK,gBAAgB,OAAQ,CACzB,MAAAgqB,EAAY,KAAK,gBAAgB,CAAC,EACxC,KAAK,sBAAwB,CAACA,EAAU,EAAGA,EAAU,CAAC,EAAE,OACtD,KAAK,gBAAgB,OACnB,CAAC1qB,EAAKjvD,IAAMivD,EAAI,OAAO,CAACjvD,EAAE,IAAKA,EAAE,IAAKA,EAAE,IAAKA,EAAE,IAAKA,EAAE,IAAKA,EAAE,GAAG,CAAC,EACjE,CAAC,CACH,CAAA,CAEJ,CACA,KAAK,yBAA2B,EAClC,CACO,MAAA,CAAC,GAAG,KAAK,qBAAqB,CACvC,CAEO,6BAAsC,CAC3C,IAAImD,EAAI,EACF,MAAAmtD,EAAM,KAAK,qBACX,EAAIA,EAAI,OACd,GAAI,EAAG,CACD,IAAA5rB,EAAK4rB,EAAI,EAAI,CAAC,EACd3rB,EAAK2rB,EAAI,EAAI,CAAC,EAClB,QAAS9zD,EAAI,EAAGA,EAAI,EAAGA,GAAK,EACrB2G,GAAAmjB,GAASgqC,EAAI9zD,CAAC,EAAG8zD,EAAI9zD,EAAI,CAAC,EAAGkoC,EAAIC,CAAE,EACxCD,EAAK4rB,EAAI9zD,CAAC,EACLmoC,EAAA2rB,EAAI9zD,EAAI,CAAC,CAElB,CACO,OAAA,KAAK,MAAM2G,CAAC,CACrB,CAGO,wBAAwBy2E,EAA4B,CACzD,MAAMC,EAAWD,EAAU,OACrBn/E,EAAK,KAAK,qBACV+1D,EAAW/1D,EAAG,OACpB,GAAI+1D,EAAU,CACZ,MAAMvC,EAA8B,CAAA,EACpC,IAAI6rB,EAAiBD,EAAWrpB,EAChC,MAAMpb,EAAQ,KAAK,KAAKykC,EAAWrpB,CAAQ,EACpCvC,EAAA,KAAK,CAAC,IAAKxzD,EAAG,CAAC,EAAGA,EAAG,CAAC,CAAC,CAAC,EAC/B,IAAIqR,EAAI,EACD,KAAAA,EAAI,GAAK0kD,EAAW,GAAG,CACtB,MAAA/H,EAAMhuD,EAAGqR,GAAG,EACZ48C,EAAMjuD,EAAGqR,GAAG,EACZijD,EAAMt0D,EAAGqR,GAAG,EACZkjD,EAAMv0D,EAAGqR,GAAG,EACZrB,EAAIhQ,EAAGqR,GAAG,EACVvB,EAAI9P,EAAGqR,GAAG,EACTmiD,EAAA,KAAK,CAAC,IAAKxF,EAAKC,EAAKqG,EAAKC,EAAKvkD,EAAGF,CAAC,CAAC,EAC3C,IAAIZ,EAAI,EACD,KAAAA,EAAIyrC,GAAS0kC,EAAiB,GAC5B7rB,EAAA,KAAK,CAAC,IAAKxjD,EAAGF,EAAGE,EAAGF,EAAGE,EAAGF,CAAC,CAAC,EACjBuvE,GAAA,EAClBnwE,GAEJ,CACO,OAAA,IAAIkkD,GAAMI,CAAM,CAAA,KAEhB,QAAAJ,GAAM,oBAAoB+rB,CAAS,CAE9C,CAGA,OAAc,gBACZvrC,EACAuiB,EAGS,CACT,OAAQvmD,GAAc,CACd,MAAApH,EAAIu2E,GAAwB,OAAO,OAAO,EAC5C,OAAAv2E,EAAEoH,EAAG,CAAC,EACDgkC,EAAK,QAEVprC,EAAEoH,EAAG,CAAC,EACDumD,EAAM,QAER/C,GAAM,oBACXksB,GAAM1rC,EAAK,mBAAmB,EAAGuiB,EAAM,mBAAmB,EAAGvmD,CAAC,EAAE,IAC7DzP,GAAM+1D,EAAa/1D,EAAG,CAAC,CAC1B,CAAA,CACF,CAEJ,CACF,CCxmBA,MAAM0kD,GAAgBC,GACpB,+rEAyBA,EACF,EAEA,SAASA,GAA4BC,EAAqBC,EAAQ,GAAI,CACpE,MAAMC,EAAS,CAAA,EACTC,EAAQH,EAAY,MAAM,GAAG,EAEnC,QAAS,EAAI,EAAG,EAAIG,EAAM,OAAQ,GAAK,EAAG,CACxC,MAAMC,EAAS,IAAMD,EAAM,EAAI,CAAC,EAAI,IAC9BE,EAAS,SAASF,EAAM,CAAC,EAAGF,CAAK,EAChCC,EAAAE,CAAM,EAAI,KAAOC,EAAS,GACnC,CAEA,OAAAH,EAAO,OAAO,EAAI,SACXA,CACT,CAEA,SAASI,GAAOvsC,EAAayG,EAAuC,CAC5D,MAAAR,EAAO,OAAO,KAAKQ,CAAI,EAC7B,QAASxd,EAAI,EAAGA,EAAIgd,EAAK,OAAQhd,IAC/B+W,EAAMA,EAAI,QACR,IAAI,OAAO,IAAMiG,EAAKhd,CAAC,EAAI,IAAK,IAAI,EACpC,GAAKwd,EAAKR,EAAKhd,CAAC,CAAC,CAAA,EAGd,OAAA+W,CACT,CAEA,SAASwsC,GAAaC,EAA8B,CAClD,IAAIC,EAAczjD,EAClB,GAAI,CAACwjD,EACH,MAAM,IAAI,MACR,+DAAA,EAGJ,MAAME,EAAQ,sDACCD,EAAA,GACZ,EAED,KADeA,EAAA,GACVzjD,EAAI,EAAGA,EAAI,GAAIA,IACFyjD,GAAAC,EAAM,KAAK,MAAM,KAAK,SAAWA,EAAM,MAAM,CAAC,QAEzDF,EAAOC,CAAY,GACrB,OAAAA,CACT,CAGA,SAASE,GAAcC,EAAmB,CAExC,MAAMC,EAAU,CACd,KAAM,QACN,MAAO,MACP,OAAQ,SACR,MAAO,QACP,IAAK,KAAA,EAEA,OAAAA,EAAQD,CAAS,GAAKC,EAAQ,KACvC,CAGA,SAASC,GAAoBC,EAAsB,CAEjD,MAAMF,EAAU,CACd,WAAY,aACZ,QAAS,UACT,IAAK,mBACL,OAAQ,kBACR,OAAQ,SAAA,EAEH,OAAAA,EAAQE,CAAY,GAAKF,EAAQ,UAC1C,CAGA,MAAMG,GAQF,CACF,YAAa,CACX,QAAS,SACT,OAAQ,UACR,IAAK,OACL,MAAO,QACT,EACA,UAAW,CACT,QAAS,OACT,OAAQ,UACR,IAAK,KACL,MAAO,MACT,EACA,QAAS,CACP,QAAS,iBACT,OAAQ,OACR,IAAK,OACL,MAAO,QACT,EACA,SAAU,CACR,QAAS,kBACT,OAAQ,QACR,IAAK,QACL,MAAO,QACT,EACA,WAAY,CACV,QAAS,oBACT,OAAQ,GACR,IAAK,EACL,MAAO,QACT,EACA,UAAW,CACT,QAAS,eACT,OAAQ,EACR,IAAK,EACL,MAAO,QACT,EACA,YAAa,CACX,QAAS,UACT,OAAQ,EACR,IAAK,EACL,MAAO,aACT,EACA,KAAM,CAEJ,OAAQ,iBACV,EACA,YAAa,CACX,OAAQ,SACV,EACA,cAAe,CACb,OAAQ,CACV,EACA,cAAe,CACb,OAAQ,CACV,EACA,WAAY,CACV,OAAQ,CACV,EACA,UAAW,CACT,OAAQ,OACV,EACA,aAAc,CACZ,OAAQ,YACV,EACA,SAAU,CACR,QAAS,mBACT,OAAQ,CAAC,EACT,IAAK,KACL,MAAO,QACT,EACA,eAAgB,CACd,QAAS,oBACT,OAAQ,EACR,IAAK,EACL,MAAO,QACT,CACF,EAEO,MAAMgB,EAAqB,CAChC,OACA,MACA,YAAYd,EAA0BzW,EAA0B,CAC9D,KAAK,OAASyW,EACd,KAAK,MAAQzW,CACf,CAKA,aAAarqB,EAAgB+gC,EAAe,CAC1C,MAAMC,EAAO,KAAK,MAAM,gBAAgB,MAAM,EAE9C,GADKA,EAAA,aAAa,SAAU,GAAKhhC,CAAM,EACnC+gC,EAAM,QAAQ,MAAM,IAAM,GAAI,CAI1B,MAAAE,EADJ,kEACoB,KAAKF,CAAK,EAC5BE,IACGD,EAAA,aACH,aACAd,GAAO,mBAAoB,CACzB,EAAGe,EAAQ,CAAC,EACZ,EAAGA,EAAQ,CAAC,EACZ,EAAGA,EAAQ,CAAC,CAAA,CACb,CAAA,EAEHD,EAAK,aAAa,eAAgBC,EAAQ,CAAC,CAAC,EAC9C,MAEKD,EAAA,aAAa,aAAcD,CAAK,EAElC,KAAA,OAAO,YAAYC,CAAI,CAC9B,CACF,CAEO,MAAMW,EAAoB,CAC/B,OACA,MACA,YAAYjL,EAAqBrM,EAA0B,CACzD,KAAK,OAASqM,EACd,KAAK,MAAQrM,CACf,CACF,CAKO,MAAM+W,EAAoB,CAG/B,WAAuB,SACvB,SACA,MACA,MACA,OACA,aACA,aACA,UACA,MACA,UACA,iBACA,yBAGW,KAEX,YAAY,CACV,OAAAhX,EACA,MAAAoB,EAAQ,IACR,OAAAC,EAAS,GAAA,EAKR,CACGrB,GACF,KAAK,SAAWA,EACX,KAAA,MAAQA,EAAO,WAAW,IAAI,IAEnC,KAAK,SAAW,KAAK,WAAW,cAAc,QAAQ,EACtD,KAAK,MAAQ,KAAK,SAAS,WAAW,IAAI,GAGvC,KAAA,MAAQoB,GAASpB,GAAQ,OAAS,EAClC,KAAA,OAASqB,GAAUrB,GAAQ,QAAU,EAE1C,KAAK,mBAAmB,EACxB,KAAK,aAAe,CAAC,KAAK,gBAAiB,CAAA,EAC3C,KAAK,aAAe,GAEf,KAAA,UAAY,KAAK,WAAW,gBAC/B,6BACA,KAAA,EAEG,KAAA,UAAU,aAAa,UAAW,KAAK,EACvC,KAAA,UAAU,aAAa,QAAS,4BAA4B,EACjE,KAAK,UAAU,eACb,gCACA,cACA,8BAAA,EAEF,KAAK,UAAU,aAAa,QAAS,GAAK,KAAK,KAAK,EACpD,KAAK,UAAU,aAAa,SAAU,GAAK,KAAK,MAAM,EAGtD,KAAK,MAAQ,GAGR,KAAA,UAAY,KAAK,WAAW,gBAC/B,6BACA,MAAA,EAEG,KAAA,UAAU,YAAY,KAAK,SAAS,EAGpC,KAAA,iBAAmB,KAAK,WAAW,gBACtC,6BACA,GAAA,EAEG,KAAA,UAAU,YAAY,KAAK,gBAAgB,CAClD,CAKA,oBAAqB,CAEb,MAAAxwB,EAAO,OAAO,KAAKgnC,EAAM,EAC/B,QAAShkD,EAAI,EAAG4V,EAASoH,EAAK,OAAQhd,EAAI4V,EAAQ5V,IAAK,CAC/C,MAAA0e,EAAM1B,EAAKhd,CAAC,EAClB,KAAK0e,CAAG,EAAIslC,GAAOtlC,CAAG,EAAE,MAC1B,CACF,CAKA,iBAAkB,CAChB,MAAM+lC,EAAkC,CAAA,EAClCznC,EAAO,OAAO,KAAKgnC,EAAM,EAC/B,QAAShkD,EAAI,EAAG4V,EAASoH,EAAK,OAAQhd,EAAI4V,EAAQ5V,IAAK,CAC/C,MAAA0e,EAAM1B,EAAKhd,CAAC,EACPykD,EAAA/lC,CAAG,EAAI,KAAKA,CAAG,CAC5B,CACO,OAAA+lC,CACT,CAKA,kBAAkBA,EAAiC,CAC3C,MAAAznC,EAAO,OAAO,KAAKynC,CAAU,EACnC,QAASzkD,EAAI,EAAG4V,EAASoH,EAAK,OAAQhd,EAAI4V,EAAQ5V,IAAK,CAC/C,MAAA0e,EAAM1B,EAAKhd,CAAC,EACb,KAAA0e,CAAG,EAAI+lC,EAAW/lC,CAAG,CAC5B,CACF,CAKA,gBACEgmC,EACAtnC,EAAkC,CAAA,EAClCunC,EAAY,GACZ,CACM,MAAArlC,EAAU,KAAK,WAAW,gBAC9B,6BACAolC,CAAA,EAEI1nC,EAAO,OAAO,KAAKI,CAAU,EAC/BunC,IAEMrlC,EAAA,aAAa,OAAQ,MAAM,EAC3BA,EAAA,aAAa,SAAU,MAAM,GAEvC,QAAStf,EAAI,EAAGA,EAAIgd,EAAK,OAAQhd,IAAK,CAC9B,MAAA0e,EAAM1B,EAAKhd,CAAC,EAClBsf,EAAQ,aAAaZ,EAAKtB,EAAWsB,CAAG,CAAC,CAC3C,CACO,OAAAY,CACT,CAKA,6BAA6B7G,EAAyB,CACpD,IAAImsC,EAAiB,KAAK,iBAC1B,MAAMC,EAAoB,KAAK,yBAC3BA,IACaD,EAAA,aAAansC,EAAM,EAAE,EACpCmsC,EAAiBC,EAAkB,QACjBA,EAAA,SAAS,QAAS3mC,GAAqB,CAClDA,EAAA,aAAazF,EAAM,EAAE,CAAA,CAC3B,GAGG,MAAAuE,EAAO,OAAO,KAAKgnC,EAAM,EAC/B,QAAShkD,EAAI,EAAGA,EAAIgd,EAAK,OAAQhd,IAAK,CACpC,MAAM8kD,EAAQd,GAAOhnC,EAAKhd,CAAC,CAAC,EACtB0nB,EAAQ,KAAK1K,EAAKhd,CAAC,CAAC,EAC1B,GAAI8kD,EAAM,OACR,GAAIp9B,aAAiBq9B,GAAqB,CACxC,GAAIr9B,EAAM,MAER,KAAOA,EAAM,MAAM,UAAU,WAAW,QAAQ,CACxC,MAAA8M,EACJ9M,EAAM,MAAM,UAAU,WAAW,CAAC,EAClC,aAAa,IAAI,EACd,KAAA,MAAM8M,CAAE,EAAIA,EACjB,KAAK,UAAU,YAAY9M,EAAM,MAAM,UAAU,WAAW,CAAC,CAAC,CAChE,CAEak9B,EAAA,aACbE,EAAM,MACNxB,GAAO,aAAc,CACnB,GAAI57B,EAAM,OAAO,aAAa,IAAI,CAAA,CACnC,CAAA,CACH,SACSA,aAAiBs9B,GACXJ,EAAA,aACbE,EAAM,MACNxB,GAAO,aAAc,CACnB,GAAI57B,EAAM,OAAO,aAAa,IAAI,CAAA,CACnC,CAAA,UAEMo9B,EAAM,MAAM,QAAQrsC,CAAI,IAAM,IAAMqsC,EAAM,MAAQp9B,EAExD,IAAAo9B,EAAM,UAAY,UAAYA,EAAM,UAAY,SACjDp9B,EAAM,QAAQ,MAAM,IAAM,GAC1B,CAIM,MAAA28B,EADJ,kEACoB,KAAK38B,CAAK,EAChC,GAAI28B,EAAS,CACIO,EAAA,aACbE,EAAM,QACNxB,GAAO,mBAAoB,CACzB,EAAGe,EAAQ,CAAC,EACZ,EAAGA,EAAQ,CAAC,EACZ,EAAGA,EAAQ,CAAC,CAAA,CACb,CAAA,EAGH,IAAIY,EAAU,WAAWZ,EAAQ,CAAC,CAAC,EACnC,MAAMa,EAAc,KAAK,YACrBA,GAAe,OACND,GAAAC,GAEEN,EAAA,aACbE,EAAM,QAAU,WAChB,GAAKG,CAAA,CAET,CAAA,KACK,CACL,IAAIE,EAAOL,EAAM,QACb,GAAA9nC,EAAKhd,CAAC,IAAM,gBACPmlD,EAAA1sC,EAAO,IAAMqsC,EAAM,QACtBF,EAAe,aAAaO,CAAI,GAElC,SAIAA,GAAqBP,EAAA,aAAaO,EAAMz9B,CAAK,CACnD,EAGN,CACF,CAKA,oBAAoBxJ,EAAsC,CAExD,OADAA,EAAOA,GAAQ,KAAK,iBAChBA,EAAK,WAAa,KAAOA,EAAK,WAAa,MACtCA,EAEA,KAAK,oBAAoBA,EAAK,UAAmC,CAE5E,CAQA,iBAAiBknC,EAA2B,CAC1C,IAAIC,EAAa,IAAI,cAAA,EAAgB,kBAAkB,KAAK,SAAS,EAYrE,GARE,sFACQ,KAAKA,CAAU,IACvBA,EAAaA,EAAW,QACtB,oCACA,2CAAA,GAIAD,EAAkB,CACd,MAAApoC,EAAO,OAAO,KAAK8lC,EAAa,EAEtC,QAAS9iD,EAAI,EAAG4V,EAASoH,EAAK,OAAQhd,EAAI4V,EAAQ5V,IAAK,CAC/C,MAAA0e,EAAM1B,EAAKhd,CAAC,EACZ0nB,EAAQo7B,GAAcpkC,CAAG,EACzB4mC,EAAS,IAAI,OAAO5mC,EAAK,IAAI,EAC/B4mC,EAAO,KAAKD,CAAU,IACXA,EAAAA,EAAW,QAAQC,EAAQ59B,CAAK,EAEjD,CACF,CAEO,OAAA29B,CACT,CAKA,QAAS,CACP,OAAO,KAAK,SACd,CAKA,MAAO,CACC,MAAArb,EAAQ,KAAK,gBAAgB,GAAG,EAChC7rB,EAAS,KAAK,sBACf,KAAA,aAAa,KAAKA,CAAM,EAC7BA,EAAO,YAAY6rB,CAAK,EACxB,KAAK,iBAAmBA,EACxB,KAAK,aAAa,KAAK,KAAK,gBAAiB,CAAA,CAC/C,CAKA,SAAU,CACR,KAAK,yBAA2B,KAC1B,MAAA4a,EAAiB,KAAK,aAAa,IAAI,EAExCA,EAIH,KAAK,iBAAmBA,EAHxB,KAAK,iBAAmB,KAAK,UAC1B,WAAW,CAAC,EAIX,MAAAjvC,EAAQ,KAAK,aAAa,IAAI,EAChCA,GACF,KAAK,kBAAkBA,CAAK,CAEhC,CAKA,eAAe,EAAW,CAElB,MAAAwI,EAAS,KAAK,sBAChB,GAAAA,EAAO,WAAW,OAAS,EAAG,CAC5B,KAAK,iBAAiB,WAAa,SAChC,KAAK,2BACR,KAAK,yBAA2B,CAAE,QAASA,EAAQ,SAAU,CAAA,IAC/D,KAAK,yBAAyB,SAAS,KAAK,KAAK,gBAAgB,EACjE,KAAK,0BAA0B,GAE3B,MAAA6rB,EAAQ,KAAK,gBAAgB,GAAG,EACtC7rB,EAAO,YAAY6rB,CAAK,EACxB,KAAK,iBAAmBA,CAC1B,CAEA,IAAIub,EAAY,KAAK,iBAAiB,aAAa,WAAW,EAC1DA,EACWA,GAAA,IAEDA,EAAA,GAEDA,GAAA,EACR,KAAA,iBAAiB,aAAa,YAAaA,CAAS,CAC3D,CAKA,MAAMt3C,EAAWF,EAAY,CACvBA,IAAM,SACJA,EAAAE,GAEN,KAAK,eAAeq1C,GAAO,iBAAkB,CAAE,EAAAr1C,EAAM,EAAAF,CAAM,CAAA,CAAC,CAC9D,CAKA,OAAOquC,EAAe,CACd,MAAAoJ,EAAWpJ,EAAQ,IAAO,KAAK,GAChC,KAAA,eACHkH,GAAO,4BAA6B,CAClC,MAAOkC,EACP,GAAI,EACJ,GAAI,CAAA,CACL,CAAA,CAEL,CAKA,UAAUv3C,EAAWF,EAAW,CAC9B,KAAK,eAAeu1C,GAAO,qBAAsB,CAAE,EAAAr1C,EAAM,EAAAF,CAAM,CAAA,CAAC,CAClE,CAKA,UAAUpF,EAAWyE,EAAWjK,EAAWyD,EAAWzI,EAAWgP,EAAW,CACrE,KAAA,eACHm2C,GAAO,kCAAmC,CACxC,EAAA36C,EACA,EAAAyE,EACA,EAAAjK,EACA,EAAAyD,EACA,EAAAzI,EACA,EAAAgP,CAAA,CACD,CAAA,CAEL,CAKA,WAAY,CAGV,KAAK,qBAAuB,GAC5B,KAAK,kBAAoB,GAEzB,MAAMs4C,EAAO,KAAK,gBAAgB,OAAQ,CAAA,EAAI,EAAI,EACnC,KAAK,sBACb,YAAYA,CAAI,EACvB,KAAK,iBAAmBA,CAC1B,CAKA,2BAA4B,CAC1B,MAAMb,EAAiB,KAAK,iBACxBA,EAAe,WAAa,QACfA,EAAA,aAAa,IAAK,KAAK,oBAAoB,CAO9D,CAKA,iBAAiBc,EAAiB,CAChC,KAAK,sBAAwB,IAC7B,KAAK,sBAAwBA,CAC/B,CAMA,OAAOz3C,EAAWF,EAAW,CACvB,KAAK,iBAAiB,WAAa,QACrC,KAAK,UAAU,EAIZ,KAAA,kBAAoB,CAAE,EAAAE,EAAM,EAAAF,CAAK,EACtC,KAAK,iBAAiBu1C,GAAO,YAAa,KAAK,iBAAiB,CAAC,CACnE,CAKA,WAAY,CACN,KAAK,sBACP,KAAK,iBAAiB,GAAG,CAE7B,CAKA,OAAOr1C,EAAWF,EAAW,CACtB,KAAA,kBAAoB,CAAE,EAAAE,EAAM,EAAAF,CAAK,EAClC,KAAK,qBAAqB,QAAQ,GAAG,EAAI,GAC3C,KAAK,iBAAiBu1C,GAAO,YAAa,KAAK,iBAAiB,CAAC,EAEjE,KAAK,iBAAiBA,GAAO,YAAa,KAAK,iBAAiB,CAAC,CAErE,CAKA,cACEqC,EACAC,EACAC,EACAC,EACA73C,EACAF,EACA,CACK,KAAA,kBAAoB,CAAE,EAAAE,EAAM,EAAAF,CAAK,EACjC,KAAA,iBACHu1C,GAAO,wCAAyC,CAC9C,KAAAqC,EACA,KAAAC,EACA,KAAAC,EACA,KAAAC,EACA,EAAA73C,EACA,EAAAF,CAAA,CACD,CAAA,CAEL,CAKA,iBAAiBg4C,EAAaC,EAAa/3C,EAAWF,EAAW,CAC1D,KAAA,kBAAoB,CAAE,EAAAE,EAAM,EAAAF,CAAK,EACjC,KAAA,iBACHu1C,GAAO,wBAAyB,CAAE,IAAAyC,EAAU,IAAAC,EAAU,EAAA/3C,EAAM,EAAAF,EAAM,CAAA,CAEtE,CAKA,UAAUk4C,EAA0B,CAClC,MAAM3W,EAAM,KAAK,KAAK2W,EAAO,CAAC,EAAIA,EAAO,CAAC,EAAIA,EAAO,CAAC,EAAIA,EAAO,CAAC,CAAC,EAC5D,MAAA,CAACA,EAAO,CAAC,EAAI3W,EAAK2W,EAAO,CAAC,EAAI3W,CAAG,CAC1C,CAOA,MAAMtH,EAAYC,EAAYC,EAAYC,EAAY+d,EAAgB,CAEpE,MAAM35C,EAAK,KAAK,mBAAqB,KAAK,kBAAkB,EACtDN,EAAK,KAAK,mBAAqB,KAAK,kBAAkB,EAG5D,GAAI,OAAOM,EAAM,KAAe,OAAON,EAAM,IAC3C,OAIF,GAAIi6C,EAAS,EACX,MAAM,IAAI,MACR,wCAA0CA,EAAS,gBAAA,EASlD,GAAA35C,IAAOy7B,GAAM/7B,IAAOg8B,GAAQD,IAAOE,GAAMD,IAAOE,GAAO+d,IAAW,EAAG,CACnE,KAAA,OAAOle,EAAIC,CAAE,EAClB,MACF,CAKM,MAAAke,EAAiB,KAAK,UAAU,CAAC55C,EAAKy7B,EAAI/7B,EAAKg8B,CAAE,CAAC,EAClDme,EAAiB,KAAK,UAAU,CAACle,EAAKF,EAAIG,EAAKF,CAAE,CAAC,EAEtD,GAAAke,EAAe,CAAC,EAAIC,EAAe,CAAC,IACpCD,EAAe,CAAC,EAAIC,EAAe,CAAC,EACpC,CACK,KAAA,OAAOpe,EAAIC,CAAE,EAClB,MACF,CAQM,MAAAoV,EACJ8I,EAAe,CAAC,EAAIC,EAAe,CAAC,EACpCD,EAAe,CAAC,EAAIC,EAAe,CAAC,EAChCxF,EAAQ,KAAK,KAAK,KAAK,IAAIvD,CAAG,CAAC,EAG/BgJ,EAAqB,KAAK,UAAU,CACxCF,EAAe,CAAC,EAAIC,EAAe,CAAC,EACpCD,EAAe,CAAC,EAAIC,EAAe,CAAC,CAAA,CACrC,EACKE,EAAgBJ,EAAS,KAAK,IAAItF,EAAQ,CAAC,EAC3C3yC,EAAI+5B,EAAKse,EAAgBD,EAAmB,CAAC,EAC7Ct4C,EAAIk6B,EAAKqe,EAAgBD,EAAmB,CAAC,EAI7CE,EAAgC,CACpC,CAACJ,EAAe,CAAC,EACjBA,EAAe,CAAC,CAAA,EAGZK,EAA8B,CAACJ,EAAe,CAAC,EAAG,CAACA,EAAe,CAAC,CAAC,EACpEzjC,EAAW,SAAUsjC,EAAkB,CAErCh4C,MAAAA,EAAIg4C,EAAO,CAAC,EAElB,OADUA,EAAO,CAAC,GACT,EAEA,KAAK,KAAKh4C,CAAC,EAEX,CAAC,KAAK,KAAKA,CAAC,CACrB,EAEIw4C,EAAa9jC,EAAS4jC,CAA6B,EACnDG,EAAW/jC,EAAS6jC,CAA2B,EAGhD,KAAA,OACHv4C,EAAIs4C,EAA8B,CAAC,EAAIL,EACvCn4C,EAAIw4C,EAA8B,CAAC,EAAIL,CAAA,EAKzC,KAAK,IAAIj4C,EAAGF,EAAGm4C,EAAQO,EAAYC,CAAQ,CAC7C,CAKA,QAAS,CACH,KAAK,iBAAiB,WAAa,QAChC,KAAA,iBAAiB,aAAa,cAAe,qBAAqB,EAEzE,KAAK,0BAA0B,EAC/B,KAAK,6BAA6B,QAAQ,CAC5C,CAKA,MAAO,CACD,KAAK,iBAAiB,WAAa,QAChC,KAAA,iBAAiB,aAAa,cAAe,qBAAqB,EAEzE,KAAK,0BAA0B,EAC/B,KAAK,6BAA6B,MAAM,CAC1C,CAKA,KAAKz4C,EAAWF,EAAW6gC,EAAeC,EAAgB,CACpD,KAAK,iBAAiB,WAAa,QACrC,KAAK,UAAU,EAEZ,KAAA,OAAO5gC,EAAGF,CAAC,EACX,KAAA,OAAOE,EAAI2gC,EAAO7gC,CAAC,EACxB,KAAK,OAAOE,EAAI2gC,EAAO7gC,EAAI8gC,CAAM,EAC5B,KAAA,OAAO5gC,EAAGF,EAAI8gC,CAAM,EACpB,KAAA,OAAO5gC,EAAGF,CAAC,EAChB,KAAK,UAAU,CACjB,CAKA,SAASE,EAAWF,EAAW6gC,EAAeC,EAAgB,CAC5D,MAAM8X,EAAO,KAAK,gBAChB,OACA,CACE,EAAA14C,EACA,EAAAF,EACA,MAAA6gC,EACA,OAAAC,CACF,EACA,EAAA,EAEa,KAAK,sBACb,YAAY8X,CAAI,EACvB,KAAK,iBAAmBA,EACxB,KAAK,6BAA6B,MAAM,CAC1C,CAKA,WAAW14C,EAAWF,EAAW6gC,EAAeC,EAAgB,CAC9D,MAAM8X,EAAO,KAAK,gBAChB,OACA,CACE,EAAA14C,EACA,EAAAF,EACA,MAAA6gC,EACA,OAAAC,CACF,EACA,EAAA,EAEa,KAAK,sBACb,YAAY8X,CAAI,EACvB,KAAK,iBAAmBA,EACxB,KAAK,6BAA6B,QAAQ,CAC5C,CAOA,eAAgB,CAER,MAAApB,EADU,KAAK,sBACK,aAAa,WAAW,EAC5CqB,EAAY,KAAK,UAAU,WAAW,CAAC,EACvCC,EAAaD,EAAU,WAC7B,QAAS5mD,EAAI6mD,EAAW,OAAS,EAAG7mD,GAAK,EAAGA,IACtC6mD,EAAW7mD,CAAC,GACJ4mD,EAAA,YAAYC,EAAW7mD,CAAC,CAAC,EAGvC,KAAK,iBAAmB4mD,EAExB,KAAK,aAAe,GAChBrB,GACF,KAAK,eAAeA,CAAS,CAEjC,CAKA,UAAUt3C,EAAWF,EAAW6gC,EAAeC,EAAgB,CAEzD,GAAA5gC,IAAM,GAAKF,IAAM,GAAK6gC,IAAU,KAAK,OAASC,IAAW,KAAK,OAAQ,CACxE,KAAK,cAAc,EACnB,MACF,CACM,MAAA1wB,EAAS,KAAK,sBACdwoC,EAAO,KAAK,gBAChB,OACA,CACE,EAAA14C,EACA,EAAAF,EACA,MAAA6gC,EACA,OAAAC,EACA,KAAM,SACR,EACA,EAAA,EAEF1wB,EAAO,YAAYwoC,CAAI,CACzB,CAMA,qBAAqB3e,EAAYC,EAAYC,EAAYC,EAAY,CACnE,MAAM2e,EAAO,KAAK,gBAChB,iBACA,CACE,GAAIvD,GAAa,KAAK,KAAK,EAC3B,GAAIvb,EAAK,KACT,GAAIE,EAAK,KACT,GAAID,EAAK,KACT,GAAIE,EAAK,KACT,cAAe,gBACjB,EACA,EAAA,EAEG,YAAA,UAAU,YAAY2e,CAAI,EACxB,IAAI9B,GAAqB8B,EAA+B,IAAI,CACrE,CAMA,qBACEv6C,EACAN,EACAnB,EACAk9B,EACAC,EACAkY,EACA,CACA,MAAM2G,EAAO,KAAK,gBAChB,iBACA,CACE,GAAIvD,GAAa,KAAK,KAAK,EAC3B,GAAIvb,EAAK,KACT,GAAIC,EAAK,KACT,EAAGkY,EAAK,KACR,GAAI5zC,EAAK,KACT,GAAIN,EAAK,KACT,cAAe,gBACjB,EACA,EAAA,EAEG,YAAA,UAAU,YAAY66C,CAAI,EACxB,IAAI9B,GAAqB8B,EAA+B,IAAI,CACrE,CAKA,aAAc,CAGZ,MAAMC,EADJ,kXACqB,KAAK,KAAK,IAAI,EAC/Bv7B,EAAO,CACX,MAAOu7B,EAAS,CAAC,GAAK,SACtB,KAAMA,EAAS,CAAC,GAAK,OACrB,OAAQA,EAAS,CAAC,GAAK,aACvB,OAAQA,EAAS,CAAC,GAAK,SACvB,WAAYA,EAAS,CAAC,GAAK,SAC3B,KAAM,IAAA,EAIJ,OAAA,KAAK,kBAAoB,cAC3Bv7B,EAAK,WAAa,aAIhB,KAAK,aACPA,EAAK,KAAO,KAAK,YAGZA,CACT,CAKA,eAAew7B,EAA+B1nC,EAAsB,CAClE,GAAI0nC,EAAK,KAAM,CACP,MAAAr+C,EAAI,KAAK,gBAAgB,GAAG,EAClC,OAAAA,EAAE,eAAe,+BAAgC,aAAcq+C,EAAK,IAAI,EACxEr+C,EAAE,YAAY2W,CAAO,EACd3W,CACT,CACO,OAAA2W,CACT,CASA,YAAYk8B,EAAcvtC,EAAWF,EAAWmnB,EAA2B,CACnE,MAAA8xB,EAAO,KAAK,cAChB7oC,EAAS,KAAK,oBACd,EAAA8oC,EAAc,KAAK,gBACjB,OACA,CACE,cAAeD,EAAK,OACpB,YAAaA,EAAK,KAClB,aAAcA,EAAK,MACnB,cAAeA,EAAK,OACpB,kBAAmBA,EAAK,WACxB,EAAA/4C,EACA,EAAAF,EACA,cAAe41C,GAAc,KAAK,SAAS,EAC3C,oBAAqBG,GAAoB,KAAK,YAAY,CAC5D,EACA,EAAA,EAGJmD,EAAY,YAAY,KAAK,WAAW,eAAezL,CAAI,CAAC,EAC5D,KAAK,iBAAmByL,EACxB,KAAK,6BAA6B/xB,CAAM,EACjC/W,EAAA,YACL,KAAK,eAAe6oC,EAAMC,CAAqC,CAAA,CAEnE,CAQA,SAASzL,EAAcvtC,EAAWF,EAAW,CAC3C,KAAK,YAAYytC,EAAMvtC,EAAGF,EAAG,MAAM,CACrC,CAQA,WAAWytC,EAAcvtC,EAAWF,EAAW,CAC7C,KAAK,YAAYytC,EAAMvtC,EAAGF,EAAG,QAAQ,CACvC,CAOA,YAAYytC,EAAc,CACnB,YAAA,MAAM,KAAO,KAAK,KAChB,KAAK,MAAM,YAAYA,CAAI,CACpC,CAKA,IACEvtC,EACAF,EACAm4C,EACAO,EACAC,EACAQ,EACA,CAEA,GAAIT,IAAeC,EACjB,OAEWD,EAAAA,GAAc,EAAI,KAAK,IACzBC,EAAAA,GAAY,EAAI,KAAK,IAC5BD,IAAeC,IAGdA,GAAAA,EAAW,EAAI,KAAK,GAAK,MAASQ,EAAmB,GAAK,KAC1D,EAAI,KAAK,KAEd,MAAM3K,EAAOtuC,EAAIi4C,EAAS,KAAK,IAAIQ,CAAQ,EACzClK,EAAOzuC,EAAIm4C,EAAS,KAAK,IAAIQ,CAAQ,EACrCrK,EAASpuC,EAAIi4C,EAAS,KAAK,IAAIO,CAAU,EACzCnK,EAASvuC,EAAIm4C,EAAS,KAAK,IAAIO,CAAU,EACzCU,EAAYD,EAAmB,EAAI,EACrC,IAAIE,EAAe,EACftjB,EAAO4iB,EAAWD,EAGlB3iB,EAAO,IACTA,GAAQ,EAAI,KAAK,IAGfojB,EACaE,EAAAtjB,EAAO,KAAK,GAAK,EAAI,EAErBsjB,EAAAtjB,EAAO,KAAK,GAAK,EAAI,EAGjC,KAAA,OAAOuY,EAAQC,CAAM,EACrB,KAAA,iBACHgH,GACE,uEACA,CACE,GAAI4C,EACJ,GAAIA,EACJ,cAAe,EACf,aAAAkB,EACA,UAAAD,EACA,KAAA5K,EACA,KAAAC,CACF,CACF,CAAA,EAGF,KAAK,kBAAoB,CAAE,EAAGD,EAAM,EAAGC,EACzC,CAKA,MAAO,CACL,MAAMxS,EAAQ,KAAK,oBAAA,EACjBqd,EAAW,KAAK,gBAAgB,UAAU,EAC1C7yB,EAAK+uB,GAAa,KAAK,KAAK,EAC5B+D,EAAW,KAAK,gBAAgB,GAAG,EAErC,KAAK,0BAA0B,EACzBtd,EAAA,YAAY,KAAK,gBAAgB,EAC9Bqd,EAAA,aAAa,KAAM7yB,CAAE,EACrB6yB,EAAA,YAAY,KAAK,gBAAgB,EAErC,KAAA,UAAU,YAAYA,CAAQ,EAGnCrd,EAAM,aAAa,YAAasZ,GAAO,aAAc,CAAE,GAAA9uB,CAAQ,CAAA,CAAC,EAIhEwV,EAAM,YAAYsd,CAAQ,EAE1B,KAAK,iBAAmBA,CAC1B,CAOA,aAAa9pC,EAAa,CACxB,IAAI+vB,EAAQ/vB,EAAK,CAAC,EAChBqJ,EACAC,EACAygC,EACAC,EACApF,EAAK,EACLC,EAAK,EACLoF,EACAC,EACAC,EACAC,EACA5d,EACA6d,EACAra,EACAhZ,EAEE,GAAAhX,EAAK,SAAW,EAClBqJ,EAAKrJ,EAAK,CAAC,EACXsJ,EAAKtJ,EAAK,CAAC,EACXiqC,EAAKla,EAAM,MACXma,EAAKna,EAAM,OACNga,EAAAE,EACAD,EAAAE,UACIlqC,EAAK,SAAW,EACzBqJ,EAAKrJ,EAAK,CAAC,EACXsJ,EAAKtJ,EAAK,CAAC,EACX+pC,EAAK/pC,EAAK,CAAC,EACXgqC,EAAKhqC,EAAK,CAAC,EACXiqC,EAAKla,EAAM,MACXma,EAAKna,EAAM,eACF/vB,EAAK,SAAW,EACzB4kC,EAAK5kC,EAAK,CAAC,EACX6kC,EAAK7kC,EAAK,CAAC,EACXiqC,EAAKjqC,EAAK,CAAC,EACXkqC,EAAKlqC,EAAK,CAAC,EACXqJ,EAAKrJ,EAAK,CAAC,EACXsJ,EAAKtJ,EAAK,CAAC,EACX+pC,EAAK/pC,EAAK,CAAC,EACXgqC,EAAKhqC,EAAK,CAAC,MAEX,OAAM,IAAI,MACR,oDAAsD,UAAU,MAAA,EAI9D,MAAAW,EAAS,KAAK,sBACG,KAAK,iBAC5B,MAAM2pC,EAAqB,aAAejhC,EAAK,KAAOC,EAAK,IAC3D,GAAIymB,aAAiBiX,IAInB,GADAmD,EAAMpa,EAAM,OAAS,EAAA,UAAU,EAAI,EAC/Boa,EAAI,YAAcA,EAAI,WAAW,OAAS,EAAG,CAExC,IADAC,EAAAD,EAAI,WAAW,CAAC,EAChBC,EAAK,WAAW,QACrBpzB,EAAMozB,EAAK,WAAW,CAAC,EAAiB,aAAa,IAAI,EACpD,KAAA,MAAMpzB,CAAE,EAAIA,EACjB,KAAK,UAAU,YAAYozB,EAAK,WAAW,CAAC,CAAC,EAG/C,GADQ5d,EAAA2d,EAAI,WAAW,CAAC,EACpB3d,EAAO,CAEH,MAAA+d,EAAkB/d,EAAM,aAAa,WAAW,EAClD,IAAAge,EACAD,EACFC,EAAqBD,EAAkB,IAAMD,EAExBE,EAAAF,EAEjB9d,EAAA,aAAa,YAAage,CAAkB,EAClD7pC,EAAO,YAAY6rB,CAAK,CAC1B,CACF,OACSuD,EAAM,WAAa,UAAYA,EAAM,WAAa,SAEhDsa,EAAA,KAAK,gBAAgB,OAAO,EAC9BA,EAAA,aAAa,QAASN,CAAE,EACxBM,EAAA,aAAa,SAAUL,CAAE,EACzBK,EAAA,aAAa,sBAAuB,MAAM,GAE/CzF,GAAMC,GAAMoF,IAAOla,EAAM,OAASma,IAAOna,EAAM,UAExCC,EAAA,KAAK,WAAW,cAAc,QAAQ,EAC/CA,EAAO,MAAQ+Z,EACf/Z,EAAO,OAASga,EACAha,EAAO,WAAW,IAAI,GAC7B,UAAUD,EAAO6U,EAAIC,EAAIoF,EAAIC,EAAI,EAAG,EAAGH,EAAIC,CAAE,EAC9Cja,EAAAC,GAEDqa,EAAA,aAAa,YAAaC,CAAkB,EAC5CD,EAAA,eACP,+BACA,aACAta,EAAM,WAAa,SACfA,EAAM,YACNA,EAAM,aAAa,KAAK,CAAA,EAE9BpvB,EAAO,YAAY0pC,CAAQ,EAE/B,CAKA,cACEta,EACA0a,EACA,CACM,MAAAnO,EAAU,KAAK,WAAW,gBAC5B,6BACA,SAEF,EAAAtlB,EAAK+uB,GAAa,KAAK,KAAK,EAC1B,IAAA3Q,EACI,OAAAkH,EAAA,aAAa,KAAMtlB,CAAE,EAEzB+Y,EAAM,WAAa,UAAYA,EAAM,WAAa,OACpDqF,EAAM,KAAK,WAAW,gBACpB,6BACA,OAAA,EAEEA,EAAA,aACF,QACA,GAAMrF,EAA+C,KAAA,EAEnDqF,EAAA,aACF,SACA,GAAMrF,EAA+C,MAAA,EAEnDqF,EAAA,eACF,+BACA,aACArF,EAAM,WAAa,SACdA,EAA4B,YAC7BA,EAAM,aAAa,KAAK,CAAA,EAE9BuM,EAAQ,YAAYlH,CAAG,EAClB,KAAA,UAAU,YAAYkH,CAAO,GACzBvM,aAAiBiX,KAC1B1K,EAAQ,aAAa,QAAS,GAAMvM,EAA8B,KAAK,EAC/DuM,EAAA,aACN,SACA,GAAMvM,EAA8B,MAAA,EAEtCuM,EAAQ,YAAYvM,EAAM,UAAU,WAAW,CAAC,CAAC,EAC5C,KAAA,UAAU,YAAYuM,CAAO,GAE7B,IAAIiL,GAAoBjL,EAAkC,IAAI,CACvE,CAEA,YAAYoO,EAAqB,CAC3BA,GAAaA,EAAU,OAAS,EAC7B,KAAA,SAAWA,EAAU,KAAK,GAAG,EAElC,KAAK,SAAW,IAEpB,CAEA,eAAgB,CAEhB,CACA,iBAAkB,CAElB,CACA,cAAe,CAEf,CACA,cAAe,CAEf,CACA,0BAA2B,CAE3B,CACA,cAAe,CAEf,CACF,CClzCO,MAAM0M,EAAgB,CAC3B,OAEA,QAMA,cAGA,aAAe,GACf,cAAwB,IAAI,OAC5B,QAAoB,CAAA,EAGpB,cAA2B,IAAI,UAK/B,wBAA0B,GAC1B,sBAAwB,GAExB,YACEpnB,EACAoB,EACAC,EACAuZ,EAAsB,GACtBo1B,EAAe,GACf,CACA,KAAK,OAAShwC,EACT,KAAA,QAAUA,EAAO,WAAW,KAAM,CACrC,mBAAoB,EAAA,CACrB,EACG4a,IACG,KAAA,cAAgB,IAAI5D,GAAoB,CAC3C,OAAQ,KAAK,OACb,MAAO5V,GAAS,KAAK,OAAO,MAC5B,OAAQC,GAAU,KAAK,OAAO,MAAA,CAC/B,GAEH,KAAK,aAAe,OAAO2uC,GAAgB,UAAYA,EAAe,EACxE,CAEA,IAAI,UAAUn1B,EAAmB,CAC/B,KAAK,wBAA0B,GAC/B,KAAK,QAAQ,UAAYA,EACrB,KAAK,gBAAe,KAAK,cAAc,UAAYA,EACzD,CAEA,IAAI,WAAoB,CACtB,OAAO,KAAK,QAAQ,SACtB,CAEA,IAAI,QAAQC,EAAwB,CAClC,KAAK,wBAA0B,GAC/B,KAAK,QAAQ,QAAUA,EACnB,KAAK,gBAAe,KAAK,cAAc,QAAUA,EACvD,CAEA,IAAI,SAAyB,CAC3B,OAAO,KAAK,QAAQ,OACtB,CAEA,IAAI,SAASC,EAA0B,CACrC,KAAK,wBAA0B,GAC/B,KAAK,QAAQ,SAAWA,EACpB,KAAK,gBAAe,KAAK,cAAc,QAAUA,EACvD,CAEA,IAAI,UAA2B,CAC7B,OAAO,KAAK,QAAQ,QACtB,CAEA,IAAI,eAAeC,EAAwB,CACzC,KAAK,wBAA0B,GAC/B,KAAK,QAAQ,eAAiBA,EAC1B,KAAK,gBAAe,KAAK,cAAc,eAAiBA,EAC9D,CAEA,IAAI,gBAAyB,CAC3B,OAAO,KAAK,QAAQ,cACtB,CAEA,IAAI,WAAWC,EAAoB,CACjC,KAAK,wBAA0B,GAC/B,KAAK,QAAQ,WAAaA,EACtB,KAAK,gBAAe,KAAK,cAAc,WAAaA,EAC1D,CAEA,IAAI,YAAqB,CACvB,OAAO,KAAK,QAAQ,UACtB,CAEA,IAAI,YAAY5H,EAAe,CAC7B,KAAK,QAAQ,YAAcA,EACvB,KAAK,gBAAe,KAAK,cAAc,YAAcA,EAC3D,CAEA,IAAI,aAAsB,CACxB,OAAO,KAAK,QAAQ,WACtB,CAKA,IAAI,UACFiE,EAKA,CACA,KAAK,sBAAwB,GAE3B,OAAOA,GAAS,UAChBA,aAAiB,gBACjBA,aAAiB,eAEjB,KAAK,QAAQ,UAAYA,EACrB,KAAK,gBAAe,KAAK,cAAc,UAAYA,KAElD,KAAA,QAAQ,UAAYA,EAAM,SAC3B,KAAK,gBACF,KAAA,cAAc,UAAYA,EAAM,gBAE3C,CAEA,IAAI,WAAqD,CACvD,OAAO,KAAK,QAAQ,SACtB,CAEA,IAAI,YACFA,EAKA,CACA,KAAK,wBAA0B,GAE7B,OAAOA,GAAS,UAChBA,aAAiB,gBACjBA,aAAiB,eAEjB,KAAK,QAAQ,YAAcA,EACvB,KAAK,gBAAe,KAAK,cAAc,YAAcA,KAEpD,KAAA,QAAQ,YAAcA,EAAM,SAC7B,KAAK,gBACF,KAAA,cAAc,YAAcA,EAAM,gBAE7C,CAEA,IAAI,aAAuD,CACzD,OAAO,KAAK,QAAQ,WACtB,CAGA,IAAI,KAAKkC,EAAc,CACrB,KAAK,QAAQ,KAAOA,EAChB,KAAK,gBAAe,KAAK,cAAc,KAAOA,EACpD,CAEA,IAAI,MAAe,CACjB,OAAO,KAAK,QAAQ,IACtB,CAEA,IAAI,aAAajD,EAAkC,CACjD,KAAK,QAAQ,aAAeA,EACxB,KAAK,gBAAe,KAAK,cAAc,aAAeA,EAC5D,CAEA,IAAI,cAAmC,CACrC,OAAO,KAAK,QAAQ,YACtB,CAEA,IAAI,UAAUH,EAA4B,CACxC,KAAK,QAAQ,UAAYA,EACrB,KAAK,gBAAe,KAAK,cAAc,UAAYA,EACzD,CAEA,IAAI,WAA6B,CAC/B,OAAO,KAAK,QAAQ,SACtB,CAEA,KAAK6B,EAAe,CAClB,OAAIA,EACG,KAAA,QAAQ,KAAKA,CAAI,GAGtB,KAAK,QAAQ,OACT,KAAK,eAAe,KAAK,cAAc,QAEtC,IACT,CAEA,SAASx3C,EAAWF,EAAWC,EAAWtH,EAAW,CACnD,YAAK,QAAQ,SAASuH,EAAGF,EAAGC,EAAGtH,CAAC,EAC5B,KAAK,eAAe,KAAK,cAAc,SAASuH,EAAGF,EAAGC,EAAGtH,CAAC,EACvD,IACT,CAEA,SAAS80C,EAAcvtC,EAAWF,EAAW26C,EAA+B,CAC1E,YAAK,sBAAwB,GAC7B,KAAK,QAAQ,SAASlN,EAAMvtC,EAAGF,EAAG26C,CAAQ,EACtC,KAAK,eAAe,KAAK,cAAc,SAASlN,EAAMvtC,EAAGF,CAAC,EACvD,IACT,CAEA,YAAYm6C,EAAqB,CAC1B,YAAA,QAAQ,YAAYA,CAAS,EAC9B,KAAK,eAAoB,KAAA,cAAc,YAAYA,CAAS,EACzD,IACT,CAEA,OAAOzC,EAAe,CACpB,OAAIA,EACG,KAAA,QAAQ,OAAOA,CAAI,GAGxB,KAAK,QAAQ,SACT,KAAK,eAAe,KAAK,cAAc,UAEtC,IACT,CAEA,WACEjK,EACAvtC,EACAF,EACA26C,EACA,CACA,YAAK,QAAQ,WAAWlN,EAAMvtC,EAAGF,EAAG26C,CAAQ,EACxC,KAAK,eAAe,KAAK,cAAc,WAAWlN,EAAMvtC,EAAGF,CAAC,EACzD,IACT,CAEA,WAAWE,EAAWF,EAAWC,EAAWtH,EAAW,CACrD,YAAK,QAAQ,WAAWuH,EAAGF,EAAGC,EAAGtH,CAAC,EAC9B,KAAK,eAAe,KAAK,cAAc,WAAWuH,EAAGF,EAAGC,EAAGtH,CAAC,EACzD,IACT,CAEA,YAAY80C,EAA2B,CAC9B,OAAA,KAAK,QAAQ,YAAYA,CAAI,CAEtC,CAEA,UAAUvtC,EAAI,EAAGF,EAAI,EAAGC,EAAI,KAAK,OAAO,MAAOtH,EAAI,KAAK,OAAO,OAAQ,CACrE,YAAK,QAAQ,UAAUuH,EAAGF,EAAGC,EAAGtH,CAAC,EAC7B,KAAK,eAAe,KAAK,cAAc,UAAUuH,EAAGF,EAAGC,EAAGtH,CAAC,EACxD,IACT,CAEA,MAAO,CACL,YAAK,QAAQ,OACT,KAAK,eACP,KAAK,cAAc,OAEhB,KAAA,cAAgB,IAAI,UACrB,KAAK,eACF,KAAA,QAAQ,KAAK,KAAK,aAAa,EAC/B,KAAA,cAAgB,IAAI,QAEpB,IACT,CAEA,SAAU,CACR,YAAK,QAAQ,UACT,KAAK,eACP,KAAK,cAAc,UAErB,KAAK,wBAA0B,GAC/B,KAAK,sBAAwB,GACxB,KAAA,cAAgB,IAAI,UACrB,KAAK,eACP,KAAK,cAAgB,KAAK,QAAQ,IAAI,GAAK,IAAI,QAE1C,IACT,CAEA,WAAY,CACV,YAAK,QAAQ,YACT,KAAK,eAAe,KAAK,cAAc,YACpC,IACT,CAEA,WAAY,CACV,YAAK,QAAQ,YACT,KAAK,eAAe,KAAK,cAAc,YACvC,KAAK,cACP,KAAK,cAAc,YAEd,IACT,CAEA,aAAa++C,EAAO,KAAK,cAAeF,EAAY,KAAK,cAAe,CACtE,GAAI,KAAK,aAAc,CACf,MAAAoD,EAAU,IAAI,OACZA,EAAA,QAAQlD,EAAMF,CAAS,EAC/B,KAAK,cAAgBoD,CACvB,CACF,CAIA,mBAAmBnrC,EAAsB,CACnC,OAAAA,EAAK,CAAC,YAAa,OACd,KAAK,QAAQ,gBAAgBA,EAAK,CAAC,EAAGA,EAAK,CAAC,EAAGA,EAAK,CAAC,CAAC,EAExD,KAAK,QAAQ,gBAAgBA,EAAK,CAAC,EAAGA,EAAK,CAAC,CAAC,CAEtD,CAIA,iBAAiBA,EAAsB,CACjC,OAAAA,EAAK,CAAC,YAAa,OACd,KAAK,QAAQ,cAAcA,EAAK,CAAC,EAAGA,EAAK,CAAC,EAAGA,EAAK,CAAC,CAAC,EAEtD,KAAK,QAAQ,cAAcA,EAAK,CAAC,EAAGA,EAAK,CAAC,CAAC,CAEpD,CAQA,UAAUvP,EAAWF,EAAW,CACzB,YAAA,QAAQ,UAAUE,EAAGF,CAAC,EACvB,KAAK,eACF,KAAA,cAAc,UAAUE,EAAGF,CAAC,EAEnC,KAAK,cAAgB,KAAK,cAAc,UAAUE,EAAGF,CAAC,EACtD,KAAK,aAAa,EACX,IACT,CAEA,OAAOouC,EAAgByM,EAAU,EAAGC,EAAU,EAAG,CAE1C,YAAA,UAAUD,EAASC,CAAO,EAC1B,KAAA,QAAQ,OAAO1M,CAAM,EACtB,KAAK,eACF,KAAA,cAAc,OAAOA,CAAM,EAElC,KAAK,cAAgB,KAAK,cAAc,OAAOA,CAAM,EACrD,KAAK,UAAU,CAACyM,EAAS,CAACC,CAAO,EACjC,KAAK,aAAa,EACX,IACT,CAEA,MAAM56C,EAAWF,EAAIE,EAAG26C,EAAU,EAAGC,EAAU,EAAG,CAE3C,YAAA,UAAUD,EAASC,CAAO,EAC1B,KAAA,QAAQ,MAAM56C,EAAGF,CAAC,EACnB,KAAK,eACF,KAAA,cAAc,MAAME,EAAGF,CAAC,EAE/B,KAAK,cAAgB,KAAK,cAAc,MAAME,EAAGF,CAAC,EAClD,KAAK,UAAU,CAAC66C,EAAS,CAACC,CAAO,EACjC,KAAK,aAAa,EACX,IACT,CAEA,OAAO56C,EAAWF,EAAW,CACtB,YAAA,QAAQ,OAAOE,EAAGF,CAAC,EACpB,KAAK,eAAoB,KAAA,cAAc,OAAOE,EAAGF,CAAC,EAClD,KAAK,cACF,KAAA,cAAc,OAAOE,EAAGF,CAAC,EAEzB,IACT,CAEA,OAAOE,EAAWF,EAAW,CACtB,YAAA,QAAQ,OAAOE,EAAGF,CAAC,EACpB,KAAK,eAAoB,KAAA,cAAc,OAAOE,EAAGF,CAAC,EAClD,KAAK,cACF,KAAA,cAAc,OAAOE,EAAGF,CAAC,EAEzB,IACT,CAEA,IACEE,EACAF,EACAm4C,EACAO,EACAC,EACAQ,EACA,CACA,YAAK,QAAQ,IAAIj5C,EAAGF,EAAGm4C,EAAQO,EAAYC,EAAUQ,CAAgB,EACjE,KAAK,eACP,KAAK,cAAc,IACjBj5C,EACAF,EACAm4C,EACAO,EACAC,EACAQ,EAAmB,GAAK,CAAA,EAExB,KAAK,cACP,KAAK,cAAc,IACjBj5C,EACAF,EACAm4C,EACAO,EACAC,EACAQ,CAAA,EAGG,IACT,CAEA,MAAMlf,EAAYC,EAAYC,EAAYC,EAAY+d,EAAgB,CACpE,YAAK,QAAQ,MAAMle,EAAIC,EAAIC,EAAIC,EAAI+d,CAAM,EACrC,KAAK,eAAe,KAAK,cAAc,MAAMle,EAAIC,EAAIC,EAAIC,EAAI+d,CAAM,EACnE,KAAK,cACP,KAAK,cAAc,MAAMle,EAAIC,EAAIC,EAAIC,EAAI+d,CAAM,EAE1C,IACT,CAEA,QACEj4C,EACAF,EACA+6C,EACAC,EACAC,EACAvC,EACAC,EACAQ,EACA,CACA,YAAK,QAAQ,QACXj5C,EACAF,EACA+6C,EACAC,EACAC,EACAvC,EACAC,EACAQ,CAAA,EAGE,KAAK,cACP,KAAK,cAAc,QACjBj5C,EACAF,EACA+6C,EACAC,EACAC,EACAvC,EACAC,EACAQ,CAAA,EAGG,IACT,CAEA,iBAAiBnB,EAAaC,EAAa/3C,EAAWF,EAAW,CAC/D,YAAK,QAAQ,iBAAiBg4C,EAAKC,EAAK/3C,EAAGF,CAAC,EACxC,KAAK,eAAe,KAAK,cAAc,iBAAiBg4C,EAAKC,EAAK/3C,EAAGF,CAAC,EACtE,KAAK,cACP,KAAK,cAAc,iBAAiBg4C,EAAKC,EAAK/3C,EAAGF,CAAC,EAE7C,IACT,CAEA,cACE43C,EACAC,EACAC,EACAC,EACA73C,EACAF,EACA,CACA,YAAK,QAAQ,cAAc43C,EAAMC,EAAMC,EAAMC,EAAM73C,EAAGF,CAAC,EACnD,KAAK,eACP,KAAK,cAAc,cAAc43C,EAAMC,EAAMC,EAAMC,EAAM73C,EAAGF,CAAC,EAC3D,KAAK,cACP,KAAK,cAAc,cAAc43C,EAAMC,EAAMC,EAAMC,EAAM73C,EAAGF,CAAC,EAExD,IACT,CAEA,KAAKE,EAAWF,EAAWC,EAAWtH,EAAW,CAC/C,YAAK,QAAQ,KAAKuH,EAAGF,EAAGC,EAAGtH,CAAC,EACxB,KAAK,eAAe,KAAK,cAAc,KAAKuH,EAAGF,EAAGC,EAAGtH,CAAC,EACtD,KAAK,cACP,KAAK,cAAc,KAAKuH,EAAGF,EAAGC,EAAGtH,CAAC,EAE7B,IACT,CAGA,qBACEshC,EACAC,EACAC,EACAC,EACA8gB,EACA,CACM,MAAAC,EAA2B,KAAK,QAAQ,qBAC5ClhB,EACAC,EACAC,EACAC,CAAA,EAIF,OAAI8gB,GACK,OAAA,QAAQA,CAAU,EAAE,QAAQ,CAAC,CAACvqC,EAAKgJ,CAAK,IAAM,CACnDwhC,EAAS,aAAa,WAAWxqC,CAAG,EAAGgJ,CAAK,CAAA,CAE7C,EAEIwhC,CAKT,CAEA,qBACE38C,EACAN,EACAnB,EACAk9B,EACAC,EACAkY,EACA8I,EACA,CACM,MAAAC,EAA2B,KAAK,QAAQ,qBAC5C38C,EACAN,EACAnB,EACAk9B,EACAC,EACAkY,CAAA,EAIF,OAAI8I,GACK,OAAA,QAAQA,CAAU,EAAE,QAAQ,CAAC,CAACvqC,EAAKgJ,CAAK,IAAM,CACnDwhC,EAAS,aAAa,WAAWxqC,CAAG,EAAGgJ,CAAK,CAAA,CAE7C,EAEIwhC,CAKT,CAOA,UACE5pC,KAMG9B,EACH,CACI,GAAAA,EAAK,SAAW,EAClB,KAAK,QAAQ,UAAU8B,EAAS,EAAG,CAAC,UAC3B9B,EAAK,SAAW,EAAG,CACtB,MAAAqJ,EAAKrJ,EAAK,CAAC,EACXsJ,EAAKtJ,EAAK,CAAC,EACjB,KAAK,QAAQ,UAAU8B,EAASuH,EAAIC,CAAE,CAAA,SAC7BtJ,EAAK,SAAW,EAAG,CACtB,MAAAqJ,EAAKrJ,EAAK,CAAC,EACXsJ,EAAKtJ,EAAK,CAAC,EACX+pC,EAAK/pC,EAAK,CAAC,EACXgqC,EAAKhqC,EAAK,CAAC,EACjB,KAAK,QAAQ,UAAU8B,EAASuH,EAAIC,EAAIygC,EAAIC,CAAE,CAAA,SACrChqC,EAAK,SAAW,EAAG,CACtB,MAAA4kC,EAAK5kC,EAAK,CAAC,EACX6kC,EAAK7kC,EAAK,CAAC,EACXiqC,EAAKjqC,EAAK,CAAC,EACXkqC,EAAKlqC,EAAK,CAAC,EACXqJ,EAAKrJ,EAAK,CAAC,EACXsJ,EAAKtJ,EAAK,CAAC,EACX+pC,EAAK/pC,EAAK,CAAC,EACXgqC,EAAKhqC,EAAK,CAAC,EACZ,KAAA,QAAQ,UAAU8B,EAAS8iC,EAAIC,EAAIoF,EAAIC,EAAI7gC,EAAIC,EAAIygC,EAAIC,CAAE,CAAA,KAE9D,OAAM,IAAI,MACR,oDAAsDhqC,EAAK,MAAA,EAG/D,OAAI,KAAK,eAAe,KAAK,cAAc,UAAU8B,EAAS,GAAG9B,CAAI,EAC9D,IACT,CAEA,aACE4kC,EAAK,EACLC,EAAK,EACLoF,EAAK,KAAK,OAAO,MACjBC,EAAK,KAAK,OAAO,OACjByB,EACW,CACX,OAAO,KAAK,QAAQ,aAAa/G,EAAIC,EAAIoF,EAAIC,EAAIyB,CAAQ,CAE3D,CAEA,aAAaxb,EAAsB9mB,EAAK,EAAGC,EAAK,EAAG,CACjD,OAAO,KAAK,QAAQ,aAAa6mB,EAAW9mB,EAAIC,CAAE,CAEpD,CAEA,cACEymB,EAOA0a,EACsB,CACtB,OAAO,KAAK,QAAQ,cAAc1a,EAAO0a,CAAU,CAErD,CAEA,UAAW,CACT,GAAI,KAAK,cAAe,CACtB,MAAMmB,EAAwB,KAAK,cAAc,iBAAiB,EAAI,EAChEC,EAAyB,KAAK,cAAc,OAAO,EACzD,MAAO,CAAE,IAAKD,EAAe,QAASC,CAAW,CAAA,KAEjD,OAAO,CAAE,IAAK,GAAI,QAAS,IAAK,CAEpC,CACF,CCvjBO,MAAMyM,CAAM,CAIV,kBAAoB,GACpB,2BAA6B,GAC7B,wBAA0B,GAC1B,oBAAsB,GACtB,wBAA0B,GAC1B,wBAA0B,GAE1B,GACA,MACA,EACA,OASA,MAAiD,CAAA,EACjD,MAAgC,CAAA,EAE/B,YACA,YAEA,GACA,GAEA,QAEA,QACA,QAED,GACA,GACA,GACA,GACA,KAEA,YACA,KAEA,WAAa,IAAIjjC,GAOhB,sBAGD,UAAY,GACZ,WAAa,GACb,EACA,GAEP,YAAYla,EAAwB,CAC7B,KAAA,GAAKk3C,GAAa,CAAC,EACxB,KAAK,MAAQl3C,GAAS,MAEtB,KAAK,QAAQ,CAGX,OAAQ,OACR,KAAM,MAAA,CAEP,EACGA,GAAS,OACN,KAAA,QAAQA,EAAQ,KAAK,EAExBA,GAAS,OACN,KAAA,SAASA,EAAQ,KAAK,EAG7B,KAAK,YAAcA,GAAS,QAC5B,KAAK,YAAcA,GAAS,QAEvB,KAAA,GAAKA,GAAS,GAAK,EACnB,KAAA,GAAKA,GAAS,GAAK,EAEnB,KAAA,QAAUA,GAAS,QAAU,EAElC,KAAK,QAAU,EACf,KAAK,QAAU,EACXA,GAAS,QAAU,SACrB,KAAK,QAAUA,EAAQ,MACvB,KAAK,QAAUA,EAAQ,OAErBA,GAAS,SAAW,SACtB,KAAK,QAAUA,EAAQ,QAErBA,GAAS,SAAW,SACtB,KAAK,QAAUA,EAAQ,QAGpB,KAAA,GAAKA,GAAS,IAAM,EACpB,KAAA,GAAKA,GAAS,IAAM,EACpB,KAAA,GAAKA,GAAS,IAAM,EACpB,KAAA,GAAKA,GAAS,IAAM,EACpB,KAAA,KAAOA,GAAS,MAAQ,EAE7B,KAAK,YACH,OAAOA,GAAS,aAAe,UAAYA,GAAS,YAAc,GACpE,KAAK,KAAOA,GAAS,KAsBrB,KAAK,sBAAwB,KAAK,WAAW,UAAU,IAAM,CAE3D,KAAK,2BAA6B,GAClC,KAAK,oBAAsB,EAAA,CAC5B,CACH,CAEO,SAAU,CACf,KAAK,sBAAsB,aAC7B,CAGO,OAAO1K,EAAWF,EAAW,CAClC,MAAMimE,EAAQ,KAAK,GACbC,EAAQ,KAAK,IACfD,IAAU/lE,GAAKgmE,IAAUlmE,KAC3B,KAAK,GAAKE,EACV,KAAK,GAAKF,EACL,KAAA,WAAW,KAAK,CAAE,GAAIE,EAAI+lE,EAAO,GAAIjmE,EAAIkmE,CAAA,CAAO,EAEzD,CACO,KAAKptD,EAAYC,EAAK,EAAG,CAC9B,KAAK,OAAO,KAAK,GAAKD,EAAI,KAAK,GAAKC,CAAE,CACxC,CACO,QAAQ7Y,EAAW,CACnB,KAAA,OAAOA,EAAG,KAAK,EAAE,CACxB,CACO,MAAM4Y,EAAY,CACvB,KAAK,OAAO,KAAK,GAAKA,EAAI,KAAK,EAAE,CACnC,CACO,QAAQ9Y,EAAW,CACnB,KAAA,OAAO,KAAK,GAAIA,CAAC,CACxB,CACO,MAAM+Y,EAAY,CACvB,KAAK,OAAO,KAAK,GAAI,KAAK,GAAKA,CAAE,CACnC,CACA,IAAW,GAAY,CACrB,OAAO,KAAK,EACd,CAEA,IAAW,EAAE/C,EAAW,CAClB,KAAK,KAAOA,IACd,KAAK,WAAW,KAAK,CAAE,GAAIA,EAAI,KAAK,GAAI,EACxC,KAAK,GAAKA,EAEd,CACA,IAAW,GAAY,CACrB,OAAO,KAAK,EACd,CAEA,IAAW,EAAEA,EAAW,CAClB,KAAK,KAAOA,IACd,KAAK,WAAW,KAAK,CAAE,GAAIA,EAAI,KAAK,GAAI,EACxC,KAAK,GAAKA,EAEd,CAEO,SAASk4B,EAAgB,CAC1B,KAAK,UAAYA,IACnB,KAAK,WAAW,KAAK,CAAE,QAASA,EAAS,KAAK,QAAS,EACvD,KAAK,QAAUA,EAEnB,CACO,OAAOA,EAAgB,CACvB,KAAA,SAAS,KAAK,QAAUA,CAAM,CACrC,CACA,IAAW,QAAiB,CAC1B,OAAO,KAAK,OACd,CAEA,IAAW,OAAOl4B,EAAW,CACvB,KAAK,UAAYA,IACnB,KAAK,WAAW,KAAK,CAAE,QAASA,EAAI,KAAK,QAAS,EAClD,KAAK,QAAUA,EAEnB,CAEO,QAAQw2C,EAAgBC,EAAiB,CAC9C,MAAMijB,EAAa,KAAK,QAClBC,EAAa,KAAK,SACpB,KAAK,UAAYnjB,GAAU,KAAK,WAAaC,GAAUD,MACzD,KAAK,QAAUA,EACf,KAAK,QAAUC,GAAUD,EACzB,KAAK,WAAW,KAAK,CACnB,QAAS,KAAK,QAAUkjB,EACxB,QAAS,KAAK,QAAUC,CAAA,CACzB,EAEL,CACO,MAAMnjB,EAAgBC,EAAiB,CAC5C,KAAK,QAAQ,KAAK,QAAUD,EAAQ,KAAK,SAAWC,GAAUD,EAAO,CACvE,CACA,IAAW,QAAiB,CAC1B,OAAO,KAAK,OACd,CAEA,IAAW,OAAOx2C,EAAW,CACvB,KAAK,UAAYA,IACnB,KAAK,WAAW,KAAK,CACnB,QAASA,EAAI,KAAK,OAAA,CACnB,EACD,KAAK,QAAUA,EAEnB,CACA,IAAW,QAAiB,CAC1B,OAAO,KAAK,OACd,CAEA,IAAW,OAAOA,EAAW,CACvB,KAAK,UAAYA,IACnB,KAAK,WAAW,KAAK,CACnB,QAASA,EAAI,KAAK,OAAA,CACnB,EACD,KAAK,QAAUA,EAEnB,CAGO,MAAMmH,EAAsB,CACjC,OAAIA,GACF,KAAK,EAAIA,EACT,KAAK,2BAA6B,GAClC,KAAK,wBAA0B,IACtB,KAAK,MAET,KAAK,IACH,KAAA,EACH,KAAK,iBAAiBmmC,GAAQ,KAAK,MAAQ,IAAIA,GAAM,KAAK,KAAK,IAK/D,CAAC,KAAK,GAAK,KAAK,qBAElB,KAAK,EAAI,IAAIA,GAAM,KAAK,cAAe,CAAA,EACvC,KAAK,kBAAoB,GACzB,KAAK,2BAA6B,GAClC,KAAK,wBAA0B,IAG5B,KAAK,CACd,CAEU,uBACH,gBAAwB,CACzB,GAAA,CAAC,KAAK,EAAG,CAGX,KAAM,CAAE,EAAGzI,EAAS,EAAGC,GAAY,KAAK,kBACxC,IAAI80B,EAAc,EACdC,EAAc,EAEhB,GAAA,KAAK,QAAQ,SACb,KAAK,QAAQ,UAAY,GACzB,KAAK,QAAQ,UAAY,EACzB,CACM,MAAAC,EAAM,KAAK,gBAAgB,EAAI,EACrCF,EAAcE,EAAI,EAClBD,EAAcC,EAAI,CACpB,CAEM,MAAAp3E,EAAI,IAAI6rD,GAEZ7rD,EAAA,UACA,KAAK,GAAK,KAAK,QAAQ,IAAM,GAC7B,KAAK,GAAK,KAAK,QAAQ,IAAM,EAAA,EAE/BA,EAAE,OAAO,KAAK,OAAQmiD,EAASC,CAAO,EACtCpiD,EAAE,MAAM,KAAK,OAAQ,KAAK,OAAQmiD,EAASC,CAAO,EAE9C,KAAK,QAAQ,SACfpiD,EAAE,OAAO,KAAK,OAAO,QAASk3E,EAAaC,CAAW,GAEpD,KAAK,QAAQ,UAAY,GAAK,KAAK,QAAQ,UAAY,IACvDn3E,EAAA,MACA,KAAK,QAAQ,SAAW,EACxB,KAAK,QAAQ,SAAW,EACxBk3E,EACAC,CAAA,EAIJ,KAAK,EAAIn3E,CACX,CACA,OAAI,KAAK,4BAA8B,CAAC,KAAK,0BACtC,KAAA,uBAAyB,KAAK,MAAM,EAAE,UAAU,CAAE,EAAG,KAAK,CAAA,CAAG,EAClE,KAAK,2BAA6B,IAE7B,KAAK,sBACd,CAEO,gBAAiB,CACf,MAAA,CACL,MAAO,KAAK,MAEZ,MAAO,CAAE,GAAG,KAAK,KAAM,EACvB,MAAO,CAAE,GAAG,KAAK,KAAM,EAEvB,QAAS,KAAK,YACd,QAAS,KAAK,YAEd,EAAG,KAAK,GACR,EAAG,KAAK,GAER,OAAQ,KAAK,QAEb,OAAQ,KAAK,QACb,OAAQ,KAAK,QAEb,GAAI,KAAK,GACT,GAAI,KAAK,GACT,GAAI,KAAK,GACT,GAAI,KAAK,GACT,KAAM,KAAK,KAEX,YAAa,KAAK,YAClB,KAAM,CAAE,GAAG,KAAK,IAAK,CAAA,CAEzB,CAEO,OAAQ,CAKN,OAJO,KAAK,YAKrB,CAGU,YAAa,CACrB,OAAO,IAAIqvD,EAAM,KAAK,eAAgB,CAAA,CACxC,CAGO,OAAOn9C,EAAiC,CAC7C,KAAK,kBAAoB,EAC3B,CAIO,SAA6B,CAE3B,OAAA,IACT,CAIO,eAAqC,CAE1C,MAAO,EACT,CAIO,YAAqB,CACnB,OAAA,KAAK,QAAQ,YACtB,CAMO,gBAAgB80B,EAA4B,CAC5C,KAAA,MAAA,EAAQ,gBAAgBA,CAAG,CAClC,CAIO,sBAAsB+e,EAAM,EAAG,CACpC,OAAO,KAAK,MAAA,EAAQ,sBAAsBA,CAAG,CAC/C,CAGO,0BAA0BA,EAAM,EAAG,CACxC,OAAO,KAAK,eAAA,EAAiB,sBAAsBA,CAAG,CACxD,CAGO,4BAA4BA,EAAM,EAAG,CAC1C,OAAO,KAAK,MAAA,EAAQ,4BAA4BA,CAAG,CACrD,CAGO,gCAAgCA,EAAM,EAAG,CAC9C,OAAO,KAAK,eAAA,EAAiB,4BAA4BA,CAAG,CAC9D,CAIO,gBAAgBsxB,EAAY,GAAOtxB,EAAM,EAA6B,CAC3E,IAAIv+C,EAAI,EACJF,EAAI,EACJ,GAAA,KAAK,QAAU,CAAC+vE,EAAW,CAC7B,MAAMC,EACJ,KAAK,OAAO,MAAM,4BAA4BvxB,CAAG,EAC/Cv+C,EAAA8vE,EAAiB,EAAI,KAAK,OAAO,GACjChwE,EAAAgwE,EAAiB,EAAI,KAAK,OAAO,EAAA,SAGnC,OAAO,KAAK,YAAe,KAC3B,OAAO,KAAK,YAAe,IAC3B,CAEM,MAAAC,EAAiB,KAAK,4BAA4BxxB,CAAG,EAC3Dv+C,EAAI+vE,EAAe,EACnBjwE,EAAIiwE,EAAe,CAAA,MAGnB/vE,EAAI,KAAK,aAAe,EACxBF,EAAI,KAAK,aAAe,EAGrB,MAAA,CAAE,EAAAE,EAAG,EAAAF,EACd,CAEO,cACL0/B,EACAx/B,EACAF,EACS,CAET,GAAI0/B,aAAemnB,GACV,OAAAnnB,EAAI,cAAc,IAAI,OAAO,KAAK,YAAY,EAAGx/B,EAAGF,CAAC,EAG1D,GAAA,KAAK,cAAc,mBAAoB,CAEnC,MAAAqrD,EAAS,KAAK,GAAG,OAAO,EAC9B,GAAIA,EAAQ,CACJ,MAAA6kB,EAAiB7kB,EAAO,UACvB,OAAA,KAAK,GAAG,cAAc,CAC3B,EAAG6kB,EAAe,EAAIhwE,EAAIgwE,EAAe,EAAIlwE,EAAIkwE,EAAe,EAChE,EAAGA,EAAe,EAAIhwE,EAAIgwE,EAAe,EAAIlwE,EAAIkwE,EAAe,CAAA,CACjE,CACH,CAWF,CACO,MAAA,EACT,CAEO,gBACLxwC,EACAx/B,EACAF,EACS,CAET,GAAI0/B,aAAemnB,GACV,OAAAnnB,EAAI,gBAAgB,IAAI,OAAO,KAAK,YAAY,EAAGx/B,EAAGF,CAAC,EAG5D,GAAA,KAAK,cAAc,mBAAoB,CAEnC,MAAAqrD,EAAS,KAAK,GAAG,OAAO,EAC9B,GAAIA,EAAQ,CACJ,MAAA6kB,EAAiB7kB,EAAO,UACvB,OAAA,KAAK,GAAG,gBAAgB,CAC7B,EAAG6kB,EAAe,EAAIhwE,EAAIgwE,EAAe,EAAIlwE,EAAIkwE,EAAe,EAChE,EAAGA,EAAe,EAAIhwE,EAAIgwE,EAAe,EAAIlwE,EAAIkwE,EAAe,CAAA,CACjE,CACH,CAaF,CAEO,MAAA,EACT,CAEO,SAASliE,EAAmC,CAC1C,OAAA,OAAO,KAAK,MAAOA,CAAG,EAC7B,KAAK,wBAA0B,EACjC,CAIO,QACLg5C,EACArtC,EACM,CACF,GAAA,OAAOqtC,GAAc,SACvB,UAAWzlD,KAAKylD,EAAW,CACnB,MAAAhxC,EAAIgxC,EAAUzlD,CAAC,EACjByU,GAAKA,GAAK,KAAK,QAAQzU,CAAC,IAC1B,KAAK,MAAM0lD,GAAQ1lD,CAAC,CAAC,EAAIyU,EACzB,KAAK,wBAA0B,GAEnC,MAEI2D,GAASA,GAAS,KAAK,QAAQqtC,CAAS,IAC1C,KAAK,MAAMC,GAAQD,CAAS,CAAC,EAAIrtC,EACjC,KAAK,wBAA0B,GAGrC,CAOO,QACLzN,EACAyb,EACqC,CAC9B,OAAA,KAAK,MAAMzb,CAAI,GAAK,KAAK,MAAM+6C,GAAQ/6C,CAAI,CAAC,GAAKyb,CAC1D,CAEO,QAAQzb,EAAuB,CACpC,MAAO,CAAC,CAAC,KAAK,QAAQA,CAAI,CAC5B,CAEO,QACLtB,EACA,CAEA,KAAK,IAAM,KAAK,GAChB,KAAK,IAAM,KAAK,GAGV,MAAAu8C,EAAUv8C,GAAS,SAAW,EACpC,KAAK,IAAMu8C,EAiBL,MAAAE,EAAWz8C,GAAS,UAAY,EACtC,KAAK,IAAMy8C,EACX,KAAK,IAAMA,EAEX,KAAK,KAAK,KAAK,GAAI,KAAK,EAAE,CAC5B,CAEO,cACLz+C,EACAgC,EAIA,CACM,MAAA8sB,EAAS9sB,GAAS,QAAU,IAC5BkO,EAAKlQ,EAAO,EAAI,KAAK,EACrBmQ,EAAKnQ,EAAO,EAAI,KAAK,EAC3B,KAAK,GAAKkQ,EAAK4e,EACf,KAAK,GAAK3e,EAAK2e,EACf,KAAK,QAAQ9sB,CAAO,CACtB,CAEO,gBACLhC,EACAgC,EAIA,CACM,MAAA08C,EAAS18C,GAAS,QAAU,KACjC,MAAM,QAAQhC,CAAM,EAAIA,EAAS,CAACA,CAAM,GAAG,QAAS9I,GAAM,CACnD,MAAAgZ,EAAKhZ,EAAE,EAAI,KAAK,EAChBiZ,EAAKjZ,EAAE,EAAI,KAAK,EAChB6zC,EAAK76B,EAAKwuC,EACV1T,EAAK76B,EAAKuuC,EAChB,KAAK,IAAM3T,EACX,KAAK,IAAMC,CAAA,CACZ,EACD,KAAK,QAAQ,CAAE,SAAU,GAAK,GAAGhpC,EAAS,CAC5C,CAEO,qBACLhC,EACAgC,EAIQ,CACF,MAAA28C,EAAe38C,GAAS,cAAgB,IACxC08C,EAAS18C,GAAS,QAAU,KAC5BkO,EAAKlQ,EAAO,EAAI,KAAK,EACrBmQ,EAAKnQ,EAAO,EAAI,KAAK,EACrB+wB,EAAO,KAAK,KAAK7gB,EAAKA,EAAKC,EAAKA,CAAE,EACxC,GAAI4gB,EAAO4tB,EAAc,CACvB,MAAM5T,EAAK76B,EAAKwuC,EACV1T,EAAK76B,EAAKuuC,EACX,YAAA,IAAM3T,EAAK,KAAK,KAChB,KAAA,IAAMC,EAAK,KAAK,KACdhrC,EAAA,IAAM+qC,EAAK/qC,EAAO,KAClBA,EAAA,IAAMgrC,EAAKhrC,EAAO,KAClB,EAAI+wB,EAAO4tB,CACpB,CACO,MAAA,EACT,CAEO,SAAS3+C,EAAkCf,EAAS,EAAG,CAC5D,KAAK,SAASsmC,GAASE,GAAM,KAAK,EAAG,KAAK,EAAGzlC,EAAO,EAAGA,EAAO,CAAC,CAAC,CAAC,EAC3D,KAAA,CAAE,GAAIqqC,EAAI,GAAIC,CAAO,EAAAxE,GAAMT,EAAS,KAAK,MAAM,EAAGpmC,CAAM,EAC9D,KAAK,GAAKorC,EACV,KAAK,GAAKC,EACV,KAAK,QAAQ,CACf,CAEO,qBAAqBtqC,EAAkCf,EAAS,IAAM,CAC3E,KAAK,SAASsmC,GAASE,GAAM,KAAK,EAAG,KAAK,EAAGzlC,EAAO,EAAGA,EAAO,CAAC,CAAC,CAAC,EAC3D,KAAA,CAAE,GAAI+qC,EAAI,GAAIC,CAAO,EAAAlF,GAAMT,EAAS,KAAK,MAAM,EAAGpmC,CAAM,EAC9D,KAAK,GAAK8rC,EACV,KAAK,GAAKC,EACV,KAAK,QAAQ,CACf,CAGO,YAAYhrC,EAAe,CAC1B,MAAAkQ,EAAKlQ,EAAO,EAAI,KAAK,EACrBmQ,EAAKnQ,EAAO,EAAI,KAAK,EACrBs+C,EAASpuC,EAAKA,EAAKC,EAAKA,EACxB4gB,EAAO,KAAK,KAAKutB,CAAM,EACvB/pC,EAAS,KAAK,KAAOvU,EAAO,KAAQs+C,EACpCvT,EAAMx2B,EAAQrE,EAAM6gB,EACpBia,EAAMz2B,EAAQpE,EAAM4gB,EACrB,KAAA,IAAMga,EAAK,KAAK,KAChB,KAAA,IAAMC,EAAK,KAAK,KACdhrC,EAAA,IAAM+qC,EAAK/qC,EAAO,KAClBA,EAAA,IAAMgrC,EAAKhrC,EAAO,IAC3B,CAGO,eAAeA,EAAe,CAE7B,MAAAkQ,EAAKlQ,EAAO,EAAI,KAAK,EACrBmQ,EAAKnQ,EAAO,EAAI,KAAK,EACrB+wB,EAAO,KAAK,KAAK7gB,EAAKA,EAAKC,EAAKA,CAAE,EAClC,CACJ,EAAGk4C,EACH,EAAGC,EACH,MAAOif,EACP,OAAQC,CAAA,EACNxnE,EAAO,wBACL,CAAE,EAAGynE,EAAe,EAAGC,GAC3B1nE,EAAO,8BACH,CAAE,EAAA1I,EAAG,EAAAF,EAAG,MAAA6gC,EAAO,OAAAC,GAAW,KAAK,wBAC/B,CAAE,EAAG+Z,EAAS,EAAGC,GAAY,KAAK,8BAGtC,GAAAnhB,EAAO,KAAK,IAAI02C,EAAgBpf,CAAO,EAAI,KAAK,IAAIpW,EAAU36C,CAAC,GAC/Dy5B,EAAO,KAAK,IAAI22C,EAAgBpf,CAAO,EAAI,KAAK,IAAIpW,EAAU96C,CAAC,EAC/D,CACA,MAAMouC,EAAS,KAAK,MAAMr1B,EAAID,CAAE,EAE1By3D,EAAO,CAAE,EAAG,EAAG,EAAG,CAAE,EAEpBC,EAAOpoB,GAAY,CAACha,EAAQt1B,EAAIC,CAAE,EAElC03D,EAAOroB,GAAY,CAACha,EAAQ,KAAK,GAAI,KAAK,EAAE,EAE5CsiC,EAAOtoB,GAAY,CAACha,EAAQxlC,EAAO,GAAIA,EAAO,EAAE,EAEhD+nE,EAAUF,EAAK,EAAIC,EAAK,EAC9BD,EAAK,IACD,KAAK,KAAO7nE,EAAO,MAAQ6nE,EAAK,EAAI,EAAI7nE,EAAO,KAAO8nE,EAAK,IAC5D,KAAK,KAAO9nE,EAAO,MACjB8nE,EAAA,EAAIC,EAAUF,EAAK,EAElB,MAAAG,EAAO,KAAK,IAAIH,EAAK,CAAC,EAAI,KAAK,IAAIC,EAAK,CAAC,EACzCG,EACJ,KAAK,WAAajoE,EAAO,WAAa,KAAK,IAAI2nE,EAAK,EAAIC,EAAK,CAAC,EAC3DD,EAAA,GAAME,EAAK,EAAIG,EAAQC,EACvBL,EAAA,GAAME,EAAK,EAAIE,EAAQC,EAE5B,MAAMC,EAAQ1oB,GAAYha,EAAQmiC,EAAK,EAAGA,EAAK,CAAC,EAC1CQ,EAAQ3oB,GAAYha,EAAQoiC,EAAK,EAAGA,EAAK,CAAC,EAEzC5nE,EAAA,OAAO,KAAK,EAAImoE,EAAM,EAAG,KAAK,EAAIA,EAAM,CAAC,EAC3C,KAAA,OAAO,KAAK,EAAID,EAAM,EAAG,KAAK,EAAIA,EAAM,CAAC,EAE9C,MAAME,EAAQ5oB,GAAYha,EAAQqiC,EAAK,EAAGA,EAAK,CAAC,EAC1CQ,EAAQ7oB,GAAYha,EAAQsiC,EAAK,EAAGA,EAAK,CAAC,EAChD,KAAK,GAAKM,EAAM,EAChB,KAAK,GAAKA,EAAM,EAChBpoE,EAAO,GAAKqoE,EAAM,EAClBroE,EAAO,GAAKqoE,EAAM,CACpB,CACF,CAGO,UAAUrmE,EAAuC,CAElD,GAAA,CAACA,GAAS,KACZ,OAEI,MAAAsmE,EACJ,OAAOtmE,EAAQ,KAAK,QAAU,SAAWA,EAAQ,KAAK,OAAS,GAC3Dk5B,EAAOl5B,EAAQ,KAAK,EACpBi5B,EAAMj5B,EAAQ,KAAK,EACnBy7C,EAAQz7C,EAAQ,KAAK,EAAIA,EAAQ,KAAK,MACtCmkD,EAASnkD,EAAQ,KAAK,EAAIA,EAAQ,KAAK,OACvC,CAAE,EAAA1K,EAAG,EAAAF,EAAG,MAAA6gC,EAAO,OAAAC,GAAW,KAAK,wBAErBl2B,EAAQ,KAAK,OAAS,IAiChC,KAAK,EAAI1K,EAAImmD,EACV,KAAA,QAAQviB,GAAQ5jC,EAAI2gC,EAAM,EACtB,KAAK,EAAI3gC,EAAI2gC,EAAQiD,GACzB,KAAA,QAAQuiB,EAAQnmD,CAAC,EAEpB,KAAK,EAAIF,EAAI+uD,EACV,KAAA,QAAQlrB,GAAO7jC,EAAI8gC,EAAO,EACtB,KAAK,EAAI9gC,EAAI8gC,EAAS+C,GAC1B,KAAA,QAAQkrB,EAAS/uD,CAAC,IAtCrB,KAAK,EAAIE,EAAI2gC,EAAQwlB,GAClB,KAAA,QAAQA,GAASnmD,EAAI2gC,EAAM,EAChC,KAAK,IAAMqwC,GACF,KAAK,EAAIhxE,EAAI4jC,IACjB,KAAA,QAAQA,GAAQ5jC,EAAI2gC,EAAM,EAC/B,KAAK,IAAMqwC,GAET,KAAK,EAAIlxE,EAAI8gC,EAASiuB,GACnB,KAAA,QAAQA,GAAU/uD,EAAI8gC,EAAO,EAClC,KAAK,IAAMowC,GACF,KAAK,EAAIlxE,EAAI6jC,IACjB,KAAA,QAAQA,GAAO7jC,EAAI8gC,EAAO,EAC/B,KAAK,IAAMowC,GA6BjB,CAGO,gBAAyB,CACvB,OAAA,KAAK,iBAAiB,gBAC/B,CAIO,iBAAiBrpE,EAItB,CACA,OAAO,KAAK,eAAA,EAAiB,iBAAiBA,CAAM,CACtD,CAIO,YAAY,EAAqC,CACtD,OAAO,KAAK,eAAA,EAAiB,YAAY,CAAC,CAC5C,CAGO,UAAUspE,EAAK,EAAG59E,EAAK,EAAG,CACzB,MAAAyyD,EAAc,KAAK,iBACnB8oB,EAAaqC,EAAKnrB,EAClB+oB,EAAWx7E,EAAKyyD,EACf,MAAA,CACL,SAAU,KAAK,eAAA,EAAiB,YAAY8oB,EAAYC,CAAQ,EAChE,MAAO,KAAK,iBAAiBA,CAAQ,CAAA,CAEzC,CAGO,gBAAgBpxC,EAAgB,IAAM/yB,EAA2B,CAEtE,MAAMo7C,EAAc,KAAK,MAAM,EAAE,eAAe,EAChD,KAAK,QAAQ,CACX,gBAAiB,GAAGA,CAAW,IAAIA,CAAW,GAC9C,iBAAkB,GAAGA,CAAW,EAAA,CACjC,EACD,MAAM2B,EAAe/8C,GAAS,SACxBg9C,EAAK,IAAIzqB,GAAS,CAAE,cAAAQ,CAAe,CAAA,EACtCiqB,EAAA,SACD,CAAE,OAAQ5B,CAAY,EACtB,CAAE,OAAQ,CAAE,EACZ,OAAO,OAAOp7C,GAAW,GAAI,CAC3B,SAAU,CAACi9C,EAAoBtrB,IAAoB,CACjD,KAAK,QAAQ,mBAAoB,GAAK6pB,EAAayB,EAAO,OAAQ,CAAC,CAAC,EACpEF,IAAeE,EAAQtrB,CAAO,CAChC,CAAA,CACD,CAAA,EAEHqrB,EAAG,KAAK,CACV,CAGA,OAAc,gBACZ1nD,EACAF,EACA68C,EACAC,EACAzsD,EACO,CACP,GAAIA,GAAK,EACD,MAAA,IAAI,MAAM,6BAA6B,EAE/C,MAAMszD,EAAa,CAAA,EACbtV,EAAQ,IAAMh+C,EACpB,QAAS+E,EAAI,EAAGA,EAAI/E,EAAG+E,GAAK,EAAG,CAE7B,MAAMy9C,EAASxE,EAAQj5C,EAAI,KAAK,GAAM,IAEhC0jB,EAAK5Y,EAAI,EAAI28C,EAAK,KAAK,IAAIhK,CAAK,EAChC95B,EAAK/Y,EAAI,EAAI68C,EAAK,KAAK,IAAIhK,CAAK,EAChC8Q,EAAA,KACJ,IAAIC,GAAI,CACN,EAAA1jD,EACA,EAAAF,EACA,GAAA68C,EACA,GAAAC,EACA,YAAazO,EAAQj5C,EACrB,aAAc,EACd,UAAW,EACX,IAAK0jB,EACL,IAAKC,CAAA,CACN,CAAA,EAEG4qC,EAAA,KACJ,IAAIC,GAAI,CACN,EAAG9qC,EACH,EAAGC,EACH,GAAA8jC,EACA,GAAAC,EACA,YAAazO,EAAQj5C,EACrB,aAAc,EACd,UAAW,EACX,IAAK8K,EACL,IAAKF,CAAA,CACN,CAAA,CAEL,CACO,OAAA,IAAI+nD,EAAM,CAAE,MAAOzE,GAAM,UAAUK,CAAK,EAAG,CACpD,CACF,CASO,MAAMytB,EAAW,CACf,OAAkB,CAAA,EAElB,IACA,WAEA,MAAiD,CAAA,EACjD,MAAgC,CAAA,EAEhC,YACA,YAEA,EACA,EAEA,OAEA,OACA,OAEA,YACA,KAEP,YAAYxmE,EAA6B,CAsCvC,GArCA,KAAK,YAAcA,GAAS,QAC5B,KAAK,YAAcA,GAAS,QAEvB,KAAA,EAAIA,GAAS,GAAK,EAClB,KAAA,EAAIA,GAAS,GAAK,EAElB,KAAA,OAASA,GAAS,QAAU,EAEjC,KAAK,OAAS,EACd,KAAK,OAAS,EACVA,GAAS,QAAU,SACrB,KAAK,OAASA,EAAQ,MACtB,KAAK,OAASA,EAAQ,OAEpBA,GAAS,SAAW,SACtB,KAAK,OAASA,EAAQ,QAEpBA,GAAS,SAAW,SACtB,KAAK,OAASA,EAAQ,QAGpBA,GAAS,OACN,KAAA,QAAQA,EAAQ,KAAK,EAExBA,GAAS,OACN,KAAA,SAASA,EAAQ,KAAK,EAI7B,KAAK,YACH,OAAOA,GAAS,aAAe,UAAYA,GAAS,YAAc,GACpE,KAAK,KAAOA,GAAS,KAErB,KAAK,IAAMA,GAAS,IACpB,KAAK,WAAaA,GAAS,WAGvBA,GAAS,IAAK,CAEhB,KAAK,YAAc,EACnB,KAAK,YAAc,EACnB,IAAIymE,EAAW,EACXC,EAAY,EACZzwC,EAAQ,EACRC,EAAS,EACb,MAAMsU,EAAQ,IAAIm8B,GAAS3mE,EAAQ,GAAG,EAAE,QACxC,QAAS3Y,EAAI,EAAGwjC,EAAQ2f,EAAM,OAAQnjD,EAAIwjC,EAAOxjC,IAAK,CAC9C,MAAAirB,EAAOk4B,EAAMnjD,CAAC,EAEpB,GAAIirB,EAAK,MAAQ,WAAaA,EAAK,OAASA,EAAK,OAAQ,CAGvD,GAFWm0D,EAAA,WAAWn0D,EAAK,KAAK,EACpBo0D,EAAA,WAAWp0D,EAAK,MAAM,EAC9BtS,EAAQ,WAAY,CACtB,MAAM4mE,EAAcH,EAAWC,EAC/BzwC,EAAQj2B,EAAQ,WAChBk2B,EAASD,EAAQ2wC,CAAA,MAET3wC,EAAAwwC,EACCvwC,EAAAwwC,EAEX,QACF,CAMA,GAHIp0D,EAAK,MAAQ,QAGb,CAACktD,GAAUltD,EAAK,IAAI,EACtB,SAGF,MAAM0kC,EAAgC,CAAA,EACtC,UAAWjxC,KAAOuM,EACZvM,IAAQ,QAAUA,IAAQ,QAAUA,IAAQ,cAG1CixC,EAAAjxC,CAAG,EAAIuM,EAAKvM,CAAG,GAGvB,MAAM8gE,EAAYlH,GAAkBD,GAAaptD,EAAK,IAAI,CAAC,EAErD9qB,EAA4B,CAAA,EAClC,IAAIyG,EAAyB,CAAA,EAC7B,QAAShC,EAAI,EAAG66E,EAAWD,EAAU,OAAQ56E,EAAI66E,EAAU76E,IAAK,CACxD,MAAA4mB,EAAOg0D,EAAU56E,CAAC,EACxBgC,EAAE,KAAK4kB,CAAI,EAEPA,EAAK,CAAC,EAAE,YAAA,GAAiB,MAC3BrrB,EAAG,KAAKyG,CAAC,EACTA,EAAI,CAAA,EAER,CACIA,EAAE,QACJzG,EAAG,KAAKyG,CAAC,EAERzG,EAAA,QAASyG,GAAM,CACV,MAAAkuD,EAAQ,IAAIgB,EAAM,CACtB,MAAAnG,EACA,MAAO/oD,CAAA,CACR,EACD,GAAIqkB,EAAK,UAAW,CAEZ,MAAArrB,EADS4/D,GAAuBv0C,EAAK,SAAS,EACnC,QACjB6pC,EAAM,OAAOl1D,EAAE,EAAGA,EAAE,CAAC,EACfk1D,EAAA,SAASl1D,EAAE,MAAM,EACvBk1D,EAAM,QAAQl1D,EAAE,OAAQA,EAAE,MAAM,CAClC,CACA,KAAK,SAASk1D,CAAK,CAAA,CACpB,CACH,CAEIlmB,GAASwwC,GAAYvwC,GAAUwwC,GACjC,KAAK,WAAWzwC,EAAQwwC,EAAUvwC,EAASwwC,EAAW,EAAI,CAE9D,CACF,CAEO,SAAU,CACf,KAAK,OAAO,QAASz/E,GAAMA,EAAE,SAAS,CACxC,CAEO,gBAAiB,CACf,MAAA,CACL,IAAK,KAAK,IACV,WAAY,KAAK,WAEjB,MAAO,CAAE,GAAG,KAAK,KAAM,EACvB,MAAO,CAAE,GAAG,KAAK,KAAM,EAEvB,QAAS,KAAK,YACd,QAAS,KAAK,YAEd,EAAG,KAAK,EACR,EAAG,KAAK,EAER,OAAQ,KAAK,OAEb,OAAQ,KAAK,OACb,OAAQ,KAAK,OAEb,YAAa,KAAK,YAClB,KAAM,CAAE,GAAG,KAAK,IAAK,CAAA,CAEzB,CAEO,OAAQ,CACP,MAAA8/E,EAAa,KAAK,kBAGxB,OAAAA,EAAW,OAAS,KAAK,OAAO,IAAK9/E,GAAM,CAEnC,MAAAuD,EAAIvD,EAAE,QACZ,OAAIA,EAAE,SACJuD,EAAE,OAAS,CAAE,GAAGvD,EAAE,OAAQ,MAAO8/E,IAE5Bv8E,CAAA,CACR,EAEMu8E,CACT,CAGU,iBAAkB,CAC1B,OAAO,IAAIP,GAAW,KAAK,eAAgB,CAAA,CAC7C,CAGO,OAAOxmE,EAAsC,CAClD,KAAK,OAAO,QAAS/Y,GAAMA,EAAE,OAAO+Y,CAAO,CAAC,CAC9C,CAEO,SACLm8C,EACAn8C,EAQA,CACIA,GAAS,mBAAqB,KAC1Bm8C,EAAA,QAAQ,KAAK,KAAK,EAClBA,EAAA,SAAS,KAAK,KAAK,EACnBA,EAAA,YAAcA,EAAM,aAAe,KAAK,YAC9CA,EAAM,KAAO,CAAE,GAAG,KAAK,KAAM,GAAGA,EAAM,OAExCA,EAAM,OAAS,CACb,MAAO,KACP,GAAIn8C,GAAS,IAAM,EACnB,GAAIA,GAAS,IAAM,EACnB,QAASA,GAAS,SAAW,EAC7B,QAASA,GAAS,SAAW,EAC7B,QAASA,GAAS,SAAW,CAAA,EAE1B,KAAA,OAAO,KAAKm8C,CAAK,CACxB,CAEO,UAAUjuC,EAAYC,EAAY64D,EAAY,GAAO,CACrDA,IACH,KAAK,GAAK94D,EACV,KAAK,GAAKC,GAEP,KAAA,OAAO,QAASlnB,GAAM,CACvBA,EAAA,KAAKinB,EAAIC,CAAE,CAAA,CACd,CACH,CACO,YAAYm1B,EAAgB0jC,EAAY,GAAO,CAC/CA,IACH,KAAK,QAAU1jC,GAEZ,KAAA,OAAO,QAASr8C,GAAM,CACzBA,EAAE,OAAOq8C,CAAM,CAAA,CAChB,CACH,CACO,WAAWse,EAAgBC,EAAiBmlB,EAAY,GAAO,CAC/DA,IACH,KAAK,QAAUplB,EACf,KAAK,QAAUC,GAAUD,GAEtB,KAAA,OAAO,QAAS36D,GAAM,CACvBA,EAAA,MAAM26D,EAAQC,CAAM,CAAA,CACvB,CACH,CAEO,eACL7hD,EAQAgnE,EAAY,GACZ,EACI,OAAOhnE,GAAS,GAAK,UAAY,OAAOA,GAAS,GAAK,WACxD,KAAK,UAAUA,GAAS,GAAK,EAAGA,GAAS,GAAK,EAAGgnE,CAAS,EAExD,OAAOhnE,GAAS,QAAU,UAC5B,KAAK,YAAYA,GAAS,QAAU,EAAGgnE,CAAS,GAGhD,OAAOhnE,GAAS,OAAS,UACzB,OAAOA,GAAS,QAAU,UAC1B,OAAOA,GAAS,QAAU,WAErB,KAAA,WACHA,GAAS,QAAUA,GAAS,OAAS,EACrCA,GAAS,QAAUA,GAAS,OAAS,EACrCgnE,CAAA,CAGN,CAIO,sBAAsBnzB,EAAM,EAAG,CACpC,MAAMr5C,EAAc,CAAA,EACdrS,EAAc,CAAA,EAMpB,GALK,KAAA,OAAO,QAASlB,GAAM,CACnB,MAAA+mD,EAAO/mD,EAAE,sBAAsB4sD,CAAG,EACxCr5C,EAAE,KAAKwzC,EAAK,EAAGA,EAAK,EAAIA,EAAK,KAAK,EAClC7lD,EAAE,KAAK6lD,EAAK,EAAGA,EAAK,EAAIA,EAAK,MAAM,CAAA,CACpC,EACGxzC,EAAE,QAAU,GAAKrS,EAAE,QAAU,EACxB,MAAA,CAAE,EAAG,EAAG,EAAG,EAAG,MAAO,EAAG,OAAQ,GAEzC,MAAMoxD,EAAO,KAAK,IAAI,GAAG/+C,CAAC,EACpBg/C,EAAO,KAAK,IAAI,GAAGrxD,CAAC,EACpBsxD,EAAO,KAAK,IAAI,GAAGj/C,CAAC,EACpBk/C,EAAO,KAAK,IAAI,GAAGvxD,CAAC,EACnB,MAAA,CACL,EAAGqzD,EAAajC,EAAM1F,CAAG,EACzB,EAAG2H,EAAahC,EAAM3F,CAAG,EACzB,MAAO2H,EAAa/B,EAAOF,EAAM1F,CAAG,EACpC,OAAQ2H,EAAa9B,EAAOF,EAAM3F,CAAG,CAAA,CAEzC,CAGO,4BAA4BA,EAAM,EAA6B,CACpE,GACE,OAAO,KAAK,aAAe,UAC3B,OAAO,KAAK,aAAe,SAG3B,MAAO,CAAE,EAAG,KAAK,YAAa,EAAG,KAAK,aAElC,MAAA7F,EAAO,KAAK,sBAAsB6F,CAAG,EACpC,MAAA,CACL,EAAG2H,EAAaxN,EAAK,EAAIA,EAAK,MAAQ,GAAK6F,CAAG,EAC9C,EAAG2H,EAAaxN,EAAK,EAAIA,EAAK,OAAS,GAAK6F,CAAG,CAAA,CAEnD,CAEO,SAASzwC,EAAmC,CAC1C,OAAA,OAAO,KAAK,MAAOA,CAAG,EACxB,KAAA,OAAO,QAASnc,GAAM,CACzBA,EAAE,SAASmc,CAAG,CAAA,CACf,CACH,CAIO,QACLg5C,EACArtC,EACA,CACI,GAAA,OAAOqtC,GAAc,SAAU,CACjC,UAAWzlD,KAAKylD,EAAW,CACnB,MAAAhxC,EAAIgxC,EAAUzlD,CAAC,EACjByU,GAAKA,GAAK,KAAK,QAAQzU,CAAC,IAC1B,KAAK,MAAM0lD,GAAQ1lD,CAAC,CAAC,EAAIyU,EAE7B,CACK,KAAA,OAAO,QAASnkB,GAAM,CACzBA,EAAE,QAAQm1D,CAAS,CAAA,CACpB,CAAA,MAEGrtC,GAASA,GAAS,KAAK,QAAQqtC,CAAS,IAC1C,KAAK,MAAMC,GAAQD,CAAS,CAAC,EAAIrtC,EAC5B,KAAA,OAAO,QAAS9nB,GAAM,CACvBA,EAAA,QAAQm1D,EAAWrtC,CAAK,CAAA,CAC3B,EAGP,CAOO,QACLzN,EACAyb,EACqC,CAC9B,OAAA,KAAK,MAAMzb,CAAI,GAAK,KAAK,MAAM+6C,GAAQ/6C,CAAI,CAAC,GAAKyb,CAC1D,CAEO,QAAQzb,EAAuB,CACpC,MAAO,CAAC,CAAC,KAAK,QAAQA,CAAI,CAC5B,CAGO,MAAa,CACb,KAAA,OACF,IAAK66C,IACG,CACL,MAAAA,EACA,UAAWA,EAAM,eAAe,EAAE,4BAA4B,CAAA,EAEjE,EACA,KAAK,CAACnsD,EAAGyE,IAAMA,EAAE,UAAYzE,EAAE,SAAS,EACxC,IAAKA,GAAMA,EAAE,KAAK,CACvB,CAEO,SAASi3E,EAA0B,CAClC,MAAAC,EAAWD,EAAO,OAAO,OACzBE,EAAW,KAAK,OAAO,OAC7B,GAAID,EAAWC,EACN,OAAAF,EAAO,SAAS,IAAI,EAE7B,QAAS,EAAIE,EAAU,EAAID,EAAU,IAAK,CAClC,MAAA/qB,EAAQ8qB,EAAO,OAAO,CAAC,EAOxB,KAAA,SACH,IAAI9pB,EAAM,CACR,MAAOhB,EAAM,MAAM,EAAE,MAAM,CAAA,CAC5B,EACD,CACE,GAAIA,EAAM,EAAI,KAAK,EACnB,GAAIA,EAAM,EAAI,KAAK,EACnB,QAASA,EAAM,OAAS,KAAK,OAC7B,QAASA,EAAM,OAAS,KAAK,OAC7B,QAASA,EAAM,OAAS,KAAK,OAC7B,iBAAkB,EACpB,CAAA,CAEJ,CACF,CAEO,gBACLppB,EACA/yB,EAMM,CACN,OAAQA,GAAS,KAAM,CACrB,IAAK,WACH,KAAK,OAAO,QAAQ,CAAC/Y,EAAGI,IAAM,CAC5BJ,EAAE,gBAAgB8rC,EAAe,CAC/B,GAAG/yB,EACH,MAAO3Y,EACP,QAAS,IAAM,CACTA,GAAK,GACP2Y,GAAS,eAAe,CAE5B,EACA,SAAU,IAAM,CACdA,GAAS,gBAAgB,CAC3B,EACA,WAAY,IAAM,CACZ3Y,GAAK,KAAK,OAAO,OAAS,GAC5B2Y,GAAS,kBAAkB,CAE/B,CAAA,CACD,CAAA,CACF,EACD,MACF,IAAK,WACL,QAEE,MAAMg9C,EAAK,IAAIzqB,GAAS,CAAE,cAAAQ,CAAe,CAAA,EAEnCp1B,EAAmB,CAAA,EAEnBC,EAAiB,CAAA,EACvB,KAAK,OAAO,QAAQ,CAAC3W,EAAGI,IAAM,CAE5B,MAAM+zD,EAAcn0D,EAAE,MAAM,EAAE,eAAe,EACxC0W,EAAA,UAAUtW,CAAC,EAAE,EAAI+zD,EACnBx9C,EAAA,UAAUvW,CAAC,EAAE,EAAI,EACpBJ,EAAE,QAAQ,CACR,gBAAiB,GAAGm0D,CAAW,IAAIA,CAAW,GAC9C,iBAAkB,GAAGA,CAAW,EAAA,CACjC,CAAA,CACF,EACE4B,EAAA,SACDr/C,EACAC,EACA,OAAO,OAAOoC,GAAW,GAAI,CAC3B,QAAS,IAAM,CACbA,GAAS,eAAe,CAC1B,EACA,SAAU,CAACi9C,EAAoBtrB,IAAoB,CACjD,UAAWnnC,KAAKyyD,EAAQ,CAChB,MAAAn5C,EAAQsjE,GAAc58E,CAAC,EAAE,OAC1B,KAAA,OAAOsZ,CAAK,EAAE,QACjB,mBACA,GAAK03C,EAAayB,EAAOzyD,CAAC,EAAG,CAAC,CAAA,CAElC,CACAwV,GAAS,gBAAgB,CAC3B,EACA,WAAY,IAAM,CAChBA,GAAS,kBAAkB,CAC7B,CAAA,CACD,CAAA,EAEHg9C,EAAG,KAAK,EACR,KACJ,CACF,CACF,CAGO,SAASqqB,GACdlrB,EACAkb,EACA+M,EAAS,EACT,CACM,MAAAt2E,EAAIu2E,GAAwBD,CAAM,GACpC,CAACt2E,EAAEquD,EAAM,EAAGkb,EAAI,QAAQ,CAAC,GAAK,CAACvpE,EAAEquD,EAAM,EAAGkb,EAAI,QAAQ,CAAC,IACnDlb,EAAA,SAASkb,EAAI,OAAO,CAE9B,CAGgB,SAAAiQ,GACdnrB,EACAn+C,EACAgC,EACA,CACIm8C,EAAM,MAAQA,EAAM,KAAK,QAAU,CAACA,EAAM,YACtCA,EAAA,cAAcn+C,EAAQgC,CAAO,CAEvC,CAGgB,SAAAunE,GACdC,EACAxnE,EACY,CACZ,MAAMynE,EAAqB,CAAA,EACrBC,EAAeF,EAAO,OAC5B,QAAS,EAAI,EAAG,EAAIE,EAAc,IAAK,CAC/B,MAAAzgF,EAAIugF,EAAO,CAAC,EAClB,GAAIxnE,GAAS,aAAc,CAEnB,MAAA28C,EAAe38C,GAAS,cAAgB,IACzC/Y,EAAE,YAEFugF,EAAA,OAAQj/E,GAAOA,EAAG,KAAOtB,EAAE,EAAE,EAC7B,QAASsB,GAAO,CACT,MAAAi7C,EAASC,GAAMx8C,EAAE,EAAGA,EAAE,EAAGsB,EAAG,EAAGA,EAAG,CAAC,EACvCtB,EAAA,gBACA,CACE,EAAGsB,EAAG,EAAI,KAAK,IAAIi7C,CAAM,EAAImZ,EAC7B,EAAGp0D,EAAG,EAAI,KAAK,IAAIi7C,CAAM,EAAImZ,CAC/B,EACA38C,CAAA,CACF,CACD,CACL,MACSA,GAAS,OAEd,EAAI,GACN/Y,EAAE,gBAAgBugF,EAAO,EAAI,CAAC,EAAGxnE,CAAO,EAG1C/Y,EAAE,QAAQ+Y,CAAO,EAKnB,GAHIA,GAAS,MACX/Y,EAAE,UAAU+Y,CAAO,EAGnBA,GAAS,iBACTA,GAAS,6BACTA,GAAS,sBAET,QAAS/T,EAAI,EAAI,EAAGA,EAAIy7E,EAAcz7E,IAChC+T,GAAS,iBACT/Y,EAAA,eAAeugF,EAAOv7E,CAAC,CAAC,EAExB+T,GAAS,6BACT/Y,EAAA,YAAYugF,EAAOv7E,CAAC,CAAC,EAErB+T,GAAS,uBACXynE,EAAO,KAAK,CACVxgF,EAAE,EACFA,EAAE,EACFugF,EAAOv7E,CAAC,EAAE,EACVu7E,EAAOv7E,CAAC,EAAE,EACVhF,EAAE,qBAAqBugF,EAAOv7E,CAAC,EAAG+T,CAAO,CAAA,CAC1C,CAIT,CACO,OAAAynE,CACT,CAEA,SAASE,GAAsBH,EAEpB,CACL,GAAAA,EAAO,OAAS,EACZ,MAAA,IAAI,MAAM,iBAAiB,EAE7B,MAAAI,EAAOJ,EAAO,OAAS,EACvBhgF,EAAK,IAAI,MAAMogF,CAAI,EACzB,QAAS75E,EAAI,EAAGA,EAAI65E,EAAM75E,IAAK,CAC7B,MAAM85E,EAASL,EAAOz5E,CAAC,EAAE,eAAe,EAClC+5E,EAASN,EAAOz5E,EAAI,CAAC,EAAE,eAAe,EACtCg6E,EAAeF,EAAO,qBACtBG,EAAeF,EAAO,qBACtBrD,EACJsD,EAAa,QAAUC,EAAa,OAASD,EAAeC,EAC3DxgF,EAAAuG,CAAC,EAAI2qD,GAAM,gBACZmvB,EAAO,wBAAwBpD,CAAS,EACxCqD,EAAO,wBAAwBrD,CAAS,CAAA,CAE5C,CAEA,MAAMtoB,EAAQ,IAAIgB,EAAM,CAAE,MAAO,EAAI,CAAA,EACrC,OAAQ1yC,GAA0B,CAChC,MAAMxc,EAAIutD,EAAaosB,EAAOn9D,EAAQ,CAAC,EACjCw9D,EAAM,KAAK,IAAI,KAAK,MAAMh6E,CAAC,EAAG25E,EAAO,CAAC,EACtC1yE,EAAIsmD,EAAavtD,EAAIg6E,EAAK,CAAC,EACjC,OAAA9rB,EAAM,MAAM30D,EAAGygF,CAAG,EAAE/yE,CAAC,CAAC,EACtBinD,EAAM,QAAQqrB,EAAOS,EAAM,CAAC,EAAE,KAAK,EAiB5B9rB,CAAA,CAEX,CAEA,SAAS+rB,GAA2BC,EAEpB,CACV,GAAAA,EAAY,OAAS,EACjB,MAAA,IAAI,MAAM,sBAAsB,EAEpC,IAAAC,EACJ,MAAMC,EAAuB,CAAA,EACjBF,EAAA,QAAS39E,GAAM,CACrB89E,IAAAA,EACA99E,aAAag8E,IACf8B,EAAQ99E,EACR89E,EAAM,KAAK,IAEXA,EAAQ,IAAI9B,GACZ8B,EAAM,SAAS99E,CAAC,GAElB69E,EAAO,KAAKC,CAAK,GACb,CAACF,GAAiBA,EAAc,OAAO,OAASE,EAAM,OAAO,UAC/CA,EAAAA,EAClB,CACD,EACD,MAAMC,EAAqB,CAAA,EACpBF,EAAA,QAAQ,CAAC79E,EAAGnD,IAAM,CACnBmD,IAAM49E,GACR59E,EAAE,SAAS49E,CAAa,EAE1B59E,EAAE,OAAO,QAAQ,CAACvD,EAAGgF,IAAM,CACzBs8E,EAAQt8E,CAAC,EAAIs8E,EAAQt8E,CAAC,GAAK,CAAA,EACnBs8E,EAAAt8E,CAAC,EAAE5E,CAAC,EAAIJ,CAAA,CACjB,CAAA,CACF,EACD,MAAMuhF,EAA+C,CAAA,EAC7CD,EAAA,QAASf,GAAW,CACZgB,EAAA,KAAKb,GAAsBH,CAAM,CAAC,CAAA,CACjD,EACK,MAAAc,EAAQ,IAAI9B,GACJ,OAAAgC,EAAA,QAASC,GAAiB,CAChCH,EAAA,SAASG,EAAa,CAAC,CAAC,CAAA,CAC/B,EACOh+D,IACQ+9D,EAAA,QAASC,GAAiB,CACtCA,EAAah+D,CAAM,CAAA,CACpB,EACM69D,EAEX,CAEO,SAASI,GACdlB,EACAz0C,EAAgB,IAChB/yB,EAGoB,CACpB,MAAMyoE,EACJjB,EAAO,UAAWvgF,GAAMA,aAAau/E,EAAU,GAAK,EAChD0B,GAA2BV,CAAM,EACjCG,GAAsBH,CAAiB,EACvCmB,EAAeF,EAAa,CAAC,EAC7B1rB,EAAe/8C,GAAS,SACxBg9C,EAAK,IAAIzqB,GAAS,CAAE,cAAAQ,CAAe,CAAA,EACtC,OAAAiqB,EAAA,SACD,CAAE,EAAG,CAAE,EACP,CAAE,EAAG,CAAE,EACP,OAAO,OAAOh9C,GAAW,GAAI,CAC3B,SAAU,CAACi9C,EAAoBtrB,IAAoB,CACjDorB,IAAeE,EAAQtrB,CAAO,EAC9B82C,EAAaxrB,EAAO,CAAC,EACZj9C,GAAA,eAAe2oE,EAAc1rB,EAAO,CAAC,CAChD,CAAA,CACD,CAAA,EAEHD,EAAG,KAAK,EACD2rB,CACT,CCpsDO,MAAMC,GAAsC,CACjD,EAAG,OACH,EAAG,QACH,EAAG,QACH,EAAG,SACH,EAAG,SACH,EAAG,SACH,EAAG,QACH,EAAG,SACH,EAAG,SACH,GAAI,QACJ,GAAI,SACJ,GAAI,SACJ,GAAI,SACJ,GAAI,SACJ,GAAI,QACJ,GAAI,SACJ,GAAI,QACJ,GAAI,SACJ,GAAI,QACJ,GAAI,SACJ,EAAG,SACH,UAAW,SACX,aAAc,SACd,KAAM,MACN,WAAY,QACZ,MAAO,SACP,MAAO,SACP,OAAQ,SACR,MAAO,EACP,eAAgB,SAChB,KAAM,IACN,WAAY,QACZ,MAAO,SACP,UAAW,SACX,UAAW,QACX,WAAY,QACZ,UAAW,SACX,MAAO,SACP,eAAgB,QAChB,SAAU,SACV,QAAS,SACT,KAAM,MACN,SAAU,IACV,SAAU,MACV,cAAe,SACf,SAAU,SACV,UAAW,MACX,SAAU,SACV,UAAW,SACX,YAAa,QACb,eAAgB,QAChB,WAAY,SACZ,WAAY,SACZ,QAAS,QACT,WAAY,SACZ,aAAc,QACd,cAAe,QACf,cAAe,QACf,cAAe,QACf,cAAe,MACf,WAAY,QACZ,SAAU,SACV,YAAa,MACb,QAAS,QACT,QAAS,QACT,WAAY,QACZ,UAAW,SACX,YAAa,SACb,YAAa,QACb,QAAS,SACT,UAAW,SACX,WAAY,SACZ,KAAM,SACN,UAAW,SACX,KAAM,QACN,MAAO,MACP,YAAa,SACb,KAAM,QACN,SAAU,SACV,QAAS,SACT,UAAW,SACX,OAAQ,QACR,MAAO,SACP,MAAO,SACP,SAAU,SACV,cAAe,SACf,UAAW,QACX,aAAc,SACd,UAAW,SACX,WAAY,SACZ,UAAW,SACX,qBAAsB,SACtB,UAAW,SACX,WAAY,QACZ,UAAW,SACX,UAAW,SACX,YAAa,SACb,cAAe,QACf,aAAc,QACd,eAAgB,QAChB,eAAgB,QAChB,eAAgB,SAChB,YAAa,SACb,KAAM,MACN,UAAW,QACX,MAAO,SACP,QAAS,SACT,OAAQ,QACR,iBAAkB,QAClB,WAAY,IACZ,aAAc,SACd,aAAc,QACd,eAAgB,QAChB,gBAAiB,QACjB,kBAAmB,MACnB,gBAAiB,QACjB,gBAAiB,SACjB,aAAc,QACd,UAAW,SACX,UAAW,SACX,SAAU,SACV,YAAa,SACb,KAAM,IACN,QAAS,SACT,MAAO,QACP,UAAW,QACX,OAAQ,SACR,UAAW,SACX,OAAQ,SACR,cAAe,SACf,UAAW,SACX,cAAe,SACf,cAAe,SACf,WAAY,SACZ,UAAW,SACX,KAAM,SACN,KAAM,SACN,KAAM,SACN,WAAY,SACZ,OAAQ,QACR,cAAe,QACf,IAAK,SACL,UAAW,SACX,UAAW,QACX,YAAa,QACb,OAAQ,SACR,WAAY,SACZ,SAAU,QACV,SAAU,SACV,OAAQ,SACR,OAAQ,SACR,QAAS,QACT,UAAW,QACX,UAAW,QACX,UAAW,QACX,KAAM,SACN,YAAa,MACb,UAAW,QACX,IAAK,SACL,KAAM,MACN,QAAS,SACT,OAAQ,SACR,UAAW,QACX,OAAQ,SACR,MAAO,SACP,MAAO,SACP,WAAY,SACZ,OAAQ,SACR,YAAa,QACf,EAgCO,MAAMC,EAAM,CACT,OAAS,CACf,EAAG,EACH,EAAG,EACH,EAAG,EACH,EAAG,CAAA,EAGL,YAAYr9B,EAAas9B,EAAqB,CACxCt9B,GACF,KAAK,SAASA,CAAK,EAErB,KAAK,SAASs9B,CAAU,CAC1B,CAEA,IAAI,OAAQ,CACV,OAAO,KAAK,MACd,CACA,IAAI,MAAMt9B,EAAY,CACpB,MAAMu9B,EAAS,wBAAwBv9B,CAAK,UAAU,OAAOA,CAAK,IAC9D,GAAA,OAAOA,GAAU,SAEnB,KAAK,OAAOA,CAAK,UACR,OAAOA,GAAU,SAAU,CAEhC,IAAA19C,EACJ,GAAKA,EAAI,oBAAoB,KAAK09C,CAAK,EAAI,CAEnC,MAAAw9B,EAAal7E,EAAE,CAAC,EAClB,IAAA49C,EACI,OAAA59C,EAAE,CAAC,EAAG,CACZ,IAAK,MACL,IAAK,QAEA49C,EACC,+DAA+D,KAC7Ds9B,CAAA,IAIJ,KAAK,EAAI,SAASt9B,EAAQ,CAAC,EAAG,EAAE,EAChC,KAAK,EAAI,SAASA,EAAQ,CAAC,EAAG,EAAE,EAChC,KAAK,EAAI,SAASA,EAAQ,CAAC,EAAG,EAAE,EAC3B,KAAA,EAAIA,EAAQ,CAAC,EAAI,WAAWA,EAAQ,CAAC,CAAC,EAAI,IAE9CA,EACC,kEAAkE,KAChEs9B,CAAA,IAIC,KAAA,EAAKvrE,EAAM,WAAWiuC,EAAQ,CAAC,CAAC,EAAG,EAAG,GAAG,EAAI,IAAO,IACpD,KAAA,EAAKjuC,EAAM,WAAWiuC,EAAQ,CAAC,CAAC,EAAG,EAAG,GAAG,EAAI,IAAO,IACpD,KAAA,EAAKjuC,EAAM,WAAWiuC,EAAQ,CAAC,CAAC,EAAG,EAAG,GAAG,EAAI,IAAO,IACpD,KAAA,EAAIA,EAAQ,CAAC,EAAI,WAAWA,EAAQ,CAAC,CAAC,EAAI,GAG/C,QAAQ,KAAKq9B,CAAM,EAErB,MACF,IAAK,MACL,IAAK,QAEAr9B,EACC,mFAAmF,KACjFs9B,CAAA,GAIC,KAAA,OACH,WAAWt9B,EAAQ,CAAC,CAAC,EAAI,IACzB,WAAWA,EAAQ,CAAC,CAAC,EAAI,IACzB,WAAWA,EAAQ,CAAC,CAAC,EAAI,IACzBA,EAAQ,CAAC,EAAI,WAAWA,EAAQ,CAAC,CAAC,EAAI,CAAA,EAIxC,QAAQ,KAAKq9B,CAAM,EAErB,MACF,IAAK,MACL,IAAK,OACL,IAAK,MACL,IAAK,QAEAr9B,EACC,mFAAmF,KACjFs9B,CAAA,GAKC,KAAA,OACH,WAAWt9B,EAAQ,CAAC,CAAC,EAAI,IACzB,WAAWA,EAAQ,CAAC,CAAC,EAAI,IACzB,WAAWA,EAAQ,CAAC,CAAC,EAAI,IACzBA,EAAQ,CAAC,EAAI,WAAWA,EAAQ,CAAC,CAAC,EAAI,CAAA,EAIxC,QAAQ,KAAKq9B,CAAM,EAErB,MACF,QAEE,QAAQ,KAAKA,CAAM,CACvB,CACU,SAAAj7E,EAAI,kBAAkB,KAAK09C,CAAK,EAAI,CAExC,MAAAhuC,EAAM1P,EAAE,CAAC,EACTqvC,EAAO3/B,EAAI,OACb2/B,IAAS,EAEN,KAAA,OACH,SAAS3/B,EAAI,OAAO,CAAC,EAAG,EAAE,EAC1B,SAASA,EAAI,OAAO,CAAC,EAAG,EAAE,EAC1B,SAASA,EAAI,OAAO,CAAC,EAAG,EAAE,EAC1B,CAAA,EAEO2/B,IAAS,GAAKA,IAAS,EAEhC,KAAK,OAAO,SAAS3/B,EAAK,EAAE,CAAC,EAG7B,QAAQ,KAAKurE,CAAM,CAEZ,SAAAv9B,GAASA,EAAM,OAAS,EAC7B,GAAA,CACF,KAAK,aAAaA,CAAK,OACb,CAEV,QAAQ,KAAKu9B,CAAM,CACrB,MAGA,QAAQ,KAAKA,CAAM,CACrB,MACSv9B,aAAiBq9B,GACrB,KAAA,OAAOr9B,EAAM,EAAGA,EAAM,EAAGA,EAAM,EAAGA,EAAM,CAAC,EAE9C,OAAO,UAAU,eAAe,KAAKA,EAAO,GAAG,GAC/C,OAAO,UAAU,eAAe,KAAKA,EAAO,GAAG,GAC/C,OAAO,UAAU,eAAe,KAAKA,EAAO,GAAG,EAE1C,KAAA,OACHA,EAAM,EACNA,EAAM,EACNA,EAAM,EACN,OAAO,UAAU,eAAe,KAAKA,EAAO,GAAG,EAAIA,EAAM,EAAI,CAAA,EAG/D,OAAO,UAAU,eAAe,KAAKA,EAAO,GAAG,GAC/C,OAAO,UAAU,eAAe,KAAKA,EAAO,GAAG,GAC/C,OAAO,UAAU,eAAe,KAAKA,EAAO,GAAG,EAE1C,KAAA,OACHA,EAAM,EACNA,EAAM,EACNA,EAAM,EACN,OAAO,UAAU,eAAe,KAAKA,EAAO,GAAG,EAAIA,EAAM,EAAI,CAAA,EAG/D,OAAO,UAAU,eAAe,KAAKA,EAAO,GAAG,GAC/C,OAAO,UAAU,eAAe,KAAKA,EAAO,GAAG,GAC/C,OAAO,UAAU,eAAe,KAAKA,EAAO,GAAG,EAE1C,KAAA,OACHA,EAAM,EACNA,EAAM,EACNA,EAAM,EACN,OAAO,UAAU,eAAe,KAAKA,EAAO,GAAG,EAAIA,EAAM,EAAI,CAAA,EAG/D,OAAO,UAAU,eAAe,KAAKA,EAAO,GAAG,GAC/C,OAAO,UAAU,eAAe,KAAKA,EAAO,GAAG,GAC/C,OAAO,UAAU,eAAe,KAAKA,EAAO,GAAG,EAE1C,KAAA,OACHA,EAAM,EACNA,EAAM,EACNA,EAAM,EACN,OAAO,UAAU,eAAe,KAAKA,EAAO,GAAG,EAAIA,EAAM,EAAI,CAAA,EAI/D,QAAQ,KAAKu9B,CAAM,CAEvB,CACA,SAASv9B,EAAY,CACnB,YAAK,MAAQA,EACN,IACT,CACA,IAAIA,EAAY,CACP,OAAA,KAAK,SAASA,CAAK,CAC5B,CAEA,IAAI,GAAI,CACN,OAAO,KAAK,OAAO,CACrB,CACA,IAAI,EAAEpgC,EAAQ,CACZ,KAAK,OAAO,EAAI3N,EAAM,KAAK,MAAM++C,GAAYpxC,EAAG,KAAK,CAAC,CAAC,EAAG,EAAG,GAAG,CAClE,CAEA,IAAI,GAAI,CACN,OAAO,KAAK,OAAO,CACrB,CACA,IAAI,EAAEA,EAAQ,CACZ,KAAK,OAAO,EAAI3N,EAAM,KAAK,MAAM++C,GAAYpxC,EAAG,KAAK,CAAC,CAAC,EAAG,EAAG,GAAG,CAClE,CAEA,IAAI,GAAI,CACN,OAAO,KAAK,OAAO,CACrB,CACA,IAAI,EAAEA,EAAQ,CACZ,KAAK,OAAO,EAAI3N,EAAM,KAAK,MAAM++C,GAAYpxC,EAAG,KAAK,CAAC,CAAC,EAAG,EAAG,GAAG,CAClE,CAEA,IAAI,GAAI,CACN,OAAO,KAAK,OAAO,CACrB,CACA,IAAI,EAAEpb,EAAQ,CACP,KAAA,OAAO,EAAIyN,EAAM++C,GAAYxsD,EAAG,KAAK,CAAC,EAAG,EAAG,CAAC,CACpD,CACA,SAASA,EAAQ,CACf,YAAK,EAAIA,EACF,IACT,CAEA,eAAeob,EAAY,CACzB,YAAK,EAAIA,EAAE,EACX,KAAK,EAAIA,EAAE,EACX,KAAK,EAAIA,EAAE,EACJ,IACT,CAEA,aAAatd,EAAY,CACvB,MAAMpI,EAAI,KAAK,EACTwI,EAAI,KAAK,EACTuG,EAAI,KAAK,EACTjP,EAAIsI,EAAE,MACP,YAAA,EAAItI,EAAE,CAAC,EAAIE,EAAIF,EAAE,CAAC,EAAI0I,EAAI1I,EAAE,CAAC,EAAIiP,EACjC,KAAA,EAAIjP,EAAE,CAAC,EAAIE,EAAIF,EAAE,CAAC,EAAI0I,EAAI1I,EAAE,CAAC,EAAIiP,EACjC,KAAA,EAAIjP,EAAE,CAAC,EAAIE,EAAIF,EAAE,CAAC,EAAI0I,EAAI1I,EAAE,CAAC,EAAIiP,EAC/B,IACT,CAEA,oBAAoBizC,EAA4B5jC,EAAe,CACxD,YAAA,EAAI4jC,EAAU,KAAK5jC,CAAK,EACxB,KAAA,EAAI4jC,EAAU,KAAK5jC,CAAK,EACxB,KAAA,EAAI4jC,EAAU,KAAK5jC,CAAK,EACtB,IACT,CAEA,UAAUsa,EAAiB3T,EAAS,EAAG,CAChC,YAAA,EAAI2T,EAAM3T,CAAM,EAChB,KAAA,EAAI2T,EAAM3T,EAAS,CAAC,EACpB,KAAA,EAAI2T,EAAM3T,EAAS,CAAC,EACpB,KAAA,EAAI2T,EAAM3T,EAAS,CAAC,EAClB,IACT,CAEA,QAAQ2T,EAAkB,GAAI3T,EAAS,EAAG,CAClC,OAAA2T,EAAA3T,CAAM,EAAI,KAAK,EACf2T,EAAA3T,EAAS,CAAC,EAAI,KAAK,EACnB2T,EAAA3T,EAAS,CAAC,EAAI,KAAK,EACnB2T,EAAA3T,EAAS,CAAC,EAAI,KAAK,EAClB2T,CACT,CAEA,aAAsB,CAChB,OAAA,KAAK,IAAM,EACN,OAAO,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAEjC,QAAQ,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAIo9B,EAAa,KAAK,EAAG,CAAC,CAAC,GAExE,CAEA,aAAsB,CAChB,OAAA,KAAK,IAAM,GACL,SAAW,KAAK,IAAI,SAAS,EAAE,GAAG,MAAM,EAAE,GAE1C,WAAa,KAAK,IAAI,SAAS,EAAE,GAAG,MAAM,EAAE,CAExD,CAEA,UAAmB,CACb,OAAA,KAAK,IAAM,EACN,IAAM,KAAK,cAEX,KAAK,aAEhB,CAEA,mBAAmBytB,EAAaC,GAAwB,CACtDC,GAAgB,sBAAsBC,GAAQ,KAAK,IAAI,EAAGH,CAAU,EACpE,MAAMvjF,EAAI0jF,GAAQ,EACZl7E,EAAIk7E,GAAQ,EACZ30E,EAAI20E,GAAQ,EAClB,OAAIH,IAAeC,GAEV,SAASD,CAAU,IAAIvjF,EAAE,QAAQ,CAAC,CAAC,IAAIwI,EAAE,QAAQ,CAAC,CAAC,IAAIuG,EAAE,QAC9D,CACD,CAAA,IAEM,KAAK,aAEhB,CAEA,EAAE,OAAO,QAAQ,GAAI,CACnB,MAAM,KAAK,EACX,MAAM,KAAK,EACX,MAAM,KAAK,EACX,MAAM,KAAK,CACb,CAEA,OAAe,CACN,OAAA,IAAIo0E,GAAM,KAAK,KAAK,CAC7B,CAEA,KAAKr+E,EAAU,CACR,YAAA,SAASA,EAAE,KAAK,EACd,IACT,CAEA,iBAAiBghD,EAAc,CACxB,YAAA,EAAI69B,GAAa79B,EAAM,CAAC,EACxB,KAAA,EAAI69B,GAAa79B,EAAM,CAAC,EACxB,KAAA,EAAI69B,GAAa79B,EAAM,CAAC,EAEtB,IACT,CAEA,iBAAiBA,EAAc,CACxB,YAAA,EAAI89B,GAAa99B,EAAM,CAAC,EACxB,KAAA,EAAI89B,GAAa99B,EAAM,CAAC,EACxB,KAAA,EAAI89B,GAAa99B,EAAM,CAAC,EAEtB,IACT,CAEA,qBAAsB,CACpB,YAAK,iBAAiB,IAAI,EACnB,IACT,CAEA,qBAAsB,CACpB,YAAK,iBAAiB,IAAI,EACnB,IACT,CAEA,OAAOhhD,EAAU,CACf,OAAOA,EAAE,IAAM,KAAK,GAAKA,EAAE,IAAM,KAAK,GAAKA,EAAE,IAAM,KAAK,GAAKA,EAAE,IAAM,KAAK,CAC5E,CAEA,IAAIghD,EAAc,CACX,YAAA,EAAI,KAAK,EAAIA,EAAM,EACnB,KAAA,EAAI,KAAK,EAAIA,EAAM,EACnB,KAAA,EAAI,KAAK,EAAIA,EAAM,EACjB,IACT,CAEA,UAAU+9B,EAAeC,EAAe,CACjC,YAAA,EAAID,EAAO,EAAIC,EAAO,EACtB,KAAA,EAAID,EAAO,EAAIC,EAAO,EACtB,KAAA,EAAID,EAAO,EAAIC,EAAO,EACpB,IACT,CAEA,UAAUviF,EAAW,CACd,YAAA,EAAI,KAAK,EAAIA,EACb,KAAA,EAAI,KAAK,EAAIA,EACb,KAAA,EAAI,KAAK,EAAIA,EACX,IACT,CAEA,UAAU2gD,EAAgB,CACxB,YAAK,EAAIA,EACT,KAAK,EAAIA,EACT,KAAK,EAAIA,EACF,IACT,CAEA,IAAI4D,EAAc,CACX,YAAA,EAAI,KAAK,EAAIA,EAAM,EACnB,KAAA,EAAI,KAAK,EAAIA,EAAM,EACnB,KAAA,EAAI,KAAK,EAAIA,EAAM,EACjB,IACT,CAEA,SAASA,EAAc,CAChB,YAAA,EAAI,KAAK,EAAIA,EAAM,EACnB,KAAA,EAAI,KAAK,EAAIA,EAAM,EACnB,KAAA,EAAI,KAAK,EAAIA,EAAM,EACjB,IACT,CAEA,eAAevkD,EAAW,CACnB,YAAA,EAAI,KAAK,EAAIA,EACb,KAAA,EAAI,KAAK,EAAIA,EACb,KAAA,EAAI,KAAK,EAAIA,EACX,IACT,CAEA,SACEwiF,EAAK,GACLC,EAAa,UACbC,EAAa,UACb,CACA,GAAIF,EAEF,OAAO,KAAK,SACV,KAAK,EAAI,KAAQ,KAAK,EAAI,KAAQ,KAAK,EAAI,KAAQ,IAC/CC,EACAC,CAAA,EAED,CACL,KAAM,CAAE,EAAAjkF,EAAG,EAAAwI,EAAG,EAAAuG,CAAA,EAAM,KAAK,MACzB,YAAK,EAAI,IAAM/O,EACf,KAAK,EAAI,IAAMwI,EACf,KAAK,EAAI,IAAMuG,EACR,IACT,CACF,CAEA,OAAOi1E,EAAa,UAAWC,EAAa,UAAW,CACrD,OAAO,KAAK,SAAS,GAAMD,EAAYC,CAAU,EAAE,SACjD,GACAD,EACAC,CAAA,CAEJ,CAGA,QAAQ,EAAW,CACb,EAAAlsE,EAAM,EAAG,EAAG,CAAC,EACjB,KAAM,CAAE,EAAA/X,EAAG,EAAAwI,EAAG,EAAAuG,EAAG,EAAAzE,GAAM,KAAK,MAC5B,OAAIA,GAAK,EACP,KAAK,EAAI,GAEJ,KAAA,EAAItK,GAAK,IAAMA,GAAK,EACpB,KAAA,EAAIwI,GAAK,IAAMA,GAAK,EACpB,KAAA,EAAIuG,GAAK,IAAMA,GAAK,GAEpB,IACT,CAGA,OAAO,EAAW,CACZ,EAAAgJ,EAAM,EAAG,EAAG,CAAC,EACjB,KAAM,CAAE,EAAA/X,EAAG,EAAAwI,EAAG,EAAAuG,EAAG,EAAAzE,GAAM,KAAK,MAC5B,OAAIA,GAAK,EACP,KAAK,EAAI,GAEJ,KAAA,EAAItK,GAAK,EAAI,GACb,KAAA,EAAIwI,GAAK,EAAI,GACb,KAAA,EAAIuG,GAAK,EAAI,IAEb,IACT,CAIA,KAAK+2C,EAAct2C,EAAW,CACxBA,EAAAuI,EAAMvI,EAAG,EAAG,CAAC,EACjB,KAAM,CAAE,EAAAxP,EAAG,EAAAwI,EAAG,EAAAuG,CAAA,EAAM,KAAK,MACzB,YAAK,EAAI/O,GAAK8lD,EAAM,EAAI9lD,GAAKwP,EAC7B,KAAK,EAAIhH,GAAKs9C,EAAM,EAAIt9C,GAAKgH,EAC7B,KAAK,EAAIT,GAAK+2C,EAAM,EAAI/2C,GAAKS,EACtB,IACT,CAIA,WAAWwM,EAAc5D,EAAY5I,EAAW,CAC1C,OAAAA,EAAAuI,EAAMvI,EAAG,EAAG,CAAC,EACjB,KAAK,EAAIwM,EAAM,GAAK5D,EAAI,EAAI4D,EAAM,GAAKxM,EACvC,KAAK,EAAIwM,EAAM,GAAK5D,EAAI,EAAI4D,EAAM,GAAKxM,EACvC,KAAK,EAAIwM,EAAM,GAAK5D,EAAI,EAAI4D,EAAM,GAAKxM,EAChC,IACT,CAIA,OAAO,SAASwM,EAAe5D,EAAa5I,EAAmB,CACzD,GAAA,CACF,OAAOk0E,GAAQ,WAAW,IAAIP,GAAMnnE,CAAK,EAAG,IAAImnE,GAAM/qE,CAAG,EAAG5I,CAAC,EAAE,SAAS,OAC9D,CACH,OAAA4I,CACT,CACF,CAEA,OAAO,QAAiB,CACtB,OAAOsrE,GAAQ,OAAO,KAAK,SAAW,QAAQ,EAAE,UAClD,CAEA,OAAO,UAAY,EACnB,OAAO,KAAKhyC,EAAayxC,GAAM,UAAmB,CAChDA,GAAM,UAAYzxC,EACZ,MAAA/yB,EAAO,OAAO,KAAKukE,EAAW,EAC9B3rE,EAASoH,EAAK,OACb,OAAA+kE,GACJ,OAAOR,GAAYvkE,EAAKwkE,GAAM,YAAc5rE,CAAM,CAAC,CAAC,EACpD,SAAS,CACd,CAEA,aAAakvC,EAAe,CAC1B,MAAM3uC,EAAMorE,GAAYz8B,EAAM,YAAa,CAAA,EAC3C,OAAI3uC,IAAQ,OACV,KAAK,OAAOA,CAAG,EACN2uC,IAAU,OACnB,KAAK,EAAI,GAET,KAAK,EAAI,EAED,QAAA,KAAK,qCAAuCA,CAAK,GAEpD,IACT,CACA,OAAO,WAAsB,CAC3B,OAAO,OAAO,OAAOy8B,EAAW,EAAE,IAAKx9D,GAC9Bg+D,GAAQ,OAAOh+D,CAAC,EAAE,SAAS,CACnC,CACH,CAEA,OAAO1lB,EAAWwI,EAAWuG,EAAWzE,EAAI,EAAG,CAC7C,YAAK,EAAItK,EACT,KAAK,EAAIwI,EACT,KAAK,EAAIuG,EACT,KAAK,EAAIzE,EACF,IACT,CAEA,IAAI,KAAM,CACD,MAAA,CACL,EAAG,KAAK,EACR,EAAG,KAAK,EACR,EAAG,KAAK,EACR,EAAG,KAAK,CAAA,CAEZ,CAGA,OAAOwN,EAAa,CACZ,OAAAA,EAAA,KAAK,MAAMA,CAAG,EAEhBA,EAAM,UACH,KAAA,EAAKA,GAAO,GAAM,IAClB,KAAA,EAAKA,GAAO,EAAK,IACtB,KAAK,EAAIA,EAAM,IACf,KAAK,EAAI,IAEJ,KAAA,EAAKA,GAAO,GAAM,IAClB,KAAA,EAAKA,GAAO,GAAM,IAClB,KAAA,EAAKA,GAAO,EAAK,IACjB,KAAA,GAAKA,EAAM,KAAQ,KAEnB,IACT,CAEA,IAAI,KAAc,CAChB,IAAIA,GAAO,KAAK,GAAK,KAAO,KAAK,GAAK,GAAK,KAAK,EAC5C,OAAA,KAAK,IAAM,IAEbA,EAAMA,GAAO,EACbA,GAAO,KAAK,MAAM,KAAK,EAAI,GAAG,GAEzBA,CACT,CAIA,OAAOosE,EAAYrhF,EAAYshF,EAAY75E,EAAI,EAAG,CAC1C,MAAAjC,EAAI+7E,GAAgBF,EAAI,CAAC,EACzB3iF,EAAIwW,EAAMlV,EAAI,EAAG,CAAC,EAClBsC,EAAI4S,EAAMosE,EAAI,EAAG,CAAC,EACxB,GAAI5iF,IAAM,EACR,KAAK,EAAI4D,EAAI,IACb,KAAK,EAAIA,EAAI,IACb,KAAK,EAAIA,EAAI,QACR,CACC,MAAAmD,EAAInD,GAAK,GAAMA,GAAK,EAAI5D,GAAK4D,EAAI5D,EAAI4D,EAAI5D,EACzCmU,EAAI,EAAIvQ,EAAImD,EAClB,KAAK,EAAI+7E,GAAQ3uE,EAAGpN,EAAGD,EAAI,EAAI,CAAC,EAAI,IACpC,KAAK,EAAIg8E,GAAQ3uE,EAAGpN,EAAGD,CAAC,EAAI,IAC5B,KAAK,EAAIg8E,GAAQ3uE,EAAGpN,EAAGD,EAAI,EAAI,CAAC,EAAI,GACtC,CACA,YAAK,EAAIiC,EACF,IACT,CAEA,OAAOgO,EAAgB,CACrB,MAAMtY,EAAI,KAAK,EACTwI,EAAI,KAAK,EACTuG,EAAI,KAAK,EACTuiC,EAAM,KAAK,IAAItxC,EAAGwI,EAAGuG,CAAC,EAAI,IAC1B0uC,EAAM,KAAK,IAAIz9C,EAAGwI,EAAGuG,CAAC,EAAI,IAChC,IAAIu1E,EAAKC,EACH,MAAAC,GAAa/mC,EAAMnM,GAAO,EAChC,GAAImM,IAAQnM,EACJgzC,EAAA,EACOC,EAAA,MACR,CACL,MAAM7P,EAAQpjC,EAAMmM,EAGpB,OAFA8mC,EACEC,GAAa,GAAM9P,GAASpjC,EAAMmM,GAAOi3B,GAAS,EAAIpjC,EAAMmM,GACtDnM,EAAK,CACX,KAAKtxC,EACHskF,GAAO97E,EAAIuG,GAAK2lE,GAASlsE,EAAIuG,EAAI,EAAI,GACrC,MACF,KAAKvG,EACI87E,GAAAv1E,EAAI/O,GAAK00E,EAAQ,EACxB,MACF,KAAK3lE,EACL,QACSu1E,GAAAtkF,EAAIwI,GAAKksE,EAAQ,EACxB,KACJ,CACO4P,GAAA,CACT,CACA,OAAIhsE,GACFA,EAAO,OAAOgsE,EAAKC,EAAYC,EAAW,KAAK,CAAC,EAE3C,CACL,EAAGF,EACH,EAAGC,EACH,EAAGC,EACH,EAAG,KAAK,CAAA,CAEZ,CAEA,UAAUn8E,EAAW9G,EAAW4D,EAAW,CACnC,MAAAs/E,EAAM,KAAK,SACV,OAAA,KAAK,OAAOA,EAAI,EAAIp8E,EAAGo8E,EAAI,EAAIljF,EAAGkjF,EAAI,EAAIt/E,CAAC,CACpD,CAEA,QAAQ2gD,EAAct2C,EAAW,CACzB,MAAAk1E,EAAO,KAAK,SACZC,EAAO7+B,EAAM,SACbz9C,EAAIu8E,GAAKF,EAAK,EAAGC,EAAK,EAAGn1E,CAAC,EAC1BjO,EAAIqjF,GAAKF,EAAK,EAAGC,EAAK,EAAGn1E,CAAC,EAC1BrK,EAAIy/E,GAAKF,EAAK,EAAGC,EAAK,EAAGn1E,CAAC,EAC3B,YAAA,OAAOnH,EAAG9G,EAAG4D,CAAC,EACZ,IACT,CAIA,OAAO++E,EAAYrhF,EAAYgiF,EAAYv6E,EAAI,EAAG,CAChD,MAAMjC,EAAI0P,EAAMmsE,EAAI,EAAG,CAAC,EAAI,IACtB3iF,EAAIwW,EAAMlV,EAAI,EAAG,CAAC,EAClB6iB,EAAI3N,EAAM8sE,EAAI,EAAG,CAAC,EAClBltE,EAAK,KAAK,MAAMtP,EAAI,EAAE,EAAI,EAC1ByG,EAAIzG,EAAI,GAAK,KAAK,MAAMA,EAAI,EAAE,EAC9BC,EAAIod,GAAK,EAAMnkB,GACfmU,EAAIgQ,GAAK,EAAM5W,EAAIvN,GACnBiO,EAAIkW,GAAK,GAAO,EAAM5W,GAAKvN,GAC3BuD,EAAI,CACR,CAAC4gB,EAAGlW,EAAGlH,CAAC,EACR,CAACoN,EAAGgQ,EAAGpd,CAAC,EACR,CAACA,EAAGod,EAAGlW,CAAC,EACR,CAAClH,EAAGoN,EAAGgQ,CAAC,EACR,CAAClW,EAAGlH,EAAGod,CAAC,EACR,CAACA,EAAGpd,EAAGoN,CAAC,GACRiC,CAAE,EACC,YAAA,EAAI7S,EAAE,CAAC,EAAI,IACX,KAAA,EAAIA,EAAE,CAAC,EAAI,IACX,KAAA,EAAIA,EAAE,CAAC,EAAI,IAChB,KAAK,EAAIwF,EACF,IACT,CACA,OAAO45E,EAAYrhF,EAAYqtB,EAAY5lB,EAAI,EAAG,CAChD,KAAK,OAAO45E,EAAIrhF,EAAIqtB,EAAI5lB,CAAC,CAC3B,CAEA,OAAOgO,EAAgB,CACrB,KAAM,CAAE,EAAAtY,EAAG,EAAAwI,EAAG,EAAAuG,EAAG,EAAAzE,GAAM,KAAK,MACtBgnC,EAAM,KAAK,IAAItxC,EAAGwI,EAAGuG,CAAC,EACtB0uC,EAAM,KAAK,IAAIz9C,EAAGwI,EAAGuG,CAAC,EACtB2lE,EAAQpjC,EAAMmM,EAChB,IAAAp1C,EACArI,IAAMsxC,EACRjpC,GAAKG,EAAIuG,GAAK2lE,EACLlsE,IAAM8oC,EACXjpC,EAAA,GAAK0G,EAAI/O,GAAK00E,EAEdrsE,EAAA,GAAKrI,EAAIwI,GAAKksE,EAEfrsE,GAAA,EACDA,EAAI,IACDA,GAAA,GAED,MAAA67E,EAAKxP,GAAS,EAAI,EAAIrsE,EACtBxF,EAAKyuC,IAAQ,EAAI,EAAIojC,EAAQpjC,EAC7BuzC,EAAKvzC,EAAM,IACjB,OAAIh5B,GACFA,EAAO,OAAO4rE,EAAIrhF,EAAIgiF,EAAIv6E,CAAC,EAEtB,CACL,EAAG45E,EACH,EAAGrhF,EACH,EAAGgiF,EACH,EAAAv6E,CAAA,CAEJ,CACA,OAAOgO,EAAgB,CACf,KAAA,CAAE,EAAAjQ,EAAG,EAAA9G,EAAG,EAAAmkB,EAAG,EAAApb,GAAM,KAAK,OAAOgO,CAAM,EAClC,MAAA,CACL,EAAAjQ,EACA,EAAA9G,EACA,EAAGmkB,EACH,EAAApb,CAAA,CAEJ,CACF,CAGa,MAAAo5E,GAAU,IAAIP,GAGd2B,GAAe,GACftB,GAAiB,OACjBuB,GAAuB,cAEvBC,GAAiB,SACjBC,GAAe,OAErB,SAAStB,GAAa7+E,EAAmB,CACvC,OAAAA,EAAI,OACPA,EAAI,YACJ,KAAK,IAAIA,EAAI,YAAe,YAAc,GAAG,CACnD,CAEO,SAAS8+E,GAAa9+E,EAAmB,CACvC,OAAAA,EAAI,SAAYA,EAAI,MAAQ,MAAQ,KAAK,IAAIA,EAAG,MAAO,EAAI,IACpE,CAEA,MAAMogF,GAAgC,IAAI3rB,GAAA,EAAU,IAClD,SACA,SACA,SACA,QACA,SACA,SACA,SACA,SACA,QACF,EACM4rB,GAAgC,IAAI5rB,GAAA,EAAU,IAClD,UACA,WACA,UACA,UACA,UACA,SACA,SACA,SACA,SACF,EACM6rB,GAAmB,CAAC,IAAM,IAAM,GAAK,GAAK,IAAM,GAAI,EACpDC,GAAgC,CAAC,MAAQ,MAAQ,KAAM,EACvDC,GAAM,CAAC,MAAQ,IAAK,EAEb7B,GAAkB,CAC7B,QAAS,GAET,kBAAmBsB,GAoBnB,OAAQ,CAAC,EAET,QAAS,SACPj/B,EACAy/B,EACAC,EACO,CAEL,OAAA,KAAK,UAAY,IACjBD,IAAqBC,GACrB,CAACD,GACD,CAACC,IAKC,KAAK,OAAOD,CAAgB,EAAE,WAAaN,KACvCn/B,EAAA,EAAI69B,GAAa79B,EAAM,CAAC,EACxBA,EAAA,EAAI69B,GAAa79B,EAAM,CAAC,EACxBA,EAAA,EAAI69B,GAAa79B,EAAM,CAAC,GAK9B,KAAK,OAAOy/B,CAAgB,EAAE,YAC9B,KAAK,OAAOC,CAAgB,EAAE,YAE9B1/B,EAAM,aAAa,KAAK,OAAOy/B,CAAgB,EAAE,KAAK,EACtDz/B,EAAM,aAAa,KAAK,OAAO0/B,CAAgB,EAAE,OAAO,GAGtD,KAAK,OAAOA,CAAgB,EAAE,WAAaP,KACvCn/B,EAAA,EAAI89B,GAAa99B,EAAM,CAAC,EACxBA,EAAA,EAAI89B,GAAa99B,EAAM,CAAC,EACxBA,EAAA,EAAI89B,GAAa99B,EAAM,CAAC,IAIzBA,CACT,EAEA,sBAAuB,SAAUA,EAAc0/B,EAA0B,CACvE,OAAO,KAAK,QAAQ1/B,EAAO,KAAK,kBAAmB0/B,CAAgB,CACrE,EAEA,oBAAqB,SAAU1/B,EAAcy/B,EAA0B,CACrE,OAAO,KAAK,QAAQz/B,EAAOy/B,EAAkB,KAAK,iBAAiB,CACrE,EAEA,aAAc,SAAUhC,EAAoB,CACnC,OAAA,KAAK,OAAOA,CAAU,EAAE,SACjC,EAEA,YAAa,SAAUA,EAAoB,CACzC,OAAIA,IAAeuB,GACVE,GAEF,KAAK,OAAOzB,CAAU,EAAE,QACjC,EAEA,yBAA0B,SAExBjrE,EACAirE,EAAa,KAAK,kBAClB,CACA,OAAOjrE,EAAO,UAAU,KAAK,OAAOirE,CAAU,EAAE,qBAAqB,CACvE,EAEA,OAAQ,SAAUkC,EAAkD,CAC3D,OAAA,OAAO,KAAK,OAAQA,CAAW,CACxC,EAIA,WAAY,SACVC,EACAH,EACAC,EACA,CACA,OAAOE,EACJ,KAAK,KAAK,OAAOH,CAAgB,EAAE,KAAK,EACxC,SAAS,KAAK,OAAOC,CAAgB,EAAE,OAAO,CACnD,EAEA,4BAA6B,SAAUjC,EAAoB,CACzD,OAAO,KAAK,OAAOA,CAAU,EAAE,uBAC5B,uBACL,EAEA,qBAAsB,SAEpBA,EAAa,KAAK,kBAClB,CACA,OAAO,KAAK,OAAOA,CAAU,EAAE,wBAAwB,gBACzD,CACF,EAEAE,GAAgB,OAAO,CACrB,CAACsB,EAAoB,EAAG,CACtB,UAAWK,GACX,WAAYE,GACZ,SAAUN,GACV,MAAOE,GACP,QAASC,GACT,sBAAuBE,GACvB,wBAAyB,CAAE,iBAAkB7B,EAAe,EAC5D,uBAAwB,CAAE,wBAAyBA,EAAe,CACpE,EAEA,CAACA,EAAc,EAAG,CAChB,UAAW4B,GACX,WAAYE,GACZ,SAAUL,GACV,MAAOC,GACP,QAASC,GACT,sBAAuBE,GACvB,uBAAwB,CAAE,wBAAyB7B,EAAe,CACpE,CACF,CAAC,EAED,SAASa,GAAQ/7E,EAAWoN,EAAWlG,EAAW,CAGhD,OAFIA,EAAI,IAAQA,GAAA,GACZA,EAAI,IAAQA,GAAA,GACZA,EAAI,EAAI,EAAUlH,GAAKoN,EAAIpN,GAAK,EAAIkH,EACpCA,EAAI,EAAI,EAAUkG,EAClBlG,EAAI,EAAI,EAAUlH,GAAKoN,EAAIpN,GAAK,GAAK,EAAI,EAAIkH,GAC1ClH,CACT,CC/jCO,MAAMq9E,EAAY,CAChB,UAEA,OAA4B,KAE5B,UAAsC,KACtC,IAA8B,KAE9B,KAAO,CACZ,EAAG,EACH,EAAG,EACH,MAAO,EACP,OAAQ,CAAA,EAEH,MAAQ,IAAI1wD,GAAgC,IAAI,EAC/C,mBAED,IAAM84C,GAAc,EACnB,kBAED,OAAkB,CAAA,EAElB,UAAY,IAAI94C,GAA8B,IAAI,EACjD,gBAEA,mBAAqB,GAErB,gBAAkB,GAClB,WAAa,UAErB,YACE2wD,EAAiC,SAAS,gBAC1CxrE,EAAiB,SACjB2vC,EAAsB,GACtB,CACA,KAAK,UAAY67B,GAEbxrE,GAAQ,OAASA,GAAQ,WAC3B4W,GAAM,KAAK,SAAS,EAGlB5W,GAAQ,QACL,KAAA,OAASs/D,GAAiB,KAAK,EAC7B/R,GAAA,KAAK,UAAW,KAAK,MAAM,GAGhCvtD,GAAQ,WACL,KAAA,UAAYgvD,GAAc,QAAQ,EAChCzB,GAAA,KAAK,UAAW,KAAK,SAAS,GAGvC,KAAK,mBAAqB+N,GAAW,KAAK,SAAS,EAAE,UAClD11E,GAAe,CACT,KAAA,KAAK,EAAIA,EAAE,EACX,KAAA,KAAK,EAAIA,EAAE,EACX,KAAA,KAAK,MAAQA,EAAE,MACf,KAAA,KAAK,OAASA,EAAE,OACjB,KAAK,QACPuxD,GAAa,KAAK,OAAQ,CACxB,QAAS,OAAO,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,MAAM,GACnD,MAAO,GAAG,KAAK,KAAK,KAAK,GACzB,OAAQ,GAAG,KAAK,KAAK,MAAM,EAAA,CAC5B,EAEC,KAAK,YACPA,GAAa,KAAK,UAAW,CAC3B,MAAO,GAAG,KAAK,KAAK,KAAK,GACzB,OAAQ,GAAG,KAAK,KAAK,MAAM,EAAA,CAC5B,EACD,KAAK,IAAM,IAAIgF,GACb,KAAK,UACL,KAAK,KAAK,MACV,KAAK,KAAK,OACVxM,CAAA,GAGC,KAAA,MAAM,KAAK/pD,CAAC,CACnB,CAAA,EAGF,KAAK,kBAAoBiyE,GACvB,KAAK,QAAU,KAAK,WAAa,KAAK,UACtC,CACE,cAAe,KAAK,GACtB,CACF,EAAE,UAAU,IAAM,CAAA,CAAE,EAEpB,KAAK,gBAAkBvB,GAAK,KAAK,SAAS,EAAE,UAAW5wE,GAAM,CAChD,UAAA22D,KAAS,KAAK,OACvB,GAAIA,EAAM,UAAW,CACd,KAAA,UAAU,KAAKA,CAAK,EAQzB,KACF,CACF,CACD,CACH,CAEO,SAAU,CACf,KAAK,mBAAmB,cACxB,KAAK,kBAAkB,cACvB,KAAK,gBAAgB,aACvB,CAEQ,UACNovB,EAAsD,UACtD,CACIA,GAAU,KAAK,aACZ,KAAA,UAAU,MAAM,OAASA,EAC9B,KAAK,WAAaA,EAEtB,CAGO,QAAQjlF,EAAiB,CAE9B,GAAIA,EAAG,OAAQ,CACb,MAAMklF,EAAuB,CAAA,EAC1BllF,EAAA,QAASW,GAAM,CACZA,aAAau/E,GACHgF,EAAA,KAAK,GAAGvkF,EAAE,MAAM,EAE5BukF,EAAY,KAAKvkF,CAAC,CACpB,CACD,EAGG,KAAK,QACP,KAAK,OACF,OACEk1D,GAAUqvB,EAAY,UAAWvkF,GAAMA,EAAE,IAAMk1D,EAAM,EAAE,GAAK,EAAA,EAE9D,QAASA,GAAU,CACdA,EAAM,KACRA,EAAM,GAAG,SACT,OAAOA,EAAM,GACf,CACD,EAGMsvB,GAAA,KAAK,OAAQD,CAAW,CACrC,CAEI,KAAK,KAEP,KAAK,IAAI,YAGX,KAAK,mBAAqB,GACrB,KAAK,IAAI,QAAQ,SACpB,KAAK,gBAAkB,IAGd,UAAArvB,KAAS,KAAK,OAAQ,CAE/B,KAAM,CAAE,EAAGlM,EAAS,EAAGC,GAAYiM,EAAM,kBACzC,IAAI6oB,EAAc,EACdC,EAAc,EAEhB,GAAA9oB,EAAM,QAAQ,SACdA,EAAM,QAAQ,UAAY,GAC1BA,EAAM,QAAQ,UAAY,EAC1B,CACM,MAAA+oB,EAAM/oB,EAAM,gBAAgB,EAAI,EACtC6oB,EAAcE,EAAI,EAClBD,EAAcC,EAAI,CACpB,CAOA,GALI/oB,EAAM,mBAERA,EAAM,MAAM,EAGV,KAAK,OAAQ,CAEf,GAAI,CAACA,EAAM,IAAMA,EAAM,wBAAyB,CACxC,MAAAqR,EAAQrR,EAAM,UACfA,EAAM,GAWLqR,IACFrR,EAAM,GAAG,SACTA,EAAM,GAAKqR,EACJH,GAAA,KAAK,OAAQlR,EAAM,EAAE,EAC5BlF,GAAakF,EAAM,GAAI,CAAE,GAAIA,EAAM,GAAI,IAbnCA,EAAA,GAAKqR,GAAS6R,KACbhS,GAAA,KAAK,OAAQlR,EAAM,EAAE,EAC5BlF,GAAakF,EAAM,GAAI,CAAE,GAAIA,EAAM,GAAI,GAcrCmjB,GAAiBnjB,EAAM,EAAE,GAC3BlF,GAAakF,EAAM,GAAI,CAAE,EAAGA,EAAM,aAAc,EAElDA,EAAM,wBAA0B,GAChCA,EAAM,wBAA0B,GAChCA,EAAM,wBAA0B,GAChCA,EAAM,oBAAsB,EAC9B,CAcA,GAbIA,EAAM,0BACHuvB,GAAcvvB,EAAM,KAAK,GACflF,GAAAkF,EAAM,GAAIA,EAAM,KAAK,EAEpCA,EAAM,wBAA0B,IAE9BA,EAAM,0BACHuvB,GAAcvvB,EAAM,KAAK,GACnB6R,GAAA7R,EAAM,GAAIA,EAAM,KAAK,EAEhCA,EAAM,wBAA0B,IAG9BA,EAAM,qBAAuB,CAACA,EAAM,EAAG,CAEnC,MAAAruD,EAAI,IAAI6rD,GAEZ7rD,EAAA,UACAquD,EAAM,GAAKA,EAAM,QAAQ,IAAM,GAC/BA,EAAM,GAAKA,EAAM,QAAQ,IAAM,EAAA,EAEjCruD,EAAE,OAAOquD,EAAM,OAAQlM,EAASC,CAAO,EACvCpiD,EAAE,MAAMquD,EAAM,OAAQA,EAAM,OAAQlM,EAASC,CAAO,EAEhDiM,EAAM,QAAQ,SAChBruD,EAAE,OAAOquD,EAAM,OAAO,QAAS6oB,EAAaC,CAAW,GAErD9oB,EAAM,QAAQ,UAAY,GAAKA,EAAM,QAAQ,UAAY,IACzDruD,EAAA,MACAquD,EAAM,QAAQ,SAAW,EACzBA,EAAM,QAAQ,SAAW,EACzB6oB,EACAC,CAAA,EAGJhuB,GAAakF,EAAM,GAAI,CAAE,UAAWruD,EAAE,WAAY,EAElDquD,EAAM,EAAIruD,EACVquD,EAAM,oBAAsB,EAC9B,CACF,CAwFA,GAvFI,KAAK,MAEP,KAAK,IAAI,OAGT,KAAK,IAAI,UACPA,EAAM,GAAKA,EAAM,QAAQ,IAAM,GAC/BA,EAAM,GAAKA,EAAM,QAAQ,IAAM,EAAA,EAEjC,KAAK,IAAI,OAAO9Y,EAAS8Y,EAAM,MAAM,EAAGlM,EAASC,CAAO,EACxD,KAAK,IAAI,MAAMiM,EAAM,OAAQA,EAAM,OAAQlM,EAASC,CAAO,EAEvDiM,EAAM,QAAQ,SAChB,KAAK,IAAI,OACP9Y,EAAS8Y,EAAM,OAAO,OAAO,EAC7B6oB,EACAC,CAAA,GAGA9oB,EAAM,QAAQ,UAAY,GAAKA,EAAM,QAAQ,UAAY,IAC3D,KAAK,IAAI,MACPA,EAAM,QAAQ,SAAW,EACzBA,EAAM,QAAQ,SAAW,EACzB6oB,EACAC,CAAA,EAIE9oB,EAAA,EAAI,KAAK,IAAI,cACG+W,GAAA,KAAK,IAAK/W,EAAM,KAAK,EACrCA,EAAA,gBAAgB,KAAK,GAAG,EAC1B,KAAK,IAAI,yBACX,KAAK,IAAI,SAEP,KAAK,IAAI,uBACX,KAAK,IAAI,QAYTA,EAAM,YAEJ,KAAK,OACPA,EAAM,UACJA,EAAM,cACJ,KAAK,OACL,KAAK,IAAI,QAAQ,EACjB,KAAK,IAAI,QAAQ,IAEnBA,EAAM,gBACJ,KAAK,OACL,KAAK,IAAI,QAAQ,EACjB,KAAK,IAAI,QAAQ,CAAA,EAEZ,KAAK,IACdA,EAAM,UACJA,EAAM,cACJ,KAAK,IACL,KAAK,IAAI,QAAQ,EACjB,KAAK,IAAI,QAAQ,IAEnBA,EAAM,gBACJ,KAAK,IACL,KAAK,IAAI,QAAQ,EACjB,KAAK,IAAI,QAAQ,CAAA,EAGrBA,EAAM,UAAY,GAGpBA,EAAM,UAAY,GAGhBA,EAAM,YACR,KAAK,UAAU,SAAS,EACxB,KAAK,mBAAqBA,EAAM,IAI5BA,EAAA,WAAaA,EAAM,IAAM,KAAK,gBAElC,KAAK,IAAI,QAAQ,SAChBA,EAAM,YACJ,CAAC,KAAK,iBACLA,EAAM,WACNA,EAAM,MACNA,EAAM,KAAK,QACf,CACA,KAAK,UAAU,UAAU,EACzBA,EAAM,WAAa,GACnB,KAAK,gBAAkBA,EAAM,GAC7B,IAAIjuC,EAAK,KAAK,IAAI,QAAQ,EAAI,KAAK,IAAI,MAAM,EACzCC,EAAK,KAAK,IAAI,QAAQ,EAAI,KAAK,IAAI,MAAM,EAC7C,GAAID,GAAMC,EAAI,CACZ,GAAIguC,EAAM,MAAQA,EAAM,KAAK,QAAUA,EAAM,KAAK,UAAW,CAC3D,MAAMwvB,EAAexvB,EAAM,KAAK,UAC7B,UAAU,CAAE,EAAGA,EAAM,CAAG,CAAA,EACxB,aAAa,KAAK,IAAI,QAAQ,EAAG,KAAK,IAAI,QAAQ,CAAC,EACjDjuC,EAAAy9D,EAAa,MAAM,EAAIxvB,EAAM,EAC7BhuC,EAAAw9D,EAAa,MAAM,EAAIxvB,EAAM,CACpC,EACIjuC,GAAMC,KACFguC,EAAA,KAAKjuC,EAAIC,CAAE,EACjBguC,EAAM,QAAQ,MAAM,OAAO,QAASl1D,GAAM,CACpCA,EAAE,MAAM,eAAiBA,IAAMk1D,GAC/Bl1D,EAAA,KAAKinB,EAAIC,CAAE,CACf,CACD,EAEL,CACA,KAAK,IAAI,SAAS,KAAK,IAAI,OAAO,CAAA,MACzBguC,EAAM,WAAaA,EAAM,MAAQA,EAAM,KAAK,QACrD,KAAK,UAAU,MAAM,EAGnB,KAAK,KACP,KAAK,IAAI,SAEb,CAEI,CAAC,KAAK,oBAAsB,CAAC,KAAK,iBACpC,KAAK,UAAU,SAAS,CAE5B,CAEO,OAAQ,CACR,KAAA,OAAO,QAASA,GAAU,CACzBA,EAAM,KACRA,EAAM,GAAG,SACT,OAAOA,EAAM,GACf,CACD,EACG,KAAK,KACP,KAAK,IAAI,YAEX,KAAK,OAAS,EAChB,CAEO,kBAAkBn8C,EAGtB,CACK,MAAA4rE,EAAY5rE,GAAS,WAAa,EAClC6rE,EAAa7rE,GAAS,YAAc,UAC1C,IAAI8rE,EAAe,GACnB,MAAM7kF,EAAIwwE,GACR,KAAK,QAAU,KAAK,WAAa,KAAK,UACtC,CACE,MAAO,IAAM,CACIqU,EAAA,GACX,KAAK,MACP,KAAK,IAAI,OACT,KAAK,IAAI,UAAYF,EACrB,KAAK,IAAI,YAAcC,EACvB,KAAK,IAAI,YAEb,EACA,IAAK,IAAM,CACL,KAAK,KAEP,KAAK,IAAI,SAEb,CACF,CAAA,EACA,UAAWxU,GAAQ,CACf,KAAK,MACFyU,EAIH,KAAK,IAAI,OAAOzU,EAAI,QAAQ,EAAGA,EAAI,QAAQ,CAAC,GAH7ByU,EAAA,GACf,KAAK,IAAI,OAAOzU,EAAI,QAAQ,EAAGA,EAAI,QAAQ,CAAC,GAI9C,KAAK,IAAI,SACX,CACD,EACD,MAAO,IAAM,CACXpwE,EAAE,YAAY,CAAA,CAElB,CAEO,mBAAmB+Y,EAIvB,CACK,MAAA4rE,EAAY5rE,GAAS,WAAa,GAClC+rE,EAAe/rE,GAAS,cAAgB,GACxC6rE,EAAa7rE,GAAS,YAAc,UACpCgsE,EAAmB,IAAInD,GAAMgD,CAAU,EACvCnmF,EAAIsmF,EAAiB,EACrB99E,EAAI89E,EAAiB,EACrBv3E,EAAIu3E,EAAiB,EACrB/kF,EAAIwwE,GACR,KAAK,QAAU,KAAK,WAAa,KAAK,SAAA,EACtC,UAAWJ,GAAQ,CACnB,GAAI,KAAK,IAAK,CACN,MAAAriC,EAAY,KAAK,IAAI,aACzB,EACA,EACA,KAAK,IAAI,OAAO,MAChB,KAAK,IAAI,OAAO,MAAA,EAEZi3C,EAASj3C,EAAU,KACzB,QAAS3tC,EAAI,EAAGA,EAAI0kF,EAAc1kF,IAAK,CACrC,MAAMo8C,EAAQ,KAAK,OAAO,EAAI,KAAK,GAAK,EAClC8J,EAAS,KAAK,OAAA,EAAWq+B,EACzBM,EAAQ7U,EAAI,QAAQ,EAAI,KAAK,IAAI5zB,CAAK,EAAI8J,EAAU,EACpD4+B,EAAQ9U,EAAI,QAAQ,EAAI,KAAK,IAAI5zB,CAAK,EAAI8J,EAAU,EACpD9iC,GAAUyhE,EAAOC,EAAOn3C,EAAU,OAAS,EAEjDi3C,EAAOxhE,CAAM,EAAI/kB,EACVumF,EAAAxhE,EAAS,CAAC,EAAIvc,EACd+9E,EAAAxhE,EAAS,CAAC,EAAIhW,EACdw3E,EAAAxhE,EAAS,CAAC,EAAI,GACvB,CACK,KAAA,IAAI,aAAauqB,CAAS,CACjC,CAAA,CACD,EACD,MAAO,IAAM,CACX/tC,EAAE,YAAY,CAAA,CAElB,CAEO,YAAc,IAAM,CACrB,KAAK,QACPs4E,GAAuB,KAAK,MAAM,CACpC,CAEJ,CC/eO,MAAM6M,WAAkBjvB,CAAM,CAC5B,WACA,WACA,SAEP,YAAYn9C,EAA4B,CAEtC,MAAM,CAAE,GAAGA,EAAS,QAAS,EAAG,QAAS,EAAG,EACvC,KAAA,WAAaA,GAAS,YAAc,EACzC,KAAK,WAAaA,GAAS,WAC3B,KAAK,SAAWA,GAAS,SACzB,KAAK,QAAQ,CACX,YAAa,KAAK,QAAQ,aAAa,GAAK,IAC5C,OAAQ,KAAK,YAAc,KAAK,QAAQ,QAAQ,GAAK,SAAA,CACtD,CACH,CAEU,YAAwB,CAOzB,OANO,IAAIosE,GAAU,CAC1B,GAAG,MAAM,eAAe,EACxB,WAAY,KAAK,WACjB,WAAY,KAAK,WACjB,SAAU,KAAK,QAAA,CAChB,CAEH,CAGO,oBAAoBlyB,EAAiC,CACpD,MAAA5W,EAASC,GAASE,GAAM,KAAK,EAAG,KAAK,EAAGyW,EAAM,EAAGA,EAAM,CAAC,CAAC,EACzDmyB,EAAal7D,GAAS,KAAK,EAAG,KAAK,EAAG+oC,EAAM,EAAGA,EAAM,CAAC,GACxD5W,GAAU,KAAK,QAAU+oC,GAAc,KAAK,cAC1C/oC,GAAU,KAAK,QACjB,KAAK,SAASA,CAAM,EAElB+oC,GAAc,KAAK,aACrB,KAAK,WAAaA,GAEpB,KAAK,kBAAoB,GAE7B,CAEO,eAAeC,EAAoBC,EAAkB,CAC1D,KAAK,WAAaD,EAClB,KAAK,SAAWC,EAChB,KAAK,QAAQ,CACX,OAAQ,KAAK,UAAA,CACd,CAEH,CACO,gBAAgBD,EAAoB,CACzC,KAAK,WAAaA,EAClB,KAAK,SAAW,OAChB,KAAK,QAAQ,CACX,OAAQ,KAAK,UAAA,CACd,CACH,CAEO,uBAAwB,CACtB,MAAA,CACL,EAAG,EACH,EAAG,EACH,MAAO,KAAK,WACZ,OAAQ,WAAW,KAAK,QAAQ,aAAa,CAAW,CAAA,CAE5D,CAEO,eAAqC,CACnC,MAAA,CACL,CAAC,IAAK,EAAG,CAAC,EACV,CAAC,IAAK,KAAK,WAAY,CAAC,CAAA,CAE5B,CAEO,gBAAgBx3C,EAA4B,CAC7C,KAAK,YAAc,KAAK,UAE1B,KAAK,QAAQ,CACX,OAAQA,EAAI,qBAAqB,EAAG,EAAG,KAAK,WAAY,EAAG,CACzD,EAAG,KAAK,WACR,EAAG,KAAK,QAAA,CACT,CAAA,CACF,EAEHA,EAAI,UAAU,EACVA,EAAA,OAAO,EAAG,CAAC,EACXA,EAAA,OAAO,KAAK,WAAY,CAAC,CAC/B,CAGO,aAAauc,EAAkD,CACpE,MAAMm7B,EAAK,KAAK,eAAe,EAAE,gBAAgB,CAAC,EAC5CC,EAAKp7B,EAAK,eAAe,EAAE,gBAAgB,CAAC,EAC3C,OAAAm7B,EAAG,aAAaC,CAAE,CAC3B,CACF,CC5GO,MAAMC,WAAmBvvB,CAAM,CAC7B,GACA,GACA,IACA,IACA,cAEP,YAAYn9C,EAA6B,CACvC,MAAMA,CAAO,EACR,KAAA,GAAKA,GAAS,IAAM,EACpB,KAAA,GAAKA,GAAS,IAAM,EACpB,KAAA,IAAMA,GAAS,KAAO,EACtB,KAAA,IAAMA,GAAS,KAAO,EAC3B,KAAK,cACH,OAAOA,GAAS,eAAiB,UAC7BA,EAAQ,cACR,GACN,KAAK,QAAQ,CACX,YAAa,KAAK,QAAQ,aAAa,GAAK,IAC5C,OAAQ,KAAK,QAAQ,QAAQ,GAAK,SAAA,CACnC,CACH,CAEU,YAAyB,CAS1B,OARO,IAAI0sE,GAAW,CAC3B,GAAG,MAAM,eAAe,EACxB,GAAI,KAAK,GACT,GAAI,KAAK,GACT,IAAK,KAAK,IACV,IAAK,KAAK,IACV,cAAe,KAAK,aAAA,CACrB,CAEH,CAGO,OAAO1sE,EAAqC,CAC7C,OAAOA,EAAQ,IAAM,WACvB,KAAK,GAAKA,EAAQ,GAClB,KAAK,kBAAoB,IAEvB,OAAOA,EAAQ,IAAM,WACvB,KAAK,GAAKA,EAAQ,GAClB,KAAK,kBAAoB,IAEvB,OAAOA,EAAQ,KAAO,WACxB,KAAK,IAAMA,EAAQ,IACnB,KAAK,kBAAoB,IAEvB,OAAOA,EAAQ,KAAO,WACxB,KAAK,IAAMA,EAAQ,IACnB,KAAK,kBAAoB,IAEvB,OAAOA,EAAQ,eAAiB,YAClC,KAAK,cAAgBA,EAAQ,cAC7B,KAAK,kBAAoB,GAE7B,CAEO,eAAqC,CAC1C,GAAI,KAAK,cAAe,CACtB,MAAMszC,EAAM,KAAK,GAAK,GAAK,EAAI,KAAK,KAAO,EACrCC,EAAM,KAAK,GAAK,GAAK,EAAI,KAAK,KAAO,EACpC,MAAA,CACL,CAAC,IAAK,EAAG,CAAC,EACV,CAAC,IAAKD,EAAKC,EAAK,KAAK,IAAK,KAAK,GAAG,CAAA,CACpC,KAEO,OAAA,CACL,CAAC,IAAK,EAAG,CAAC,EACV,CAAC,IAAK,KAAK,GAAI,KAAK,GAAI,KAAK,IAAK,KAAK,GAAG,CAAA,CAGhD,CAEO,gBAAgBze,EAA4B,CAGjD,GAFAA,EAAI,UAAU,EACVA,EAAA,OAAO,EAAG,CAAC,EACX,KAAK,cAAe,CACtB,MAAMwe,EAAM,KAAK,GAAK,GAAK,EAAI,KAAK,KAAO,EACrCC,EAAM,KAAK,GAAK,GAAK,EAAI,KAAK,KAAO,EAC3Cze,EAAI,iBAAiBwe,EAAKC,EAAK,KAAK,IAAK,KAAK,GAAG,CAAA,MAE7Cze,EAAA,iBAAiB,KAAK,GAAI,KAAK,GAAI,KAAK,IAAK,KAAK,GAAG,CAE7D,CACF,CCrFO,MAAM63C,WAAoBxvB,CAAM,CAC7B,OACD,WAEP,YAAYn9C,EAA8B,CACxC,MAAMA,CAAO,EACR,KAAA,OAASA,GAAS,QAAU,CAAA,EACjC,KAAK,WACH,OAAOA,GAAS,YAAc,UAAYA,EAAQ,WAAa,GACjE,KAAK,QAAQ,CACX,YAAa,KAAK,QAAQ,aAAa,GAAK,IAC5C,OAAQ,KAAK,QAAQ,QAAQ,GAAK,SAAA,CACnC,CACH,CAEU,YAA0B,CAM3B,OALO,IAAI2sE,GAAY,CAC5B,GAAG,MAAM,eAAe,EACxB,OAAQ,CAAC,GAAG,KAAK,MAAM,EACvB,WAAY,KAAK,UAAA,CAClB,CAEH,CAGO,OAAO3sE,EAAsC,CAC9C,WAAYA,IACd,KAAK,OAAS,CAAC,GAAIA,EAAQ,QAAU,KAAK,MAAO,EACjD,KAAK,kBAAoB,IAEvB,OAAOA,EAAQ,YAAc,YAC/B,KAAK,WAAaA,EAAQ,WAC1B,KAAK,kBAAoB,GAE7B,CAEO,eAAqC,CAC1C,MAAM6S,EAA4B,CAAA,EAC9B,GAAA,KAAK,OAAO,OAAS,EAEhB,OAAAA,EAEH,MAAA+5D,EAAY,KAAK,OAAO,OAC9B,GAAI,KAAK,WAAY,CACnB/5D,EAAK,KAAK,CAAC,IAAK,KAAK,OAAO,CAAC,EAAE,EAAG,KAAK,OAAO,CAAC,EAAE,CAAC,CAAC,EACnD,QAASxrB,EAAI,EAAGA,GAAKulF,EAAY,EAAGvlF,IAClCwrB,EAAK,KAAK,CACR,IACA,KAAK,OAAOxrB,CAAC,EAAE,EAAI,KAAK,OAAOA,EAAI,CAAC,EAAE,EACtC,KAAK,OAAOA,CAAC,EAAE,EAAI,KAAK,OAAOA,EAAI,CAAC,EAAE,CAAA,CACvC,EAEEwrB,EAAA,KAAK,CAAC,GAAG,CAAC,CAAA,KACV,CAEC,MAAAg6D,GAAe,KAAK,OAAO,CAAC,EAAE,EAAI,KAAK,OAAOD,EAAY,CAAC,EAAE,GAAK,EAClEE,GAAe,KAAK,OAAO,CAAC,EAAE,EAAI,KAAK,OAAOF,EAAY,CAAC,EAAE,GAAK,EACxE,IAAIvR,EAAQwR,EACRvR,EAAQwR,EACZj6D,EAAK,KAAK,CAAC,IAAKwoD,EAAOC,CAAK,CAAC,EAE7B,QAASj0E,EAAI,EAAGA,EAAIulF,EAAY,EAAGvlF,IAAK,CAChC,MAAA0lF,GAAc,KAAK,OAAO1lF,CAAC,EAAE,EAAI,KAAK,OAAOA,EAAI,CAAC,EAAE,GAAK,EACzD2lF,GAAc,KAAK,OAAO3lF,CAAC,EAAE,EAAI,KAAK,OAAOA,EAAI,CAAC,EAAE,GAAK,EAC/DwrB,EAAK,KAAK,CACR,IACA,KAAK,OAAOxrB,CAAC,EAAE,EAAIg0E,EACnB,KAAK,OAAOh0E,CAAC,EAAE,EAAIi0E,EACnByR,EAAa1R,EACb2R,EAAa1R,CAAA,CACd,EACOD,EAAA0R,EACAzR,EAAA0R,CACV,CAEAn6D,EAAK,KAAK,CACR,IACA,KAAK,OAAO+5D,EAAY,CAAC,EAAE,EAAIvR,EAC/B,KAAK,OAAOuR,EAAY,CAAC,EAAE,EAAItR,EAC/BuR,EAAcxR,EACdyR,EAAcxR,CAAA,CACf,CACH,CACO,OAAAzoD,CACT,CAEO,gBAAgBiiB,EAA4B,CAC7C,GAAA,KAAK,OAAO,OAAS,EAEvB,OAEFA,EAAI,UAAU,EACR,MAAA83C,EAAY,KAAK,OAAO,OAC9B,GAAI,KAAK,WAAY,CACf93C,EAAA,OAAO,KAAK,OAAO,CAAC,EAAE,EAAG,KAAK,OAAO,CAAC,EAAE,CAAC,EAC7C,QAASztC,EAAI,EAAGA,GAAKulF,EAAY,EAAGvlF,IAC9BytC,EAAA,OAAO,KAAK,OAAOztC,CAAC,EAAE,EAAG,KAAK,OAAOA,CAAC,EAAE,CAAC,EAE/CytC,EAAI,UAAU,CAAA,KACT,CAEC,MAAA+3C,GAAe,KAAK,OAAO,CAAC,EAAE,EAAI,KAAK,OAAOD,EAAY,CAAC,EAAE,GAAK,EAClEE,GAAe,KAAK,OAAO,CAAC,EAAE,EAAI,KAAK,OAAOF,EAAY,CAAC,EAAE,GAAK,EACpE93C,EAAA,OAAO+3C,EAAaC,CAAW,EAEnC,QAASzlF,EAAI,EAAGA,EAAIulF,EAAY,EAAGvlF,IAAK,CAChC,MAAA0lF,GAAc,KAAK,OAAO1lF,CAAC,EAAE,EAAI,KAAK,OAAOA,EAAI,CAAC,EAAE,GAAK,EACzD2lF,GAAc,KAAK,OAAO3lF,CAAC,EAAE,EAAI,KAAK,OAAOA,EAAI,CAAC,EAAE,GAAK,EAC3DytC,EAAA,iBACF,KAAK,OAAOztC,CAAC,EAAE,EACf,KAAK,OAAOA,CAAC,EAAE,EACf0lF,EACAC,CAAA,CAEJ,CAEIl4C,EAAA,iBACF,KAAK,OAAO83C,EAAY,CAAC,EAAE,EAC3B,KAAK,OAAOA,EAAY,CAAC,EAAE,EAC3BC,EACAC,CAAA,CAEJ,CACF,CAEO,eAAe5yB,EAAiC,CAC/C,MAAArvB,EAAQ,KAAK,OAAO,OAC1B,IAAIoiD,EAAW,GACf,MAAMxyB,EAAY,MAET,QAAApzD,EAAI,EAAG4E,EAAI4+B,EAAQ,EAAGxjC,EAAIwjC,EAAO5+B,EAAI5E,EAAGA,IAAK,CACpD,MAAMgoC,EAAK,KAAK,OAAOhoC,CAAC,EAAE,EACpBioC,EAAK,KAAK,OAAOjoC,CAAC,EAAE,EACpBkoC,EAAK,KAAK,OAAOtjC,CAAC,EAAE,EACpBujC,EAAK,KAAK,OAAOvjC,CAAC,EAAE,EAS1B,GANGojC,IAAO6qB,EAAM,GAAK5qB,IAAO4qB,EAAM,GAC/B3qB,IAAO2qB,EAAM,GAAK1qB,IAAO0qB,EAAM,GAK9BA,EAAM,IAAM5qB,GAAM4qB,EAAM,IAAM1qB,EACzB,MAAA,GAGJ,GAAA0qB,EAAM,GAAK5qB,GAAM4qB,EAAM,EAAI1qB,GAAQ0qB,EAAM,EAAI5qB,GAAM4qB,EAAM,GAAK1qB,EAAK,CAChE,MAAA74B,GAAK44B,EAAKF,IAAOG,EAAKF,GACtBszB,EAAKvzB,EAAK14B,GAAKujD,EAAM,EAAI5qB,GAM/B,GAJIszB,IAAO1I,EAAM,GAIb,KAAK,IAAI0I,EAAK1I,EAAM,CAAC,EAAIO,EACpB,MAAA,GAGLmI,EAAK1I,EAAM,IACb+yB,EAAW,CAACA,EAEhB,CACF,CAEO,OAAAA,CACT,CAEA,CAAQ,OAAO,QAAQ,GAAI,CACzB,IAAInpE,EAAQ,GACL,MAAA,CACL,KAAM,KAAO,CACX,MACEA,GAAS,KAAK,OAAO,OAAS,EAAI,KAAK,OAAO,EAAEA,CAAK,EAAI,OAC3D,KAAMA,GAAS,KAAK,OAAO,MAAA,EAC7B,CAEJ,CAEA,OAAc,SACZmsC,EACAC,EACAg9B,EACAC,EACa,CACb,MAAMr0B,EAAqC,CAAA,EAC3C,QAASzxD,EAAI,EAAGA,EAAI8lF,EAAW9lF,IAAK,CAClC,MAAM4gD,EAAS5gD,EAAI8lF,EAAa,EAAI,KAAK,GACnC,CAAE,GAAAj/D,EAAI,GAAAC,CAAA,EAAO21B,GAAMmE,EAAOilC,CAAY,EACrCp0B,EAAA,KAAK,CAAE,EAAG7I,EAAU/hC,EAAI,EAAGgiC,EAAU/hC,EAAI,CAClD,CACA,OAAO,IAAIw+D,GAAY,CAAE,OAAA7zB,CAAA,CAAQ,CACnC,CACF,CC5MO,MAAMs0B,WAAuB5G,EAAW,CACrC,OAAS,IAEjB,YAAYxmE,EAA6B,CACvC,MAAMA,CAAO,EAEP,MAAAqtE,EAAQ,IAAIjB,GAAU,CAC1B,KAAM,CACJ,cAAe,EACjB,EACA,WAAY,KAAK,MAAA,CAClB,EACD,KAAK,SAASiB,CAAK,EAEb,MAAAC,EAAQ,IAAIlB,GAAU,CAC1B,KAAM,CACJ,cAAe,EACjB,EACA,WAAY,GAAK,KAAK,OAAW,EAAA,EAAA,CAClC,EACD,KAAK,SAASkB,EAAO,CACnB,GAAI,GAAK,KAAK,OAAW,EAAA,GACzB,QAAS,KAAK,OAAA,EAAW,EAAA,CAC1B,EAEK,MAAAC,EAAQ,IAAInB,GAAU,CAC1B,KAAM,CACJ,cAAe,EACjB,EACA,WAAY,GAAK,KAAK,OAAW,EAAA,EAAA,CAClC,EACD,KAAK,SAASmB,EAAO,CACnB,GAAI,GAAK,KAAK,OAAW,EAAA,GACzB,QAAS,CAAC,KAAK,OAAA,EAAW,EAAA,CAC3B,EAEI,KAAA,YAAY,IAAK,EAAI,CAC5B,CAEU,iBAAkC,CAEnC,OADY,IAAIH,GAAe,MAAM,eAAgB,CAAA,CAE9D,CACF,CCrCO,MAAMI,WAAkBrwB,CAAM,CAC5B,WAEP,YAAYn9C,EAA4B,CACtC,MAAMA,CAAO,EACR,KAAA,WAAaA,GAAS,YAAc,CAC3C,CAEU,YAAwB,CAKzB,OAJO,IAAIwtE,GAAU,CAC1B,GAAG,MAAM,eAAe,EACxB,WAAY,KAAK,UAAA,CAClB,CAEH,CAGO,OAAOxtE,EAAoC,CAC5C,OAAOA,EAAQ,YAAc,WAC/B,KAAK,WAAaA,EAAQ,WAC1B,KAAK,kBAAoB,GAE7B,CAEO,uBAAwB,CACtB,MAAA,CACL,EAAG,CAAC,KAAK,WACT,EAAG,CAAC,KAAK,WACT,MAAO,KAAK,WAAa,EACzB,OAAQ,KAAK,WAAa,CAAA,CAE9B,CAEO,SAAsB,CACrB,MAAAJ,EAAKw/D,GAAiB,QAAQ,EACpC,YAAK,QAAQ,CACX,GAAI,IACJ,GAAI,IACJ,EAAG,OAAO,KAAK,UAAU,CAAA,CAC1B,EACMx/D,CACT,CAEO,eAAqC,CAC1C,OAAI,KAAK,WACA,CACL,CAAC,IAAK,EAAG,CAAC,KAAK,UAAU,EACzB,CACE,IACA,KAAK,WACL,KAAK,WACL,EACA,EACA,EACA,EACA,EAAI,KAAK,UACX,EACA,CACE,IACA,KAAK,WACL,KAAK,WACL,EACA,EACA,EACA,EACA,GAAK,KAAK,UACZ,EACA,CAAC,GAAG,CAAA,EAGC,CAAC,CAAC,IAAK,EAAG,CAAC,CAAC,CAEvB,CAEO,gBAAgBk1B,EAAsB,CAC3CA,EAAI,UAAU,EACVA,EAAA,IAAI,EAAG,EAAG,KAAK,WAAY,EAAG,KAAK,GAAK,EAAG,EAAI,EACnDA,EAAI,UAAU,CAChB,CAEO,GAAG24C,EAA0B,CAClC,OACE,KAAK,IAAMA,EAAK,GAChB,KAAK,IAAMA,EAAK,GAChB,KAAK,aAAeA,EAAK,YACzB,KAAK,OAASA,EAAK,IAEvB,CAEO,YAAYA,EAAiB,CAC3B,MAAA,CACL,EAAG,KAAK,GAAKA,EAAK,EAAI,KAAK,GAAK,EAChC,EAAG,KAAK,GAAKA,EAAK,EAAI,KAAK,GAAK,CAAA,CAEpC,CAEO,QAAS,CACd,OAAOxwE,GAAO,KAAK,EAAG,KAAK,CAAC,CAC9B,CAEO,OAAO0gD,EAAe,CAC3B,YAAK,OAAO,KAAK,EAAIA,EAAO,KAAK,EAAIA,CAAK,EACnC,IACT,CAEO,UAAUhnB,EAAM,EAAc,CAC7B,MAAAykB,EAAc,KAAK,SACzB,GAAIA,EAAa,CACf,MAAMuC,EAAQhnB,EAAMykB,EACpB,KAAK,OAAOuC,CAAK,CACnB,CACO,OAAA,IACT,CAEO,MAAMhnB,EAAa,CAClB,MAAAykB,EAAc,KAAK,SACrB,OAAAA,GAAeA,EAAczkB,GAC1B,KAAA,OAAOA,EAAMykB,CAAW,EAExB,IACT,CAEO,MAAM/C,EAA8B,CACzC,MAAM/iD,EAAI,KAAK,EACTF,EAAI,KAAK,EACR,MAAA,CACL,EAAGA,EAAIijD,EAAG,EAAI/iD,EAAI+iD,EAAG,EACrB,EAAG/iD,EAAI+iD,EAAG,EAAIjjD,EAAIijD,EAAG,CAAA,CAEzB,CAEO,SAASA,EAA8B,CACrC,MAAA,CACL,EAAG,KAAK,EAAIA,EAAG,EACf,EAAG,KAAK,EAAIA,EAAG,CAAA,CAEnB,CAEO,IAAIA,EAA8B,CAChC,MAAA,CACL,EAAG,KAAK,EAAIA,EAAG,EACf,EAAG,KAAK,EAAIA,EAAG,CAAA,CAEnB,CAEO,IAAIA,EAA8B,CAChC,MAAA,CACL,EAAG,KAAK,EAAIA,EAAG,EACf,EAAG,KAAK,EAAIA,EAAG,CAAA,CAEnB,CAEO,IAAIA,EAA8B,CAChC,MAAA,CACL,EAAG,KAAK,EAAIA,EAAG,EACf,EAAG,KAAK,EAAIA,EAAG,CAAA,CAEnB,CAEO,IAAIA,EAAsC,CAC/C,OAAO,KAAK,EAAIA,EAAG,EAAI,KAAK,EAAIA,EAAG,CACrC,CAEO,QAAQA,EAA8B,CACrC,MAAAuF,EAAK,KAAK,IAAIvF,CAAE,EACf,MAAA,CACL,EAAG,KAAK,EAAI,EAAIuF,EAAKvF,EAAG,EACxB,EAAG,KAAK,EAAI,EAAIuF,EAAKvF,EAAG,CAAA,CAE5B,CACF,CC/KO,MAAMq1B,WAAmBvwB,CAAM,CACpC,YAAYn9C,EAAwB,CAClC,MAAMA,CAAO,CACf,CAEU,YAAyB,CAI1B,OAHO,IAAI0tE,GAAW,CAC3B,GAAG,MAAM,eAAe,CAAA,CACzB,CAEH,CAEO,eAAqC,CACnC,MAAA,CACL,CAAC,IAAK,IAAK,GAAG,EACd,CAAC,IAAK,GAAI,CAAC,EACX,CAAC,IAAK,EAAG,GAAG,EACZ,CAAC,IAAK,GAAI,EAAE,EACZ,CAAC,IAAK,IAAK,EAAE,EACb,CAAC,IAAK,EAAG,GAAG,EACZ,CAAC,IAAK,IAAK,CAAC,EACZ,CAAC,IAAK,EAAG,GAAG,EACZ,CAAC,GAAG,CAAA,CAER,CAEO,gBAAgB54C,EAAsB,CAC3CA,EAAI,UAAU,EACVA,EAAA,OAAO,IAAK,GAAG,EACfA,EAAA,OAAO,EAAG,GAAG,EACbA,EAAA,OAAO,EAAG,GAAG,EACbA,EAAA,OAAO,GAAI,CAAC,EACZA,EAAA,OAAO,EAAG,EAAE,EACZA,EAAA,OAAO,EAAG,EAAE,EACZA,EAAA,OAAO,IAAK,EAAE,EACdA,EAAA,OAAO,IAAK,GAAG,EACnBA,EAAI,UAAU,CAChB,CACF,CC/BO,MAAM64C,WAAkBxwB,CAAM,CACnC,UACA,WACA,iBAEA,YAAYn9C,EAA2B,CACrC,MAAMA,CAAO,EACR,KAAA,UAAYA,EAAQ,WAAa,EACjC,KAAA,WAAaA,EAAQ,YAAc,EACnC,KAAA,iBAAmBA,EAAQ,kBAAoB,CACtD,CAEU,YAAwB,CAOzB,OANO,IAAI2tE,GAAU,CAC1B,GAAG,MAAM,eAAe,EACxB,UAAW,KAAK,UAChB,WAAY,KAAK,WACjB,iBAAkB,KAAK,gBAAA,CACxB,CAEH,CAGO,OAAO3tE,EAAoC,CAC5C,OAAOA,EAAQ,WAAa,WAC9B,KAAK,UAAYA,EAAQ,UACzB,KAAK,kBAAoB,IAEvB,OAAOA,EAAQ,YAAc,WAC/B,KAAK,WAAaA,EAAQ,WAC1B,KAAK,kBAAoB,IAEvB,OAAOA,EAAQ,kBAAoB,WACrC,KAAK,iBAAmBA,EAAQ,iBAChC,KAAK,kBAAoB,GAE7B,CAEO,uBAAwB,CACtB,MAAA,CACL,EAAG,EACH,EAAG,EACH,MAAO,KAAK,UACZ,OAAQ,KAAK,UAAA,CAEjB,CAEO,SAA6B,CAC5B,MAAAJ,EAAKw/D,GAAiB,MAAM,EAClC,YAAK,QAAQ,CACX,EAAG,IACH,EAAG,IACH,MAAO,OAAO,KAAK,SAAS,EAC5B,OAAQ,OAAO,KAAK,UAAU,EAC9B,GAAI,OAAO,KAAK,gBAAgB,EAChC,GAAI,OAAO,KAAK,gBAAgB,CAAA,CACjC,EACMx/D,CACT,CAEO,eAAqC,CACtC,OAAC,KAAK,iBASD,CACL,CAAC,IAAK,KAAK,iBAAkB,CAAC,EAC9B,CAAC,IAAK,KAAK,UAAY,KAAK,iBAAmB,EAAG,CAAC,EACnD,CACE,IACA,KAAK,iBACL,KAAK,iBACL,EACA,EACA,EACA,KAAK,iBACL,KAAK,gBACP,EACA,CAAC,IAAK,EAAG,KAAK,WAAa,KAAK,iBAAmB,CAAC,EACpD,CACE,IACA,KAAK,iBACL,KAAK,iBACL,EACA,EACA,EACA,CAAC,KAAK,iBACN,KAAK,gBACP,EACA,CAAC,IAAK,KAAK,iBAAmB,EAAI,KAAK,UAAW,CAAC,EACnD,CACE,IACA,KAAK,iBACL,KAAK,iBACL,EACA,EACA,EACA,CAAC,KAAK,iBACN,CAAC,KAAK,gBACR,EACA,CAAC,IAAK,EAAG,KAAK,iBAAmB,EAAI,KAAK,UAAU,EACpD,CACE,IACA,KAAK,iBACL,KAAK,iBACL,EACA,EACA,EACA,KAAK,iBACL,CAAC,KAAK,gBACR,EACA,CAAC,GAAG,CAAA,EAtDC,CACL,CAAC,IAAK,EAAG,CAAC,EACV,CAAC,IAAK,KAAK,UAAW,CAAC,EACvB,CAAC,IAAK,EAAG,KAAK,UAAU,EACxB,CAAC,IAAK,CAAC,KAAK,UAAW,CAAC,EACxB,CAAC,GAAG,CAAA,CAoDV,CAEO,gBAAgBk1B,EAAsB,CAC3CA,EAAI,UAAU,EACV,KAAK,kBAAoB,EAC3BA,EAAI,KAAK,EAAG,EAAG,KAAK,UAAW,KAAK,UAAU,GAE1CA,EAAA,OAAO,EAAG,KAAK,gBAAgB,EACnCA,EAAI,OAAO,EAAG,KAAK,WAAa,KAAK,gBAAgB,EACjDA,EAAA,iBACF,EACA,KAAK,WACL,KAAK,iBACL,KAAK,UAAA,EAEPA,EAAI,OAAO,KAAK,UAAY,KAAK,iBAAkB,KAAK,UAAU,EAC9DA,EAAA,iBACF,KAAK,UACL,KAAK,WACL,KAAK,UACL,KAAK,WAAa,KAAK,gBAAA,EAEzBA,EAAI,OAAO,KAAK,UAAW,KAAK,gBAAgB,EAC5CA,EAAA,iBACF,KAAK,UACL,EACA,KAAK,UAAY,KAAK,iBACtB,CAAA,EAEEA,EAAA,OAAO,KAAK,iBAAkB,CAAC,EACnCA,EAAI,iBAAiB,EAAG,EAAG,EAAG,KAAK,gBAAgB,GAErDA,EAAI,UAAU,CAChB,CAEA,OAAc,gBACZ84C,EACAC,EACAv6B,EACAC,EACAqG,EACAC,EACAi0B,EACAC,EACW,CAWL,MAAA//B,EAVc,IAAI2F,GAAY,CAClC,EAAGi6B,EACH,EAAGC,EACH,IAAAv6B,EACA,IAAAC,EACA,IAAAqG,EACA,IAAAC,EACA,IAAKi0B,EACL,IAAKC,CAAA,CACN,EACwB,wBACzB,OAAO,IAAIJ,GAAU,CACnB,EAAG3/B,EAAK,EACR,EAAGA,EAAK,EACR,UAAWA,EAAK,MAChB,WAAYA,EAAK,MAAA,CAClB,CACH,CAEO,GAAGA,EAA0B,CAClC,OACE,KAAK,IAAMA,EAAK,GAChB,KAAK,IAAMA,EAAK,GAChB,KAAK,YAAcA,EAAK,WACxB,KAAK,aAAeA,EAAK,YACzB,KAAK,mBAAqBA,EAAK,gBAEnC,CAEO,aAAaA,EAA0B,CACrC,MAAA,EACL,KAAK,EAAI,KAAK,UAAYA,EAAK,GAC/BA,EAAK,EAAIA,EAAK,UAAY,KAAK,GAC/B,KAAK,EAAI,KAAK,WAAaA,EAAK,GAChCA,EAAK,EAAIA,EAAK,WAAa,KAAK,EAEpC,CAEO,eAAehgD,EAA6B,CACjD,OACEA,EAAE,GAAK,KAAK,GACZA,EAAE,GAAK,KAAK,EAAI,KAAK,WACrBA,EAAE,GAAK,KAAK,GACZA,EAAE,GAAK,KAAK,EAAI,KAAK,UAEzB,CACF,CCpNO,MAAMggF,WAAmB7wB,CAAM,CACpC,GACA,GAEA,YAAYn9C,EAA6B,CACvC,MAAMA,CAAO,EACR,KAAA,GAAKA,GAAS,SAAW,GACzB,KAAA,GAAKA,GAAS,SAAW,EAChC,CAEU,YAAyB,CAM1B,OALO,IAAIguE,GAAW,CAC3B,GAAG,MAAM,eAAe,EACxB,QAAS,KAAK,GACd,QAAS,KAAK,EAAA,CACf,CAEH,CAEO,eAAqC,CACnC,MAAA,CACL,CAAC,IAAK,EAAG,CAAC,EAEV,CAAC,IAAK,KAAK,GAAK,IAAK,CAAC,KAAK,GAAK,IAAI,EAEpC,CAAC,IAAK,KAAK,GAAK,EAAG,KAAK,GAAK,EAAG,EAAG,EAAG,EAAG,CAAC,KAAK,GAAK,IAAK,CAAC,KAAK,GAAK,GAAG,EAEvE,CAAC,IAAK,KAAK,GAAK,EAAG,KAAK,GAAK,EAAG,EAAG,EAAG,EAAG,CAAC,KAAK,GAAK,IAAK,KAAK,GAAK,GAAG,EAEtE,CAAC,IAAK,KAAK,GAAK,IAAK,KAAK,GAAK,IAAI,EACnC,CAAC,GAAG,CAAA,CAER,CACF,CCjCO,MAAMC,WAA0B9wB,CAAM,CAC3C,GACA,GAEA,YAAYn9C,EAAoC,CAC9C,MAAMA,CAAO,EACR,KAAA,GAAKA,GAAS,SAAW,GACzB,KAAA,GAAKA,GAAS,SAAW,EAChC,CAEU,YAAgC,CAMjC,OALO,IAAIiuE,GAAkB,CAClC,GAAG,MAAM,eAAe,EACxB,QAAS,KAAK,GACd,QAAS,KAAK,EAAA,CACf,CAEH,CAEO,eAAqC,CACnC,MAAA,CACL,CAAC,IAAK,EAAG,EAAI,KAAK,GAAK,EAAG,EAE1B,CAAC,IAAK,EAAG,EAAG,EAAI,KAAK,GAAK,EAAG,EAAG,EAAI,KAAK,GAAK,EAAG,EAAI,KAAK,GAAK,EAAG,EAElE,CACE,IACA,EAAI,KAAK,GAAK,EACd,GAAK,KAAK,GAAK,KAAK,GAAK,IAAO,EAChC,EACA,GAAK,KAAK,GAAK,KAAK,GAAK,IAAO,IAChC,EACA,EAAI,KAAK,EACX,EAEA,CACE,IACA,EACA,GAAK,KAAK,GAAK,KAAK,GAAK,IAAO,IAChC,EAAI,KAAK,GAAK,EACd,GAAK,KAAK,GAAK,KAAK,GAAK,IAAO,EAChC,EAAI,KAAK,GAAK,EACd,EAAI,KAAK,GAAK,EAChB,EAEA,CAAC,IAAK,EAAI,KAAK,GAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAI,KAAK,GAAK,EAAG,EACpD,CAAC,GAAG,CAAA,CAER,CACF,CCjDO,MAAMC,WAAkB/wB,CAAM,CACnC,EAEA,YAAYn9C,EAA4B,CACtC,MAAMA,CAAO,EACR,KAAA,EAAIA,GAAS,OAAS,EAC7B,CAEU,YAAwB,CAKzB,OAJO,IAAIkuE,GAAU,CAC1B,GAAG,MAAM,eAAe,EACxB,MAAO,KAAK,CAAA,CACb,CAEH,CAEO,eAAqC,CACpC,MAAAr7D,EAA4B,CAAC,CAAC,IAAK,EAAG,CAAC,KAAK,CAAC,CAAC,EACpD,QAASroB,EAAI,EAAGA,EAAI,EAAGA,GAAK,EAAG,CAEvB,MAAA84C,EAAS,IAAW94C,EAAI,IACxBynD,EAAK,KAAK,EAAI,KAAK,IAAI5O,EAASC,CAAM,CAAC,EACvC4O,EAAK,KAAK,EAAI,KAAK,IAAI7O,EAASC,CAAM,CAAC,EAC7CzwB,EAAK,KAAK,CAAC,IAAKo/B,EAAIC,CAAE,CAAC,CACzB,CACO,OAAAr/B,CACT,CACF,CChCO,MAAMs7D,WAAiBhxB,CAAM,CAClC,YAAYn9C,EAAwB,CAClC,MAAMA,CAAO,CACf,CAEU,YAAuB,CAIxB,OAHO,IAAImuE,GAAS,CACzB,GAAG,MAAM,eAAe,CAAA,CACzB,CAEH,CAEO,eAAqC,CACnC,MAAA,CACL,CAAC,IAAK,EAAG,EAAE,EACX,CAAC,IAAK,EAAG,EAAE,EACX,CAAC,IAAK,EAAG,EAAE,EACX,CAAC,IAAK,EAAG,GAAG,EACZ,CAAC,IAAK,GAAI,GAAG,EACb,CAAC,IAAK,GAAI,EAAE,EACZ,CAAC,IAAK,GAAI,CAAC,EACX,CAAC,IAAK,GAAI,GAAG,EACb,CAAC,IAAK,GAAI,EAAE,EACZ,CAAC,IAAK,EAAG,EAAE,EACX,CAAC,IAAK,EAAG,CAAC,EACV,CAAC,IAAK,EAAG,CAAC,EACV,CAAC,GAAG,CAAA,CAER,CAEO,gBAAgBr5C,EAAsB,CAC3CA,EAAI,UAAU,EACVA,EAAA,OAAO,EAAG,EAAE,EACZA,EAAA,OAAO,EAAG,EAAE,EACZA,EAAA,OAAO,GAAI,EAAE,EACbA,EAAA,OAAO,GAAI,CAAC,EACZA,EAAA,OAAO,EAAG,GAAG,EACbA,EAAA,OAAO,EAAG,CAAC,EACXA,EAAA,OAAO,GAAI,CAAC,EACZA,EAAA,OAAO,GAAI,GAAG,EACdA,EAAA,OAAO,IAAK,CAAC,EACbA,EAAA,OAAO,IAAK,EAAE,EACdA,EAAA,OAAO,GAAI,EAAE,EACbA,EAAA,OAAO,GAAI,EAAE,EACjBA,EAAI,UAAU,CAChB,CACF,CC9CO,MAAMs5C,WAAoBjxB,CAAM,CACrC,YAAYn9C,EAAwB,CAClC,MAAMA,CAAO,CACf,CAEU,YAA0B,CAI3B,OAHO,IAAIouE,GAAY,CAC5B,GAAG,MAAM,eAAe,CAAA,CACzB,CAEH,CAEO,eAAqC,CACnC,MAAA,CACL,CAAC,IAAK,EAAG,CAAC,EACV,CAAC,IAAK,GAAI,EAAG,GAAI,IAAK,EAAG,GAAG,EAC5B,CAAC,IAAK,EAAG,CAAC,EACV,CAAC,IAAK,IAAK,EAAG,IAAK,IAAK,GAAI,GAAG,EAC/B,CAAC,IAAK,EAAG,CAAC,EACV,CAAC,IAAK,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAI,EAAE,EAChC,CAAC,IAAK,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GAAK,EAAE,CAAA,CAErC,CACF,CCvBO,MAAMC,WAAmBlxB,CAAM,CACpC,YAAYn9C,EAAwB,CAC5B,MAAA,CACJ,GAAGA,EACH,MAAO,qSAAA,CACR,CACH,CAEU,YAAyB,CAI1B,OAHO,IAAIquE,GAAW,CAC3B,GAAG,MAAM,eAAe,CAAA,CACzB,CAEH,CACF,CCRO,MAAMC,WAAqBnxB,CAAM,CAC/B,GACA,GAEP,YAAYn9C,EAA8B,CACxC,MAAMA,CAAO,EACR,KAAA,GAAKA,GAAS,IAAM,EACpB,KAAA,GAAKA,GAAS,IAAM,CAC3B,CAEU,YAA2B,CAM5B,OALO,IAAIsuE,GAAa,CAC7B,GAAG,MAAM,eAAe,EACxB,GAAI,KAAK,GACT,GAAI,KAAK,EAAA,CACV,CAEH,CAEO,uBAAwB,CACtB,MAAA,CACL,EAAG,KAAK,EAAI,KAAK,GACjB,EAAG,KAAK,EAAI,KAAK,GACjB,MAAO,KAAK,GAAK,EACjB,OAAQ,KAAK,GAAK,CAAA,CAEtB,CAEO,SAAsB,CACrB,MAAA1uE,EAAKw/D,GAAiB,SAAS,EACrC,YAAK,QAAQ,CACX,GAAI,IACJ,GAAI,IACJ,GAAI,OAAO,KAAK,EAAE,EAClB,GAAI,OAAO,KAAK,EAAE,CAAA,CACnB,EACMx/D,CACT,CAEO,eAAqC,CACnC,MAAA,CACL,CAAC,IAAK,EAAG,CAAC,KAAK,EAAE,EACjB,CAAC,IAAK,KAAK,GAAI,KAAK,GAAI,EAAG,EAAG,EAAG,EAAG,EAAI,KAAK,EAAE,EAC/C,CAAC,IAAK,KAAK,GAAI,KAAK,GAAI,EAAG,EAAG,EAAG,EAAG,GAAK,KAAK,EAAE,EAChD,CAAC,GAAG,CAAA,CAER,CAEO,gBAAgBk1B,EAAsB,CAC3CA,EAAI,UAAU,EAKdA,EAAI,QAAQ,EAAG,EAAG,KAAK,GAAI,KAAK,GAAI,EAAG,EAAG,EAAI,KAAK,GAAI,EAAI,EAC3DA,EAAI,UAAU,CAChB,CACF,CC7DO,MAAMy5C,WAAuB/H,EAAW,CACnC,UACA,MACA,KAEV,YAAYxmE,EAAiC,CAC3C,MAAMA,CAAO,EAEb,KAAK,UACH,OAAOA,GAAS,WAAa,UAAYA,GAAS,UAAY,GAE3D,KAAA,MAAQ,IAAIm9C,EAAM,CACrB,MAAO,CAAC,CAAC,IAAK,IAAK,CAAC,EAAG,CAAC,IAAK,KAAM,EAAE,EAAG,CAAC,IAAK,KAAM,CAAC,EAAG,CAAC,GAAG,CAAC,EAC7D,KAAM,CACJ,cAAe,EACjB,CAAA,CACD,EACG,KAAK,WACF,KAAA,SAAS,KAAK,KAAK,EAGrB,KAAA,KAAO,IAAIA,EAAM,CACpB,MAAO,CACL,CAAC,IAAK,GAAI,CAAC,EACX,CAAC,IAAK,IAAK,EAAE,EACb,CAAC,IAAK,GAAI,CAAC,EACX,CAAC,IAAK,IAAK,GAAG,EACd,CAAC,IAAK,GAAI,CAAC,EACX,CAAC,GAAG,CACN,EACA,KAAM,CACJ,cAAe,EACjB,CAAA,CACD,EACI,KAAA,SAAS,KAAK,IAAI,CACzB,CAEU,iBAAkC,CAKnC,OAJY,IAAIoxB,GAAe,CACpC,GAAG,MAAM,eAAe,EACxB,UAAW,KAAK,SAAA,CACjB,CAEH,CAGO,OAAOvuE,EAAgC,CACxC,OAAOA,GAAS,WAAa,YAC/B,KAAK,OAAS,GACd,KAAK,UAAYA,GAAS,UACtB,KAAK,WACF,KAAA,SAAS,KAAK,KAAK,EAErB,KAAA,SAAS,KAAK,IAAI,EAE3B,CACF,CCnDO,MAAMwuE,WAA0BhI,EAAW,CAChD,MACA,OACA,aAEA,YAAYxmE,EAAmC,CAC7C,MAAMA,CAAO,EAEb,KAAK,MAAQA,EAAQ,aACrB,KAAK,OAASA,EAAQ,cAEjB,KAAA,aACH,OAAOA,EAAQ,qBAAuB,SAClCA,EAAQ,oBACR,KAAK,OAAS,GAGd,MAAAyuE,EAAW,IAAId,GAAU,CAC7B,KAAM,CACJ,cAAe,EACjB,EACA,UAAW,KAAK,MAAQ,KAAK,aAAe,EAC5C,WAAY,KAAK,OACjB,iBAAkB,KAAK,YAAA,CACxB,EACD,KAAK,SAASc,EAAU,CACtB,GAAI,EAAI,KAAK,aACb,GAAI,EAAI,KAAK,OAAS,EAAA,CACvB,EAGK,MAAAC,EAAe,IAAIlB,GAAU,CACjC,KAAM,CACJ,cAAe,EACjB,EACA,WAAY,CAAA,CACb,EACD,KAAK,SAASkB,CAAY,EAGpB,MAAAC,EAAa,IAAInB,GAAU,CAC/B,KAAM,CACJ,cAAe,EACjB,EACA,WAAY,CAAA,CACb,EACD,KAAK,SAASmB,EAAY,CAAE,GAAI,EAAI,KAAK,MAAO,CAClD,CAEU,iBAAqC,CAOtC,OANY,IAAIH,GAAkB,CACvC,GAAG,MAAM,eAAe,EACxB,aAAc,KAAK,MACnB,cAAe,KAAK,OACpB,oBAAqB,KAAK,YAAA,CAC3B,CAEH,CAGO,6BAA8B,CAC5B,MAAA,CACL,EAAG,EACH,EAAG,CAAA,CAEP,CAGA,QAAS,CACD,MAAAE,EAAe,KAAK,OAAO,CAAC,EAC3B,MAAA,CACL,EAAGA,EAAa,EAAI,KAAK,IAAIrrC,EAASqrC,EAAa,MAAM,CAAC,EAAI,KAAK,MACnE,EAAGA,EAAa,EAAI,KAAK,IAAIrrC,EAASqrC,EAAa,MAAM,CAAC,EAAI,KAAK,KAAA,CAEvE,CACF,CCpEO,MAAME,WAAyBpI,EAAW,CACrC,QACH,OAA0B,IAAItsD,GAC9B,aAEP,YAAYla,EAAmC,CAC7C,MAAMA,CAAO,EACb,KAAK,QAAUA,EAET,MAAAmjC,EAAMnjC,GAAS,WAAa,EAC5Bg3B,EAAMh3B,GAAS,WAAa,IAC5B4T,EAAO5T,GAAS,YAAc,EAE9B6uE,EAAWC,GAAQ3rC,EAAKnM,EAAKpjB,CAAI,EAEjC7E,EAAQ8/D,EACZ,OAAO7uE,GAAS,oBAAsB,SAClCvC,EAAMuC,EAAQ,mBAAoBmjC,EAAKnM,CAAG,EAC1CmM,CAAA,EAED,KAAA,OAAO,KAAKp0B,CAAK,EAEhB,MAAAggE,EAAUhgE,GAASioB,EAAMmM,GAEzB6rC,EAAYhvE,GAAS,aAAe,IACpCivE,EAAajvE,GAAS,cAAgB,EACtCkvE,EAAmBD,EAAa,GAChCE,EAAaF,EAAa,IAE1BrzC,EAAkB57B,GAAS,uBAAyB,UACpDovE,EAAkBpvE,GAAS,uBAAyB,UAEpDqvE,EAAiB,IAAI1B,GAAU,CACnC,UAAAqB,EACA,WAAAC,EACA,iBAAAC,EACA,MAAO,CACL,KAAMtzC,CACR,EACA,KAAM,CACJ,OAAQ,EACV,CAAA,CACD,EACD,KAAK,SAASyzC,CAAc,EAEtB,MAAAC,EAAa,IAAI3B,GAAU,CAC/B,UAAWqB,EAAYD,EACvB,WAAAE,EACA,iBAAAC,EACA,MAAO,CACL,KAAME,CACR,EACA,KAAM,CACJ,OAAQ,EACV,CAAA,CACD,EACD,KAAK,SAASE,CAAU,EAElB,MAAAr4D,EAAS,IAAIu2D,GAAU,CAC3B,EAAGwB,EAAYD,EACf,EAAGG,EACH,WAAAC,EACA,MAAO,CACL,KAAMC,CACR,EACA,KAAM,CACJ,OAAQ,GACR,UAAW,IAAI12B,GAAM,CACnB,CAAC,IAAK,EAAG,CAAC,EACV,CAAC,IAAKs2B,EAAW,CAAC,CAAA,CACnB,CACH,CAAA,CACD,EACD,KAAK,SAAS/3D,CAAM,EAEpB,KAAK,aAAeA,EAAO,WAAW,UAAU,CAAC,CAAE,GAAAs4D,KAAS,CAC1D,QAAQ,IAAIA,CAAE,EACd,MAAMR,GAAW93D,EAAO,EAAIo4D,EAAe,GAAKL,EAChDM,EAAW,OAAO,CAChB,UAAWN,EAAYD,CAAA,CACxB,EACD,KAAK,OAAO,KAAKF,EAASE,GAAW/3C,EAAMmM,GAAOA,CAAG,CAAC,CAAA,CACvD,CACH,CAEO,SAAU,CACf,MAAM,QAAQ,EACd,KAAK,aAAa,aACpB,CAEU,iBAAoC,CAKrC,OAJY,IAAIyrC,GAAiB,CACtC,GAAG,MAAM,eAAe,EACxB,GAAG,KAAK,OAAA,CACT,CAEH,CACF,CC/DO,MAAMY,WAAkBryB,CAAM,CAC5B,KACA,UAEA,OAEA,YACA,UAEA,QAAU,EACV,cAAgB,EAGhB,WACA,SAEP,YAAYn9C,EAA2B,CACrC,MAAMA,CAAO,EAEb,KAAK,KAAO,OAAOA,GAAS,MAAQ,UAAYA,GAAS,KAAO,GAChE,KAAK,UAAYA,EAAQ,UAEnB,MAAAi2B,EAAQj2B,EAAQ,OAAS,EACzBk2B,EAASl2B,EAAQ,QAAU,EAC3ByvE,GAAgBzvE,EAAQ,UAAYA,EAAQ,YAAc,KAAO,EAGvE,GAAIA,EAAQ,OACV,KAAK,OAASA,EAAQ,eACb,KAAK,KAAM,CAEpB,MAAMmjC,EAAM,KAAK,IAAIlN,EAAQ,EAAGC,CAAM,EAAI,KAAK,UAC1C,KAAA,OAAS,KAAK,IAAI,EAAGiN,EAAMA,EAAM,KAAK,IAAIE,EAASosC,CAAY,CAAC,CAAC,CAAA,MAGtE,KAAK,OAAS,KAAK,IACjB,EACA,KAAK,IAAIx5C,EAAQ,EAAGC,EAAS,CAAC,EAAI,KAAK,SAAA,EAKtCl2B,EAAQ,IACX,KAAK,EAAIi2B,EAAQ,GAIdj2B,EAAQ,IACP,KAAK,KACF,KAAA,EACHk2B,EACA,KAAK,UACL,KAAK,OAAS,KAAK,IAAImN,EAASosC,CAAY,CAAC,EAE/C,KAAK,EAAIv5C,EAAS,GAIlBl2B,EAAQ,iBAEV,KAAK,YAAcA,EAAQ,YAC3B,KAAK,UAAYA,EAAQ,YAGpB,KAAA,YAAc,IAAMA,EAAQ,YAC5B,KAAA,UAAY,IAAMA,EAAQ,WAIjC,KAAK,WAAaA,GAAS,WAC3B,KAAK,SAAWA,GAAS,SACzB,KAAK,QAAQ,CACX,iBAAkB,QAClB,eAAgB,OAAO,KAAK,SAAS,EACrC,OAAQ,KAAK,YAAc,SAAA,CAC5B,EAGI,KAAA,WAAWA,EAAQ,SAAW,CAAC,CACtC,CAEU,YAAwB,CAazB,OAZO,IAAIwvE,GAAU,CAC1B,GAAG,MAAM,eAAe,EACxB,KAAM,KAAK,KACX,UAAW,KAAK,UAChB,OAAQ,KAAK,OACb,gBAAiB,GACjB,YAAa,KAAK,YAClB,UAAW,KAAK,UAChB,WAAY,KAAK,WACjB,SAAU,KAAK,SACf,QAAS,KAAK,OAAA,CACf,CAEH,CAGO,WAAWT,EAAiB,CACjC,KAAK,QAAU,KAAK,IAAI,EAAGA,CAAO,EAClC,KAAK,cACH,KAAK,aAAe,KAAK,UAAY,KAAK,aAAeA,CAC7D,CAEO,eAAezC,EAAoBC,EAAkB,CAC1D,KAAK,WAAaD,EAClB,KAAK,SAAWC,EAChB,KAAK,QAAQ,CACX,OAAQ,KAAK,UAAA,CACd,CAEH,CACO,gBAAgBD,EAAoB,CACzC,KAAK,WAAaA,EAClB,KAAK,SAAW,OAChB,KAAK,QAAQ,CACX,OAAQ,KAAK,UAAA,CACd,CACH,CAEO,eAAqC,CAC1C,KAAM,CAAE,GAAIoD,EAAO,GAAIC,CAAU,EAAA7rC,GAC/BT,EAAS,KAAK,WAAW,EACzB,KAAK,MAAA,EAED,CAAE,GAAIO,EAAM,GAAIC,CAAS,EAAAC,GAC7BT,EAAS,KAAK,aAAa,EAC3B,KAAK,MAAA,EAEA,MAAA,CACL,CAAC,IAAKqsC,EAAOC,CAAK,EAClB,CACE,IACA,KAAK,OACL,KAAK,OACL,EACA,KAAK,IAAI,KAAK,cAAgB,KAAK,WAAW,GAAK,IAAM,EAAI,EAC7D,EACA/rC,EAAO8rC,EACP7rC,EAAO8rC,CACT,CAAA,CAEJ,CAEO,gBAAgB76C,EAAsB,CACvC,GAAA,KAAK,YAAc,KAAK,SAAU,CAEhC,IAAAyb,EACJ,GAAI,KAAK,KAAM,CACP,MAAAg/B,EAAK,KAAK,OAAS,KAAK,OAAS,KAAK,IAAI,KAAK,GAAK,KAAK,OAAO,EAChEK,EAAK,KAAK,OAAS,KAAK,IAAI,KAAK,GAAK,KAAK,OAAO,EACxDr/B,EAAWzb,EAAI,qBACb,CAAC,KAAK,OACN,EACA,CAAC,KAAK,OAASy6C,EACf,CAACK,EACD,CACE,EAAG,KAAK,WACR,EAAG,KAAK,QACV,CAAA,CACF,KACK,CACC,MAAAL,EAAK,KAAK,OAAS,KAAK,IAAI,EAAI,KAAK,GAAK,KAAK,OAAO,EACtDK,EAAK,KAAK,OAAS,KAAK,IAAI,EAAI,KAAK,GAAK,KAAK,OAAO,EACjDr/B,EAAAzb,EAAI,qBAAqB,EAAG,CAAC,KAAK,OAAQy6C,EAAI,CAACK,EAAI,CAC5D,EAAG,KAAK,WACR,EAAG,KAAK,QAAA,CACT,CACH,CACA,KAAK,QAAQ,CACX,OAAQr/B,CAAA,CACT,CACH,CACAzb,EAAI,UAAU,EACVA,EAAA,IACF,EACA,EACA,KAAK,OACLuO,EAAS,KAAK,WAAW,EACzBA,EAAS,KAAK,aAAa,EAC3B,EAAA,CAEJ,CACF,CC3LO,MAAMwsC,WAAgCrJ,EAAW,CAC/C,KACA,UACA,MACA,OAEA,QACA,WACA,SAEA,YACA,UAEA,QAAU,EAEV,OACA,KACA,MAAqB,CAAA,EACrB,mBAEP,YAAYxmE,EAAyC,CAiDnD,GAhDA,MAAMA,CAAO,EAEb,KAAK,KAAO,OAAOA,GAAS,MAAQ,UAAYA,GAAS,KAAO,GAC3D,KAAA,UAAYA,GAAS,WAAa,GACvC,KAAK,MAAQA,EAAQ,MACrB,KAAK,OAASA,EAAQ,OAEtB,KAAK,QAAUA,GAAS,QACxB,KAAK,WAAaA,GAAS,WAC3B,KAAK,SAAWA,GAAS,SAErB,KAAK,MACF,KAAA,YAAcA,GAAS,aAAe,IAAM,GAC5C,KAAA,UAAYA,GAAS,WAAa,GAAK,KAEvC,KAAA,YAAcA,GAAS,aAAe,EACtC,KAAA,UAAYA,GAAS,WAAa,KAGpC,KAAA,QAAUA,GAAS,SAAW,EAE9B,KAAA,OAAS,IAAIwvE,GAAU,CAC1B,KAAM,KAAK,KACX,UAAW,KAAK,UAChB,MAAOxvE,EAAQ,MACf,OAAQA,EAAQ,OAChB,YAAa,KAAK,YAClB,UAAW,KAAK,UAChB,WAAY,KAAK,QACjB,QAAS,CAAA,CACV,EACI,KAAA,SAAS,KAAK,MAAM,EAEpB,KAAA,KAAO,IAAIwvE,GAAU,CACxB,KAAM,KAAK,KACX,UAAW,KAAK,UAChB,MAAOxvE,EAAQ,MACf,OAAQA,EAAQ,OAChB,YAAa,KAAK,YAClB,UAAW,KAAK,UAChB,WAAY,KAAK,WACjB,SAAU,KAAK,SACf,QAAS,CAAA,CACV,EACI,KAAA,SAAS,KAAK,IAAI,EAEvB,KAAK,mBAAqB,GAAK,EAE3B,KAAK,KAAM,CAIb,MAAM/C,EACJ,KAAK,OAAO,OAAS,GAA8B,GACrD,QAAS5V,EAAI,EAAGA,EAAI,KAAK,mBAAoBA,IAAK,CAC1C,MAAAgqD,EAAO,IAAI+6B,GAAU,CACzB,WAAY,GACZ,WAAY,KAAK,WACjB,SAAU,KAAK,SACf,MAAO,CACL,iBAAkB,QAClB,eAAgB,OAAO,CAAkB,EACzC,OAAQ,KAAK,OACf,CAAA,CACD,EACI,KAAA,MAAM,KAAK/6B,CAAI,EACd,MAAAy+B,EACJ,IACA,KAAK,aACH,KAAK,UAAY,KAAK,cACrB,KAAK,mBAAqB,GAC3BzoF,EACJ,KAAK,SAASgqD,EAAM,CAClB,GAAI,KAAK,OAAO,EAAI,KAAK,IAAIhO,EAASysC,CAAU,CAAC,EAAI7yE,EACrD,GAAI,KAAK,OAAO,EAAI,KAAK,IAAIomC,EAASysC,CAAU,CAAC,EAAI7yE,EACrD,QAAS6yE,CAAA,CACV,CACH,CACF,CAGK,KAAA,WAAW9vE,EAAQ,SAAW,CAAC,CACtC,CAEU,iBAA2C,CAc5C,OAbY,IAAI6vE,GAAwB,CAC7C,GAAG,MAAM,eAAe,EACxB,KAAM,KAAK,KACX,UAAW,KAAK,UAChB,MAAO,KAAK,MACZ,OAAQ,KAAK,OACb,QAAS,KAAK,QACd,WAAY,KAAK,WACjB,SAAU,KAAK,SACf,YAAa,KAAK,YAClB,UAAW,KAAK,UAChB,QAAS,KAAK,OAAA,CACf,CAEH,CAGO,WAAWd,EAAiB,CAGjC,GAFA,KAAK,QAAU,KAAK,IAAI,EAAGA,CAAO,EAC7B,KAAA,KAAK,WAAWA,CAAO,EACxB,KAAK,KACP,QAAS1nF,EAAI,EAAGA,EAAI,KAAK,mBAAoBA,IACvBA,GAAK,KAAK,mBAAqB,IAAM,KAAK,QAE5D,KAAK,MAAMA,CAAC,EAAE,eAAe,KAAK,WAAY,KAAK,QAAQ,EAE3D,KAAK,MAAMA,CAAC,EAAE,gBAAgB,KAAK,OAAO,CAIlD,CACF,CChLO,MAAM0oF,WAAkB5yB,CAAM,CAC5B,KACA,MAAQ,EACR,OAAS,EAEhB,YAAYn9C,EAA2B,CACrC,MAAMA,CAAO,EACb,KAAK,KAAOA,EAAQ,KAEpB,KAAK,QAAQ,CAEX,SAAU,OACV,WAAY,6KAEZ,gBACE,iKACF,KAAM,UACN,OAAQ,OACR,qBAAsB,SACtB,WAAY,QAEZ,GAAG,KAAK,KAAA,CACT,EAED,MAAMgwE,EAAW5I,GAAc,KAAK,QAAQ,UAAU,EAAG,EAAE,EAAE,OACvD6I,EAAa7I,GAAc,KAAK,QAAQ,YAAY,EAAG,GAAG,EAAE,OAC5Dv9E,EAAKkmF,GAAU,YAAY,KAAK,KAAMC,EAAUC,CAAU,EAChE,KAAK,MAAQpmF,EAAG,MAChB,KAAK,OAASA,EAAG,MACnB,CAEU,YAAwB,CAKzB,OAJO,IAAIkmF,GAAU,CAC1B,GAAG,MAAM,eAAe,EACxB,KAAM,KAAK,IAAA,CACZ,CAEH,CAEO,SAAsB,CACrB,MAAAnwE,EAAKw/D,GAAiB,MAAM,EAC/Bx/D,EAAA,aAAa,IAAK,GAAG,EACrBA,EAAA,aAAa,IAAK,GAAG,EACxBA,EAAG,MAAM,kBAAoB,SAC7B,MAAMswE,EAAQ,KAAK,KAAK,MAAM;AAAA,CAAI,EAC9B,GAAAA,EAAM,QAAU,EAClBtwE,EAAG,UAAY,KAAK,SACf,CACL,MAAMuwE,EAAa,KAAK,QAAQ,cAAe,OAAO,EAChDD,EAAA,QAAQ,CAACh7E,EAAG4O,IAAU,CACtB,GAAA5O,EAAE,OAAQ,CACN,MAAAk7E,EAAQhR,GAAiB,OAAO,EAChCgR,EAAA,aAAa,IAAK,GAAG,EAC3BA,EAAM,aAAa,KAAMtsE,EAAQ,EAAIqsE,EAAa,GAAG,EAC/CC,EAAA,UAAYl7E,EAAE,OACpBk7E,EAAM,MAAM,kBAAoB,SAChCxwE,EAAG,OAAOwwE,CAAK,CACjB,CAAA,CACD,CACH,CACO,OAAAxwE,CACT,CAEO,eAAqC,CAC1C,MAAO,EACT,CAEO,gBAAgBk1B,EAAsB,CAC3C,MAAMo7C,EAAQ,KAAK,KAAK,MAAM;AAAA,CAAI,EAC9B,GAAAA,EAAM,QAAU,EAClBp7C,EAAI,SAAS,KAAK,KAAM,EAAG,CAAC,MACvB,CACL,MAAMu7C,EAAuBv7C,EAAI,YAAY,KAAK,IAAI,EAGhDq7C,GADJE,EAAQ,wBAA0BA,EAAQ,0BAEjC,WAAW,KAAK,QAAQ,cAAe,OAAO,CAAW,EACpE,IAAIj7E,EAAI,EACF86E,EAAA,QAAQ,CAACh7E,EAAG4O,IAAU,CACtB5O,EAAE,SACCE,GAAA0O,EAAQ,EAAIqsE,EAAa,EAC9Br7C,EAAI,SAAS5/B,EAAE,KAAK,EAAG,EAAGE,CAAC,EAC7B,CACD,CACH,CACF,CAEA,OAAc,YACZytC,EACAmtC,EAAW,GACXC,EAAa,IACsB,CAC7B,MAAAK,EAAO,SAAS,cAAc,MAAM,EAC1CA,EAAK,MAAM,WAAa,SACxBA,EAAK,MAAM,OAAS,IACpBA,EAAK,MAAM,QAAU,IACrBA,EAAK,MAAM,MAAQ,IACnBA,EAAK,MAAM,WAAa,SACxBA,EAAK,MAAM,SAAW,UACjBA,EAAA,MAAM,SAAWN,EAAW,KAC5BM,EAAA,MAAM,WAAaL,EAAW,SAAS,EAC5CK,EAAK,UAAYztC,EACR,SAAA,KAAK,YAAYytC,CAAI,EAC9B,MAAMr6C,EAAQq6C,EAAK,YACbp6C,EAASo6C,EAAK,aACX,gBAAA,KAAK,YAAYA,CAAI,EACvB,CAAE,MAAAr6C,EAAO,OAAAC,EAIlB,CAUA,OAAc,kBACZ2M,EACA5M,EACA+5C,EAAW,GACXC,EAAa,IACbM,EAAM,MACN,CACA,IAAIC,EAAa,GACb,GAAA,CAAC3tC,GAAQ5M,EAAQ+5C,EACZ,OAAAQ,EAEH,MAAAhyE,EAAMqkC,EAAK,MAAM,EAAE,EACrB,IAAA4tC,EAAWF,EACXR,GAAU,YAAYQ,EAAKP,EAAUC,CAAU,EAAE,MACjD,EACJ,QAAS5oF,EAAI,EAAG,EAAImX,EAAI,OAAQnX,EAAI,EAAGA,IAErC,GADAopF,GAAYV,GAAU,YAAYvxE,EAAInX,CAAC,EAAG2oF,EAAUC,CAAU,EAAE,MAC5DQ,EAAWx6C,EAAO,CAChBs6C,IACYC,GAAAD,GAEhB,KAAA,MAEAC,GAAchyE,EAAInX,CAAC,EAGhB,OAAAmpF,CACT,CACF,CChIO,MAAME,WAA2BlK,EAAW,CACzC,QAER,YAAYxmE,EAAoC,CAC9C,MAAMA,CAAO,EAEb,KAAK,QAAUA,EAET,KAAA,CACJ,aAAA2wE,EACA,MAAA16C,EACA,OAAAC,EACA,EAAA5gC,EACA,EAAAF,EACA,cAAAw7E,EACA,MAAAntC,EACA,OAAAotC,EACA,cAAAC,EACA,MAAAC,EACA,QAAAx0B,EACA,MAAAy0B,EACA,MAAAC,EACA,OAAAC,EACA,OAAAtpC,EACA,KAAAupC,GACE,OAAO,OACT,CACE,aAAc,IAAM,IAAIxD,GAAU,CAAE,UAAW,GAAI,WAAY,GAAI,EACnE,MAAO,IACP,OAAQ,IACR,EAAG,GACH,EAAG,GACH,cAAe,IACf,MAAO,GACP,OAAQ,GACR,cAAe,GACf,MAAO,GACP,QAAS,EACT,MAAO,EACP,MAAO,IACP,OAAQ9E,GAAM,UAAU,EACxB,OAAQ,EACR,KAAM,EACR,EACA7oE,GAAW,CAAC,CAAA,EAERoxE,EAAqB,CAACnqF,EAAUmsC,IAAiB,CAErDnsC,EAAE,EAAIgvC,EAAQ3gC,EACdrO,EAAE,EAAIivC,EAAS9gC,EACfnO,EAAE,OAAS2gD,EACX3gD,EAAE,OAAS2gD,EACX,MAAMypC,EAAYH,EAAO99C,EAAO89C,EAAO,MAAM,EAC7CjqF,EAAE,QAAQ,CACR,KAAMoqF,CAAA,CACP,EACDpqF,EAAE,YAAc,GAEdA,EAAA,OAAS,KAAK,OAAA,EAAW,GACzBA,EAAA,YAAc,KAAK,IAAI,IAAM,KAAK,OAAO,EAAI,GAAM,GAAI,EACzDA,EAAE,SAAW6pF,EAAgB,GAAM,KAAK,OAAW,EAAAA,EACnD7pF,EAAE,QAAU,CAACqqF,GAAY,GAAMC,EAAY,KAAK,SAAWA,GAC3DtqF,EAAE,WAAa,KAAK,UAAY,IAAO,KAAQ,KAAQ,KAAK,GAC5DA,EAAE,KAAO,EACTA,EAAE,WAAagqF,EACfhqF,EAAE,MAAQ8pF,EACV9pF,EAAE,MAAQ+pF,EACR/pF,EAAA,OAAS,KAAK,OAAA,EAAW,EAC3BA,EAAE,QAAU,EACZA,EAAE,QAAU,EACZA,EAAE,QAAU,EACZA,EAAE,QAAU,EACZA,EAAE,QAAUs1D,EAAU,EACtBt1D,EAAE,OAAS2gD,EACX3gD,EAAE,KAAOkqF,EACPlqF,EAAA,MAAQ,IAAI4hF,GAAMwI,CAAS,CAAA,EAEzBC,EAAWjuC,EAASI,CAAK,EACzB8tC,EAAYluC,EAASwtC,CAAM,EACjC,IAAIz9C,EAAOw9C,EACX,KAAOx9C,GAAM,CACX,MAAMnsC,EAAI0pF,IACVS,EAAmBnqF,EAAGmsC,CAAI,EAExBnsC,EAAA,OAAUmsC,GAAS,IAAM,CACzB,MAAMo+C,EAAKb,IACX,OAAAS,EAAmBI,EAAIp+C,CAAI,EACpBo+C,IACNp+C,CAAI,EACP,KAAK,SAASnsC,CAAC,EACfmsC,GACF,CACF,CAEU,iBAAsC,CAEvC,OADY,IAAIs9C,GAAmB,KAAK,OAAO,CAExD,CAGO,QAAS,CACd,YAAK,OAAS,KAAK,OAAO,OAAQe,GAAU,CACpCA,EAAA,GAAK,KAAK,IAAIA,EAAM,OAAO,EAAIA,EAAM,SAAWA,EAAM,MACtDA,EAAA,GAAK,KAAK,IAAIA,EAAM,OAAO,EAAIA,EAAM,SAAWA,EAAM,QAC5DA,EAAM,UAAYA,EAAM,MAEpBA,EAAM,MACRA,EAAM,OAAS,EACfA,EAAM,QAAUA,EAAM,EAAI,GAAKA,EAAM,OACrCA,EAAM,QAAUA,EAAM,EAAI,GAAKA,EAAM,OACrCA,EAAM,QAAU,EAChBA,EAAM,QAAU,EAChBA,EAAM,OAAS,IAEfA,EAAM,QAAUA,EAAM,YAChBA,EAAA,QAAUA,EAAM,EAAI,GAAKA,EAAM,OAAS,KAAK,IAAIA,EAAM,MAAM,EAC7DA,EAAA,QAAUA,EAAM,EAAI,GAAKA,EAAM,OAAS,KAAK,IAAIA,EAAM,MAAM,EACnEA,EAAM,WAAa,GACnBA,EAAM,QAAU,KAAK,IAAIA,EAAM,SAAS,EACxCA,EAAM,QAAU,KAAK,IAAIA,EAAM,SAAS,EAClCA,EAAA,OAAS,KAAK,OAAA,EAAW,GAG3B,MAAA50B,EAAW40B,EAAM,OAASA,EAAM,WAChCpiD,EAAKoiD,EAAM,EAAIA,EAAM,OAASA,EAAM,QACpCniD,EAAKmiD,EAAM,EAAIA,EAAM,OAASA,EAAM,QACpCliD,EAAKkiD,EAAM,QAAUA,EAAM,OAASA,EAAM,QAC1CjiD,EAAKiiD,EAAM,QAAUA,EAAM,OAASA,EAAM,QAE1C,OAAAA,EAAA,QAAQ,OAAQA,EAAM,MAAM,SAAS,EAAI50B,CAAQ,EAAE,SAAA,CAAU,EACnE40B,EAAM,OAASluC,GAAU,KAAK,GAAK,GAAMkuC,EAAM,MAAM,EACrDA,EAAM,OAAS,KAAK,IAAIliD,EAAKF,CAAE,EAAI,GACnCoiD,EAAM,OAAS,KAAK,IAAIjiD,EAAKF,CAAE,EAAI,GAE5BmiD,EAAM,KAAOA,EAAM,UAAA,CAC3B,EAGM,KAAK,OAAO,OAAS,CAC9B,CACF,CCrKgB,SAAAC,GACd9xE,EACAI,EAAgC,CAC9B,WAAY,GACZ,UAAW,GACX,QAAS,EACX,EAC8B,CACvB,OAAA,IAAI0Y,GAAY4B,GAAa,CAClC,MAAMq3D,EAAK,IAAI,iBACb,CAACC,EAA2Bx4E,IAAwB,CAWlDkhB,EAAS,KAAKs3D,CAAO,CACvB,CAAA,EAEC,OAAAD,EAAA,QAAQ/xE,EAAII,CAAO,EACf,IAAM,CACX2xE,EAAG,WAAW,CAAA,CAChB,CACD,CACH,CAGgB,SAAAE,GACdrsE,EACAjB,EACkB,CACX,OAAA,IAAI,QAAS9D,GAAY,CACb,IAAI,iBAAiB,CAACqxE,EAAex3D,IAAa,CACjE,UAAWy3D,KAAYD,EACjBC,EAAS,OAAS,aACXA,EAAA,WAAW,QAASxsE,GAAS,CAChCA,EAAK,YAAYhB,CAAK,IACxB+V,EAAS,WAAW,EACpB7Z,EAAQ,EAAI,EACd,CACD,CAEL,CACD,EACQ,QAAQ+E,EAAQ,CAAE,UAAW,EAAM,CAAA,CAAA,CAC7C,CACH,CCnDgB,SAAAwsE,GACdpyE,EACAI,EAAoC,CAClC,KAAM,IAER,EACuC,CAChC,OAAA,IAAI0Y,GAAY4B,GAAa,CAClC,MAAM23D,EAAK,IAAI,qBACb,CAAC9W,EAAsC/hE,IAA4B,CAOjE,GAAI+hE,EAAQ,OAAQ,CAYlB,MAAM+W,EAAQ/W,EAAQA,EAAQ,OAAS,CAAC,EACpC+W,GACF53D,EAAS,KAAK43D,CAAK,CAEvB,CACF,EACAlyE,CAAA,EAEF,OAAAiyE,EAAG,QAAQryE,CAAE,EACN,IAAM,CACXqyE,EAAG,UAAUryE,CAAE,EACfqyE,EAAG,WAAW,CAAA,CAChB,CACD,CACH,CCzCgB,SAAAE,GACdvyE,EACAI,EACqB,CACrB,OAAOs4D,GAAa,EAAA,KAClBlyC,GAAU,IAAI,EACdrG,GAAI,IAAM,CACF,KAAA,CAAE,MAAAkW,EAAO,OAAAC,GACbl2B,GAAS,MAAM,sBAAA,GAA2B24D,KACtC,CAAE,IAAA1/B,EAAK,KAAAC,EAAM,MAAAuiB,EAAO,OAAA0I,GAAWvkD,EAAG,wBACxC,OACIq5B,GAAO,GAAKA,GAAO/C,GAAYiuB,GAAU,GAAKA,GAAUjuB,KACxDgD,GAAQ,GAAKA,GAAQjD,GAAWwlB,GAAS,GAAKA,GAASxlB,EAAA,CAE5D,EACD5R,GAAqB,CAAA,CAEzB,CAEgB,SAAA+tD,GACdxyE,EACAI,EAIqB,CACrB,MAAMqyE,EACJ,OAAOryE,GAAS,WAAa,SAAWA,EAAQ,UAAY,GAC9D,OAAOgyE,GAAiBpyE,EAAI,CAC1B,UAAAyyE,EACA,KAAMryE,GAAS,IAChB,CAAA,EAAE,KACD+f,GAAKmyD,GAEIA,EAAM,gBAAkBA,EAAM,mBAAqBG,CAC3D,EACDhuD,GAAqB,CAAA,CAEzB,CCpCA,IAAIiuD,GAAa,GACjB,SAASC,IAAS,CACZD,KAGSA,GAAA,GAsBDtgB,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAaX,EAEH,CAEAugB,KAEO,SAASC,IAKb,CACM,OAAApX,GAAW,SAAS,eAAe,EAAE,KAC1Cl8C,GAAY1C,EAAc,EAC1BuD,GAAI,IAAM,CACF,MAAAgiD,EAAc,iBAAiB,SAAS,eAAe,EACtD,MAAA,CACL,OAAQA,EAAY,iBAAiB,OAAO,EAC5C,IAAKA,EAAY,iBAAiB,OAAO,EACzC,MAAOA,EAAY,iBAAiB,OAAO,EAC3C,KAAMA,EAAY,iBAAiB,OAAO,CAAA,CAC5C,CACD,CAAA,CAEL,CCrEO,SAAS0Q,GACdzyE,EAA2B,CACzB,mBAAoB,GACpB,QAAS,IACT,WAAY,CACd,EAIC,CACM,OAAA,IAAI0Y,GAAY4B,GAAa,CAC9B,GAAA,EAAE,gBAAiB,WACd,OAAAA,EAAS,MAAM,yCAAyC,EAE7D,IAAAo4D,EACA,WAAA,QAAc,CAACjyE,EAASC,IAAW,CACrC,UAAU,YAAY,mBACnB8jD,GAAa,CACZlqC,EAAS,KAAK,CACZ,UAAWkqC,EAAS,OAAO,UAC3B,SAAUA,EAAS,OAAO,QAAA,CAC3B,EACO/jD,GACV,EACC2T,GAAU,CACT1T,EAAO0T,CAAK,CACd,CAAA,CACF,CACD,EACE,KAAK,IAAM,CACVs+D,EAAU,UAAU,YAAY,cAC7BluB,GAAa,CACZlqC,EAAS,KAAK,CACZ,UAAWkqC,EAAS,OAAO,UAC3B,SAAUA,EAAS,OAAO,QAAA,CAC3B,CACH,EACCpwC,GAAU,CACTkG,EAAS,MAAMlG,CAAK,CACtB,EACApU,CAAA,CACF,CACD,EACA,MAAOoU,GAAU,CAChBkG,EAAS,MAAMlG,CAAK,CAAA,CACrB,EACI,IAAM,CACP,OAAOs+D,GAAW,UACV,UAAA,YAAY,WAAWA,CAAO,CAC1C,CACF,CACD,CACH,CC9CgB,SAAAC,GACdlzE,EAAQ,+BACa,CACf,MAAAmzE,EAAiB,OAAO,WAAWnzE,CAAK,EACvC,OAAAupB,EAAU4pD,EAAgB,QAAQ,EAAE,KACzC7yD,GAAK,GAA2B,EAAE,OAAO,EACzCqG,GAAUwsD,EAAe,OAAO,EAChCvuD,GAAqB,CAAA,CAEzB,CCkCgB,SAAAwuD,GACd9sE,EACA/F,EACA,CACA,MAAMrJ,EAAI,OAAOoP,GAAO,SAAWA,EAAMA,EAAI,WAEvC+sE,EAAW,IAAM,CACjB,GAAA,CACF,MAAMC,EAAY,OAAO,eAAe,QAAQp8E,CAAC,EACjD,GAAIo8E,EACF,OAAOC,GAAMD,CAAS,OAEd,CAEZ,CACO,EAIHE,EAAYC,GAAmC,CAC/C,GAAA,CACE,OAAOA,EAAe,MAAS,IACjC,OAAO,eAAe,QAAQv8E,EAAGw8E,GAAUD,CAAc,CAAC,EAEnD,OAAA,eAAe,WAAWv8E,CAAC,OAE1B,CAEZ,CAAA,EAeK,MAAA,CACL,IAbU,IAAM,CAChB,KAAM,CAAE,IAAKy8E,GAAsBC,GAAkBP,EAAA,EAAY9yE,CAAO,EAExE,OADuBozE,IACD,KAAA,EAWtB,IARWhoE,GAAW,CACtB,KAAM,CAAE,IAAKkoE,GAAsBD,GAAkBP,EAAA,EAAY9yE,CAAO,EAClE+O,EAAQukE,EAAkBloE,CAAC,EACjC6nE,EAASlkE,CAAK,CAAA,CAKd,CAEJ,CAEO,SAASwkE,IAAsB,CACpC,OAAO,eAAe,OACxB,CC/FO,SAASC,IAAqC,CAC5C,OAAA9B,GAAa,QAAQ,EAAE,KAC5B3xD,GAAI,IAAM,QAAQ,EAClBqG,GAAU,QAAQ,CAAA,CAEtB,CAEO,SAASqtD,IAAoC,CAClD,OAAOD,GAAe,EAAA,KACpBzzD,GAAK2zD,GAAaA,EAAS,IAAI,EAC/BttD,GAAU,SAAS,IAAI,EACvB/B,GAAqB,CAAA,CAEzB,CAEO,SAASsvD,IAAqC,CAC5C,OAAA3qD,EAAU,OAAQ,YAAY,EAAE,KACrCjJ,GAAK6zD,GACFA,EAAU,OAAkB,SAAS,KAAK,QAAQ,IAAK,EAAE,CAC5D,EACAxtD,GAAU,OAAO,SAAS,KAAK,QAAQ,IAAK,EAAE,CAAC,EAC/C/B,GAAqB,CAAA,CAEzB,CAsDgB,SAAAwvD,GAAmBC,EAAc,UAA4B,CACpE,OAAA9qD,EAAU,OAAQ,UAAU,EAAE,KAInCjJ,GAAKg0D,GAAiCA,EAAc,OAAS,CAAA,CAAE,EAC/Dh0D,GAAK/iB,IAAW,CACd,GAAGA,EAEH,CAAC82E,CAAW,EACV92E,EAAM82E,CAAW,GACjB,OAAO,SAAS,SAAW,OAAO,SAAS,OAAS,OAAO,SAAS,IAAA,EACtE,EACFzvD,GAAqB,CAACr0B,EAAGyE,IAAMzE,EAAE8jF,CAAW,IAAMr/E,EAAEq/E,CAAW,CAAC,CAAA,CAGpE,CAkBO,SAASE,GACdh0E,EAA+D,CAC7D,YAAa,UACb,iBAAkB,EACpB,EACA,CACA,MAAM8zE,EAAc9zE,EAAQ,YACtBi0E,EACJ,OAAOj0E,EAAQ,kBAAoB,UAC/BA,EAAQ,iBACR,GAKA,CAAE,IAAKk0E,EAAqB,IAAKC,GACrCtB,GAAkB,kBAAkB,EAChCuB,EAA0BF,EAAoB,GAAK,GAGnD,CAAE,IAAKG,EAA0B,IAAKC,GAC1CzB,GAAkB,wBAAwB,EACtC0B,EAAYF,IAClB,IAAIG,EACF,OAAOD,GAAa,SAAWA,EAAYH,EAAQ,OAAS,EAE9D,SAASK,EAAmBz3E,EAAqB,CAIxC,OAHOo3E,EAAQ,UACnBntF,GAAMA,EAAE6sF,CAAW,IAAM92E,EAAM82E,CAAW,CAAA,CAG/C,CAGM,MAAAY,EAMF,CAAE,aAAAF,GAEN,SAASG,EAAW7wE,EAAe,CAEjCA,EAAQrG,EAAMqG,EAAO,GAAIswE,EAAQ,OAAS,CAAC,EACvCI,EAAe,GAEjBE,EAAM,UAAY,OAClBA,EAAM,MAAQ,IAEV5wE,EAAQ0wE,EACVE,EAAM,UAAY,WACT5wE,EAAQ0wE,EACjBE,EAAM,UAAY,UAElBA,EAAM,UAAY,OAEpBA,EAAM,MAAQ5wE,EAAQ0wE,GAExBE,EAAM,KAAOA,EAAM,GACnBA,EAAM,GAAKN,EAAQtwE,CAAK,IAAIgwE,CAAW,EACxBU,EAAA1wE,EACf4wE,EAAM,aAAeF,EACrBF,EAAyBE,CAAY,CAEvC,CAGAG,EAAWH,CAAY,EAEvB,SAASI,EAAY53E,EAAqB,CACxCo3E,EAAQ,KAAKp3E,CAAK,EAClBm3E,EAAoBC,CAAO,EAChBO,EAAAP,EAAQ,OAAS,CAAC,CAC/B,CAUS,SAAAS,EAAU1rB,EAAa2rB,EAAe,CAC7C,MAAM93E,EAAQ,CAAE,GAAG83E,EAAQ,CAAChB,CAAW,EAAG3qB,CAAI,EAC9C,OAAO,QAAQ,UAAUnsD,EAAO,GAAImsD,CAAG,EACvCyrB,EAAY53E,CAAK,CACnB,CAQS,SAAA+3E,EAAY/3E,EAAqBg4E,EAAgBf,EAAkB,CACpE,MAAAnwE,EAAQ2wE,EAAmBz3E,CAAK,EACtC,GAAI8G,EAAQ,EAAG,CAET0wE,GAAgB,IAEVJ,EAAA,OAAOI,EAAe,CAAC,EAC/BL,EAAoBC,CAAO,GAE7BY,EAAgBJ,EAAY53E,CAAK,EAAI63E,EAAU73E,EAAM82E,CAAW,EAAG92E,CAAK,EACxE,MACF,CACI8G,GAAS0wE,GAMbG,EAAW7wE,CAAK,CAClB,CAEA,MAAMmxE,EAAYpB,GAAA,EAAqB,UAAW72E,GAAU,CAG1D+3E,EAAY/3E,EAAO,EAAI,CAAA,CACxB,EAEM,MAAA,CACL,QAAAo3E,EACA,MAAAM,EAGA,SAAU,CAACvrB,EAAa2rB,IAAkB,CAC5BC,EAAA,CAAE,GAAGD,EAAQ,CAAChB,CAAW,EAAG3qB,CAAA,EAAO8qB,CAAgB,CACjE,EACA,GAAG7Z,EAAe,CACT,OAAA,QAAQ,GAAGA,CAAK,CACzB,EACA,MAAO,CACL,OAAO,QAAQ,MACjB,EACA,SAAU,CACR,OAAO,QAAQ,SACjB,EACA,QAAS,IAAM,CACb6a,EAAU,YAAY,CACxB,CAAA,CAEJ,CCpQgB,SAAAC,GACdt1E,EACAmG,EACAgJ,EACA,CAIA,GAHI,OAAOhJ,GAAQ,WACjBA,EAAMurD,GAAQvrD,CAAG,IAEd,OAAOA,GAAQ,UAAYA,IAAQ,SAAcgJ,IAAU,OAAW,CAEzE,MAAM8D,EAAO,OAAO,OAAO,CAAA,EAAIjT,EAAG,OAAO,EACzC,cAAO,KAAKiT,CAAI,EAAE,QAAS9M,GAAQ,CAC7B,GAAA8M,EAAK9M,CAAG,GAAG,WAAW,GAAG,GAAK8M,EAAK9M,CAAG,GAAG,WAAW,GAAG,EACrD,GAAA,CACF8M,EAAK9M,CAAG,EAAI,KAAK,MAAM8M,EAAK9M,CAAG,GAAK,EAAE,OAC5B,CAEZ,CACF,CACD,EACM,OAAOA,GAAQ,SAAW8M,EAAK9M,CAAG,EAAI8M,CAAA,KACxC,CAEL,IAAIzP,EAA2B,CAAA,EAC3B,OAAO2C,GAAO,SACV3C,EAAA2C,EACG,OAAOA,GAAO,WACvB3C,EAAI2C,CAAG,EAAIgJ,GAEN,OAAA,QAAQ3L,CAAG,EAAE,QAAQ,CAAC,CAAC9B,EAAM5D,CAAG,IAAM,CACvCA,EACCkC,EAAA,QAAQ0B,CAAI,EAAI5D,aAAe,OAAS,KAAK,UAAUA,CAAG,EAAIA,EAE1D,OAAAkC,EAAG,QAAQ0B,CAAI,CACxB,CACD,CACH,CACF,CAEgB,SAAA6zE,GAAkBv1E,EAAgBmG,EAAa,CAC7DA,EAAI,MAAM,QAAQ,EAAE,QAASpP,GAAM,CAC7BA,EAAE,KAAK,GAAK,IACd,OAAOiJ,EAAG,QAAQjJ,EAAE,KAAM,CAAA,CAC5B,CACD,CACH,CChCgB,SAAAy+E,GACdrvE,EACA/F,EACA,CACA,MAAMrJ,EAAI,OAAOoP,GAAO,SAAWA,EAAMA,EAAI,WAEvC+sE,EAAW,IAAM,CACjB,GAAA,CACF,MAAMC,EAAY,OAAO,aAAa,QAAQp8E,CAAC,EAC/C,GAAIo8E,EACF,OAAOC,GAAMD,CAAS,OAEd,CAEZ,CACO,EAIHE,EAAYC,GAAmC,CAC/C,GAAA,CACE,OAAOA,EAAe,MAAS,IACjC,OAAO,aAAa,QAAQv8E,EAAGw8E,GAAUD,CAAc,CAAC,EAEjD,OAAA,aAAa,WAAWv8E,CAAC,OAExB,CAEZ,CAAA,EAeK,MAAA,CACL,IAbU,IAAM,CAChB,KAAM,CAAE,IAAKy8E,GAAsBC,GAAkBP,EAAA,EAAY9yE,CAAO,EAExE,OADuBozE,IACD,KAAA,EAWtB,IARWhoE,GAAW,CACtB,KAAM,CAAE,IAAKkoE,GAAsBD,GAAkBP,EAAA,EAAY9yE,CAAO,EAClE+O,EAAQukE,EAAkBloE,CAAC,EACjC6nE,EAASlkE,CAAK,CAAA,CAKd,CAEJ,CAEO,SAASsmE,IAAoB,CAClC,OAAO,aAAa,OACtB,CChDA,KAAM,CAAE,IAAKC,GAAiB,IAAKC,EAAoB,EAAAH,GACrDI,GAAa,OAAO,CACtB,EAEMC,GAAW,IAAIv7D,GACfw7D,GAASD,GAAS,KAAKrvD,GAAU,MAAS,CAAC,EAEjD,SAASuvD,GAAcC,EAAkB,CACvC,OAAQA,EAAO,CACb,IAAK,OACM,SAAA,gBAAgB,UAAU,IAAI,MAAM,EAC1BpnB,GAAA,SAAS,gBAAiB,aAAc,MAAM,EACjE,MACF,IAAK,QACL,QACW,SAAA,gBAAgB,UAAU,OAAO,MAAM,EAC7BA,GAAA,SAAS,gBAAiB,aAAc,OAAO,EAClE,KACJ,CACF,CAEO,SAASqnB,GAASD,EAA6B,CACpD,OAAAL,GAAgBK,CAAK,EACrBD,GAAcC,CAAK,EACnBH,GAAS,KAAKG,CAAK,EACZA,CACT,CAEO,SAASE,IAAyB,CACvC,OAAOD,GAASP,GAAqB,GAAA,OAAS,QAAU,MAAM,CAChE,CAEO,SAASS,IAAmC,CACjD,OAAOp1D,GAAc,CACnB+0D,GACA/C,GAAe,8BAA8B,CAC9C,CAAA,EAAE,KACD5yD,GAAI,CAAC,CAAC61D,EAAOI,CAAc,IACrBJ,IAGJA,EAAQN,GAAgB,EACnBM,IAEHA,EAAQI,EAAiB,OAAS,SAEpCT,GAAgBK,CAAK,EACrBD,GAAcC,CAAK,EACZA,EACR,CAAA,CAEL,CAEgB,SAAAK,GAAU30E,EAAcyb,EAAe,GAAY,CACjE,OACE,iBAAiB,SAAS,eAAe,EAAE,iBAAiBzb,CAAI,GAChEyb,CAEJ,CAEgB,SAAAm5D,GAAU50E,EAAcyN,EAAqB,CAE3D,SAAS,gBAAgB,MAAM,YAAYzN,EAAMyN,CAAK,CACxD,CCpEgB,SAAAonE,GACd70E,EACAtB,EAOA,CACI,IAAA+O,EAAQ/O,GAAS,OAAS,GAE9B,GAAI,CAAC+O,EAAO,CACV,MAAMvkB,EAAI,KAAK,SAAS,MAAM,GAC3B,MAAM,KAAK8W,CAAI,GAAG,EAClB,IAAI,GACH,MAAM,GAAG,EACV,QACC9W,IACFukB,EAAQ,mBAAmBvkB,CAAC,EAEhC,CAEA,MAAM4rF,EAAM,IAAMrnE,EAEZsnE,EAAOjrE,GAAW,CAEtB,GADQ2D,EAAA3D,EACJ2D,EAAO,CACT,MAAMunE,EAASt2E,GAAS,OAAS,YAAcA,EAAQ,OAAS,GAC1D8sC,EAAO9sC,GAAS,KAAO,UAAYA,EAAQ,KAAO,GAClDu2E,EAAev2E,GAAS,QAAU,GAAO,WAAa,GAC5D,IAAIw2E,EACFl1E,EAAO,IAAM,mBAAmByN,CAAK,EAAIunE,EAASxpC,EAAOypC,EAC3D,GAAIv2E,GAAS,KAAM,CACX,MAAAy2E,EACJ,aACA,IAAI,KAAK,KAAK,MAAQz2E,EAAQ,KAAO,KAAK,EAAE,YAAY,EAChDw2E,GAAAC,CACZ,CACA,SAAS,OAASD,CACpB,CAAA,EAGF,OAAAH,EAAItnE,CAAK,EAEF,CACL,IAAAqnE,EACA,IAAAC,CAAA,CAEJ,CAEO,SAASK,IAAe,CAS7B,MAAMC,EAAU,SAAS,OAAO,MAAM,IAAI,EAC1C,QAASnsF,EAAI,EAAGA,EAAImsF,EAAQ,OAAQnsF,IAAK,CACvC,MAAMyD,EAAI,OAAO,SAAS,SAAS,MAAM,GAAG,EACrC,KAAAA,EAAE,OAAS,GAAG,CACb,MAAA2oF,EACJ,mBAAmBD,EAAQnsF,CAAC,EAAE,MAAM,GAAG,EAAE,CAAC,EAAE,MAAM,GAAG,EAAE,CAAC,CAAC,EACzD,oDACAyD,EAAE,KAAK,GAAG,EACV,UACID,EAAI,SAAS,SAAS,MAAM,GAAG,EAE9B,IADP,SAAS,OAAS4oF,EAAa,IACxB5oF,EAAE,OAAS,GAChB,SAAS,OAAS4oF,EAAa5oF,EAAE,KAAK,GAAG,EACzCA,EAAE,IAAI,EAERC,EAAE,MAAM,CACV,CACF,CACF,CC7EA,SAAS4oF,GAAYC,EAAiBC,EAAmB,CACnD,IAAAC,EACJ,OAAKF,EAAG,iBAAiB,SAASC,CAAS,IACzCC,EAAcF,EAAG,kBAAkBC,EAAW,CAAE,QAAS,KAAM,GAE1DC,CACT,CAEO,SAASC,GACdC,EACAC,EAAY,EACZJ,EACA,CACA,OAAO,IAAI,QAAQ,CAACt2E,EAASC,IAAW,CAClC,IAAAo2E,EACJ,MAAMM,EAA4B,OAAO,UAAU,KAAKF,EAAQC,CAAS,EACzEC,EAAQ,QAAU,IAAM,CACtB12E,EAAO,cAAc,CAAA,EAEf02E,EAAA,UAAa5xF,GAAM,CACzBsxF,EAAMtxF,EAAE,OAAsB,OAC9BqxF,GAAYC,EAAIC,CAAS,EACzBt2E,EAAQq2E,CAAE,CAAA,CACZ,CAGD,CACH,CAEgB,SAAAO,GACdP,EACAC,EACAO,EAAwC,CAAE,GAAI,EAAG,KAAM,OACvD,CACA,OAAO,IAAI,QAAQ,CAAC72E,EAASC,IAAW,CACtC,MAAM62E,EAA8BT,EAAG,YACrC,CAACC,CAAS,EACV,WAAA,EAEkCQ,EAAY,YAAYR,CAAS,EACzD,IAAIO,CAAI,EACRC,EAAA,WAAc/xF,GAAM,CAC9Bib,EAAQjb,CAAC,CAAA,EAEC+xF,EAAA,QAAW/xF,GAAM,CAC3Bkb,EAAOlb,CAAC,CAAA,CACV,CACD,CACH,CC5CA,MAAMgyF,GAAU,IAAIptB,GAEJ,SAAAqtB,GAAWtuB,EAAanpD,EAA8B,CACpE,OAAO03E,GAAgB,CAAE,IAAAvuB,EAAK,GAAGnpD,CAAS,CAAA,CAC5C,CAGsB,eAAA23E,GAASxuB,EAAanpD,EAA8B,CACpE,GAAA,OAAO,MAAU,IACb,MAAA,IAAI,MAAM,wBAAwB,EAEtC,GAAA,OAAO,gBAAoB,IACvB,MAAA,IAAI,MAAM,gCAAgC,EAG9C,GAAA,CACI,MAAA6b,EAAK47D,GAAWtuB,EAAKnpD,CAAO,EAC5B6+D,EAAa,IAAI,gBACf2Y,GAAA,IAAI37D,EAAIgjD,CAAU,EAE1B,KAAM,CAAE,aAAA7O,EAAc,WAAA4nB,EAAY,QAAA90E,GAAY,CAC5C,aAAc,OACd,QAAS,IACT,GAAG9C,CAAA,EAGC63E,EAAY,WAAW,IAAM,CACjChZ,EAAW,MAAM,GAEhB/7D,CAAO,EAEV,IAAIf,EAAqB,MAAM,MAC7B,IAAI,QAAQonD,EAAK,CACf,GAAGnpD,EACH,OAAQ6+D,EAAW,MAAA,CAIpB,CAAA,EAUH,GAPA2Y,GAAQ,OAAO37D,CAAE,EACjB,aAAag8D,CAAS,EAMlB91E,EAAS,SAAW,KAAOA,EAAS,SAAW,EAAG,CAUlD,GAPEA,EAAS,SAAW,GACtB+1E,GAAQ,mCAAmC,EAM3CF,GACA,OAAO,eAAmB,KAC1B71E,EAAS,MACTA,EAAS,KAAK,UACd,CACM,MAAAhB,EAASgB,EAAS,KAAK,UAAU,EAGjCg2E,EACJh2E,EAAS,QAAQ,IAAI,aAAa,GAClCA,EAAS,QAAQ,IAAI,gBAAgB,EACjCi2E,EAAQD,EAAgB,SAASA,CAAa,EAAI,EAClDE,EAAmBD,IAAU,EACnC,IAAIE,EAAS,EACP,MAAAlY,EAAS,IAAI,eAAe,CAChC,MAAMnB,EAAY,CAChB,SAASsZ,GAAO,CACdp3E,EACG,OACA,KAAK,CAAC,CAAE,KAAA2c,EAAM,MAAA3O,KAAY,CACrB2O,EACFmhD,EAAW,MAAM,GAEjBqZ,GAAUnpE,EAAM,WAChB6oE,IACE,IAAI,cAAc,WAAY,CAC5B,iBAAAK,EACA,OAAAC,EACA,MAAAF,CAAA,CACD,CAAA,EAEHnZ,EAAW,QAAQ9vD,CAAK,EACnBopE,IACP,CACD,EACA,MAAO3yF,GAAM,CACZq5E,EAAW,MAAMr5E,CAAC,CAAA,CACnB,CACL,CACK2yF,GACP,CAAA,CACD,EACUp2E,EAAA,IAAI,SAASi+D,CAAM,CAChC,CAEA,OAAQhQ,EAAc,CACpB,IAAK,cACI,OAAA,MAAMjuD,EAAS,cACxB,IAAK,OACI,OAAA,MAAMA,EAAS,OACxB,IAAK,OACI,OAAA,MAAMA,EAAS,OACxB,IAAK,OACL,QACS,OAAA,MAAMA,EAAS,MAC1B,CAAA,KAEA,OAAM,IAAIq2E,GACR,iBAAiBr2E,EAAS,GAAG,oBAAoBA,EAAS,MAAM,KAAKA,EAAS,UAAU,GACxFA,CAAA,QAGGqS,EAAY,CACf,MAAAA,EAAM,OAAS,aACX,IAAI,MAAM,mBAAmB,EAC1BA,EAAM,OAAS,eAClB,IAAI,MAAM,mBAAmB,EAE/BA,CACR,CACF,CAEgB,SAAAikE,GAAYlvB,EAAanpD,EAA8B,CACrE,MAAM8qB,EAAS0sD,GAAQ,IAAIC,GAAWtuB,EAAKnpD,CAAO,CAAC,EAC/C8qB,GACFA,EAAO,MAAM,CAEjB,CAEgB,SAAAwtD,GAAcC,EAAa,EAAGC,EAAqB,CAE1D,OAAAC,GAAMd,GAAUY,EAAYC,CAAU,CAC/C,CAEgB,SAAAE,GAAcC,EAAQ,IAAO,CAEpC,OAAAnlD,GAAMmkD,GAAUgB,CAAK,CAC9B,CAEO,SAASC,GACdD,EAAQ,IACRJ,EAAa,EACbC,EACA,CAEA,OAAOhlD,GAAMilD,GAAMd,GAAUY,EAAYC,CAAU,EAAGG,CAAK,CAC7D,CC1Ke,MAAAE,GAAA,CACb,KAAM,QACN,SAAU,8BAA8B,MAAM,GAAG,EACjD,cAAe,uBAAuB,MAAM,GAAG,EAC/C,YAAa,gBAAgB,MAAM,GAAG,EACtC,OACE,wCAAwC,MACtC,GACF,EACF,YAAa,yCAAyC,MAAM,GAAG,EAC/D,QAAS,CAACC,EAAgBC,IAAmB,CAC3C,OAAQA,EAAQ,CACd,IAAK,IACH,MAAO,GAAGD,CAAM,IAClB,QACE,MAAO,GAAGA,CAAM,GACpB,CACF,EACA,UAAW,EACX,UAAW,EACX,QAAS,CACP,GAAI,QACJ,IAAK,WACL,EAAG,aACH,GAAI,YACJ,IAAK,kBACL,KAAM,sBACN,EAAG,WACH,GAAI,YACJ,IAAK,kBACL,KAAM,qBACR,EACA,aAAc,CACZ,OAAQ,MACR,KAAM,MACN,EAAG,KACH,EAAG,OACH,GAAI,QACJ,EAAG,OACH,GAAI,QACJ,EAAG,MACH,GAAI,OACJ,EAAG,OACH,GAAI,QACJ,EAAG,MACH,GAAI,MACN,EACA,SAAU,CAACE,EAAcC,IAAmB,CACpC,MAAAC,EAAKF,EAAO,IAAMC,EACxB,OAAIC,EAAK,IACA,KACEA,EAAK,IACP,KACEA,EAAK,KACP,KACEA,EAAK,KACP,KACEA,EAAK,KACP,KAEF,IACT,CACF,EC/DexqF,GAAA,CACb,KAAM,KACN,SAAU,2DAA2D,MACnE,GACF,EACA,OACE,wFAAwF,MACtF,GACF,EACF,QAAUjJ,GAAc,CACtB,MAAMwB,EAAI,CAAC,KAAM,KAAM,KAAM,IAAI,EAC3BmkB,EAAI3lB,EAAI,IACd,MAAO,IAAIA,CAAC,GAAGwB,GAAGmkB,EAAI,IAAM,EAAE,GAAKnkB,EAAEmkB,CAAC,GAAKnkB,EAAE,CAAC,CAAC,GACjD,CACF,ECVakyF,GAAK,IAAI/uB,GAGtB,IAAI74D,GAAI,QAGR6nF,GAAU1qF,EAAE,EACZ0qF,GAAUP,EAAE,EAEI,SAAAO,GACdC,EACAC,EAC2B,CAC3B,GAAI,CAACD,EAEI,OAAAF,GAAG,IAAI5nF,EAAC,EAEb,IAAA1G,EACA,GAAA,OAAOwuF,GAAW,SAAU,CACxB,MAAAE,EAAcF,EAAO,cACvB,GAAAF,GAAG,IAAII,CAAW,EAEhB1uF,EAAA0uF,UACKD,EAENH,GAAA,IAAII,EAAaD,CAAM,EACtBzuF,EAAA0uF,MAIG,QAAAJ,GAAG,IAAI5nF,EAAC,CACjB,KACK,CAEC,KAAA,CAAE,KAAA+P,CAAS,EAAA+3E,EACdF,GAAA,IAAI73E,EAAM+3E,CAAM,EACfxuF,EAAAyW,CACN,CACA,OAAIzW,IACE0G,GAAA1G,GAECsuF,GAAG,IAAItuF,CAAC,GAAKsuF,GAAG,IAAI5nF,EAAC,CAC9B,CC1BA,IAAIioF,GAAU,EAGE,SAAAzrF,GACd0rF,EACAluE,EAAkC,GAClCmuE,EAA6B,GAC7B95E,EACO,CACA,MAAA,CACL,KAAM,OAAO,EAAE45E,EAAO,EACtB,IAAAC,EACA,MAAAluE,EACA,SAAAmuE,EACA,GAAA95E,CAAA,CAEJ,CAGO,SAAS8zB,GAAQ9zB,EAAuB,CACtC,OAAA7R,GACL6R,EAAG,QACHmzD,GAAmBnzD,CAAE,EACrB,MAAM,KAAKA,EAAG,QAAQ,EAAE,IAAKpa,GAAMkuC,GAAQluC,CAAe,CAAC,EAC3Doa,CAAA,CAEJ,CAGO,SAAS+5E,GACdlmD,EACAmmD,EAA8B,SAAS,gBAC3B,CACZ,GAAInmD,EAAM,GACR,OAAOA,EAAM,GAIf,GAFMA,EAAA,GACJA,EAAM,KAAO,OAAS4rC,GAAkB,EAAA,SAAS,cAAc5rC,EAAM,GAAG,EACtEA,EAAM,MACG,UAAA98B,KAAK88B,EAAM,MAAO,CACrB,MAAAroB,EAAIqoB,EAAM,MAAM98B,CAAC,EACnBA,EAAE,WAAW,IAAI,EACb88B,EAAA,GAAG,iBAAiB98B,EAAE,MAAM,CAAC,EAAE,cAAeyU,CAAC,EAC5CzU,IAAM,QACf+xD,GAAej1B,EAAM,GAAIA,EAAM,MAAM98B,CAAC,CAAC,EAEpB63D,GAAA/6B,EAAM,GAAI98B,EAAGyU,CAAC,CAErC,CAEF,OAAIqoB,EAAM,WACJ,OAAOA,EAAM,UAAY,SAC3BA,EAAM,GAAG,YAAY,SAAS,eAAeA,EAAM,QAAQ,CAAC,EAItDA,EAAA,SAAS,QAASnhB,GAAS,CACzBqnE,GAAArnE,EAAMmhB,EAAM,EAAE,CAAA,CACrB,GAGWmmD,EAAA,YAAYnmD,EAAM,EAAE,EAC7BA,EAAM,EACf,CAGgB,SAAAM,GAAM8lD,EAAiBC,EAAuB,CACxD,GAAA,CAACD,EAAS,GAKZ,OAGE,GAAAA,EAAS,MAAQC,EAAS,IAAK,EAChCD,EAAS,GAAG,eAAiB,SAAS,MAAM,aAC3CF,GAAMG,CAAQ,EACdD,EAAS,EAAA,EAEX,MACF,CAEM,MAAAj6E,EAAMk6E,EAAS,GAAKD,EAAS,GAC7BE,EAAWF,EAAS,MACpBG,EAAWF,EAAS,MAC1B,UAAWnjF,KAAKojF,EACRpjF,KAAKqjF,IACLrjF,EAAE,WAAW,IAAI,EAChBiJ,EAAA,oBAAoBjJ,EAAE,MAAM,CAAC,EAAE,cAAeojF,EAASpjF,CAAC,CAAC,EAE5DiJ,EAAG,gBAAgBjJ,CAAC,GAI1B,UAAWA,KAAKqjF,EAAU,CAClB,MAAAC,EAAWF,EAASpjF,CAAC,EACrBujF,EAAWF,EAASrjF,CAAC,EAC3B,GAAIujF,GAAYD,EACV,GAAAtjF,EAAE,WAAW,IAAI,EAAG,CACtB,MAAM2K,EAAO3K,EAAE,MAAM,CAAC,EAAE,YAAY,EACjCiJ,EAAA,oBAAoB0B,EAAM24E,CAAQ,EAClCr6E,EAAA,iBAAiB0B,EAAM44E,CAAQ,CAAA,SACzBvjF,IAAM,QAAS,CACxB,UAAWwjF,KAAMF,EACTE,KAAMD,GACVnoB,GAAgBnyD,EAAIu6E,CAAE,EAG1BzxB,GAAe9oD,EAAIs6E,CAAQ,CAAA,MAER1rB,GAAA5uD,EAAIjJ,EAAGujF,CAAQ,CAGxC,CACM,MAAAE,EAAcP,EAAS,UAAY,GACnCQ,EAAcP,EAAS,UAAY,GACrC,GAAA,OAAOO,GAAe,SAExBz6E,EAAG,UAAYy6E,UAEX,OAAOD,GAAe,SACxBx6E,EAAG,UAAY,GACHy6E,EAAA,QAAS/nE,GAAS,CAC5BqnE,GAAMrnE,EAAM1S,CAAE,CAAA,CACf,MACI,CACL,MAAM06E,EAAe,KAAK,IAAIF,EAAY,OAAQC,EAAY,MAAM,EACpE,QAAShzF,EAAI,EAAGA,EAAIizF,EAAcjzF,IAChC0sC,GAAMqmD,EAAY/yF,CAAC,EAAGgzF,EAAYhzF,CAAC,CAAC,EAElCgzF,EAAY,OAASD,EAAY,QACnCC,EAAY,MAAMD,EAAY,MAAM,EAAE,QAAS9nE,GAAS,CACtDqnE,GAAMrnE,EAAM1S,CAAE,CAAA,CACf,EAECy6E,EAAY,OAASD,EAAY,QACnCA,EAAY,MAAMC,EAAY,MAAM,EAAE,QAAS/nE,GAAS,CAClDA,EAAK,IACJ1S,EAAA,YAAY0S,EAAK,EAAE,CACxB,CACD,CAEL,CAEJ,CCxJO,MAAMioE,EAAK,CAChB,MACA,GAEA,YAAYv9E,EAAc4C,EAAiB,CACzC,KAAK,MAAQg8C,GAAS5+C,EAAO,CAAE,KAAM,GAAM,EAC3C,KAAK,GAAK4C,EACL,KAAA,QAAQ,KAAK,EAAE,CACtB,CAGA,QAAQA,EAAiB,CACpBA,EAAA,WAAW,QAAS2F,GAAS,CAC9B,OAAQA,EAAK,SAAU,CACrB,IAAK,GACH,MAAMi1E,EAAcj1E,EACpB,CAAC,GAAGi1E,EAAY,UAAU,EAAE,QAAShuC,GAAS,CAC5C,MAAMiuC,EAAWjuC,EAAK,KAChBkuC,EAAYluC,EAAK,MACvB,GAAIiuC,IAAa,UAEX,GAAA9tB,GAAa6tB,CAAW,EAAG,CAE7B,MAAMG,EAAYH,EAElBz+B,GAAY,IAAM,CAChB4+B,EAAU,QACR,KAAK,cAAcD,CAAS,GAAKC,EAAU,KAAA,CAC9C,EAESA,EAAA,iBAAiB,SAAWn1F,GAAM,CACrC,KAAA,cACHk1F,EACCl1F,EAAE,OAA4B,KAAA,CACjC,CACD,CAAA,SACQknE,GAAgB8tB,CAAW,EAAG,CAEvC,MAAMG,EAAYH,EAElBz+B,GAAY,IAAM,CAChB4+B,EAAU,QAAUC,GAClB,KAAK,cAAcF,CAAS,EAC5BC,EAAU,KAAA,CACZ,CACD,EAESA,EAAA,iBAAiB,SAAWn1F,GAAM,CAC1C,MAAMwY,EAASxY,EAAE,OACXupB,EAAQ/Q,EAAO,MACjBA,EAAO,QACT68E,GAAkB,KAAK,cAAcH,CAAS,EAAG3rE,CAAK,EAEtDikB,GAAgB,KAAK,cAAc0nD,CAAS,EAAG3rE,CAAK,CACtD,CACD,CAAA,SACQy9C,GAASguB,CAAW,EAAG,CAEhC,MAAMG,EAAYH,EAElBz+B,GAAY,IAAM,CACN4+B,EAAA,MAAQ,KAAK,cAAcD,CAAS,CAAA,CAC/C,EAESC,EAAA,iBAAiB,SAAWn1F,GAAM,CACrC,KAAA,cACHk1F,EACCl1F,EAAE,OAA4B,KAAA,CACjC,CACD,CAAA,KACI,CAEL,MAAMm1F,EAAYH,EAIlBz+B,GAAY,IAAM,CACN4+B,EAAA,MAAQ,KAAK,cAAcD,CAAS,CAAA,CAC/C,EAEK,MAAArjE,EAAM7xB,GAAa,CAClB,KAAA,cACHk1F,EACCl1F,EAAE,OAA4B,KAAA,CACjC,EAEQm1F,EAAA,iBAAiB,QAAStjE,CAAE,CAExC,MACSojE,IAAa,SAEtB1+B,GAAY,IAAM,CACJy+B,EAAA,UAAY,KAAK,cAAcE,CAAS,CAAA,CACrD,EACQD,IAAa,UAEtB1+B,GAAY,IAAM,CACJy+B,EAAA,UAAY,KAAK,cAAcE,CAAS,CAAA,CACrD,CACH,CACD,EAEGF,EAAY,WAAW,OAAS,GAClC,KAAK,QAAQA,CAAW,EAE1B,MACF,IAAK,GACG,MAAAM,EAAcv1E,EAAK,aAAe,GAClCw1E,EAAM,4BACNrvC,EAAUqvC,EAAI,KAAKD,CAAW,EAChCpvC,GAAWA,EAAQ,CAAC,GAEtBqQ,GAAY,IAAM,CAChBx2C,EAAK,YAAcu1E,EAAY,QAC7BC,EACA,KAAK,cAAcrvC,EAAQ,CAAC,CAAC,CAAA,CAC/B,CACD,EAEH,KACJ,CAAA,CACD,CACH,CAGA,cAAc+uC,EAAkB,CAC9B,IAAIrvE,EAAS,KAAK,MAClB,OAAAqvE,EAAS,MAAM,GAAG,EAAE,QAASn5E,GAAS,CACpC8J,EAAIA,EAAE9J,CAAI,CAAA,CACX,EACM8J,CACT,CAGA,cAAcqvE,EAAkB/8E,EAAU,CACxC,IAAI0N,EAAS,KAAK,MACZ,MAAAgmD,EAAQqpB,EAAS,MAAM,GAAG,EAC1BjwF,EAAI4mE,EAAM,OAChB,QAAS/pE,EAAI,EAAGA,EAAImD,EAAI,EAAGnD,IACrB+jB,EAAAA,EAAEgmD,EAAM/pE,CAAC,CAAC,EAEhB+jB,EAAEgmD,EAAM5mE,EAAI,CAAC,CAAC,EAAIkT,CACpB,CA8BA,OAAO,gBAAgBs9E,EAAkB,CACvC,OAAAA,EAAWA,EACR,QAAQ,cAAe,gCAAgC,EACvD,QAAQ,kBAAmB,sBAAsB,EACpDA,EAAW,SAAWA,EAAW,MAClB;AAAA;AAAA;AAAA;AAAA;AAAA,QAKXA,CAAQ;AAAA;AAAA,OAId,CACF,CCnLgB,SAAAC,GACd9xB,EACA+xB,EACAl7E,EACW,CACJ,OAAA,IAAI,UAAUmpD,CAAG,CAC1B,CA2DO,SAASgyB,GAAwBC,EAAiB,CACvD,MAAO,GAAGA,CAAO,YAAYlkC,GAAa,EAAG,QAAQ,CAAC,IAAIA,GACxD,CACD,CAAA,YACH,CAEO,MAAMmkC,EAAgB,CAC3B,OAAO,WAAa,UAAU,WAC9B,OAAO,KAAO,UAAU,KACxB,OAAO,QAAU,UAAU,QAC3B,OAAO,OAAS,UAAU,OAE1B,IACA,uBACA,qBACA,cAEA,OACA,MAIoCA,GAAgB,WAEpD,aAAsC,CAAA,EAEtC,aACA,YAEA,UACA,kBAAoB,EACpB,qBACA,iBAEA,OACA,QACA,QAEA,UAAY,EACZ,SAAmD,CAAA,EACnD,UAAmE,CAAA,EAKnE,YACElyB,EAAM,GACNnpD,EAWA,CACA,KAAK,IAAMmpD,EACX,KAAK,uBAAyBnpD,GAAS,uBAClC,KAAA,qBAAuBA,GAAS,sBAAwB,CAAA,EACxD,KAAA,cAAgBA,GAAS,eAAiBi7E,GAC1C,KAAA,aAAej7E,GAAS,cAAgB,IAC7C,KAAK,OAASA,GAAS,OACvB,KAAK,QAAUA,GAAS,QACxB,KAAK,QAAUA,GAAS,QACxB,KAAK,UACH,OAAOA,GAAS,WAAa,UAAYA,EAAQ,UAAY,GAC/D,KAAK,qBACH,OAAOA,GAAS,sBAAwB,SACpCA,EAAQ,qBACR,IACN,KAAK,SAAS,CAChB,CAEO,MAAO,CACZ,KAAK,kBAAoB,EACzB,KAAK,SAAS,CAChB,CAEO,OAAQ,CACb,KAAK,MAAQq7E,GAAgB,QAC7B,KAAK,QAAQ,OACf,CAEQ,UAAW,CAEf,KAAK,QAAQ,aAAeA,GAAgB,YAC5C,KAAK,QAAQ,aAAeA,GAAgB,OAI9C,KAAK,MAAQA,GAAgB,WAC7B,KAAK,OAAS,KAAK,cACjB,KAAK,IACL,KAAK,uBACL,KAAK,oBAAA,EAGF,KAAA,OAAO,OAAS,IAAM,CACrB13E,GAAA,IAAI,KAAK,GAAG,UAAU,EAC1B,KAAK,MAAQ03E,GAAgB,KAEzB,KAAK,mBACP,aAAa,KAAK,gBAAgB,EAClC,KAAK,iBAAmB,QAGpB,MAAAC,EAAS,KAAK,aAAa,MAAM,EACvC,KAAK,aAAe,GACpBA,EAAO,QAAQ,KAAK,MAAM,KAAK,IAAI,CAAC,EAEpC,KAAK,KAAK,EACL,KAAA,YAAc,YAAY,KAAK,KAAK,KAAK,IAAI,EAAG,KAAK,YAAY,EACtE,KAAK,SAAS,CAAA,EAGX,KAAA,OAAO,QAAW91F,GAAkB,CACvC,KAAM,CAAE,KAAA6pE,EAAM,OAAAksB,EAAQ,SAAAC,CAAA,EAAah2F,EACnCme,GACE,IAAI,KAAK,GAAG,mBAAmB0rD,CAAI,YAAYksB,CAAM,cAAcC,CAAQ,GAAA,EAE7E,KAAK,MAAQH,GAAgB,OAC7B,KAAK,OAAS,OAEV,KAAK,cACP,cAAc,KAAK,WAAW,EAC9B,KAAK,YAAc,QAErB,KAAK,UAAU71F,CAAC,EAGd,KAAK,WACL,KAAK,kBAAoB,KAAK,uBAE9B,KAAK,iBAAmB,WACtB,KAAK,SAAS,KAAK,IAAI,EACvBi2F,GAAc,KAAK,mBAAmB,CAAA,EAE1C,EAGG,KAAA,OAAO,QAAWj2F,GAAa,CAClCme,GAAI,IAAI,KAAK,GAAG,cAAcne,CAAC,EAAE,EACjC,KAAK,UAAUA,CAAC,CAAA,EAOb,KAAA,OAAO,UAAaA,GAAoB,CAEvC,GADAme,GAAA,IAAI,KAAK,GAAG,wBAAwBne,EAAE,IAAI,WAAWA,EAAE,IAAI,IAAI,EAC/D,OAAOA,EAAE,MAAS,SAAU,CAE1B,IAAAk2F,EACJ,MAAMC,EAAan2F,EAAE,KAAK,UAAU,CAAC,EACjC,GAAA,CACMk2F,EAAA,KAAK,MAAMC,CAAU,QACtBC,EAAS,CACRF,EAAA,CACN,KAAK,UAAU,CACb,KAAM,MACN,YAAa,sBACb,YAAaE,EAAG,SAAS,EACzB,QAASD,CAAA,CACV,CAAA,CAEL,CACMD,EAAA,QAASzvF,GAAM,CACb,MAAAqrF,EAAO,KAAK,MAAMrrF,CAAC,EAEvB,GAAAqrF,EAAK,MACL,OAAO,UAAU,eAAe,KAAKA,EAAK,KAAM,WAAW,EAC3D,CAEA,MAAMF,EAAU,KAAK,SAASE,EAAK,KAAK,SAAS,EAC7CF,EACMA,EAAA,UAAUE,EAAK,IAAI,EAE3BQ,GACE,IAAI,KAAK,GAAG,6DAAA,CAGP,SAAA,KAAK,UAAUR,EAAK,OAAO,EAAG,CAEvC,MAAMuE,EAAY,KAAK,UAAUvE,EAAK,OAAO,EAC7C,QAASjwF,EAAI,EAAGA,EAAIw0F,EAAU,OAAQx0F,IAChCiwF,EAAK,OAAS,MAChBuE,EAAUx0F,CAAC,EAAE,CACX,YAAaiwF,EAAK,YAClB,YAAaA,EAAK,YAClB,QAASA,EAAK,OAAA,CACf,EAEDuE,EAAUx0F,CAAC,EAAE,KAAMiwF,EAAK,IAAI,CAEhC,MAGA,KAAK,YAAYA,CAAI,CACvB,CACD,CAAA,MACQ9xF,EAAE,gBAAgB,YACnBsyF,GAAA,IAAI,KAAK,GAAG,mCAAmC,EAC9CtyF,EAAE,gBAAgB,MACnBsyF,GAAA,IAAI,KAAK,GAAG,4BAA4B,CAClD,EAEJ,CAEQ,YAAYR,EAA2B,CACzC,GAAA,CACEA,EAAK,OAAS,MAChB,KAAK,UAAUA,CAAI,EACVA,EAAK,MACN,QAAA,KACN,8CACAA,EAAK,MACLA,CAAA,EAGM,QAAA,KAAK,iCAAkCA,CAAI,OAE3C,CAEZ,CACF,CAGQ,MAAMzkE,EAA2B,CACnC,KAAK,QAAQ,aAAewoE,GAAgB,KAGzC,KAAA,OAAO,KAAK,KAAK,UAAU,CAAC,KAAK,UAAUxoE,CAAI,CAAC,CAAC,CAAC,GAGlD,KAAA,aAAa,KAAKA,CAAI,EAC3B,KAAK,SAAS,EAElB,CAEO,MAAO,CACZ,KAAK,MAAM,CAAE,KAAM,MAAQ,CAAA,CAC7B,CAGO,SACLipE,EACAC,EACAjsB,EAAkC,CAAA,EAClC,CACK,KAAK,UAAUgsB,CAAO,IACpB,KAAA,UAAUA,CAAO,EAAI,GAE1B,KAAK,MAAM,CACT,KAAM,WACN,QAAAA,EACA,QAASloD,GACPk8B,EACA,KAAK,qBAAqB,QAC1B,EACF,CAAA,CACD,GAEH,KAAK,UAAUgsB,CAAO,EAAE,KAAKC,CAAQ,CACvC,CAGO,WACLD,EACAC,EACAjsB,EAAkC,CAAA,EAClC,CACM,MAAA+rB,EAAY,KAAK,UAAUC,CAAO,EACxC,GAAID,EAAW,CACP,MAAAG,EAAMH,EAAU,QAAQE,CAAQ,EAClCC,GAAO,KACCH,EAAA,OAAOG,EAAK,CAAC,EACnBH,EAAU,SAAW,IAEvB,KAAK,MAAM,CACT,KAAM,aACN,QAAAC,EACA,QAASloD,GACPk8B,EACA,KAAK,qBAAqB,QAC1B,EACF,CAAA,CACD,EACM,OAAA,KAAK,UAAUgsB,CAAO,GAGnC,CACF,CAGO,QACLA,EACA/nE,EACA+7C,EAAkC,CAAA,EAClC,CACA,KAAK,MAAM,CACT,KAAM,UACN,QAAAgsB,EACA,QAASloD,GACPk8B,EACA,KAAK,qBAAqB,QAC1B,EACF,EACA,KAAA/7C,CAAA,CACD,CACH,CAGA,MAAa,KACX+nE,EACA/nE,EACA+7C,EAAkC,CAAC,EACnChtD,EAAU,IACO,CACZ,KAAA,YACL,MAAMs0E,EAAmC,KAAK,SAAS,KAAK,SAAS,EAAI,CACvE,UAAW,KAAK,SAAA,EAEZ6E,EAAkB,MAAM,IAAI,QAAgB,CAACx7E,EAASC,IAAW,CACrE02E,EAAQ,QAAU32E,EAClB,KAAK,MAAM,CACT,KAAM,OACN,QAAAq7E,EACA,QAASloD,GACPk8B,EACA,KAAK,qBAAqB,QAC1B,EACF,EACA,KAAM,CACJ,UAAWsnB,EAAQ,UACnB,GAAGrjE,CACL,CAAA,CACD,EACD,WAAW,IAAM,CACfrT,EACE,IAAI,KAAK,GAAG,UAAU02E,EAAQ,SAAS,KAAK8E,GAC1CnoE,CACD,CAAA,YAAA,GAEFjR,CAAO,CAAA,CACX,EACM,cAAA,KAAK,SAASs0E,EAAQ,SAAS,EAC/B6E,CACT,CACF,CCrbO,SAASE,IAAqB,CACnC,MAAMC,EAAY,UAAU,UAAU,YAAW,EACjD,IAAIC,EAAkB,UACtB,MAAI,oBAAoB,KAAKD,CAAS,EACpCC,EAAkB,MACT,WAAW,KAAKD,CAAS,EAClCC,EAAkB,UACT,cAAc,KAAKD,CAAS,EACrCC,EAAkB,aACT,OAAO,KAAKD,CAAS,EAC9BC,EAAkB,QACT,OAAO,KAAKD,CAAS,EAC9BC,EAAkB,UACT,SAAS,KAAKD,CAAS,EAChCC,EAAkB,QACT,OAAO,KAAKD,CAAS,IAC9BC,EAAkB,OAEbA,EAAgB,aACzB,CAEO,SAASC,GAA0BpjF,EAAK,UAAU,UAAW,CAClE,IAAIqjF,EAAY,UAChB,GAAI,oBAAoB,KAAKrjF,CAAE,EAAG,CAChC,MAAMqoE,EAAQroE,EAAG,MAAM,eAAe,EAClCqoE,IACFgb,EAAYhb,EAAM,CAAC,EAAE,QAAQ,IAAK,GAAG,EAExC,SAAU,WAAW,KAAKroE,CAAE,EAAG,CAC9B,MAAMqoE,EAAQroE,EAAG,MAAM,qBAAqB,EACxCqoE,IACFgb,EAAYhb,EAAM,CAAC,EAEtB,SAAU,YAAY,KAAKroE,CAAE,EAAG,CAC/B,MAAMqoE,EAAQroE,EAAG,MAAM,qBAAqB,EACxCqoE,IACFgb,EAAYhb,EAAM,CAAC,EAAE,QAAQ,IAAK,GAAG,EAExC,SAAU,cAAc,KAAKroE,CAAE,EAAG,CACjC,MAAMqoE,EAAQroE,EAAG,MAAM,wBAAwB,EAC3CqoE,IACFgb,EAAYhb,EAAM,CAAC,EAEtB,CACD,OAAOgb,EAAU,aACnB,CAEO,SAASC,IAAmB,CACjC,MAAMJ,EAAY,UAAU,UAAU,YAAW,EACjD,IAAIK,EAAS,UACb,MAAI,OAAO,KAAKL,CAAS,GAAK,SAAS,KAAKA,CAAS,EACnDK,EAAS,QACA,UAAU,KAAKL,CAAS,EACjCK,EAAS,SACA,WAAW,KAAKL,CAAS,EAClCK,EAAS,UAET,UAAU,KAAKL,CAAS,EAGxBK,EAAS,SACA,QAAQ,KAAKL,CAAS,EAC/BK,EAAS,OACA,gBAAgB,KAAKL,CAAS,EAEvCK,EAAS,KACA,kBAAkB,KAAKL,CAAS,EACzCK,EAAS,SACA,UAAU,KAAKL,CAAS,IACjCK,EAAS,OAEJA,EAAO,aAChB,CAEO,SAASC,IAA0B,CACxC,MAAMN,EAAY,UAAU,UAC5B,IAAIO,EAAiB,UACrB,GAAI,SAAS,KAAKP,CAAS,EAAG,CAC5B,MAAM7a,EAAQ6a,EAAU,MAAM,oBAAoB,EAC9C7a,IACFob,EAAiBpb,EAAM,CAAC,EAE3B,SAAU,UAAU,KAAK6a,CAAS,EAAG,CACpC,MAAM7a,EAAQ6a,EAAU,MAAM,qBAAqB,EAC/C7a,IACFob,EAAiBpb,EAAM,CAAC,EAE3B,SAAU,SAAS,KAAK6a,CAAS,EAAG,CACnC,MAAM7a,EAAQ6a,EAAU,MAAM,qBAAqB,EAC/C7a,IACFob,EAAiBpb,EAAM,CAAC,EAE3B,SAAU,OAAO,KAAK6a,CAAS,EAAG,CACjC,MAAM7a,EAAQ6a,EAAU,MAAM,kBAAkB,EAC5C7a,IACFob,EAAiBpb,EAAM,CAAC,EAE3B,SAAU,eAAe,KAAK6a,CAAS,EAAG,CACzC,MAAM7a,EAAQ6a,EAAU,MAAM,wBAAwB,EAClD7a,IACFob,EAAiBpb,EAAM,CAAC,EAE3B,CACD,OAAOob,CACT,CAEO,SAASC,IAAqB,CACnC,OAAQ,UAAU,iBAAmB,UAAU,UAAU,YAAW,CACtE,CAEO,SAASC,IAAc,CAC5B,OAAO,KAAK,eAAgB,EAAC,gBAAe,EAAG,SAAS,aAC1D,CAEO,SAASC,IAAW,CACzB,OAAON,GAAkB,GAAI,QAC/B,CAEO,SAASO,IAAQ,CACtB,OAAOZ,GAAoB,IAAK,KAClC,CAEO,SAASa,IAAU,CACxB,OAAOb,GAAoB,IAAK,OAClC,CAEO,SAASc,IAAgB,CAC9B,OAAOF,GAAK,EAAKC,IACnB,CAEO,SAASE,IAAY,CAC1B,OAAOf,GAAoB,IAAK,SAClC,CAgBO,SAASgB,IAAe,CAC7B,MAAMC,EAAa,OAAO,UAAU,WAEpC,GAAI,UAAU,KAAKA,CAAU,GAAK,CAAC,aAAa,KAAKA,CAAU,EAAG,CAChE,MAAMC,EAAgBD,EAAW,MAAM,kBAAkB,EACzD,OACEC,GACA,OAAOA,GAAkB,UACzBA,EAAc,QAAU,EAEjB,WAAWA,EAAc,CAAC,CAAC,EAAI,OAE/B,EAEb,KACI,OAAO,EAEX,CAEO,SAASC,IAAW,CACzB,OAAOP,GAAK,GAAMG,IACpB,CAEO,SAASK,IAA6B,CAC3C,MAAMrkF,EAAK,OAAO,UAAU,UACtBskF,EAAOtkF,EAAG,QAAQ,OAAO,EAC/B,GAAIskF,EAAO,EAET,OAAO,SAAStkF,EAAG,UAAUskF,EAAO,EAAGtkF,EAAG,QAAQ,IAAKskF,CAAI,CAAC,EAAG,EAAE,EAGnE,GADgBtkF,EAAG,QAAQ,UAAU,EACvB,EAAG,CAEf,MAAMukF,EAAKvkF,EAAG,QAAQ,KAAK,EAC3B,OAAO,SAASA,EAAG,UAAUukF,EAAK,EAAGvkF,EAAG,QAAQ,IAAKukF,CAAE,CAAC,EAAG,EAAE,CAC9D,CACD,MAAMC,EAAOxkF,EAAG,QAAQ,OAAO,EAC/B,OAAIwkF,EAAO,EAEF,SAASxkF,EAAG,UAAUwkF,EAAO,EAAGxkF,EAAG,QAAQ,IAAKwkF,CAAI,CAAC,EAAG,EAAE,EAG5D,EACT,CAEY,MAACC,GAAOJ,GAA4B,IAAK,GAKxCK,GAAQ,SAAS,aAC1B,SAAS,eAAiB,EAC1B,GACSC,GAAS,SAAS,aAC3B,SAAS,eAAiB,GAC1B,GACSC,GAAS,SAAS,aAC3B,SAAS,eAAiB,GAC1B,GAEG,SAASC,IAAc,CAC5B,OAAOvB,GAAkB,IAAK,QAChC,CAEO,SAASwB,IAAe,CAC7B,OAAOxB,GAAkB,IAAK,KAChC,CAGO,SAASyB,IAAkB,CAChC,OACGF,GAAW,GAAM,UAAU,UAAU,MAAM,cAAc,GAC1D,OAAO,qBAAuB,aAElC,CAGO,SAASG,IAAmB,CACjC,OAAOF,GAAc,GAAI,UAAU,UAAU,MAAM,cAAc,CACnE,CCrOO,SAASG,GAAOC,EAAc,IAAK,CACxC,MAAMC,EAAQ,SAAS,gBAEjBC,EAAM,OAAO,MAAQ,OAAO,KAAO,OAAO,iBAAmB,EACnED,EAAM,QAAQ,IAAMC,EAkBpB,IAAI9yB,EAAM,IACV,MAAM+yB,EAAS,UAAY,CAEzBF,EAAM,MAAM,OAAS,OAAO,YAAc,KAG1C,MAAMzlB,EAAcylB,EAAM,YAC1BA,EAAM,QAAQ,MAAQzlB,EACtBylB,EAAM,QAAQ,OAASzlB,EAAcwlB,EAAc,KAAO,SAE1DC,EAAM,QAAQ,IAAM7yB,EAAM,KAAK,IAC7B,IACA,KAAK,MAAM,KAAOoN,EAAcwlB,EAAY,CAClD,EAIIC,EAAM,MAAM,SAAW7yB,EAAM,IACjC,EAEE+yB,IAGA,OAAO,OAAS,SAAUnzE,EAAG,CAC3B,OAAO,WAAWA,CAAC,EAAIogD,CAC3B,EACE,OAAO,OAAS,SAAUpgD,EAAG,CAC3B,OAAO,WAAWA,CAAC,EAAIogD,CAC3B,EAEO,OAAO,kBAGZ,OAAO,iBACL,sBAAuB,OAAS,oBAAsB,SACtD+yB,EACA,EACJ,CACA,CCpDO,MAAM5X,WAAiBxG,EAAS,CACrC,YAAsC,CAAA,EACtC,MAAkC,CAAA,EAElC,OAAmC,CAAA,EAEnC,aAAyC,CAAA,EAEzC,KAA4B,CAAA,EAC5B,OAAiC,CAAA,EACjC,KAAO,GAEP,YAAYC,EAAsB,CAChC,MAAMA,CAAY,EAElB,KAAK,GAAG,MAAO,CAACqD,EAAiBzsB,IAAkC,CAGjE,OAFA,KAAK,KAAO,GACP,KAAA,YAAc,CAAE,KAAMysB,CAAQ,EAC3BA,EAAS,CACf,IAAK,IACE,KAAA,OAAO,KAAK,KAAK,WAAW,EACjC,KACJ,CACK,KAAA,aAAaA,EAASzsB,CAAK,CAAA,CACjC,EAEI,KAAA,GAAG,OAASnU,GAAiB,CAC5B,GAAA,KAAK,YAAY,MAAQ,QAAS,CAChC,GAAA,CACI,MAAA6gC,EAAY9C,GAAS/9B,CAAI,EACpB,UAAA8+B,KAAQ+B,EAAU,WAAW,MAC3B,UAAA3B,KAAeJ,EAAK,aAClB,UAAAtV,KAAYsV,EAAK,UAC1B,KAAK,aAAatV,CAAQ,EAAI,KAAK,aAAaA,CAAQ,GAAK,GACxD,KAAA,aAAaA,CAAQ,EAAE,KAC1B,GAAG0V,EAAY,QAAQ,IAAIA,EAAY,KAAK,EAAA,OAM1C,CACF,QAAA,MAAM,yBAA2Bl/B,CAAI,CAC/C,CACA,MACF,CACA,KAAK,MAAQA,CAAA,CACd,EAED,KAAK,GAAG,OAAQ,CAAC4gC,EAAiBzsB,IAAkC,CAE9D,IAAA,EAAI,KAAK,OAAO,OACpB,KAAO,KACL,GAAI,KAAK,OAAO,CAAC,GAAK,KAAK,YAAa,CACtC,IAAI2sB,EAAiB,GACjBC,EAAa,GACjB,UAAW79D,KAAO,KAAK,OAAO,CAAC,EACzBA,GAAO,YACQ49D,EAAA,KAAK,OAAO,CAAC,EAAE,UAEhC59D,GAAO,SACP,KAAK,aAAa,IAAM,KAAK,OAAO,CAAC,EAAEA,CAAG,CAAC,EAE3C69D,EACE,KAAK,aAAa,IAAM,KAAK,OAAO,CAAC,EAAE79D,CAAG,CAAC,EAAE,KAAK,GAAG,EACrD,IACA69D,EAEF79D,GAAO,MACP,KAAK,aAAa,IAAM,KAAK,OAAO,CAAC,EAAEA,CAAG,CAAC,EAE3C69D,EACE,KAAK,aAAa,IAAM,KAAK,OAAO,CAAC,EAAE79D,CAAG,CAAC,EAAE,KAAK,GAAG,EACrD,IACA69D,EACO,OAAO,KAAK,YAAY79D,CAAG,EAAM,MAE1C,KAAK,YAAYA,CAAG,EAAI,KAAK,OAAO,CAAC,EAAEA,CAAG,GAG1C,OAAO,KAAK,YAAY,UAAc,IACxC,KAAK,YAAY,UAAY49D,EAExB,KAAA,YAAY,WAAa,IAAMA,EAGlC,OAAO,KAAK,YAAY,MAAU,IACpC,KAAK,YAAY,MAAQC,EAEzB,KAAK,YAAY,MAAQA,EAAa,KAAK,YAAY,MAIvD,KAAK,YAAY,OACjB,KAAK,aAAa,IAAM,KAAK,YAAY,KAAK,EAE9C,KAAK,YAAY,MACf,KAAK,aAAa,IAAM,KAAK,YAAY,KAAK,EAAE,KAAK,GAAG,EACxD,IACA,KAAK,YAAY,MAEnB,KAAK,YAAY,IACjB,KAAK,aAAa,IAAM,KAAK,YAAY,EAAE,IAE3C,KAAK,YAAY,MACf,KAAK,aAAa,IAAM,KAAK,YAAY,EAAE,EAAE,KAAK,GAAG,EACrD,IACA,KAAK,YAAY,OAErBC,GACE,KAAK,YAAY,MACjB,KAAK,YACLC,EAAA,CAEJ,CAKF,OAFK,KAAA,aAAaL,EAASzsB,CAAK,EAExBysB,EAAS,CACf,IAAK,IACH,KAAK,OAAO,MACZ,MACF,IAAK,SACH,KAAK,WAAW,EAChB,MACF,IAAK,UACH,KAAK,WAAW,EAChB,MACF,IAAK,UACH,KAAK,WAAW,EAChB,MACF,IAAK,OACH,KAAK,WAAW,EAChB,MACF,IAAK,OACH,KAAK,WAAW,EAChB,MACF,IAAK,OACH,KAAK,WAAW,EAChB,MACF,IAAK,QACH,KAAK,WAAW,EAChB,MACF,IAAK,OACE,KAAA,YAAY,KAAO,KAAK,KAC7B,KAAK,YAAY,aAAa,EAC5B,KAAK,YAAY,aAAa,GAAK,QACrC,KAAK,WAAW,EAChB,KACJ,CAAA,CACD,EAEI,KAAA,GAAG,SAAU,IAAM,CACjB,KAAA,KAAK,SAAU,KAAK,KAAK,CAAA,CAC/B,CACH,CAEA,OAAQ,CACN,aAAM,MAAM,EACL,KAAK,KACd,CAEA,aAAaA,EAAiBzsB,EAA+B,CAC3D,IAAI/vD,EAAW,CAAA,EACXwkD,EAEJ,OAAQg4B,EAAS,CACf,IAAK,MACH,IAAIxtC,EAAQ,GACRC,EAAS,GACT,GAAA8gB,EAAM,OAASA,EAAM,OACvB/gB,EAAQ+gB,EAAM,MACd9gB,EAAS8gB,EAAM,eACNA,EAAM,QAAS,CACxB,MAAM+sB,EAAW/sB,EAAM,QAAQ,MAAM,OAAO,EACxC+sB,EAAS,QAAU,IACb9tC,EAAA,OAAO,WAAW8tC,EAAS,CAAC,CAAC,EAAI,WAAWA,EAAS,CAAC,CAAC,CAAC,EACvD7tC,EAAA,OAAO,WAAW6tC,EAAS,CAAC,CAAC,EAAI,WAAWA,EAAS,CAAC,CAAC,CAAC,EAErE,CACI9tC,GAASC,GACX,KAAK,MAAM,KAAK,CACd,KAAM,UACN,MAAAD,EACA,OAAAC,CAAA,CACD,EAEH,MACF,IAAK,OAED,OAAO8gB,EAAM,IAAM,UACnB,OAAOA,EAAM,IAAM,UACnB,OAAOA,EAAM,IAAM,UACnB,OAAOA,EAAM,IAAM,WAEd,KAAA,YAAY,KACf,IAAM,CAACA,EAAM,GAAIA,EAAM,GAAIA,EAAM,GAAIA,EAAM,EAAE,GAEjD,MACF,IAAK,OACHvL,EAAO,CAAA,EACHuL,EAAM,OACG6sB,GAAA7sB,EAAM,MAAOvL,CAAI,EAEzBA,EAAA,OAASA,EAAK,QAAUuL,EAAM,OACnCvL,EAAK,MAAQA,EAAK,YAAY,GAAKuL,EAAM,YAAY,EACrDvL,EAAK,QAAUA,EAAK,cAAc,GAAKuL,EAAM,cAAc,EACvD,EAAEvL,EAAK,OAAS,IAAI,QAAQ,GAAG,EAC5BA,EAAA,OAAS,WAAWA,EAAK,MAAM,EAEpCA,EAAK,OAAS,WAAWA,EAAK,MAAM,EAAI,IAE1CA,EAAK,OAAS,CAACA,EAAK,OAAO,QAAQ,CAAC,EAC/B,KAAA,KAAK,MAAM,KAAKA,CAAI,EACzB,MACF,IAAK,iBACE,KAAA,KAAK,OACR,IACAhI,GACE,WAAWuT,EAAM,EAAE,EACnB,WAAWA,EAAM,EAAE,EACnB,WAAWA,EAAM,EAAE,EACnB,WAAWA,EAAM,EAAE,EACnB,WAAWA,EAAM,EAAE,EAAI,IACvB,WAAWA,EAAM,EAAE,CAAA,GAErB,QAAQ,CAAC,EACP/vD,EAAA,CAAC,KAAK,KAAK,KAAK,EACX,QAAAI,EAAI,EAAGg7B,EAAK,KAAK,KAAK,MAAM,OAAQh7B,EAAIg7B,EAAIh7B,IAC5CokD,EAAA,KAAK,KAAK,MAAMpkD,CAAC,EACpBA,GAAKA,GAAKg7B,EAAK,EACjBp7B,EAAE,KAAKwkD,EAAK,MAAQ,IAAMA,EAAK,MAAM,EAEnCxkD,EAAA,KAAKwkD,EAAK,KAAK,EAGrB,KAAK,OAAO,KAAK,KAAK,EAAE,EAAIxkD,EAAE,KAAK,GAAG,EACjC,KAAA,MAAM,QAASqrB,GAAS,CACvBA,EAAK,QAAU,KAAK,KAAK,KAC3BA,EAAK,KAAO,KAAK,OAAO,KAAK,KAAK,EAAE,EACtC,CACD,EACD,MACF,IAAK,iBACHrrB,EAAI,CAAA,EACK,QAAAI,EAAI,EAAGg7B,EAAK,KAAK,KAAK,MAAM,OAAQh7B,EAAIg7B,EAAIh7B,IAC5CokD,EAAA,KAAK,KAAK,MAAMpkD,CAAC,EACpBA,GAAKA,GAAKg7B,EAAK,EACjBp7B,EAAE,KAAKwkD,EAAK,MAAQ,IAAMA,EAAK,MAAM,EAEnCxkD,EAAA,KAAKwkD,EAAK,KAAK,EAGrB,KAAK,OAAO,KAAK,KAAK,EAAE,EAAIxkD,EAAE,KAAK,GAAG,EACjC,KAAA,MAAM,QAASqrB,GAAS,CACvBA,EAAK,QAAU,KAAK,KAAK,KAC3BA,EAAK,KAAO,KAAK,OAAO,KAAK,KAAK,EAAE,EACtC,CACD,EACD,KACJ,CAEA,UAAWvM,KAAOixC,EAAO,CACjB,MAAAjoC,EAAQioC,EAAMjxC,CAAG,EA2BvB,GAzBI+9D,GAAkB,SAAS/9D,CAAG,IAC3B,KAAA,YAAYA,CAAG,EAAIgJ,GAEtBhJ,IAAQ,OACN,KAAK,YAAY,OAAS,mBAC5B,KAAK,KAAO,CACV,GAAIA,EACJ,MAAO,CAAC,CAAA,GAGR,KAAK,YAAY,OAAS,mBAC5B,KAAK,KAAO,CACV,GAAIA,EACJ,MAAO,CAAC,CAAA,IAIVA,IAAQ,SAEC89D,GAAA90D,EAAO,KAAK,YAAa+0D,EAAiB,EAEnD/9D,IAAQ,cACV,KAAK,YAAY,UACfgJ,GAAS,KAAK,YAAY,WAAa,MAEvChJ,IAAQ,OAAQ,CACZ,MAAAlH,EAASkQ,EAAM,MAAM,iBAAiB,EAC5C,GAAIlQ,EAAQ,CACJ,MAAAgd,EAAKhd,EAAO,CAAC,EACnB,KAAK,YAAY,OAASgd,EACtB,KAAK,OAAOA,CAAE,IAChB,KAAK,YAAY,KAAO,KAAK,OAAOA,CAAE,EAE1C,CACF,CACI9V,IAAQ,UACN,KAAK,YAAY,MAAQ,YACtB,KAAA,YAAY,KAAO,IAAMgJ,EAAQ,KAGtChJ,IAAQ,KACN,KAAK,YAAY,MAAQ,SAC3B,KAAK,YAAY,KAAOgJ,GAGxBhJ,IAAQ,cACN,KAAK,YAAY,MAAQ,UAC3B,KAAK,YAAY,IAAMgJ,EAG7B,CACF,CAEA,YAAa,CACN,KAAA,MAAM,KAAK,KAAK,WAAW,CAClC,CACF,CAIA,SAAS00B,GACPpU,EACAC,EACAC,EACAC,EACAykB,EACAC,EACQ,CACR,GAAI,OAAOD,EAAM,KAAe,OAAOC,EAAM,IAAa,CACxD,MAAM5+C,EAAI+5B,EAAKE,EACTn6B,EAAIk6B,EAAKE,EACX,MAAA,CAACl6B,GAAK,CAACF,EACF,GAED,IAAO,KAAK,MAAM,CAACA,EAAG,CAACE,CAAC,EAAI,IAAO,KAAK,GAAK,KAAO,GAAA,KAErD,QAAAmuC,GAAMpU,EAAIC,EAAI2kB,EAAIC,CAAE,EAAIzQ,GAAMlU,EAAIC,EAAIykB,EAAIC,CAAE,CAEvD,CAEA,SAAS2vB,GACPhD,EACAjhE,EACAkkE,EACA,CACA,MAAMlR,GAASiO,EAAM,IAAI,MAAM,GAAG,EAC5BiB,EAAO,aACb,QAASz6E,EAAI,EAAGg7B,EAAKuwC,EAAM,OAAQvrE,EAAIg7B,EAAIh7B,IAAK,CAC9C,MAAM28E,EAAOpR,EAAMvrE,CAAC,EAAE,MAAM,GAAG,EACzB0e,EAAMi+D,EAAK,CAAC,EAAE,QAAQlC,EAAM,EAAE,EAAE,QAAQ,SAAU,SAAUmC,EAAQ,CACjE,MAAA,IAAMA,EAAO,aAAY,CACjC,GACG,CAACH,GAAqBA,EAAkB,SAAS/9D,CAAG,KACtDnG,EAAGmG,CAAG,EAAIi+D,EAAK,CAAC,EAAE,QAAQlC,EAAM,EAAE,EAEtC,CACF,CAEA,MAAMgC,GAA8B,CAClC,KACA,QACA,UACA,QACA,SACA,IACA,IACA,KACA,KACA,IACA,KACA,KAEA,SACA,UACA,MAEA,OACA,eAEA,SACA,mBACA,iBACA,kBACA,oBACA,iBACA,eAEA,cAEA,OACA,cACA,YACA,aACA,cACA,gBACF,ECtZO,MAAM0a,EAAa,CACxB,eACA,gBACA,oBAAgD,KAChD,qBAAiD,KAEjD,YAAYC,EAAgCC,EAAiC,CACtE,KAAA,eAAiB,IAAI7e,GAAS4e,CAAY,EAC1C,KAAA,gBAAkB,IAAI5e,GAAS6e,CAAa,CACnD,CAEA,OAAQ,CACN,KAAK,oBAAoB,EAAE,KAAM3e,GAAgB,CAC/C,KAAK,KAAKA,CAAW,CAAA,CACtB,CACH,CAEA,KAAM,CACJ,KAAK,qBAAqB,QAC1B,KAAK,sBAAsB,QAC3B,KAAK,oBAAsB,KAC3B,KAAK,qBAAuB,KAC5B,KAAK,MAAM,cAAc,CAC3B,CAEA,qBAAsB,CACpB,OAAO,IAAI,QAAqB,CAACt/D,EAASC,IAAW,CACnD,UAAU,aACP,aAAa,CACZ,MAAO,GACP,MAAO,EAAA,CACR,EACA,KAAMq/D,GAAgB,CAChB,KAAA,eAAe,aAAaA,CAAW,EAC5Ct/D,EAAQs/D,CAAW,CAAA,CACpB,EACA,MAAO3rD,GAAU,CACX,KAAA,MAAM,iCAAiCA,CAAK,GAAG,EACpD1T,EAAO0T,CAAK,CAAA,CACb,CAAA,CACJ,CACH,CAEA,qBAAqB3D,EAAsB,CACnC,MAAAsvD,EAActvD,EAAM,QAAQ,CAAC,EAC9B,KAAA,gBAAgB,aAAasvD,CAAW,EAC7C,KAAK,MAAM,gDAAgD,CAC7D,CAEA,KAAK4e,EAA0B,CACvB,MAAAC,EAAcD,EAAY,iBAC1BE,EAAcF,EAAY,iBAC5BC,EAAY,OAAS,GACvB,KAAK,MAAM,uBAAuBA,EAAY,CAAC,EAAE,KAAK,GAAG,EAEvDC,EAAY,OAAS,GACvB,KAAK,MAAM,uBAAuBA,EAAY,CAAC,EAAE,KAAK,GAAG,EAI3D,MAAMC,EAAU,OAGVC,EAAsB,IAAI,kBAAkBD,CAAO,EACzD,KAAK,oBAAsBC,EAC3B,KAAK,MAAM,2DAA2D,EAClDA,EAAA,iBAAiB,eAAgB,KAAK,gBAAgB,EACtDA,EAAA,iBAClB,2BACA,KAAK,sBAAA,EAGD,MAAAC,EAAuB,IAAI,kBAAkBF,CAAO,EAC1D,KAAK,qBAAuBE,EAC5B,KAAK,MAAM,6DAA6D,EACnDA,EAAA,iBACnB,eACA,KAAK,gBAAA,EAEcA,EAAA,iBACnB,2BACA,KAAK,sBAAA,EAEcA,EAAA,iBAAiB,QAAS,KAAK,oBAAoB,EAExE,KAAK,MAAM,+CAA+C,EAC1DD,EAAoB,SAASH,EAAY,CAAC,EAAGD,CAAW,EACxDI,EAAoB,SAASF,EAAY,CAAC,EAAGF,CAAW,EAExD,KAAK,MAAM,wCAAwC,EACnDI,EACG,YAAY,CACX,oBAAqB,EACtB,CAAA,EACA,KAAME,GAAgB,KAAK,aAAaA,CAAW,CAAC,EACpD,MAAO3pE,GAAQ,KAAK,2BAA2BA,CAAG,CAAC,CACxD,CAEA,iBAAiB7E,EAAkC,CACjD,MAAMyuE,EAAiBzuE,EAAM,OACvB0uE,EAAe1uE,EAAM,UAE3B,GAAIyuE,GAAkBC,EAAc,CAC5B,MAAAC,EAAkB,IAAI,gBAAgBD,CAAY,EAClDE,EAAY,KAAK,aAAaH,CAAc,EAE9CG,IACFA,EACG,gBAAgBD,CAAe,EAC/B,KAAK,IAAM,CACV,KAAK,wBAAwBF,CAAc,CAAA,CAC5C,EACA,MAAO9qE,GAAe,CAChB,KAAA,wBAAwB8qE,EAAgB9qE,CAAK,CAAA,CACnD,EACE,KAAA,MACH,GAAG,KAAK,YAAY8qE,CAAc,CAAC;AAAA,EAC9BzuE,EAAM,UAAU,SAAS,GAAA,EAGpC,CACF,CAEA,wBAAwByuE,EAAmC,CACzD,KAAK,MAAM,GAAG,KAAK,YAAYA,CAAc,CAAC,2BAA2B,CAC3E,CAEA,wBAAwBA,EAAmC9qE,EAAY,CAChE,KAAA,MACH,GAAG,KAAK,YAAY8qE,CAAc,CAAC;AAAA,EAC9B9qE,EAAM,SAAU,CAAA,GAAA,CAEzB,CAEA,uBAAuB3D,EAAc,CACnC,MAAMyuE,EAAiBzuE,EAAM,OACrB,QAAA,IAAI,2BAA4BA,CAAK,EACzCyuE,GACG,KAAA,MACH,GAAG,KAAK,YAAYA,CAAc,CAAC,eAC9BA,EAAe,kBAAkB,GAAA,CAG5C,CAEA,aAAaD,EAAwC,CACnD,KAAK,MAAM;AAAA,EAAoCA,EAAY,GAAG,EAAE,EAE5D,KAAK,sBACP,KAAK,MAAM,gDAAgD,EAC3D,KAAK,oBACF,oBAAoBA,CAAW,EAC/B,KAAK,IAAM,CACL,KAAA,2BAA2B,KAAK,mBAAoB,CAAA,CAC1D,EACA,MAAO3pE,GAAQ,KAAK,2BAA2BA,CAAG,CAAC,GAGpD,KAAK,uBACP,KAAK,MAAM,kDAAkD,EAC7D,KAAK,qBACF,qBAAqB2pE,CAAW,EAChC,KAAK,IAAM,CACL,KAAA,4BAA4B,KAAK,oBAAqB,CAAA,CAC5D,EACA,MAAO3pE,GAAQ,KAAK,2BAA2BA,CAAG,CAAC,EAEtD,KAAK,MAAM,0CAA0C,EACrD,KAAK,qBACF,aAAa,EACb,KAAM2pE,GAAgB,KAAK,cAAcA,CAAW,CAAC,EACrD,MAAO3pE,GAAQ,KAAK,2BAA2BA,CAAG,CAAC,EAE1D,CAEA,cAAc2pE,EAAwC,CACpD,KAAK,MAAM;AAAA,EAAsCA,EAAY,GAAG,GAAG,EAE/D,KAAK,uBACP,KAAK,MAAM,iDAAiD,EAC5D,KAAK,qBACF,oBAAoBA,CAAW,EAC/B,KAAK,IAAM,CACL,KAAA,2BAA2B,KAAK,oBAAqB,CAAA,CAC3D,EACA,MAAO3pE,GAAQ,KAAK,2BAA2BA,CAAG,CAAC,GAGpD,KAAK,sBACP,KAAK,MAAM,iDAAiD,EAC5D,KAAK,oBACF,qBAAqB2pE,CAAW,EAChC,KAAK,IAAM,CACL,KAAA,4BAA4B,KAAK,mBAAoB,CAAA,CAC3D,EACA,MAAO3pE,GAAQ,KAAK,2BAA2BA,CAAG,CAAC,EAE1D,CAEA,2BAA2BlB,EAAY,CACrC,KAAK,MAAM,yCAAyCA,EAAM,SAAU,CAAA,GAAG,CACzE,CAEA,sBACE8qE,EACAI,EACA,CACM,MAAAC,EAAW,KAAK,YAAYL,CAAc,EAChD,KAAK,MAAM,GAAGK,CAAQ,IAAID,CAAY,YAAY,CACpD,CAEA,2BAA2BJ,EAAmC,CACvD,KAAA,sBAAsBA,EAAgB,qBAAqB,CAClE,CAEA,4BAA4BA,EAAmC,CACxD,KAAA,sBAAsBA,EAAgB,sBAAsB,CACnE,CAEA,MAAMr8C,EAAc,CAClBA,EAAOA,EAAK,OACZ,MAAMjgC,GAAO,OAAO,YAAY,MAAQ,KAAM,QAAQ,CAAC,EAC/C,QAAA,IAAIA,EAAKigC,CAAI,EACf,MAAA28C,EAAM,SAAS,cAAc,KAAK,EACxCA,EAAI,UAAY,QAAQ58E,CAAG,KAAKigC,CAAI,SACpC,SAAS,eAAe,OAAO,GAAG,YAAY28C,CAAG,CACnD,CAEA,aAAaN,EAAmC,CAC9C,OAAOA,IAAmB,KAAK,oBAC3B,KAAK,qBACL,KAAK,mBACX,CAEA,YAAYA,EAAmC,CACtC,OAAAA,IAAmB,KAAK,oBAC3B,sBACA,sBACN,CACF,CClPO,MAAMO,EAAc,CACzB,OACA,GAEA,YAAY5qD,EAA2B,CACrC,KAAK,OAASA,EACd,MAAM6qD,EAAc,CAAE,MAAO,GAAM,mBAAoB,EAAM,EAEzD,GADJ,KAAK,GAAK,KAAK,OAAO,WAAW,QAASA,CAAW,EACjD,CAAC,KAAK,GACF,MAAA,IAAI,MAAM,6BAA6B,CAEjD,CACF,CC6LA,MAAMC,GAAmC,CAAA,EACnCC,GAAgD,CAAA,EAE/C,SAASC,GAA2B92F,EAAgB,CACzD42F,GAAiB,KAAK52F,CAAE,CAC1B,CAKgB,SAAA+2F,GACdC,EACAC,EAAQ,GACR,CAEA,MAAMC,EAAaC,KACf,GAAAN,GAAqBK,CAAU,EACjC,OAIC,GAAA,MAAOE,GAAQ,CAChB,QAAQ,IAAIA,EAAI,QAAU,KAAK,UAAUA,CAAG,CAAC,CAAA,CAC9C,EAID,GAAG,MAAM,IAAM,CACbR,GAAiB,QAAS52F,GAAOA,EAAI,CAAA,CAAA,CACtC,EACD,MAAMq3F,EAAiB,CACrB,4BACA,0BACA,mBACA,mBACA,cACA,aACA,mBACA,YACA,aACA,YACA,iBACA,cACA,gBACA,cACA,eACA,cACA,gBACA,kBACA,iBACA,iBACA,eACA,cACA,iBACA,iBACA,gBACA,gBACA,yBACA,yBACA,cACA,aACA,0BACA,UACA,aACA,UAAA,EAGIC,EAAmB,CACvB,qBACA,qBACA,oBACA,eAAA,EAGC,GAAA,OACD,OAAO,OAAON,EAAkB,CAC9B,MAAAC,EACA,UAAWI,EACX,YAAaC,CAAA,CACd,CAAA,EAEHT,GAAqBK,CAAU,EAAI,EACrC,CAGO,SAASK,GAAaC,EAAiB,CAC5C,OAAO,IAAI,QAAiB,CAAC9/E,EAASC,IAAW,CAC/C,GAAG,WAAW,CACZ,UAAW,CAAC6/E,CAAO,EACnB,QAAS,SAAUJ,EAAK,CAClBA,EAAI,YAAYI,CAAO,EACzB9/E,EAAQ,EAAI,EAEZC,EAAO,EAAK,CAEhB,EACA,KAAM,UAAY,CAChBA,EAAO,EAAK,CACd,CAAA,CACD,CAAA,CACF,CACH,CAGO,SAAS8/E,GAA8BC,EAO3C,CACDZ,GAA2B,UAAY,CACrC,GAAG,0BAA0BY,CAAW,CAAA,CACzC,CACH,CAGO,SAASC,GAA4BD,EAMzC,CACDZ,GAA2B,UAAY,CACrC,GAAG,wBAAwBY,CAAW,CAAA,CACvC,CACH,CAGO,SAASE,GAAgBC,EAQ7B,CACD,GAAG,YAAYA,CAAS,CAC1B,CAGO,SAASC,GAAiBD,EAG9B,CACD,GAAG,aAAaA,CAAS,CAC3B,CAIO,SAASE,GAAgBF,EAO7B,CACD,GAAG,YAAYA,CAAS,CAC1B,CAGO,SAASG,GAAkBH,EAO/B,CACD,GAAG,cAAcA,CAAS,CAC5B,CAIO,SAASI,GAAoBJ,EAMjC,CACD,GAAG,gBAAgBA,CAAS,CAC9B,CAGO,SAASK,IAAkB,CAChC,GAAG,YAAY,CACjB,CAGO,SAASC,GAAeN,EAG5B,CACD,GAAG,WAAWA,CAAS,CACzB,CAGO,SAASO,GAAqBP,EAGlC,CACD,GAAG,iBAAiBA,CAAS,CAC/B,CAGO,SAASQ,GAAcR,EAE3B,CACD,GAAG,UAAUA,CAAS,CACxB,CAGO,SAASS,GAAeT,EAE5B,CACD,GAAG,WAAWA,CAAS,CACzB,CAGO,SAASU,GAAcV,EAE3B,CACD,GAAG,UAAUA,CAAS,CACxB,CAGO,SAASW,GAAmBX,EAIhC,CACD,GAAG,eAAeA,CAAS,CAC7B,CAIO,SAASY,GAAgBZ,EAO7B,CACD,GAAG,YAAYA,CAAS,CAC1B,CAGO,SAASa,GAAkBb,EAO/B,CACD,GAAG,cAAcA,CAAS,CAC5B,CAGO,SAASc,GAAmBd,EAOhC,CACD,GAAG,eAAeA,CAAS,CAC7B,CAGO,SAASe,GAAmBf,EAKhC,CACD,GAAG,eAAeA,CAAS,CAC7B,CAGO,SAASgB,GAAiBhB,EAO9B,CACD,GAAG,aAAaA,CAAS,CAC3B,CAGO,SAASiB,GAAgBjB,EAS7B,CACD,GAAG,YAAYA,CAAS,CAC1B,CAGO,SAASkB,GAAelB,EAO5B,CACD,GAAG,WAAWA,CAAS,CACzB,CAOgB,SAAAmB,GACdlrE,EAQAmrE,EACAC,EACA,CACA,SAASC,GAAgB,CACvB,eAAe,OAAO,uBAAwBrrE,EAAQ,SAAUspE,EAAK,CAC/DA,EAAI,SAAW,6BAGP6B,IAEVC,EAAQ9B,EAAI,OAAO,CACrB,CACD,CACH,CACI,OAAO,eAAkB,IACvB,SAAS,iBACF,SAAA,iBAAiB,sBAAuB+B,EAAe,EAAK,EAC5D,SAAS,cACT,SAAA,YAAY,sBAAuBA,CAAa,EAChD,SAAA,YAAY,wBAAyBA,CAAa,GAG/CA,GAElB,CAoEO,SAASC,GACdC,EACAC,EACAC,EAA2C,kBAC3CtlF,EAAQ,GACR,CACO,MAAA,6DAA6DolF,CAAK,iBAAiB,mBACxFC,CACD,CAAA,6BAA6BC,CAAK,UAAUtlF,CAAK,kBACpD,CCpgBO,SAASulF,GAAWj6E,EAAsB,CAErC,OAAQ,eAChBA,GAAYA,EAAS,EAGZ,SAAA,iBAAiB,sBAAuBA,EAAU,EAAK,CAEpE,CAoBA,SAASk6E,GACPrC,EACAp9D,EACA,CACA,IAAI0/D,EAAmB,OACvB,OAAQtC,EAAI,MAAO,CACjB,IAAK,GACgBsC,EAAA,QACnB,MACF,IAAK,GACgBA,EAAA,OACnB,MACF,IAAK,GACgBA,EAAA,SACnB,MACF,IAAK,GACgBA,EAAA,QACnB,MACF,IAAK,IACgBA,EAAA,OACnB,MACF,IAAK,IACgBA,EAAA,OACf1/D,IAAe,gBACE0/D,EAAA,cAErB,MACF,IAAK,IACgBA,EAAA,cACnB,MACF,IAAK,IACgBA,EAAA,aACnB,MACF,IAAK,IACgBA,EAAA,OACnB,MACF,IAAK,IACgBA,EAAA,OACnB,MACF,IAAK,IACgBA,EAAA,eACnB,KACJ,CACA,MAAO,GAAGtC,EAAI,KAAK,IAAIsC,CAAgB,MAAMtC,EAAI,YAAY,EAC/D,CAGgB,SAAAuC,GACdx1B,EACA80B,EACAC,EACA,CACG,GAAA,SACD,OAAO,OAAO/0B,EAAQ,CAAA,CAIrB,EACD,SAAUizB,EAAK,CACb,IAAIwC,EAAgB,OACpB,OAAQxC,EAAI,WAAY,CACtB,IAAK,KACa,OAAAwC,EAAA,SACTX,IAAYW,CAAa,EAClC,IAAK,KACaA,EAAA,QAChB,MACF,IAAK,KACaA,EAAA,SAChB,MACF,IAAK,MACaA,EAAA,SAChB,MACF,IAAK,MACaA,EAAA,SAChB,MACF,IAAK,IACaA,EAAA,6BAChB,KACJ,CACAV,IAAUU,CAAa,CACzB,CAAA,CAEJ,CAGgB,SAAAC,GACd11B,EACA80B,EACAC,EACA,CACG,GAAA,KACD,OAAO,OAAO/0B,EAAQ,CACpB,KAAOizB,GAA0B,CACrB8B,IAAAO,GAA6BrC,CAAG,CAAC,CAC7C,CAAA,CACD,EACD,SAAUA,EAAK,CACb6B,IAAY7B,EAAI,IAAI,CACtB,CAAA,CAEJ,CAGgB,SAAA0C,GACd31B,EACA80B,EACAC,EACA,CACG,GAAA,YACD,OAAO,OAAO/0B,EAAQ,CACpB,KAAOizB,GAA0B,CACrB8B,IAAAO,GAA6BrC,CAAG,CAAC,CAC7C,CAAA,CACD,EACD,SAAUA,EAAK,CACb6B,IAAY7B,CAAG,CACjB,CAAA,CAEJ,CAGgB,SAAA2C,GACd51B,EACA80B,EACAC,EACA,CACG,GAAA,aACD,OAAO,OAAO/0B,EAAQ,CACpB,KAAOizB,GAA0B,CACrB8B,IAAAO,GAA6BrC,CAAG,CAAC,CAC7C,CAAA,CACD,EACD,UAAY,CACE6B,KACd,CAAA,CAEJ,CAGgB,SAAAe,GACd71B,EACA80B,EACAC,EACA,CACG,GAAA,YACD,OAAO,OAAO/0B,EAAQ,CACpB,KAAOizB,GAA0B,CACrB8B,IAAAO,GAA6BrC,EAAK,aAAa,CAAC,CAC5D,CAAA,CACD,EACD,SAAUA,EAAK,CACb6B,IAAY7B,CAAG,CACjB,CAAA,CAEJ,CAGgB,SAAA6C,GACd91B,EACA80B,EACAC,EACA,CACG,GAAA,aACD,OAAO,OAAO/0B,EAAQ,CACpB,KAAOizB,GAA0B,CACrB8B,IAAAO,GAA6BrC,CAAG,CAAC,CAC7C,CAAA,CACD,EACD,UAAY,CACE6B,KACd,CAAA,CAEJ,CCpTO,MAAMiB,EAAY,CACvB,IAEA,YACEC,EACAC,EAAe,WACfC,EAAe,UACfC,EAAU,GACV,CACA,KAAK,IAAM,IAAI,EAAE,IAAIH,CAAS,EACzB,KAAA,IAAI,cAAc,IAAI,EAAE,OAAOC,EAAcC,CAAY,EAAGC,CAAO,CAC1E,CACF,CCtBA,MAAMC,GAAS,OAAO,OAAO,OAE7B,eAAsBC,GACpB1gD,EACA2gD,EAAYC,GAAc,OACT,CACjB,GAAI,CAACH,GACG,MAAA,IAAI,MAAM,0BAA0B,EAEtC,MAAAzkF,EAAS,MAAMykF,GAAO,OAC1BE,EACAE,GAAwB7gD,CAAI,CAAA,EAE9B,OAAO8gD,GAAyB9kF,CAAM,CACxC,CAEA,eAAsB64E,GACpBt0E,EACAogF,EAAYC,GAAc,OACT,CACjB,OAAOF,GAAU,KAAK,UAAUK,GAAsBxgF,CAAG,CAAC,EAAGogF,CAAS,CACxE,CAEA,eAAsBK,GACpBhxE,EACA2wE,EAAYC,GAAc,OAMzB,CACD,GAAI,CAACH,GACG,MAAA,IAAI,MAAM,0BAA0B,EAE5C,MAAMQ,EAAK,OAAO,gBAAgB,IAAI,WAAW,EAAE,CAAC,EAC9C/9E,EAAM,MAAMu9E,GAAO,YACvB,CAAE,KAAME,EAAW,OAAQ,GAAI,EAC/B,GACA,CAAC,UAAW,SAAS,CAAA,EAEjBO,EAAgB,MAAMT,GAAO,QACjC,CAAE,KAAME,EAAW,GAAAM,CAAG,EACtB/9E,EACA29E,GAAwB7wE,CAAI,CAAA,EAE9B,MAAO,CAAE,UAAA2wE,EAAW,GAAAM,EAAI,IAAA/9E,EAAK,cAAAg+E,CAAc,CAC7C,CAEA,eAAsBC,GAAQhkF,EAKV,CAClB,GAAI,CAACsjF,GACG,MAAA,IAAI,MAAM,0BAA0B,EAEtC,MAAAW,EAAgB,MAAMX,GAAO,QACjC,CACE,KAAMtjF,EAAQ,UACd,GAAIA,EAAQ,EACd,EACAA,EAAQ,IACRA,EAAQ,aAAA,EAEV,OAAO2jF,GAAyBM,CAAa,CAC/C,CAEA,eAAsBC,GACpBrxE,EACA2wE,EAAYC,GAAc,MAC1BpkF,EAAO,UAON,CACD,GAAI,CAACikF,GACG,MAAA,IAAI,MAAM,0BAA0B,EAE5C,KAAM,CAAE,WAAAa,EAAY,UAAAC,GAAc,MAAMd,GAAO,YAC7C,CACE,KAAME,EACN,WAAY,OACd,EACA,GACA,CAAC,OAAQ,QAAQ,CAAA,EAEba,EAAcX,GAClB,KAAK,UAAU7wE,CAAI,CAAA,EAEf0wE,EAAY,MAAMD,GAAO,KAC7B,CACE,KAAME,EACN,KAAM,CAAE,KAAMnkF,CAAK,CACrB,EACA8kF,EACAE,CAAA,EAEK,MAAA,CACL,UAAAb,EACA,KAAAnkF,EACA,UAAA+kF,EACA,UAAAb,EACA,YAAAc,CAAA,CAEJ,CAEA,eAAsBC,GAActkF,EAMf,CACnB,GAAI,CAACsjF,GACG,MAAA,IAAI,MAAM,0BAA0B,EAWrC,OATS,MAAMA,GAAO,OAC3B,CACE,KAAMtjF,EAAQ,UACd,KAAM,CAAE,KAAMA,EAAQ,IAAK,CAC7B,EACAA,EAAQ,UACRA,EAAQ,UACRA,EAAQ,WAAA,CAGZ,CCvIO,MAAMukF,EAAW,CAEtB,YAEA,aAEA,gBAEA,YACA,OACA,SACA,SACA,YACA,eACA,eACA,SAEA,WACA,YAEA,YACE3K,EACA4K,EACAxkF,EAaA,CACK,KAAA,YAAcA,GAAS,aAAe,EACtC,KAAA,aAAeA,GAAS,cAAgB,GACxC,KAAA,gBAAkBA,GAAS,iBAAmB,EAC9C,KAAA,YAAcA,GAAS,aAAe,EACtC,KAAA,OAASA,GAAS,QAAU,eAC5B,KAAA,SAAWA,GAAS,UAAY,MAChC,KAAA,SAAWA,GAAS,UAAY,MAChC,KAAA,YAAcA,GAAS,aAAe,MAC3C,KAAK,eACH,OAAOA,GAAS,gBAAkB,UAC9BA,GAAS,eACT,GACN,KAAK,eACH,OAAOA,GAAS,gBAAkB,UAC9BA,GAAS,eACT,GACN,KAAK,SAAWA,GAAS,WAAcykF,GAAS,IAChD,KAAK,WAAa,KAAK,KAAKD,EAAiB,KAAK,YAAY,EACzD,KAAA,YAAc,KAAK,oBAClB7K,GAAA,KAAK,YAAaC,CAAe,EAClC,KAAA,WAAW,KAAK,WAAW,CAClC,CAEQ,mBAAoB,CAC1B,OAAO7rF,GAAE,MAAO,CAAE,MAAO,YAAa,EAAG,CAAA,CAAE,CAC7C,CAEQ,YACN0lC,EACAixD,EACA1kF,EAIA,CAEE0kF,EAAAA,EAAS,EAAI,EAAIA,EAAS,KAAK,WAAaA,EAAS,KAAK,WAAa,EACzE,MAAM7hD,EAAO7iC,GAAS,MAAQ,OAAO0kF,EAAS,CAAC,EACzCC,EAAU3kF,GAAS,SAAW,GACnCyzB,EAAM,SAAqB,KAC1BixD,GAAU,KAAK,aACbC,EAAQ,QAAQ,MAAM,GAAK,IAC3BA,EAAQ,QAAQ,MAAM,GAAK,GACzB52F,GAAE,OAAQ,CAAE,MAAO,WAAW42F,CAAO,EAAA,EAAM9hD,CAAI,EAC/C90C,GACE,IACA,CACE,MAAO42F,EACP,KAAM,KAAK,OAAO,QAAQ,SAAU,OAAOD,CAAM,CAAC,EAClD,QAAUE,GACD,KAAK,WAAWF,EAAQE,CAAG,CAEtC,EACA/hD,CACF,CAAA,CAER,CAEQ,WAAY,CACZ,MAAAgiD,EAAiB,KAAK,oBAEtBC,EAAe,KAAK,KAAK,KAAK,gBAAkB,CAAC,EACjDl2D,EACJ,KAAK,YAAck2D,EACf,KAAK,IACH,KAAK,IACH,KAAK,YAAcA,EACnB,KAAK,WAAa,KAAK,eACzB,EACA,CAEF,EAAA,EACAC,EACJ,KAAK,YAAcD,EACf,KAAK,IAAI,KAAK,YAAcA,EAAc,KAAK,UAAU,EACzD,KAAK,IAAI,KAAK,gBAAiB,KAAK,UAAU,EAUpD,GAPI,KAAK,WAAa,KAAK,YAAc,GAAK,KAAK,iBACjD,KAAK,YAAYD,EAAgB,KAAK,YAAc,EAAG,CACrD,KAAM,KAAK,SACX,QAAS,MAAA,CACV,EAGCj2D,EAAgB,GAAK,KAAK,YAAc,EAAG,CAC7C,MAAM9wB,EAAM,KAAK,IAAI,KAAK,YAAa8wB,CAAa,EACpD,QAASvnC,EAAI,EAAGA,EAAIyW,EAAKzW,IAClB,KAAA,YAAYw9F,EAAgBx9F,CAAC,EAEhC,KAAK,YAAcunC,GAAiB,KAAK,aAC1Ci2D,EAAe,SAAqB,KACnC92F,GAAE,OAAQ,GAAI,KAAK,WAAW,CAAA,CAGpC,CAEA,QAAS1G,EAAIunC,EAAevnC,EAAI09F,EAAa19F,IACtC,KAAA,YAAYw9F,EAAgBx9F,CAAC,EAGpC,GAAI09F,EAAc,KAAK,YAAc,KAAK,YAAc,EAAG,CAEvD,KAAK,WAAa,KAAK,YAAcA,GACrC,KAAK,aAEJF,EAAe,SAAqB,KACnC92F,GAAE,OAAQ,GAAI,KAAK,WAAW,CAAA,EAGlC,MAAM8P,EAAQ,KAAK,IAAI,KAAK,WAAa,KAAK,YAAaknF,CAAW,EACtE,QAAS19F,EAAIwW,EAAOxW,EAAI,KAAK,WAAYA,IAClC,KAAA,YAAYw9F,EAAgBx9F,CAAC,CAEtC,CAGE,KAAK,WACJ,KAAK,YAAc,KAAK,WAAa,GAAK,KAAK,iBAEhD,KAAK,YAAYw9F,EAAgB,KAAK,YAAc,EAAG,CACrD,KAAM,KAAK,SACX,QAAS,MAAA,CACV,EAEG9wD,GAAA,KAAK,YAAa8wD,CAAc,EACtC,KAAK,YAAcA,CACrB,CAEO,WAAWH,EAAgBE,EAAsB,CACjD,KAAA,YAAcF,EACjBA,EAAS,EAAI,EAAIA,EAAS,KAAK,WAAaA,EAAS,KAAK,WAAa,EACzE,KAAK,UAAU,EACT,MAAAM,EAAsB,KAAK,SAASN,CAAM,EAChD,OAAIE,IACGI,GACH77D,GAAgBy7D,CAAG,GAGhBI,CACT,CAEO,UAAoB,CACzB,OAAO,KAAK,WAAW,KAAK,YAAc,CAAC,CAC7C,CAEO,UAAoB,CACzB,OAAO,KAAK,WAAW,KAAK,YAAc,CAAC,CAC7C,CACF,CCrGO,MAAMC,EAAyD,CAC7D,OACA,MACA,GACA,MACA,GAEP,YAAYpuE,EAA2B,GAAI,CACpC,KAAA,OAASA,EAAO,QAAU,CAAA,EAE/B,MAAM7Z,EAAQ6Z,EAAO,OAAO,OAAS,CAAA,EACrC,KAAK,MAAQquE,GAAY,CACvB,QAASruE,EAAO,OAAO,UAAY,IAAM7Z,GACzC,UAAWA,EACX,SAAU6Z,EAAO,OAAO,SACxB,UACE,OAAOA,EAAO,OAAO,WAAa,UAC9BA,EAAO,OAAO,UACd,EAAA,CACP,EAEI,KAAA,GAAK,IAAI6kC,GAET,KAAA,MAAQ,IAAI55C,GAAe,CAC9B,QAAS+U,EAAO,OAAO,QACvB,QAASA,EAAO,OAAO,QACvB,QAASA,EAAO,OAAO,QACvB,aAAcA,EAAO,OAAO,aAC5B,iBAAkBA,EAAO,OAAO,iBAChC,YAAaA,EAAO,OAAO,YAC3B,MAAOA,EAAO,OAAO,MACrB,MAAOA,EAAO,OAAO,KAAA,CACtB,EAED,KAAK,GAAK,IAAIsuE,GAAe,CAAE,YAAa,EAAG,CACjD,CACF,CCzHO,MAAMC,EAAW,CACtB,MACA,UAEA,YAAYplF,EAIT,CACD,KAAK,MAAQA,EAAQ,MACrB,KAAK,UAAYA,EAAQ,UACzB,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACpBA,EAAQ,kBACV,KAAK,uBAAuB,CAEhC,CAGA,eAAgB,CACd,OAAO,QAAU,CAACwD,EAASO,EAAQ+8D,EAAQukB,EAAOjxE,IAAU,CAC1D,MAAMzQ,EAAM,CACV,KAAM,WACN,IAAKH,EACL,KAAMO,EACN,IAAK+8D,EACL,IAAKukB,EACL,MAAOjxE,GAAO,KAAA,EAEhB,KAAK,OAAOzQ,CAAG,CAAA,CAEnB,CAGA,mBAAoB,CACX,OAAA,iBACL,QACC8M,GAAU,CACT,MAAMzS,EAASyS,EAAM,OAErB,GACEzS,aAAkB,mBAClBA,aAAkB,kBAClBA,aAAkB,iBAClB,CACA,MAAM2F,EAAM,CACV,KAAM,iBACN,SAAW3F,EAAe,KAAQA,EAAe,KACjD,QAASA,EAAO,OAAA,EAElB,KAAK,OAAO2F,CAAG,CACjB,CACF,EACA,EAAA,CAEJ,CAGA,oBAAqB,CACZ,OAAA,iBACL,qBACC8M,GAAiC,CAChC,MAAM9M,EAAM,CACV,KAAM,gBACN,OAAQ8M,EAAM,MAAA,EAEhB,KAAK,OAAO9M,CAAG,CACjB,CAAA,CAEJ,CAGA,wBAAyB,CAEvBylD,GAAgB,IAAM,CACpB,WAAW,IAAM,CACf,MAAMtQ,EAAS,CACb,CAAC,OAAO,WAAa,EAAG,OAAO,YAAc,CAAC,EAC9C,CAAC,OAAO,WAAa,EAAG,OAAO,YAAc,EAAG,EAChD,CAAC,OAAO,WAAa,EAAG,OAAO,YAAc,EAAG,EAChD,CAAC,OAAO,WAAa,GAAK,OAAO,YAAc,CAAC,EAChD,CAAC,OAAO,WAAa,GAAK,OAAO,YAAc,CAAC,CAAA,EAIlD,IAAIwsC,EAAkB,EAmBlB,GAjBGxsC,EAAA,QAASoB,GAAU,CAClB,KAAA,CAAC5kD,EAAGF,CAAC,EAAI8kD,EAGTqrC,EADW,SAAS,kBAAkBjwF,EAAGF,CAAC,EACpB,CAAC,GAI3BmwF,GAAY,UAAY,QACxBA,GAAY,UAAY,SAGxBD,GACF,CACD,EAGGA,GAAmBxsC,EAAO,OAAS,GAAK,CAC1C,MAAMn1C,EAAM,CACV,KAAM,oBACN,OAAQ,QAAA,EAEV,KAAK,OAAOA,CAAG,CACjB,GACC,GAAI,CAAA,CACR,CACH,CAOA,OAAOkP,EAA2B,CAC1B,MAAA2yE,EAAU,KAAK,UAAU,CAC7B,GAAG3yE,EACH,MAAO,KAAK,MACZ,KAAM4yE,GAAkB,CAAA,CACzB,EAED,QAAQ,MAAMD,CAAO,EACjB,KAAK,WACG,UAAA,WAAW,KAAK,UAAWA,CAAO,CAEhD,CACF","x_google_ignoreList":[1,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88]}