leafrelay 0.2.8 → 0.2.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +30 -4
- package/README.zh-CN.md +30 -4
- package/dist/cli.d.ts +1 -0
- package/dist/cli.js +45 -49
- package/dist/cli.js.map +1 -1
- package/dist/daemon.d.ts +1 -0
- package/dist/daemon.js +866 -934
- package/dist/daemon.js.map +1 -1
- package/dist/dist-JyfvbgjD.js +2923 -0
- package/dist/dist-JyfvbgjD.js.map +1 -0
- package/dist/index.d.ts +15 -16
- package/dist/index.js +1 -8
- package/dist/serve-CQnCOCAM.js +6823 -0
- package/dist/serve-CQnCOCAM.js.map +1 -0
- package/package.json +10 -10
- package/dist/chunk-3TTRDNHP.js +0 -3333
- package/dist/chunk-3TTRDNHP.js.map +0 -1
- package/dist/chunk-4EHEWM7N.js +0 -7393
- package/dist/chunk-4EHEWM7N.js.map +0 -1
- package/dist/chunk-5WRI5ZAA.js +0 -31
- package/dist/chunk-5WRI5ZAA.js.map +0 -1
- package/dist/index.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serve-CQnCOCAM.js","names":["valid","compare"],"sources":["../../daemon/dist/server-VUA8bWES.js","../../../node_modules/.pnpm/semver@7.8.5/node_modules/semver/internal/constants.js","../../../node_modules/.pnpm/semver@7.8.5/node_modules/semver/internal/debug.js","../../../node_modules/.pnpm/semver@7.8.5/node_modules/semver/internal/re.js","../../../node_modules/.pnpm/semver@7.8.5/node_modules/semver/internal/parse-options.js","../../../node_modules/.pnpm/semver@7.8.5/node_modules/semver/internal/identifiers.js","../../../node_modules/.pnpm/semver@7.8.5/node_modules/semver/classes/semver.js","../../../node_modules/.pnpm/semver@7.8.5/node_modules/semver/functions/parse.js","../../../node_modules/.pnpm/semver@7.8.5/node_modules/semver/functions/valid.js","../../../node_modules/.pnpm/semver@7.8.5/node_modules/semver/functions/clean.js","../../../node_modules/.pnpm/semver@7.8.5/node_modules/semver/functions/inc.js","../../../node_modules/.pnpm/semver@7.8.5/node_modules/semver/functions/diff.js","../../../node_modules/.pnpm/semver@7.8.5/node_modules/semver/functions/major.js","../../../node_modules/.pnpm/semver@7.8.5/node_modules/semver/functions/minor.js","../../../node_modules/.pnpm/semver@7.8.5/node_modules/semver/functions/patch.js","../../../node_modules/.pnpm/semver@7.8.5/node_modules/semver/functions/prerelease.js","../../../node_modules/.pnpm/semver@7.8.5/node_modules/semver/functions/compare.js","../../../node_modules/.pnpm/semver@7.8.5/node_modules/semver/functions/rcompare.js","../../../node_modules/.pnpm/semver@7.8.5/node_modules/semver/functions/compare-loose.js","../../../node_modules/.pnpm/semver@7.8.5/node_modules/semver/functions/compare-build.js","../../../node_modules/.pnpm/semver@7.8.5/node_modules/semver/functions/sort.js","../../../node_modules/.pnpm/semver@7.8.5/node_modules/semver/functions/rsort.js","../../../node_modules/.pnpm/semver@7.8.5/node_modules/semver/functions/gt.js","../../../node_modules/.pnpm/semver@7.8.5/node_modules/semver/functions/lt.js","../../../node_modules/.pnpm/semver@7.8.5/node_modules/semver/functions/eq.js","../../../node_modules/.pnpm/semver@7.8.5/node_modules/semver/functions/neq.js","../../../node_modules/.pnpm/semver@7.8.5/node_modules/semver/functions/gte.js","../../../node_modules/.pnpm/semver@7.8.5/node_modules/semver/functions/lte.js","../../../node_modules/.pnpm/semver@7.8.5/node_modules/semver/functions/cmp.js","../../../node_modules/.pnpm/semver@7.8.5/node_modules/semver/functions/coerce.js","../../../node_modules/.pnpm/semver@7.8.5/node_modules/semver/functions/truncate.js","../../../node_modules/.pnpm/semver@7.8.5/node_modules/semver/internal/lrucache.js","../../../node_modules/.pnpm/semver@7.8.5/node_modules/semver/classes/range.js","../../../node_modules/.pnpm/semver@7.8.5/node_modules/semver/classes/comparator.js","../../../node_modules/.pnpm/semver@7.8.5/node_modules/semver/functions/satisfies.js","../../../node_modules/.pnpm/semver@7.8.5/node_modules/semver/ranges/to-comparators.js","../../../node_modules/.pnpm/semver@7.8.5/node_modules/semver/ranges/max-satisfying.js","../../../node_modules/.pnpm/semver@7.8.5/node_modules/semver/ranges/min-satisfying.js","../../../node_modules/.pnpm/semver@7.8.5/node_modules/semver/ranges/min-version.js","../../../node_modules/.pnpm/semver@7.8.5/node_modules/semver/ranges/valid.js","../../../node_modules/.pnpm/semver@7.8.5/node_modules/semver/ranges/outside.js","../../../node_modules/.pnpm/semver@7.8.5/node_modules/semver/ranges/gtr.js","../../../node_modules/.pnpm/semver@7.8.5/node_modules/semver/ranges/ltr.js","../../../node_modules/.pnpm/semver@7.8.5/node_modules/semver/ranges/intersects.js","../../../node_modules/.pnpm/semver@7.8.5/node_modules/semver/ranges/simplify.js","../../../node_modules/.pnpm/semver@7.8.5/node_modules/semver/ranges/subset.js","../../../node_modules/.pnpm/semver@7.8.5/node_modules/semver/index.js","../../daemon/dist/index.js","../src/daemonClient.ts","../src/serve.ts"],"sourcesContent":["import { createHash, randomBytes, randomUUID } from \"node:crypto\";\nimport { Blob as Blob$1 } from \"node:buffer\";\nimport { EventEmitter } from \"node:events\";\nimport { formatWithOptions, promisify } from \"node:util\";\nimport { appendFile, chmod, lstat, mkdir, open, readFile, readdir, readlink, realpath, rename, rm, stat, writeFile } from \"node:fs/promises\";\nimport { homedir, type } from \"node:os\";\nimport * as sp from \"node:path\";\nimport { dirname, join, posix, relative, resolve, sep } from \"node:path\";\nimport { realpathSync, watch } from \"node:fs\";\nimport { Readable } from \"node:stream\";\nimport { createServer } from \"node:net\";\nimport { ResponseError, SocketMessageReader, SocketMessageWriter, createMessageConnection } from \"vscode-jsonrpc/node\";\n// \\0rolldown/runtime.js\nvar __create = Object.create;\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __getProtoOf = Object.getPrototypeOf;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __commonJSMin = (cb, mod) => () => (mod || (cb((mod = { exports: {} }).exports, mod, mod.exports), cb = null), mod.exports);\nvar __copyProps = (to, from, except, desc) => {\n\tif (from && typeof from === \"object\" || typeof from === \"function\") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {\n\t\tkey = keys[i];\n\t\tif (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {\n\t\t\tget: ((k) => from[k]).bind(null, key),\n\t\t\tenumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable\n\t\t});\n\t}\n\treturn to;\n};\nvar __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule || !__hasOwnProp.call(mod, \"default\") ? __defProp(target, \"default\", {\n\tvalue: mod,\n\tenumerable: true\n}) : target, mod));\n// ../../node_modules/.pnpm/mime@4.1.2/node_modules/mime/dist/types/other.js\nconst types$1 = {\n\t\"application/prs.cww\": [\"cww\"],\n\t\"application/prs.xsf+xml\": [\"xsf\"],\n\t\"application/vnd.1000minds.decision-model+xml\": [\"1km\"],\n\t\"application/vnd.3gpp.pic-bw-large\": [\"plb\"],\n\t\"application/vnd.3gpp.pic-bw-small\": [\"psb\"],\n\t\"application/vnd.3gpp.pic-bw-var\": [\"pvb\"],\n\t\"application/vnd.3gpp2.tcap\": [\"tcap\"],\n\t\"application/vnd.3m.post-it-notes\": [\"pwn\"],\n\t\"application/vnd.accpac.simply.aso\": [\"aso\"],\n\t\"application/vnd.accpac.simply.imp\": [\"imp\"],\n\t\"application/vnd.acucobol\": [\"acu\"],\n\t\"application/vnd.acucorp\": [\"atc\", \"acutc\"],\n\t\"application/vnd.adobe.air-application-installer-package+zip\": [\"air\"],\n\t\"application/vnd.adobe.formscentral.fcdt\": [\"fcdt\"],\n\t\"application/vnd.adobe.fxp\": [\"fxp\", \"fxpl\"],\n\t\"application/vnd.adobe.xdp+xml\": [\"xdp\"],\n\t\"application/vnd.adobe.xfdf\": [\"*xfdf\"],\n\t\"application/vnd.age\": [\"age\"],\n\t\"application/vnd.ahead.space\": [\"ahead\"],\n\t\"application/vnd.airzip.filesecure.azf\": [\"azf\"],\n\t\"application/vnd.airzip.filesecure.azs\": [\"azs\"],\n\t\"application/vnd.amazon.ebook\": [\"azw\"],\n\t\"application/vnd.americandynamics.acc\": [\"acc\"],\n\t\"application/vnd.amiga.ami\": [\"ami\"],\n\t\"application/vnd.android.package-archive\": [\"apk\"],\n\t\"application/vnd.anser-web-certificate-issue-initiation\": [\"cii\"],\n\t\"application/vnd.anser-web-funds-transfer-initiation\": [\"fti\"],\n\t\"application/vnd.antix.game-component\": [\"atx\"],\n\t\"application/vnd.apple.installer+xml\": [\"mpkg\"],\n\t\"application/vnd.apple.keynote\": [\"key\"],\n\t\"application/vnd.apple.mpegurl\": [\"m3u8\"],\n\t\"application/vnd.apple.numbers\": [\"numbers\"],\n\t\"application/vnd.apple.pages\": [\"pages\"],\n\t\"application/vnd.apple.pkpass\": [\"pkpass\"],\n\t\"application/vnd.aristanetworks.swi\": [\"swi\"],\n\t\"application/vnd.astraea-software.iota\": [\"iota\"],\n\t\"application/vnd.audiograph\": [\"aep\"],\n\t\"application/vnd.autodesk.fbx\": [\"fbx\"],\n\t\"application/vnd.balsamiq.bmml+xml\": [\"bmml\"],\n\t\"application/vnd.blueice.multipass\": [\"mpm\"],\n\t\"application/vnd.bmi\": [\"bmi\"],\n\t\"application/vnd.businessobjects\": [\"rep\"],\n\t\"application/vnd.chemdraw+xml\": [\"cdxml\"],\n\t\"application/vnd.chipnuts.karaoke-mmd\": [\"mmd\"],\n\t\"application/vnd.cinderella\": [\"cdy\"],\n\t\"application/vnd.citationstyles.style+xml\": [\"csl\"],\n\t\"application/vnd.claymore\": [\"cla\"],\n\t\"application/vnd.cloanto.rp9\": [\"rp9\"],\n\t\"application/vnd.clonk.c4group\": [\n\t\t\"c4g\",\n\t\t\"c4d\",\n\t\t\"c4f\",\n\t\t\"c4p\",\n\t\t\"c4u\"\n\t],\n\t\"application/vnd.cluetrust.cartomobile-config\": [\"c11amc\"],\n\t\"application/vnd.cluetrust.cartomobile-config-pkg\": [\"c11amz\"],\n\t\"application/vnd.commonspace\": [\"csp\"],\n\t\"application/vnd.contact.cmsg\": [\"cdbcmsg\"],\n\t\"application/vnd.cosmocaller\": [\"cmc\"],\n\t\"application/vnd.crick.clicker\": [\"clkx\"],\n\t\"application/vnd.crick.clicker.keyboard\": [\"clkk\"],\n\t\"application/vnd.crick.clicker.palette\": [\"clkp\"],\n\t\"application/vnd.crick.clicker.template\": [\"clkt\"],\n\t\"application/vnd.crick.clicker.wordbank\": [\"clkw\"],\n\t\"application/vnd.criticaltools.wbs+xml\": [\"wbs\"],\n\t\"application/vnd.ctc-posml\": [\"pml\"],\n\t\"application/vnd.cups-ppd\": [\"ppd\"],\n\t\"application/vnd.curl.car\": [\"car\"],\n\t\"application/vnd.curl.pcurl\": [\"pcurl\"],\n\t\"application/vnd.dart\": [\"dart\"],\n\t\"application/vnd.data-vision.rdz\": [\"rdz\"],\n\t\"application/vnd.dbf\": [\"dbf\"],\n\t\"application/vnd.dcmp+xml\": [\"dcmp\"],\n\t\"application/vnd.dece.data\": [\n\t\t\"uvf\",\n\t\t\"uvvf\",\n\t\t\"uvd\",\n\t\t\"uvvd\"\n\t],\n\t\"application/vnd.dece.ttml+xml\": [\"uvt\", \"uvvt\"],\n\t\"application/vnd.dece.unspecified\": [\"uvx\", \"uvvx\"],\n\t\"application/vnd.dece.zip\": [\"uvz\", \"uvvz\"],\n\t\"application/vnd.denovo.fcselayout-link\": [\"fe_launch\"],\n\t\"application/vnd.dna\": [\"dna\"],\n\t\"application/vnd.dolby.mlp\": [\"mlp\"],\n\t\"application/vnd.dpgraph\": [\"dpg\"],\n\t\"application/vnd.dreamfactory\": [\"dfac\"],\n\t\"application/vnd.ds-keypoint\": [\"kpxx\"],\n\t\"application/vnd.dvb.ait\": [\"ait\"],\n\t\"application/vnd.dvb.service\": [\"svc\"],\n\t\"application/vnd.dynageo\": [\"geo\"],\n\t\"application/vnd.ecowin.chart\": [\"mag\"],\n\t\"application/vnd.enliven\": [\"nml\"],\n\t\"application/vnd.epson.esf\": [\"esf\"],\n\t\"application/vnd.epson.msf\": [\"msf\"],\n\t\"application/vnd.epson.quickanime\": [\"qam\"],\n\t\"application/vnd.epson.salt\": [\"slt\"],\n\t\"application/vnd.epson.ssf\": [\"ssf\"],\n\t\"application/vnd.eszigno3+xml\": [\"es3\", \"et3\"],\n\t\"application/vnd.ezpix-album\": [\"ez2\"],\n\t\"application/vnd.ezpix-package\": [\"ez3\"],\n\t\"application/vnd.fdf\": [\"*fdf\"],\n\t\"application/vnd.fdsn.mseed\": [\"mseed\"],\n\t\"application/vnd.fdsn.seed\": [\"seed\", \"dataless\"],\n\t\"application/vnd.flographit\": [\"gph\"],\n\t\"application/vnd.fluxtime.clip\": [\"ftc\"],\n\t\"application/vnd.framemaker\": [\n\t\t\"fm\",\n\t\t\"frame\",\n\t\t\"maker\",\n\t\t\"book\"\n\t],\n\t\"application/vnd.frogans.fnc\": [\"fnc\"],\n\t\"application/vnd.frogans.ltf\": [\"ltf\"],\n\t\"application/vnd.fsc.weblaunch\": [\"fsc\"],\n\t\"application/vnd.fujitsu.oasys\": [\"oas\"],\n\t\"application/vnd.fujitsu.oasys2\": [\"oa2\"],\n\t\"application/vnd.fujitsu.oasys3\": [\"oa3\"],\n\t\"application/vnd.fujitsu.oasysgp\": [\"fg5\"],\n\t\"application/vnd.fujitsu.oasysprs\": [\"bh2\"],\n\t\"application/vnd.fujixerox.ddd\": [\"ddd\"],\n\t\"application/vnd.fujixerox.docuworks\": [\"xdw\"],\n\t\"application/vnd.fujixerox.docuworks.binder\": [\"xbd\"],\n\t\"application/vnd.fuzzysheet\": [\"fzs\"],\n\t\"application/vnd.genomatix.tuxedo\": [\"txd\"],\n\t\"application/vnd.geogebra.file\": [\"ggb\"],\n\t\"application/vnd.geogebra.slides\": [\"ggs\"],\n\t\"application/vnd.geogebra.tool\": [\"ggt\"],\n\t\"application/vnd.geometry-explorer\": [\"gex\", \"gre\"],\n\t\"application/vnd.geonext\": [\"gxt\"],\n\t\"application/vnd.geoplan\": [\"g2w\"],\n\t\"application/vnd.geospace\": [\"g3w\"],\n\t\"application/vnd.gmx\": [\"gmx\"],\n\t\"application/vnd.google-apps.document\": [\"gdoc\"],\n\t\"application/vnd.google-apps.drawing\": [\"gdraw\"],\n\t\"application/vnd.google-apps.form\": [\"gform\"],\n\t\"application/vnd.google-apps.jam\": [\"gjam\"],\n\t\"application/vnd.google-apps.map\": [\"gmap\"],\n\t\"application/vnd.google-apps.presentation\": [\"gslides\"],\n\t\"application/vnd.google-apps.script\": [\"gscript\"],\n\t\"application/vnd.google-apps.site\": [\"gsite\"],\n\t\"application/vnd.google-apps.spreadsheet\": [\"gsheet\"],\n\t\"application/vnd.google-earth.kml+xml\": [\"kml\"],\n\t\"application/vnd.google-earth.kmz\": [\"kmz\"],\n\t\"application/vnd.gov.sk.xmldatacontainer+xml\": [\"xdcf\"],\n\t\"application/vnd.grafeq\": [\"gqf\", \"gqs\"],\n\t\"application/vnd.groove-account\": [\"gac\"],\n\t\"application/vnd.groove-help\": [\"ghf\"],\n\t\"application/vnd.groove-identity-message\": [\"gim\"],\n\t\"application/vnd.groove-injector\": [\"grv\"],\n\t\"application/vnd.groove-tool-message\": [\"gtm\"],\n\t\"application/vnd.groove-tool-template\": [\"tpl\"],\n\t\"application/vnd.groove-vcard\": [\"vcg\"],\n\t\"application/vnd.hal+xml\": [\"hal\"],\n\t\"application/vnd.handheld-entertainment+xml\": [\"zmm\"],\n\t\"application/vnd.hbci\": [\"hbci\"],\n\t\"application/vnd.hhe.lesson-player\": [\"les\"],\n\t\"application/vnd.hp-hpgl\": [\"hpgl\"],\n\t\"application/vnd.hp-hpid\": [\"hpid\"],\n\t\"application/vnd.hp-hps\": [\"hps\"],\n\t\"application/vnd.hp-jlyt\": [\"jlt\"],\n\t\"application/vnd.hp-pcl\": [\"pcl\"],\n\t\"application/vnd.hp-pclxl\": [\"pclxl\"],\n\t\"application/vnd.hydrostatix.sof-data\": [\"sfd-hdstx\"],\n\t\"application/vnd.ibm.minipay\": [\"mpy\"],\n\t\"application/vnd.ibm.modcap\": [\n\t\t\"afp\",\n\t\t\"listafp\",\n\t\t\"list3820\"\n\t],\n\t\"application/vnd.ibm.rights-management\": [\"irm\"],\n\t\"application/vnd.ibm.secure-container\": [\"sc\"],\n\t\"application/vnd.iccprofile\": [\"icc\", \"icm\"],\n\t\"application/vnd.igloader\": [\"igl\"],\n\t\"application/vnd.immervision-ivp\": [\"ivp\"],\n\t\"application/vnd.immervision-ivu\": [\"ivu\"],\n\t\"application/vnd.insors.igm\": [\"igm\"],\n\t\"application/vnd.intercon.formnet\": [\"xpw\", \"xpx\"],\n\t\"application/vnd.intergeo\": [\"i2g\"],\n\t\"application/vnd.intu.qbo\": [\"qbo\"],\n\t\"application/vnd.intu.qfx\": [\"qfx\"],\n\t\"application/vnd.ipunplugged.rcprofile\": [\"rcprofile\"],\n\t\"application/vnd.irepository.package+xml\": [\"irp\"],\n\t\"application/vnd.is-xpr\": [\"xpr\"],\n\t\"application/vnd.isac.fcs\": [\"fcs\"],\n\t\"application/vnd.jam\": [\"jam\"],\n\t\"application/vnd.jcp.javame.midlet-rms\": [\"rms\"],\n\t\"application/vnd.jisp\": [\"jisp\"],\n\t\"application/vnd.joost.joda-archive\": [\"joda\"],\n\t\"application/vnd.kahootz\": [\"ktz\", \"ktr\"],\n\t\"application/vnd.kde.karbon\": [\"karbon\"],\n\t\"application/vnd.kde.kchart\": [\"chrt\"],\n\t\"application/vnd.kde.kformula\": [\"kfo\"],\n\t\"application/vnd.kde.kivio\": [\"flw\"],\n\t\"application/vnd.kde.kontour\": [\"kon\"],\n\t\"application/vnd.kde.kpresenter\": [\"kpr\", \"kpt\"],\n\t\"application/vnd.kde.kspread\": [\"ksp\"],\n\t\"application/vnd.kde.kword\": [\"kwd\", \"kwt\"],\n\t\"application/vnd.kenameaapp\": [\"htke\"],\n\t\"application/vnd.kidspiration\": [\"kia\"],\n\t\"application/vnd.kinar\": [\"kne\", \"knp\"],\n\t\"application/vnd.koan\": [\n\t\t\"skp\",\n\t\t\"skd\",\n\t\t\"skt\",\n\t\t\"skm\"\n\t],\n\t\"application/vnd.kodak-descriptor\": [\"sse\"],\n\t\"application/vnd.las.las+xml\": [\"lasxml\"],\n\t\"application/vnd.llamagraphics.life-balance.desktop\": [\"lbd\"],\n\t\"application/vnd.llamagraphics.life-balance.exchange+xml\": [\"lbe\"],\n\t\"application/vnd.lotus-1-2-3\": [\"123\"],\n\t\"application/vnd.lotus-approach\": [\"apr\"],\n\t\"application/vnd.lotus-freelance\": [\"pre\"],\n\t\"application/vnd.lotus-notes\": [\"nsf\"],\n\t\"application/vnd.lotus-organizer\": [\"org\"],\n\t\"application/vnd.lotus-screencam\": [\"scm\"],\n\t\"application/vnd.lotus-wordpro\": [\"lwp\"],\n\t\"application/vnd.macports.portpkg\": [\"portpkg\"],\n\t\"application/vnd.mapbox-vector-tile\": [\"mvt\"],\n\t\"application/vnd.mcd\": [\"mcd\"],\n\t\"application/vnd.medcalcdata\": [\"mc1\"],\n\t\"application/vnd.mediastation.cdkey\": [\"cdkey\"],\n\t\"application/vnd.mfer\": [\"mwf\"],\n\t\"application/vnd.mfmp\": [\"mfm\"],\n\t\"application/vnd.micrografx.flo\": [\"flo\"],\n\t\"application/vnd.micrografx.igx\": [\"igx\"],\n\t\"application/vnd.mif\": [\"mif\"],\n\t\"application/vnd.mobius.daf\": [\"daf\"],\n\t\"application/vnd.mobius.dis\": [\"dis\"],\n\t\"application/vnd.mobius.mbk\": [\"mbk\"],\n\t\"application/vnd.mobius.mqy\": [\"mqy\"],\n\t\"application/vnd.mobius.msl\": [\"msl\"],\n\t\"application/vnd.mobius.plc\": [\"plc\"],\n\t\"application/vnd.mobius.txf\": [\"txf\"],\n\t\"application/vnd.mophun.application\": [\"mpn\"],\n\t\"application/vnd.mophun.certificate\": [\"mpc\"],\n\t\"application/vnd.mozilla.xul+xml\": [\"xul\"],\n\t\"application/vnd.ms-artgalry\": [\"cil\"],\n\t\"application/vnd.ms-cab-compressed\": [\"cab\"],\n\t\"application/vnd.ms-excel\": [\n\t\t\"xls\",\n\t\t\"xlm\",\n\t\t\"xla\",\n\t\t\"xlc\",\n\t\t\"xlt\",\n\t\t\"xlw\"\n\t],\n\t\"application/vnd.ms-excel.addin.macroenabled.12\": [\"xlam\"],\n\t\"application/vnd.ms-excel.sheet.binary.macroenabled.12\": [\"xlsb\"],\n\t\"application/vnd.ms-excel.sheet.macroenabled.12\": [\"xlsm\"],\n\t\"application/vnd.ms-excel.template.macroenabled.12\": [\"xltm\"],\n\t\"application/vnd.ms-fontobject\": [\"eot\"],\n\t\"application/vnd.ms-htmlhelp\": [\"chm\"],\n\t\"application/vnd.ms-ims\": [\"ims\"],\n\t\"application/vnd.ms-lrm\": [\"lrm\"],\n\t\"application/vnd.ms-officetheme\": [\"thmx\"],\n\t\"application/vnd.ms-outlook\": [\"msg\"],\n\t\"application/vnd.ms-pki.seccat\": [\"cat\"],\n\t\"application/vnd.ms-pki.stl\": [\"*stl\"],\n\t\"application/vnd.ms-powerpoint\": [\n\t\t\"ppt\",\n\t\t\"pps\",\n\t\t\"pot\"\n\t],\n\t\"application/vnd.ms-powerpoint.addin.macroenabled.12\": [\"ppam\"],\n\t\"application/vnd.ms-powerpoint.presentation.macroenabled.12\": [\"pptm\"],\n\t\"application/vnd.ms-powerpoint.slide.macroenabled.12\": [\"sldm\"],\n\t\"application/vnd.ms-powerpoint.slideshow.macroenabled.12\": [\"ppsm\"],\n\t\"application/vnd.ms-powerpoint.template.macroenabled.12\": [\"potm\"],\n\t\"application/vnd.ms-project\": [\"*mpp\", \"mpt\"],\n\t\"application/vnd.ms-visio.viewer\": [\"vdx\"],\n\t\"application/vnd.ms-word.document.macroenabled.12\": [\"docm\"],\n\t\"application/vnd.ms-word.template.macroenabled.12\": [\"dotm\"],\n\t\"application/vnd.ms-works\": [\n\t\t\"wps\",\n\t\t\"wks\",\n\t\t\"wcm\",\n\t\t\"wdb\"\n\t],\n\t\"application/vnd.ms-wpl\": [\"wpl\"],\n\t\"application/vnd.ms-xpsdocument\": [\"xps\"],\n\t\"application/vnd.mseq\": [\"mseq\"],\n\t\"application/vnd.musician\": [\"mus\"],\n\t\"application/vnd.muvee.style\": [\"msty\"],\n\t\"application/vnd.mynfc\": [\"taglet\"],\n\t\"application/vnd.nato.bindingdataobject+xml\": [\"bdo\"],\n\t\"application/vnd.neurolanguage.nlu\": [\"nlu\"],\n\t\"application/vnd.nitf\": [\"ntf\", \"nitf\"],\n\t\"application/vnd.noblenet-directory\": [\"nnd\"],\n\t\"application/vnd.noblenet-sealer\": [\"nns\"],\n\t\"application/vnd.noblenet-web\": [\"nnw\"],\n\t\"application/vnd.nokia.n-gage.ac+xml\": [\"*ac\"],\n\t\"application/vnd.nokia.n-gage.data\": [\"ngdat\"],\n\t\"application/vnd.nokia.n-gage.symbian.install\": [\"n-gage\"],\n\t\"application/vnd.nokia.radio-preset\": [\"rpst\"],\n\t\"application/vnd.nokia.radio-presets\": [\"rpss\"],\n\t\"application/vnd.novadigm.edm\": [\"edm\"],\n\t\"application/vnd.novadigm.edx\": [\"edx\"],\n\t\"application/vnd.novadigm.ext\": [\"ext\"],\n\t\"application/vnd.oasis.opendocument.chart\": [\"odc\"],\n\t\"application/vnd.oasis.opendocument.chart-template\": [\"otc\"],\n\t\"application/vnd.oasis.opendocument.database\": [\"odb\"],\n\t\"application/vnd.oasis.opendocument.formula\": [\"odf\"],\n\t\"application/vnd.oasis.opendocument.formula-template\": [\"odft\"],\n\t\"application/vnd.oasis.opendocument.graphics\": [\"odg\"],\n\t\"application/vnd.oasis.opendocument.graphics-template\": [\"otg\"],\n\t\"application/vnd.oasis.opendocument.image\": [\"odi\"],\n\t\"application/vnd.oasis.opendocument.image-template\": [\"oti\"],\n\t\"application/vnd.oasis.opendocument.presentation\": [\"odp\"],\n\t\"application/vnd.oasis.opendocument.presentation-template\": [\"otp\"],\n\t\"application/vnd.oasis.opendocument.spreadsheet\": [\"ods\"],\n\t\"application/vnd.oasis.opendocument.spreadsheet-template\": [\"ots\"],\n\t\"application/vnd.oasis.opendocument.text\": [\"odt\"],\n\t\"application/vnd.oasis.opendocument.text-master\": [\"odm\"],\n\t\"application/vnd.oasis.opendocument.text-template\": [\"ott\"],\n\t\"application/vnd.oasis.opendocument.text-web\": [\"oth\"],\n\t\"application/vnd.olpc-sugar\": [\"xo\"],\n\t\"application/vnd.oma.dd2+xml\": [\"dd2\"],\n\t\"application/vnd.openblox.game+xml\": [\"obgx\"],\n\t\"application/vnd.openofficeorg.extension\": [\"oxt\"],\n\t\"application/vnd.openstreetmap.data+xml\": [\"osm\"],\n\t\"application/vnd.openxmlformats-officedocument.presentationml.presentation\": [\"pptx\"],\n\t\"application/vnd.openxmlformats-officedocument.presentationml.slide\": [\"sldx\"],\n\t\"application/vnd.openxmlformats-officedocument.presentationml.slideshow\": [\"ppsx\"],\n\t\"application/vnd.openxmlformats-officedocument.presentationml.template\": [\"potx\"],\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\": [\"xlsx\"],\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.template\": [\"xltx\"],\n\t\"application/vnd.openxmlformats-officedocument.wordprocessingml.document\": [\"docx\"],\n\t\"application/vnd.openxmlformats-officedocument.wordprocessingml.template\": [\"dotx\"],\n\t\"application/vnd.osgeo.mapguide.package\": [\"mgp\"],\n\t\"application/vnd.osgi.dp\": [\"dp\"],\n\t\"application/vnd.osgi.subsystem\": [\"esa\"],\n\t\"application/vnd.palm\": [\n\t\t\"pdb\",\n\t\t\"pqa\",\n\t\t\"oprc\"\n\t],\n\t\"application/vnd.pawaafile\": [\"paw\"],\n\t\"application/vnd.pg.format\": [\"str\"],\n\t\"application/vnd.pg.osasli\": [\"ei6\"],\n\t\"application/vnd.picsel\": [\"efif\"],\n\t\"application/vnd.pmi.widget\": [\"wg\"],\n\t\"application/vnd.pocketlearn\": [\"plf\"],\n\t\"application/vnd.powerbuilder6\": [\"pbd\"],\n\t\"application/vnd.previewsystems.box\": [\"box\"],\n\t\"application/vnd.procrate.brushset\": [\"brushset\"],\n\t\"application/vnd.procreate.brush\": [\"brush\"],\n\t\"application/vnd.procreate.dream\": [\"drm\"],\n\t\"application/vnd.proteus.magazine\": [\"mgz\"],\n\t\"application/vnd.publishare-delta-tree\": [\"qps\"],\n\t\"application/vnd.pvi.ptid1\": [\"ptid\"],\n\t\"application/vnd.pwg-xhtml-print+xml\": [\"xhtm\"],\n\t\"application/vnd.quark.quarkxpress\": [\n\t\t\"qxd\",\n\t\t\"qxt\",\n\t\t\"qwd\",\n\t\t\"qwt\",\n\t\t\"qxl\",\n\t\t\"qxb\"\n\t],\n\t\"application/vnd.rar\": [\"rar\"],\n\t\"application/vnd.realvnc.bed\": [\"bed\"],\n\t\"application/vnd.recordare.musicxml\": [\"mxl\"],\n\t\"application/vnd.recordare.musicxml+xml\": [\"musicxml\"],\n\t\"application/vnd.rig.cryptonote\": [\"cryptonote\"],\n\t\"application/vnd.rim.cod\": [\"cod\"],\n\t\"application/vnd.rn-realmedia\": [\"rm\"],\n\t\"application/vnd.rn-realmedia-vbr\": [\"rmvb\"],\n\t\"application/vnd.route66.link66+xml\": [\"link66\"],\n\t\"application/vnd.sailingtracker.track\": [\"st\"],\n\t\"application/vnd.seemail\": [\"see\"],\n\t\"application/vnd.sema\": [\"sema\"],\n\t\"application/vnd.semd\": [\"semd\"],\n\t\"application/vnd.semf\": [\"semf\"],\n\t\"application/vnd.shana.informed.formdata\": [\"ifm\"],\n\t\"application/vnd.shana.informed.formtemplate\": [\"itp\"],\n\t\"application/vnd.shana.informed.interchange\": [\"iif\"],\n\t\"application/vnd.shana.informed.package\": [\"ipk\"],\n\t\"application/vnd.simtech-mindmapper\": [\"twd\", \"twds\"],\n\t\"application/vnd.smaf\": [\"mmf\"],\n\t\"application/vnd.smart.teacher\": [\"teacher\"],\n\t\"application/vnd.software602.filler.form+xml\": [\"fo\"],\n\t\"application/vnd.solent.sdkm+xml\": [\"sdkm\", \"sdkd\"],\n\t\"application/vnd.spotfire.dxp\": [\"dxp\"],\n\t\"application/vnd.spotfire.sfs\": [\"sfs\"],\n\t\"application/vnd.stardivision.calc\": [\"sdc\"],\n\t\"application/vnd.stardivision.draw\": [\"sda\"],\n\t\"application/vnd.stardivision.impress\": [\"sdd\"],\n\t\"application/vnd.stardivision.math\": [\"smf\"],\n\t\"application/vnd.stardivision.writer\": [\"sdw\", \"vor\"],\n\t\"application/vnd.stardivision.writer-global\": [\"sgl\"],\n\t\"application/vnd.stepmania.package\": [\"smzip\"],\n\t\"application/vnd.stepmania.stepchart\": [\"sm\"],\n\t\"application/vnd.sun.wadl+xml\": [\"wadl\"],\n\t\"application/vnd.sun.xml.calc\": [\"sxc\"],\n\t\"application/vnd.sun.xml.calc.template\": [\"stc\"],\n\t\"application/vnd.sun.xml.draw\": [\"sxd\"],\n\t\"application/vnd.sun.xml.draw.template\": [\"std\"],\n\t\"application/vnd.sun.xml.impress\": [\"sxi\"],\n\t\"application/vnd.sun.xml.impress.template\": [\"sti\"],\n\t\"application/vnd.sun.xml.math\": [\"sxm\"],\n\t\"application/vnd.sun.xml.writer\": [\"sxw\"],\n\t\"application/vnd.sun.xml.writer.global\": [\"sxg\"],\n\t\"application/vnd.sun.xml.writer.template\": [\"stw\"],\n\t\"application/vnd.sus-calendar\": [\"sus\", \"susp\"],\n\t\"application/vnd.svd\": [\"svd\"],\n\t\"application/vnd.symbian.install\": [\"sis\", \"sisx\"],\n\t\"application/vnd.syncml+xml\": [\"xsm\"],\n\t\"application/vnd.syncml.dm+wbxml\": [\"bdm\"],\n\t\"application/vnd.syncml.dm+xml\": [\"xdm\"],\n\t\"application/vnd.syncml.dmddf+xml\": [\"ddf\"],\n\t\"application/vnd.tao.intent-module-archive\": [\"tao\"],\n\t\"application/vnd.tcpdump.pcap\": [\n\t\t\"pcap\",\n\t\t\"cap\",\n\t\t\"dmp\"\n\t],\n\t\"application/vnd.tmobile-livetv\": [\"tmo\"],\n\t\"application/vnd.trid.tpt\": [\"tpt\"],\n\t\"application/vnd.triscape.mxs\": [\"mxs\"],\n\t\"application/vnd.trueapp\": [\"tra\"],\n\t\"application/vnd.ufdl\": [\"ufd\", \"ufdl\"],\n\t\"application/vnd.uiq.theme\": [\"utz\"],\n\t\"application/vnd.umajin\": [\"umj\"],\n\t\"application/vnd.unity\": [\"unityweb\"],\n\t\"application/vnd.uoml+xml\": [\"uoml\", \"uo\"],\n\t\"application/vnd.vcx\": [\"vcx\"],\n\t\"application/vnd.visio\": [\n\t\t\"vsd\",\n\t\t\"vst\",\n\t\t\"vss\",\n\t\t\"vsw\",\n\t\t\"vsdx\",\n\t\t\"vtx\"\n\t],\n\t\"application/vnd.visionary\": [\"vis\"],\n\t\"application/vnd.vsf\": [\"vsf\"],\n\t\"application/vnd.wap.wbxml\": [\"wbxml\"],\n\t\"application/vnd.wap.wmlc\": [\"wmlc\"],\n\t\"application/vnd.wap.wmlscriptc\": [\"wmlsc\"],\n\t\"application/vnd.webturbo\": [\"wtb\"],\n\t\"application/vnd.wolfram.player\": [\"nbp\"],\n\t\"application/vnd.wordperfect\": [\"wpd\"],\n\t\"application/vnd.wqd\": [\"wqd\"],\n\t\"application/vnd.wt.stf\": [\"stf\"],\n\t\"application/vnd.xara\": [\"xar\"],\n\t\"application/vnd.xfdl\": [\"xfdl\"],\n\t\"application/vnd.yamaha.hv-dic\": [\"hvd\"],\n\t\"application/vnd.yamaha.hv-script\": [\"hvs\"],\n\t\"application/vnd.yamaha.hv-voice\": [\"hvp\"],\n\t\"application/vnd.yamaha.openscoreformat\": [\"osf\"],\n\t\"application/vnd.yamaha.openscoreformat.osfpvg+xml\": [\"osfpvg\"],\n\t\"application/vnd.yamaha.smaf-audio\": [\"saf\"],\n\t\"application/vnd.yamaha.smaf-phrase\": [\"spf\"],\n\t\"application/vnd.yellowriver-custom-menu\": [\"cmp\"],\n\t\"application/vnd.zul\": [\"zir\", \"zirz\"],\n\t\"application/vnd.zzazz.deck+xml\": [\"zaz\"],\n\t\"application/x-7z-compressed\": [\"7z\"],\n\t\"application/x-abiword\": [\"abw\"],\n\t\"application/x-ace-compressed\": [\"ace\"],\n\t\"application/x-apple-diskimage\": [\"*dmg\"],\n\t\"application/x-arj\": [\"arj\"],\n\t\"application/x-authorware-bin\": [\n\t\t\"aab\",\n\t\t\"x32\",\n\t\t\"u32\",\n\t\t\"vox\"\n\t],\n\t\"application/x-authorware-map\": [\"aam\"],\n\t\"application/x-authorware-seg\": [\"aas\"],\n\t\"application/x-bcpio\": [\"bcpio\"],\n\t\"application/x-bdoc\": [\"*bdoc\"],\n\t\"application/x-bittorrent\": [\"torrent\"],\n\t\"application/x-blender\": [\"blend\"],\n\t\"application/x-blorb\": [\"blb\", \"blorb\"],\n\t\"application/x-bzip\": [\"bz\"],\n\t\"application/x-bzip2\": [\"bz2\", \"boz\"],\n\t\"application/x-cbr\": [\n\t\t\"cbr\",\n\t\t\"cba\",\n\t\t\"cbt\",\n\t\t\"cbz\",\n\t\t\"cb7\"\n\t],\n\t\"application/x-cdlink\": [\"vcd\"],\n\t\"application/x-cfs-compressed\": [\"cfs\"],\n\t\"application/x-chat\": [\"chat\"],\n\t\"application/x-chess-pgn\": [\"pgn\"],\n\t\"application/x-chrome-extension\": [\"crx\"],\n\t\"application/x-cocoa\": [\"cco\"],\n\t\"application/x-compressed\": [\"*rar\"],\n\t\"application/x-conference\": [\"nsc\"],\n\t\"application/x-cpio\": [\"cpio\"],\n\t\"application/x-csh\": [\"csh\"],\n\t\"application/x-debian-package\": [\"*deb\", \"udeb\"],\n\t\"application/x-dgc-compressed\": [\"dgc\"],\n\t\"application/x-director\": [\n\t\t\"dir\",\n\t\t\"dcr\",\n\t\t\"dxr\",\n\t\t\"cst\",\n\t\t\"cct\",\n\t\t\"cxt\",\n\t\t\"w3d\",\n\t\t\"fgd\",\n\t\t\"swa\"\n\t],\n\t\"application/x-doom\": [\"wad\"],\n\t\"application/x-dtbncx+xml\": [\"ncx\"],\n\t\"application/x-dtbook+xml\": [\"dtb\"],\n\t\"application/x-dtbresource+xml\": [\"res\"],\n\t\"application/x-dvi\": [\"dvi\"],\n\t\"application/x-envoy\": [\"evy\"],\n\t\"application/x-eva\": [\"eva\"],\n\t\"application/x-font-bdf\": [\"bdf\"],\n\t\"application/x-font-ghostscript\": [\"gsf\"],\n\t\"application/x-font-linux-psf\": [\"psf\"],\n\t\"application/x-font-pcf\": [\"pcf\"],\n\t\"application/x-font-snf\": [\"snf\"],\n\t\"application/x-font-type1\": [\n\t\t\"pfa\",\n\t\t\"pfb\",\n\t\t\"pfm\",\n\t\t\"afm\"\n\t],\n\t\"application/x-freearc\": [\"arc\"],\n\t\"application/x-futuresplash\": [\"spl\"],\n\t\"application/x-gca-compressed\": [\"gca\"],\n\t\"application/x-glulx\": [\"ulx\"],\n\t\"application/x-gnumeric\": [\"gnumeric\"],\n\t\"application/x-gramps-xml\": [\"gramps\"],\n\t\"application/x-gtar\": [\"gtar\"],\n\t\"application/x-hdf\": [\"hdf\"],\n\t\"application/x-httpd-php\": [\"php\"],\n\t\"application/x-install-instructions\": [\"install\"],\n\t\"application/x-ipynb+json\": [\"ipynb\"],\n\t\"application/x-iso9660-image\": [\"*iso\"],\n\t\"application/x-iwork-keynote-sffkey\": [\"*key\"],\n\t\"application/x-iwork-numbers-sffnumbers\": [\"*numbers\"],\n\t\"application/x-iwork-pages-sffpages\": [\"*pages\"],\n\t\"application/x-java-archive-diff\": [\"jardiff\"],\n\t\"application/x-java-jnlp-file\": [\"jnlp\"],\n\t\"application/x-keepass2\": [\"kdbx\"],\n\t\"application/x-latex\": [\"latex\"],\n\t\"application/x-lua-bytecode\": [\"luac\"],\n\t\"application/x-lzh-compressed\": [\"lzh\", \"lha\"],\n\t\"application/x-makeself\": [\"run\"],\n\t\"application/x-mie\": [\"mie\"],\n\t\"application/x-mobipocket-ebook\": [\"*prc\", \"mobi\"],\n\t\"application/x-ms-application\": [\"application\"],\n\t\"application/x-ms-shortcut\": [\"lnk\"],\n\t\"application/x-ms-wmd\": [\"wmd\"],\n\t\"application/x-ms-wmz\": [\"wmz\"],\n\t\"application/x-ms-xbap\": [\"xbap\"],\n\t\"application/x-msaccess\": [\"mdb\"],\n\t\"application/x-msbinder\": [\"obd\"],\n\t\"application/x-mscardfile\": [\"crd\"],\n\t\"application/x-msclip\": [\"clp\"],\n\t\"application/x-msdos-program\": [\"*exe\"],\n\t\"application/x-msdownload\": [\n\t\t\"*exe\",\n\t\t\"*dll\",\n\t\t\"com\",\n\t\t\"bat\",\n\t\t\"*msi\"\n\t],\n\t\"application/x-msmediaview\": [\n\t\t\"mvb\",\n\t\t\"m13\",\n\t\t\"m14\"\n\t],\n\t\"application/x-msmetafile\": [\n\t\t\"*wmf\",\n\t\t\"*wmz\",\n\t\t\"*emf\",\n\t\t\"emz\"\n\t],\n\t\"application/x-msmoney\": [\"mny\"],\n\t\"application/x-mspublisher\": [\"pub\"],\n\t\"application/x-msschedule\": [\"scd\"],\n\t\"application/x-msterminal\": [\"trm\"],\n\t\"application/x-mswrite\": [\"wri\"],\n\t\"application/x-netcdf\": [\"nc\", \"cdf\"],\n\t\"application/x-ns-proxy-autoconfig\": [\"pac\"],\n\t\"application/x-nzb\": [\"nzb\"],\n\t\"application/x-perl\": [\"pl\", \"pm\"],\n\t\"application/x-pilot\": [\"*prc\", \"*pdb\"],\n\t\"application/x-pkcs12\": [\"p12\", \"pfx\"],\n\t\"application/x-pkcs7-certificates\": [\"p7b\", \"spc\"],\n\t\"application/x-pkcs7-certreqresp\": [\"p7r\"],\n\t\"application/x-rar-compressed\": [\"*rar\"],\n\t\"application/x-redhat-package-manager\": [\"rpm\"],\n\t\"application/x-research-info-systems\": [\"ris\"],\n\t\"application/x-sea\": [\"sea\"],\n\t\"application/x-sh\": [\"sh\"],\n\t\"application/x-shar\": [\"shar\"],\n\t\"application/x-shockwave-flash\": [\"swf\"],\n\t\"application/x-silverlight-app\": [\"xap\"],\n\t\"application/x-sql\": [\"*sql\"],\n\t\"application/x-stuffit\": [\"sit\"],\n\t\"application/x-stuffitx\": [\"sitx\"],\n\t\"application/x-subrip\": [\"srt\"],\n\t\"application/x-sv4cpio\": [\"sv4cpio\"],\n\t\"application/x-sv4crc\": [\"sv4crc\"],\n\t\"application/x-t3vm-image\": [\"t3\"],\n\t\"application/x-tads\": [\"gam\"],\n\t\"application/x-tar\": [\"tar\"],\n\t\"application/x-tcl\": [\"tcl\", \"tk\"],\n\t\"application/x-tex\": [\"tex\"],\n\t\"application/x-tex-tfm\": [\"tfm\"],\n\t\"application/x-texinfo\": [\"texinfo\", \"texi\"],\n\t\"application/x-tgif\": [\"*obj\"],\n\t\"application/x-ustar\": [\"ustar\"],\n\t\"application/x-virtualbox-hdd\": [\"hdd\"],\n\t\"application/x-virtualbox-ova\": [\"ova\"],\n\t\"application/x-virtualbox-ovf\": [\"ovf\"],\n\t\"application/x-virtualbox-vbox\": [\"vbox\"],\n\t\"application/x-virtualbox-vbox-extpack\": [\"vbox-extpack\"],\n\t\"application/x-virtualbox-vdi\": [\"vdi\"],\n\t\"application/x-virtualbox-vhd\": [\"vhd\"],\n\t\"application/x-virtualbox-vmdk\": [\"vmdk\"],\n\t\"application/x-wais-source\": [\"src\"],\n\t\"application/x-web-app-manifest+json\": [\"webapp\"],\n\t\"application/x-x509-ca-cert\": [\n\t\t\"der\",\n\t\t\"crt\",\n\t\t\"pem\"\n\t],\n\t\"application/x-xfig\": [\"fig\"],\n\t\"application/x-xliff+xml\": [\"*xlf\"],\n\t\"application/x-xpinstall\": [\"xpi\"],\n\t\"application/x-xz\": [\"xz\"],\n\t\"application/x-zip-compressed\": [\"*zip\"],\n\t\"application/x-zmachine\": [\n\t\t\"z1\",\n\t\t\"z2\",\n\t\t\"z3\",\n\t\t\"z4\",\n\t\t\"z5\",\n\t\t\"z6\",\n\t\t\"z7\",\n\t\t\"z8\"\n\t],\n\t\"audio/vnd.dece.audio\": [\"uva\", \"uvva\"],\n\t\"audio/vnd.digital-winds\": [\"eol\"],\n\t\"audio/vnd.dra\": [\"dra\"],\n\t\"audio/vnd.dts\": [\"dts\"],\n\t\"audio/vnd.dts.hd\": [\"dtshd\"],\n\t\"audio/vnd.lucent.voice\": [\"lvp\"],\n\t\"audio/vnd.ms-playready.media.pya\": [\"pya\"],\n\t\"audio/vnd.nuera.ecelp4800\": [\"ecelp4800\"],\n\t\"audio/vnd.nuera.ecelp7470\": [\"ecelp7470\"],\n\t\"audio/vnd.nuera.ecelp9600\": [\"ecelp9600\"],\n\t\"audio/vnd.rip\": [\"rip\"],\n\t\"audio/x-aac\": [\"*aac\"],\n\t\"audio/x-aiff\": [\n\t\t\"aif\",\n\t\t\"aiff\",\n\t\t\"aifc\"\n\t],\n\t\"audio/x-caf\": [\"caf\"],\n\t\"audio/x-flac\": [\"flac\"],\n\t\"audio/x-m4a\": [\"*m4a\"],\n\t\"audio/x-matroska\": [\"mka\"],\n\t\"audio/x-mpegurl\": [\"m3u\"],\n\t\"audio/x-ms-wax\": [\"wax\"],\n\t\"audio/x-ms-wma\": [\"wma\"],\n\t\"audio/x-pn-realaudio\": [\"ram\", \"ra\"],\n\t\"audio/x-pn-realaudio-plugin\": [\"rmp\"],\n\t\"audio/x-realaudio\": [\"*ra\"],\n\t\"audio/x-wav\": [\"*wav\"],\n\t\"chemical/x-cdx\": [\"cdx\"],\n\t\"chemical/x-cif\": [\"cif\"],\n\t\"chemical/x-cmdf\": [\"cmdf\"],\n\t\"chemical/x-cml\": [\"cml\"],\n\t\"chemical/x-csml\": [\"csml\"],\n\t\"chemical/x-xyz\": [\"xyz\"],\n\t\"image/prs.btif\": [\"btif\", \"btf\"],\n\t\"image/prs.pti\": [\"pti\"],\n\t\"image/vnd.adobe.photoshop\": [\"psd\"],\n\t\"image/vnd.airzip.accelerator.azv\": [\"azv\"],\n\t\"image/vnd.blockfact.facti\": [\"facti\"],\n\t\"image/vnd.dece.graphic\": [\n\t\t\"uvi\",\n\t\t\"uvvi\",\n\t\t\"uvg\",\n\t\t\"uvvg\"\n\t],\n\t\"image/vnd.djvu\": [\"djvu\", \"djv\"],\n\t\"image/vnd.dvb.subtitle\": [\"*sub\"],\n\t\"image/vnd.dwg\": [\"dwg\"],\n\t\"image/vnd.dxf\": [\"dxf\"],\n\t\"image/vnd.fastbidsheet\": [\"fbs\"],\n\t\"image/vnd.fpx\": [\"fpx\"],\n\t\"image/vnd.fst\": [\"fst\"],\n\t\"image/vnd.fujixerox.edmics-mmr\": [\"mmr\"],\n\t\"image/vnd.fujixerox.edmics-rlc\": [\"rlc\"],\n\t\"image/vnd.microsoft.icon\": [\"ico\"],\n\t\"image/vnd.ms-dds\": [\"dds\"],\n\t\"image/vnd.ms-modi\": [\"mdi\"],\n\t\"image/vnd.ms-photo\": [\"wdp\"],\n\t\"image/vnd.net-fpx\": [\"npx\"],\n\t\"image/vnd.pco.b16\": [\"b16\"],\n\t\"image/vnd.tencent.tap\": [\"tap\"],\n\t\"image/vnd.valve.source.texture\": [\"vtf\"],\n\t\"image/vnd.wap.wbmp\": [\"wbmp\"],\n\t\"image/vnd.xiff\": [\"xif\"],\n\t\"image/vnd.zbrush.pcx\": [\"pcx\"],\n\t\"image/x-3ds\": [\"3ds\"],\n\t\"image/x-adobe-dng\": [\"dng\"],\n\t\"image/x-cmu-raster\": [\"ras\"],\n\t\"image/x-cmx\": [\"cmx\"],\n\t\"image/x-freehand\": [\n\t\t\"fh\",\n\t\t\"fhc\",\n\t\t\"fh4\",\n\t\t\"fh5\",\n\t\t\"fh7\"\n\t],\n\t\"image/x-icon\": [\"*ico\"],\n\t\"image/x-jng\": [\"jng\"],\n\t\"image/x-mrsid-image\": [\"sid\"],\n\t\"image/x-ms-bmp\": [\"*bmp\"],\n\t\"image/x-pcx\": [\"*pcx\"],\n\t\"image/x-pict\": [\"pic\", \"pct\"],\n\t\"image/x-portable-anymap\": [\"pnm\"],\n\t\"image/x-portable-bitmap\": [\"pbm\"],\n\t\"image/x-portable-graymap\": [\"pgm\"],\n\t\"image/x-portable-pixmap\": [\"ppm\"],\n\t\"image/x-rgb\": [\"rgb\"],\n\t\"image/x-tga\": [\"tga\"],\n\t\"image/x-xbitmap\": [\"xbm\"],\n\t\"image/x-xpixmap\": [\"xpm\"],\n\t\"image/x-xwindowdump\": [\"xwd\"],\n\t\"message/vnd.wfa.wsc\": [\"wsc\"],\n\t\"model/vnd.bary\": [\"bary\"],\n\t\"model/vnd.cld\": [\"cld\"],\n\t\"model/vnd.collada+xml\": [\"dae\"],\n\t\"model/vnd.dwf\": [\"dwf\"],\n\t\"model/vnd.gdl\": [\"gdl\"],\n\t\"model/vnd.gtw\": [\"gtw\"],\n\t\"model/vnd.mts\": [\"*mts\"],\n\t\"model/vnd.opengex\": [\"ogex\"],\n\t\"model/vnd.parasolid.transmit.binary\": [\"x_b\"],\n\t\"model/vnd.parasolid.transmit.text\": [\"x_t\"],\n\t\"model/vnd.pytha.pyox\": [\"pyo\", \"pyox\"],\n\t\"model/vnd.sap.vds\": [\"vds\"],\n\t\"model/vnd.usda\": [\"usda\"],\n\t\"model/vnd.usdz+zip\": [\"usdz\"],\n\t\"model/vnd.valve.source.compiled-map\": [\"bsp\"],\n\t\"model/vnd.vtu\": [\"vtu\"],\n\t\"text/prs.lines.tag\": [\"dsc\"],\n\t\"text/vnd.curl\": [\"curl\"],\n\t\"text/vnd.curl.dcurl\": [\"dcurl\"],\n\t\"text/vnd.curl.mcurl\": [\"mcurl\"],\n\t\"text/vnd.curl.scurl\": [\"scurl\"],\n\t\"text/vnd.dvb.subtitle\": [\"sub\"],\n\t\"text/vnd.familysearch.gedcom\": [\"ged\"],\n\t\"text/vnd.fly\": [\"fly\"],\n\t\"text/vnd.fmi.flexstor\": [\"flx\"],\n\t\"text/vnd.graphviz\": [\"gv\"],\n\t\"text/vnd.in3d.3dml\": [\"3dml\"],\n\t\"text/vnd.in3d.spot\": [\"spot\"],\n\t\"text/vnd.sun.j2me.app-descriptor\": [\"jad\"],\n\t\"text/vnd.wap.wml\": [\"wml\"],\n\t\"text/vnd.wap.wmlscript\": [\"wmls\"],\n\t\"text/x-asm\": [\"s\", \"asm\"],\n\t\"text/x-c\": [\n\t\t\"c\",\n\t\t\"cc\",\n\t\t\"cxx\",\n\t\t\"cpp\",\n\t\t\"h\",\n\t\t\"hh\",\n\t\t\"dic\"\n\t],\n\t\"text/x-component\": [\"htc\"],\n\t\"text/x-fortran\": [\n\t\t\"f\",\n\t\t\"for\",\n\t\t\"f77\",\n\t\t\"f90\"\n\t],\n\t\"text/x-handlebars-template\": [\"hbs\"],\n\t\"text/x-java-source\": [\"java\"],\n\t\"text/x-lua\": [\"lua\"],\n\t\"text/x-markdown\": [\"mkd\"],\n\t\"text/x-nfo\": [\"nfo\"],\n\t\"text/x-opml\": [\"opml\"],\n\t\"text/x-org\": [\"*org\"],\n\t\"text/x-pascal\": [\"p\", \"pas\"],\n\t\"text/x-processing\": [\"pde\"],\n\t\"text/x-sass\": [\"sass\"],\n\t\"text/x-scss\": [\"scss\"],\n\t\"text/x-setext\": [\"etx\"],\n\t\"text/x-sfv\": [\"sfv\"],\n\t\"text/x-suse-ymp\": [\"ymp\"],\n\t\"text/x-uuencode\": [\"uu\"],\n\t\"text/x-vcalendar\": [\"vcs\"],\n\t\"text/x-vcard\": [\"vcf\"],\n\t\"video/vnd.dece.hd\": [\"uvh\", \"uvvh\"],\n\t\"video/vnd.dece.mobile\": [\"uvm\", \"uvvm\"],\n\t\"video/vnd.dece.pd\": [\"uvp\", \"uvvp\"],\n\t\"video/vnd.dece.sd\": [\"uvs\", \"uvvs\"],\n\t\"video/vnd.dece.video\": [\"uvv\", \"uvvv\"],\n\t\"video/vnd.dvb.file\": [\"dvb\"],\n\t\"video/vnd.fvt\": [\"fvt\"],\n\t\"video/vnd.mpegurl\": [\"mxu\", \"m4u\"],\n\t\"video/vnd.ms-playready.media.pyv\": [\"pyv\"],\n\t\"video/vnd.uvvu.mp4\": [\"uvu\", \"uvvu\"],\n\t\"video/vnd.vivo\": [\"viv\"],\n\t\"video/x-f4v\": [\"f4v\"],\n\t\"video/x-fli\": [\"fli\"],\n\t\"video/x-flv\": [\"flv\"],\n\t\"video/x-m4v\": [\"m4v\"],\n\t\"video/x-matroska\": [\n\t\t\"mkv\",\n\t\t\"mk3d\",\n\t\t\"mks\"\n\t],\n\t\"video/x-mng\": [\"mng\"],\n\t\"video/x-ms-asf\": [\"asf\", \"asx\"],\n\t\"video/x-ms-vob\": [\"vob\"],\n\t\"video/x-ms-wm\": [\"wm\"],\n\t\"video/x-ms-wmv\": [\"wmv\"],\n\t\"video/x-ms-wmx\": [\"wmx\"],\n\t\"video/x-ms-wvx\": [\"wvx\"],\n\t\"video/x-msvideo\": [\"avi\"],\n\t\"video/x-sgi-movie\": [\"movie\"],\n\t\"video/x-smv\": [\"smv\"],\n\t\"x-conference/x-cooltalk\": [\"ice\"]\n};\nObject.freeze(types$1);\n// ../../node_modules/.pnpm/mime@4.1.2/node_modules/mime/dist/types/standard.js\nconst types = {\n\t\"application/andrew-inset\": [\"ez\"],\n\t\"application/appinstaller\": [\"appinstaller\"],\n\t\"application/applixware\": [\"aw\"],\n\t\"application/appx\": [\"appx\"],\n\t\"application/appxbundle\": [\"appxbundle\"],\n\t\"application/atom+xml\": [\"atom\"],\n\t\"application/atomcat+xml\": [\"atomcat\"],\n\t\"application/atomdeleted+xml\": [\"atomdeleted\"],\n\t\"application/atomsvc+xml\": [\"atomsvc\"],\n\t\"application/atsc-dwd+xml\": [\"dwd\"],\n\t\"application/atsc-held+xml\": [\"held\"],\n\t\"application/atsc-rsat+xml\": [\"rsat\"],\n\t\"application/automationml-aml+xml\": [\"aml\"],\n\t\"application/automationml-amlx+zip\": [\"amlx\"],\n\t\"application/bdoc\": [\"bdoc\"],\n\t\"application/calendar+xml\": [\"xcs\"],\n\t\"application/ccxml+xml\": [\"ccxml\"],\n\t\"application/cdfx+xml\": [\"cdfx\"],\n\t\"application/cdmi-capability\": [\"cdmia\"],\n\t\"application/cdmi-container\": [\"cdmic\"],\n\t\"application/cdmi-domain\": [\"cdmid\"],\n\t\"application/cdmi-object\": [\"cdmio\"],\n\t\"application/cdmi-queue\": [\"cdmiq\"],\n\t\"application/cpl+xml\": [\"cpl\"],\n\t\"application/cu-seeme\": [\"cu\"],\n\t\"application/cwl\": [\"cwl\"],\n\t\"application/dash+xml\": [\"mpd\"],\n\t\"application/dash-patch+xml\": [\"mpp\"],\n\t\"application/davmount+xml\": [\"davmount\"],\n\t\"application/dicom\": [\"dcm\"],\n\t\"application/docbook+xml\": [\"dbk\"],\n\t\"application/dssc+der\": [\"dssc\"],\n\t\"application/dssc+xml\": [\"xdssc\"],\n\t\"application/ecmascript\": [\"ecma\"],\n\t\"application/emma+xml\": [\"emma\"],\n\t\"application/emotionml+xml\": [\"emotionml\"],\n\t\"application/epub+zip\": [\"epub\"],\n\t\"application/exi\": [\"exi\"],\n\t\"application/express\": [\"exp\"],\n\t\"application/fdf\": [\"fdf\"],\n\t\"application/fdt+xml\": [\"fdt\"],\n\t\"application/font-tdpfr\": [\"pfr\"],\n\t\"application/geo+json\": [\"geojson\"],\n\t\"application/gml+xml\": [\"gml\"],\n\t\"application/gpx+xml\": [\"gpx\"],\n\t\"application/gxf\": [\"gxf\"],\n\t\"application/gzip\": [\"gz\"],\n\t\"application/hjson\": [\"hjson\"],\n\t\"application/hyperstudio\": [\"stk\"],\n\t\"application/inkml+xml\": [\"ink\", \"inkml\"],\n\t\"application/ipfix\": [\"ipfix\"],\n\t\"application/its+xml\": [\"its\"],\n\t\"application/java-archive\": [\n\t\t\"jar\",\n\t\t\"war\",\n\t\t\"ear\"\n\t],\n\t\"application/java-serialized-object\": [\"ser\"],\n\t\"application/java-vm\": [\"class\"],\n\t\"application/javascript\": [\"*js\"],\n\t\"application/json\": [\"json\", \"map\"],\n\t\"application/json5\": [\"json5\"],\n\t\"application/jsonml+json\": [\"jsonml\"],\n\t\"application/ld+json\": [\"jsonld\"],\n\t\"application/lgr+xml\": [\"lgr\"],\n\t\"application/lost+xml\": [\"lostxml\"],\n\t\"application/mac-binhex40\": [\"hqx\"],\n\t\"application/mac-compactpro\": [\"cpt\"],\n\t\"application/mads+xml\": [\"mads\"],\n\t\"application/manifest+json\": [\"webmanifest\"],\n\t\"application/marc\": [\"mrc\"],\n\t\"application/marcxml+xml\": [\"mrcx\"],\n\t\"application/mathematica\": [\n\t\t\"ma\",\n\t\t\"nb\",\n\t\t\"mb\"\n\t],\n\t\"application/mathml+xml\": [\"mathml\"],\n\t\"application/mbox\": [\"mbox\"],\n\t\"application/media-policy-dataset+xml\": [\"mpf\"],\n\t\"application/mediaservercontrol+xml\": [\"mscml\"],\n\t\"application/metalink+xml\": [\"metalink\"],\n\t\"application/metalink4+xml\": [\"meta4\"],\n\t\"application/mets+xml\": [\"mets\"],\n\t\"application/mmt-aei+xml\": [\"maei\"],\n\t\"application/mmt-usd+xml\": [\"musd\"],\n\t\"application/mods+xml\": [\"mods\"],\n\t\"application/mp21\": [\"m21\", \"mp21\"],\n\t\"application/mp4\": [\n\t\t\"*mp4\",\n\t\t\"*mpg4\",\n\t\t\"mp4s\",\n\t\t\"m4p\"\n\t],\n\t\"application/msix\": [\"msix\"],\n\t\"application/msixbundle\": [\"msixbundle\"],\n\t\"application/msword\": [\"doc\", \"dot\"],\n\t\"application/mxf\": [\"mxf\"],\n\t\"application/n-quads\": [\"nq\"],\n\t\"application/n-triples\": [\"nt\"],\n\t\"application/node\": [\"cjs\"],\n\t\"application/octet-stream\": [\n\t\t\"bin\",\n\t\t\"dms\",\n\t\t\"lrf\",\n\t\t\"mar\",\n\t\t\"so\",\n\t\t\"dist\",\n\t\t\"distz\",\n\t\t\"pkg\",\n\t\t\"bpk\",\n\t\t\"dump\",\n\t\t\"elc\",\n\t\t\"deploy\",\n\t\t\"exe\",\n\t\t\"dll\",\n\t\t\"deb\",\n\t\t\"dmg\",\n\t\t\"iso\",\n\t\t\"img\",\n\t\t\"msi\",\n\t\t\"msp\",\n\t\t\"msm\",\n\t\t\"buffer\"\n\t],\n\t\"application/oda\": [\"oda\"],\n\t\"application/oebps-package+xml\": [\"opf\"],\n\t\"application/ogg\": [\"ogx\"],\n\t\"application/omdoc+xml\": [\"omdoc\"],\n\t\"application/onenote\": [\n\t\t\"onetoc\",\n\t\t\"onetoc2\",\n\t\t\"onetmp\",\n\t\t\"onepkg\",\n\t\t\"one\",\n\t\t\"onea\"\n\t],\n\t\"application/oxps\": [\"oxps\"],\n\t\"application/p2p-overlay+xml\": [\"relo\"],\n\t\"application/patch-ops-error+xml\": [\"xer\"],\n\t\"application/pdf\": [\"pdf\"],\n\t\"application/pgp-encrypted\": [\"pgp\"],\n\t\"application/pgp-keys\": [\"asc\"],\n\t\"application/pgp-signature\": [\"sig\", \"*asc\"],\n\t\"application/pics-rules\": [\"prf\"],\n\t\"application/pkcs10\": [\"p10\"],\n\t\"application/pkcs7-mime\": [\"p7m\", \"p7c\"],\n\t\"application/pkcs7-signature\": [\"p7s\"],\n\t\"application/pkcs8\": [\"p8\"],\n\t\"application/pkix-attr-cert\": [\"ac\"],\n\t\"application/pkix-cert\": [\"cer\"],\n\t\"application/pkix-crl\": [\"crl\"],\n\t\"application/pkix-pkipath\": [\"pkipath\"],\n\t\"application/pkixcmp\": [\"pki\"],\n\t\"application/pls+xml\": [\"pls\"],\n\t\"application/postscript\": [\n\t\t\"ai\",\n\t\t\"eps\",\n\t\t\"ps\"\n\t],\n\t\"application/provenance+xml\": [\"provx\"],\n\t\"application/pskc+xml\": [\"pskcxml\"],\n\t\"application/raml+yaml\": [\"raml\"],\n\t\"application/rdf+xml\": [\"rdf\", \"owl\"],\n\t\"application/reginfo+xml\": [\"rif\"],\n\t\"application/relax-ng-compact-syntax\": [\"rnc\"],\n\t\"application/resource-lists+xml\": [\"rl\"],\n\t\"application/resource-lists-diff+xml\": [\"rld\"],\n\t\"application/rls-services+xml\": [\"rs\"],\n\t\"application/route-apd+xml\": [\"rapd\"],\n\t\"application/route-s-tsid+xml\": [\"sls\"],\n\t\"application/route-usd+xml\": [\"rusd\"],\n\t\"application/rpki-ghostbusters\": [\"gbr\"],\n\t\"application/rpki-manifest\": [\"mft\"],\n\t\"application/rpki-roa\": [\"roa\"],\n\t\"application/rsd+xml\": [\"rsd\"],\n\t\"application/rss+xml\": [\"rss\"],\n\t\"application/rtf\": [\"rtf\"],\n\t\"application/sbml+xml\": [\"sbml\"],\n\t\"application/scvp-cv-request\": [\"scq\"],\n\t\"application/scvp-cv-response\": [\"scs\"],\n\t\"application/scvp-vp-request\": [\"spq\"],\n\t\"application/scvp-vp-response\": [\"spp\"],\n\t\"application/sdp\": [\"sdp\"],\n\t\"application/senml+xml\": [\"senmlx\"],\n\t\"application/sensml+xml\": [\"sensmlx\"],\n\t\"application/set-payment-initiation\": [\"setpay\"],\n\t\"application/set-registration-initiation\": [\"setreg\"],\n\t\"application/shf+xml\": [\"shf\"],\n\t\"application/sieve\": [\"siv\", \"sieve\"],\n\t\"application/smil+xml\": [\"smi\", \"smil\"],\n\t\"application/sparql-query\": [\"rq\"],\n\t\"application/sparql-results+xml\": [\"srx\"],\n\t\"application/sql\": [\"sql\"],\n\t\"application/srgs\": [\"gram\"],\n\t\"application/srgs+xml\": [\"grxml\"],\n\t\"application/sru+xml\": [\"sru\"],\n\t\"application/ssdl+xml\": [\"ssdl\"],\n\t\"application/ssml+xml\": [\"ssml\"],\n\t\"application/swid+xml\": [\"swidtag\"],\n\t\"application/tei+xml\": [\"tei\", \"teicorpus\"],\n\t\"application/thraud+xml\": [\"tfi\"],\n\t\"application/timestamped-data\": [\"tsd\"],\n\t\"application/toml\": [\"toml\"],\n\t\"application/trig\": [\"trig\"],\n\t\"application/ttml+xml\": [\"ttml\"],\n\t\"application/ubjson\": [\"ubj\"],\n\t\"application/urc-ressheet+xml\": [\"rsheet\"],\n\t\"application/urc-targetdesc+xml\": [\"td\"],\n\t\"application/voicexml+xml\": [\"vxml\"],\n\t\"application/wasm\": [\"wasm\"],\n\t\"application/watcherinfo+xml\": [\"wif\"],\n\t\"application/widget\": [\"wgt\"],\n\t\"application/winhlp\": [\"hlp\"],\n\t\"application/wsdl+xml\": [\"wsdl\"],\n\t\"application/wspolicy+xml\": [\"wspolicy\"],\n\t\"application/xaml+xml\": [\"xaml\"],\n\t\"application/xcap-att+xml\": [\"xav\"],\n\t\"application/xcap-caps+xml\": [\"xca\"],\n\t\"application/xcap-diff+xml\": [\"xdf\"],\n\t\"application/xcap-el+xml\": [\"xel\"],\n\t\"application/xcap-ns+xml\": [\"xns\"],\n\t\"application/xenc+xml\": [\"xenc\"],\n\t\"application/xfdf\": [\"xfdf\"],\n\t\"application/xhtml+xml\": [\"xhtml\", \"xht\"],\n\t\"application/xliff+xml\": [\"xlf\"],\n\t\"application/xml\": [\n\t\t\"xml\",\n\t\t\"xsl\",\n\t\t\"xsd\",\n\t\t\"rng\"\n\t],\n\t\"application/xml-dtd\": [\"dtd\"],\n\t\"application/xop+xml\": [\"xop\"],\n\t\"application/xproc+xml\": [\"xpl\"],\n\t\"application/xslt+xml\": [\"*xsl\", \"xslt\"],\n\t\"application/xspf+xml\": [\"xspf\"],\n\t\"application/xv+xml\": [\n\t\t\"mxml\",\n\t\t\"xhvml\",\n\t\t\"xvml\",\n\t\t\"xvm\"\n\t],\n\t\"application/yang\": [\"yang\"],\n\t\"application/yin+xml\": [\"yin\"],\n\t\"application/zip\": [\"zip\"],\n\t\"application/zip+dotlottie\": [\"lottie\"],\n\t\"audio/3gpp\": [\"*3gpp\"],\n\t\"audio/aac\": [\"adts\", \"aac\"],\n\t\"audio/adpcm\": [\"adp\"],\n\t\"audio/amr\": [\"amr\"],\n\t\"audio/basic\": [\"au\", \"snd\"],\n\t\"audio/midi\": [\n\t\t\"mid\",\n\t\t\"midi\",\n\t\t\"kar\",\n\t\t\"rmi\"\n\t],\n\t\"audio/mobile-xmf\": [\"mxmf\"],\n\t\"audio/mp3\": [\"*mp3\"],\n\t\"audio/mp4\": [\n\t\t\"m4a\",\n\t\t\"mp4a\",\n\t\t\"m4b\"\n\t],\n\t\"audio/mpeg\": [\n\t\t\"mpga\",\n\t\t\"mp2\",\n\t\t\"mp2a\",\n\t\t\"mp3\",\n\t\t\"m2a\",\n\t\t\"m3a\"\n\t],\n\t\"audio/ogg\": [\n\t\t\"oga\",\n\t\t\"ogg\",\n\t\t\"spx\",\n\t\t\"opus\"\n\t],\n\t\"audio/s3m\": [\"s3m\"],\n\t\"audio/silk\": [\"sil\"],\n\t\"audio/wav\": [\"wav\"],\n\t\"audio/wave\": [\"*wav\"],\n\t\"audio/webm\": [\"weba\"],\n\t\"audio/xm\": [\"xm\"],\n\t\"font/collection\": [\"ttc\"],\n\t\"font/otf\": [\"otf\"],\n\t\"font/ttf\": [\"ttf\"],\n\t\"font/woff\": [\"woff\"],\n\t\"font/woff2\": [\"woff2\"],\n\t\"image/aces\": [\"exr\"],\n\t\"image/apng\": [\"apng\"],\n\t\"image/avci\": [\"avci\"],\n\t\"image/avcs\": [\"avcs\"],\n\t\"image/avif\": [\"avif\"],\n\t\"image/bmp\": [\"bmp\", \"dib\"],\n\t\"image/cgm\": [\"cgm\"],\n\t\"image/dicom-rle\": [\"drle\"],\n\t\"image/dpx\": [\"dpx\"],\n\t\"image/emf\": [\"emf\"],\n\t\"image/fits\": [\"fits\"],\n\t\"image/g3fax\": [\"g3\"],\n\t\"image/gif\": [\"gif\"],\n\t\"image/heic\": [\"heic\"],\n\t\"image/heic-sequence\": [\"heics\"],\n\t\"image/heif\": [\"heif\"],\n\t\"image/heif-sequence\": [\"heifs\"],\n\t\"image/hej2k\": [\"hej2\"],\n\t\"image/ief\": [\"ief\"],\n\t\"image/jaii\": [\"jaii\"],\n\t\"image/jais\": [\"jais\"],\n\t\"image/jls\": [\"jls\"],\n\t\"image/jp2\": [\"jp2\", \"jpg2\"],\n\t\"image/jpeg\": [\n\t\t\"jpg\",\n\t\t\"jpeg\",\n\t\t\"jpe\"\n\t],\n\t\"image/jph\": [\"jph\"],\n\t\"image/jphc\": [\"jhc\"],\n\t\"image/jpm\": [\"jpm\", \"jpgm\"],\n\t\"image/jpx\": [\"jpx\", \"jpf\"],\n\t\"image/jxl\": [\"jxl\"],\n\t\"image/jxr\": [\"jxr\"],\n\t\"image/jxra\": [\"jxra\"],\n\t\"image/jxrs\": [\"jxrs\"],\n\t\"image/jxs\": [\"jxs\"],\n\t\"image/jxsc\": [\"jxsc\"],\n\t\"image/jxsi\": [\"jxsi\"],\n\t\"image/jxss\": [\"jxss\"],\n\t\"image/ktx\": [\"ktx\"],\n\t\"image/ktx2\": [\"ktx2\"],\n\t\"image/pjpeg\": [\"jfif\"],\n\t\"image/png\": [\"png\"],\n\t\"image/sgi\": [\"sgi\"],\n\t\"image/svg+xml\": [\"svg\", \"svgz\"],\n\t\"image/t38\": [\"t38\"],\n\t\"image/tiff\": [\"tif\", \"tiff\"],\n\t\"image/tiff-fx\": [\"tfx\"],\n\t\"image/webp\": [\"webp\"],\n\t\"image/wmf\": [\"wmf\"],\n\t\"message/disposition-notification\": [\"disposition-notification\"],\n\t\"message/global\": [\"u8msg\"],\n\t\"message/global-delivery-status\": [\"u8dsn\"],\n\t\"message/global-disposition-notification\": [\"u8mdn\"],\n\t\"message/global-headers\": [\"u8hdr\"],\n\t\"message/rfc822\": [\n\t\t\"eml\",\n\t\t\"mime\",\n\t\t\"mht\",\n\t\t\"mhtml\"\n\t],\n\t\"model/3mf\": [\"3mf\"],\n\t\"model/gltf+json\": [\"gltf\"],\n\t\"model/gltf-binary\": [\"glb\"],\n\t\"model/iges\": [\"igs\", \"iges\"],\n\t\"model/jt\": [\"jt\"],\n\t\"model/mesh\": [\n\t\t\"msh\",\n\t\t\"mesh\",\n\t\t\"silo\"\n\t],\n\t\"model/mtl\": [\"mtl\"],\n\t\"model/obj\": [\"obj\"],\n\t\"model/prc\": [\"prc\"],\n\t\"model/step\": [\n\t\t\"step\",\n\t\t\"stp\",\n\t\t\"stpnc\",\n\t\t\"p21\",\n\t\t\"210\"\n\t],\n\t\"model/step+xml\": [\"stpx\"],\n\t\"model/step+zip\": [\"stpz\"],\n\t\"model/step-xml+zip\": [\"stpxz\"],\n\t\"model/stl\": [\"stl\"],\n\t\"model/u3d\": [\"u3d\"],\n\t\"model/vrml\": [\"wrl\", \"vrml\"],\n\t\"model/x3d+binary\": [\"*x3db\", \"x3dbz\"],\n\t\"model/x3d+fastinfoset\": [\"x3db\"],\n\t\"model/x3d+vrml\": [\"*x3dv\", \"x3dvz\"],\n\t\"model/x3d+xml\": [\"x3d\", \"x3dz\"],\n\t\"model/x3d-vrml\": [\"x3dv\"],\n\t\"text/cache-manifest\": [\"appcache\", \"manifest\"],\n\t\"text/calendar\": [\"ics\", \"ifb\"],\n\t\"text/coffeescript\": [\"coffee\", \"litcoffee\"],\n\t\"text/css\": [\"css\"],\n\t\"text/csv\": [\"csv\"],\n\t\"text/html\": [\n\t\t\"html\",\n\t\t\"htm\",\n\t\t\"shtml\"\n\t],\n\t\"text/jade\": [\"jade\"],\n\t\"text/javascript\": [\"js\", \"mjs\"],\n\t\"text/jsx\": [\"jsx\"],\n\t\"text/less\": [\"less\"],\n\t\"text/markdown\": [\"md\", \"markdown\"],\n\t\"text/mathml\": [\"mml\"],\n\t\"text/mdx\": [\"mdx\"],\n\t\"text/n3\": [\"n3\"],\n\t\"text/plain\": [\n\t\t\"txt\",\n\t\t\"text\",\n\t\t\"conf\",\n\t\t\"def\",\n\t\t\"list\",\n\t\t\"log\",\n\t\t\"in\",\n\t\t\"ini\"\n\t],\n\t\"text/richtext\": [\"rtx\"],\n\t\"text/rtf\": [\"*rtf\"],\n\t\"text/sgml\": [\"sgml\", \"sgm\"],\n\t\"text/shex\": [\"shex\"],\n\t\"text/slim\": [\"slim\", \"slm\"],\n\t\"text/spdx\": [\"spdx\"],\n\t\"text/stylus\": [\"stylus\", \"styl\"],\n\t\"text/tab-separated-values\": [\"tsv\"],\n\t\"text/troff\": [\n\t\t\"t\",\n\t\t\"tr\",\n\t\t\"roff\",\n\t\t\"man\",\n\t\t\"me\",\n\t\t\"ms\"\n\t],\n\t\"text/turtle\": [\"ttl\"],\n\t\"text/uri-list\": [\n\t\t\"uri\",\n\t\t\"uris\",\n\t\t\"urls\"\n\t],\n\t\"text/vcard\": [\"vcard\"],\n\t\"text/vtt\": [\"vtt\"],\n\t\"text/wgsl\": [\"wgsl\"],\n\t\"text/xml\": [\"*xml\"],\n\t\"text/yaml\": [\"yaml\", \"yml\"],\n\t\"video/3gpp\": [\"3gp\", \"3gpp\"],\n\t\"video/3gpp2\": [\"3g2\"],\n\t\"video/h261\": [\"h261\"],\n\t\"video/h263\": [\"h263\"],\n\t\"video/h264\": [\"h264\"],\n\t\"video/iso.segment\": [\"m4s\"],\n\t\"video/jpeg\": [\"jpgv\"],\n\t\"video/jpm\": [\"*jpm\", \"*jpgm\"],\n\t\"video/mj2\": [\"mj2\", \"mjp2\"],\n\t\"video/mp2t\": [\n\t\t\"ts\",\n\t\t\"m2t\",\n\t\t\"m2ts\",\n\t\t\"mts\"\n\t],\n\t\"video/mp4\": [\n\t\t\"mp4\",\n\t\t\"mp4v\",\n\t\t\"mpg4\"\n\t],\n\t\"video/mpeg\": [\n\t\t\"mpeg\",\n\t\t\"mpg\",\n\t\t\"mpe\",\n\t\t\"m1v\",\n\t\t\"m2v\"\n\t],\n\t\"video/ogg\": [\"ogv\"],\n\t\"video/quicktime\": [\"qt\", \"mov\"],\n\t\"video/webm\": [\"webm\"]\n};\nObject.freeze(types);\n// ../../node_modules/.pnpm/mime@4.1.2/node_modules/mime/dist/src/Mime.js\nvar __classPrivateFieldGet = function(receiver, state, kind, f) {\n\tif (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n\tif (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\treturn kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _Mime_extensionToType;\nvar _Mime_typeToExtension;\nvar _Mime_typeToExtensions;\nvar Mime = class {\n\tconstructor(...args) {\n\t\t_Mime_extensionToType.set(this, /* @__PURE__ */ new Map());\n\t\t_Mime_typeToExtension.set(this, /* @__PURE__ */ new Map());\n\t\t_Mime_typeToExtensions.set(this, /* @__PURE__ */ new Map());\n\t\tfor (const arg of args) this.define(arg);\n\t}\n\tdefine(typeMap, force = false) {\n\t\tfor (let [type, extensions] of Object.entries(typeMap)) {\n\t\t\ttype = type.toLowerCase();\n\t\t\textensions = extensions.map((ext) => ext.toLowerCase());\n\t\t\tlet allExtensions = __classPrivateFieldGet(this, _Mime_typeToExtensions, \"f\").get(type);\n\t\t\tif (!allExtensions) {\n\t\t\t\tallExtensions = /* @__PURE__ */ new Set();\n\t\t\t\t__classPrivateFieldGet(this, _Mime_typeToExtensions, \"f\").set(type, allExtensions);\n\t\t\t}\n\t\t\tlet first = true;\n\t\t\tfor (let extension of extensions) {\n\t\t\t\tconst starred = extension.startsWith(\"*\");\n\t\t\t\textension = starred ? extension.slice(1) : extension;\n\t\t\t\tallExtensions.add(extension);\n\t\t\t\tif (first) __classPrivateFieldGet(this, _Mime_typeToExtension, \"f\").set(type, extension);\n\t\t\t\tfirst = false;\n\t\t\t\tif (starred) continue;\n\t\t\t\tconst currentType = __classPrivateFieldGet(this, _Mime_extensionToType, \"f\").get(extension);\n\t\t\t\tif (currentType && currentType != type && !force) throw new Error(`\"${type} -> ${extension}\" conflicts with \"${currentType} -> ${extension}\". Pass \\`force=true\\` to override this definition.`);\n\t\t\t\t__classPrivateFieldGet(this, _Mime_extensionToType, \"f\").set(extension, type);\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t}\n\tgetType(path) {\n\t\tif (typeof path !== \"string\") return null;\n\t\tconst last = path.replace(/^.*[/\\\\]/s, \"\").toLowerCase();\n\t\tconst ext = last.replace(/^.*\\./s, \"\").toLowerCase();\n\t\tconst hasPath = last.length < path.length;\n\t\tif (!(ext.length < last.length - 1) && hasPath) return null;\n\t\treturn __classPrivateFieldGet(this, _Mime_extensionToType, \"f\").get(ext) ?? null;\n\t}\n\tgetExtension(type) {\n\t\tif (typeof type !== \"string\") return null;\n\t\ttype = type?.split?.(\";\")[0];\n\t\treturn (type && __classPrivateFieldGet(this, _Mime_typeToExtension, \"f\").get(type.trim().toLowerCase())) ?? null;\n\t}\n\tgetAllExtensions(type) {\n\t\tif (typeof type !== \"string\") return null;\n\t\ttype = type.split(\";\")[0].trim().toLowerCase();\n\t\tconst extensions = __classPrivateFieldGet(this, _Mime_typeToExtensions, \"f\").get(type);\n\t\treturn extensions ? new Set(extensions) : null;\n\t}\n\t_freeze() {\n\t\tthis.define = () => {\n\t\t\tthrow new Error(\"define() not allowed for built-in Mime objects. See https://github.com/broofa/mime/blob/main/README.md#custom-mime-instances\");\n\t\t};\n\t\tObject.freeze(this);\n\t\treturn this;\n\t}\n\t_getTestState() {\n\t\treturn {\n\t\t\ttypes: __classPrivateFieldGet(this, _Mime_extensionToType, \"f\"),\n\t\t\textensions: __classPrivateFieldGet(this, _Mime_typeToExtension, \"f\")\n\t\t};\n\t}\n};\n_Mime_extensionToType = /* @__PURE__ */ new WeakMap(), _Mime_typeToExtension = /* @__PURE__ */ new WeakMap(), _Mime_typeToExtensions = /* @__PURE__ */ new WeakMap();\n// ../../node_modules/.pnpm/mime@4.1.2/node_modules/mime/dist/src/index.js\nvar src_default = new Mime(types, types$1)._freeze();\n// ../../node_modules/.pnpm/uuid@14.0.3/node_modules/uuid/dist-node/stringify.js\nconst byteToHex = [];\nfor (let i = 0; i < 256; ++i) byteToHex.push((i + 256).toString(16).slice(1));\nfunction unsafeStringify(arr, offset = 0) {\n\treturn (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + \"-\" + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + \"-\" + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + \"-\" + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + \"-\" + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase();\n}\n// ../../node_modules/.pnpm/uuid@14.0.3/node_modules/uuid/dist-node/rng.js\nconst rnds8 = /* @__PURE__ */ new Uint8Array(16);\nfunction rng() {\n\treturn crypto.getRandomValues(rnds8);\n}\n// ../../node_modules/.pnpm/uuid@14.0.3/node_modules/uuid/dist-node/v4.js\nfunction v4(options, buf, offset) {\n\tif (!buf && !options && crypto.randomUUID) return crypto.randomUUID();\n\treturn _v4(options, buf, offset);\n}\nfunction _v4(options, buf, offset) {\n\toptions = options || {};\n\tconst rnds = options.random ?? options.rng?.() ?? rng();\n\tif (rnds.length < 16) throw new Error(\"Random bytes length must be >= 16\");\n\trnds[6] = rnds[6] & 15 | 64;\n\trnds[8] = rnds[8] & 63 | 128;\n\tif (buf) {\n\t\toffset = offset || 0;\n\t\tif (offset < 0 || offset + 16 > buf.length) throw new RangeError(`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`);\n\t\tfor (let i = 0; i < 16; ++i) buf[offset + i] = rnds[i];\n\t\treturn buf;\n\t}\n\treturn unsafeStringify(rnds);\n}\n// ../../node_modules/.pnpm/readdirp@5.1.1/node_modules/readdirp/index.js\nconst EntryTypes = {\n\tFILE_TYPE: \"files\",\n\tDIR_TYPE: \"directories\",\n\tFILE_DIR_TYPE: \"files_directories\",\n\tEVERYTHING_TYPE: \"all\"\n};\nconst defaultOptions = {\n\troot: \".\",\n\tfileFilter: (_entryInfo) => true,\n\tdirectoryFilter: (_entryInfo) => true,\n\ttype: EntryTypes.FILE_TYPE,\n\tlstat: false,\n\tdepth: 2147483648,\n\talwaysStat: false,\n\thighWaterMark: 256\n};\nObject.freeze(defaultOptions);\nconst RECURSIVE_ERROR_CODE = \"READDIRP_RECURSIVE_ERROR\";\nconst NORMAL_FLOW_ERRORS = /* @__PURE__ */ new Set([\n\t\"ENOENT\",\n\t\"EPERM\",\n\t\"EACCES\",\n\t\"ELOOP\",\n\tRECURSIVE_ERROR_CODE\n]);\nconst ALL_TYPES = [\n\tEntryTypes.DIR_TYPE,\n\tEntryTypes.EVERYTHING_TYPE,\n\tEntryTypes.FILE_DIR_TYPE,\n\tEntryTypes.FILE_TYPE\n];\nconst DIR_TYPES = /* @__PURE__ */ new Set([\n\tEntryTypes.DIR_TYPE,\n\tEntryTypes.EVERYTHING_TYPE,\n\tEntryTypes.FILE_DIR_TYPE\n]);\nconst FILE_TYPES = /* @__PURE__ */ new Set([\n\tEntryTypes.EVERYTHING_TYPE,\n\tEntryTypes.FILE_DIR_TYPE,\n\tEntryTypes.FILE_TYPE\n]);\nconst isNormalFlowError = (error) => NORMAL_FLOW_ERRORS.has(error.code);\nconst wantBigintFsStats = process.platform === \"win32\";\nconst emptyFn = (_entryInfo) => true;\nconst normalizeFilter = (filter) => {\n\tif (filter === void 0) return emptyFn;\n\tif (typeof filter === \"function\") return filter;\n\tif (typeof filter === \"string\") {\n\t\tconst fl = filter.trim();\n\t\treturn (entry) => entry.basename === fl;\n\t}\n\tif (Array.isArray(filter)) {\n\t\tconst trItems = filter.map((item) => item.trim());\n\t\treturn (entry) => trItems.some((f) => entry.basename === f);\n\t}\n\treturn emptyFn;\n};\nvar ReaddirpStream = class extends Readable {\n\t/**\n\t* Directories discovered but not yet emitted from. Listings are read\n\t* lazily (on pop, plus one prefetch) instead of eagerly on discovery:\n\t* keeping whole listings for every queued dir balloons RAM on wide trees.\n\t*/\n\tparents;\n\treading;\n\tparent;\n\t_stat;\n\t_maxDepth;\n\t_wantsDir;\n\t_wantsFile;\n\t_wantsEverything;\n\t_root;\n\t_isDirent;\n\t_statsProp;\n\t_rdOptions;\n\t_fileFilter;\n\t_directoryFilter;\n\t_relStart;\n\tconstructor(options = {}) {\n\t\tsuper({\n\t\t\tobjectMode: true,\n\t\t\tautoDestroy: true,\n\t\t\thighWaterMark: options.highWaterMark ?? defaultOptions.highWaterMark\n\t\t});\n\t\tconst opts = {\n\t\t\t...defaultOptions,\n\t\t\t...options\n\t\t};\n\t\tconst root = opts.root ?? defaultOptions.root;\n\t\tconst type = opts.type ?? defaultOptions.type;\n\t\tthis._fileFilter = normalizeFilter(opts.fileFilter);\n\t\tthis._directoryFilter = normalizeFilter(opts.directoryFilter);\n\t\tconst statMethod = opts.lstat ? lstat : stat;\n\t\tif (wantBigintFsStats) this._stat = (path) => statMethod(path, { bigint: true });\n\t\telse this._stat = statMethod;\n\t\tthis._maxDepth = opts.depth != null && Number.isSafeInteger(opts.depth) ? opts.depth : defaultOptions.depth;\n\t\tthis._wantsDir = DIR_TYPES.has(type);\n\t\tthis._wantsFile = FILE_TYPES.has(type);\n\t\tthis._wantsEverything = type === EntryTypes.EVERYTHING_TYPE;\n\t\tthis._root = resolve(root);\n\t\tthis._relStart = this._root.endsWith(sep) ? this._root.length : this._root.length + 1;\n\t\tthis._isDirent = !opts.alwaysStat;\n\t\tthis._statsProp = this._isDirent ? \"dirent\" : \"stats\";\n\t\tthis._rdOptions = {\n\t\t\tencoding: \"utf8\",\n\t\t\twithFileTypes: this._isDirent\n\t\t};\n\t\tconst rootDir = {\n\t\t\tpath: this._root,\n\t\t\tdepth: 1\n\t\t};\n\t\trootDir.pending = this._exploreDir(this._root, 1);\n\t\tthis.parents = [rootDir];\n\t\tthis.reading = false;\n\t\tthis.parent = void 0;\n\t}\n\tasync _read(batch) {\n\t\tif (this.reading) return;\n\t\tthis.reading = true;\n\t\ttry {\n\t\t\twhile (!this.destroyed && batch > 0) {\n\t\t\t\tconst par = this.parent;\n\t\t\t\tconst fil = par && par.files;\n\t\t\t\tif (fil && fil.length > 0) {\n\t\t\t\t\tconst { path, depth } = par;\n\t\t\t\t\tconst slice = fil.splice(0, batch).map((dirent) => this._formatEntry(dirent, path));\n\t\t\t\t\tconst awaited = this._isDirent ? slice : await Promise.all(slice);\n\t\t\t\t\tfor (const entry of awaited) {\n\t\t\t\t\t\tif (!entry) continue;\n\t\t\t\t\t\tif (this.destroyed) return;\n\t\t\t\t\t\tlet entryType = this._getEntryType(entry);\n\t\t\t\t\t\tif (typeof entryType !== \"string\") entryType = await entryType;\n\t\t\t\t\t\tif (entryType === \"directory\" && this._directoryFilter(entry)) {\n\t\t\t\t\t\t\tif (depth <= this._maxDepth) this.parents.push({\n\t\t\t\t\t\t\t\tpath: entry.fullPath,\n\t\t\t\t\t\t\t\tdepth: depth + 1\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tif (this._wantsDir) {\n\t\t\t\t\t\t\t\tthis.push(entry);\n\t\t\t\t\t\t\t\tbatch--;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if ((entryType === \"file\" || this._includeAsFile(entry)) && this._fileFilter(entry)) {\n\t\t\t\t\t\t\tif (this._wantsFile) {\n\t\t\t\t\t\t\t\tthis.push(entry);\n\t\t\t\t\t\t\t\tbatch--;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tconst parent = this.parents.pop();\n\t\t\t\t\tif (!parent) {\n\t\t\t\t\t\tthis.push(null);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tconst dir = parent.pending ?? this._exploreDir(parent.path, parent.depth);\n\t\t\t\t\tconst next = this.parents[this.parents.length - 1];\n\t\t\t\t\tif (next && !next.pending) next.pending = this._exploreDir(next.path, next.depth);\n\t\t\t\t\tthis.parent = await dir;\n\t\t\t\t\tif (this.destroyed) return;\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tthis.destroy(error);\n\t\t} finally {\n\t\t\tthis.reading = false;\n\t\t}\n\t}\n\tasync _exploreDir(path, depth) {\n\t\tlet files;\n\t\ttry {\n\t\t\tfiles = await readdir(path, this._rdOptions);\n\t\t} catch (error) {\n\t\t\tthis._onError(error);\n\t\t}\n\t\treturn {\n\t\t\tfiles,\n\t\t\tdepth,\n\t\t\tpath\n\t\t};\n\t}\n\t_formatEntry(dirent, path) {\n\t\tconst basename = this._isDirent ? dirent.name : dirent;\n\t\tconst fullPath = join(path, basename);\n\t\tconst entry = {\n\t\t\tpath: fullPath.slice(this._relStart),\n\t\t\tfullPath,\n\t\t\tbasename\n\t\t};\n\t\tif (this._isDirent) {\n\t\t\tentry.dirent = dirent;\n\t\t\treturn entry;\n\t\t}\n\t\treturn this._stat(fullPath).then((stats) => {\n\t\t\tentry.stats = stats;\n\t\t\treturn entry;\n\t\t}, (err) => {\n\t\t\tthis._onError(err);\n\t\t});\n\t}\n\t_onError(err) {\n\t\tif (isNormalFlowError(err) && !this.destroyed) this.emit(\"warn\", err);\n\t\telse this.destroy(err);\n\t}\n\t_getEntryType(entry) {\n\t\tif (!entry || !(this._statsProp in entry)) return \"\";\n\t\tconst stats = entry[this._statsProp];\n\t\tif (stats.isFile()) return \"file\";\n\t\tif (stats.isDirectory()) return \"directory\";\n\t\tif (stats.isSymbolicLink()) return this._getSymlinkEntryType(entry);\n\t\treturn \"\";\n\t}\n\tasync _getSymlinkEntryType(entry) {\n\t\tconst full = entry.fullPath;\n\t\ttry {\n\t\t\tconst entryRealPath = await realpath(full);\n\t\t\tconst entryRealPathStats = await lstat(entryRealPath);\n\t\t\tif (entryRealPathStats.isFile()) return \"file\";\n\t\t\tif (entryRealPathStats.isDirectory()) {\n\t\t\t\tconst len = entryRealPath.length;\n\t\t\t\tif (full.startsWith(entryRealPath) && full[len] === sep) {\n\t\t\t\t\tconst recursiveError = /* @__PURE__ */ new Error(`Circular symlink detected: \"${full}\" points to \"${entryRealPath}\"`);\n\t\t\t\t\trecursiveError.code = RECURSIVE_ERROR_CODE;\n\t\t\t\t\tthis._onError(recursiveError);\n\t\t\t\t\treturn \"\";\n\t\t\t\t}\n\t\t\t\treturn \"directory\";\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tthis._onError(error);\n\t\t}\n\t\treturn \"\";\n\t}\n\t_includeAsFile(entry) {\n\t\tconst stats = entry && entry[this._statsProp];\n\t\treturn stats && this._wantsEverything && !stats.isDirectory();\n\t}\n};\n/**\n* Streaming version: Reads all files and directories in given root recursively.\n* Consumes ~constant small amount of RAM.\n* @param root Root directory\n* @param options Options to specify root (start directory), filters and recursion depth\n*/\nfunction readdirp(root, options = {}) {\n\tlet type = options.entryType || options.type;\n\tif (type === \"both\") type = EntryTypes.FILE_DIR_TYPE;\n\tif (!root) throw new Error(\"readdirp: root argument is required. Usage: readdirp(root, options)\");\n\telse if (typeof root !== \"string\") throw new TypeError(\"readdirp: root argument must be a string. Usage: readdirp(root, options)\");\n\telse if (type && !ALL_TYPES.includes(type)) throw new Error(`readdirp: Invalid type passed. Use one of ${ALL_TYPES.join(\", \")}`);\n\tconst opts = {\n\t\t...options,\n\t\troot\n\t};\n\tif (type) opts.type = type;\n\treturn new ReaddirpStream(opts);\n}\n// ../../node_modules/.pnpm/chokidar@6.0.0/node_modules/chokidar/runtime.js\nconst platform = process.platform;\nconst isWindows = platform === \"win32\";\nconst isMacos = platform === \"darwin\";\nconst isLinux = platform === \"linux\";\nconst isIBMi = type() === \"OS400\";\nfunction errorCode(error) {\n\treturn error?.code;\n}\nfunction classifyError(error) {\n\tconst code = errorCode(error);\n\tif (code === \"ENOENT\" || code === \"ENOTDIR\") return \"missing\";\n\tif (code === \"EPERM\" || code === \"EACCES\") return \"permission\";\n\tif (code === \"ERR_FEATURE_UNAVAILABLE_ON_PLATFORM\") return \"recursive-unsupported\";\n\treturn \"other\";\n}\nfunction isMissingError(error) {\n\treturn classifyError(error) === \"missing\";\n}\nfunction isPermissionError(error) {\n\treturn classifyError(error) === \"permission\";\n}\nfunction isRecursiveWatchUnsupported(error) {\n\treturn classifyError(error) === \"recursive-unsupported\";\n}\nconst systemScheduler = Object.freeze({\n\tnow: () => Date.now(),\n\tsetTimeout: (callback, delay) => setTimeout(callback, delay),\n\tclearTimeout: (timer) => {\n\t\tif (timer) clearTimeout(timer);\n\t}\n});\nconst EVENTS = {\n\tALL: \"all\",\n\tREADY: \"ready\",\n\tADD: \"add\",\n\tCHANGE: \"change\",\n\tADD_DIR: \"addDir\",\n\tUNLINK: \"unlink\",\n\tUNLINK_DIR: \"unlinkDir\",\n\tRAW: \"raw\",\n\tERROR: \"error\"\n};\nconst BACK_SLASH_RE = /\\\\/g;\nconst DOUBLE_SLASH_RE = /\\/\\//g;\nfunction normalizePath$2(path) {\n\tif (typeof path !== \"string\") throw new TypeError(\"string expected\");\n\tconst unix = path.replace(BACK_SLASH_RE, \"/\");\n\tconst unc = unix.startsWith(\"//\");\n\tlet normalized = sp.normalize(unix).replace(BACK_SLASH_RE, \"/\").replace(DOUBLE_SLASH_RE, \"/\");\n\tif (unc && !normalized.startsWith(\"//\")) normalized = `/${normalized}`;\n\treturn normalized;\n}\n/**\n* Plain-number size, mtime, and inode. readdirp returns BigIntStats on Windows,\n* which never compare equal to the number Stats of `lstat`.\n*/\nfunction statIdentity(stats) {\n\tif (typeof stats.mtimeMs !== \"bigint\") return stats;\n\tconst big = stats;\n\tconst sec = big.mtimeNs / 1000000000n;\n\tconst nsec = big.mtimeNs % 1000000000n;\n\tconst mtimeMs = Number(sec) * 1e3 + Number(nsec) / 1e6;\n\treturn {\n\t\tsize: Number(big.size),\n\t\tmtimeMs,\n\t\tino: Number(big.ino)\n\t};\n}\nfunction logicalPathKey(path) {\n\tconst resolved = sp.resolve(path);\n\treturn isWindows || !resolved.includes(\"\\\\\") ? resolved.replace(BACK_SLASH_RE, \"/\") : normalizePath$2(resolved);\n}\nfunction isInsideRelativePath(relative) {\n\treturn relative !== \"..\" && !relative.startsWith(`..${sp.sep}`) && !sp.isAbsolute(relative);\n}\nfunction isSameOrInside(root, candidate) {\n\tconst relative = sp.relative(root, candidate);\n\treturn relative === \"\" || isInsideRelativePath(relative);\n}\nfunction isStrictlyInside(root, candidate) {\n\tconst relative = sp.relative(root, candidate);\n\treturn relative !== \"\" && isInsideRelativePath(relative);\n}\nfunction isMatcherObject(matcher) {\n\treturn typeof matcher === \"object\" && matcher !== null && !(matcher instanceof RegExp);\n}\nfunction cloneOwnedMatcher(matcher) {\n\tif (matcher instanceof RegExp) return new RegExp(matcher.source, matcher.flags);\n\tif (isMatcherObject(matcher)) return Object.freeze({ ...matcher });\n\treturn matcher;\n}\nfunction compileMatcher(matcher) {\n\tif (typeof matcher === \"function\") return matcher;\n\tif (typeof matcher === \"string\") return (candidate) => matcher === candidate;\n\tif (matcher instanceof RegExp) return (candidate) => {\n\t\tmatcher.lastIndex = 0;\n\t\treturn matcher.test(candidate);\n\t};\n\tif (isMatcherObject(matcher)) return (candidate) => matcher.path === candidate || Boolean(matcher.recursive && isStrictlyInside(matcher.path, candidate));\n\treturn () => false;\n}\nfunction compileMatchers(matchers) {\n\tconst patterns = matchers.map(compileMatcher);\n\treturn (candidate, stats) => {\n\t\tif (patterns.length === 0) return false;\n\t\tconst normalized = normalizePath$2(candidate);\n\t\treturn patterns.some((pattern) => pattern(normalized, stats));\n\t};\n}\nfunction normalizeMatcher(matcher, cwd = process.cwd()) {\n\tif (typeof matcher === \"string\") return normalizePath$2(sp.isAbsolute(matcher) ? matcher : sp.join(cwd, matcher));\n\tif (isMatcherObject(matcher)) return {\n\t\tpath: normalizePath$2(sp.isAbsolute(matcher.path) ? matcher.path : sp.join(cwd, matcher.path)),\n\t\trecursive: matcher.recursive\n\t};\n\treturn matcher;\n}\nconst REPLACER_RE = /^\\.[/\\\\]/;\n/** Temporary traversal scope; replaced by the observation engine's root scope. */\nvar WatchHelper = class WatchHelper {\n\twatchPath;\n\tfollowSymlinks;\n\trecursiveRoot;\n\trecursiveDisabled;\n\tobservationTrigger;\n\trealpathAncestry;\n\tpathGeneration;\n\tcontext;\n\tconstructor(path, follow, context) {\n\t\tthis.context = context;\n\t\tthis.watchPath = path.replace(REPLACER_RE, \"\");\n\t\tthis.followSymlinks = follow;\n\t\tthis.realpathAncestry = /* @__PURE__ */ new Set();\n\t\tthis.pathGeneration = context.capturePathGeneration();\n\t}\n\tfork(path) {\n\t\tconst helper = new WatchHelper(path, this.followSymlinks, this.context);\n\t\thelper.recursiveRoot = this.recursiveRoot;\n\t\thelper.recursiveDisabled = this.recursiveDisabled;\n\t\thelper.observationTrigger = this.observationTrigger;\n\t\thelper.realpathAncestry = new Set(this.realpathAncestry);\n\t\thelper.pathGeneration = this.pathGeneration;\n\t\treturn helper;\n\t}\n\twithObservation(trigger) {\n\t\tconst helper = Object.create(this);\n\t\thelper.observationTrigger = trigger;\n\t\treturn helper;\n\t}\n\tfilterPath(entry) {\n\t\treturn entry.stats?.isSymbolicLink() ? this.filterDir(entry) : this.context.isntIgnored(sp.join(this.watchPath, entry.path), entry.stats);\n\t}\n\tfilterDir(entry) {\n\t\treturn this.context.isntIgnored(sp.join(this.watchPath, entry.path), entry.stats);\n\t}\n};\n// ../../node_modules/.pnpm/chokidar@6.0.0/node_modules/chokidar/backend.js\nlet nextGeneration = 0;\nfunction allocateSharedResourceGeneration() {\n\treturn ++nextGeneration;\n}\nfunction attachSharedSubscriber(resource, subscriber) {\n\tif (resource.closed) return false;\n\tresource.subscribers.add(subscriber);\n\treturn true;\n}\nfunction detachSharedSubscriber(resource, subscriber) {\n\tif (resource.closed || !resource.subscribers.delete(subscriber)) return;\n\treturn resource.subscribers.size > 0 ? \"remaining\" : \"last\";\n}\n/** Invalidates exactly this resource generation and returns its subscribers. */\nfunction invalidateSharedResource(resource) {\n\tif (resource.closed) return;\n\tresource.closed = true;\n\tconst subscribers = [...resource.subscribers];\n\tresource.subscribers.clear();\n\treturn subscribers;\n}\nfunction reconfigureWatcherPersistence(resource) {\n\tif ([...resource.subscribers].some((subscriber) => subscriber.persistent)) resource.watcher.ref();\n\telse resource.watcher.unref();\n}\nfunction invalidateWatcherResource(resource, registry) {\n\tconst subscribers = invalidateSharedResource(resource);\n\tif (!subscribers) return;\n\tif (registry.get(resource.resource) === resource) registry.delete(resource.resource);\n\tresource.watcher.close();\n\treturn subscribers;\n}\nfunction attachWatcherSubscriber(resource, subscriber) {\n\tattachSharedSubscriber(resource, subscriber);\n\treconfigureWatcherPersistence(resource);\n}\nfunction createWatcherSubscription(resource, subscriber, registry) {\n\tlet closed = false;\n\treturn {\n\t\tresource: resource.resource,\n\t\tclose: () => {\n\t\t\tif (closed) return;\n\t\t\tclosed = true;\n\t\t\tconst remaining = detachSharedSubscriber(resource, subscriber);\n\t\t\tif (remaining === \"remaining\") reconfigureWatcherPersistence(resource);\n\t\t\telse if (remaining === \"last\" && registry.get(resource.resource) === resource) invalidateWatcherResource(resource, registry);\n\t\t}\n\t};\n}\nfunction selectBackend(options) {\n\tconst preferRecursive = options.backend === \"native-recursive\" || options.backend === \"auto\" && (isMacos || isWindows);\n\tconst kind = options.backend === \"polling\" ? \"polling\" : preferRecursive && options.depth === void 0 ? \"native-recursive-preferred\" : \"native-per-directory\";\n\treturn Object.freeze({\n\t\tkind,\n\t\tpolling: kind === \"polling\",\n\t\trecursive: kind === \"native-recursive-preferred\",\n\t\tperDirectory: kind === \"native-per-directory\"\n\t});\n}\nconst EV$1 = EVENTS;\nconst POLL_DIRECTORY_RECHECK_DELAY = 1e3;\n/** Native resources use one process-global monotonic time domain. */\nfunction backendNow() {\n\treturn performance.now();\n}\nfunction toNativeWatchPath(path) {\n\tconst nativePath = sp.normalize(path);\n\tif (!isWindows) return nativePath;\n\ttry {\n\t\treturn realpathSync.native(nativePath);\n\t} catch {\n\t\treturn nativePath;\n\t}\n}\nfunction projectNativeRelativePath(nativeRoot, relativePath) {\n\tif (!isWindows || relativePath === null || !sp.isAbsolute(relativePath)) return relativePath;\n\tconst root = sp.normalize(sp.toNamespacedPath(nativeRoot));\n\tconst candidate = sp.normalize(sp.toNamespacedPath(relativePath));\n\tconst projected = sp.relative(root, candidate);\n\tif (!isSameOrInside(root, candidate)) return relativePath;\n\treturn projected || null;\n}\nconst FsWatchInstances = /* @__PURE__ */ new Map();\nfunction systemNativeWatchFactory(path, options, listener) {\n\treturn watch(path, options, listener);\n}\nlet nativeWatchFactory = systemNativeWatchFactory;\nconst RecursiveWatchInstances = /* @__PURE__ */ new Map();\nlet recursiveWatchUnsupported = false;\nfunction systemRecursiveWatchFactory(path, options, listener) {\n\treturn watch(path, options, listener);\n}\nlet recursiveWatchFactory = systemRecursiveWatchFactory;\nfunction failRecursiveResource(resource, error) {\n\tconst subscribers = invalidateWatcherResource(resource, RecursiveWatchInstances);\n\tif (!subscribers) return;\n\tsubscribers.forEach((subscriber) => subscriber.failure(error));\n}\nfunction subscribeRecursiveNative(path, persistent, handlers, signal) {\n\tif (recursiveWatchUnsupported) return { kind: \"unsupported\" };\n\tconst resourceKey = sp.resolve(path);\n\tconst subscriber = {\n\t\t...handlers,\n\t\twatchedPath: path,\n\t\tpersistent\n\t};\n\tlet resource = RecursiveWatchInstances.get(resourceKey);\n\tif (!resource) {\n\t\tlet watcher;\n\t\tlet created;\n\t\tconst nativePath = toNativeWatchPath(path);\n\t\ttry {\n\t\t\twatcher = recursiveWatchFactory(nativePath, {\n\t\t\t\tpersistent,\n\t\t\t\trecursive: true\n\t\t\t}, (rawEvent, relativePath) => {\n\t\t\t\tconst active = created;\n\t\t\t\tif (!active || active.closed) return;\n\t\t\t\tif (RecursiveWatchInstances.get(resourceKey) !== active) return;\n\t\t\t\tconst trigger = {\n\t\t\t\t\tkind: \"native\",\n\t\t\t\t\tresource: resourceKey,\n\t\t\t\t\trawEvent,\n\t\t\t\t\trelativePath: projectNativeRelativePath(nativePath, relativePath),\n\t\t\t\t\tsequence: ++active.sequence,\n\t\t\t\t\tobservedAt: backendNow()\n\t\t\t\t};\n\t\t\t\tactive.subscribers.forEach((current) => {\n\t\t\t\t\tcurrent.rawEmitter(rawEvent, relativePath, { watchedPath: current.watchedPath });\n\t\t\t\t\tcurrent.publish(trigger);\n\t\t\t\t});\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tif (isRecursiveWatchUnsupported(error)) {\n\t\t\t\trecursiveWatchUnsupported = true;\n\t\t\t\treturn { kind: \"unsupported\" };\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tkind: \"failed\",\n\t\t\t\terror\n\t\t\t};\n\t\t}\n\t\tcreated = resource = {\n\t\t\tresource: resourceKey,\n\t\t\tgeneration: allocateSharedResourceGeneration(),\n\t\t\tsubscribers: /* @__PURE__ */ new Set(),\n\t\t\tclosed: false,\n\t\t\twatcher,\n\t\t\tsequence: 0\n\t\t};\n\t\tRecursiveWatchInstances.set(resourceKey, resource);\n\t\twatcher.on(EV$1.ERROR, (error) => failRecursiveResource(resource, error));\n\t}\n\tattachWatcherSubscriber(resource, subscriber);\n\tconst subscription = createWatcherSubscription(resource, subscriber, RecursiveWatchInstances);\n\tif (signal.aborted) subscription.close();\n\treturn {\n\t\tkind: \"subscribed\",\n\t\tsubscription\n\t};\n}\n/**\n* Instantiates the fs_watch interface\n* @param path to be watched\n* @param options to be passed to fs_watch\n* @param listener main event handler\n* @param errHandler emits info about errors\n* @param emitRaw emits raw event data\n* @returns {NativeFsWatcher}\n*/\nfunction createFsWatchInstance(path, options, listener, errHandler) {\n\ttry {\n\t\treturn nativeWatchFactory(path, { persistent: options.persistent }, listener);\n\t} catch (error) {\n\t\terrHandler(error);\n\t\treturn;\n\t}\n}\n/**\n* Publish one invalidation to subscribers of an exact native resource.\n*/\nfunction publishNativeTrigger(cont, rawEvent, relativePath, emitRaw, rawRelativePath = relativePath) {\n\tif (cont.closed || FsWatchInstances.get(cont.resource) !== cont) return;\n\tconst trigger = {\n\t\tkind: \"native\",\n\t\tresource: cont.resource,\n\t\trawEvent,\n\t\trelativePath,\n\t\tsequence: ++cont.sequence,\n\t\tobservedAt: backendNow()\n\t};\n\tcont.subscribers.forEach((subscriber) => {\n\t\tif (emitRaw) subscriber.rawEmitter(rawEvent, rawRelativePath, { watchedPath: subscriber.watchedPath });\n\t\tsubscriber.publish(trigger);\n\t});\n}\nfunction broadcastNativeError(cont, error) {\n\tif (cont.closed || FsWatchInstances.get(cont.resource) !== cont) return;\n\tcont.subscribers.forEach((subscriber) => subscriber.errHandler(error));\n}\nfunction closeFailedNativeResource(cont, error) {\n\tinvalidateWatcherResource(cont, FsWatchInstances)?.forEach((subscriber) => subscriber.failure?.(error));\n}\nasync function handleNativeError(path, cont, error) {\n\tif (isWindows && error.code === \"EPERM\") try {\n\t\tawait (await open(path, \"r\")).close();\n\t\tbroadcastNativeError(cont, error);\n\t} catch {\n\t\tpublishNativeTrigger(cont, \"rename\", null, false);\n\t}\n\telse broadcastNativeError(cont, error);\n\tcloseFailedNativeResource(cont, error);\n}\n/**\n* inotify reports a watched directory's own deletion (IN_DELETE_SELF, IN_IGNORED)\n* as `rename` of its basename, after which the handle is dead. When the directory\n* was recreated before this callback ran, nothing else reveals that: ext4 even\n* reuses the inode number. Retire the handle so subscribers re-subscribe the new\n* directory and reconcile it. A same-named child that still exists is no sign.\n*/\nasync function retireIfSelfRemoved(cont, nativePath) {\n\ttry {\n\t\tawait lstat(sp.join(nativePath, sp.basename(nativePath)));\n\t\treturn;\n\t} catch (error) {\n\t\tif (!isMissingError(error)) return;\n\t}\n\ttry {\n\t\tif (!(await stat(nativePath)).isDirectory()) return;\n\t} catch {\n\t\treturn;\n\t}\n\tif (cont.closed || FsWatchInstances.get(cont.resource) !== cont) return;\n\tcloseFailedNativeResource(cont, /* @__PURE__ */ new Error(`Watched directory was replaced: ${nativePath}`));\n}\nfunction createNativeContainer(path, nativePath, resourceKey, options, subscriber) {\n\tlet cont;\n\tconst watcher = createFsWatchInstance(nativePath, options, (rawEvent, relativePath) => {\n\t\tconst projectedPath = projectNativeRelativePath(nativePath, relativePath);\n\t\tpublishNativeTrigger(cont, rawEvent, projectedPath, true, relativePath);\n\t\tif (isLinux && rawEvent === \"rename\" && relativePath === sp.basename(nativePath)) retireIfSelfRemoved(cont, nativePath);\n\t}, subscriber.errHandler);\n\tif (!watcher) return;\n\tcont = {\n\t\tresource: resourceKey,\n\t\tgeneration: allocateSharedResourceGeneration(),\n\t\tsubscribers: /* @__PURE__ */ new Set([subscriber]),\n\t\tclosed: false,\n\t\twatcher,\n\t\tsequence: 0\n\t};\n\tFsWatchInstances.set(resourceKey, cont);\n\twatcher.on(EV$1.ERROR, (error) => {\n\t\thandleNativeError(path, cont, error);\n\t});\n\treturn cont;\n}\n/**\n* Instantiates the fs_watch interface or binds listeners\n* to an existing one covering the same file system entry\n* @param path\n* @param fullPath absolute path\n* @param options to be passed to fs_watch\n* @param handlers container for event listener functions\n*/\nfunction setFsWatchListener(path, fullPath, options, handlers, signal) {\n\tconst resourceKey = fullPath;\n\tconst subscriber = {\n\t\t...handlers,\n\t\twatchedPath: path,\n\t\tpersistent: options.persistent ?? true\n\t};\n\tlet cont = FsWatchInstances.get(resourceKey);\n\tif (cont) attachWatcherSubscriber(cont, subscriber);\n\telse {\n\t\tcont = createNativeContainer(path, toNativeWatchPath(path), resourceKey, options, subscriber);\n\t\tif (!cont) return;\n\t}\n\tconst subscription = createWatcherSubscription(cont, subscriber, FsWatchInstances);\n\tif (signal.aborted) {\n\t\tsubscription.close();\n\t\treturn;\n\t}\n\treturn subscription;\n}\nconst MISSING_POLL_OBSERVATION = Object.freeze({ missing: true });\nconst PollingInstances = /* @__PURE__ */ new Map();\nfunction isMissingObservation(observation) {\n\treturn \"missing\" in observation;\n}\nfunction observationsDiffer(previous, current) {\n\tconst previousMissing = isMissingObservation(previous);\n\tconst currentMissing = isMissingObservation(current);\n\tif (previousMissing || currentMissing) return previousMissing !== currentMissing;\n\tconst reliableInodeChanged = !isWindows && previous.ino !== 0 && current.ino !== 0 && previous.ino !== current.ino;\n\treturn previous.size !== current.size || previous.mtimeMs !== current.mtimeMs || reliableInodeChanged;\n}\nfunction setTimerPersistence(resource) {\n\tif (!resource.timer) return;\n\tif (resource.persistent) resource.timer.ref();\n\telse resource.timer.unref();\n}\nfunction schedulePoll(resource, delay = resource.interval) {\n\tif (resource.closed || resource.subscribers.size === 0) return;\n\tresource.timer = resource.scheduler.setTimeout(() => {\n\t\tresource.timer = void 0;\n\t\tconst currentPoll = pollResource(resource);\n\t\tresource.currentPoll = currentPoll;\n\t\tcurrentPoll.then(() => {\n\t\t\tif (resource.currentPoll === currentPoll) resource.currentPoll = void 0;\n\t\t}, () => {\n\t\t\tif (resource.currentPoll === currentPoll) resource.currentPoll = void 0;\n\t\t});\n\t}, delay);\n\tsetTimerPersistence(resource);\n}\nasync function pollResource(resource) {\n\tif (resource.closed || resource.running || resource.subscribers.size === 0) return;\n\tresource.running = true;\n\tconst startedAt = resource.scheduler.now();\n\tlet current;\n\ttry {\n\t\tcurrent = await stat(resource.resource);\n\t} catch (error) {\n\t\tif (isMissingError(error)) current = MISSING_POLL_OBSERVATION;\n\t\telse resource.subscribers.forEach((subscriber) => subscriber.errHandler(error));\n\t}\n\tif (!resource.closed && current) {\n\t\tconst previous = resource.previous;\n\t\tresource.previous = current;\n\t\tconst now = resource.scheduler.now();\n\t\tconst changed = previous && observationsDiffer(previous, current);\n\t\tconst directoryReplayDue = resource.directoryReplayAt !== void 0 && now >= resource.directoryReplayAt;\n\t\tif (!isMissingObservation(current) && current.isDirectory()) {\n\t\t\tif (changed) resource.directoryReplayAt = now + POLL_DIRECTORY_RECHECK_DELAY;\n\t\t\telse if (directoryReplayDue) resource.directoryReplayAt = void 0;\n\t\t} else resource.directoryReplayAt = void 0;\n\t\tif (previous && (changed || directoryReplayDue)) {\n\t\t\tconst trigger = {\n\t\t\t\tkind: \"poll\",\n\t\t\t\tresource: resource.resource,\n\t\t\t\tcurrent,\n\t\t\t\tprevious,\n\t\t\t\tsequence: ++resource.sequence,\n\t\t\t\tobservedAt: resource.scheduler.now()\n\t\t\t};\n\t\t\tresource.subscribers.forEach((subscriber) => {\n\t\t\t\tsubscriber.rawEmitter(EV$1.CHANGE, resource.resource, {\n\t\t\t\t\tcurrent,\n\t\t\t\t\tprevious\n\t\t\t\t});\n\t\t\t\tsubscriber.publish(trigger);\n\t\t\t});\n\t\t}\n\t}\n\tresource.running = false;\n\tif (!resource.closed && resource.subscribers.size > 0) {\n\t\tconst elapsed = resource.scheduler.now() - startedAt;\n\t\tschedulePoll(resource, Math.max(0, resource.interval - elapsed));\n\t}\n}\nfunction reconfigurePollResource(resource) {\n\tif (resource.closed || resource.subscribers.size === 0) return;\n\tconst interval = Math.min(...[...resource.subscribers].map((subscriber) => subscriber.interval));\n\tconst persistent = [...resource.subscribers].some((subscriber) => subscriber.persistent);\n\tconst intervalChanged = resource.interval !== interval;\n\tresource.interval = interval;\n\tresource.persistent = persistent;\n\tif (resource.timer && intervalChanged) {\n\t\tresource.scheduler.clearTimeout(resource.timer);\n\t\tresource.timer = void 0;\n\t\tschedulePoll(resource);\n\t} else if (resource.timer) setTimerPersistence(resource);\n\telse if (!resource.running) schedulePoll(resource);\n}\n/**\n* Adds a subscriber to a Chokidar-owned polling resource.\n*/\nfunction setPollingListener(path, fullPath, options, scheduler, handlers, initialStats, signal) {\n\tconst resourceKey = fullPath;\n\tconst subscriber = {\n\t\twatchedPath: path,\n\t\t...options,\n\t\t...handlers\n\t};\n\tlet resources = PollingInstances.get(resourceKey);\n\tif (!resources) {\n\t\tresources = /* @__PURE__ */ new Map();\n\t\tPollingInstances.set(resourceKey, resources);\n\t}\n\tlet resource = resources.get(scheduler);\n\tif (!resource) {\n\t\tresource = {\n\t\t\tresource: resourceKey,\n\t\t\tgeneration: allocateSharedResourceGeneration(),\n\t\t\tscheduler,\n\t\t\tsubscribers: /* @__PURE__ */ new Set(),\n\t\t\tinterval: options.interval,\n\t\t\tpersistent: options.persistent,\n\t\t\tprevious: initialStats,\n\t\t\trunning: false,\n\t\t\tclosed: false,\n\t\t\tsequence: 0\n\t\t};\n\t\tresources.set(scheduler, resource);\n\t} else if (!resource.previous && initialStats) resource.previous = initialStats;\n\tresource.subscribers.add(subscriber);\n\treconfigurePollResource(resource);\n\tlet closed = false;\n\tlet closePromise;\n\tconst subscription = {\n\t\tresource: resourceKey,\n\t\tclose: () => {\n\t\t\tif (closePromise) return closePromise;\n\t\t\tclosePromise = (async () => {\n\t\t\t\tif (closed) return;\n\t\t\t\tclosed = true;\n\t\t\t\tresource.subscribers.delete(subscriber);\n\t\t\t\tif (resource.subscribers.size > 0) {\n\t\t\t\t\treconfigurePollResource(resource);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (resource.closed) return;\n\t\t\t\tresource.closed = true;\n\t\t\t\tif (resource.timer) resource.scheduler.clearTimeout(resource.timer);\n\t\t\t\tresource.timer = void 0;\n\t\t\t\tconst currentResources = PollingInstances.get(resourceKey);\n\t\t\t\tif (currentResources?.get(scheduler) === resource) {\n\t\t\t\t\tcurrentResources.delete(scheduler);\n\t\t\t\t\tif (currentResources.size === 0) PollingInstances.delete(resourceKey);\n\t\t\t\t}\n\t\t\t\tif (resource.currentPoll) await Promise.allSettled([resource.currentPoll]);\n\t\t\t})();\n\t\t\treturn closePromise;\n\t\t}\n\t};\n\tif (signal.aborted) {\n\t\tsubscription.close();\n\t\treturn;\n\t}\n\treturn subscription;\n}\n// ../../node_modules/.pnpm/chokidar@6.0.0/node_modules/chokidar/tree.js\n/**\n* Owns every asynchronous task and backend subscription created by one public\n* watcher. It deliberately knows nothing about paths, events, or backends.\n*/\nvar LifecycleScope = class {\n\tstate = \"OPEN\";\n\tgeneration = 0;\n\tabortController = new AbortController();\n\ttasks = /* @__PURE__ */ new Set();\n\tclosers = /* @__PURE__ */ new Map();\n\tonTaskSettled;\n\tonTaskError;\n\tconstructor(onTaskSettled, onTaskError) {\n\t\tthis.onTaskSettled = onTaskSettled;\n\t\tthis.onTaskError = onTaskError;\n\t}\n\tisActive(generation) {\n\t\treturn this.state === \"OPEN\" && this.generation === generation;\n\t}\n\ttrack(task) {\n\t\tconst tracked = Promise.resolve(task).finally(() => {\n\t\t\tthis.tasks.delete(tracked);\n\t\t\tthis.onTaskSettled();\n\t\t});\n\t\tthis.tasks.add(tracked);\n\t\ttracked.catch(this.onTaskError);\n\t\treturn tracked;\n\t}\n\taddCloser(key, closer) {\n\t\tconst existing = this.closers.get(key);\n\t\tif (existing) existing.push(closer);\n\t\telse this.closers.set(key, [closer]);\n\t}\n\ttakeClosers(key) {\n\t\tconst closers = this.closers.get(key) ?? [];\n\t\tthis.closers.delete(key);\n\t\treturn closers;\n\t}\n\tbeginClose() {\n\t\tif (this.state !== \"OPEN\") return [];\n\t\tthis.state = \"CLOSING\";\n\t\tthis.generation += 1;\n\t\tthis.abortController.abort();\n\t\tconst closing = [];\n\t\tthis.closers.forEach((closers) => {\n\t\t\tclosers.forEach((closer) => {\n\t\t\t\ttry {\n\t\t\t\t\tclosing.push(Promise.resolve(closer()));\n\t\t\t\t} catch (error) {\n\t\t\t\t\tclosing.push(Promise.reject(error));\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t\tthis.closers.clear();\n\t\treturn closing;\n\t}\n\tasync drain() {\n\t\twhile (this.tasks.size > 0) await Promise.allSettled([...this.tasks]);\n\t}\n\tfinishClose() {\n\t\tthis.state = \"CLOSED\";\n\t}\n};\nfunction IGNORE_RECONCILIATION_ERROR() {}\nfunction resolveRecursiveCandidate(root, relativePath) {\n\tif (sp.isAbsolute(relativePath)) return;\n\tconst absoluteRoot = sp.resolve(root);\n\tif (!isSameOrInside(absoluteRoot, sp.resolve(absoluteRoot, relativePath))) return;\n\treturn sp.join(root, relativePath);\n}\n/** Serializes commits per root and coalesces redundant candidate invalidations. */\nvar ReconciliationQueue = class {\n\tqueues = /* @__PURE__ */ new Map();\n\tpending = /* @__PURE__ */ new Map();\n\tlifecycle;\n\tconstructor(lifecycle) {\n\t\tthis.lifecycle = lifecycle;\n\t}\n\tenqueue(scope, work, coalescePath = scope) {\n\t\tconst key = logicalPathKey(scope);\n\t\tconst pendingKey = coalescePath === false ? void 0 : `${key}\\0${logicalPathKey(coalescePath)}`;\n\t\tconst existing = pendingKey ? this.pending.get(pendingKey) : void 0;\n\t\tif (existing) {\n\t\t\texisting.work = work;\n\t\t\texisting.replay = true;\n\t\t\treturn existing.promise;\n\t\t}\n\t\tconst generation = this.lifecycle.generation;\n\t\tconst reconciliation = {\n\t\t\tpromise: Promise.resolve(),\n\t\t\twork,\n\t\t\treplay: false\n\t\t};\n\t\tconst task = (this.queues.get(key) ?? Promise.resolve()).catch(IGNORE_RECONCILIATION_ERROR).then(async () => {\n\t\t\tdo {\n\t\t\t\tconst currentWork = reconciliation.work;\n\t\t\t\treconciliation.replay = false;\n\t\t\t\tif (!this.lifecycle.isActive(generation)) return;\n\t\t\t\tawait currentWork();\n\t\t\t} while (reconciliation.replay);\n\t\t}).finally(() => {\n\t\t\tif (this.queues.get(key) === task) this.queues.delete(key);\n\t\t\tif (pendingKey && this.pending.get(pendingKey) === reconciliation) this.pending.delete(pendingKey);\n\t\t});\n\t\tthis.queues.set(key, task);\n\t\tconst tracked = this.lifecycle.track(task);\n\t\treconciliation.promise = tracked;\n\t\tif (pendingKey) this.pending.set(pendingKey, reconciliation);\n\t\treturn tracked;\n\t}\n\tforgetPending(predicate) {\n\t\tfor (const key of this.pending.keys()) {\n\t\t\tconst [scope, candidate] = key.split(\"\\0\", 2);\n\t\t\tif (predicate(scope, candidate)) this.pending.delete(key);\n\t\t}\n\t}\n\tclear() {\n\t\tthis.queues.clear();\n\t\tthis.pending.clear();\n\t}\n};\nconst CURRENT = \".\";\nconst PARENT = \"..\";\nconst RECURSIVE_CREATE_BURST_WINDOW = 25;\nconst RECURSIVE_WRITE_BURST_WINDOW = 10;\nconst INITIAL_OBSERVATION_FACT = Object.freeze({\n\tsize: 0,\n\tmtimeMs: 0,\n\tino: 0,\n\tkind: \"other\",\n\tinitialRecursive: true\n});\nfunction statKind(stats) {\n\treturn stats.isSymbolicLink() ? \"symlink\" : stats.isDirectory() ? \"directory\" : stats.isFile() ? \"file\" : \"other\";\n}\nfunction sameStatFact(fact, stats) {\n\tconst current = statIdentity(stats);\n\treturn fact?.size === current.size && fact.mtimeMs === current.mtimeMs && fact.ino === current.ino && fact.kind === statKind(stats);\n}\nfunction withinWindow(fact, trigger, window) {\n\treturn fact?.observedAt !== void 0 && trigger.observedAt >= fact.observedAt && trigger.observedAt - fact.observedAt <= window;\n}\n/** A directory membership snapshot owned by one public watcher. */\nvar DirEntry = class {\n\tpath;\n\titems = /* @__PURE__ */ new Set();\n\tconstructor(dir) {\n\t\tthis.path = dir;\n\t}\n\tadd(item) {\n\t\tif (item !== CURRENT && item !== PARENT && item !== \"\") this.items.add(item);\n\t}\n\t/** Returns true when removing `item` left the directory empty. */\n\tremove(item) {\n\t\treturn this.items.delete(item) && this.items.size === 0;\n\t}\n\thas(item) {\n\t\treturn this.items.has(item);\n\t}\n\tgetChildren() {\n\t\treturn [...this.items];\n\t}\n\tdispose() {\n\t\tthis.items.clear();\n\t\tthis.path = \"\";\n\t}\n};\n/**\n* Per-watcher filesystem truth. Backends never mutate this object directly;\n* scanner and reconciliation stages commit observations through it.\n*/\nvar TreeState = class {\n\twatched = /* @__PURE__ */ new Map();\n\tobserved = /* @__PURE__ */ new Map();\n\tsymlinkPaths = /* @__PURE__ */ new Map();\n\trecursiveRoots = /* @__PURE__ */ new Set();\n\tobservesNative;\n\tconstructor(observesNative) {\n\t\tthis.observesNative = observesNative;\n\t}\n\tgetDirectory(directory) {\n\t\tconst dir = sp.resolve(directory);\n\t\tconst key = logicalPathKey(dir);\n\t\tlet entry = this.watched.get(key);\n\t\tif (!entry) {\n\t\t\tentry = new DirEntry(dir);\n\t\t\tthis.watched.set(key, entry);\n\t\t}\n\t\treturn entry;\n\t}\n\t/** Looks up a directory entry without creating one. */\n\tpeekDirectory(directory) {\n\t\treturn this.watched.get(logicalPathKey(sp.resolve(directory)));\n\t}\n\trecordObserved(path, stats, transition, trigger, initialRecursive = false, retainWithoutTrigger = false) {\n\t\tif (!this.observesNative()) return;\n\t\tif (!trigger && !initialRecursive && !retainWithoutTrigger) return;\n\t\tconst { size, mtimeMs, ino } = statIdentity(stats);\n\t\tthis.observed.set(logicalPathKey(path), {\n\t\t\tsize,\n\t\t\tmtimeMs,\n\t\t\tino,\n\t\t\tkind: statKind(stats),\n\t\t\ttransition,\n\t\t\trawEvent: trigger?.rawEvent,\n\t\t\trelativePath: trigger?.relativePath,\n\t\t\tobservedAt: trigger?.observedAt,\n\t\t\tinitialRecursive\n\t\t});\n\t}\n\tconsumeInitialCreate(path, stats, trigger, ignoreInitial) {\n\t\tif (!this.observed.get(logicalPathKey(path))?.initialRecursive || trigger.rawEvent !== \"rename\") return;\n\t\tthis.recordObserved(path, stats, \"add\", trigger);\n\t\tif (!ignoreInitial) return false;\n\t\treturn stats.isDirectory() ? EVENTS.ADD_DIR : EVENTS.ADD;\n\t}\n\tmarkInitialCreate(path) {\n\t\tconst key = logicalPathKey(path);\n\t\tconst fact = this.observed.get(key);\n\t\tif (fact) fact.initialRecursive = true;\n\t\telse this.observed.set(key, { ...INITIAL_OBSERVATION_FACT });\n\t}\n\tclearInitialCreate(path) {\n\t\tconst fact = this.observed.get(logicalPathKey(path));\n\t\tif (fact) fact.initialRecursive = false;\n\t}\n\tclearInitialCreates(root) {\n\t\tconst rootKey = logicalPathKey(root);\n\t\tfor (const [path, fact] of this.observed) if (isSameOrInside(rootKey, path) && fact.initialRecursive) fact.initialRecursive = false;\n\t}\n\t/** True when a tracked directory path now names a different directory inode. */\n\treplacedSinceObserved(path, stats) {\n\t\tconst previous = this.observed.get(logicalPathKey(path));\n\t\tconst { ino } = statIdentity(stats);\n\t\treturn previous?.kind === \"directory\" && stats.isDirectory() && previous.ino !== 0 && ino !== 0 && previous.ino !== ino;\n\t}\n\t/** True when `stats` no longer matches a recorded fact of the same kind. */\n\tchangedSinceObserved(path, stats) {\n\t\tconst previous = this.observed.get(logicalPathKey(path));\n\t\treturn previous !== void 0 && previous.kind === statKind(stats) && !sameStatFact(previous, stats);\n\t}\n\tisDuplicateObservation(path, stats, trigger) {\n\t\tconst previous = this.observed.get(logicalPathKey(path));\n\t\tconst sameFact = sameStatFact(previous, stats);\n\t\tconst duplicateCreate = sameFact && previous?.transition === \"add\" && previous?.relativePath === trigger.relativePath && previous.rawEvent === \"rename\" && trigger.rawEvent === \"change\" && withinWindow(previous, trigger, RECURSIVE_CREATE_BURST_WINDOW);\n\t\tconst duplicateUnchanged = sameFact && stats.isFile() && !previous?.initialRecursive && (previous?.transition === \"add\" || trigger.relativePath === null);\n\t\tconst duplicateWrite = sameFact && previous?.transition === \"change\" && previous.relativePath === trigger.relativePath && withinWindow(previous, trigger, RECURSIVE_WRITE_BURST_WINDOW) && previous.rawEvent === trigger.rawEvent;\n\t\tconst duplicate = duplicateUnchanged || duplicateCreate || duplicateWrite;\n\t\tconst transition = duplicateWrite ? void 0 : duplicateUnchanged ? previous?.transition : \"change\";\n\t\tthis.recordObserved(path, stats, transition, trigger);\n\t\treturn duplicate;\n\t}\n\tdispose() {\n\t\tthis.watched.forEach((entry) => entry.dispose());\n\t\tthis.watched.clear();\n\t\tthis.observed.clear();\n\t\tthis.symlinkPaths.clear();\n\t\tthis.recursiveRoots.clear();\n\t}\n};\n// ../../node_modules/.pnpm/chokidar@6.0.0/node_modules/chokidar/policy.js\n/**\n* `writeFile` creates or truncates before it writes, and a callback can stat the\n* file in between (always on Windows with Node 22/24). An `add` or leading\n* `change` that sees an empty file is held until the data arrives, at most this\n* long: one event, with the written stats.\n*/\nconst EMPTY_FILE_HOLD = 10;\nfunction isEmptyFile(stats) {\n\treturn stats !== void 0 && stats.isFile() && statIdentity(stats).size === 0;\n}\nfunction sameChangeStats(left, right) {\n\tif (left === void 0 || right === void 0) return false;\n\tconst a = statIdentity(left);\n\tconst b = statIdentity(right);\n\treturn a.size === b.size && a.mtimeMs === b.mtimeMs && a.ino === b.ino;\n}\n/** Converts truthful tree transitions into the public, timing-aware event API. */\nvar EventPolicy = class {\n\tpendingWrites = /* @__PURE__ */ new Map();\n\tpendingUnlinks = /* @__PURE__ */ new Map();\n\tpendingChanges = /* @__PURE__ */ new Map();\n\theldAdds = /* @__PURE__ */ new Map();\n\tthrottled = /* @__PURE__ */ new Map();\n\tcontext;\n\tconstructor(context) {\n\t\tthis.context = context;\n\t}\n\tpresentPath(path) {\n\t\tif (isWindows) path = sp.normalize(path);\n\t\treturn this.context.options.cwd ? sp.relative(this.context.options.cwd, path) : path;\n\t}\n\tdropHeldAdd(logicalKey) {\n\t\tconst held = this.heldAdds.get(logicalKey);\n\t\tif (held) this.context.scheduler.clearTimeout(held.timer);\n\t\tthis.heldAdds.delete(logicalKey);\n\t}\n\tdropPendingChange(logicalKey) {\n\t\tconst pending = this.pendingChanges.get(logicalKey);\n\t\tif (pending?.held) this.context.scheduler.clearTimeout(pending.held.timer);\n\t\tthis.pendingChanges.delete(logicalKey);\n\t}\n\tsetTimeout(callback, delay) {\n\t\tconst timer = this.context.scheduler.setTimeout(callback, delay);\n\t\tif (!this.context.options.persistent) timer.unref();\n\t\treturn timer;\n\t}\n\tasync emit(event, path, stats) {\n\t\tif (this.context.isClosed()) return;\n\t\tconst { options, scheduler } = this.context;\n\t\tconst sourcePath = path;\n\t\tconst logicalKey = logicalPathKey(path);\n\t\tconst generation = this.context.lifecycle.generation;\n\t\tconst pathGeneration = this.context.capturePathGeneration();\n\t\tpath = this.presentPath(path);\n\t\tconst args = [path];\n\t\tif (stats != null) args.push(stats);\n\t\tconst heldAdd = this.heldAdds.get(logicalKey);\n\t\tif (heldAdd) {\n\t\t\tif (event === EVENTS.CHANGE) {\n\t\t\t\theldAdd.path = sourcePath;\n\t\t\t\tif (stats) heldAdd.stats = stats;\n\t\t\t\tif (!isEmptyFile(stats)) heldAdd.release();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\theldAdd.release();\n\t\t}\n\t\tif (event === EVENTS.UNLINK || event === EVENTS.UNLINK_DIR) {\n\t\t\tthis.dropPendingChange(logicalKey);\n\t\t\tthis.throttled.get(EVENTS.CHANGE)?.get(logicalKey)?.clear(false);\n\t\t}\n\t\tconst awf = options.awaitWriteFinish;\n\t\tconst pendingWrite = awf ? this.pendingWrites.get(logicalKey) : void 0;\n\t\tif (pendingWrite) {\n\t\t\tpendingWrite.lastChange = scheduler.now();\n\t\t\treturn;\n\t\t}\n\t\tif (options.atomic) {\n\t\t\tif (event === EVENTS.UNLINK) {\n\t\t\t\tconst existing = this.pendingUnlinks.get(logicalKey);\n\t\t\t\tif (existing) scheduler.clearTimeout(existing.timer);\n\t\t\t\tconst entry = [event, ...args];\n\t\t\t\tconst timer = this.setTimeout(() => {\n\t\t\t\t\tconst pending = this.pendingUnlinks.get(logicalKey);\n\t\t\t\t\tif (!pending || pending.timer !== timer) return;\n\t\t\t\t\tthis.pendingUnlinks.delete(logicalKey);\n\t\t\t\t\tif (this.context.isClosed()) return;\n\t\t\t\t\tconst [pendingEvent, ...pendingArgs] = pending.event;\n\t\t\t\t\tthis.context.publish(pendingEvent, pendingArgs);\n\t\t\t\t}, typeof options.atomic === \"number\" ? options.atomic : 100);\n\t\t\t\tthis.pendingUnlinks.set(logicalKey, {\n\t\t\t\t\tevent: entry,\n\t\t\t\t\ttimer\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst pendingUnlink = this.pendingUnlinks.get(logicalKey);\n\t\t\tif (event === EVENTS.ADD && pendingUnlink) {\n\t\t\t\tevent = EVENTS.CHANGE;\n\t\t\t\tscheduler.clearTimeout(pendingUnlink.timer);\n\t\t\t\tthis.pendingUnlinks.delete(logicalKey);\n\t\t\t}\n\t\t}\n\t\tif (awf && (event === EVENTS.ADD || event === EVENTS.CHANGE) && this.context.isReady()) {\n\t\t\tconst awfEmit = (error, currentStats) => {\n\t\t\t\tif (this.context.isClosed()) return;\n\t\t\t\tif (error) {\n\t\t\t\t\tevent = EVENTS.ERROR;\n\t\t\t\t\targs[0] = error;\n\t\t\t\t\tthis.context.publish(event, args);\n\t\t\t\t} else if (currentStats) {\n\t\t\t\t\tif (args.length > 1) args[1] = currentStats;\n\t\t\t\t\telse args.push(currentStats);\n\t\t\t\t\tthis.context.publish(event, args);\n\t\t\t\t}\n\t\t\t};\n\t\t\tthis.awaitWriteFinish(path, awf.stabilityThreshold, event, awfEmit, logicalKey);\n\t\t\treturn;\n\t\t}\n\t\tif (event === EVENTS.ADD && isEmptyFile(stats) && this.context.isReady()) {\n\t\t\tconst held = {\n\t\t\t\tpath: sourcePath,\n\t\t\t\tstats,\n\t\t\t\trelease: () => {\n\t\t\t\t\tthis.context.scheduler.clearTimeout(held.timer);\n\t\t\t\t\tif (this.heldAdds.get(logicalKey) !== held) return;\n\t\t\t\t\tthis.heldAdds.delete(logicalKey);\n\t\t\t\t\tif (this.context.isClosed() || !this.context.lifecycle.isActive(generation) || !this.context.isPathGenerationActive(logicalKey, pathGeneration)) return;\n\t\t\t\t\tconst heldArgs = [this.presentPath(held.path)];\n\t\t\t\t\tif (held.stats) heldArgs.push(held.stats);\n\t\t\t\t\tthis.context.publish(EVENTS.ADD, heldArgs);\n\t\t\t\t}\n\t\t\t};\n\t\t\theld.timer = this.setTimeout(held.release, EMPTY_FILE_HOLD);\n\t\t\tthis.heldAdds.set(logicalKey, held);\n\t\t\treturn;\n\t\t}\n\t\tif (event === EVENTS.CHANGE) {\n\t\t\tif (!this.throttle(EVENTS.CHANGE, sourcePath, 50, (suppressedCount) => {\n\t\t\t\tconst pending = this.pendingChanges.get(logicalKey);\n\t\t\t\tthis.dropPendingChange(logicalKey);\n\t\t\t\tif (suppressedCount > 0 && pending?.replay && this.context.lifecycle.isActive(generation) && this.context.isPathGenerationActive(logicalKey, pathGeneration)) this.emit(EVENTS.CHANGE, pending.path, pending.stats);\n\t\t\t})) {\n\t\t\t\tconst pending = this.pendingChanges.get(logicalKey);\n\t\t\t\tif (pending && !sameChangeStats(pending.stats, stats)) {\n\t\t\t\t\tpending.path = sourcePath;\n\t\t\t\t\tpending.stats = stats;\n\t\t\t\t\tpending.replay = true;\n\t\t\t\t\tif (pending.held && !isEmptyFile(stats)) pending.held.release();\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst pending = {\n\t\t\t\tpath: sourcePath,\n\t\t\t\tstats,\n\t\t\t\treplay: false\n\t\t\t};\n\t\t\tthis.pendingChanges.set(logicalKey, pending);\n\t\t\tif (isEmptyFile(stats)) {\n\t\t\t\tconst release = () => {\n\t\t\t\t\tif (pending.held) this.context.scheduler.clearTimeout(pending.held.timer);\n\t\t\t\t\tpending.held = void 0;\n\t\t\t\t\tif (this.pendingChanges.get(logicalKey) !== pending || this.context.isClosed() || !this.context.lifecycle.isActive(generation) || !this.context.isPathGenerationActive(logicalKey, pathGeneration)) return;\n\t\t\t\t\tpending.replay = false;\n\t\t\t\t\tconst heldArgs = [this.presentPath(pending.path)];\n\t\t\t\t\tif (pending.stats) heldArgs.push(pending.stats);\n\t\t\t\t\tthis.context.publish(EVENTS.CHANGE, heldArgs);\n\t\t\t\t};\n\t\t\t\tpending.held = {\n\t\t\t\t\ttimer: this.setTimeout(release, EMPTY_FILE_HOLD),\n\t\t\t\t\trelease\n\t\t\t\t};\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tif (options.alwaysStat && stats === void 0 && (event === EVENTS.ADD || event === EVENTS.ADD_DIR || event === EVENTS.CHANGE)) {\n\t\t\tconst fullPath = options.cwd ? sp.join(options.cwd, path) : path;\n\t\t\ttry {\n\t\t\t\tstats = await stat(fullPath);\n\t\t\t} catch (error) {\n\t\t\t\tthis.context.handleError(error);\n\t\t\t}\n\t\t\tif (!stats || !this.context.lifecycle.isActive(generation) || !this.context.isPathGenerationActive(logicalKey, pathGeneration)) return;\n\t\t\targs.push(stats);\n\t\t}\n\t\tthis.context.publish(event, args);\n\t}\n\tthrottle(actionType, path, timeout, onRelease) {\n\t\tlet action = this.throttled.get(actionType);\n\t\tif (!action) {\n\t\t\taction = /* @__PURE__ */ new Map();\n\t\t\tthis.throttled.set(actionType, action);\n\t\t}\n\t\tconst key = actionType === \"readdir\" ? path : logicalPathKey(path);\n\t\tconst active = action.get(key);\n\t\tif (active) {\n\t\t\tactive.count += 1;\n\t\t\treturn false;\n\t\t}\n\t\tlet timeoutObject;\n\t\tconst clear = (invokeRelease = true) => {\n\t\t\tconst item = action.get(key);\n\t\t\tconst count = item?.count ?? 0;\n\t\t\taction.delete(key);\n\t\t\tthis.context.scheduler.clearTimeout(timeoutObject);\n\t\t\tif (item) this.context.scheduler.clearTimeout(item.timeoutObject);\n\t\t\tif (invokeRelease && onRelease) onRelease(count);\n\t\t\treturn count;\n\t\t};\n\t\ttimeoutObject = this.setTimeout(clear, timeout);\n\t\tconst throttler = {\n\t\t\ttimeoutObject,\n\t\t\tclear,\n\t\t\tcount: 0\n\t\t};\n\t\taction.set(key, throttler);\n\t\treturn throttler;\n\t}\n\tawaitWriteFinish(path, threshold, event, awfEmit, logicalKey) {\n\t\tconst awf = this.context.options.awaitWriteFinish;\n\t\tif (typeof awf !== \"object\") return;\n\t\tconst pollInterval = awf.pollInterval;\n\t\tlet timeoutHandler;\n\t\tlet fullPath = path;\n\t\tif (this.context.options.cwd && !sp.isAbsolute(path)) fullPath = sp.join(this.context.options.cwd, path);\n\t\tconst writeKey = logicalKey ?? logicalPathKey(fullPath);\n\t\tif (this.pendingWrites.has(writeKey)) return;\n\t\tconst generation = this.context.lifecycle.generation;\n\t\tconst pending = {\n\t\t\tlastChange: this.context.scheduler.now(),\n\t\t\tcancelWait: () => {\n\t\t\t\tif (this.pendingWrites.get(writeKey) === pending) this.pendingWrites.delete(writeKey);\n\t\t\t\tthis.context.scheduler.clearTimeout(timeoutHandler);\n\t\t\t\treturn event;\n\t\t\t}\n\t\t};\n\t\tconst isCurrent = () => this.context.lifecycle.isActive(generation) && this.pendingWrites.get(writeKey) === pending;\n\t\tconst inspect = (previous) => {\n\t\t\tconst task = (async () => {\n\t\t\t\tlet current;\n\t\t\t\ttry {\n\t\t\t\t\tcurrent = await stat(fullPath);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tif (!isCurrent()) return;\n\t\t\t\t\tif (isMissingError(error)) {\n\t\t\t\t\t\tthis.context.remove(sp.dirname(fullPath), sp.basename(fullPath));\n\t\t\t\t\t\tif (this.pendingWrites.get(writeKey) === pending) pending.cancelWait();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.pendingWrites.delete(writeKey);\n\t\t\t\t\t\tawfEmit(error);\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (!isCurrent()) return;\n\t\t\t\tconst now = this.context.scheduler.now();\n\t\t\t\tif (previous && current.size !== previous.size) pending.lastChange = now;\n\t\t\t\tif (now - pending.lastChange >= threshold) {\n\t\t\t\t\tthis.pendingWrites.delete(writeKey);\n\t\t\t\t\tawfEmit(void 0, current);\n\t\t\t\t} else timeoutHandler = this.setTimeout(() => inspect(current), pollInterval);\n\t\t\t})();\n\t\t\tthis.context.lifecycle.track(task);\n\t\t};\n\t\tthis.pendingWrites.set(writeKey, pending);\n\t\ttimeoutHandler = this.setTimeout(inspect, pollInterval);\n\t}\n\tcancelPath(path) {\n\t\tconst logicalKey = logicalPathKey(path);\n\t\tconst pendingUnlink = this.pendingUnlinks.get(logicalKey);\n\t\tif (pendingUnlink) {\n\t\t\tthis.context.scheduler.clearTimeout(pendingUnlink.timer);\n\t\t\tthis.pendingUnlinks.delete(logicalKey);\n\t\t}\n\t\tthis.pendingWrites.get(logicalKey)?.cancelWait();\n\t\tthis.dropPendingChange(logicalKey);\n\t\tthis.dropHeldAdd(logicalKey);\n\t\t[\n\t\t\t\"watch\",\n\t\t\t\"add\",\n\t\t\t\"remove\",\n\t\t\t\"change\"\n\t\t].forEach((actionType) => {\n\t\t\tthis.throttled.get(actionType)?.get(logicalKey)?.clear(false);\n\t\t});\n\t\tconst readdirEntries = this.throttled.get(\"readdir\");\n\t\treaddirEntries?.get(logicalKey)?.clear(false);\n\t\treaddirEntries?.get(`${logicalPathKey(sp.dirname(logicalKey))}\\0${sp.basename(logicalKey)}`)?.clear(false);\n\t}\n\tcancelWhere(contains) {\n\t\t[.../* @__PURE__ */ new Set([\n\t\t\t...this.pendingUnlinks.keys(),\n\t\t\t...this.pendingWrites.keys(),\n\t\t\t...this.pendingChanges.keys(),\n\t\t\t...this.heldAdds.keys()\n\t\t])].filter(contains).forEach((path) => this.cancelPath(path));\n\t\tthis.throttled.forEach((entries, actionType) => {\n\t\t\t[...entries.keys()].filter((key) => contains(actionType === \"readdir\" ? key.split(\"\\0\", 1)[0] : key)).forEach((key) => entries.get(key)?.clear(false));\n\t\t});\n\t}\n\tclose() {\n\t\tthis.pendingWrites.forEach((pending) => pending.cancelWait());\n\t\tthis.pendingUnlinks.forEach(({ timer }) => this.context.scheduler.clearTimeout(timer));\n\t\tthis.pendingUnlinks.clear();\n\t\tthis.pendingChanges.forEach(({ held }) => this.context.scheduler.clearTimeout(held?.timer));\n\t\tthis.pendingChanges.clear();\n\t\tthis.heldAdds.forEach(({ timer }) => this.context.scheduler.clearTimeout(timer));\n\t\tthis.heldAdds.clear();\n\t\tthis.throttled.forEach((entries) => {\n\t\t\tentries.forEach((throttler) => throttler.clear(false));\n\t\t});\n\t\tthis.throttled.clear();\n\t}\n};\n// ../../node_modules/.pnpm/chokidar@6.0.0/node_modules/chokidar/reconcile.js\nconst EV = EVENTS;\nconst RECURSIVE_TRIGGER_BUFFER_LIMIT = 1024;\nconst MAX_NATIVE_RESUBSCRIBES = 3;\nconst FALLBACK_SUBSCRIBE_CONCURRENCY = 16;\nconst EXACT_CANDIDATE = Object.freeze({});\n/** An invalidation with no name: reconcile the whole subscribed path. */\nfunction recoveryTrigger(resource) {\n\treturn {\n\t\tkind: \"native\",\n\t\tresource,\n\t\trawEvent: EV.CHANGE,\n\t\trelativePath: null,\n\t\tsequence: Number.MAX_SAFE_INTEGER,\n\t\tobservedAt: backendNow()\n\t};\n}\nfunction sameMappedFileSnapshot(left, right) {\n\tif (left === false || right === false) return left === right;\n\treturn left.size === right.size && left.mtimeMs === right.mtimeMs && left.ctimeMs === right.ctimeMs && left.ino === right.ino && left.mode === right.mode;\n}\nvar ReplayBuffer = class {\n\tentries = [];\n\toverflow;\n\tlimit;\n\tconstructor(limit) {\n\t\tthis.limit = limit;\n\t}\n\tget overflowed() {\n\t\treturn this.overflow !== void 0;\n\t}\n\tpush(value) {\n\t\tif (this.entries.length < this.limit && !this.overflowed) this.entries.push(value);\n\t\telse this.overflow = value;\n\t}\n\tclear() {\n\t\tthis.entries.length = 0;\n\t\tthis.overflow = void 0;\n\t}\n};\nfunction consumeDirectoryStream(stream, onEntry) {\n\tconst tasks = [];\n\tstream.on(\"data\", (entry) => {\n\t\tlet result;\n\t\ttry {\n\t\t\tresult = onEntry(entry);\n\t\t} catch (error) {\n\t\t\tresult = Promise.reject(error);\n\t\t}\n\t\tif (!result) return;\n\t\ttasks.push(Promise.resolve(result));\n\t});\n\treturn new Promise((resolve) => {\n\t\tstream.once(\"end\", () => resolve({ complete: true }));\n\t\tstream.once(\"close\", () => resolve({ complete: false }));\n\t\tstream.once(EV.ERROR, (error) => resolve({\n\t\t\tcomplete: false,\n\t\t\terror\n\t\t}));\n\t}).then(async ({ complete, error }) => {\n\t\tconst failures = (await Promise.allSettled(tasks)).filter((result) => result.status === \"rejected\").map((result) => result.reason);\n\t\treturn {\n\t\t\tcomplete: complete && failures.length === 0,\n\t\t\terror,\n\t\t\tfailures\n\t\t};\n\t});\n}\nconst binaryExtensions = new Set(`3dm 3ds 3g2 3gp 7z a aac adp afdesign afphoto afpub ai aif aiff alz ape apk appimage ar arj asf au avi bak baml bh bin bk bmp btif bz2 bzip2 cab caf cgm class cmx cpio cr2 cur dat dcm deb dex djvu dll dmg dng doc docm docx dot dotm dra ds_store dsk dts dtshd dvb dwg dxf ecelp4800 ecelp7470 ecelp9600 egg eol eot epub exe f4v fbs fh fla flac flatpak fli flv fpx fst fvt g3 gh gif graffle gz gzip h261 h263 h264 icns ico ief img ipa iso jar jpeg jpg jpgv jpm jxr key ktx lha lib lvp lz lzh lzma lzo m3u m4a m4v mar mdi mht mid midi mj2 mka mkv mmr mng mobi mov movie mp3 mp4 mp4a mpeg mpg mpga mxu nef npx numbers nupkg o odp ods odt oga ogg ogv otf ott pages pbm pcx pdb pdf pea pgm pic png pnm pot potm potx ppa ppam ppm pps ppsm ppsx ppt pptm pptx psd pya pyc pyo pyv qt rar ras raw resources rgb rip rlc rmf rmvb rpm rtf rz s3m s7z scpt sgi shar snap sil sketch slk smv snk so stl suo sub swf tar tbz tbz2 tga tgz thmx tif tiff tlz ttc ttf txz udf uvh uvi uvm uvp uvs uvu viv vob war wav wax wbmp wdp weba webm webp whl wim wm wma wmv wmx woff woff2 wrm wvx xbm xif xla xlam xls xlsb xlsm xlsx xlt xltm xltx xm xmind xpi xpm xwd xz z zip zipx`.split(\" \"));\nfunction isBinaryPath(filePath) {\n\treturn binaryExtensions.has(sp.extname(filePath).slice(1).toLowerCase());\n}\n/** The only scanner, subscriber, and filesystem transition engine. */\nvar ObservationEngine = class {\n\tfsw;\n\treportError;\n\tconstructor(fsW) {\n\t\tthis.fsw = fsW;\n\t\tthis.reportError = (error) => fsW.handleError(error);\n\t}\n\t/**\n\t* Watch a path with the owned polling scheduler or fs.watch.\n\t* @param path to file or dir\n\t* @param listener on fs change\n\t* @returns closer for the watcher instance\n\t*/\n\tsubscribePath(path, listener, initialStats, mapRelative = false, queueScope = path) {\n\t\tconst opts = this.fsw.options;\n\t\tconst basename = sp.basename(path);\n\t\tconst absolutePath = sp.resolve(path);\n\t\tconst options = { persistent: opts.persistent };\n\t\tconst generation = this.fsw.lifecycle.generation;\n\t\tlet active = true;\n\t\tconst trackedListener = (watchedPath, stats, trigger) => {\n\t\t\tif (!active || !this.fsw.lifecycle.isActive(generation)) return;\n\t\t\treturn listener(watchedPath, stats, trigger);\n\t\t};\n\t\tconst publish = (trigger) => {\n\t\t\tthis.reconcileBackendTrigger(path, mapRelative, trigger, (candidate) => trackedListener(candidate, trigger.kind === \"poll\" && !isMissingObservation(trigger.current) ? trigger.current : void 0, trigger), () => active && this.fsw.lifecycle.isActive(generation), true, queueScope);\n\t\t};\n\t\tlet subscription;\n\t\tlet resubscribes = 0;\n\t\tconst subscribeNative = () => setFsWatchListener(path, absolutePath, options, {\n\t\t\tpublish: (trigger) => {\n\t\t\t\tresubscribes = 0;\n\t\t\t\tpublish(trigger);\n\t\t\t},\n\t\t\terrHandler: this.reportError,\n\t\t\trawEmitter: (...args) => this.fsw.emitRaw(...args),\n\t\t\tfailure: () => {\n\t\t\t\tif (!active || !this.fsw.lifecycle.isActive(generation)) return;\n\t\t\t\tsubscription = resubscribes++ < MAX_NATIVE_RESUBSCRIBES ? subscribeNative() : void 0;\n\t\t\t\tpublish(recoveryTrigger(absolutePath));\n\t\t\t}\n\t\t}, this.fsw.lifecycle.abortController.signal);\n\t\tif (opts.backendCapabilities.polling) subscription = setPollingListener(path, absolutePath, {\n\t\t\tinterval: opts.pollingInterval !== opts.pollingBinaryInterval && isBinaryPath(basename) ? opts.pollingBinaryInterval : opts.pollingInterval,\n\t\t\tpersistent: opts.persistent\n\t\t}, this.fsw.scheduler, {\n\t\t\tpublish,\n\t\t\terrHandler: this.reportError,\n\t\t\trawEmitter: (...args) => this.fsw.emitRaw(...args)\n\t\t}, initialStats, this.fsw.lifecycle.abortController.signal);\n\t\telse subscription = subscribeNative();\n\t\tif (!subscription) return;\n\t\treturn () => {\n\t\t\tif (!active) return;\n\t\t\tactive = false;\n\t\t\treturn subscription?.close();\n\t\t};\n\t}\n\t/**\n\t* Watch a followed file symlink through the target's parent directory.\n\t* macOS also starts a one-shot exact-target fallback: FSEvents can omit the\n\t* first directory callback immediately after a subscription is established.\n\t*/\n\tsubscribeMappedFile(logicalPath, targetPath, helper, depth, useExactFallback = isMacos) {\n\t\tif (this.fsw.options.backendCapabilities.polling) return;\n\t\tconst targetDirectory = sp.dirname(targetPath);\n\t\tconst targetKey = logicalPathKey(targetPath);\n\t\tconst logicalParent = sp.dirname(logicalPath);\n\t\tconst generation = this.fsw.lifecycle.generation;\n\t\tlet active = true;\n\t\tlet exactActive = useExactFallback;\n\t\tlet suppressDirectoryEcho = false;\n\t\tlet fallbackSnapshot;\n\t\tlet directorySubscription;\n\t\tlet exactSubscription;\n\t\tconst isActive = () => active && this.fsw.lifecycle.isActive(generation) && this.isHelperActive(helper, logicalPath);\n\t\tconst matchesTarget = (relativePath) => {\n\t\t\tif (relativePath === null) return true;\n\t\t\tconst candidateKey = logicalPathKey(sp.isAbsolute(relativePath) ? relativePath : sp.resolve(targetDirectory, relativePath));\n\t\t\treturn isWindows ? candidateKey.toLowerCase() === targetKey.toLowerCase() : candidateKey === targetKey;\n\t\t};\n\t\tconst retireExact = () => {\n\t\t\tif (!exactActive) return;\n\t\t\texactActive = false;\n\t\t\tif (exactSubscription) exactSubscription.close();\n\t\t};\n\t\tconst publish = (source, trigger) => {\n\t\t\tif (trigger.kind !== \"native\" || !matchesTarget(trigger.relativePath) || !isActive()) return;\n\t\t\tconst deduplicateAgainstFallback = source === \"directory\" && suppressDirectoryEcho;\n\t\t\tif (source === \"directory\") {\n\t\t\t\tsuppressDirectoryEcho = false;\n\t\t\t\tretireExact();\n\t\t\t} else if (directorySubscription) {\n\t\t\t\tsuppressDirectoryEcho = true;\n\t\t\t\tretireExact();\n\t\t\t}\n\t\t\tthis.reconcileBackendTrigger(targetDirectory, true, trigger, async () => {\n\t\t\t\tif (deduplicateAgainstFallback && fallbackSnapshot !== void 0) {\n\t\t\t\t\tconst current = await this.mappedFileSnapshot(targetPath);\n\t\t\t\t\tif (current !== void 0 && sameMappedFileSnapshot(fallbackSnapshot, current)) return;\n\t\t\t\t}\n\t\t\t\tawait this.reconcileNativeTrigger(logicalParent, helper, trigger, logicalPath, depth - 1, EXACT_CANDIDATE);\n\t\t\t\tif (source === \"exact\") fallbackSnapshot = await this.mappedFileSnapshot(targetPath);\n\t\t\t}, isActive, false, logicalPath);\n\t\t};\n\t\tlet resubscribes = 0;\n\t\tconst handlers = (source) => ({\n\t\t\tpublish: (trigger) => {\n\t\t\t\tif (source === \"directory\") resubscribes = 0;\n\t\t\t\tpublish(source, trigger);\n\t\t\t},\n\t\t\terrHandler: this.reportError,\n\t\t\trawEmitter: (event, relativePath) => {\n\t\t\t\tif ((source === \"directory\" || exactActive) && matchesTarget(relativePath) && isActive()) this.fsw.emitRaw(event, relativePath, { watchedPath: logicalPath });\n\t\t\t},\n\t\t\tfailure: () => {\n\t\t\t\tif (source === \"exact\") {\n\t\t\t\t\texactSubscription = void 0;\n\t\t\t\t\texactActive = false;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tdirectorySubscription = void 0;\n\t\t\t\tif (!isActive()) return;\n\t\t\t\tif (resubscribes++ < MAX_NATIVE_RESUBSCRIBES) directorySubscription = subscribe(source);\n\t\t\t\tpublish(source, recoveryTrigger(sp.resolve(targetDirectory)));\n\t\t\t}\n\t\t});\n\t\tconst subscribe = (source) => {\n\t\t\tconst path = source === \"directory\" ? targetDirectory : targetPath;\n\t\t\treturn setFsWatchListener(path, sp.resolve(path), { persistent: this.fsw.options.persistent }, handlers(source), this.fsw.lifecycle.abortController.signal);\n\t\t};\n\t\tdirectorySubscription = subscribe(\"directory\");\n\t\texactSubscription = useExactFallback ? subscribe(\"exact\") : void 0;\n\t\tif (!exactSubscription) exactActive = false;\n\t\tif (!directorySubscription && !exactSubscription) return;\n\t\treturn async () => {\n\t\t\tif (!active) return;\n\t\t\tactive = false;\n\t\t\tconst subscriptions = [directorySubscription, exactSubscription].filter((subscription) => subscription !== void 0);\n\t\t\tawait Promise.allSettled(subscriptions.map((subscription) => subscription.close()));\n\t\t};\n\t}\n\tasync mappedFileSnapshot(path) {\n\t\ttry {\n\t\t\treturn await lstat(path);\n\t\t} catch (error) {\n\t\t\tif (isMissingError(error)) return false;\n\t\t\tthis.reportError(error);\n\t\t\treturn;\n\t\t}\n\t}\n\t/**\n\t* macOS can follow an exact symlink handle and miss the link's own removal.\n\t* Check only link existence so target-directory activity stays invisible when\n\t* followSymlinks is disabled.\n\t*/\n\twatchSymlinkDeletion(path, force = false) {\n\t\tif (!isMacos && !force || this.fsw.options.backendCapabilities.polling) return;\n\t\tconst fsw = this.fsw;\n\t\tconst generation = fsw.lifecycle.generation;\n\t\tconst directory = sp.dirname(path);\n\t\tconst basename = sp.basename(path);\n\t\tlet active = true;\n\t\tlet timer;\n\t\tconst schedule = () => {\n\t\t\ttimer = fsw.scheduler.setTimeout(() => {\n\t\t\t\ttimer = void 0;\n\t\t\t\t(async () => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait lstat(path);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tif (!active || !fsw.lifecycle.isActive(generation)) return;\n\t\t\t\t\t\tif (isMissingError(error)) {\n\t\t\t\t\t\t\tactive = false;\n\t\t\t\t\t\t\tfsw.removePath(directory, basename);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.reportError(error);\n\t\t\t\t\t}\n\t\t\t\t\tif (active && fsw.lifecycle.isActive(generation)) schedule();\n\t\t\t\t})();\n\t\t\t}, fsw.options.pollingInterval);\n\t\t\tif (!fsw.options.persistent) timer.unref();\n\t\t};\n\t\tschedule();\n\t\treturn () => {\n\t\t\tif (!active) return;\n\t\t\tactive = false;\n\t\t\tfsw.scheduler.clearTimeout(timer);\n\t\t\ttimer = void 0;\n\t\t};\n\t}\n\t/**\n\t* Map one backend notification into a logical candidate and serialize its\n\t* filesystem reconciliation in the owning watcher instance.\n\t*/\n\treconcileBackendTrigger(scope, mapRelative, trigger, reconcile, isActive = () => true, coalesce = true, queueScope = scope) {\n\t\tlet candidate = scope;\n\t\tif (mapRelative && trigger.kind === \"native\" && trigger.relativePath !== null) {\n\t\t\tconst resolved = resolveRecursiveCandidate(scope, trigger.relativePath);\n\t\t\tif (!resolved) {\n\t\t\t\tthis.reportError(/* @__PURE__ */ new Error(`Watcher reported a path outside its root: ${trigger.relativePath}`));\n\t\t\t\treturn Promise.resolve();\n\t\t\t}\n\t\t\tcandidate = resolved;\n\t\t}\n\t\tif (!isActive() || this.fsw.isUnwatched(candidate)) return Promise.resolve();\n\t\tconst rootKey = logicalPathKey(queueScope);\n\t\tconst candidateKey = logicalPathKey(candidate);\n\t\treturn this.fsw.reconciliation.enqueue(rootKey, async () => {\n\t\t\tif (!isActive() || this.fsw.isUnwatched(candidateKey)) return;\n\t\t\tawait reconcile(candidate);\n\t\t}, coalesce ? candidateKey : false);\n\t}\n\t/**\n\t* Watch a file and emit add event if warranted.\n\t* @returns closer for the watcher instance\n\t*/\n\thandleFile(file, stats, initialAdd, watchResource = true, trigger, initialRecursive = false, retainObservation = false) {\n\t\tif (this.fsw.closed) return;\n\t\tconst dirname = sp.dirname(file);\n\t\tconst basename = sp.basename(file);\n\t\tconst parent = this.fsw.tree.getDirectory(dirname);\n\t\tlet prevStats = stats;\n\t\tif (parent.has(basename)) return;\n\t\tconst pathGeneration = this.fsw.capturePathGeneration();\n\t\tconst isActive = () => this.fsw.isPathGenerationActive(file, pathGeneration);\n\t\tconst listener = async (_path, newStats) => {\n\t\t\tif (!newStats || newStats.mtimeMs === 0) try {\n\t\t\t\tconst newStats = prevStats.isSymbolicLink() && !this.fsw.options.followSymlinks ? await lstat(file) : await stat(file);\n\t\t\t\tif (!isActive()) return;\n\t\t\t\tconst at = newStats.atimeMs;\n\t\t\t\tconst mt = newStats.mtimeMs;\n\t\t\t\tif (!at || at <= mt || mt !== prevStats.mtimeMs) this.fsw.emitEvent(EV.CHANGE, file, newStats);\n\t\t\t\tthis.fsw.tree.recordObserved(file, newStats, \"change\");\n\t\t\t\tprevStats = newStats;\n\t\t\t} catch (error) {\n\t\t\t\tif (!isActive()) return;\n\t\t\t\tif (isMissingError(error)) this.fsw.removePath(dirname, basename);\n\t\t\t\telse this.reportError(error);\n\t\t\t}\n\t\t\telse if (parent.has(basename)) {\n\t\t\t\tconst at = newStats.atimeMs;\n\t\t\t\tconst mt = newStats.mtimeMs;\n\t\t\t\tif (!at || at <= mt || mt !== prevStats.mtimeMs) this.fsw.emitEvent(EV.CHANGE, file, newStats);\n\t\t\t\tthis.fsw.tree.recordObserved(file, newStats, \"change\");\n\t\t\t\tprevStats = newStats;\n\t\t\t}\n\t\t};\n\t\tconst closer = watchResource && this.fsw.options.backendCapabilities.polling ? this.subscribePath(file, listener, stats) : void 0;\n\t\tparent.add(basename);\n\t\tthis.fsw.tree.recordObserved(file, stats, \"add\", trigger, initialRecursive, retainObservation);\n\t\tif (!(initialAdd && this.fsw.options.ignoreInitial) && !this.fsw.isIgnored(file, stats)) this.fsw.emitEvent(EV.ADD, file, stats);\n\t\treturn closer;\n\t}\n\t/**\n\t* Handle symlinks encountered while reading a dir.\n\t* @param entry returned by readdirp\n\t* @param directory path of dir being read\n\t* @param path of this item\n\t* @param item basename of this item\n\t* @returns true if no more processing is needed for this entry.\n\t*/\n\tasync handleSymlink(entry, directory, path, item, initialAdd, wh) {\n\t\tif (this.fsw.closed || wh && !this.isHelperActive(wh, path)) return;\n\t\tconst full = logicalPathKey(entry.fullPath);\n\t\tconst dir = this.fsw.tree.getDirectory(directory);\n\t\tif (!this.fsw.options.followSymlinks) {\n\t\t\tlet linkPath;\n\t\t\ttry {\n\t\t\t\tlinkPath = await readlink(path);\n\t\t\t} catch (error) {\n\t\t\t\tif (!isMissingError(error)) this.reportError(error);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif (this.fsw.closed || wh && !this.isHelperActive(wh, path)) return true;\n\t\t\tif (dir.has(item)) {\n\t\t\t\tif (this.fsw.tree.symlinkPaths.get(full) !== linkPath) {\n\t\t\t\t\tthis.fsw.tree.symlinkPaths.set(full, linkPath);\n\t\t\t\t\tthis.fsw.emitEvent(EV.CHANGE, path, entry.stats);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdir.add(item);\n\t\t\t\tthis.fsw.tree.symlinkPaths.set(full, linkPath);\n\t\t\t\tthis.fsw.tree.recordObserved(path, entry.stats, \"add\", wh?.observationTrigger, initialAdd && Boolean(wh?.recursiveRoot));\n\t\t\t\tif (!(initialAdd && this.fsw.options.ignoreInitial)) this.fsw.emitEvent(EV.ADD, path, entry.stats);\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t\tif (this.fsw.tree.symlinkPaths.has(full)) return true;\n\t\tthis.fsw.tree.symlinkPaths.set(full, true);\n\t}\n\treadDirectory(directory, initialAdd, wh, target, dir, depth) {\n\t\tif (!this.isHelperActive(wh, directory)) return;\n\t\tdirectory = sp.join(directory, \"\");\n\t\tconst directoryKey = logicalPathKey(directory);\n\t\tconst previous = this.fsw.tree.getDirectory(wh.watchPath);\n\t\tconst current = /* @__PURE__ */ new Set();\n\t\tconst stream = this.fsw.createScanStream(directory, {\n\t\t\tfileFilter: (entry) => wh.filterPath(entry),\n\t\t\tdirectoryFilter: (entry) => wh.filterDir(entry)\n\t\t});\n\t\tif (!stream) return;\n\t\treturn consumeDirectoryStream(stream, (entry) => {\n\t\t\tif (!this.isHelperActive(wh, directory)) return;\n\t\t\tconst stats = entry.stats;\n\t\t\tif (!stats) return;\n\t\t\tconst item = entry.path;\n\t\t\tlet path = sp.join(directory, item);\n\t\t\tif (!this.isHelperActive(wh, path)) return;\n\t\t\tcurrent.add(item);\n\t\t\tconst shouldAdd = item === target || !target && !previous.has(item);\n\t\t\tif (target === void 0 && !stats.isSymbolicLink() && !stats.isDirectory()) {\n\t\t\t\tif (!shouldAdd) return;\n\t\t\t\tpath = sp.join(dir, sp.relative(dir, path));\n\t\t\t\tconst closer = this.handleFile(path, stats, initialAdd, !wh.recursiveRoot, wh.observationTrigger, initialAdd && Boolean(wh.recursiveRoot));\n\t\t\t\tif (closer) this.fsw.addPathCloser(path, closer);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\treturn (async () => {\n\t\t\t\tif (stats.isSymbolicLink() && await this.handleSymlink(entry, directory, path, item, initialAdd, wh)) return;\n\t\t\t\tif (!this.isHelperActive(wh, path)) return;\n\t\t\t\tif (shouldAdd) {\n\t\t\t\t\tpath = sp.join(dir, sp.relative(dir, path));\n\t\t\t\t\tawait this.addPathOnce(path, initialAdd, wh, depth + 1);\n\t\t\t\t}\n\t\t\t})();\n\t\t}).then(async ({ complete, error, failures }) => {\n\t\t\tfailures.forEach(this.reportError);\n\t\t\tif (error) {\n\t\t\t\tif (isMissingError(error) && this.isHelperActive(wh, directory)) {\n\t\t\t\t\tconst affectedPath = target ? sp.join(directory, target) : directory;\n\t\t\t\t\tlet disappeared = false;\n\t\t\t\t\tlet becameNonDirectory = false;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst currentStats = target ? await lstat(affectedPath) : await stat(affectedPath);\n\t\t\t\t\t\tbecameNonDirectory = !target && !currentStats.isDirectory();\n\t\t\t\t\t} catch (stateError) {\n\t\t\t\t\t\tif (isMissingError(stateError)) disappeared = true;\n\t\t\t\t\t\telse this.reportError(stateError);\n\t\t\t\t\t}\n\t\t\t\t\tif (target) {\n\t\t\t\t\t\tif (disappeared && previous.has(target)) this.fsw.removePath(directory, target);\n\t\t\t\t\t} else if ((disappeared || becameNonDirectory) && this.fsw.tree.watched.has(directoryKey)) {\n\t\t\t\t\t\tthis.fsw.removePath(sp.dirname(directory), sp.basename(directory), true);\n\t\t\t\t\t\tif (becameNonDirectory) await this.addPathOnce(directory, false, wh, depth);\n\t\t\t\t\t}\n\t\t\t\t} else this.reportError(error);\n\t\t\t}\n\t\t\tif (!complete || !this.isHelperActive(wh, directory)) return;\n\t\t\tawait Promise.all(previous.getChildren().filter((item) => !current.has(item)).map((item) => this.removeIfMissing(wh, directory, item, previous)));\n\t\t});\n\t}\n\tasync removeIfMissing(wh, directory, item, entry) {\n\t\tconst path = sp.join(directory, item);\n\t\tif (!this.isHelperActive(wh, path)) return;\n\t\ttry {\n\t\t\tawait lstat(path);\n\t\t\treturn;\n\t\t} catch (error) {\n\t\t\tif (!isMissingError(error)) return;\n\t\t}\n\t\tif (this.isHelperActive(wh, path) && entry.has(item)) this.fsw.removePath(directory, item);\n\t}\n\t/**\n\t* Populate the logical directory tree beneath one native recursive watcher.\n\t* Regular entries are consumed synchronously from readdirp's stat-bearing\n\t* stream; only symlinks need the full per-path add machinery.\n\t*/\n\tscanRecursiveTree(dir, initialAdd, wh, baseDepth, rescan) {\n\t\tif (!this.isHelperActive(wh, dir)) return;\n\t\tconst fsw = this.fsw;\n\t\tconst maxDepth = fsw.options.depth;\n\t\tconst remainingDepth = maxDepth === void 0 ? void 0 : maxDepth - baseDepth;\n\t\tconst stream = fsw.createScanStream(dir, {\n\t\t\tfileFilter: (entry) => wh.filterPath(entry),\n\t\t\tdirectoryFilter: (entry) => !entry.stats?.isSymbolicLink() && wh.filterDir(entry),\n\t\t\tdepth: remainingDepth\n\t\t});\n\t\tif (!stream) return;\n\t\treturn consumeDirectoryStream(stream, (entry) => {\n\t\t\tif (!this.isHelperActive(wh, dir)) return;\n\t\t\tconst stats = entry.stats;\n\t\t\tif (!stats) return;\n\t\t\tconst path = sp.join(dir, entry.path);\n\t\t\tif (!this.isHelperActive(wh, path)) return;\n\t\t\tconst directory = sp.dirname(path);\n\t\t\tconst item = sp.basename(path);\n\t\t\tif (rescan) {\n\t\t\t\trescan.seen.add(logicalPathKey(path));\n\t\t\t\tif (stats.isDirectory()) rescan.directories.push(path);\n\t\t\t}\n\t\t\tif (stats.isSymbolicLink()) return (async () => {\n\t\t\t\tif (await this.handleSymlink(entry, directory, path, item, initialAdd, wh)) return;\n\t\t\t\tif (!this.isHelperActive(wh, path)) return;\n\t\t\t\tconst entryDepth = baseDepth + entry.path.split(/[/\\\\]/).length;\n\t\t\t\tawait this.addPathOnce(path, initialAdd, wh, entryDepth);\n\t\t\t})();\n\t\t\tconst parent = fsw.tree.getDirectory(directory);\n\t\t\tif (parent.has(item)) {\n\t\t\t\tif (rescan && stats.isFile() && fsw.tree.changedSinceObserved(path, stats)) {\n\t\t\t\t\tfsw.tree.recordObserved(path, stats, \"change\", void 0, false, true);\n\t\t\t\t\tfsw.emitEvent(EV.CHANGE, path, stats);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tparent.add(item);\n\t\t\tconst isDirectory = stats.isDirectory();\n\t\t\tif (isDirectory) fsw.tree.getDirectory(path);\n\t\t\tfsw.tree.recordObserved(path, stats, \"add\", wh.observationTrigger, initialAdd);\n\t\t\tif (!(initialAdd && fsw.options.ignoreInitial)) fsw.emitEvent(isDirectory ? EV.ADD_DIR : EV.ADD, path, stats);\n\t\t}).then((outcome) => {\n\t\t\tif (outcome.error) this.reportError(outcome.error);\n\t\t\toutcome.failures.forEach(this.reportError);\n\t\t\tif (rescan) rescan.complete = outcome.complete;\n\t\t});\n\t}\n\t/**\n\t* Reconcile a whole recursive root after an invalidation that names no path\n\t* (a backend buffer overflow) or a replay buffer overflow. A shallow root\n\t* listing would miss every change below the first level.\n\t*/\n\tasync rescanRecursiveTree(dir, wh, baseDepth) {\n\t\tconst rescan = {\n\t\t\tseen: /* @__PURE__ */ new Set(),\n\t\t\tdirectories: [dir],\n\t\t\tcomplete: false\n\t\t};\n\t\tawait this.scanRecursiveTree(dir, false, wh, baseDepth, rescan);\n\t\tif (!rescan.complete || !this.isHelperActive(wh, dir)) return;\n\t\tconst missing = [];\n\t\tfor (const directory of rescan.directories) for (const item of this.fsw.tree.peekDirectory(directory)?.getChildren() ?? []) {\n\t\t\tconst path = sp.join(directory, item);\n\t\t\tif (!rescan.seen.has(logicalPathKey(path))) missing.push(path);\n\t\t}\n\t\tmissing.sort((left, right) => left.length - right.length);\n\t\tfor (const path of missing) {\n\t\t\tconst entry = this.fsw.tree.peekDirectory(sp.dirname(path));\n\t\t\tif (entry?.has(sp.basename(path))) await this.removeIfMissing(wh, sp.dirname(path), sp.basename(path), entry);\n\t\t}\n\t}\n\tisHelperActive(wh, path = wh.watchPath) {\n\t\treturn this.fsw.isPathGenerationActive(path, wh.pathGeneration);\n\t}\n\tcandidateDepth(root, candidate) {\n\t\tconst relative = sp.relative(root, candidate);\n\t\treturn relative ? relative.split(sp.sep).length : 0;\n\t}\n\tcandidateIgnored(root, candidate, stats) {\n\t\tconst relative = sp.relative(root, candidate);\n\t\tlet ancestor = root;\n\t\tif (this.fsw.isIgnored(ancestor)) return true;\n\t\tif (relative) {\n\t\t\tconst parts = relative.split(sp.sep);\n\t\t\tfor (let index = 0; index < parts.length - 1; index++) {\n\t\t\t\tancestor = sp.join(ancestor, parts[index]);\n\t\t\t\tif (this.fsw.isIgnored(ancestor)) return true;\n\t\t\t}\n\t\t}\n\t\treturn this.fsw.isIgnored(candidate, stats);\n\t}\n\tasync highestMissingPath(root, candidate) {\n\t\tlet missing = candidate;\n\t\tlet ancestor = sp.dirname(candidate);\n\t\twhile (true) {\n\t\t\ttry {\n\t\t\t\tawait lstat(ancestor);\n\t\t\t\treturn missing;\n\t\t\t} catch (error) {\n\t\t\t\tif (!isMissingError(error)) {\n\t\t\t\t\tthis.reportError(error);\n\t\t\t\t\treturn missing;\n\t\t\t\t}\n\t\t\t}\n\t\t\tmissing = ancestor;\n\t\t\tif (ancestor === root) return missing;\n\t\t\tconst parent = sp.dirname(ancestor);\n\t\t\tif (parent === ancestor) return missing;\n\t\t\tancestor = parent;\n\t\t}\n\t}\n\tasync reconcileNativeTrigger(root, rootHelper, trigger, candidateOverride, baseDepth = 0, exact) {\n\t\tconst fsw = this.fsw;\n\t\tif (!this.isHelperActive(rootHelper, root)) return;\n\t\tlet localHelper;\n\t\tconst helper = () => localHelper ??= rootHelper.withObservation(trigger);\n\t\tconst candidate = candidateOverride ?? (trigger.relativePath === null ? root : resolveRecursiveCandidate(root, trigger.relativePath));\n\t\tif (!candidate) {\n\t\t\tthis.reportError(/* @__PURE__ */ new Error(`Native watcher reported a path outside its root: ${trigger.relativePath}`));\n\t\t\treturn;\n\t\t}\n\t\tconst depth = baseDepth + this.candidateDepth(root, candidate);\n\t\tconst maxDepth = fsw.options.depth;\n\t\tif (maxDepth !== void 0 && depth > maxDepth + 1) return;\n\t\tif (this.candidateIgnored(root, candidate)) return;\n\t\tlet stats;\n\t\ttry {\n\t\t\tstats = await lstat(candidate);\n\t\t} catch (error) {\n\t\t\tif (!isMissingError(error)) {\n\t\t\t\tthis.reportError(error);\n\t\t\t\tif (exact) return;\n\t\t\t\tconst ancestor = candidate === root ? root : sp.dirname(candidate);\n\t\t\t\tconst ancestorDepth = Math.max(0, baseDepth + this.candidateDepth(root, ancestor));\n\t\t\t\tawait this.readDirectory(ancestor, false, helper().fork(ancestor), void 0, ancestor, ancestorDepth);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (fsw.closed) return;\n\t\t\tconst missingPath = candidate === root ? root : await this.highestMissingPath(root, candidate);\n\t\t\tif (fsw.closed) return;\n\t\t\tif (missingPath === root) {\n\t\t\t\tfsw.removePath(sp.dirname(root), sp.basename(root), true);\n\t\t\t\texact?.onRootMissing?.();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst parentPath = sp.dirname(missingPath);\n\t\t\tconst item = sp.basename(missingPath);\n\t\t\tif (fsw.tree.getDirectory(parentPath).has(item)) fsw.removePath(parentPath, item);\n\t\t\telse if (!exact) await this.readDirectory(parentPath, false, helper().fork(parentPath), void 0, parentPath, Math.max(0, baseDepth + this.candidateDepth(root, parentPath)));\n\t\t\treturn;\n\t\t}\n\t\tif (!this.isHelperActive(rootHelper, candidate) || this.candidateIgnored(root, candidate, stats)) return;\n\t\tif (!stats.isDirectory() && !(stats.isSymbolicLink() && fsw.options.followSymlinks)) {\n\t\t\tconst initialCreate = fsw.tree.consumeInitialCreate(candidate, stats, trigger, fsw.options.ignoreInitial);\n\t\t\tif (initialCreate !== void 0) {\n\t\t\t\tif (initialCreate) fsw.emitEvent(initialCreate, candidate, stats);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tif (candidate === root) {\n\t\t\tif (!stats.isDirectory()) return;\n\t\t\tif (rootHelper.recursiveRoot === root) await this.rescanRecursiveTree(root, helper(), baseDepth);\n\t\t\telse await this.readDirectory(root, false, helper(), void 0, root, baseDepth);\n\t\t\treturn;\n\t\t}\n\t\tconst parentPath = sp.dirname(candidate);\n\t\tconst item = sp.basename(candidate);\n\t\tconst parent = fsw.tree.getDirectory(parentPath);\n\t\tconst tracked = parent.has(item);\n\t\tif (stats.isSymbolicLink()) {\n\t\t\tif (!fsw.options.followSymlinks) {\n\t\t\t\tlet target = true;\n\t\t\t\ttry {\n\t\t\t\t\ttarget = await readlink(candidate);\n\t\t\t\t} catch {}\n\t\t\t\tif (!tracked) parent.add(item);\n\t\t\t\tfsw.tree.symlinkPaths.set(logicalPathKey(candidate), target);\n\t\t\t\tif (!tracked || !fsw.tree.isDuplicateObservation(candidate, stats, trigger)) fsw.emitEvent(tracked ? EV.CHANGE : EV.ADD, candidate, stats);\n\t\t\t\tif (!tracked) fsw.tree.recordObserved(candidate, stats, \"add\", trigger);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst logicalKey = logicalPathKey(candidate);\n\t\t\tconst previousTarget = fsw.tree.symlinkPaths.get(logicalKey);\n\t\t\tlet currentTarget;\n\t\t\ttry {\n\t\t\t\tcurrentTarget = await realpath(candidate);\n\t\t\t} catch (error) {\n\t\t\t\tif (!isMissingError(error)) {\n\t\t\t\t\tthis.reportError(error);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (tracked && typeof previousTarget === \"string\" && (currentTarget === void 0 || logicalPathKey(previousTarget) !== logicalPathKey(currentTarget))) {\n\t\t\t\tconst previousKind = fsw.tree.observed.get(logicalKey)?.kind;\n\t\t\t\tfsw.removePath(parentPath, item, previousKind === \"directory\");\n\t\t\t\tif (!currentTarget || !this.isHelperActive(rootHelper, candidate)) return;\n\t\t\t\tconst linkHelper = helper().fork(candidate);\n\t\t\t\tlinkHelper.recursiveRoot = void 0;\n\t\t\t\tawait this.addPathOnce(candidate, false, linkHelper, depth);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst initialCreate = fsw.tree.consumeInitialCreate(candidate, stats, trigger, fsw.options.ignoreInitial);\n\t\t\tif (initialCreate !== void 0) {\n\t\t\t\tif (initialCreate) {\n\t\t\t\t\tfsw.closePath(candidate, true);\n\t\t\t\t\tconst linkHelper = helper().fork(candidate);\n\t\t\t\t\tlinkHelper.recursiveRoot = void 0;\n\t\t\t\t\tawait this.addPathOnce(candidate, false, linkHelper, depth);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (!tracked) {\n\t\t\t\tconst linkHelper = helper().fork(candidate);\n\t\t\t\tlinkHelper.recursiveRoot = void 0;\n\t\t\t\tawait this.addPathOnce(candidate, false, linkHelper, depth);\n\t\t\t} else fsw.emitEvent(EV.CHANGE, candidate, stats);\n\t\t\treturn;\n\t\t}\n\t\tif (stats.isDirectory()) {\n\t\t\tconst directoryHelper = helper().fork(candidate);\n\t\t\tconst initialCreate = fsw.tree.consumeInitialCreate(candidate, stats, trigger, fsw.options.ignoreInitial);\n\t\t\tif (initialCreate !== void 0) {\n\t\t\t\tif (initialCreate) {\n\t\t\t\t\tfsw.closePath(candidate, true);\n\t\t\t\t\tawait this.addPathOnce(candidate, false, directoryHelper, depth);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (!tracked) await this.addPathOnce(candidate, false, directoryHelper, depth);\n\t\t\telse if (fsw.tree.replacedSinceObserved(candidate, stats)) {\n\t\t\t\tfsw.removePath(parentPath, item, true);\n\t\t\t\tawait this.addPathOnce(candidate, false, directoryHelper, depth);\n\t\t\t} else if (maxDepth === void 0 || depth <= maxDepth) await this.readDirectory(candidate, false, directoryHelper, void 0, candidate, depth);\n\t\t\treturn;\n\t\t}\n\t\tif (!tracked) await this.addPathOnce(candidate, false, helper(), depth);\n\t\telse if (!fsw.tree.isDuplicateObservation(candidate, stats, trigger)) fsw.emitEvent(EV.CHANGE, candidate, stats);\n\t}\n\t/**\n\t* Keep a Windows parent handle for a directly watched directory. Windows can\n\t* silently retire the directory's own handle when an empty root is removed;\n\t* its parent still receives the namespace transition and can reconcile it.\n\t*/\n\twatchRootParent(dir, wh) {\n\t\tif (!this.fsw.options.backendCapabilities.perDirectory || !isWindows) return;\n\t\tconst parentPath = sp.dirname(dir);\n\t\tif (sp.resolve(parentPath) === sp.resolve(dir)) return;\n\t\tconst canonicalParent = sp.normalize(sp.toNamespacedPath(sp.resolve(parentPath))).toLowerCase();\n\t\tconst rootName = sp.basename(dir).toLowerCase();\n\t\tconst generation = this.fsw.lifecycle.generation;\n\t\tlet active = true;\n\t\tconst matchesRoot = (relativePath) => {\n\t\t\tif (relativePath === null) return true;\n\t\t\tconst candidate = sp.isAbsolute(relativePath) ? sp.resolve(relativePath) : sp.resolve(parentPath, relativePath);\n\t\t\treturn sp.normalize(sp.toNamespacedPath(sp.dirname(candidate))).toLowerCase() === canonicalParent && sp.basename(candidate).toLowerCase() === rootName;\n\t\t};\n\t\tconst isActive = () => active && this.fsw.lifecycle.isActive(generation) && this.isHelperActive(wh, dir);\n\t\tconst publish = (trigger) => {\n\t\t\tif (trigger.kind !== \"native\" || !matchesRoot(trigger.relativePath) || !isActive()) return;\n\t\t\tthis.reconcileBackendTrigger(dir, false, trigger, async () => {\n\t\t\t\tlet rootStats;\n\t\t\t\ttry {\n\t\t\t\t\trootStats = await lstat(dir);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tif (isMissingError(error)) this.fsw.removePath(parentPath, sp.basename(dir), true);\n\t\t\t\t\telse this.reportError(error);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (!isActive()) return;\n\t\t\t\tif (!rootStats.isDirectory()) {\n\t\t\t\t\tthis.fsw.removePath(parentPath, sp.basename(dir), true);\n\t\t\t\t\tawait this.addPathOnce(dir, false, wh, 0);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tawait this.readDirectory(dir, false, wh, void 0, dir, 0);\n\t\t\t}, isActive);\n\t\t};\n\t\tconst subscription = setFsWatchListener(parentPath, sp.resolve(parentPath), { persistent: this.fsw.options.persistent }, {\n\t\t\tpublish,\n\t\t\terrHandler: this.reportError,\n\t\t\trawEmitter: (event, relativePath, details) => {\n\t\t\t\tif (matchesRoot(relativePath)) this.fsw.emitRaw(event, relativePath, details);\n\t\t\t}\n\t\t}, this.fsw.lifecycle.abortController.signal);\n\t\tif (!subscription) return;\n\t\treturn () => {\n\t\t\tif (!active) return;\n\t\t\tactive = false;\n\t\t\treturn subscription.close();\n\t\t};\n\t}\n\tasync watchRecursiveDirectory(dir, initialAdd, depth, wh) {\n\t\tconst fsw = this.fsw;\n\t\tconst generation = fsw.lifecycle.generation;\n\t\tconst rootKey = logicalPathKey(dir);\n\t\tconst buffered = new ReplayBuffer(RECURSIVE_TRIGGER_BUFFER_LIMIT);\n\t\tconst fallbackClosers = [];\n\t\tlet phase = \"scanning\";\n\t\tlet pendingFailure;\n\t\tlet hasPendingFailure = false;\n\t\tlet recovery;\n\t\tlet subscription;\n\t\tconst scopeActive = (path = dir) => fsw.lifecycle.isActive(generation) && fsw.isPathGenerationActive(path, wh.pathGeneration);\n\t\tconst acceptsTrigger = (path = dir) => phase !== \"recovering\" && phase !== \"closed\" && scopeActive(path);\n\t\tconst establishFallback = async (error) => {\n\t\t\tif (!scopeActive()) return;\n\t\t\twh.recursiveRoot = void 0;\n\t\t\twh.recursiveDisabled = true;\n\t\t\tlet currentStats;\n\t\t\ttry {\n\t\t\t\tcurrentStats = await lstat(dir);\n\t\t\t} catch (statError) {\n\t\t\t\tif (isMissingError(statError)) fsw.removePath(sp.dirname(dir), sp.basename(dir), true);\n\t\t\t\telse this.reportError(statError);\n\t\t\t\tthis.reportError(error);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst closer = await this.handleDirectory(dir, currentStats, false, depth, void 0, wh);\n\t\t\tif (!scopeActive()) {\n\t\t\t\tif (closer) await closer();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (closer) fallbackClosers.push(closer);\n\t\t\tawait this.subscribeTrackedDirectories(dir, wh, depth);\n\t\t\tthis.reportError(error);\n\t\t};\n\t\tconst handleFailure = (error) => {\n\t\t\tif (!acceptsTrigger()) return;\n\t\t\tconst initializing = phase !== \"live\";\n\t\t\tphase = \"recovering\";\n\t\t\tfsw.tree.recursiveRoots.delete(rootKey);\n\t\t\tpendingFailure = error;\n\t\t\thasPendingFailure = true;\n\t\t\tif (!initializing) recovery = fsw.reconciliation.enqueue(dir, () => establishFallback(error), false);\n\t\t};\n\t\tconst processTrigger = (trigger) => {\n\t\t\tif (!acceptsTrigger()) return;\n\t\t\tif (phase !== \"live\") {\n\t\t\t\tbuffered.push(trigger);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst coalescePath = trigger.relativePath === null ? dir : resolveRecursiveCandidate(dir, trigger.relativePath) ?? dir;\n\t\t\tthis.reconcileBackendTrigger(dir, true, trigger, () => acceptsTrigger() ? this.reconcileNativeTrigger(dir, wh, trigger) : void 0, () => acceptsTrigger(coalescePath));\n\t\t};\n\t\tconst result = subscribeRecursiveNative(dir, fsw.options.persistent, {\n\t\t\tpublish: processTrigger,\n\t\t\tfailure: handleFailure,\n\t\t\trawEmitter: (...args) => fsw.emitRaw(...args)\n\t\t}, fsw.lifecycle.abortController.signal);\n\t\tif (result.kind === \"unsupported\") return false;\n\t\tif (result.kind === \"failed\") throw result.error;\n\t\tsubscription = result.subscription;\n\t\tfsw.tree.recursiveRoots.add(rootKey);\n\t\twh.recursiveRoot = dir;\n\t\tconst close = async () => {\n\t\t\tif (phase === \"closed\") return;\n\t\t\tphase = \"closed\";\n\t\t\tfsw.tree.recursiveRoots.delete(rootKey);\n\t\t\tbuffered.clear();\n\t\t\tawait subscription?.close();\n\t\t\tif (recovery) await Promise.allSettled([recovery]);\n\t\t\tawait Promise.allSettled(fallbackClosers.map((closer) => closer()));\n\t\t};\n\t\ttry {\n\t\t\tawait this.scanRecursiveTree(dir, initialAdd, wh, depth);\n\t\t\tif (!hasPendingFailure) {\n\t\t\t\tphase = \"replaying\";\n\t\t\t\tlet index = 0;\n\t\t\t\twhile (acceptsTrigger()) {\n\t\t\t\t\tif (buffered.overflowed) {\n\t\t\t\t\t\tbuffered.clear();\n\t\t\t\t\t\tindex = 0;\n\t\t\t\t\t\tconst overflowTrigger = {\n\t\t\t\t\t\t\tkind: \"native\",\n\t\t\t\t\t\t\tresource: subscription.resource,\n\t\t\t\t\t\t\trawEvent: EV.CHANGE,\n\t\t\t\t\t\t\trelativePath: null,\n\t\t\t\t\t\t\tsequence: Number.MAX_SAFE_INTEGER,\n\t\t\t\t\t\t\tobservedAt: backendNow()\n\t\t\t\t\t\t};\n\t\t\t\t\t\tawait this.reconcileBackendTrigger(dir, true, overflowTrigger, () => this.reconcileNativeTrigger(dir, wh, overflowTrigger), () => acceptsTrigger(), false);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tif (index >= buffered.entries.length) break;\n\t\t\t\t\tconst trigger = buffered.entries[index++];\n\t\t\t\t\tif (trigger.rawEvent === \"rename\" && trigger.relativePath !== null) {\n\t\t\t\t\t\tconst candidate = resolveRecursiveCandidate(dir, trigger.relativePath);\n\t\t\t\t\t\tif (candidate && candidate !== dir && fsw.tree.getDirectory(sp.dirname(candidate)).has(sp.basename(candidate))) fsw.tree.markInitialCreate(candidate);\n\t\t\t\t\t}\n\t\t\t\t\tawait this.reconcileBackendTrigger(dir, true, trigger, () => this.reconcileNativeTrigger(dir, wh, trigger), () => acceptsTrigger(), false);\n\t\t\t\t}\n\t\t\t\tif (phase !== \"recovering\") phase = \"live\";\n\t\t\t}\n\t\t\tif (hasPendingFailure) {\n\t\t\t\tbuffered.clear();\n\t\t\t\tawait establishFallback(pendingFailure);\n\t\t\t}\n\t\t\tbuffered.clear();\n\t\t\tfsw.tree.clearInitialCreates(dir);\n\t\t} catch (error) {\n\t\t\tawait close();\n\t\t\tthrow error;\n\t\t}\n\t\tif (!scopeActive()) {\n\t\t\tawait close();\n\t\t\treturn;\n\t\t}\n\t\treturn close;\n\t}\n\t/**\n\t* A recursive root that falls back to per-directory handles already tracks\n\t* every subdirectory, so the fallback scan sees none of them as new. Give\n\t* each its own subscription; existing entries emit nothing.\n\t*/\n\tasync subscribeTrackedDirectories(root, wh, baseDepth) {\n\t\tconst fsw = this.fsw;\n\t\tconst absoluteRoot = sp.resolve(root);\n\t\tconst needsSubscription = (path) => {\n\t\t\tconst key = logicalPathKey(path);\n\t\t\treturn this.isHelperActive(wh, path) && !fsw.lifecycle.closers.has(key) && !fsw.tree.symlinkPaths.has(key) && (fsw.tree.peekDirectory(sp.dirname(path))?.has(sp.basename(path)) ?? false);\n\t\t};\n\t\tconst directories = [...fsw.tree.watched.values()].filter((entry) => isStrictlyInside(absoluteRoot, entry.path)).map((entry) => sp.join(root, sp.relative(absoluteRoot, entry.path))).filter(needsSubscription).sort((left, right) => left.length - right.length);\n\t\tlet next = 0;\n\t\tconst subscribeNext = async () => {\n\t\t\twhile (next < directories.length) {\n\t\t\t\tconst directory = directories[next++];\n\t\t\t\tif (!needsSubscription(directory)) continue;\n\t\t\t\tawait this.addPathOnce(directory, false, wh, baseDepth + this.candidateDepth(root, directory));\n\t\t\t}\n\t\t};\n\t\tconst workers = Math.min(FALLBACK_SUBSCRIBE_CONCURRENCY, directories.length);\n\t\tawait Promise.all(Array.from({ length: workers }, subscribeNext));\n\t}\n\t/**\n\t* Read directory to add / remove files from `@watched` list and re-read it on change.\n\t* @param dir fs path\n\t* @param stats\n\t* @param initialAdd\n\t* @param depth relative to user-supplied path\n\t* @param target child path targeted for watch\n\t* @param wh Common watch helpers for this path\n\t* @returns closer for the watcher instance.\n\t*/\n\tasync handleDirectory(dir, stats, initialAdd, depth, target, wh) {\n\t\tif (!this.isHelperActive(wh, dir)) return;\n\t\tif (target) this.fsw.tree.getDirectory(dir);\n\t\telse {\n\t\t\tconst parentDir = this.fsw.tree.getDirectory(sp.dirname(dir));\n\t\t\tconst tracked = parentDir.has(sp.basename(dir));\n\t\t\tif (!(initialAdd && this.fsw.options.ignoreInitial) && !tracked) this.fsw.emitEvent(EV.ADD_DIR, dir, stats);\n\t\t\tparentDir.add(sp.basename(dir));\n\t\t\tthis.fsw.tree.getDirectory(dir);\n\t\t\tthis.fsw.tree.recordObserved(dir, stats, tracked ? void 0 : \"add\", wh.observationTrigger, initialAdd && Boolean(wh.recursiveRoot), true);\n\t\t}\n\t\tlet closer;\n\t\tconst oDepth = this.fsw.options.depth;\n\t\tif (oDepth == null || depth <= oDepth) {\n\t\t\tif (this.fsw.options.backendCapabilities.recursive && depth === 0 && !target && !wh.recursiveRoot && !wh.recursiveDisabled) {\n\t\t\t\tconst recursiveCloser = await this.watchRecursiveDirectory(dir, initialAdd, depth, wh);\n\t\t\t\tif (recursiveCloser !== false) return recursiveCloser;\n\t\t\t}\n\t\t\tif (wh.recursiveRoot) {\n\t\t\t\tif (!target) await this.scanRecursiveTree(dir, initialAdd, wh, depth);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst buffered = new ReplayBuffer(RECURSIVE_TRIGGER_BUFFER_LIMIT);\n\t\t\tconst replayCreates = /* @__PURE__ */ new Set();\n\t\t\tlet initializing = !target;\n\t\t\tlet active = true;\n\t\t\tlet rescanOnFirstCallback = isMacos && !target;\n\t\t\tconst targetPath = target ? sp.join(dir, target) : void 0;\n\t\t\tconst rewatchTarget = () => {\n\t\t\t\tif (targetPath && active && this.isHelperActive(wh, targetPath)) this.fsw.rewatchMissingPath(targetPath);\n\t\t\t};\n\t\t\tconst removeObserved = (dirPath) => {\n\t\t\t\tif (target) {\n\t\t\t\t\tif (this.fsw.tree.getDirectory(dirPath).has(target)) this.fsw.removePath(dirPath, target);\n\t\t\t\t\trewatchTarget();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis.fsw.removePath(sp.dirname(dirPath), sp.basename(dirPath), true);\n\t\t\t};\n\t\t\tconst observeDirectory = async (dirPath, currentStats, trigger) => {\n\t\t\t\tif (!active || !this.isHelperActive(wh, dirPath)) return;\n\t\t\t\tif (this.fsw.options.backendCapabilities.polling && !currentStats) {\n\t\t\t\t\tremoveObserved(dirPath);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (trigger.kind === \"native\") {\n\t\t\t\t\tlet observedStats;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst linkStats = await lstat(dirPath);\n\t\t\t\t\t\tobservedStats = linkStats.isSymbolicLink() && this.fsw.options.followSymlinks ? await stat(dirPath) : linkStats;\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tif (isMissingError(error)) removeObserved(dirPath);\n\t\t\t\t\t\telse this.reportError(error);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (!observedStats.isDirectory()) {\n\t\t\t\t\t\tremoveObserved(dirPath);\n\t\t\t\t\t\tif (!target) await this.addPathOnce(dirPath, false, wh, depth);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tawait this.readDirectory(dirPath, false, wh, target, dir, depth);\n\t\t\t};\n\t\t\tconst reconcile = (candidate, currentStats, trigger) => {\n\t\t\t\tif (!active || !this.isHelperActive(wh, candidate)) return;\n\t\t\t\tif (initializing) {\n\t\t\t\t\tbuffered.push({\n\t\t\t\t\t\tpath: candidate,\n\t\t\t\t\t\tstats: currentStats,\n\t\t\t\t\t\ttrigger\n\t\t\t\t\t});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (trigger.kind === \"native\" && !target) {\n\t\t\t\t\tif (rescanOnFirstCallback) {\n\t\t\t\t\t\trescanOnFirstCallback = false;\n\t\t\t\t\t\treturn (async () => {\n\t\t\t\t\t\t\tawait this.reconcileNativeTrigger(dir, wh, trigger, candidate, depth);\n\t\t\t\t\t\t\tawait observeDirectory(dir, void 0, trigger);\n\t\t\t\t\t\t})();\n\t\t\t\t\t}\n\t\t\t\t\treturn this.reconcileNativeTrigger(dir, wh, trigger, candidate, depth);\n\t\t\t\t}\n\t\t\t\tif (trigger.kind === \"native\" && target) {\n\t\t\t\t\tif (candidate === dir || (isWindows ? sp.basename(candidate).toLowerCase() === target.toLowerCase() : sp.basename(candidate) === target)) return this.reconcileNativeTrigger(dir, wh, trigger, targetPath, depth, { onRootMissing: rewatchTarget });\n\t\t\t\t}\n\t\t\t\treturn observeDirectory(dir, currentStats, trigger);\n\t\t\t};\n\t\t\tconst rootParentCloser = depth === 0 && !target ? this.watchRootParent(dir, wh) : void 0;\n\t\t\tcloser = this.subscribePath(dir, reconcile, stats.isDirectory() ? stats : void 0, true, target ? sp.join(dir, target) : dir);\n\t\t\tif (target && targetPath && closer) {\n\t\t\t\tconst check = recoveryTrigger(sp.resolve(dir));\n\t\t\t\tawait this.fsw.reconciliation.enqueue(targetPath, async () => {\n\t\t\t\t\tif (this.fsw.tree.getDirectory(dir).has(target)) return;\n\t\t\t\t\tawait reconcile(targetPath, void 0, check);\n\t\t\t\t}, targetPath);\n\t\t\t}\n\t\t\tif (!target) {\n\t\t\t\tawait this.readDirectory(dir, initialAdd, wh, target, dir, depth);\n\t\t\t\tlet index = 0;\n\t\t\t\twhile (!this.fsw.closed) {\n\t\t\t\t\tif (buffered.overflow) {\n\t\t\t\t\t\tconst overflow = buffered.overflow;\n\t\t\t\t\t\tbuffered.clear();\n\t\t\t\t\t\tindex = 0;\n\t\t\t\t\t\tawait observeDirectory(dir, overflow.stats, overflow.trigger);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tif (index >= buffered.entries.length) break;\n\t\t\t\t\tconst event = buffered.entries[index++];\n\t\t\t\t\tif (event.trigger.kind === \"native\" && event.trigger.rawEvent === \"rename\" && event.path !== dir && this.fsw.tree.getDirectory(sp.dirname(event.path)).has(sp.basename(event.path))) {\n\t\t\t\t\t\tthis.fsw.tree.markInitialCreate(event.path);\n\t\t\t\t\t\treplayCreates.add(event.path);\n\t\t\t\t\t}\n\t\t\t\t\tawait this.reconcileBackendTrigger(dir, true, event.trigger, () => {\n\t\t\t\t\t\tif (event.trigger.kind === \"native\" && !target) return this.reconcileNativeTrigger(dir, wh, event.trigger, event.path, depth);\n\t\t\t\t\t\treturn observeDirectory(dir, event.stats, event.trigger);\n\t\t\t\t\t}, () => active && this.isHelperActive(wh, event.path), false);\n\t\t\t\t}\n\t\t\t\tbuffered.clear();\n\t\t\t\treplayCreates.forEach((path) => this.fsw.tree.clearInitialCreate(path));\n\t\t\t\tinitializing = false;\n\t\t\t}\n\t\t\tif (!this.isHelperActive(wh, dir)) {\n\t\t\t\tactive = false;\n\t\t\t\tif (closer) await closer();\n\t\t\t\tif (rootParentCloser) await rootParentCloser();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (closer || rootParentCloser) {\n\t\t\t\tconst backendClosers = [closer, rootParentCloser].filter((candidate) => candidate !== void 0);\n\t\t\t\tcloser = async () => {\n\t\t\t\t\tif (!active) return;\n\t\t\t\t\tactive = false;\n\t\t\t\t\tbuffered.clear();\n\t\t\t\t\tawait Promise.allSettled(backendClosers.map((backendCloser) => backendCloser()));\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\treturn closer;\n\t}\n\t/**\n\t* Handle added file, directory, or glob pattern.\n\t* Delegates call to handleFile / handleDirectory after checks.\n\t* @param path to file or ir\n\t* @param initialAdd was the file added at watch instantiation?\n\t* @param priorWh depth relative to user-supplied path\n\t* @param depth Child path actually targeted for watch\n\t* @param target Child path actually targeted for watch\n\t*/\n\tasync addRoot(path, initialAdd, pathGeneration, target) {\n\t\tlet candidate = path;\n\t\tlet childTarget = target;\n\t\tconst generation = this.fsw.lifecycle.generation;\n\t\twhile (this.fsw.lifecycle.isActive(generation)) {\n\t\t\tif (await this.addPathOnce(candidate, initialAdd, void 0, 0, childTarget, pathGeneration) === \"complete\") return;\n\t\t\tconst parent = sp.dirname(candidate);\n\t\t\tif (parent === candidate) return;\n\t\t\tchildTarget = sp.basename(candidate);\n\t\t\tcandidate = parent;\n\t\t}\n\t}\n\tasync addPathOnce(path, initialAdd, priorWh, depth, target, pathGeneration) {\n\t\tif (this.fsw.isIgnored(path) || this.fsw.closed) return \"complete\";\n\t\tconst wh = priorWh ? priorWh.fork(path) : this.fsw.createHelper(path);\n\t\tif (!priorWh && pathGeneration !== void 0) wh.pathGeneration = pathGeneration;\n\t\tif (!this.isHelperActive(wh)) return \"complete\";\n\t\ttry {\n\t\t\tconst linkStats = await lstat(wh.watchPath);\n\t\t\tif (!this.isHelperActive(wh)) return \"complete\";\n\t\t\tif (this.fsw.isIgnored(wh.watchPath, linkStats)) return \"complete\";\n\t\t\tconst follow = this.fsw.options.followSymlinks;\n\t\t\tconst isSymbolicLink = linkStats.isSymbolicLink();\n\t\t\tconst stats = isSymbolicLink && follow ? await stat(wh.watchPath) : linkStats;\n\t\t\tconst followedTarget = isSymbolicLink && follow ? await realpath(path) : void 0;\n\t\t\tlet closer;\n\t\t\tif (stats.isDirectory()) {\n\t\t\t\tconst absPath = logicalPathKey(path);\n\t\t\t\tconst ancestryPath = follow ? await realpath(path) : path;\n\t\t\t\tconst targetPath = followedTarget ?? path;\n\t\t\t\tconst targetKey = logicalPathKey(ancestryPath);\n\t\t\t\tif (!this.isHelperActive(wh)) return \"complete\";\n\t\t\t\tif (isSymbolicLink && wh.realpathAncestry.has(targetKey)) {\n\t\t\t\t\tthis.fsw.tree.getDirectory(sp.dirname(wh.watchPath)).add(sp.basename(wh.watchPath));\n\t\t\t\t\tthis.fsw.tree.getDirectory(wh.watchPath);\n\t\t\t\t\tthis.fsw.tree.symlinkPaths.set(absPath, targetPath);\n\t\t\t\t\tthis.fsw.tree.recordObserved(wh.watchPath, stats, \"add\", wh.observationTrigger, initialAdd && Boolean(wh.recursiveRoot));\n\t\t\t\t\tif (!(initialAdd && this.fsw.options.ignoreInitial)) this.fsw.emitEvent(EV.ADD_DIR, wh.watchPath, stats);\n\t\t\t\t\treturn \"complete\";\n\t\t\t\t}\n\t\t\t\twh.realpathAncestry.add(targetKey);\n\t\t\t\tif (wh.recursiveRoot && isSymbolicLink) wh.recursiveRoot = void 0;\n\t\t\t\tif (isSymbolicLink) wh.recursiveDisabled = true;\n\t\t\t\tcloser = await this.handleDirectory(wh.watchPath, stats, initialAdd, depth, target, wh);\n\t\t\t\tif (!this.isHelperActive(wh)) {\n\t\t\t\t\tif (closer) await closer();\n\t\t\t\t\treturn \"complete\";\n\t\t\t\t}\n\t\t\t\tif (target && !closer) return \"watch-parent\";\n\t\t\t\tif (isSymbolicLink) this.fsw.tree.symlinkPaths.set(absPath, targetPath);\n\t\t\t} else if (isSymbolicLink && !follow) {\n\t\t\t\tconst linkTarget = await readlink(path);\n\t\t\t\tconst retainsNativeFact = !this.fsw.options.backendCapabilities.polling && !wh.recursiveRoot && !priorWh;\n\t\t\t\tconst fileCloser = this.handleFile(wh.watchPath, stats, initialAdd, !wh.recursiveRoot, wh.observationTrigger, initialAdd && Boolean(wh.recursiveRoot), retainsNativeFact);\n\t\t\t\tif (wh.recursiveRoot) {\n\t\t\t\t\tthis.fsw.tree.symlinkPaths.set(logicalPathKey(path), linkTarget);\n\t\t\t\t\treturn \"complete\";\n\t\t\t\t}\n\t\t\t\tconst parent = sp.dirname(wh.watchPath);\n\t\t\t\tconst parentStats = await stat(parent);\n\t\t\t\tconst parentHelper = this.fsw.createHelper(parent);\n\t\t\t\tparentHelper.pathGeneration = wh.pathGeneration;\n\t\t\t\tconst parentCloser = await this.handleDirectory(parent, parentStats, initialAdd, depth, sp.basename(wh.watchPath), parentHelper);\n\t\t\t\tconst deletionCloser = this.watchSymlinkDeletion(wh.watchPath);\n\t\t\t\tif (!this.isHelperActive(wh)) {\n\t\t\t\t\tif (fileCloser) await fileCloser();\n\t\t\t\t\tif (parentCloser) await parentCloser();\n\t\t\t\t\tif (deletionCloser) deletionCloser();\n\t\t\t\t\treturn \"complete\";\n\t\t\t\t}\n\t\t\t\tcloser = async () => {\n\t\t\t\t\tawait Promise.allSettled([\n\t\t\t\t\t\tfileCloser,\n\t\t\t\t\t\tparentCloser,\n\t\t\t\t\t\tdeletionCloser\n\t\t\t\t\t].filter((candidate) => candidate !== void 0).map((backendCloser) => backendCloser()));\n\t\t\t\t};\n\t\t\t\tthis.fsw.tree.symlinkPaths.set(logicalPathKey(path), linkTarget);\n\t\t\t} else {\n\t\t\t\tif (followedTarget) this.fsw.tree.symlinkPaths.set(logicalPathKey(path), followedTarget);\n\t\t\t\tconst retainsNativeFact = !this.fsw.options.backendCapabilities.polling && !wh.recursiveRoot && !priorWh;\n\t\t\t\tconst fileCloser = this.handleFile(wh.watchPath, stats, initialAdd, !wh.recursiveRoot, wh.observationTrigger, initialAdd && Boolean(wh.recursiveRoot), retainsNativeFact);\n\t\t\t\tconst targetPath = followedTarget ?? (retainsNativeFact ? wh.watchPath : void 0);\n\t\t\t\tconst targetCloser = targetPath ? this.subscribeMappedFile(wh.watchPath, targetPath, wh, depth, isMacos && stats.isFile()) : void 0;\n\t\t\t\tlet parentCloser;\n\t\t\t\tif (retainsNativeFact && followedTarget) {\n\t\t\t\t\tconst parent = sp.dirname(wh.watchPath);\n\t\t\t\t\tconst parentStats = await stat(parent);\n\t\t\t\t\tconst parentHelper = this.fsw.createHelper(parent);\n\t\t\t\t\tparentHelper.pathGeneration = wh.pathGeneration;\n\t\t\t\t\tparentCloser = await this.handleDirectory(parent, parentStats, initialAdd, depth, sp.basename(wh.watchPath), parentHelper);\n\t\t\t\t}\n\t\t\t\tconst fileClosers = [\n\t\t\t\t\tfileCloser,\n\t\t\t\t\ttargetCloser,\n\t\t\t\t\tparentCloser\n\t\t\t\t].filter((candidate) => candidate !== void 0);\n\t\t\t\tcloser = fileClosers.length === 0 ? void 0 : async () => {\n\t\t\t\t\tawait Promise.allSettled(fileClosers.map((fileCloser) => fileCloser()));\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (!this.isHelperActive(wh)) {\n\t\t\t\tif (closer) await closer();\n\t\t\t\treturn \"complete\";\n\t\t\t}\n\t\t\tif (closer) this.fsw.addPathCloser(target ? sp.join(path, target) : path, closer);\n\t\t\treturn \"complete\";\n\t\t} catch (error) {\n\t\t\tif (!this.isHelperActive(wh)) return \"complete\";\n\t\t\tthis.fsw.handleError(error);\n\t\t\treturn \"watch-parent\";\n\t\t}\n\t}\n};\n// ../../node_modules/.pnpm/chokidar@6.0.0/node_modules/chokidar/index.js\n/*! chokidar - MIT License (c) 2012 Paul Miller (paulmillr.com) */\nconst DOT_RE = /\\..*\\.(sw[px])$|~$|\\.subl.*\\.tmp/;\nconst WATCH_BACKENDS = /* @__PURE__ */ new Set([\n\t\"auto\",\n\t\"native\",\n\t\"native-recursive\",\n\t\"polling\"\n]);\nconst DEF_AWF = Object.freeze({\n\tstabilityThreshold: 2e3,\n\tpollInterval: 100\n});\nfunction* ancestorKeys(path) {\n\tlet current = sp.resolve(path);\n\tfor (let parent = sp.dirname(current); parent !== current; parent = sp.dirname(parent)) {\n\t\tyield logicalPathKey(parent);\n\t\tcurrent = parent;\n\t}\n}\nfunction arrify(item) {\n\treturn Array.isArray(item) ? item : [item];\n}\nfunction unifyPaths(paths_) {\n\tconst paths = arrify(paths_).flat();\n\tif (!paths.every((p) => typeof p === \"string\")) throw new TypeError(`Non-string provided as watch path: ${paths}`);\n\treturn paths.map(normalizePath$2);\n}\nfunction getAbsolutePath(path, cwd) {\n\tif (sp.isAbsolute(path)) return path;\n\treturn sp.join(cwd, path);\n}\nfunction validatePositiveFinite(name, value) {\n\tif (!Number.isFinite(value) || value <= 0) throw new TypeError(`${name} must be a finite number greater than zero`);\n}\nfunction validateNonNegativeFinite(name, value) {\n\tif (!Number.isFinite(value) || value < 0) throw new TypeError(`${name} must be a finite non-negative number`);\n}\nfunction validateOptions(opts) {\n\tvalidatePositiveFinite(\"pollingInterval\", opts.pollingInterval);\n\tvalidatePositiveFinite(\"pollingBinaryInterval\", opts.pollingBinaryInterval);\n\tif (typeof opts.atomic === \"number\") validateNonNegativeFinite(\"atomic\", opts.atomic);\n\telse if (typeof opts.atomic !== \"boolean\") throw new TypeError(\"atomic must be a boolean or finite non-negative number\");\n\tif (opts.depth !== void 0 && (!Number.isSafeInteger(opts.depth) || opts.depth < 0)) throw new TypeError(\"depth must be a non-negative safe integer\");\n\tif (opts.awaitWriteFinish) {\n\t\tvalidatePositiveFinite(\"awaitWriteFinish.pollInterval\", opts.awaitWriteFinish.pollInterval);\n\t\tvalidateNonNegativeFinite(\"awaitWriteFinish.stabilityThreshold\", opts.awaitWriteFinish.stabilityThreshold);\n\t}\n}\n/**\n* Watches files & directories for changes. Emitted events:\n* `add`, `addDir`, `change`, `unlink`, `unlinkDir`, `all`, `error`\n*\n* new FSWatcher()\n* .add(directories)\n* .on('add', path => log('File', path, 'was added'))\n*/\nvar FSWatcher = class extends EventEmitter {\n\toptions;\n\t/** @internal */\n\tlifecycle;\n\t/** @internal */\n\ttree;\n\t/** @internal */\n\treconciliation;\n\t/** @internal */\n\tevents;\n\t/** @internal */\n\tscheduler;\n\t/** @internal */\n\thandler;\n\t/** @internal */\n\treadyEmitted;\n\t/** @internal */\n\tstreams;\n\tget closed() {\n\t\treturn this.lifecycle !== void 0 && this.lifecycle.state !== \"OPEN\";\n\t}\n\t#ignoredPaths;\n\t#pendingAdds;\n\t#pathMutation;\n\t#pathBarriers;\n\t#closePromise;\n\t#userIgnored;\n\t#realDirs;\n\t#roots;\n\t#rootAncestors;\n\t#unwatchIgnored;\n\t#readyPending;\n\t#readyScheduled;\n\tconstructor(_opts = {}, scheduler = systemScheduler) {\n\t\tsuper();\n\t\tif (_opts.backend !== void 0 && !WATCH_BACKENDS.has(_opts.backend)) throw new TypeError(\"backend must be auto, native, native-recursive, or polling\");\n\t\tthis.#ignoredPaths = /* @__PURE__ */ new Set();\n\t\tthis.streams = /* @__PURE__ */ new Set();\n\t\tthis.#pendingAdds = /* @__PURE__ */ new Map();\n\t\tthis.#pathMutation = 0;\n\t\tthis.#pathBarriers = /* @__PURE__ */ new Map();\n\t\tthis.#realDirs = /* @__PURE__ */ new Map();\n\t\tthis.#roots = /* @__PURE__ */ new Set();\n\t\tthis.#rootAncestors = /* @__PURE__ */ new Map();\n\t\tthis.readyEmitted = false;\n\t\tthis.#readyPending = false;\n\t\tthis.#readyScheduled = false;\n\t\tthis.scheduler = scheduler;\n\t\tconst awf = _opts.awaitWriteFinish;\n\t\tconst opts = {\n\t\t\t..._opts,\n\t\t\tpersistent: _opts.persistent ?? true,\n\t\t\tignoreInitial: _opts.ignoreInitial ?? false,\n\t\t\tignorePermissionErrors: _opts.ignorePermissionErrors ?? false,\n\t\t\tpollingInterval: _opts.pollingInterval ?? _opts.interval ?? 100,\n\t\t\tpollingBinaryInterval: _opts.pollingBinaryInterval ?? _opts.binaryInterval ?? 300,\n\t\t\tinterval: 100,\n\t\t\tbinaryInterval: 300,\n\t\t\tfollowSymlinks: _opts.followSymlinks ?? true,\n\t\t\tbackend: _opts.backend ?? \"auto\",\n\t\t\tusePolling: _opts.usePolling ?? false,\n\t\t\tdepth: _opts.depth === Number.POSITIVE_INFINITY ? void 0 : _opts.depth,\n\t\t\tbackendStrategy: \"native-per-directory\",\n\t\t\tbackendCapabilities: void 0,\n\t\t\tatomic: _opts.atomic ?? true,\n\t\t\tignored: Object.freeze(_opts.ignored ? arrify(_opts.ignored).map(cloneOwnedMatcher) : []),\n\t\t\tawaitWriteFinish: awf === true ? DEF_AWF : typeof awf === \"object\" ? Object.freeze({\n\t\t\t\t...DEF_AWF,\n\t\t\t\t...awf\n\t\t\t}) : false\n\t\t};\n\t\tif (_opts.usePolling === true || isIBMi) opts.backend = \"polling\";\n\t\tconst envPoll = process.env.CHOKIDAR_USEPOLLING;\n\t\tif (envPoll !== void 0) {\n\t\t\tconst envLower = envPoll.toLowerCase();\n\t\t\tif (envLower === \"false\" || envLower === \"0\" ? false : envLower === \"true\" || envLower === \"1\" ? true : !!envLower) opts.backend = \"polling\";\n\t\t\telse if (opts.backend === \"polling\") opts.backend = \"auto\";\n\t\t}\n\t\tconst envInterval = process.env.CHOKIDAR_INTERVAL;\n\t\tif (envInterval !== void 0) opts.pollingInterval = Number(envInterval);\n\t\topts.interval = opts.pollingInterval;\n\t\topts.binaryInterval = opts.pollingBinaryInterval;\n\t\topts.usePolling = opts.backend === \"polling\";\n\t\topts.backendCapabilities = selectBackend(opts);\n\t\topts.backendStrategy = opts.backendCapabilities.kind;\n\t\tif (_opts.atomic === void 0) opts.atomic = !opts.usePolling;\n\t\tvalidateOptions(opts);\n\t\tthis.options = opts;\n\t\tthis.lifecycle = new LifecycleScope(() => {\n\t\t\tif (this.#readyPending) this.queueReady();\n\t\t}, (error) => {\n\t\t\tif (!this.closed) this.handleError(error instanceof Error ? error : new Error(String(error)));\n\t\t});\n\t\tthis.tree = new TreeState(() => !this.options.backendCapabilities.polling);\n\t\tthis.reconciliation = new ReconciliationQueue(this.lifecycle);\n\t\tthis.events = new EventPolicy({\n\t\t\toptions: this.options,\n\t\t\tscheduler: this.scheduler,\n\t\t\tlifecycle: this.lifecycle,\n\t\t\tisClosed: () => this.closed,\n\t\t\tcapturePathGeneration: () => this.capturePathGeneration(),\n\t\t\tisPathGenerationActive: (path, generation) => this.isPathGenerationActive(path, generation),\n\t\t\tisReady: () => this.readyEmitted,\n\t\t\tremove: (directory, item) => this.removePath(directory, item),\n\t\t\thandleError: (error) => this.handleError(error),\n\t\t\tpublish: (event, args) => this.emitWithAll(event, args)\n\t\t});\n\t\tthis.handler = new ObservationEngine(this);\n\t\tObject.freeze(opts);\n\t}\n\taddIgnoredPath(matcher) {\n\t\tmatcher = this.ignoredMatcher(matcher);\n\t\tif (isMatcherObject(matcher)) {\n\t\t\tfor (const ignored of this.#ignoredPaths) if (isMatcherObject(ignored) && ignored.path === matcher.path && ignored.recursive === matcher.recursive) return;\n\t\t}\n\t\tthis.#ignoredPaths.add(matcher);\n\t\tthis.#unwatchIgnored = void 0;\n\t}\n\tremoveIgnoredPath(matcher) {\n\t\tmatcher = this.ignoredMatcher(matcher);\n\t\tthis.#ignoredPaths.delete(matcher);\n\t\tif (typeof matcher === \"string\") {\n\t\t\tfor (const ignored of this.#ignoredPaths) if (isMatcherObject(ignored) && ignored.path === matcher) this.#ignoredPaths.delete(ignored);\n\t\t}\n\t\tthis.#unwatchIgnored = void 0;\n\t}\n\tignoredMatcher(matcher) {\n\t\tif (typeof matcher === \"string\") return logicalPathKey(matcher);\n\t\tif (isMatcherObject(matcher)) return {\n\t\t\tpath: logicalPathKey(matcher.path),\n\t\t\trecursive: matcher.recursive\n\t\t};\n\t\treturn matcher;\n\t}\n\t/** @internal */\n\tcapturePathGeneration() {\n\t\treturn this.#pathMutation;\n\t}\n\tinvalidatePath(path) {\n\t\tthis.#pathBarriers.set(logicalPathKey(path), ++this.#pathMutation);\n\t}\n\t/** @internal */\n\tisPathGenerationActive(path, generation) {\n\t\tif (this.lifecycle.state !== \"OPEN\") return false;\n\t\tif (this.#pathBarriers.size === 0) return true;\n\t\tconst logicalKey = logicalPathKey(path);\n\t\tfor (const [barrier, barrierGeneration] of this.#pathBarriers) {\n\t\t\tif (barrierGeneration <= generation) continue;\n\t\t\tif (isSameOrInside(barrier, logicalKey)) return false;\n\t\t}\n\t\treturn true;\n\t}\n\tqueueReady() {\n\t\tif (this.closed || this.readyEmitted) return;\n\t\tthis.#readyPending = true;\n\t\tif (this.lifecycle.tasks.size > 0 || this.#readyScheduled) return;\n\t\tthis.#readyScheduled = true;\n\t\tprocess.nextTick(() => {\n\t\t\tthis.#readyScheduled = false;\n\t\t\tif (this.closed || this.readyEmitted || this.lifecycle.tasks.size > 0) return;\n\t\t\tthis.#readyPending = false;\n\t\t\tthis.readyEmitted = true;\n\t\t\tthis.emit(EVENTS.READY);\n\t\t});\n\t}\n\t/**\n\t* Adds paths to be watched on an existing FSWatcher instance.\n\t* @param paths_ file or file list\n\t*/\n\tadd(paths_) {\n\t\tif (this.closed) throw new Error(\"Cannot add paths after FSWatcher.close() has been called\");\n\t\tconst { cwd } = this.options;\n\t\tlet paths = unifyPaths(paths_);\n\t\tif (cwd) paths = paths.map((path) => {\n\t\t\treturn getAbsolutePath(path, cwd);\n\t\t});\n\t\tpaths.forEach((path) => {\n\t\t\tthis.removeIgnoredPath(path);\n\t\t\tthis.addRootAncestors(path);\n\t\t});\n\t\tif (!this.readyEmitted) this.#readyPending = true;\n\t\tconst addTask = Promise.all(paths.map(async (path) => {\n\t\t\tconst key = logicalPathKey(path);\n\t\t\tif (this.lifecycle.closers.has(key) || this.#pendingAdds.has(key)) return;\n\t\t\tconst pendingToken = Symbol(key);\n\t\t\tconst pathGeneration = this.capturePathGeneration();\n\t\t\tthis.#pendingAdds.set(key, pendingToken);\n\t\t\ttry {\n\t\t\t\tawait this.handler.addRoot(path, true, pathGeneration);\n\t\t\t} finally {\n\t\t\t\tif (this.#pendingAdds.get(key) === pendingToken) this.#pendingAdds.delete(key);\n\t\t\t}\n\t\t}));\n\t\tthis.lifecycle.track(addTask);\n\t\tif (!this.readyEmitted) this.queueReady();\n\t\treturn this;\n\t}\n\t/**\n\t* Close watchers or start ignoring events from specified paths.\n\t*/\n\tunwatch(paths_) {\n\t\tif (this.closed) return this;\n\t\tlet paths = unifyPaths(paths_);\n\t\tconst { cwd } = this.options;\n\t\tif (cwd) paths = paths.map((path) => getAbsolutePath(path, cwd));\n\t\tpaths.forEach((path) => {\n\t\t\tconst key = logicalPathKey(path);\n\t\t\tconst isDirectory = this.tree.watched.has(key);\n\t\t\tthis.invalidatePath(key);\n\t\t\tthis.removeRootAncestors(key);\n\t\t\tthis.#pendingAdds.delete(key);\n\t\t\tthis.events.cancelPath(key);\n\t\t\tthis.closePath(key, isDirectory);\n\t\t\tthis.addIgnoredPath(key);\n\t\t\tif (isDirectory) this.addIgnoredPath({\n\t\t\t\tpath: key,\n\t\t\t\trecursive: true\n\t\t\t});\n\t\t\tthis.#unwatchIgnored = void 0;\n\t\t});\n\t\treturn this;\n\t}\n\t/**\n\t* Close watchers and remove all listeners from watched paths.\n\t*/\n\tclose() {\n\t\tif (this.#closePromise) return this.#closePromise;\n\t\tconst closers = this.lifecycle.beginClose();\n\t\tthis.removeAllListeners();\n\t\tthis.events.close();\n\t\tthis.#pendingAdds.clear();\n\t\tthis.#roots.clear();\n\t\tthis.#rootAncestors.clear();\n\t\tthis.streams.forEach((stream) => stream.destroy());\n\t\tthis.#userIgnored = void 0;\n\t\tthis.#unwatchIgnored = void 0;\n\t\tthis.readyEmitted = false;\n\t\tthis.tree.dispose();\n\t\tthis.#pathBarriers.clear();\n\t\tthis.streams.clear();\n\t\tthis.reconciliation.clear();\n\t\tthis.#realDirs.clear();\n\t\tthis.#closePromise = (async () => {\n\t\t\tconst closerResults = await Promise.allSettled(closers);\n\t\t\tawait this.lifecycle.drain();\n\t\t\tthis.lifecycle.finishClose();\n\t\t\tconst failed = closerResults.find((result) => result.status === \"rejected\");\n\t\t\tif (failed) throw failed.reason;\n\t\t})();\n\t\treturn this.#closePromise;\n\t}\n\t/**\n\t* Expose list of watched paths. The result has a null prototype, so a\n\t* directory named `__proto__` is an ordinary own key.\n\t*/\n\tgetWatched() {\n\t\tconst watchList = Object.create(null);\n\t\tthis.tree.watched.forEach((entry) => {\n\t\t\tconst dir = entry.path;\n\t\t\tconst index = (this.options.cwd ? sp.relative(this.options.cwd, dir) : dir) || \".\";\n\t\t\twatchList[index] = entry.getChildren().sort();\n\t\t});\n\t\treturn watchList;\n\t}\n\t/** @internal */\n\temitRaw(...args) {\n\t\tif (!this.closed) this.emit(EVENTS.RAW, ...args);\n\t}\n\temitWithAll(event, args) {\n\t\tthis.emit(event, ...args);\n\t\tif (event !== EVENTS.ERROR) this.emit(EVENTS.ALL, event, ...args);\n\t}\n\t/**\n\t* Normalize and emit events.\n\t* Calling emitEvent DOES NOT MEAN emit() would be called!\n\t* @param event Type of event\n\t* @param path File or directory path\n\t* @param stats arguments to be passed with event\n\t* @internal\n\t*/\n\tasync emitEvent(event, path, stats) {\n\t\tif (this.closed) return;\n\t\tawait this.events.emit(event, path, stats);\n\t}\n\t/**\n\t* Common handler for backend and reconciliation failures.\n\t* @internal\n\t*/\n\thandleError(error) {\n\t\tif (this.closed) return;\n\t\tconst normalized = error instanceof Error ? error : new Error(String(error));\n\t\tif (!isMissingError(normalized) && (!this.options.ignorePermissionErrors || !isPermissionError(normalized))) this.emit(EVENTS.ERROR, normalized);\n\t}\n\t/**\n\t* Determines whether user has asked to ignore this path.\n\t* @internal\n\t*/\n\tisIgnored(path, stats) {\n\t\tif (this.options.atomic && DOT_RE.test(path)) return true;\n\t\tif (!this.#userIgnored) {\n\t\t\tconst { cwd } = this.options;\n\t\t\tconst ignored = (this.options.ignored || []).map((matcher) => normalizeMatcher(matcher, cwd));\n\t\t\tconst direct = compileMatchers(ignored);\n\t\t\tconst pathMatchers = ignored.filter((matcher) => typeof matcher === \"string\" || isMatcherObject(matcher));\n\t\t\tconst canonical = compileMatchers(pathMatchers);\n\t\t\tthis.#userIgnored = (candidate, candidateStats) => {\n\t\t\t\tif (direct(candidate, candidateStats)) return true;\n\t\t\t\tif (isWindows || pathMatchers.length === 0) return false;\n\t\t\t\tconst absoluteCandidate = sp.resolve(candidate);\n\t\t\t\tlet realPath;\n\t\t\t\tif (candidateStats?.isDirectory()) realPath = this.realDirectory(absoluteCandidate);\n\t\t\t\telse {\n\t\t\t\t\tconst realDir = this.realDirectory(sp.dirname(absoluteCandidate));\n\t\t\t\t\tif (realDir !== void 0) realPath = sp.join(realDir, sp.basename(absoluteCandidate));\n\t\t\t\t}\n\t\t\t\treturn realPath !== void 0 && realPath !== absoluteCandidate && canonical(realPath, candidateStats);\n\t\t\t};\n\t\t}\n\t\tif (this.#userIgnored(path, stats) && !this.isRootAncestor(path, stats)) return true;\n\t\tif (this.#ignoredPaths.size === 0) return false;\n\t\tif (!this.#unwatchIgnored) this.#unwatchIgnored = compileMatchers([...this.#ignoredPaths]);\n\t\treturn this.#unwatchIgnored(logicalPathKey(path), stats);\n\t}\n\tisRootAncestor(path, stats) {\n\t\tif (stats?.isFile()) return false;\n\t\treturn this.#rootAncestors.has(logicalPathKey(path));\n\t}\n\t/** Records every directory above a requested root; refcounted across roots. */\n\taddRootAncestors(path) {\n\t\tconst key = logicalPathKey(path);\n\t\tif (this.#roots.has(key)) return;\n\t\tthis.#roots.add(key);\n\t\tfor (const ancestor of ancestorKeys(path)) this.#rootAncestors.set(ancestor, (this.#rootAncestors.get(ancestor) ?? 0) + 1);\n\t}\n\tremoveRootAncestors(path) {\n\t\tif (!this.#roots.delete(logicalPathKey(path))) return;\n\t\tfor (const ancestor of ancestorKeys(path)) {\n\t\t\tconst count = (this.#rootAncestors.get(ancestor) ?? 1) - 1;\n\t\t\tif (count > 0) this.#rootAncestors.set(ancestor, count);\n\t\t\telse this.#rootAncestors.delete(ancestor);\n\t\t}\n\t}\n\trealDirectory(directory) {\n\t\tconst key = logicalPathKey(directory);\n\t\tif (this.#realDirs.has(key)) return this.#realDirs.get(key);\n\t\tlet realPath;\n\t\ttry {\n\t\t\trealPath = realpathSync.native(directory);\n\t\t} catch {}\n\t\tthis.#realDirs.set(key, realPath);\n\t\treturn realPath;\n\t}\n\t/** @internal */\n\tisUnwatched(path) {\n\t\tif (this.#ignoredPaths.size === 0) return false;\n\t\tif (!this.#unwatchIgnored) this.#unwatchIgnored = compileMatchers([...this.#ignoredPaths]);\n\t\treturn this.#unwatchIgnored(logicalPathKey(path));\n\t}\n\t/**\n\t* Provides a set of common helpers and properties relating to symlink handling.\n\t* @param path file or directory pattern being watched\n\t* @internal\n\t*/\n\tcreateHelper(path) {\n\t\treturn new WatchHelper(path, this.options.followSymlinks, {\n\t\t\tcapturePathGeneration: () => this.capturePathGeneration(),\n\t\t\tisntIgnored: (candidate, stats) => !this.isIgnored(candidate, stats)\n\t\t});\n\t}\n\tremoveTreeItem(directory, item) {\n\t\tconst entry = this.tree.peekDirectory(directory);\n\t\tif (!entry?.remove(item)) return;\n\t\tconst path = entry.path;\n\t\tconst generation = this.lifecycle.generation;\n\t\tthis.lifecycle.track((async () => {\n\t\t\ttry {\n\t\t\t\tawait readdir(path);\n\t\t\t} catch (error) {\n\t\t\t\tif (isMissingError(error) && this.lifecycle.isActive(generation)) this.removePath(sp.dirname(path), sp.basename(path));\n\t\t\t}\n\t\t})());\n\t}\n\t/**\n\t* Handles emitting unlink events for\n\t* files and directories, and via recursion, for\n\t* files and directories within directories that are unlinked\n\t* @param directory within which the following item is located\n\t* @param item base path of item/directory\n\t* @internal\n\t*/\n\tremovePath(directory, item, isDirectory) {\n\t\tconst path = sp.join(directory, item);\n\t\tconst logicalKey = logicalPathKey(path);\n\t\tisDirectory = isDirectory != null ? isDirectory : this.tree.watched.has(logicalKey);\n\t\tconst nestedDirectoryChildren = this.tree.peekDirectory(path)?.getChildren() ?? [];\n\t\tfor (const nested of nestedDirectoryChildren) this.removePath(path, nested);\n\t\tconst wasTracked = this.tree.peekDirectory(directory)?.has(item) ?? false;\n\t\tconst hadClosers = this.lifecycle.closers.has(logicalKey);\n\t\tthis.removeTreeItem(directory, item);\n\t\tif (this.tree.symlinkPaths.has(logicalKey)) this.tree.symlinkPaths.delete(logicalKey);\n\t\tconst pendingWrite = this.events.pendingWrites.get(logicalKey);\n\t\tlet suppressEvent = false;\n\t\tif (this.options.awaitWriteFinish && pendingWrite) suppressEvent = pendingWrite.cancelWait() === EVENTS.ADD;\n\t\tthis.tree.watched.delete(logicalKey);\n\t\tthis.tree.observed.delete(logicalKey);\n\t\tconst eventName = isDirectory ? EVENTS.UNLINK_DIR : EVENTS.UNLINK;\n\t\tif (wasTracked && !suppressEvent && !this.isIgnored(path)) this.emitEvent(eventName, path);\n\t\tthis.closePath(path);\n\t\tif ((wasTracked || hadClosers) && this.#roots.has(logicalKey)) this.rewatchMissingPath(path);\n\t}\n\t/**\n\t* Replaces every watch keyed at `path` with a wait from its nearest existing\n\t* ancestor, so the path is reported again when it reappears.\n\t* @internal\n\t*/\n\trewatchMissingPath(path) {\n\t\tif (this.closed || this.isUnwatched(path)) return;\n\t\tthis.closePath(path);\n\t\tthis.lifecycle.track(this.handler.addRoot(path, false, this.capturePathGeneration()));\n\t}\n\t/**\n\t* Closes all watchers for a path\n\t* @internal\n\t*/\n\tclosePath(path, recursive = false) {\n\t\tconst logicalKey = logicalPathKey(path);\n\t\tconst contains = (candidate) => {\n\t\t\tif (candidate === logicalKey) return true;\n\t\t\tif (!recursive) return false;\n\t\t\treturn isStrictlyInside(logicalKey, candidate);\n\t\t};\n\t\t[...this.lifecycle.closers.keys()].filter(contains).forEach((key) => this.closeFile(key));\n\t\tif (this.#realDirs.delete(logicalKey) || recursive) {\n\t\t\tconst prefix = logicalKey.endsWith(\"/\") ? logicalKey : `${logicalKey}/`;\n\t\t\tfor (const key of this.#realDirs.keys()) if (key.startsWith(prefix)) this.#realDirs.delete(key);\n\t\t}\n\t\tif (recursive) {\n\t\t\tfor (const [key, entry] of this.tree.watched) {\n\t\t\t\tif (!contains(key)) continue;\n\t\t\t\tentry.dispose();\n\t\t\t\tthis.tree.watched.delete(key);\n\t\t\t}\n\t\t\tfor (const key of this.tree.observed.keys()) if (contains(key)) this.tree.observed.delete(key);\n\t\t\tfor (const key of this.tree.symlinkPaths.keys()) if (contains(key)) this.tree.symlinkPaths.delete(key);\n\t\t\tthis.events.cancelWhere(contains);\n\t\t\tthis.reconciliation.forgetPending((scope, candidate) => contains(scope) || contains(candidate));\n\t\t\tfor (const key of this.#pendingAdds.keys()) if (contains(key)) this.#pendingAdds.delete(key);\n\t\t}\n\t\tconst dir = sp.dirname(logicalKey);\n\t\tthis.removeTreeItem(dir, sp.basename(logicalKey));\n\t}\n\t/**\n\t* Closes only file-specific watchers\n\t*/\n\tcloseFile(path) {\n\t\tconst key = logicalPathKey(path);\n\t\tconst closers = this.lifecycle.takeClosers(key);\n\t\tif (closers.length === 0) return;\n\t\tclosers.forEach((closer) => {\n\t\t\ttry {\n\t\t\t\tconst result = closer();\n\t\t\t\tif (result instanceof Promise) this.lifecycle.track(result);\n\t\t\t} catch (error) {\n\t\t\t\tthis.lifecycle.track(Promise.reject(error));\n\t\t\t}\n\t\t});\n\t}\n\t/** @internal */\n\taddPathCloser(path, closer) {\n\t\tif (!closer) return;\n\t\tif (this.closed || this.isUnwatched(path)) {\n\t\t\ttry {\n\t\t\t\tconst result = closer();\n\t\t\t\tif (result instanceof Promise) this.lifecycle.track(result);\n\t\t\t} catch (error) {\n\t\t\t\tthis.lifecycle.track(Promise.reject(error));\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tconst key = logicalPathKey(path);\n\t\tthis.lifecycle.addCloser(key, closer);\n\t}\n\t/** @internal */\n\tcreateScanStream(root, opts) {\n\t\tif (this.closed) return;\n\t\tconst stream = readdirp(root, {\n\t\t\ttype: EVENTS.ALL,\n\t\t\talwaysStat: true,\n\t\t\tlstat: true,\n\t\t\tdepth: 0,\n\t\t\t...opts\n\t\t});\n\t\tthis.streams.add(stream);\n\t\tconst finalize = () => this.streams.delete(stream);\n\t\tstream.once(\"close\", finalize);\n\t\tstream.once(\"end\", finalize);\n\t\tstream.once(EVENTS.ERROR, finalize);\n\t\treturn stream;\n\t}\n};\n/**\n* Instantiates watcher with paths to be tracked.\n* @param paths file / directory paths\n* @param options opts, such as `atomic`, `awaitWriteFinish`, `ignored`, and others\n* @returns an instance of FSWatcher for chaining.\n* @example\n* const watcher = watch('.').on('all', (event, path) => { console.log(event, path); });\n* watch('.', { atomic: true, awaitWriteFinish: true, ignored: (f, stats) => stats?.isFile() && !f.endsWith('.js') })\n*/\nfunction watch$1(paths, options = {}) {\n\tconst watcher = new FSWatcher(options);\n\twatcher.add(paths);\n\treturn watcher;\n}\n// ../../node_modules/.pnpm/balanced-match@4.0.4/node_modules/balanced-match/dist/esm/index.js\nconst balanced = (a, b, str) => {\n\tconst ma = a instanceof RegExp ? maybeMatch(a, str) : a;\n\tconst mb = b instanceof RegExp ? maybeMatch(b, str) : b;\n\tconst r = ma !== null && mb != null && range(ma, mb, str);\n\treturn r && {\n\t\tstart: r[0],\n\t\tend: r[1],\n\t\tpre: str.slice(0, r[0]),\n\t\tbody: str.slice(r[0] + ma.length, r[1]),\n\t\tpost: str.slice(r[1] + mb.length)\n\t};\n};\nconst maybeMatch = (reg, str) => {\n\tconst m = str.match(reg);\n\treturn m ? m[0] : null;\n};\nconst range = (a, b, str) => {\n\tlet begs, beg, left, right = void 0, result;\n\tlet ai = str.indexOf(a);\n\tlet bi = str.indexOf(b, ai + 1);\n\tlet i = ai;\n\tif (ai >= 0 && bi > 0) {\n\t\tif (a === b) return [ai, bi];\n\t\tbegs = [];\n\t\tleft = str.length;\n\t\twhile (i >= 0 && !result) {\n\t\t\tif (i === ai) {\n\t\t\t\tbegs.push(i);\n\t\t\t\tai = str.indexOf(a, i + 1);\n\t\t\t} else if (begs.length === 1) {\n\t\t\t\tconst r = begs.pop();\n\t\t\t\tif (r !== void 0) result = [r, bi];\n\t\t\t} else {\n\t\t\t\tbeg = begs.pop();\n\t\t\t\tif (beg !== void 0 && beg < left) {\n\t\t\t\t\tleft = beg;\n\t\t\t\t\tright = bi;\n\t\t\t\t}\n\t\t\t\tbi = str.indexOf(b, i + 1);\n\t\t\t}\n\t\t\ti = ai < bi && ai >= 0 ? ai : bi;\n\t\t}\n\t\tif (begs.length && right !== void 0) result = [left, right];\n\t}\n\treturn result;\n};\n// ../../node_modules/.pnpm/brace-expansion@5.0.12/node_modules/brace-expansion/dist/esm/index.js\nconst escSlash = \"\\0SLASH\" + Math.random() + \"\\0\";\nconst escOpen = \"\\0OPEN\" + Math.random() + \"\\0\";\nconst escClose = \"\\0CLOSE\" + Math.random() + \"\\0\";\nconst escComma = \"\\0COMMA\" + Math.random() + \"\\0\";\nconst escPeriod = \"\\0PERIOD\" + Math.random() + \"\\0\";\nconst escSlashPattern = new RegExp(escSlash, \"g\");\nconst escOpenPattern = new RegExp(escOpen, \"g\");\nconst escClosePattern = new RegExp(escClose, \"g\");\nconst escCommaPattern = new RegExp(escComma, \"g\");\nconst escPeriodPattern = new RegExp(escPeriod, \"g\");\nconst slashPattern = /\\\\\\\\/g;\nconst openPattern = /\\\\{/g;\nconst closePattern = /\\\\}/g;\nconst commaPattern = /\\\\,/g;\nconst periodPattern = /\\\\\\./g;\nconst EXPANSION_MAX = 1e5;\nconst EXPANSION_MAX_LENGTH = 4e6;\nconst EXPANSION_MAX_DEPTH = 1e3;\nconst EXPANSION_MAX_REWRITES = 1e3;\nfunction numeric(str) {\n\treturn !isNaN(str) ? parseInt(str, 10) : str.charCodeAt(0);\n}\nfunction escapeBraces(str) {\n\treturn str.replace(slashPattern, escSlash).replace(openPattern, escOpen).replace(closePattern, escClose).replace(commaPattern, escComma).replace(periodPattern, escPeriod);\n}\nfunction unescapeBraces(str) {\n\treturn str.replace(escSlashPattern, \"\\\\\").replace(escOpenPattern, \"{\").replace(escClosePattern, \"}\").replace(escCommaPattern, \",\").replace(escPeriodPattern, \".\");\n}\nfunction pushAll(target, items) {\n\tfor (let i = 0; i < items.length; i++) target.push(items[i]);\n}\n/**\n* Basically just str.split(\",\"), but handling cases\n* where we have nested braced sections, which should be\n* treated as individual members, like {a,{b,c},d}\n*/\nfunction parseCommaParts(str) {\n\tconst parts = [];\n\tlet carry = \"\";\n\tfor (;;) {\n\t\tconst m = balanced(\"{\", \"}\", str);\n\t\tif (!m) {\n\t\t\tconst tail = str.split(\",\");\n\t\t\ttail[0] = carry + tail[0];\n\t\t\tpushAll(parts, tail);\n\t\t\treturn parts;\n\t\t}\n\t\tconst { pre, body, post } = m;\n\t\tconst p = pre.split(\",\");\n\t\tp[0] = carry + p[0];\n\t\tp[p.length - 1] += \"{\" + body + \"}\";\n\t\tif (!post.length) {\n\t\t\tpushAll(parts, p);\n\t\t\treturn parts;\n\t\t}\n\t\tcarry = p.pop();\n\t\tpushAll(parts, p);\n\t\tstr = post;\n\t}\n}\nfunction expand(str, options = {}) {\n\tif (!str) return [];\n\tconst { max = EXPANSION_MAX, maxLength = EXPANSION_MAX_LENGTH, maxDepth = EXPANSION_MAX_DEPTH, maxRewrites = EXPANSION_MAX_REWRITES } = options;\n\tif (str.slice(0, 2) === \"{}\") str = \"\\\\{\\\\}\" + str.slice(2);\n\treturn expand_(escapeBraces(str), max, maxLength, maxDepth, 0, maxRewrites, true).map(unescapeBraces);\n}\nfunction embrace(str) {\n\treturn \"{\" + str + \"}\";\n}\nfunction isPadded(el) {\n\treturn /^-?0\\d/.test(el);\n}\nfunction lte(i, y) {\n\treturn i <= y;\n}\nfunction gte(i, y) {\n\treturn i >= y;\n}\nfunction combine(acc, pre, values, max, maxLength, dropEmpties) {\n\tconst out = [];\n\tlet length = 0;\n\tfor (let a = 0; a < acc.length; a++) for (let v = 0; v < values.length; v++) {\n\t\tif (out.length >= max) return out;\n\t\tconst expansion = acc[a] + pre + values[v];\n\t\tif (dropEmpties && !expansion) continue;\n\t\tif (length + expansion.length > maxLength) return out;\n\t\tout.push(expansion);\n\t\tlength += expansion.length;\n\t}\n\treturn out;\n}\nfunction expandSequence(body, isAlphaSequence, max, maxLength) {\n\tconst n = body.split(/\\.\\./);\n\tconst N = [];\n\t/* c8 ignore start */\n\tif (n[0] === void 0 || n[1] === void 0) return N;\n\t/* c8 ignore stop */\n\tconst x = numeric(n[0]);\n\tconst y = numeric(n[1]);\n\tconst width = Math.max(n[0].length, n[1].length);\n\tlet incr = n.length === 3 && n[2] !== void 0 ? Math.max(Math.abs(numeric(n[2])), 1) : 1;\n\tlet test = lte;\n\tif (y < x) {\n\t\tincr *= -1;\n\t\ttest = gte;\n\t}\n\tconst pad = n.some(isPadded);\n\tlet length = 0;\n\tfor (let i = x; test(i, y) && N.length < max; i += incr) {\n\t\tlet c;\n\t\tif (isAlphaSequence) {\n\t\t\tc = String.fromCharCode(i);\n\t\t\tif (c === \"\\\\\") c = \"\";\n\t\t} else {\n\t\t\tc = String(i);\n\t\t\tif (pad) {\n\t\t\t\tconst need = width - c.length;\n\t\t\t\tif (need > 0) {\n\t\t\t\t\tconst z = new Array(need + 1).join(\"0\");\n\t\t\t\t\tif (i < 0) c = \"-\" + z + c.slice(1);\n\t\t\t\t\telse c = z + c;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (length + c.length > maxLength) break;\n\t\tN.push(c);\n\t\tlength += c.length;\n\t}\n\treturn N;\n}\nfunction expand_(str, max, maxLength, maxDepth, depth, maxRewrites, isTop) {\n\tif (depth > maxDepth) return [str];\n\tlet acc = [\"\"];\n\tlet rewrites = 0;\n\tlet dropEmpties = false;\n\tlet firstGroup = true;\n\tfor (;;) {\n\t\tconst m = balanced(\"{\", \"}\", str);\n\t\tif (!m) return combine(acc, str, [\"\"], max, maxLength, dropEmpties);\n\t\tconst pre = m.pre;\n\t\tif (/\\$$/.test(pre)) {\n\t\t\tacc = combine(acc, pre + \"{\" + m.body + \"}\", [\"\"], max, maxLength, dropEmpties && !m.post.length);\n\t\t\tfirstGroup = false;\n\t\t\tif (!m.post.length) break;\n\t\t\tstr = m.post;\n\t\t\tcontinue;\n\t\t}\n\t\tconst isNumericSequence = /^-?\\d+\\.\\.-?\\d+(?:\\.\\.-?\\d+)?$/.test(m.body);\n\t\tconst isAlphaSequence = /^[a-zA-Z]\\.\\.[a-zA-Z](?:\\.\\.-?\\d+)?$/.test(m.body);\n\t\tconst isSequence = isNumericSequence || isAlphaSequence;\n\t\tconst isOptions = m.body.indexOf(\",\") >= 0;\n\t\tif (!isSequence && !isOptions) {\n\t\t\tif (rewrites < maxRewrites && m.post.match(/,(?!,).*\\}/)) {\n\t\t\t\trewrites++;\n\t\t\t\tstr = m.pre + \"{\" + m.body + escClose + m.post;\n\t\t\t\tisTop = true;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\treturn combine(acc, pre + \"{\" + m.body + \"}\" + m.post, [\"\"], max, maxLength, dropEmpties);\n\t\t}\n\t\tif (firstGroup) {\n\t\t\tdropEmpties = isTop && !isSequence;\n\t\t\tfirstGroup = false;\n\t\t}\n\t\tlet values;\n\t\tif (isSequence) values = expandSequence(m.body, isAlphaSequence, max, maxLength);\n\t\telse {\n\t\t\tlet n = parseCommaParts(m.body);\n\t\t\tif (n.length === 1 && n[0] !== void 0) {\n\t\t\t\tn = expand_(n[0], max, maxLength, maxDepth, depth + 1, maxRewrites, false).map(embrace);\n\t\t\t\t/* c8 ignore start */\n\t\t\t\tif (n.length === 1) {\n\t\t\t\t\tacc = combine(acc, pre + n[0], [\"\"], max, maxLength, dropEmpties && !m.post.length);\n\t\t\t\t\tif (!m.post.length) break;\n\t\t\t\t\tstr = m.post;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\tlet dropsEmpties = dropEmpties && !m.post.length && !pre;\n\t\t\tfor (let d = 0; dropsEmpties && d < acc.length; d++) if (acc[d]) dropsEmpties = false;\n\t\t\tvalues = [];\n\t\t\tlet valuesLength = 0;\n\t\t\touter: for (let j = 0; j < n.length; j++) {\n\t\t\t\tconst expanded = expand_(n[j], max, maxLength, maxDepth, depth + 1, maxRewrites, false);\n\t\t\t\tfor (let k = 0; k < expanded.length; k++) {\n\t\t\t\t\tconst v = expanded[k];\n\t\t\t\t\tif (dropsEmpties && !v) continue;\n\t\t\t\t\tif (values.length >= max || valuesLength + v.length > maxLength) break outer;\n\t\t\t\t\tvalues.push(v);\n\t\t\t\t\tvaluesLength += v.length;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tacc = combine(acc, pre, values, max, maxLength, dropEmpties && !m.post.length);\n\t\tif (!m.post.length) break;\n\t\tstr = m.post;\n\t}\n\treturn acc;\n}\n// ../../node_modules/.pnpm/@isaacs+nonrecursive-glob-match@1.0.3/node_modules/@isaacs/nonrecursive-glob-match/dist/esm/parse-class.js\nconst posixClasses = {\n\t\"[:alnum:]\": [\"\\\\p{L}\\\\p{Nl}\\\\p{Nd}\"],\n\t\"[:alpha:]\": [\"\\\\p{L}\\\\p{Nl}\"],\n\t\"[:ascii:]\": [\"\\\\x00-\\\\x7f\"],\n\t\"[:blank:]\": [\"\\\\p{Zs}\\\\t\"],\n\t\"[:cntrl:]\": [\"\\\\p{Cc}\"],\n\t\"[:digit:]\": [\"\\\\p{Nd}\"],\n\t\"[:graph:]\": [\"\\\\p{Z}\\\\p{C}\", true],\n\t\"[:lower:]\": [\"\\\\p{Ll}\"],\n\t\"[:print:]\": [\"\\\\p{C}\", true],\n\t\"[:punct:]\": [\"\\\\p{P}\\\\p{S}\"],\n\t\"[:space:]\": [\"\\\\p{Z}\\\\t\\\\r\\\\n\\\\v\\\\f\"],\n\t\"[:upper:]\": [\"\\\\p{Lu}\"],\n\t\"[:word:]\": [\"\\\\p{L}\\\\p{Nl}\\\\p{Nd}\\\\p{Pc}\"],\n\t\"[:xdigit:]\": [\"A-Fa-f0-9\"]\n};\nconst braceEscape = (s) => s.replace(/[[\\]\\\\-]/g, \"\\\\$&\");\nconst noMatch = /$./;\nconst parseClass = (glob, position, nocase = false, form) => {\n\tconst norm = (c) => {\n\t\tconst n = form ? c.normalize(form) : c;\n\t\treturn [...n].length === 1 ? n : c;\n\t};\n\tconst pos = position;\n\t/* c8 ignore start */\n\tif (glob.charAt(pos) !== \"[\") throw new Error(\"not in a brace expression\");\n\t/* c8 ignore stop */\n\tconst ranges = [];\n\tconst negs = [];\n\tlet i = pos + 1;\n\tlet sawStart = false;\n\tlet escaping = false;\n\tlet negate = false;\n\tlet endPos = pos;\n\tlet rangeStart = \"\";\n\tWHILE: while (i < glob.length) {\n\t\tconst c = String.fromCodePoint(glob.codePointAt(i));\n\t\tif ((c === \"!\" || c === \"^\") && i === pos + 1) {\n\t\t\tnegate = true;\n\t\t\ti++;\n\t\t\tcontinue;\n\t\t}\n\t\tif (c === \"]\" && sawStart && !escaping) {\n\t\t\tendPos = i + 1;\n\t\t\tbreak;\n\t\t}\n\t\tsawStart = true;\n\t\tif (c === \"\\\\\") {\n\t\t\tif (!escaping) {\n\t\t\t\tescaping = true;\n\t\t\t\ti++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\t\tif (c === \"[\" && !escaping) {\n\t\t\tfor (const [cls, [unip, neg]] of Object.entries(posixClasses)) if (glob.startsWith(cls, i)) {\n\t\t\t\tif (rangeStart) return [noMatch, glob.length - pos];\n\t\t\t\ti += cls.length;\n\t\t\t\tif (neg) negs.push(unip);\n\t\t\t\telse ranges.push(unip);\n\t\t\t\tcontinue WHILE;\n\t\t\t}\n\t\t}\n\t\tescaping = false;\n\t\tconst n = norm(c);\n\t\tif (rangeStart) {\n\t\t\tif (n.codePointAt(0) > rangeStart.codePointAt(0)) ranges.push(braceEscape(rangeStart) + \"-\" + braceEscape(n));\n\t\t\telse if (n === rangeStart) ranges.push(braceEscape(n));\n\t\t\trangeStart = \"\";\n\t\t\ti += c.length;\n\t\t\tcontinue;\n\t\t}\n\t\tif (glob.startsWith(\"-]\", i + c.length)) {\n\t\t\tranges.push(braceEscape(n + \"-\"));\n\t\t\ti += c.length + 1;\n\t\t\tcontinue;\n\t\t}\n\t\tif (glob.startsWith(\"-\", i + c.length)) {\n\t\t\trangeStart = n;\n\t\t\ti += c.length + 1;\n\t\t\tcontinue;\n\t\t}\n\t\tranges.push(braceEscape(n));\n\t\ti += c.length;\n\t}\n\tif (endPos < i) return [noMatch, 0];\n\tif (!ranges.length && !negs.length) return [noMatch, glob.length - pos];\n\tconst sranges = \"[\" + (negate ? \"^\" : \"\") + ranges.join(\"\") + \"]\";\n\tconst snegs = \"[\" + (negate ? \"\" : \"^\") + negs.join(\"\") + \"]\";\n\tconst comb = \"^\" + (ranges.length && negs.length ? \"(\" + sranges + \"|\" + snegs + \")\" : ranges.length ? sranges : snegs);\n\treturn [new RegExp(comb, nocase ? \"iu\" : \"u\"), endPos - pos];\n};\n// ../../node_modules/.pnpm/@isaacs+nonrecursive-glob-match@1.0.3/node_modules/@isaacs/nonrecursive-glob-match/dist/esm/index.js\nconst MATCH = {\n\tt: \"match\",\n\tid: 0\n};\nconst extTypes = \"!?+*@\";\nconst lit = (ch) => ({\n\tt: \"lit\",\n\tch\n});\nconst reEscape = (s) => s.replace(/[\\\\^$.*+?()[\\]{}|/]/g, \"\\\\$&\");\nconst newFoldRe = (s) => new RegExp(`^${reEscape(s)}$`, \"iu\");\nconst foldCache = /* @__PURE__ */ new Map();\nconst foldRe = (ch) => {\n\tlet re = foldCache.get(ch);\n\tif (!re) {\n\t\tre = newFoldRe(ch);\n\t\tif (foldCache.size >= 1e3) foldCache.clear();\n\t\tfoldCache.set(ch, re);\n\t}\n\treturn re;\n};\nconst litMatch = (l, c) => {\n\tif (c === l.ch) return true;\n\tif (!l.re) return false;\n\tconst code = c.charCodeAt(0);\n\tif (code >= 128) return l.re.test(c);\n\tconst ascii = l.ascii ??= /* @__PURE__ */ new Uint8Array(128);\n\tascii[code] ||= l.re.test(c) ? 1 : 2;\n\treturn ascii[code] === 1;\n};\nconst tokenize = (p, nocase, noext, form) => {\n\tconst toks = [];\n\tfor (let i = 0; i < p.length;) {\n\t\tconst c = String.fromCodePoint(p.codePointAt(i));\n\t\tif (c === \"\\\\\") {\n\t\t\tconst e = p.codePointAt(i + 1);\n\t\t\tconst ch = e === void 0 ? c : String.fromCodePoint(e);\n\t\t\ttoks.push(lit(ch));\n\t\t\ti += 1 + ch.length;\n\t\t\tcontinue;\n\t\t}\n\t\tif (c === \"[\") {\n\t\t\tconst [re, consumed] = parseClass(p, i, nocase, form);\n\t\t\tif (consumed) {\n\t\t\t\ttoks.push({\n\t\t\t\t\tt: \"class\",\n\t\t\t\t\tre\n\t\t\t\t});\n\t\t\t\ti += consumed;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\t\tif (!noext && extTypes.includes(c) && p[i + 1] === \"(\") {\n\t\t\ttoks.push({\n\t\t\t\tt: \"open\",\n\t\t\t\ttype: c\n\t\t\t});\n\t\t\ti += 2;\n\t\t\tcontinue;\n\t\t}\n\t\ttoks.push(!noext && c === \"|\" ? { t: \"bar\" } : !noext && c === \")\" ? { t: \"close\" } : c === \"*\" ? { t: \"star\" } : c === \"?\" ? { t: \"any\" } : lit(c));\n\t\ti += c.length;\n\t}\n\treturn toks;\n};\nconst pair = (toks) => {\n\tconst pairs = /* @__PURE__ */ new Map();\n\tconst stack = [];\n\ttoks.forEach((tok, i) => {\n\t\tif (tok.t === \"open\") stack.push(i);\n\t\telse if (tok.t === \"close\" && stack.length) pairs.set(stack.pop(), i);\n\t});\n\treturn pairs;\n};\nconst build = (toks, pairs, start, end, top) => {\n\tlet seq = [];\n\tconst alts = [seq];\n\tfor (let i = start; i < end; i++) {\n\t\tconst tok = toks[i];\n\t\tconst close = pairs.get(i);\n\t\tif (tok.t === \"open\" && close !== void 0) {\n\t\t\tconst sub = build(toks, pairs, i + 1, close, false);\n\t\t\tseq.push({\n\t\t\t\tt: \"ext\",\n\t\t\t\ttype: tok.type,\n\t\t\t\talts: sub\n\t\t\t});\n\t\t\ti = close;\n\t\t} else if (tok.t === \"bar\" && !top) alts.push(seq = []);\n\t\telse if (tok.t === \"open\") seq.push(lit(tok.type), lit(\"(\"));\n\t\telse if (tok.t === \"bar\") seq.push(lit(\"|\"));\n\t\telse if (tok.t === \"close\") seq.push(lit(\")\"));\n\t\telse seq.push(tok);\n\t}\n\treturn alts;\n};\nconst normalize = (items, form) => {\n\tconst out = [];\n\tlet run = \"\";\n\tconst flush = () => {\n\t\tfor (const ch of run.normalize(form)) out.push(lit(ch));\n\t\trun = \"\";\n\t};\n\tfor (const it of items) {\n\t\tif (it.t === \"lit\") {\n\t\t\trun += it.ch;\n\t\t\tcontinue;\n\t\t}\n\t\tflush();\n\t\tout.push(it.t === \"ext\" ? {\n\t\t\t...it,\n\t\t\talts: it.alts.map((a) => normalize(a, form))\n\t\t} : it);\n\t}\n\tflush();\n\treturn out;\n};\nconst compile = (items, nocase) => {\n\tlet id = 1;\n\tconst split = (out) => ({\n\t\tt: \"split\",\n\t\tid: id++,\n\t\tout\n\t});\n\tconst seq = (items, next) => items.reduceRight((next, it) => item(it, next), next);\n\tconst item = (it, next) => {\n\t\tswitch (it.t) {\n\t\t\tcase \"lit\":\n\t\t\t\tconst re = nocase ? foldRe(it.ch) : void 0;\n\t\t\t\treturn {\n\t\t\t\t\tt: \"lit\",\n\t\t\t\t\tid: id++,\n\t\t\t\t\tch: it.ch,\n\t\t\t\t\tre,\n\t\t\t\t\tnext\n\t\t\t\t};\n\t\t\tcase \"any\":\n\t\t\tcase \"star\": return {\n\t\t\t\tt: it.t,\n\t\t\t\tid: id++,\n\t\t\t\tnext\n\t\t\t};\n\t\t\tcase \"class\": return {\n\t\t\t\tt: \"class\",\n\t\t\t\tid: id++,\n\t\t\t\tre: it.re,\n\t\t\t\tnext\n\t\t\t};\n\t\t}\n\t\tconst alts = (next) => it.alts.map((a) => seq(a, next));\n\t\tswitch (it.type) {\n\t\t\tcase \"@\": return split(alts(next));\n\t\t\tcase \"?\": return split([next, ...alts(next)]);\n\t\t\tcase \"!\": return {\n\t\t\t\tt: \"neg\",\n\t\t\t\tid: id++,\n\t\t\t\tsub: split(alts(MATCH)),\n\t\t\t\tnext\n\t\t\t};\n\t\t}\n\t\tconst after = split([]);\n\t\tconst entry = split(alts(after));\n\t\tafter.out.push(next, entry);\n\t\treturn it.type === \"*\" ? after : entry;\n\t};\n\treturn [seq(items, MATCH), id];\n};\nconst show = (start) => {\n\tconst lines = [];\n\tconst seen = /* @__PURE__ */ new Set();\n\tconst ref = (n) => n.t === \"match\" ? \"match\" : String(n.id);\n\tconst walk = (n, indent) => {\n\t\tif (n.t === \"match\" || seen.has(n)) return;\n\t\tseen.add(n);\n\t\tconst line = (desc) => lines.push(`${indent}${n.id}: ${desc}`);\n\t\tswitch (n.t) {\n\t\t\tcase \"split\":\n\t\t\t\tline(`split -> ${n.out.map(ref).join(\", \")}`);\n\t\t\t\tfor (const o of n.out) walk(o, indent);\n\t\t\t\treturn;\n\t\t\tcase \"neg\":\n\t\t\t\tline(`!(${ref(n.sub)}) -> ${ref(n.next)}`);\n\t\t\t\twalk(n.sub, indent + \" \");\n\t\t\t\treturn walk(n.next, indent);\n\t\t\tcase \"lit\":\n\t\t\t\tline(`${JSON.stringify(n.ch)} -> ${ref(n.next)}`);\n\t\t\t\tbreak;\n\t\t\tcase \"class\":\n\t\t\t\tline(`${n.re} -> ${ref(n.next)}`);\n\t\t\t\tbreak;\n\t\t\tdefault: line(`${n.t === \"any\" ? \"?\" : \"*\"} -> ${ref(n.next)}`);\n\t\t}\n\t\twalk(n.next, indent);\n\t};\n\twalk(start, \"\");\n\treturn [`start -> ${ref(start)}`, ...lines].join(\"\\n\");\n};\nvar State = class {\n\tgen;\n\tthreads = [];\n\tmatch = false;\n\truns = [];\n\tids = [];\n\tconstructor(gen) {\n\t\tthis.gen = gen;\n\t}\n\tget dead() {\n\t\treturn !this.threads.length && !this.match && !this.runs.length;\n\t}\n};\nconst sameState = (a, b) => {\n\tif (a.ids.length !== b.ids.length) return false;\n\tif (a.runs.length !== b.runs.length) return false;\n\tif (a.ids.some((id, i) => id !== b.ids[i])) return false;\n\treturn a.runs.every((r) => b.runs.some((o) => o.neg === r.neg && sameState(o.state, r.state)));\n};\nconst marks = (size) => ({\n\thas: new Float64Array(size),\n\tseen: new Float64Array(size),\n\tgen: 0\n});\nvar Sim = class {\n\tdots;\n\tdotStart;\n\t#marks;\n\tconstructor(dots, dotStart, marks) {\n\t\tthis.dots = dots;\n\t\tthis.dotStart = dotStart;\n\t\tthis.#marks = marks;\n\t}\n\tstate() {\n\t\treturn new State(++this.#marks.gen);\n\t}\n\tdone(state) {\n\t\tstate.ids = state.threads.map((n) => n.id).sort((a, b) => a - b);\n\t\tif (state.match) state.ids.unshift(MATCH.id);\n\t\treturn state;\n\t}\n\t#visit(state, node) {\n\t\tconst { seen } = this.#marks;\n\t\tif (seen[node.id] === state.gen) return false;\n\t\tseen[node.id] = state.gen;\n\t\treturn true;\n\t}\n\t#addThread(state, node) {\n\t\tconst { has } = this.#marks;\n\t\tif (has[node.id] === state.gen) return false;\n\t\thas[node.id] = state.gen;\n\t\tstate.threads.push(node);\n\t\treturn true;\n\t}\n\trestricted(i, top) {\n\t\treturn top && (this.dots || this.dotStart && i === 0);\n\t}\n\tadd(state, node, i, top) {\n\t\tswitch (node.t) {\n\t\t\tcase \"split\":\n\t\t\t\tif (!this.#visit(state, node)) return;\n\t\t\t\tfor (const o of node.out) this.add(state, o, i, top);\n\t\t\t\treturn;\n\t\t\tcase \"neg\":\n\t\t\t\tif (!this.#visit(state, node)) return;\n\t\t\t\tconst sub = this.state();\n\t\t\t\tthis.add(sub, node.sub, i, false);\n\t\t\t\tthis.done(sub);\n\t\t\t\treturn this.addRun(state, {\n\t\t\t\t\tt: \"run\",\n\t\t\t\t\tneg: node,\n\t\t\t\t\tstate: sub\n\t\t\t\t}, i, top);\n\t\t\tcase \"star\":\n\t\t\t\tif (this.restricted(i, top)) return;\n\t\t\t\tif (this.#addThread(state, node)) this.add(state, node.next, i, top);\n\t\t\t\treturn;\n\t\t\tcase \"match\":\n\t\t\t\tstate.match = true;\n\t\t\t\treturn;\n\t\t\tdefault: this.#addThread(state, node);\n\t\t}\n\t}\n\taddRun(state, run, i, top) {\n\t\tfor (const r of state.runs) if (r.neg === run.neg && sameState(r.state, run.state)) return;\n\t\tstate.runs.push(run);\n\t\tif (!run.state.match) this.add(state, run.neg.next, i, top);\n\t}\n\tstep(state, c, i, top) {\n\t\tconst next = this.state();\n\t\tfor (const th of state.threads) switch (th.t) {\n\t\t\tcase \"lit\":\n\t\t\t\tif (litMatch(th, c)) this.add(next, th.next, i + 1, top);\n\t\t\t\tbreak;\n\t\t\tcase \"any\":\n\t\t\t\tif (!this.restricted(i, top)) this.add(next, th.next, i + 1, top);\n\t\t\t\tbreak;\n\t\t\tcase \"class\":\n\t\t\t\tif (!this.restricted(i, top) && th.re.test(c)) this.add(next, th.next, i + 1, top);\n\t\t\t\tbreak;\n\t\t\tcase \"star\": if (!this.restricted(i, top)) this.add(next, th, i + 1, top);\n\t\t}\n\t\tif (!this.restricted(i, top)) for (const run of state.runs) {\n\t\t\tif (run.state.dead) {\n\t\t\t\tthis.addRun(next, run, i + 1, top);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst sub = this.step(run.state, c, i, false);\n\t\t\tthis.addRun(next, {\n\t\t\t\tt: \"run\",\n\t\t\t\tneg: run.neg,\n\t\t\t\tstate: sub\n\t\t\t}, i + 1, top);\n\t\t}\n\t\treturn this.done(next);\n\t}\n};\nconst stateKey = (state) => {\n\tconst ids = state.ids.join();\n\tif (!state.runs.length) return ids;\n\treturn `${ids}|${state.runs.map((r) => `${r.neg.id}(${stateKey(r.state)})`).sort().join(\"|\")}`;\n};\nconst DFA_BUDGET = 1 << 18;\nvar Dfa = class {\n\t#start;\n\t#states = /* @__PURE__ */ new Map();\n\t#size = 0;\n\t#plain;\n\t#dotStart;\n\t#sim;\n\t#dotSim;\n\tconstructor(start, marks) {\n\t\tthis.#start = start;\n\t\tthis.#sim = new Sim(false, false, marks);\n\t\tthis.#dotSim = new Sim(false, true, marks);\n\t}\n\t#make(state) {\n\t\treturn {\n\t\t\tstate,\n\t\t\tmatch: state.match,\n\t\t\tdead: state.dead,\n\t\t\tnext: /* @__PURE__ */ new Map()\n\t\t};\n\t}\n\t#intern(state) {\n\t\tconst key = stateKey(state);\n\t\tconst found = this.#states.get(key);\n\t\tif (found) return found;\n\t\tif (this.#size > DFA_BUDGET) this.#clear();\n\t\tconst d = this.#make(state);\n\t\tthis.#states.set(key, d);\n\t\tthis.#size += key.length + 1;\n\t\treturn d;\n\t}\n\t#clear() {\n\t\tthis.#states.clear();\n\t\tthis.#size = 0;\n\t\tthis.#plain = void 0;\n\t\tthis.#dotStart = void 0;\n\t}\n\tstart(dotStart) {\n\t\tif (dotStart) {\n\t\t\tif (this.#dotStart) return this.#dotStart;\n\t\t\tconst state = this.#dotSim.state();\n\t\t\tthis.#dotSim.add(state, this.#start, 0, true);\n\t\t\treturn this.#dotStart = this.#make(this.#dotSim.done(state));\n\t\t}\n\t\tif (this.#plain) return this.#plain;\n\t\tconst state = this.#sim.state();\n\t\tthis.#sim.add(state, this.#start, 0, true);\n\t\treturn this.#plain = this.#intern(this.#sim.done(state));\n\t}\n\tnext(d, c) {\n\t\tconst code = c.charCodeAt(0);\n\t\tconst found = code < 128 ? void 0 : d.next.get(c);\n\t\tif (found) return found;\n\t\tconst n = d === this.#dotStart ? this.#intern(this.#dotSim.step(d.state, c, 0, true)) : this.#intern(this.#sim.step(d.state, c, 1, true));\n\t\tif (code < 128) {\n\t\t\tif (!d.ascii) {\n\t\t\t\td.ascii = new Array(128);\n\t\t\t\tthis.#size += 128;\n\t\t\t}\n\t\t\td.ascii[code] = n;\n\t\t} else d.next.set(c, n);\n\t\tthis.#size++;\n\t\treturn n;\n\t}\n};\nconst linear = (start) => {\n\tconst nodes = [];\n\tfor (let n = start; n.t !== \"match\"; n = n.next) {\n\t\tif (n.t === \"split\" || n.t === \"neg\") return void 0;\n\t\tnodes.push(n);\n\t}\n\treturn nodes;\n};\nconst testLinear = (nodes, chars, start, end) => {\n\tlet ni = 0;\n\tlet ci = start;\n\tlet starNi = -1;\n\tlet starCi = 0;\n\twhile (ci < end) {\n\t\tconst n = nodes[ni];\n\t\tif (n?.t === \"star\") {\n\t\t\tstarNi = ni++;\n\t\t\tstarCi = ci;\n\t\t\tcontinue;\n\t\t}\n\t\tconst c = chars[ci];\n\t\tif (n && (n.t === \"any\" || n.t === \"lit\" && litMatch(n, c) || n.t === \"class\" && n.re.test(c))) {\n\t\t\tni++;\n\t\t\tci++;\n\t\t\tcontinue;\n\t\t}\n\t\tif (starNi === -1) return false;\n\t\tni = starNi + 1;\n\t\tci = ++starCi;\n\t}\n\twhile (nodes[ni]?.t === \"star\") ni++;\n\treturn ni === nodes.length;\n};\nconst lengths = (items) => {\n\tlet min = 0;\n\tlet max = 0;\n\tfor (const it of items) {\n\t\tconst [lo, hi] = itemLengths(it);\n\t\tmin += lo;\n\t\tmax += hi;\n\t}\n\treturn [min, max];\n};\nconst itemLengths = (it) => {\n\tif (it.t === \"star\") return [0, Infinity];\n\tif (it.t !== \"ext\") return [1, 1];\n\tif (it.type === \"!\") return [0, Infinity];\n\tconst alts = it.alts.map(lengths);\n\tconst min = Math.min(...alts.map((a) => a[0]));\n\tconst max = Math.max(...alts.map((a) => a[1]));\n\tconst loop = max === 0 ? 0 : Infinity;\n\treturn it.type === \"@\" ? [min, max] : it.type === \"?\" ? [0, max] : it.type === \"*\" ? [0, loop] : [min, loop];\n};\nconst hasAffix = (lits, chars, start) => {\n\tfor (let j = 0; j < lits.length; j++) if (!litMatch(lits[j], chars[start + j])) return false;\n\treturn true;\n};\nconst slashOrSurrogate = /[/\\ud800-\\udfff]/;\nconst surrogate = /[\\ud800-\\udfff]/;\nconst codePoints = (s) => surrogate.test(s) ? [...s] : s;\nconst noSlash = (s) => {\n\tif (s.includes(\"/\")) throw new Error(\"can only match a single path portion, got: \" + s);\n};\nvar Matcher = class {\n\tpattern;\n\toptions;\n\t#start;\n\t#size;\n\t#marks;\n\t#dotsSim;\n\t#literal;\n\t#literalFold = false;\n\t#literalRe;\n\t#linear;\n\t#wild = false;\n\t#min = 0;\n\t#max = Infinity;\n\t#prefix = [];\n\t#suffix = [];\n\t#prefixStr;\n\t#suffixStr;\n\t#affix = false;\n\t#dfa;\n\t#form;\n\tconstructor(pattern, options = {}) {\n\t\tif (pattern.includes(\"/\")) throw new Error(\"can only match a single path portion, got pattern: \" + pattern);\n\t\tthis.pattern = pattern;\n\t\tthis.options = options;\n\t\tconst { nocase = false, noext = false, normalize: n } = options;\n\t\tthis.#form = n === true ? \"NFC\" : n || void 0;\n\t\tconst literal = /^[?*+@]\\(\\)$/.test(pattern);\n\t\tconst toks = tokenize(pattern, nocase, noext || literal, this.#form);\n\t\tlet [items] = build(toks, pair(toks), 0, toks.length, true);\n\t\tif (this.#form) items = normalize(items, this.#form);\n\t\tconst [start, size] = compile(items, nocase);\n\t\tthis.#start = start;\n\t\tthis.#size = size;\n\t\tif (items.every((it) => it.t === \"lit\")) {\n\t\t\tthis.#literal = items.map((it) => it.ch).join(\"\");\n\t\t\tthis.#literalFold = nocase;\n\t\t} else {\n\t\t\tconst lit = (it) => it.t !== \"lit\" ? void 0 : nocase ? {\n\t\t\t\tch: it.ch,\n\t\t\t\tre: foldRe(it.ch)\n\t\t\t} : { ch: it.ch };\n\t\t\tfor (const it of items) {\n\t\t\t\tconst l = lit(it);\n\t\t\t\tif (!l) break;\n\t\t\t\tthis.#prefix.push(l);\n\t\t\t}\n\t\t\tfor (let j = items.length - 1; j >= 0; j--) {\n\t\t\t\tconst l = lit(items[j]);\n\t\t\t\tif (!l) break;\n\t\t\t\tthis.#suffix.unshift(l);\n\t\t\t}\n\t\t\tthis.#affix = !!(this.#prefix.length || this.#suffix.length);\n\t\t\tif (!nocase) {\n\t\t\t\tthis.#prefixStr = this.#prefix.map((l) => l.ch).join(\"\");\n\t\t\t\tthis.#suffixStr = this.#suffix.map((l) => l.ch).join(\"\");\n\t\t\t}\n\t\t\tthis.#linear = linear(this.#start)?.slice(this.#prefix.length, -this.#suffix.length || void 0);\n\t\t\tthis.#wild = !!this.#linear?.every((n) => n.t === \"star\" || n.t === \"any\");\n\t\t\tconst [min, max] = lengths(items);\n\t\t\tthis.#min = min;\n\t\t\tthis.#max = max;\n\t\t}\n\t}\n\ttest(s) {\n\t\tif (this.#form) {\n\t\t\tnoSlash(s);\n\t\t\treturn this.#test(s.normalize(this.#form));\n\t\t}\n\t\tif (slashOrSurrogate.test(s)) {\n\t\t\tnoSlash(s);\n\t\t\treturn this.#test(s, [...s]);\n\t\t}\n\t\treturn this.#test(s, s);\n\t}\n\t/**\n\t* The same as {@link Matcher#test}, but the string is not checked\n\t* for `/` chars, so the result for a string that has one is not\n\t* defined. Only use it for a string that is known to be one path\n\t* portion, such as a part of a path that was split on `/`. It can\n\t* be faster, because some patterns do not need to look at each char\n\t* of the string.\n\t*/\n\ttestUnchecked(s) {\n\t\treturn this.#test(this.#form ? s.normalize(this.#form) : s);\n\t}\n\t#test(s, chars) {\n\t\tif (this.#literal !== void 0) return this.#literalFold ? (this.#literalRe ??= newFoldRe(this.#literal)).test(s) : s === this.#literal;\n\t\tconst min = this.#min;\n\t\tconst max = this.#max;\n\t\tif (chars === void 0) {\n\t\t\tconst most = s.length;\n\t\t\tconst least = most + 1 >> 1;\n\t\t\tif (most < min || least > max) return false;\n\t\t\tif (least < min || most > max) chars = codePoints(s);\n\t\t}\n\t\tif (chars !== void 0 && (chars.length < min || chars.length > max)) return false;\n\t\tconst prefix = this.#prefix.length;\n\t\tif (this.#affix) {\n\t\t\tif (this.#prefixStr !== void 0 && this.#suffixStr !== void 0) {\n\t\t\t\tif (!s.startsWith(this.#prefixStr) || !s.endsWith(this.#suffixStr)) return false;\n\t\t\t} else {\n\t\t\t\tchars ??= codePoints(s);\n\t\t\t\tconst end = chars.length - this.#suffix.length;\n\t\t\t\tif (!hasAffix(this.#prefix, chars, 0) || !hasAffix(this.#suffix, chars, end)) return false;\n\t\t\t}\n\t\t}\n\t\tconst dotStart = !this.options.dot && s.startsWith(\".\");\n\t\tif (this.#linear) {\n\t\t\tif (s === \".\" || s === \"..\") return false;\n\t\t\tif (dotStart && !prefix) return false;\n\t\t\tif (this.#wild) return true;\n\t\t\tchars ??= codePoints(s);\n\t\t\tconst end = chars.length - this.#suffix.length;\n\t\t\treturn testLinear(this.#linear, chars, prefix, end);\n\t\t}\n\t\tchars ??= codePoints(s);\n\t\tif (s === \".\" || s === \"..\") {\n\t\t\tthis.#marks ??= marks(this.#size);\n\t\t\tconst sim = this.#dotsSim ??= new Sim(true, false, this.#marks);\n\t\t\tconst start = sim.state();\n\t\t\tsim.add(start, this.#start, 0, true);\n\t\t\tlet state = sim.done(start);\n\t\t\tfor (let i = 0; i < chars.length; i++) state = sim.step(state, chars[i], i, true);\n\t\t\treturn state.match;\n\t\t}\n\t\tthis.#marks ??= marks(this.#size);\n\t\tconst dfa = this.#dfa ??= new Dfa(this.#start, this.#marks);\n\t\tlet d = dfa.start(dotStart);\n\t\tconst str = chars === s;\n\t\tfor (let i = 0; i < chars.length; i++) {\n\t\t\tif (d.dead) return false;\n\t\t\tconst code = str ? s.charCodeAt(i) : chars[i].charCodeAt(0);\n\t\t\td = d.ascii?.[code] ?? dfa.next(d, chars[i]);\n\t\t}\n\t\treturn d.match;\n\t}\n\t/** a readable listing of the state machine */\n\ttoString() {\n\t\treturn show(this.#start);\n\t}\n};\n// ../../node_modules/.pnpm/minimatch@11.0.3/node_modules/minimatch/dist/esm/assert-valid-pattern.js\nconst MAX_PATTERN_LENGTH = 65536;\nconst assertValidPattern = (pattern) => {\n\tif (typeof pattern !== \"string\") throw new TypeError(\"invalid pattern\");\n\tif (pattern.length > MAX_PATTERN_LENGTH) throw new TypeError(\"pattern is too long\");\n};\n// ../../node_modules/.pnpm/minimatch@11.0.3/node_modules/minimatch/dist/esm/escape.js\n/**\n* Escape all magic characters in a glob pattern.\n*\n* If the {@link MinimatchOptions.windowsPathsNoEscape}\n* option is used, then characters are escaped by wrapping in `[]`, because\n* a magic character wrapped in a character class can only be satisfied by\n* that exact character. In this mode, `\\` is _not_ escaped, because it is\n* not interpreted as a magic character, but instead as a path separator.\n*\n* If the {@link MinimatchOptions.magicalBraces} option is used,\n* then braces (`{` and `}`) will be escaped.\n*/\nconst escape = (s, { windowsPathsNoEscape = false, magicalBraces = false } = {}) => {\n\tif (magicalBraces) return windowsPathsNoEscape ? s.replace(/[?*()[\\]{}]/g, \"[$&]\") : s.replace(/[?*()[\\]\\\\{}]/g, \"\\\\$&\");\n\treturn windowsPathsNoEscape ? s.replace(/[?*()[\\]]/g, \"[$&]\") : s.replace(/[?*()[\\]\\\\]/g, \"\\\\$&\");\n};\n// ../../node_modules/.pnpm/minimatch@11.0.3/node_modules/minimatch/dist/esm/unescape.js\n/**\n* Un-escape a string that has been escaped with {@link escape}.\n*\n* If the {@link MinimatchOptions.windowsPathsNoEscape} option is used, then\n* square-bracket escapes are removed, but not backslash escapes.\n*\n* For example, it will turn the string `'[*]'` into `*`, but it will not\n* turn `'\\\\*'` into `'*'`, because `\\` is a path separator in\n* `windowsPathsNoEscape` mode.\n*\n* When `windowsPathsNoEscape` is not set, then both square-bracket escapes and\n* backslash escapes are removed.\n*\n* Slashes (and backslashes in `windowsPathsNoEscape` mode) cannot be escaped\n* or unescaped.\n*\n* When `magicalBraces` is not set, escapes of braces (`{` and `}`) will not be\n* unescaped.\n*/\nconst unescape = (s, { windowsPathsNoEscape = false, magicalBraces = true } = {}) => {\n\tif (magicalBraces) return windowsPathsNoEscape ? s.replace(/\\[([^/\\\\])\\]/g, \"$1\") : s.replace(/((?!\\\\).|^)\\[([^/\\\\])\\]/g, \"$1$2\").replace(/\\\\([^/])/g, \"$1\");\n\treturn windowsPathsNoEscape ? s.replace(/\\[([^/\\\\{}])\\]/g, \"$1\") : s.replace(/((?!\\\\).|^)\\[([^/\\\\{}])\\]/g, \"$1$2\").replace(/\\\\([^/{}])/g, \"$1\");\n};\n// ../../node_modules/.pnpm/minimatch@11.0.3/node_modules/minimatch/dist/esm/index.js\nconst minimatch = (p, pattern, options = {}) => {\n\tassertValidPattern(pattern);\n\tif (!options.nocomment && pattern.charAt(0) === \"#\") return false;\n\treturn cachedMinimatch(pattern, options).match(p);\n};\nconst cache = /* @__PURE__ */ new Map();\nconst cacheMax = 256;\nconst cachedMinimatch = (pattern, options) => {\n\tconst key = pattern + \"\\0\" + JSON.stringify(options);\n\tlet mm = cache.get(key);\n\tif (mm) cache.delete(key);\n\telse {\n\t\tmm = new Minimatch(pattern, { ...options });\n\t\tif (cache.size >= cacheMax) cache.delete(cache.keys().next().value);\n\t}\n\tcache.set(key, mm);\n\treturn mm;\n};\n/* c8 ignore start */\nconst defaultPlatform = typeof process === \"object\" && process ? process.env?.__MINIMATCH_TESTING_PLATFORM__ || process.platform : \"posix\";\nconst path = {\n\twin32: { sep: \"\\\\\" },\n\tposix: { sep: \"/\" }\n};\nminimatch.sep = defaultPlatform === \"win32\" ? path.win32.sep : path.posix.sep;\nconst GLOBSTAR = Symbol(\"globstar **\");\nminimatch.GLOBSTAR = GLOBSTAR;\nconst filter = (pattern, options = {}) => (p) => minimatch(p, pattern, options);\nminimatch.filter = filter;\nconst ext = (a, b = {}) => Object.assign({}, a, b);\nconst defaults = (def) => {\n\tif (!def || typeof def !== \"object\" || !Object.keys(def).length) return minimatch;\n\tconst orig = minimatch;\n\tconst m = (p, pattern, options = {}) => orig(p, pattern, ext(def, options));\n\treturn Object.assign(m, {\n\t\tMinimatch: class Minimatch extends orig.Minimatch {\n\t\t\tconstructor(pattern, options = {}) {\n\t\t\t\tsuper(pattern, ext(def, options));\n\t\t\t}\n\t\t\tstatic defaults(options) {\n\t\t\t\treturn orig.defaults(ext(def, options)).Minimatch;\n\t\t\t}\n\t\t},\n\t\tunescape: (s, options = {}) => orig.unescape(s, ext(def, options)),\n\t\tescape: (s, options = {}) => orig.escape(s, ext(def, options)),\n\t\tfilter: (pattern, options = {}) => orig.filter(pattern, ext(def, options)),\n\t\tdefaults: (options) => orig.defaults(ext(def, options)),\n\t\tbraceExpand: (pattern, options = {}) => orig.braceExpand(pattern, ext(def, options)),\n\t\tmatch: (list, pattern, options = {}) => orig.match(list, pattern, ext(def, options)),\n\t\tsep: orig.sep,\n\t\tGLOBSTAR\n\t});\n};\nminimatch.defaults = defaults;\nconst braceExpand = (pattern, options = {}) => {\n\tassertValidPattern(pattern);\n\tif (options.nobrace || !/\\{(?:(?!\\{).)*\\}/.test(pattern)) return [pattern];\n\treturn expand(pattern, { max: options.braceExpandMax });\n};\nminimatch.braceExpand = braceExpand;\nconst match = (list, pattern, options = {}) => {\n\tconst mm = new Minimatch(pattern, options);\n\tlist = list.filter((f) => mm.match(f));\n\tif (mm.options.nonull && !list.length) list.push(pattern);\n\treturn list;\n};\nminimatch.match = match;\nconst globMagic = /[?*]|[+@!]\\(.*?\\)|\\[|\\]/;\nconst classEnd = (pattern, start) => {\n\tlet i = start + 1;\n\tif (pattern.charAt(i) === \"!\" || pattern.charAt(i) === \"^\") i++;\n\tlet sawStart = false;\n\tfor (; i < pattern.length; i++) {\n\t\tconst c = pattern.charAt(i);\n\t\tif (c === \"]\" && sawStart) return i;\n\t\tsawStart = true;\n\t\tif (c === \"\\\\\") i++;\n\t}\n\treturn -1;\n};\nconst literal = (pattern, noext) => {\n\tif (!noext && (pattern === \"+()\" || pattern === \"@()\")) return pattern;\n\tlet lit = \"\";\n\tfor (let i = 0; i < pattern.length; i++) {\n\t\tconst c = pattern.charAt(i);\n\t\tif (c === \"\\\\\") lit += pattern.charAt(++i) || c;\n\t\telse if (c === \"*\" || c === \"?\") return;\n\t\telse if (c === \"[\") {\n\t\t\tconst close = classEnd(pattern, i);\n\t\t\tif (close === -1) {\n\t\t\t\tlit += c;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tlet body = pattern.slice(i + 1, close);\n\t\t\tif (body.startsWith(\"\\\\\")) body = body.slice(1);\n\t\t\tif ([...body].length !== 1 || \"!^\".includes(pattern.charAt(i + 1))) return;\n\t\t\tlit += body;\n\t\t\ti = close;\n\t\t} else if (!noext && \"+@!\".includes(c) && pattern.charAt(i + 1) === \"(\" && pattern.includes(\")\", i + 2)) return;\n\t\telse lit += c;\n\t}\n\treturn lit;\n};\nconst extSafe = (pattern) => {\n\tif (/^[?*+@]\\(\\)$/.test(pattern) || pattern.includes(\"[:\")) return false;\n\tlet depth = 0;\n\tfor (let i = 0; i < pattern.length; i++) {\n\t\tconst c = pattern.charAt(i);\n\t\tif (c === \"\\\\\") {\n\t\t\tif (++i === pattern.length) return false;\n\t\t} else if (c === \"[\") {\n\t\t\tconst close = classEnd(pattern, i);\n\t\t\tif (close !== -1) i = close;\n\t\t} else if (\"+@!?*\".includes(c) && pattern.charAt(i + 1) === \"(\") {\n\t\t\tdepth++;\n\t\t\ti++;\n\t\t} else if (c === \")\") {\n\t\t\tif (!depth--) return false;\n\t\t} else if (c === \"|\" && !depth) return false;\n\t}\n\treturn !depth;\n};\nlet lastSplit;\nlet lastChecked;\nconst portionMatch = (p, f) => typeof p === \"string\" ? f === p : f !== \"\" && p.testUnchecked(f);\nconst endIndex = (p, last, lastStart, prev, prevStart) => portionMatch(p, last) ? lastStart : prev !== void 0 && portionMatch(p, prev) ? prevStart : -1;\nconst isDots = (p) => p === \".\" || p === \"..\";\nconst isDrive = (p) => typeof p === \"string\" && /^[a-z]:$/i.test(p);\nconst isLongUNC = (p) => typeof p === \"string\" && /^unc$/i.test(p);\nconst uncHost = (p) => {\n\tif (p[0] !== \"\" || p[1] !== \"\") return -1;\n\tconst h = p[2] !== \"?\" ? 2 : isLongUNC(p[3]) ? 4 : -1;\n\tconst host = p[h];\n\tconst share = p[h + 1];\n\treturn h !== -1 && host !== void 0 && host !== \"\" && host !== GLOBSTAR && share !== void 0 && share !== \"\" && share !== GLOBSTAR ? h : -1;\n};\nconst walkable = (p, dot) => !isDots(p) && (dot || !p.startsWith(\".\"));\nconst dotPortion = (f, start, end, dot, sep) => {\n\tfor (let k = start; k < end;) {\n\t\tif (f.charCodeAt(k) === 46) {\n\t\t\tif (!dot) return true;\n\t\t\tconst n = f.charCodeAt(k + 1) === 46 ? k + 2 : k + 1;\n\t\t\tif (n >= end || isSep(f.charCodeAt(n), sep)) return true;\n\t\t}\n\t\tconst s = nextSep(f, k, sep);\n\t\tif (s === -1) return false;\n\t\tk = s + 1;\n\t\twhile (k < end && isSep(f.charCodeAt(k), sep)) k++;\n\t}\n\treturn false;\n};\nconst isSep = (c, sep) => sep === \"/\" ? c === 47 : sep === \"\\\\\" ? c === 92 : c === 47 || c === 92;\nconst nextSep = (f, from, sep) => {\n\tif (sep !== \"both\") return f.indexOf(sep, from);\n\tconst s = f.indexOf(\"/\", from);\n\tconst b = f.indexOf(\"\\\\\", from);\n\treturn s === -1 ? b : b === -1 ? s : Math.min(s, b);\n};\nconst lastSep = (f, from, sep) => sep !== \"both\" ? f.lastIndexOf(sep, from) : Math.max(f.lastIndexOf(\"/\", from), f.lastIndexOf(\"\\\\\", from));\nconst PENDING = {};\nvar Minimatch = class {\n\toptions;\n\tset;\n\tpattern;\n\twindowsPathsNoEscape;\n\tnonegate;\n\tnegate;\n\tcomment;\n\tempty;\n\tpreserveMultipleSlashes;\n\tpartial;\n\tglobSet;\n\tglobParts;\n\tnocase;\n\tisWindows;\n\tplatform;\n\twindowsNoMagicRoot;\n\tmaxGlobstarRecursion;\n\t#endCheck;\n\t#literalCheck;\n\t#level2;\n\t#form;\n\t#literals = [];\n\t#shapes = [];\n\t#endRows = [];\n\t#matchers = /* @__PURE__ */ new Map();\n\t#pending = false;\n\t#globstarParts = /* @__PURE__ */ new WeakMap();\n\tconstructor(pattern, options = {}) {\n\t\tassertValidPattern(pattern);\n\t\toptions = options || {};\n\t\tthis.options = options;\n\t\tthis.maxGlobstarRecursion = options.maxGlobstarRecursion ?? 200;\n\t\tthis.pattern = pattern;\n\t\tthis.platform = options.platform || defaultPlatform;\n\t\tthis.isWindows = this.platform === \"win32\";\n\t\tconst awe = \"allowWindowsEscape\";\n\t\tthis.windowsPathsNoEscape = !!options.windowsPathsNoEscape || options[awe] === false;\n\t\tif (this.windowsPathsNoEscape) this.pattern = this.pattern.replace(/\\\\/g, \"/\");\n\t\tthis.preserveMultipleSlashes = !!options.preserveMultipleSlashes;\n\t\tthis.negate = false;\n\t\tthis.nonegate = !!options.nonegate;\n\t\tthis.comment = false;\n\t\tthis.empty = false;\n\t\tthis.partial = !!options.partial;\n\t\tthis.nocase = !!this.options.nocase;\n\t\tthis.windowsNoMagicRoot = options.windowsNoMagicRoot !== void 0 ? options.windowsNoMagicRoot : !!(this.isWindows && this.nocase);\n\t\tthis.globSet = [];\n\t\tthis.globParts = [];\n\t\tthis.set = [];\n\t\tthis.#endCheck = !this.preserveMultipleSlashes;\n\t\tthis.#level2 = (options.optimizationLevel ?? 1) >= 2;\n\t\tconst n = options.normalize;\n\t\tthis.#form = n === true ? \"NFC\" : n || void 0;\n\t\tthis.make();\n\t\tconst drives = this.set.map((row) => this.#rootIndex(row));\n\t\tthis.#endRows = this.set.map((row, r) => this.#endCheck && row.length - 1 > drives[r]);\n\t\tthis.#literals = this.set.map((row, r) => {\n\t\t\tconst end = this.#endRows[r] ? row.length - 1 : row.length;\n\t\t\tconst lits = row.slice(drives[r] + 1, end).filter((p) => typeof p === \"string\" && !!p);\n\t\t\treturn [...new Set(lits)];\n\t\t});\n\t\tthis.#literalCheck = this.#literals.some((l) => l.length);\n\t\tthis.#shapes = this.set.map((row, r) => {\n\t\t\tconst [p0, p1, p2] = row;\n\t\t\tif (this.#endRows[r] && row.length === 2) {\n\t\t\t\tif (p0 === GLOBSTAR && p1 !== GLOBSTAR) return \"tail\";\n\t\t\t}\n\t\t\tif (this.#endRows[r] && options.matchBase && row.length === 1 && p0 !== GLOBSTAR && p0 !== \"\") return \"base\";\n\t\t\tif (!this.#endCheck || drives[r] !== -1) return void 0;\n\t\t\tif (row.length === 3 && p0 === GLOBSTAR && p2 === GLOBSTAR && p1 !== GLOBSTAR && p1 !== \"\" && this.maxGlobstarRecursion > 0) return \"mid\";\n\t\t\tif (row.length === 2 && p1 === GLOBSTAR && p0 !== GLOBSTAR && p0 !== \"\") return \"head\";\n\t\t});\n\t}\n\t#norm(p) {\n\t\treturn this.#form ? p.normalize(this.#form) : p;\n\t}\n\t#rootIndex(row) {\n\t\tif (!this.isWindows) return -1;\n\t\tif (isDrive(row[0])) return 0;\n\t\tif (row[0] === \"\" && row[1] === \"\" && row[2] === \"?\" && isDrive(row[3])) return 3;\n\t\tconst h = uncHost(row);\n\t\treturn h === -1 ? -1 : h + 1;\n\t}\n\thasMagic() {\n\t\tif (this.options.magicalBraces && this.set.length > 1) return true;\n\t\tfor (const pattern of this.set) for (const part of pattern) if (typeof part !== \"string\") return true;\n\t\treturn false;\n\t}\n\tmake() {\n\t\tconst pattern = this.pattern;\n\t\tconst options = this.options;\n\t\tif (!options.nocomment && pattern.charAt(0) === \"#\") {\n\t\t\tthis.comment = true;\n\t\t\treturn;\n\t\t}\n\t\tif (!pattern) {\n\t\t\tthis.empty = true;\n\t\t\treturn;\n\t\t}\n\t\tthis.parseNegate();\n\t\tthis.globSet = [...new Set(this.braceExpand())];\n\t\tconst rawGlobParts = this.globSet.map((s) => this.#slashSplit(s));\n\t\tthis.globParts = this.preprocess(rawGlobParts);\n\t\tthis.#pending = true;\n\t\tlet set = this.globParts.map((s, _, __) => {\n\t\t\tif (this.isWindows && this.windowsNoMagicRoot) {\n\t\t\t\tconst n = s[2] === \"?\" && isLongUNC(s[3]) ? 6 : 4;\n\t\t\t\tconst isUNC = s[0] === \"\" && s[1] === \"\" && (s[2] === \"?\" || !globMagic.test(s[2])) && s.slice(3, n).every((p) => !globMagic.test(p));\n\t\t\t\tconst isDrive = /^[a-z]:/i.test(s[0]);\n\t\t\t\tif (isUNC) return [...s.slice(0, n).map((p) => this.#norm(p)), ...s.slice(n).map((ss) => this.parse(ss))];\n\t\t\t\telse if (isDrive) return [this.#norm(s[0]), ...s.slice(1).map((ss) => this.parse(ss))];\n\t\t\t}\n\t\t\treturn s.map((ss) => this.parse(ss));\n\t\t});\n\t\tthis.set = set.filter((s) => s.indexOf(false) === -1);\n\t\tif (this.isWindows) for (let i = 0; i < this.set.length; i++) {\n\t\t\tconst p = this.set[i];\n\t\t\tif (p[0] === \"\" && p[1] === \"\" && this.globParts[i][2] === \"?\" && (isDrive(p[3]) || isLongUNC(this.globParts[i][3]))) {\n\t\t\t\tif (isLongUNC(this.globParts[i][3])) p[3] = \"UNC\";\n\t\t\t\tp[2] = \"?\";\n\t\t\t}\n\t\t}\n\t\tif (!options.noext) this.mergeRows();\n\t\tthis.#pending = false;\n\t\tthis.set.forEach((row, i) => {\n\t\t\tfor (let k = 0; k < row.length; k++) if (row[k] === PENDING) row[k] = this.parse(this.globParts[i][k]);\n\t\t});\n\t}\n\tmergeRows() {\n\t\tlet merged = true;\n\t\twhile (merged) {\n\t\t\tmerged = false;\n\t\t\tconst len = Math.max(0, ...this.set.map((r) => r.length));\n\t\t\tfor (let k = 0; k < len; k++) {\n\t\t\t\tconst groups = /* @__PURE__ */ new Map();\n\t\t\t\tthis.set.forEach((row, i) => {\n\t\t\t\t\tif (!(row[k] instanceof Matcher || row[k] === PENDING) || !extSafe(this.globParts[i][k])) return;\n\t\t\t\t\tconst parts = [...this.globParts[i]];\n\t\t\t\t\tparts[k] = \"\";\n\t\t\t\t\tconst key = `${row.length}/${parts.join(\"/\")}`;\n\t\t\t\t\tconst g = groups.get(key);\n\t\t\t\t\tif (g) g.push(i);\n\t\t\t\t\telse groups.set(key, [i]);\n\t\t\t\t});\n\t\t\t\tconst drop = /* @__PURE__ */ new Set();\n\t\t\t\tfor (const g of groups.values()) {\n\t\t\t\t\tif (g.length < 2) continue;\n\t\t\t\t\tconst [first, ...rest] = g;\n\t\t\t\t\tconst glob = `@(${g.map((i) => this.globParts[i][k]).join(\"|\")})`;\n\t\t\t\t\tthis.globParts[first][k] = glob;\n\t\t\t\t\tthis.set[first][k] = this.parse(glob);\n\t\t\t\t\tfor (const i of rest) drop.add(i);\n\t\t\t\t}\n\t\t\t\tif (drop.size) {\n\t\t\t\t\tmerged = true;\n\t\t\t\t\tthis.set = this.set.filter((_, i) => !drop.has(i));\n\t\t\t\t\tthis.globParts = this.globParts.filter((_, i) => !drop.has(i));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tpreprocess(globParts) {\n\t\tif (this.options.noglobstar) {\n\t\t\tfor (const partset of globParts) for (let j = 0; j < partset.length; j++) if (partset[j] === \"**\") partset[j] = \"*\";\n\t\t}\n\t\tconst { optimizationLevel = 1 } = this.options;\n\t\tif (optimizationLevel >= 2) {\n\t\t\tglobParts = this.firstPhasePreProcess(globParts);\n\t\t\tglobParts = this.secondPhasePreProcess(globParts);\n\t\t} else if (optimizationLevel >= 1) globParts = this.levelOneOptimize(globParts);\n\t\telse globParts = this.adjascentGlobstarOptimize(globParts);\n\t\treturn globParts;\n\t}\n\tadjascentGlobstarOptimize(globParts) {\n\t\treturn globParts.map((parts) => {\n\t\t\tlet gs = -1;\n\t\t\twhile (-1 !== (gs = parts.indexOf(\"**\", gs + 1))) {\n\t\t\t\tlet i = gs;\n\t\t\t\twhile (parts[i + 1] === \"**\") i++;\n\t\t\t\tif (i !== gs) parts.splice(gs, i - gs);\n\t\t\t}\n\t\t\treturn parts;\n\t\t});\n\t}\n\tlevelOneOptimize(globParts) {\n\t\treturn globParts.map((parts) => {\n\t\t\tconst root = this.#rootIndex(parts) + 1;\n\t\t\tparts = parts.reduce((set, part) => {\n\t\t\t\tconst prev = set[set.length - 1];\n\t\t\t\tif (part === \"**\" && prev === \"**\") return set;\n\t\t\t\tif (part === \"..\") {\n\t\t\t\t\tif (set.length > root && prev && prev !== \"..\" && prev !== \".\" && prev !== \"**\") {\n\t\t\t\t\t\tset.pop();\n\t\t\t\t\t\treturn set;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tset.push(part);\n\t\t\t\treturn set;\n\t\t\t}, []);\n\t\t\treturn parts.length === 0 ? [\"\"] : parts;\n\t\t});\n\t}\n\t#canMatch(f) {\n\t\tconst sep = !this.isWindows || !f.includes(\"\\\\\") ? \"/\" : f.includes(\"/\") ? \"both\" : \"\\\\\";\n\t\tlet ends = this.#endCheck ? 0 : -1;\n\t\tlet last = \"\";\n\t\tlet lastStart = 0;\n\t\tlet prev;\n\t\tlet prevStart = 0;\n\t\tconst dot = !!this.options.dot;\n\t\tROWS: for (let r = 0; r < this.set.length; r++) {\n\t\t\tconst row = this.set[r];\n\t\t\tconst p = row[row.length - 1];\n\t\t\tlet end = ends !== -1 && this.#endRows[r] && p !== GLOBSTAR;\n\t\t\tif (end && ends === 0) {\n\t\t\t\tconst i = lastSep(f, f.length, sep);\n\t\t\t\tlastStart = i + 1;\n\t\t\t\tlast = f.slice(lastStart);\n\t\t\t\tif (last === \"\" && i >= 0) {\n\t\t\t\t\tlet j = i;\n\t\t\t\t\twhile (j > 0 && isSep(f.charCodeAt(j - 1), sep)) j--;\n\t\t\t\t\tprevStart = j === 0 ? 0 : lastSep(f, j - 1, sep) + 1;\n\t\t\t\t\tprev = f.slice(prevStart, j);\n\t\t\t\t}\n\t\t\t\tconst resolves = this.#level2 && (isDots(last) || last === \"\" && prev !== void 0 && isDots(prev));\n\t\t\t\tends = resolves ? -1 : 1;\n\t\t\t\tend = !resolves;\n\t\t\t}\n\t\t\tlet tailStart = -1;\n\t\t\tif (end && typeof p === \"string\") {\n\t\t\t\ttailStart = endIndex(p, last, lastStart, prev, prevStart);\n\t\t\t\tif (tailStart === -1) continue;\n\t\t\t}\n\t\t\tif (this.#literalCheck) {\n\t\t\t\tfor (const l of this.#literals[r]) if (!f.includes(l)) continue ROWS;\n\t\t\t}\n\t\t\tif (end && typeof p === \"object\") {\n\t\t\t\ttailStart = endIndex(p, last, lastStart, prev, prevStart);\n\t\t\t\tif (tailStart === -1) continue;\n\t\t\t}\n\t\t\tconst shape = this.#shapes[r];\n\t\t\tif (shape === \"base\" && end) return \"yes\";\n\t\t\tif (shape === \"tail\" && end) {\n\t\t\t\tif (this.#level2 && dotPortion(f, 0, tailStart, true, sep)) return \"maybe\";\n\t\t\t\tif (!dotPortion(f, 0, tailStart, dot, sep)) return \"yes\";\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (shape === \"mid\" || shape === \"head\") {\n\t\t\t\tconst m = this.#walk(f, row, shape === \"head\", dot, sep);\n\t\t\t\tif (m !== \"no\") return m;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\treturn \"maybe\";\n\t\t}\n\t\treturn \"no\";\n\t}\n\t#matchShape(file, row, shape) {\n\t\tconst dot = !!this.options.dot;\n\t\tconst n = file.length;\n\t\tif (shape === \"head\") {\n\t\t\tif (n < 2 || !portionMatch(row[0], file[0])) return false;\n\t\t\tfor (let i = 1; i < n; i++) if (!walkable(file[i], dot)) return false;\n\t\t\treturn true;\n\t\t}\n\t\tconst x = row[1];\n\t\tif (shape === \"tail\") {\n\t\t\tlet t = n - 1;\n\t\t\tif (!portionMatch(x, file[t])) {\n\t\t\t\tif (file[t] !== \"\" || n === 1 || !portionMatch(x, file[--t])) return false;\n\t\t\t}\n\t\t\tfor (let i = 0; i < t; i++) if (!walkable(file[i], dot)) return false;\n\t\t\treturn true;\n\t\t}\n\t\tfor (let k = 0; k < n; k++) {\n\t\t\tif (portionMatch(x, file[k]) && k + 1 < n) {\n\t\t\t\tlet i = k + 1;\n\t\t\t\twhile (i < n && walkable(file[i], dot)) i++;\n\t\t\t\tif (i === n) return true;\n\t\t\t}\n\t\t\tif (!walkable(file[k], dot)) return false;\n\t\t}\n\t\treturn false;\n\t}\n\t#walk(f, row, head, dot, sep) {\n\t\tif (this.#level2 && dotPortion(f, 0, f.length, true, sep)) return \"maybe\";\n\t\tconst x = row[head ? 0 : 1];\n\t\tlet s = 0;\n\t\tfor (let e = nextSep(f, s, sep); e !== -1; e = nextSep(f, s, sep)) {\n\t\t\tlet next = e + 1;\n\t\t\twhile (next < f.length && isSep(f.charCodeAt(next), sep)) next++;\n\t\t\tif ((typeof x === \"string\" ? e - s === x.length && f.startsWith(x, s) : e > s && x.testUnchecked(f.slice(s, e))) && !dotPortion(f, next, f.length, dot, sep)) return \"yes\";\n\t\t\tif (head || dotPortion(f, s, next, dot, sep)) return \"no\";\n\t\t\ts = next;\n\t\t}\n\t\treturn \"no\";\n\t}\n\t#cachedSplit(f) {\n\t\tconst last = lastSplit;\n\t\treturn last?.f === f && last.isWindows === this.isWindows && last.preserveMultipleSlashes === this.preserveMultipleSlashes && last.normalize === this.#form ? last : void 0;\n\t}\n\t#split(f) {\n\t\tconst { isWindows, preserveMultipleSlashes } = this;\n\t\tlet parts = this.#slashSplit(isWindows ? f.split(\"\\\\\").join(\"/\") : f);\n\t\tconst normalize = this.#form;\n\t\tif (normalize) parts = parts.map((p) => p.normalize(normalize));\n\t\tlastSplit = {\n\t\t\tf,\n\t\t\tisWindows,\n\t\t\tpreserveMultipleSlashes,\n\t\t\tnormalize,\n\t\t\tparts\n\t\t};\n\t\treturn lastSplit;\n\t}\n\t#levelTwoFileOptimize(file) {\n\t\tconst parts = [...file];\n\t\tlet didSomething = false;\n\t\tdo {\n\t\t\tdidSomething = false;\n\t\t\tif (!this.preserveMultipleSlashes) {\n\t\t\t\tfor (let i = 1; i < parts.length - 1; i++) {\n\t\t\t\t\tconst p = parts[i];\n\t\t\t\t\tif (i === 1 && p === \"\" && parts[0] === \"\") continue;\n\t\t\t\t\tif (p === \".\" || p === \"\") {\n\t\t\t\t\t\tdidSomething = true;\n\t\t\t\t\t\tparts.splice(i, 1);\n\t\t\t\t\t\ti--;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (parts[0] === \".\" && parts.length === 2 && (parts[1] === \".\" || parts[1] === \"\")) {\n\t\t\t\t\tdidSomething = true;\n\t\t\t\t\tparts.pop();\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst root = this.#rootIndex(parts) + 1;\n\t\t\tlet dd = root;\n\t\t\twhile (-1 !== (dd = parts.indexOf(\"..\", dd + 1))) {\n\t\t\t\tconst p = parts[dd - 1];\n\t\t\t\tif (p && p !== \".\" && p !== \"..\" && p !== \"**\") {\n\t\t\t\t\tdidSomething = true;\n\t\t\t\t\tparts.splice(dd - 1, 2);\n\t\t\t\t\tdd = Math.max(dd - 2, root);\n\t\t\t\t}\n\t\t\t}\n\t\t} while (didSomething);\n\t\treturn parts.length === 0 ? [\"\"] : parts;\n\t}\n\tfirstPhasePreProcess(globParts) {\n\t\tconst { braceExpandMax = 1e5 } = this.options;\n\t\tlet didSomething = false;\n\t\tdo {\n\t\t\tdidSomething = false;\n\t\t\tfor (let parts of globParts) {\n\t\t\t\tlet gs = -1;\n\t\t\t\twhile (-1 !== (gs = parts.indexOf(\"**\", gs + 1))) {\n\t\t\t\t\tlet gss = gs;\n\t\t\t\t\twhile (parts[gss + 1] === \"**\") gss++;\n\t\t\t\t\tif (gss > gs) parts.splice(gs + 1, gss - gs);\n\t\t\t\t\tlet next = parts[gs + 1];\n\t\t\t\t\tconst p = parts[gs + 2];\n\t\t\t\t\tconst p2 = parts[gs + 3];\n\t\t\t\t\tif (next !== \"..\") continue;\n\t\t\t\t\tif (!p || p === \".\" || p === \"..\" || !p2 || p2 === \".\" || p2 === \"..\" || globParts.length >= braceExpandMax) continue;\n\t\t\t\t\tdidSomething = true;\n\t\t\t\t\tparts.splice(gs, 1);\n\t\t\t\t\tconst other = parts.slice(0);\n\t\t\t\t\tother[gs] = \"**\";\n\t\t\t\t\tglobParts.push(other);\n\t\t\t\t\tgs--;\n\t\t\t\t}\n\t\t\t\tif (!this.preserveMultipleSlashes) {\n\t\t\t\t\tfor (let i = 1; i < parts.length - 1; i++) {\n\t\t\t\t\t\tconst p = parts[i];\n\t\t\t\t\t\tif (i === 1 && p === \"\" && parts[0] === \"\") continue;\n\t\t\t\t\t\tif (p === \".\" || p === \"\") {\n\t\t\t\t\t\t\tdidSomething = true;\n\t\t\t\t\t\t\tparts.splice(i, 1);\n\t\t\t\t\t\t\ti--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (parts[0] === \".\" && parts.length === 2 && (parts[1] === \".\" || parts[1] === \"\")) {\n\t\t\t\t\t\tdidSomething = true;\n\t\t\t\t\t\tparts.pop();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconst root = this.#rootIndex(parts) + 1;\n\t\t\t\tlet dd = root;\n\t\t\t\twhile (-1 !== (dd = parts.indexOf(\"..\", dd + 1))) {\n\t\t\t\t\tconst p = parts[dd - 1];\n\t\t\t\t\tif (p && p !== \".\" && p !== \"..\" && p !== \"**\") {\n\t\t\t\t\t\tdidSomething = true;\n\t\t\t\t\t\tconst splin = dd === 1 && parts[dd + 1] === \"**\" ? [\".\"] : [];\n\t\t\t\t\t\tparts.splice(dd - 1, 2, ...splin);\n\t\t\t\t\t\tif (parts.length === 0) parts.push(\"\");\n\t\t\t\t\t\tdd = Math.max(dd - 2, root);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} while (didSomething);\n\t\treturn globParts;\n\t}\n\tsecondPhasePreProcess(globParts) {\n\t\tif (globParts.length > 1e3) return globParts;\n\t\tfor (let i = 0; i < globParts.length - 1; i++) for (let j = i + 1; j < globParts.length; j++) {\n\t\t\tconst matched = this.partsMatch(globParts[i], globParts[j], !this.preserveMultipleSlashes);\n\t\t\tif (matched) {\n\t\t\t\tglobParts[i] = [];\n\t\t\t\tglobParts[j] = matched;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\treturn globParts.filter((gs) => gs.length);\n\t}\n\tpartsMatch(a, b, emptyGSMatch = false) {\n\t\tlet ai = 0;\n\t\tlet bi = 0;\n\t\tlet result = [];\n\t\tlet which = \"\";\n\t\twhile (ai < a.length && bi < b.length) if (a[ai] === b[bi]) {\n\t\t\tresult.push(which === \"b\" ? b[bi] : a[ai]);\n\t\t\tai++;\n\t\t\tbi++;\n\t\t} else if (emptyGSMatch && a[ai] === \"**\" && b[bi] === a[ai + 1]) {\n\t\t\tresult.push(a[ai]);\n\t\t\tai++;\n\t\t} else if (emptyGSMatch && b[bi] === \"**\" && a[ai] === b[bi + 1]) {\n\t\t\tresult.push(b[bi]);\n\t\t\tbi++;\n\t\t} else if (a[ai] === \"*\" && b[bi] && (this.options.dot || !b[bi].startsWith(\".\")) && b[bi] !== \"**\") {\n\t\t\tif (which === \"b\") return false;\n\t\t\twhich = \"a\";\n\t\t\tresult.push(a[ai]);\n\t\t\tai++;\n\t\t\tbi++;\n\t\t} else if (b[bi] === \"*\" && a[ai] && (this.options.dot || !a[ai].startsWith(\".\")) && a[ai] !== \"**\") {\n\t\t\tif (which === \"a\") return false;\n\t\t\twhich = \"b\";\n\t\t\tresult.push(b[bi]);\n\t\t\tai++;\n\t\t\tbi++;\n\t\t} else return false;\n\t\treturn a.length === b.length && result;\n\t}\n\tparseNegate() {\n\t\tif (this.nonegate) return;\n\t\tconst pattern = this.pattern;\n\t\tlet negate = false;\n\t\tlet negateOffset = 0;\n\t\tfor (let i = 0; i < pattern.length && pattern.charAt(i) === \"!\"; i++) {\n\t\t\tnegate = !negate;\n\t\t\tnegateOffset++;\n\t\t}\n\t\tif (negateOffset) this.pattern = pattern.slice(negateOffset);\n\t\tthis.negate = negate;\n\t}\n\t#matchRow(file, resolved, pattern, partial) {\n\t\tlet fileStartIndex = 0;\n\t\tlet patternStartIndex = 0;\n\t\tconst fh = this.isWindows ? uncHost(resolved) : -1;\n\t\tconst ph = fh === -1 ? -1 : uncHost(pattern);\n\t\tif (ph !== -1) {\n\t\t\tconst host = pattern[ph];\n\t\t\tconst share = pattern[ph + 1];\n\t\t\tif (typeof host !== \"string\" || typeof share !== \"string\") {\n\t\t\t\tfileStartIndex = fh;\n\t\t\t\tpatternStartIndex = ph;\n\t\t\t} else if (resolved[fh].toLowerCase() === host.toLowerCase() && resolved[fh + 1].toLowerCase() === share.toLowerCase()) {\n\t\t\t\tfileStartIndex = fh + 2;\n\t\t\t\tpatternStartIndex = ph + 2;\n\t\t\t}\n\t\t} else if (this.isWindows) {\n\t\t\tconst fileDrive = typeof file[0] === \"string\" && /^[a-z]:$/i.test(file[0]);\n\t\t\tconst fileUNC = !fileDrive && file[0] === \"\" && file[1] === \"\" && file[2] === \"?\" && /^[a-z]:$/i.test(file[3]);\n\t\t\tconst patternDrive = typeof pattern[0] === \"string\" && /^[a-z]:$/i.test(pattern[0]);\n\t\t\tconst patternUNC = !patternDrive && pattern[0] === \"\" && pattern[1] === \"\" && pattern[2] === \"?\" && typeof pattern[3] === \"string\" && /^[a-z]:$/i.test(pattern[3]);\n\t\t\tconst fdi = fileUNC ? 3 : fileDrive ? 0 : void 0;\n\t\t\tconst pdi = patternUNC ? 3 : patternDrive ? 0 : void 0;\n\t\t\tif (typeof fdi === \"number\" && typeof pdi === \"number\") {\n\t\t\t\tconst [fd, pd] = [file[fdi], pattern[pdi]];\n\t\t\t\tif (fd.toLowerCase() === pd.toLowerCase()) {\n\t\t\t\t\tpatternStartIndex = pdi + 1;\n\t\t\t\t\tfileStartIndex = fdi + 1;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tfile = resolved;\n\t\tif (pattern.includes(GLOBSTAR)) return this.#matchGlobstar(file, pattern, partial, fileStartIndex, patternStartIndex);\n\t\treturn this.#matchOne(file, pattern, partial, fileStartIndex, patternStartIndex);\n\t}\n\t#matchGlobstar(file, pattern, partial, fileIndex, patternIndex) {\n\t\tconst { head, body, tail, segments } = this.#getGlobstarParts(pattern, partial, patternIndex);\n\t\tif (head.length) {\n\t\t\tconst headEnd = fileIndex + head.length;\n\t\t\tif (!this.#matchOne(file, head, partial, fileIndex, 0, headEnd)) return false;\n\t\t\tfileIndex += head.length;\n\t\t\tpatternIndex += head.length;\n\t\t}\n\t\tlet fileTailMatch = 0;\n\t\tif (tail.length) {\n\t\t\tif (tail.length + fileIndex > file.length) return false;\n\t\t\tlet tailStart = file.length - tail.length;\n\t\t\tif (this.#matchOne(file, tail, partial, tailStart, 0)) fileTailMatch = tail.length;\n\t\t\telse {\n\t\t\t\tif (file[file.length - 1] !== \"\" || fileIndex + tail.length === file.length) return false;\n\t\t\t\ttailStart--;\n\t\t\t\tif (!this.#matchOne(file, tail, partial, tailStart, 0)) return false;\n\t\t\t\tfileTailMatch = tail.length + 1;\n\t\t\t}\n\t\t}\n\t\tif (!body.length) {\n\t\t\tlet sawSome = !!fileTailMatch;\n\t\t\tfor (let i = fileIndex; i < file.length - fileTailMatch; i++) {\n\t\t\t\tconst f = String(file[i]);\n\t\t\t\tsawSome = true;\n\t\t\t\tif (f === \".\" || f === \"..\" || !this.options.dot && f.startsWith(\".\")) return false;\n\t\t\t}\n\t\t\treturn partial || sawSome;\n\t\t}\n\t\treturn !!this.#matchGlobStarBodySections(file, segments, file.length - fileTailMatch, fileIndex, 0, partial, 0, !!fileTailMatch, /* @__PURE__ */ new Set());\n\t}\n\t#getGlobstarParts(pattern, partial, patternIndex) {\n\t\tlet byStart = this.#globstarParts.get(pattern);\n\t\tif (!byStart) {\n\t\t\tbyStart = [];\n\t\t\tthis.#globstarParts.set(pattern, byStart);\n\t\t}\n\t\tconst key = patternIndex * 2 + (partial ? 1 : 0);\n\t\tconst found = byStart[key];\n\t\tif (found) return found;\n\t\tconst firstgs = pattern.indexOf(GLOBSTAR, patternIndex);\n\t\tconst lastgs = pattern.lastIndexOf(GLOBSTAR);\n\t\tconst head = pattern.slice(patternIndex, firstgs);\n\t\tconst body = pattern.slice(firstgs + 1, partial ? void 0 : lastgs);\n\t\tconst tail = partial ? [] : pattern.slice(lastgs + 1);\n\t\tconst segments = [[[], 0]];\n\t\tlet current = segments[0];\n\t\tlet nonGsParts = 0;\n\t\tconst nonGsPartsSums = [0];\n\t\tfor (const b of body) if (b === GLOBSTAR) {\n\t\t\tnonGsPartsSums.push(nonGsParts);\n\t\t\tcurrent = [[], 0];\n\t\t\tsegments.push(current);\n\t\t} else {\n\t\t\tcurrent[0].push(b);\n\t\t\tnonGsParts++;\n\t\t}\n\t\tsegments.forEach((b, i) => {\n\t\t\tb[1] = nonGsParts - nonGsPartsSums[i];\n\t\t});\n\t\tconst parts = {\n\t\t\thead,\n\t\t\tbody,\n\t\t\ttail,\n\t\t\tsegments\n\t\t};\n\t\tbyStart[key] = parts;\n\t\treturn parts;\n\t}\n\t#matchGlobStarBodySections(file, bodySegments, fileLength, fileIndex, bodyIndex, partial, globStarDepth, sawTail, tried) {\n\t\tconst bs = bodySegments[bodyIndex];\n\t\tif (!bs) {\n\t\t\tif (partial) return fileIndex >= fileLength || fileIndex === fileLength - 1 && file[fileIndex] === \"\";\n\t\t\tfor (let i = fileIndex; i < fileLength; i++) {\n\t\t\t\tsawTail = true;\n\t\t\t\tconst f = file[i];\n\t\t\t\tif (f === \".\" || f === \"..\" || !this.options.dot && f.startsWith(\".\")) return false;\n\t\t\t}\n\t\t\treturn sawTail;\n\t\t}\n\t\tconst [body, need] = bs;\n\t\tconst after = partial ? fileLength : fileLength - need;\n\t\twhile (fileIndex <= after) {\n\t\t\tconst key = bodyIndex * (file.length + 1) + fileIndex;\n\t\t\tif (tried.has(key)) return false;\n\t\t\ttried.add(key);\n\t\t\tif (this.#matchOne(file, body, partial, fileIndex, 0, fileIndex + body.length) && globStarDepth < this.maxGlobstarRecursion) {\n\t\t\t\tconst sub = this.#matchGlobStarBodySections(file, bodySegments, fileLength, fileIndex + body.length, bodyIndex + 1, partial, globStarDepth + 1, sawTail, tried);\n\t\t\t\tif (sub !== false) return sub;\n\t\t\t}\n\t\t\tif (fileIndex === after) break;\n\t\t\tconst f = file[fileIndex];\n\t\t\tif (f === \".\" || f === \"..\" || !this.options.dot && f.startsWith(\".\")) return false;\n\t\t\tfileIndex++;\n\t\t}\n\t\treturn partial || null;\n\t}\n\t#matchOne(file, pattern, partial, fileIndex, patternIndex, fileEnd = file.length) {\n\t\tlet fi;\n\t\tlet pi;\n\t\tlet pl;\n\t\tlet fl;\n\t\tfor (fi = fileIndex, pi = patternIndex, fl = Math.min(fileEnd, file.length), pl = pattern.length; fi < fl && pi < pl; fi++, pi++) {\n\t\t\tlet p = pattern[pi];\n\t\t\tlet f = file[fi];\n\t\t\t/* c8 ignore start */\n\t\t\tif (p === false || p === GLOBSTAR) return false;\n\t\t\t/* c8 ignore stop */\n\t\t\tif (!portionMatch(p, f)) return false;\n\t\t}\n\t\tif (fi === fl && pi === pl) return true;\n\t\telse if (fi === fl) return partial;\n\t\telse if (pi === pl) return fi === fl - 1 && file[fi] === \"\";\n\t\telse throw new Error(\"wtf?\");\n\t\t/* c8 ignore stop */\n\t}\n\tbraceExpand() {\n\t\treturn braceExpand(this.pattern, this.options);\n\t}\n\tparse(pattern) {\n\t\tassertValidPattern(pattern);\n\t\tconst options = this.options;\n\t\tif (pattern === \"**\") return GLOBSTAR;\n\t\tif (pattern === \"\") return \"\";\n\t\tconst { nocase, nocaseMagicOnly, noext = false, dot, normalize } = options;\n\t\tconst lit = literal(pattern, noext);\n\t\tif (lit !== void 0 && !(nocase && !nocaseMagicOnly && pattern.toUpperCase() !== pattern.toLowerCase())) return this.#norm(lit);\n\t\tif (this.#pending) return PENDING;\n\t\tlet m = this.#matchers.get(pattern);\n\t\tif (!m) {\n\t\t\tm = new Matcher(pattern, {\n\t\t\t\tnocase,\n\t\t\t\tnoext,\n\t\t\t\tdot,\n\t\t\t\tnormalize\n\t\t\t});\n\t\t\tthis.#matchers.set(pattern, m);\n\t\t}\n\t\treturn m;\n\t}\n\t#slashSplit(p) {\n\t\tif (this.preserveMultipleSlashes) return p.split(\"/\");\n\t\telse if (this.isWindows && /^\\/\\/[^/]+/.test(p)) return [\"\", ...p.split(/\\/+/)];\n\t\telse return p.split(/\\/+/);\n\t}\n\tmatch(f, partial = this.partial) {\n\t\tif (this.comment) return false;\n\t\tif (this.empty) return f === \"\";\n\t\tif (f === \"/\" && partial) return true;\n\t\tconst options = this.options;\n\t\tlet split = this.#cachedSplit(f);\n\t\tif (!split) {\n\t\t\tif (!partial && !this.#form && (this.#endCheck || this.#literalCheck) && lastChecked !== f) {\n\t\t\t\tlastChecked = f;\n\t\t\t\tconst can = this.#canMatch(f);\n\t\t\t\tif (can === \"no\") return options.flipNegate ? false : this.negate;\n\t\t\t\tif (can === \"yes\") return options.flipNegate ? true : !this.negate;\n\t\t\t}\n\t\t\tsplit = this.#split(f);\n\t\t}\n\t\tconst ff = split.parts;\n\t\tconst resolved = this.#level2 ? split.resolved ??= this.#levelTwoFileOptimize(ff) : ff;\n\t\tconst set = this.set;\n\t\tlet filename = ff[ff.length - 1];\n\t\tif (!filename) for (let i = ff.length - 2; !filename && i >= 0; i--) filename = ff[i];\n\t\tfor (let r = 0; r < set.length; r++) {\n\t\t\tconst pattern = set[r];\n\t\t\tconst shape = partial ? void 0 : this.#shapes[r];\n\t\t\tif (shape === \"base\" ? portionMatch(pattern[0], filename) : shape ? this.#matchShape(resolved, pattern, shape) : options.matchBase && pattern.length === 1 ? this.#matchRow([filename], [filename], pattern, partial) : this.#matchRow(ff, resolved, pattern, partial)) {\n\t\t\t\tif (options.flipNegate) return true;\n\t\t\t\treturn !this.negate;\n\t\t\t}\n\t\t}\n\t\tif (options.flipNegate) return false;\n\t\treturn this.negate;\n\t}\n\tstatic defaults(def) {\n\t\treturn minimatch.defaults(def).Minimatch;\n\t}\n};\n/* c8 ignore stop */\nminimatch.Minimatch = Minimatch;\nminimatch.escape = escape;\nminimatch.unescape = unescape;\n// ../../node_modules/.pnpm/node-diff3@3.2.1/node_modules/node-diff3/dist/diff3.mjs\nvar import_diff_match_patch = /* @__PURE__ */ __toESM((/* @__PURE__ */ __commonJSMin(((exports, module) => {\n\t/**\n\t* Diff Match and Patch\n\t* Copyright 2018 The diff-match-patch Authors.\n\t* https://github.com/google/diff-match-patch\n\t*\n\t* Licensed under the Apache License, Version 2.0 (the \"License\");\n\t* you may not use this file except in compliance with the License.\n\t* You may obtain a copy of the License at\n\t*\n\t* http://www.apache.org/licenses/LICENSE-2.0\n\t*\n\t* Unless required by applicable law or agreed to in writing, software\n\t* distributed under the License is distributed on an \"AS IS\" BASIS,\n\t* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n\t* See the License for the specific language governing permissions and\n\t* limitations under the License.\n\t*/\n\t/**\n\t* @fileoverview Computes the difference between two texts to create a patch.\n\t* Applies the patch onto another text, allowing for errors.\n\t* @author fraser@google.com (Neil Fraser)\n\t*/\n\t/**\n\t* Class containing the diff, match and patch methods.\n\t* @constructor\n\t*/\n\tvar diff_match_patch = function() {\n\t\tthis.Diff_Timeout = 1;\n\t\tthis.Diff_EditCost = 4;\n\t\tthis.Match_Threshold = .5;\n\t\tthis.Match_Distance = 1e3;\n\t\tthis.Patch_DeleteThreshold = .5;\n\t\tthis.Patch_Margin = 4;\n\t\tthis.Match_MaxBits = 32;\n\t};\n\t/**\n\t* The data structure representing a diff is an array of tuples:\n\t* [[DIFF_DELETE, 'Hello'], [DIFF_INSERT, 'Goodbye'], [DIFF_EQUAL, ' world.']]\n\t* which means: delete 'Hello', add 'Goodbye' and keep ' world.'\n\t*/\n\tvar DIFF_DELETE = -1;\n\tvar DIFF_INSERT = 1;\n\tvar DIFF_EQUAL = 0;\n\t/**\n\t* Class representing one diff tuple.\n\t* ~Attempts to look like a two-element array (which is what this used to be).~\n\t* Constructor returns an actual two-element array, to allow destructing @JackuB\n\t* See https://github.com/JackuB/diff-match-patch/issues/14 for details\n\t* @param {number} op Operation, one of: DIFF_DELETE, DIFF_INSERT, DIFF_EQUAL.\n\t* @param {string} text Text to be deleted, inserted, or retained.\n\t* @constructor\n\t*/\n\tdiff_match_patch.Diff = function(op, text) {\n\t\treturn [op, text];\n\t};\n\t/**\n\t* Find the differences between two texts. Simplifies the problem by stripping\n\t* any common prefix or suffix off the texts before diffing.\n\t* @param {string} text1 Old string to be diffed.\n\t* @param {string} text2 New string to be diffed.\n\t* @param {boolean=} opt_checklines Optional speedup flag. If present and false,\n\t* then don't run a line-level diff first to identify the changed areas.\n\t* Defaults to true, which does a faster, slightly less optimal diff.\n\t* @param {number=} opt_deadline Optional time when the diff should be complete\n\t* by. Used internally for recursive calls. Users should set DiffTimeout\n\t* instead.\n\t* @return {!Array.<!diff_match_patch.Diff>} Array of diff tuples.\n\t*/\n\tdiff_match_patch.prototype.diff_main = function(text1, text2, opt_checklines, opt_deadline) {\n\t\tif (typeof opt_deadline == \"undefined\") {\n\t\t\tif (this.Diff_Timeout <= 0) opt_deadline = Number.MAX_VALUE;\n\t\t\telse opt_deadline = (/* @__PURE__ */ new Date()).getTime() + this.Diff_Timeout * 1e3;\n\t\t}\n\t\tvar deadline = opt_deadline;\n\t\tif (text1 == null || text2 == null) throw new Error(\"Null input. (diff_main)\");\n\t\tif (text1 == text2) {\n\t\t\tif (text1) return [new diff_match_patch.Diff(DIFF_EQUAL, text1)];\n\t\t\treturn [];\n\t\t}\n\t\tif (typeof opt_checklines == \"undefined\") opt_checklines = true;\n\t\tvar checklines = opt_checklines;\n\t\tvar commonlength = this.diff_commonPrefix(text1, text2);\n\t\tvar commonprefix = text1.substring(0, commonlength);\n\t\ttext1 = text1.substring(commonlength);\n\t\ttext2 = text2.substring(commonlength);\n\t\tcommonlength = this.diff_commonSuffix(text1, text2);\n\t\tvar commonsuffix = text1.substring(text1.length - commonlength);\n\t\ttext1 = text1.substring(0, text1.length - commonlength);\n\t\ttext2 = text2.substring(0, text2.length - commonlength);\n\t\tvar diffs = this.diff_compute_(text1, text2, checklines, deadline);\n\t\tif (commonprefix) diffs.unshift(new diff_match_patch.Diff(DIFF_EQUAL, commonprefix));\n\t\tif (commonsuffix) diffs.push(new diff_match_patch.Diff(DIFF_EQUAL, commonsuffix));\n\t\tthis.diff_cleanupMerge(diffs);\n\t\treturn diffs;\n\t};\n\t/**\n\t* Find the differences between two texts. Assumes that the texts do not\n\t* have any common prefix or suffix.\n\t* @param {string} text1 Old string to be diffed.\n\t* @param {string} text2 New string to be diffed.\n\t* @param {boolean} checklines Speedup flag. If false, then don't run a\n\t* line-level diff first to identify the changed areas.\n\t* If true, then run a faster, slightly less optimal diff.\n\t* @param {number} deadline Time when the diff should be complete by.\n\t* @return {!Array.<!diff_match_patch.Diff>} Array of diff tuples.\n\t* @private\n\t*/\n\tdiff_match_patch.prototype.diff_compute_ = function(text1, text2, checklines, deadline) {\n\t\tvar diffs;\n\t\tif (!text1) return [new diff_match_patch.Diff(DIFF_INSERT, text2)];\n\t\tif (!text2) return [new diff_match_patch.Diff(DIFF_DELETE, text1)];\n\t\tvar longtext = text1.length > text2.length ? text1 : text2;\n\t\tvar shorttext = text1.length > text2.length ? text2 : text1;\n\t\tvar i = longtext.indexOf(shorttext);\n\t\tif (i != -1) {\n\t\t\tdiffs = [\n\t\t\t\tnew diff_match_patch.Diff(DIFF_INSERT, longtext.substring(0, i)),\n\t\t\t\tnew diff_match_patch.Diff(DIFF_EQUAL, shorttext),\n\t\t\t\tnew diff_match_patch.Diff(DIFF_INSERT, longtext.substring(i + shorttext.length))\n\t\t\t];\n\t\t\tif (text1.length > text2.length) diffs[0][0] = diffs[2][0] = DIFF_DELETE;\n\t\t\treturn diffs;\n\t\t}\n\t\tif (shorttext.length == 1) return [new diff_match_patch.Diff(DIFF_DELETE, text1), new diff_match_patch.Diff(DIFF_INSERT, text2)];\n\t\tvar hm = this.diff_halfMatch_(text1, text2);\n\t\tif (hm) {\n\t\t\tvar text1_a = hm[0];\n\t\t\tvar text1_b = hm[1];\n\t\t\tvar text2_a = hm[2];\n\t\t\tvar text2_b = hm[3];\n\t\t\tvar mid_common = hm[4];\n\t\t\tvar diffs_a = this.diff_main(text1_a, text2_a, checklines, deadline);\n\t\t\tvar diffs_b = this.diff_main(text1_b, text2_b, checklines, deadline);\n\t\t\treturn diffs_a.concat([new diff_match_patch.Diff(DIFF_EQUAL, mid_common)], diffs_b);\n\t\t}\n\t\tif (checklines && text1.length > 100 && text2.length > 100) return this.diff_lineMode_(text1, text2, deadline);\n\t\treturn this.diff_bisect_(text1, text2, deadline);\n\t};\n\t/**\n\t* Do a quick line-level diff on both strings, then rediff the parts for\n\t* greater accuracy.\n\t* This speedup can produce non-minimal diffs.\n\t* @param {string} text1 Old string to be diffed.\n\t* @param {string} text2 New string to be diffed.\n\t* @param {number} deadline Time when the diff should be complete by.\n\t* @return {!Array.<!diff_match_patch.Diff>} Array of diff tuples.\n\t* @private\n\t*/\n\tdiff_match_patch.prototype.diff_lineMode_ = function(text1, text2, deadline) {\n\t\tvar a = this.diff_linesToChars_(text1, text2);\n\t\ttext1 = a.chars1;\n\t\ttext2 = a.chars2;\n\t\tvar linearray = a.lineArray;\n\t\tvar diffs = this.diff_main(text1, text2, false, deadline);\n\t\tthis.diff_charsToLines_(diffs, linearray);\n\t\tthis.diff_cleanupSemantic(diffs);\n\t\tdiffs.push(new diff_match_patch.Diff(DIFF_EQUAL, \"\"));\n\t\tvar pointer = 0;\n\t\tvar count_delete = 0;\n\t\tvar count_insert = 0;\n\t\tvar text_delete = \"\";\n\t\tvar text_insert = \"\";\n\t\twhile (pointer < diffs.length) {\n\t\t\tswitch (diffs[pointer][0]) {\n\t\t\t\tcase DIFF_INSERT:\n\t\t\t\t\tcount_insert++;\n\t\t\t\t\ttext_insert += diffs[pointer][1];\n\t\t\t\t\tbreak;\n\t\t\t\tcase DIFF_DELETE:\n\t\t\t\t\tcount_delete++;\n\t\t\t\t\ttext_delete += diffs[pointer][1];\n\t\t\t\t\tbreak;\n\t\t\t\tcase DIFF_EQUAL:\n\t\t\t\t\tif (count_delete >= 1 && count_insert >= 1) {\n\t\t\t\t\t\tdiffs.splice(pointer - count_delete - count_insert, count_delete + count_insert);\n\t\t\t\t\t\tpointer = pointer - count_delete - count_insert;\n\t\t\t\t\t\tvar subDiff = this.diff_main(text_delete, text_insert, false, deadline);\n\t\t\t\t\t\tfor (var j = subDiff.length - 1; j >= 0; j--) diffs.splice(pointer, 0, subDiff[j]);\n\t\t\t\t\t\tpointer = pointer + subDiff.length;\n\t\t\t\t\t}\n\t\t\t\t\tcount_insert = 0;\n\t\t\t\t\tcount_delete = 0;\n\t\t\t\t\ttext_delete = \"\";\n\t\t\t\t\ttext_insert = \"\";\n\t\t\t}\n\t\t\tpointer++;\n\t\t}\n\t\tdiffs.pop();\n\t\treturn diffs;\n\t};\n\t/**\n\t* Find the 'middle snake' of a diff, split the problem in two\n\t* and return the recursively constructed diff.\n\t* See Myers 1986 paper: An O(ND) Difference Algorithm and Its Variations.\n\t* @param {string} text1 Old string to be diffed.\n\t* @param {string} text2 New string to be diffed.\n\t* @param {number} deadline Time at which to bail if not yet complete.\n\t* @return {!Array.<!diff_match_patch.Diff>} Array of diff tuples.\n\t* @private\n\t*/\n\tdiff_match_patch.prototype.diff_bisect_ = function(text1, text2, deadline) {\n\t\tvar text1_length = text1.length;\n\t\tvar text2_length = text2.length;\n\t\tvar max_d = Math.ceil((text1_length + text2_length) / 2);\n\t\tvar v_offset = max_d;\n\t\tvar v_length = 2 * max_d;\n\t\tvar v1 = new Array(v_length);\n\t\tvar v2 = new Array(v_length);\n\t\tfor (var x = 0; x < v_length; x++) {\n\t\t\tv1[x] = -1;\n\t\t\tv2[x] = -1;\n\t\t}\n\t\tv1[v_offset + 1] = 0;\n\t\tv2[v_offset + 1] = 0;\n\t\tvar delta = text1_length - text2_length;\n\t\tvar front = delta % 2 != 0;\n\t\tvar k1start = 0;\n\t\tvar k1end = 0;\n\t\tvar k2start = 0;\n\t\tvar k2end = 0;\n\t\tfor (var d = 0; d < max_d; d++) {\n\t\t\tif ((/* @__PURE__ */ new Date()).getTime() > deadline) break;\n\t\t\tfor (var k1 = -d + k1start; k1 <= d - k1end; k1 += 2) {\n\t\t\t\tvar k1_offset = v_offset + k1;\n\t\t\t\tvar x1;\n\t\t\t\tif (k1 == -d || k1 != d && v1[k1_offset - 1] < v1[k1_offset + 1]) x1 = v1[k1_offset + 1];\n\t\t\t\telse x1 = v1[k1_offset - 1] + 1;\n\t\t\t\tvar y1 = x1 - k1;\n\t\t\t\twhile (x1 < text1_length && y1 < text2_length && text1.charAt(x1) == text2.charAt(y1)) {\n\t\t\t\t\tx1++;\n\t\t\t\t\ty1++;\n\t\t\t\t}\n\t\t\t\tv1[k1_offset] = x1;\n\t\t\t\tif (x1 > text1_length) k1end += 2;\n\t\t\t\telse if (y1 > text2_length) k1start += 2;\n\t\t\t\telse if (front) {\n\t\t\t\t\tvar k2_offset = v_offset + delta - k1;\n\t\t\t\t\tif (k2_offset >= 0 && k2_offset < v_length && v2[k2_offset] != -1) {\n\t\t\t\t\t\tvar x2 = text1_length - v2[k2_offset];\n\t\t\t\t\t\tif (x1 >= x2) return this.diff_bisectSplit_(text1, text2, x1, y1, deadline);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (var k2 = -d + k2start; k2 <= d - k2end; k2 += 2) {\n\t\t\t\tvar k2_offset = v_offset + k2;\n\t\t\t\tvar x2;\n\t\t\t\tif (k2 == -d || k2 != d && v2[k2_offset - 1] < v2[k2_offset + 1]) x2 = v2[k2_offset + 1];\n\t\t\t\telse x2 = v2[k2_offset - 1] + 1;\n\t\t\t\tvar y2 = x2 - k2;\n\t\t\t\twhile (x2 < text1_length && y2 < text2_length && text1.charAt(text1_length - x2 - 1) == text2.charAt(text2_length - y2 - 1)) {\n\t\t\t\t\tx2++;\n\t\t\t\t\ty2++;\n\t\t\t\t}\n\t\t\t\tv2[k2_offset] = x2;\n\t\t\t\tif (x2 > text1_length) k2end += 2;\n\t\t\t\telse if (y2 > text2_length) k2start += 2;\n\t\t\t\telse if (!front) {\n\t\t\t\t\tvar k1_offset = v_offset + delta - k2;\n\t\t\t\t\tif (k1_offset >= 0 && k1_offset < v_length && v1[k1_offset] != -1) {\n\t\t\t\t\t\tvar x1 = v1[k1_offset];\n\t\t\t\t\t\tvar y1 = v_offset + x1 - k1_offset;\n\t\t\t\t\t\tx2 = text1_length - x2;\n\t\t\t\t\t\tif (x1 >= x2) return this.diff_bisectSplit_(text1, text2, x1, y1, deadline);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn [new diff_match_patch.Diff(DIFF_DELETE, text1), new diff_match_patch.Diff(DIFF_INSERT, text2)];\n\t};\n\t/**\n\t* Given the location of the 'middle snake', split the diff in two parts\n\t* and recurse.\n\t* @param {string} text1 Old string to be diffed.\n\t* @param {string} text2 New string to be diffed.\n\t* @param {number} x Index of split point in text1.\n\t* @param {number} y Index of split point in text2.\n\t* @param {number} deadline Time at which to bail if not yet complete.\n\t* @return {!Array.<!diff_match_patch.Diff>} Array of diff tuples.\n\t* @private\n\t*/\n\tdiff_match_patch.prototype.diff_bisectSplit_ = function(text1, text2, x, y, deadline) {\n\t\tvar text1a = text1.substring(0, x);\n\t\tvar text2a = text2.substring(0, y);\n\t\tvar text1b = text1.substring(x);\n\t\tvar text2b = text2.substring(y);\n\t\tvar diffs = this.diff_main(text1a, text2a, false, deadline);\n\t\tvar diffsb = this.diff_main(text1b, text2b, false, deadline);\n\t\treturn diffs.concat(diffsb);\n\t};\n\t/**\n\t* Split two texts into an array of strings. Reduce the texts to a string of\n\t* hashes where each Unicode character represents one line.\n\t* @param {string} text1 First string.\n\t* @param {string} text2 Second string.\n\t* @return {{chars1: string, chars2: string, lineArray: !Array.<string>}}\n\t* An object containing the encoded text1, the encoded text2 and\n\t* the array of unique strings.\n\t* The zeroth element of the array of unique strings is intentionally blank.\n\t* @private\n\t*/\n\tdiff_match_patch.prototype.diff_linesToChars_ = function(text1, text2) {\n\t\tvar lineArray = [];\n\t\tvar lineHash = {};\n\t\tlineArray[0] = \"\";\n\t\t/**\n\t\t* Split a text into an array of strings. Reduce the texts to a string of\n\t\t* hashes where each Unicode character represents one line.\n\t\t* Modifies linearray and linehash through being a closure.\n\t\t* @param {string} text String to encode.\n\t\t* @return {string} Encoded string.\n\t\t* @private\n\t\t*/\n\t\tfunction diff_linesToCharsMunge_(text) {\n\t\t\tvar chars = \"\";\n\t\t\tvar lineStart = 0;\n\t\t\tvar lineEnd = -1;\n\t\t\tvar lineArrayLength = lineArray.length;\n\t\t\twhile (lineEnd < text.length - 1) {\n\t\t\t\tlineEnd = text.indexOf(\"\\n\", lineStart);\n\t\t\t\tif (lineEnd == -1) lineEnd = text.length - 1;\n\t\t\t\tvar line = text.substring(lineStart, lineEnd + 1);\n\t\t\t\tif (lineHash.hasOwnProperty ? lineHash.hasOwnProperty(line) : lineHash[line] !== void 0) chars += String.fromCharCode(lineHash[line]);\n\t\t\t\telse {\n\t\t\t\t\tif (lineArrayLength == maxLines) {\n\t\t\t\t\t\tline = text.substring(lineStart);\n\t\t\t\t\t\tlineEnd = text.length;\n\t\t\t\t\t}\n\t\t\t\t\tchars += String.fromCharCode(lineArrayLength);\n\t\t\t\t\tlineHash[line] = lineArrayLength;\n\t\t\t\t\tlineArray[lineArrayLength++] = line;\n\t\t\t\t}\n\t\t\t\tlineStart = lineEnd + 1;\n\t\t\t}\n\t\t\treturn chars;\n\t\t}\n\t\tvar maxLines = 4e4;\n\t\tvar chars1 = diff_linesToCharsMunge_(text1);\n\t\tmaxLines = 65535;\n\t\treturn {\n\t\t\tchars1,\n\t\t\tchars2: diff_linesToCharsMunge_(text2),\n\t\t\tlineArray\n\t\t};\n\t};\n\t/**\n\t* Rehydrate the text in a diff from a string of line hashes to real lines of\n\t* text.\n\t* @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples.\n\t* @param {!Array.<string>} lineArray Array of unique strings.\n\t* @private\n\t*/\n\tdiff_match_patch.prototype.diff_charsToLines_ = function(diffs, lineArray) {\n\t\tfor (var i = 0; i < diffs.length; i++) {\n\t\t\tvar chars = diffs[i][1];\n\t\t\tvar text = [];\n\t\t\tfor (var j = 0; j < chars.length; j++) text[j] = lineArray[chars.charCodeAt(j)];\n\t\t\tdiffs[i][1] = text.join(\"\");\n\t\t}\n\t};\n\t/**\n\t* Determine the common prefix of two strings.\n\t* @param {string} text1 First string.\n\t* @param {string} text2 Second string.\n\t* @return {number} The number of characters common to the start of each\n\t* string.\n\t*/\n\tdiff_match_patch.prototype.diff_commonPrefix = function(text1, text2) {\n\t\tif (!text1 || !text2 || text1.charAt(0) != text2.charAt(0)) return 0;\n\t\tvar pointermin = 0;\n\t\tvar pointermax = Math.min(text1.length, text2.length);\n\t\tvar pointermid = pointermax;\n\t\tvar pointerstart = 0;\n\t\twhile (pointermin < pointermid) {\n\t\t\tif (text1.substring(pointerstart, pointermid) == text2.substring(pointerstart, pointermid)) {\n\t\t\t\tpointermin = pointermid;\n\t\t\t\tpointerstart = pointermin;\n\t\t\t} else pointermax = pointermid;\n\t\t\tpointermid = Math.floor((pointermax - pointermin) / 2 + pointermin);\n\t\t}\n\t\treturn pointermid;\n\t};\n\t/**\n\t* Determine the common suffix of two strings.\n\t* @param {string} text1 First string.\n\t* @param {string} text2 Second string.\n\t* @return {number} The number of characters common to the end of each string.\n\t*/\n\tdiff_match_patch.prototype.diff_commonSuffix = function(text1, text2) {\n\t\tif (!text1 || !text2 || text1.charAt(text1.length - 1) != text2.charAt(text2.length - 1)) return 0;\n\t\tvar pointermin = 0;\n\t\tvar pointermax = Math.min(text1.length, text2.length);\n\t\tvar pointermid = pointermax;\n\t\tvar pointerend = 0;\n\t\twhile (pointermin < pointermid) {\n\t\t\tif (text1.substring(text1.length - pointermid, text1.length - pointerend) == text2.substring(text2.length - pointermid, text2.length - pointerend)) {\n\t\t\t\tpointermin = pointermid;\n\t\t\t\tpointerend = pointermin;\n\t\t\t} else pointermax = pointermid;\n\t\t\tpointermid = Math.floor((pointermax - pointermin) / 2 + pointermin);\n\t\t}\n\t\treturn pointermid;\n\t};\n\t/**\n\t* Determine if the suffix of one string is the prefix of another.\n\t* @param {string} text1 First string.\n\t* @param {string} text2 Second string.\n\t* @return {number} The number of characters common to the end of the first\n\t* string and the start of the second string.\n\t* @private\n\t*/\n\tdiff_match_patch.prototype.diff_commonOverlap_ = function(text1, text2) {\n\t\tvar text1_length = text1.length;\n\t\tvar text2_length = text2.length;\n\t\tif (text1_length == 0 || text2_length == 0) return 0;\n\t\tif (text1_length > text2_length) text1 = text1.substring(text1_length - text2_length);\n\t\telse if (text1_length < text2_length) text2 = text2.substring(0, text1_length);\n\t\tvar text_length = Math.min(text1_length, text2_length);\n\t\tif (text1 == text2) return text_length;\n\t\tvar best = 0;\n\t\tvar length = 1;\n\t\twhile (true) {\n\t\t\tvar pattern = text1.substring(text_length - length);\n\t\t\tvar found = text2.indexOf(pattern);\n\t\t\tif (found == -1) return best;\n\t\t\tlength += found;\n\t\t\tif (found == 0 || text1.substring(text_length - length) == text2.substring(0, length)) {\n\t\t\t\tbest = length;\n\t\t\t\tlength++;\n\t\t\t}\n\t\t}\n\t};\n\t/**\n\t* Do the two texts share a substring which is at least half the length of the\n\t* longer text?\n\t* This speedup can produce non-minimal diffs.\n\t* @param {string} text1 First string.\n\t* @param {string} text2 Second string.\n\t* @return {Array.<string>} Five element Array, containing the prefix of\n\t* text1, the suffix of text1, the prefix of text2, the suffix of\n\t* text2 and the common middle. Or null if there was no match.\n\t* @private\n\t*/\n\tdiff_match_patch.prototype.diff_halfMatch_ = function(text1, text2) {\n\t\tif (this.Diff_Timeout <= 0) return null;\n\t\tvar longtext = text1.length > text2.length ? text1 : text2;\n\t\tvar shorttext = text1.length > text2.length ? text2 : text1;\n\t\tif (longtext.length < 4 || shorttext.length * 2 < longtext.length) return null;\n\t\tvar dmp = this;\n\t\t/**\n\t\t* Does a substring of shorttext exist within longtext such that the substring\n\t\t* is at least half the length of longtext?\n\t\t* Closure, but does not reference any external variables.\n\t\t* @param {string} longtext Longer string.\n\t\t* @param {string} shorttext Shorter string.\n\t\t* @param {number} i Start index of quarter length substring within longtext.\n\t\t* @return {Array.<string>} Five element Array, containing the prefix of\n\t\t* longtext, the suffix of longtext, the prefix of shorttext, the suffix\n\t\t* of shorttext and the common middle. Or null if there was no match.\n\t\t* @private\n\t\t*/\n\t\tfunction diff_halfMatchI_(longtext, shorttext, i) {\n\t\t\tvar seed = longtext.substring(i, i + Math.floor(longtext.length / 4));\n\t\t\tvar j = -1;\n\t\t\tvar best_common = \"\";\n\t\t\tvar best_longtext_a, best_longtext_b, best_shorttext_a, best_shorttext_b;\n\t\t\twhile ((j = shorttext.indexOf(seed, j + 1)) != -1) {\n\t\t\t\tvar prefixLength = dmp.diff_commonPrefix(longtext.substring(i), shorttext.substring(j));\n\t\t\t\tvar suffixLength = dmp.diff_commonSuffix(longtext.substring(0, i), shorttext.substring(0, j));\n\t\t\t\tif (best_common.length < suffixLength + prefixLength) {\n\t\t\t\t\tbest_common = shorttext.substring(j - suffixLength, j) + shorttext.substring(j, j + prefixLength);\n\t\t\t\t\tbest_longtext_a = longtext.substring(0, i - suffixLength);\n\t\t\t\t\tbest_longtext_b = longtext.substring(i + prefixLength);\n\t\t\t\t\tbest_shorttext_a = shorttext.substring(0, j - suffixLength);\n\t\t\t\t\tbest_shorttext_b = shorttext.substring(j + prefixLength);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (best_common.length * 2 >= longtext.length) return [\n\t\t\t\tbest_longtext_a,\n\t\t\t\tbest_longtext_b,\n\t\t\t\tbest_shorttext_a,\n\t\t\t\tbest_shorttext_b,\n\t\t\t\tbest_common\n\t\t\t];\n\t\t\telse return null;\n\t\t}\n\t\tvar hm1 = diff_halfMatchI_(longtext, shorttext, Math.ceil(longtext.length / 4));\n\t\tvar hm2 = diff_halfMatchI_(longtext, shorttext, Math.ceil(longtext.length / 2));\n\t\tvar hm;\n\t\tif (!hm1 && !hm2) return null;\n\t\telse if (!hm2) hm = hm1;\n\t\telse if (!hm1) hm = hm2;\n\t\telse hm = hm1[4].length > hm2[4].length ? hm1 : hm2;\n\t\tvar text1_a, text1_b, text2_a, text2_b;\n\t\tif (text1.length > text2.length) {\n\t\t\ttext1_a = hm[0];\n\t\t\ttext1_b = hm[1];\n\t\t\ttext2_a = hm[2];\n\t\t\ttext2_b = hm[3];\n\t\t} else {\n\t\t\ttext2_a = hm[0];\n\t\t\ttext2_b = hm[1];\n\t\t\ttext1_a = hm[2];\n\t\t\ttext1_b = hm[3];\n\t\t}\n\t\tvar mid_common = hm[4];\n\t\treturn [\n\t\t\ttext1_a,\n\t\t\ttext1_b,\n\t\t\ttext2_a,\n\t\t\ttext2_b,\n\t\t\tmid_common\n\t\t];\n\t};\n\t/**\n\t* Reduce the number of edits by eliminating semantically trivial equalities.\n\t* @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples.\n\t*/\n\tdiff_match_patch.prototype.diff_cleanupSemantic = function(diffs) {\n\t\tvar changes = false;\n\t\tvar equalities = [];\n\t\tvar equalitiesLength = 0;\n\t\t/** @type {?string} */\n\t\tvar lastEquality = null;\n\t\tvar pointer = 0;\n\t\tvar length_insertions1 = 0;\n\t\tvar length_deletions1 = 0;\n\t\tvar length_insertions2 = 0;\n\t\tvar length_deletions2 = 0;\n\t\twhile (pointer < diffs.length) {\n\t\t\tif (diffs[pointer][0] == DIFF_EQUAL) {\n\t\t\t\tequalities[equalitiesLength++] = pointer;\n\t\t\t\tlength_insertions1 = length_insertions2;\n\t\t\t\tlength_deletions1 = length_deletions2;\n\t\t\t\tlength_insertions2 = 0;\n\t\t\t\tlength_deletions2 = 0;\n\t\t\t\tlastEquality = diffs[pointer][1];\n\t\t\t} else {\n\t\t\t\tif (diffs[pointer][0] == DIFF_INSERT) length_insertions2 += diffs[pointer][1].length;\n\t\t\t\telse length_deletions2 += diffs[pointer][1].length;\n\t\t\t\tif (lastEquality && lastEquality.length <= Math.max(length_insertions1, length_deletions1) && lastEquality.length <= Math.max(length_insertions2, length_deletions2)) {\n\t\t\t\t\tdiffs.splice(equalities[equalitiesLength - 1], 0, new diff_match_patch.Diff(DIFF_DELETE, lastEquality));\n\t\t\t\t\tdiffs[equalities[equalitiesLength - 1] + 1][0] = DIFF_INSERT;\n\t\t\t\t\tequalitiesLength--;\n\t\t\t\t\tequalitiesLength--;\n\t\t\t\t\tpointer = equalitiesLength > 0 ? equalities[equalitiesLength - 1] : -1;\n\t\t\t\t\tlength_insertions1 = 0;\n\t\t\t\t\tlength_deletions1 = 0;\n\t\t\t\t\tlength_insertions2 = 0;\n\t\t\t\t\tlength_deletions2 = 0;\n\t\t\t\t\tlastEquality = null;\n\t\t\t\t\tchanges = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tpointer++;\n\t\t}\n\t\tif (changes) this.diff_cleanupMerge(diffs);\n\t\tthis.diff_cleanupSemanticLossless(diffs);\n\t\tpointer = 1;\n\t\twhile (pointer < diffs.length) {\n\t\t\tif (diffs[pointer - 1][0] == DIFF_DELETE && diffs[pointer][0] == DIFF_INSERT) {\n\t\t\t\tvar deletion = diffs[pointer - 1][1];\n\t\t\t\tvar insertion = diffs[pointer][1];\n\t\t\t\tvar overlap_length1 = this.diff_commonOverlap_(deletion, insertion);\n\t\t\t\tvar overlap_length2 = this.diff_commonOverlap_(insertion, deletion);\n\t\t\t\tif (overlap_length1 >= overlap_length2) {\n\t\t\t\t\tif (overlap_length1 >= deletion.length / 2 || overlap_length1 >= insertion.length / 2) {\n\t\t\t\t\t\tdiffs.splice(pointer, 0, new diff_match_patch.Diff(DIFF_EQUAL, insertion.substring(0, overlap_length1)));\n\t\t\t\t\t\tdiffs[pointer - 1][1] = deletion.substring(0, deletion.length - overlap_length1);\n\t\t\t\t\t\tdiffs[pointer + 1][1] = insertion.substring(overlap_length1);\n\t\t\t\t\t\tpointer++;\n\t\t\t\t\t}\n\t\t\t\t} else if (overlap_length2 >= deletion.length / 2 || overlap_length2 >= insertion.length / 2) {\n\t\t\t\t\tdiffs.splice(pointer, 0, new diff_match_patch.Diff(DIFF_EQUAL, deletion.substring(0, overlap_length2)));\n\t\t\t\t\tdiffs[pointer - 1][0] = DIFF_INSERT;\n\t\t\t\t\tdiffs[pointer - 1][1] = insertion.substring(0, insertion.length - overlap_length2);\n\t\t\t\t\tdiffs[pointer + 1][0] = DIFF_DELETE;\n\t\t\t\t\tdiffs[pointer + 1][1] = deletion.substring(overlap_length2);\n\t\t\t\t\tpointer++;\n\t\t\t\t}\n\t\t\t\tpointer++;\n\t\t\t}\n\t\t\tpointer++;\n\t\t}\n\t};\n\t/**\n\t* Look for single edits surrounded on both sides by equalities\n\t* which can be shifted sideways to align the edit to a word boundary.\n\t* e.g: The c<ins>at c</ins>ame. -> The <ins>cat </ins>came.\n\t* @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples.\n\t*/\n\tdiff_match_patch.prototype.diff_cleanupSemanticLossless = function(diffs) {\n\t\t/**\n\t\t* Given two strings, compute a score representing whether the internal\n\t\t* boundary falls on logical boundaries.\n\t\t* Scores range from 6 (best) to 0 (worst).\n\t\t* Closure, but does not reference any external variables.\n\t\t* @param {string} one First string.\n\t\t* @param {string} two Second string.\n\t\t* @return {number} The score.\n\t\t* @private\n\t\t*/\n\t\tfunction diff_cleanupSemanticScore_(one, two) {\n\t\t\tif (!one || !two) return 6;\n\t\t\tvar char1 = one.charAt(one.length - 1);\n\t\t\tvar char2 = two.charAt(0);\n\t\t\tvar nonAlphaNumeric1 = char1.match(diff_match_patch.nonAlphaNumericRegex_);\n\t\t\tvar nonAlphaNumeric2 = char2.match(diff_match_patch.nonAlphaNumericRegex_);\n\t\t\tvar whitespace1 = nonAlphaNumeric1 && char1.match(diff_match_patch.whitespaceRegex_);\n\t\t\tvar whitespace2 = nonAlphaNumeric2 && char2.match(diff_match_patch.whitespaceRegex_);\n\t\t\tvar lineBreak1 = whitespace1 && char1.match(diff_match_patch.linebreakRegex_);\n\t\t\tvar lineBreak2 = whitespace2 && char2.match(diff_match_patch.linebreakRegex_);\n\t\t\tvar blankLine1 = lineBreak1 && one.match(diff_match_patch.blanklineEndRegex_);\n\t\t\tvar blankLine2 = lineBreak2 && two.match(diff_match_patch.blanklineStartRegex_);\n\t\t\tif (blankLine1 || blankLine2) return 5;\n\t\t\telse if (lineBreak1 || lineBreak2) return 4;\n\t\t\telse if (nonAlphaNumeric1 && !whitespace1 && whitespace2) return 3;\n\t\t\telse if (whitespace1 || whitespace2) return 2;\n\t\t\telse if (nonAlphaNumeric1 || nonAlphaNumeric2) return 1;\n\t\t\treturn 0;\n\t\t}\n\t\tvar pointer = 1;\n\t\twhile (pointer < diffs.length - 1) {\n\t\t\tif (diffs[pointer - 1][0] == DIFF_EQUAL && diffs[pointer + 1][0] == DIFF_EQUAL) {\n\t\t\t\tvar equality1 = diffs[pointer - 1][1];\n\t\t\t\tvar edit = diffs[pointer][1];\n\t\t\t\tvar equality2 = diffs[pointer + 1][1];\n\t\t\t\tvar commonOffset = this.diff_commonSuffix(equality1, edit);\n\t\t\t\tif (commonOffset) {\n\t\t\t\t\tvar commonString = edit.substring(edit.length - commonOffset);\n\t\t\t\t\tequality1 = equality1.substring(0, equality1.length - commonOffset);\n\t\t\t\t\tedit = commonString + edit.substring(0, edit.length - commonOffset);\n\t\t\t\t\tequality2 = commonString + equality2;\n\t\t\t\t}\n\t\t\t\tvar bestEquality1 = equality1;\n\t\t\t\tvar bestEdit = edit;\n\t\t\t\tvar bestEquality2 = equality2;\n\t\t\t\tvar bestScore = diff_cleanupSemanticScore_(equality1, edit) + diff_cleanupSemanticScore_(edit, equality2);\n\t\t\t\twhile (edit.charAt(0) === equality2.charAt(0)) {\n\t\t\t\t\tequality1 += edit.charAt(0);\n\t\t\t\t\tedit = edit.substring(1) + equality2.charAt(0);\n\t\t\t\t\tequality2 = equality2.substring(1);\n\t\t\t\t\tvar score = diff_cleanupSemanticScore_(equality1, edit) + diff_cleanupSemanticScore_(edit, equality2);\n\t\t\t\t\tif (score >= bestScore) {\n\t\t\t\t\t\tbestScore = score;\n\t\t\t\t\t\tbestEquality1 = equality1;\n\t\t\t\t\t\tbestEdit = edit;\n\t\t\t\t\t\tbestEquality2 = equality2;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (diffs[pointer - 1][1] != bestEquality1) {\n\t\t\t\t\tif (bestEquality1) diffs[pointer - 1][1] = bestEquality1;\n\t\t\t\t\telse {\n\t\t\t\t\t\tdiffs.splice(pointer - 1, 1);\n\t\t\t\t\t\tpointer--;\n\t\t\t\t\t}\n\t\t\t\t\tdiffs[pointer][1] = bestEdit;\n\t\t\t\t\tif (bestEquality2) diffs[pointer + 1][1] = bestEquality2;\n\t\t\t\t\telse {\n\t\t\t\t\t\tdiffs.splice(pointer + 1, 1);\n\t\t\t\t\t\tpointer--;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tpointer++;\n\t\t}\n\t};\n\tdiff_match_patch.nonAlphaNumericRegex_ = /[^a-zA-Z0-9]/;\n\tdiff_match_patch.whitespaceRegex_ = /\\s/;\n\tdiff_match_patch.linebreakRegex_ = /[\\r\\n]/;\n\tdiff_match_patch.blanklineEndRegex_ = /\\n\\r?\\n$/;\n\tdiff_match_patch.blanklineStartRegex_ = /^\\r?\\n\\r?\\n/;\n\t/**\n\t* Reduce the number of edits by eliminating operationally trivial equalities.\n\t* @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples.\n\t*/\n\tdiff_match_patch.prototype.diff_cleanupEfficiency = function(diffs) {\n\t\tvar changes = false;\n\t\tvar equalities = [];\n\t\tvar equalitiesLength = 0;\n\t\t/** @type {?string} */\n\t\tvar lastEquality = null;\n\t\tvar pointer = 0;\n\t\tvar pre_ins = false;\n\t\tvar pre_del = false;\n\t\tvar post_ins = false;\n\t\tvar post_del = false;\n\t\twhile (pointer < diffs.length) {\n\t\t\tif (diffs[pointer][0] == DIFF_EQUAL) {\n\t\t\t\tif (diffs[pointer][1].length < this.Diff_EditCost && (post_ins || post_del)) {\n\t\t\t\t\tequalities[equalitiesLength++] = pointer;\n\t\t\t\t\tpre_ins = post_ins;\n\t\t\t\t\tpre_del = post_del;\n\t\t\t\t\tlastEquality = diffs[pointer][1];\n\t\t\t\t} else {\n\t\t\t\t\tequalitiesLength = 0;\n\t\t\t\t\tlastEquality = null;\n\t\t\t\t}\n\t\t\t\tpost_ins = post_del = false;\n\t\t\t} else {\n\t\t\t\tif (diffs[pointer][0] == DIFF_DELETE) post_del = true;\n\t\t\t\telse post_ins = true;\n\t\t\t\tif (lastEquality && (pre_ins && pre_del && post_ins && post_del || lastEquality.length < this.Diff_EditCost / 2 && pre_ins + pre_del + post_ins + post_del == 3)) {\n\t\t\t\t\tdiffs.splice(equalities[equalitiesLength - 1], 0, new diff_match_patch.Diff(DIFF_DELETE, lastEquality));\n\t\t\t\t\tdiffs[equalities[equalitiesLength - 1] + 1][0] = DIFF_INSERT;\n\t\t\t\t\tequalitiesLength--;\n\t\t\t\t\tlastEquality = null;\n\t\t\t\t\tif (pre_ins && pre_del) {\n\t\t\t\t\t\tpost_ins = post_del = true;\n\t\t\t\t\t\tequalitiesLength = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tequalitiesLength--;\n\t\t\t\t\t\tpointer = equalitiesLength > 0 ? equalities[equalitiesLength - 1] : -1;\n\t\t\t\t\t\tpost_ins = post_del = false;\n\t\t\t\t\t}\n\t\t\t\t\tchanges = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tpointer++;\n\t\t}\n\t\tif (changes) this.diff_cleanupMerge(diffs);\n\t};\n\t/**\n\t* Reorder and merge like edit sections. Merge equalities.\n\t* Any edit section can move as long as it doesn't cross an equality.\n\t* @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples.\n\t*/\n\tdiff_match_patch.prototype.diff_cleanupMerge = function(diffs) {\n\t\tdiffs.push(new diff_match_patch.Diff(DIFF_EQUAL, \"\"));\n\t\tvar pointer = 0;\n\t\tvar count_delete = 0;\n\t\tvar count_insert = 0;\n\t\tvar text_delete = \"\";\n\t\tvar text_insert = \"\";\n\t\tvar commonlength;\n\t\twhile (pointer < diffs.length) switch (diffs[pointer][0]) {\n\t\t\tcase DIFF_INSERT:\n\t\t\t\tcount_insert++;\n\t\t\t\ttext_insert += diffs[pointer][1];\n\t\t\t\tpointer++;\n\t\t\t\tbreak;\n\t\t\tcase DIFF_DELETE:\n\t\t\t\tcount_delete++;\n\t\t\t\ttext_delete += diffs[pointer][1];\n\t\t\t\tpointer++;\n\t\t\t\tbreak;\n\t\t\tcase DIFF_EQUAL:\n\t\t\t\tif (count_delete + count_insert > 1) {\n\t\t\t\t\tif (count_delete !== 0 && count_insert !== 0) {\n\t\t\t\t\t\tcommonlength = this.diff_commonPrefix(text_insert, text_delete);\n\t\t\t\t\t\tif (commonlength !== 0) {\n\t\t\t\t\t\t\tif (pointer - count_delete - count_insert > 0 && diffs[pointer - count_delete - count_insert - 1][0] == DIFF_EQUAL) diffs[pointer - count_delete - count_insert - 1][1] += text_insert.substring(0, commonlength);\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tdiffs.splice(0, 0, new diff_match_patch.Diff(DIFF_EQUAL, text_insert.substring(0, commonlength)));\n\t\t\t\t\t\t\t\tpointer++;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttext_insert = text_insert.substring(commonlength);\n\t\t\t\t\t\t\ttext_delete = text_delete.substring(commonlength);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcommonlength = this.diff_commonSuffix(text_insert, text_delete);\n\t\t\t\t\t\tif (commonlength !== 0) {\n\t\t\t\t\t\t\tdiffs[pointer][1] = text_insert.substring(text_insert.length - commonlength) + diffs[pointer][1];\n\t\t\t\t\t\t\ttext_insert = text_insert.substring(0, text_insert.length - commonlength);\n\t\t\t\t\t\t\ttext_delete = text_delete.substring(0, text_delete.length - commonlength);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpointer -= count_delete + count_insert;\n\t\t\t\t\tdiffs.splice(pointer, count_delete + count_insert);\n\t\t\t\t\tif (text_delete.length) {\n\t\t\t\t\t\tdiffs.splice(pointer, 0, new diff_match_patch.Diff(DIFF_DELETE, text_delete));\n\t\t\t\t\t\tpointer++;\n\t\t\t\t\t}\n\t\t\t\t\tif (text_insert.length) {\n\t\t\t\t\t\tdiffs.splice(pointer, 0, new diff_match_patch.Diff(DIFF_INSERT, text_insert));\n\t\t\t\t\t\tpointer++;\n\t\t\t\t\t}\n\t\t\t\t\tpointer++;\n\t\t\t\t} else if (pointer !== 0 && diffs[pointer - 1][0] == DIFF_EQUAL) {\n\t\t\t\t\tdiffs[pointer - 1][1] += diffs[pointer][1];\n\t\t\t\t\tdiffs.splice(pointer, 1);\n\t\t\t\t} else pointer++;\n\t\t\t\tcount_insert = 0;\n\t\t\t\tcount_delete = 0;\n\t\t\t\ttext_delete = \"\";\n\t\t\t\ttext_insert = \"\";\n\t\t}\n\t\tif (diffs[diffs.length - 1][1] === \"\") diffs.pop();\n\t\tvar changes = false;\n\t\tpointer = 1;\n\t\twhile (pointer < diffs.length - 1) {\n\t\t\tif (diffs[pointer - 1][0] == DIFF_EQUAL && diffs[pointer + 1][0] == DIFF_EQUAL) {\n\t\t\t\tif (diffs[pointer][1].substring(diffs[pointer][1].length - diffs[pointer - 1][1].length) == diffs[pointer - 1][1]) {\n\t\t\t\t\tdiffs[pointer][1] = diffs[pointer - 1][1] + diffs[pointer][1].substring(0, diffs[pointer][1].length - diffs[pointer - 1][1].length);\n\t\t\t\t\tdiffs[pointer + 1][1] = diffs[pointer - 1][1] + diffs[pointer + 1][1];\n\t\t\t\t\tdiffs.splice(pointer - 1, 1);\n\t\t\t\t\tchanges = true;\n\t\t\t\t} else if (diffs[pointer][1].substring(0, diffs[pointer + 1][1].length) == diffs[pointer + 1][1]) {\n\t\t\t\t\tdiffs[pointer - 1][1] += diffs[pointer + 1][1];\n\t\t\t\t\tdiffs[pointer][1] = diffs[pointer][1].substring(diffs[pointer + 1][1].length) + diffs[pointer + 1][1];\n\t\t\t\t\tdiffs.splice(pointer + 1, 1);\n\t\t\t\t\tchanges = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tpointer++;\n\t\t}\n\t\tif (changes) this.diff_cleanupMerge(diffs);\n\t};\n\t/**\n\t* loc is a location in text1, compute and return the equivalent location in\n\t* text2.\n\t* e.g. 'The cat' vs 'The big cat', 1->1, 5->8\n\t* @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples.\n\t* @param {number} loc Location within text1.\n\t* @return {number} Location within text2.\n\t*/\n\tdiff_match_patch.prototype.diff_xIndex = function(diffs, loc) {\n\t\tvar chars1 = 0;\n\t\tvar chars2 = 0;\n\t\tvar last_chars1 = 0;\n\t\tvar last_chars2 = 0;\n\t\tvar x = 0;\n\t\tfor (; x < diffs.length; x++) {\n\t\t\tif (diffs[x][0] !== DIFF_INSERT) chars1 += diffs[x][1].length;\n\t\t\tif (diffs[x][0] !== DIFF_DELETE) chars2 += diffs[x][1].length;\n\t\t\tif (chars1 > loc) break;\n\t\t\tlast_chars1 = chars1;\n\t\t\tlast_chars2 = chars2;\n\t\t}\n\t\tif (diffs.length != x && diffs[x][0] === DIFF_DELETE) return last_chars2;\n\t\treturn last_chars2 + (loc - last_chars1);\n\t};\n\t/**\n\t* Convert a diff array into a pretty HTML report.\n\t* @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples.\n\t* @return {string} HTML representation.\n\t*/\n\tdiff_match_patch.prototype.diff_prettyHtml = function(diffs) {\n\t\tvar html = [];\n\t\tvar pattern_amp = /&/g;\n\t\tvar pattern_lt = /</g;\n\t\tvar pattern_gt = />/g;\n\t\tvar pattern_para = /\\n/g;\n\t\tfor (var x = 0; x < diffs.length; x++) {\n\t\t\tvar op = diffs[x][0];\n\t\t\tvar text = diffs[x][1].replace(pattern_amp, \"&\").replace(pattern_lt, \"<\").replace(pattern_gt, \">\").replace(pattern_para, \"¶<br>\");\n\t\t\tswitch (op) {\n\t\t\t\tcase DIFF_INSERT:\n\t\t\t\t\thtml[x] = \"<ins style=\\\"background:#e6ffe6;\\\">\" + text + \"</ins>\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase DIFF_DELETE:\n\t\t\t\t\thtml[x] = \"<del style=\\\"background:#ffe6e6;\\\">\" + text + \"</del>\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase DIFF_EQUAL: html[x] = \"<span>\" + text + \"</span>\";\n\t\t\t}\n\t\t}\n\t\treturn html.join(\"\");\n\t};\n\t/**\n\t* Compute and return the source text (all equalities and deletions).\n\t* @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples.\n\t* @return {string} Source text.\n\t*/\n\tdiff_match_patch.prototype.diff_text1 = function(diffs) {\n\t\tvar text = [];\n\t\tfor (var x = 0; x < diffs.length; x++) if (diffs[x][0] !== DIFF_INSERT) text[x] = diffs[x][1];\n\t\treturn text.join(\"\");\n\t};\n\t/**\n\t* Compute and return the destination text (all equalities and insertions).\n\t* @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples.\n\t* @return {string} Destination text.\n\t*/\n\tdiff_match_patch.prototype.diff_text2 = function(diffs) {\n\t\tvar text = [];\n\t\tfor (var x = 0; x < diffs.length; x++) if (diffs[x][0] !== DIFF_DELETE) text[x] = diffs[x][1];\n\t\treturn text.join(\"\");\n\t};\n\t/**\n\t* Compute the Levenshtein distance; the number of inserted, deleted or\n\t* substituted characters.\n\t* @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples.\n\t* @return {number} Number of changes.\n\t*/\n\tdiff_match_patch.prototype.diff_levenshtein = function(diffs) {\n\t\tvar levenshtein = 0;\n\t\tvar insertions = 0;\n\t\tvar deletions = 0;\n\t\tfor (var x = 0; x < diffs.length; x++) {\n\t\t\tvar op = diffs[x][0];\n\t\t\tvar data = diffs[x][1];\n\t\t\tswitch (op) {\n\t\t\t\tcase DIFF_INSERT:\n\t\t\t\t\tinsertions += data.length;\n\t\t\t\t\tbreak;\n\t\t\t\tcase DIFF_DELETE:\n\t\t\t\t\tdeletions += data.length;\n\t\t\t\t\tbreak;\n\t\t\t\tcase DIFF_EQUAL:\n\t\t\t\t\tlevenshtein += Math.max(insertions, deletions);\n\t\t\t\t\tinsertions = 0;\n\t\t\t\t\tdeletions = 0;\n\t\t\t}\n\t\t}\n\t\tlevenshtein += Math.max(insertions, deletions);\n\t\treturn levenshtein;\n\t};\n\t/**\n\t* Crush the diff into an encoded string which describes the operations\n\t* required to transform text1 into text2.\n\t* E.g. =3\\t-2\\t+ing -> Keep 3 chars, delete 2 chars, insert 'ing'.\n\t* Operations are tab-separated. Inserted text is escaped using %xx notation.\n\t* @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples.\n\t* @return {string} Delta text.\n\t*/\n\tdiff_match_patch.prototype.diff_toDelta = function(diffs) {\n\t\tvar text = [];\n\t\tfor (var x = 0; x < diffs.length; x++) switch (diffs[x][0]) {\n\t\t\tcase DIFF_INSERT:\n\t\t\t\ttext[x] = \"+\" + encodeURI(diffs[x][1]);\n\t\t\t\tbreak;\n\t\t\tcase DIFF_DELETE:\n\t\t\t\ttext[x] = \"-\" + diffs[x][1].length;\n\t\t\t\tbreak;\n\t\t\tcase DIFF_EQUAL: text[x] = \"=\" + diffs[x][1].length;\n\t\t}\n\t\treturn text.join(\"\t\").replace(/%20/g, \" \");\n\t};\n\t/**\n\t* Given the original text1, and an encoded string which describes the\n\t* operations required to transform text1 into text2, compute the full diff.\n\t* @param {string} text1 Source string for the diff.\n\t* @param {string} delta Delta text.\n\t* @return {!Array.<!diff_match_patch.Diff>} Array of diff tuples.\n\t* @throws {!Error} If invalid input.\n\t*/\n\tdiff_match_patch.prototype.diff_fromDelta = function(text1, delta) {\n\t\tvar diffs = [];\n\t\tvar diffsLength = 0;\n\t\tvar pointer = 0;\n\t\tvar tokens = delta.split(/\\t/g);\n\t\tfor (var x = 0; x < tokens.length; x++) {\n\t\t\tvar param = tokens[x].substring(1);\n\t\t\tswitch (tokens[x].charAt(0)) {\n\t\t\t\tcase \"+\":\n\t\t\t\t\ttry {\n\t\t\t\t\t\tdiffs[diffsLength++] = new diff_match_patch.Diff(DIFF_INSERT, decodeURI(param));\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tthrow new Error(\"Illegal escape in diff_fromDelta: \" + param);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"-\":\n\t\t\t\tcase \"=\":\n\t\t\t\t\tvar n = parseInt(param, 10);\n\t\t\t\t\tif (isNaN(n) || n < 0) throw new Error(\"Invalid number in diff_fromDelta: \" + param);\n\t\t\t\t\tvar text = text1.substring(pointer, pointer += n);\n\t\t\t\t\tif (tokens[x].charAt(0) == \"=\") diffs[diffsLength++] = new diff_match_patch.Diff(DIFF_EQUAL, text);\n\t\t\t\t\telse diffs[diffsLength++] = new diff_match_patch.Diff(DIFF_DELETE, text);\n\t\t\t\t\tbreak;\n\t\t\t\tdefault: if (tokens[x]) throw new Error(\"Invalid diff operation in diff_fromDelta: \" + tokens[x]);\n\t\t\t}\n\t\t}\n\t\tif (pointer != text1.length) throw new Error(\"Delta length (\" + pointer + \") does not equal source text length (\" + text1.length + \").\");\n\t\treturn diffs;\n\t};\n\t/**\n\t* Locate the best instance of 'pattern' in 'text' near 'loc'.\n\t* @param {string} text The text to search.\n\t* @param {string} pattern The pattern to search for.\n\t* @param {number} loc The location to search around.\n\t* @return {number} Best match index or -1.\n\t*/\n\tdiff_match_patch.prototype.match_main = function(text, pattern, loc) {\n\t\tif (text == null || pattern == null || loc == null) throw new Error(\"Null input. (match_main)\");\n\t\tloc = Math.max(0, Math.min(loc, text.length));\n\t\tif (text == pattern) return 0;\n\t\telse if (!text.length) return -1;\n\t\telse if (text.substring(loc, loc + pattern.length) == pattern) return loc;\n\t\telse return this.match_bitap_(text, pattern, loc);\n\t};\n\t/**\n\t* Locate the best instance of 'pattern' in 'text' near 'loc' using the\n\t* Bitap algorithm.\n\t* @param {string} text The text to search.\n\t* @param {string} pattern The pattern to search for.\n\t* @param {number} loc The location to search around.\n\t* @return {number} Best match index or -1.\n\t* @private\n\t*/\n\tdiff_match_patch.prototype.match_bitap_ = function(text, pattern, loc) {\n\t\tif (pattern.length > this.Match_MaxBits) throw new Error(\"Pattern too long for this browser.\");\n\t\tvar s = this.match_alphabet_(pattern);\n\t\tvar dmp = this;\n\t\t/**\n\t\t* Compute and return the score for a match with e errors and x location.\n\t\t* Accesses loc and pattern through being a closure.\n\t\t* @param {number} e Number of errors in match.\n\t\t* @param {number} x Location of match.\n\t\t* @return {number} Overall score for match (0.0 = good, 1.0 = bad).\n\t\t* @private\n\t\t*/\n\t\tfunction match_bitapScore_(e, x) {\n\t\t\tvar accuracy = e / pattern.length;\n\t\t\tvar proximity = Math.abs(loc - x);\n\t\t\tif (!dmp.Match_Distance) return proximity ? 1 : accuracy;\n\t\t\treturn accuracy + proximity / dmp.Match_Distance;\n\t\t}\n\t\tvar score_threshold = this.Match_Threshold;\n\t\tvar best_loc = text.indexOf(pattern, loc);\n\t\tif (best_loc != -1) {\n\t\t\tscore_threshold = Math.min(match_bitapScore_(0, best_loc), score_threshold);\n\t\t\tbest_loc = text.lastIndexOf(pattern, loc + pattern.length);\n\t\t\tif (best_loc != -1) score_threshold = Math.min(match_bitapScore_(0, best_loc), score_threshold);\n\t\t}\n\t\tvar matchmask = 1 << pattern.length - 1;\n\t\tbest_loc = -1;\n\t\tvar bin_min, bin_mid;\n\t\tvar bin_max = pattern.length + text.length;\n\t\tvar last_rd;\n\t\tfor (var d = 0; d < pattern.length; d++) {\n\t\t\tbin_min = 0;\n\t\t\tbin_mid = bin_max;\n\t\t\twhile (bin_min < bin_mid) {\n\t\t\t\tif (match_bitapScore_(d, loc + bin_mid) <= score_threshold) bin_min = bin_mid;\n\t\t\t\telse bin_max = bin_mid;\n\t\t\t\tbin_mid = Math.floor((bin_max - bin_min) / 2 + bin_min);\n\t\t\t}\n\t\t\tbin_max = bin_mid;\n\t\t\tvar start = Math.max(1, loc - bin_mid + 1);\n\t\t\tvar finish = Math.min(loc + bin_mid, text.length) + pattern.length;\n\t\t\tvar rd = Array(finish + 2);\n\t\t\trd[finish + 1] = (1 << d) - 1;\n\t\t\tfor (var j = finish; j >= start; j--) {\n\t\t\t\tvar charMatch = s[text.charAt(j - 1)];\n\t\t\t\tif (d === 0) rd[j] = (rd[j + 1] << 1 | 1) & charMatch;\n\t\t\t\telse rd[j] = (rd[j + 1] << 1 | 1) & charMatch | ((last_rd[j + 1] | last_rd[j]) << 1 | 1) | last_rd[j + 1];\n\t\t\t\tif (rd[j] & matchmask) {\n\t\t\t\t\tvar score = match_bitapScore_(d, j - 1);\n\t\t\t\t\tif (score <= score_threshold) {\n\t\t\t\t\t\tscore_threshold = score;\n\t\t\t\t\t\tbest_loc = j - 1;\n\t\t\t\t\t\tif (best_loc > loc) start = Math.max(1, 2 * loc - best_loc);\n\t\t\t\t\t\telse break;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (match_bitapScore_(d + 1, loc) > score_threshold) break;\n\t\t\tlast_rd = rd;\n\t\t}\n\t\treturn best_loc;\n\t};\n\t/**\n\t* Initialise the alphabet for the Bitap algorithm.\n\t* @param {string} pattern The text to encode.\n\t* @return {!Object} Hash of character locations.\n\t* @private\n\t*/\n\tdiff_match_patch.prototype.match_alphabet_ = function(pattern) {\n\t\tvar s = {};\n\t\tfor (var i = 0; i < pattern.length; i++) s[pattern.charAt(i)] = 0;\n\t\tfor (var i = 0; i < pattern.length; i++) s[pattern.charAt(i)] |= 1 << pattern.length - i - 1;\n\t\treturn s;\n\t};\n\t/**\n\t* Increase the context until it is unique,\n\t* but don't let the pattern expand beyond Match_MaxBits.\n\t* @param {!diff_match_patch.patch_obj} patch The patch to grow.\n\t* @param {string} text Source text.\n\t* @private\n\t*/\n\tdiff_match_patch.prototype.patch_addContext_ = function(patch, text) {\n\t\tif (text.length == 0) return;\n\t\tif (patch.start2 === null) throw Error(\"patch not initialized\");\n\t\tvar pattern = text.substring(patch.start2, patch.start2 + patch.length1);\n\t\tvar padding = 0;\n\t\twhile (text.indexOf(pattern) != text.lastIndexOf(pattern) && pattern.length < this.Match_MaxBits - this.Patch_Margin - this.Patch_Margin) {\n\t\t\tpadding += this.Patch_Margin;\n\t\t\tpattern = text.substring(patch.start2 - padding, patch.start2 + patch.length1 + padding);\n\t\t}\n\t\tpadding += this.Patch_Margin;\n\t\tvar prefix = text.substring(patch.start2 - padding, patch.start2);\n\t\tif (prefix) patch.diffs.unshift(new diff_match_patch.Diff(DIFF_EQUAL, prefix));\n\t\tvar suffix = text.substring(patch.start2 + patch.length1, patch.start2 + patch.length1 + padding);\n\t\tif (suffix) patch.diffs.push(new diff_match_patch.Diff(DIFF_EQUAL, suffix));\n\t\tpatch.start1 -= prefix.length;\n\t\tpatch.start2 -= prefix.length;\n\t\tpatch.length1 += prefix.length + suffix.length;\n\t\tpatch.length2 += prefix.length + suffix.length;\n\t};\n\t/**\n\t* Compute a list of patches to turn text1 into text2.\n\t* Use diffs if provided, otherwise compute it ourselves.\n\t* There are four ways to call this function, depending on what data is\n\t* available to the caller:\n\t* Method 1:\n\t* a = text1, b = text2\n\t* Method 2:\n\t* a = diffs\n\t* Method 3 (optimal):\n\t* a = text1, b = diffs\n\t* Method 4 (deprecated, use method 3):\n\t* a = text1, b = text2, c = diffs\n\t*\n\t* @param {string|!Array.<!diff_match_patch.Diff>} a text1 (methods 1,3,4) or\n\t* Array of diff tuples for text1 to text2 (method 2).\n\t* @param {string|!Array.<!diff_match_patch.Diff>=} opt_b text2 (methods 1,4) or\n\t* Array of diff tuples for text1 to text2 (method 3) or undefined (method 2).\n\t* @param {string|!Array.<!diff_match_patch.Diff>=} opt_c Array of diff tuples\n\t* for text1 to text2 (method 4) or undefined (methods 1,2,3).\n\t* @return {!Array.<!diff_match_patch.patch_obj>} Array of Patch objects.\n\t*/\n\tdiff_match_patch.prototype.patch_make = function(a, opt_b, opt_c) {\n\t\tvar text1, diffs;\n\t\tif (typeof a == \"string\" && typeof opt_b == \"string\" && typeof opt_c == \"undefined\") {\n\t\t\ttext1 = a;\n\t\t\tdiffs = this.diff_main(text1, opt_b, true);\n\t\t\tif (diffs.length > 2) {\n\t\t\t\tthis.diff_cleanupSemantic(diffs);\n\t\t\t\tthis.diff_cleanupEfficiency(diffs);\n\t\t\t}\n\t\t} else if (a && typeof a == \"object\" && typeof opt_b == \"undefined\" && typeof opt_c == \"undefined\") {\n\t\t\tdiffs = a;\n\t\t\ttext1 = this.diff_text1(diffs);\n\t\t} else if (typeof a == \"string\" && opt_b && typeof opt_b == \"object\" && typeof opt_c == \"undefined\") {\n\t\t\ttext1 = a;\n\t\t\tdiffs = opt_b;\n\t\t} else if (typeof a == \"string\" && typeof opt_b == \"string\" && opt_c && typeof opt_c == \"object\") {\n\t\t\ttext1 = a;\n\t\t\tdiffs = opt_c;\n\t\t} else throw new Error(\"Unknown call format to patch_make.\");\n\t\tif (diffs.length === 0) return [];\n\t\tvar patches = [];\n\t\tvar patch = new diff_match_patch.patch_obj();\n\t\tvar patchDiffLength = 0;\n\t\tvar char_count1 = 0;\n\t\tvar char_count2 = 0;\n\t\tvar prepatch_text = text1;\n\t\tvar postpatch_text = text1;\n\t\tfor (var x = 0; x < diffs.length; x++) {\n\t\t\tvar diff_type = diffs[x][0];\n\t\t\tvar diff_text = diffs[x][1];\n\t\t\tif (!patchDiffLength && diff_type !== DIFF_EQUAL) {\n\t\t\t\tpatch.start1 = char_count1;\n\t\t\t\tpatch.start2 = char_count2;\n\t\t\t}\n\t\t\tswitch (diff_type) {\n\t\t\t\tcase DIFF_INSERT:\n\t\t\t\t\tpatch.diffs[patchDiffLength++] = diffs[x];\n\t\t\t\t\tpatch.length2 += diff_text.length;\n\t\t\t\t\tpostpatch_text = postpatch_text.substring(0, char_count2) + diff_text + postpatch_text.substring(char_count2);\n\t\t\t\t\tbreak;\n\t\t\t\tcase DIFF_DELETE:\n\t\t\t\t\tpatch.length1 += diff_text.length;\n\t\t\t\t\tpatch.diffs[patchDiffLength++] = diffs[x];\n\t\t\t\t\tpostpatch_text = postpatch_text.substring(0, char_count2) + postpatch_text.substring(char_count2 + diff_text.length);\n\t\t\t\t\tbreak;\n\t\t\t\tcase DIFF_EQUAL: if (diff_text.length <= 2 * this.Patch_Margin && patchDiffLength && diffs.length != x + 1) {\n\t\t\t\t\tpatch.diffs[patchDiffLength++] = diffs[x];\n\t\t\t\t\tpatch.length1 += diff_text.length;\n\t\t\t\t\tpatch.length2 += diff_text.length;\n\t\t\t\t} else if (diff_text.length >= 2 * this.Patch_Margin) {\n\t\t\t\t\tif (patchDiffLength) {\n\t\t\t\t\t\tthis.patch_addContext_(patch, prepatch_text);\n\t\t\t\t\t\tpatches.push(patch);\n\t\t\t\t\t\tpatch = new diff_match_patch.patch_obj();\n\t\t\t\t\t\tpatchDiffLength = 0;\n\t\t\t\t\t\tprepatch_text = postpatch_text;\n\t\t\t\t\t\tchar_count1 = char_count2;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (diff_type !== DIFF_INSERT) char_count1 += diff_text.length;\n\t\t\tif (diff_type !== DIFF_DELETE) char_count2 += diff_text.length;\n\t\t}\n\t\tif (patchDiffLength) {\n\t\t\tthis.patch_addContext_(patch, prepatch_text);\n\t\t\tpatches.push(patch);\n\t\t}\n\t\treturn patches;\n\t};\n\t/**\n\t* Given an array of patches, return another array that is identical.\n\t* @param {!Array.<!diff_match_patch.patch_obj>} patches Array of Patch objects.\n\t* @return {!Array.<!diff_match_patch.patch_obj>} Array of Patch objects.\n\t*/\n\tdiff_match_patch.prototype.patch_deepCopy = function(patches) {\n\t\tvar patchesCopy = [];\n\t\tfor (var x = 0; x < patches.length; x++) {\n\t\t\tvar patch = patches[x];\n\t\t\tvar patchCopy = new diff_match_patch.patch_obj();\n\t\t\tpatchCopy.diffs = [];\n\t\t\tfor (var y = 0; y < patch.diffs.length; y++) patchCopy.diffs[y] = new diff_match_patch.Diff(patch.diffs[y][0], patch.diffs[y][1]);\n\t\t\tpatchCopy.start1 = patch.start1;\n\t\t\tpatchCopy.start2 = patch.start2;\n\t\t\tpatchCopy.length1 = patch.length1;\n\t\t\tpatchCopy.length2 = patch.length2;\n\t\t\tpatchesCopy[x] = patchCopy;\n\t\t}\n\t\treturn patchesCopy;\n\t};\n\t/**\n\t* Merge a set of patches onto the text. Return a patched text, as well\n\t* as a list of true/false values indicating which patches were applied.\n\t* @param {!Array.<!diff_match_patch.patch_obj>} patches Array of Patch objects.\n\t* @param {string} text Old text.\n\t* @return {!Array.<string|!Array.<boolean>>} Two element Array, containing the\n\t* new text and an array of boolean values.\n\t*/\n\tdiff_match_patch.prototype.patch_apply = function(patches, text) {\n\t\tif (patches.length == 0) return [text, []];\n\t\tpatches = this.patch_deepCopy(patches);\n\t\tvar nullPadding = this.patch_addPadding(patches);\n\t\ttext = nullPadding + text + nullPadding;\n\t\tthis.patch_splitMax(patches);\n\t\tvar delta = 0;\n\t\tvar results = [];\n\t\tfor (var x = 0; x < patches.length; x++) {\n\t\t\tvar expected_loc = patches[x].start2 + delta;\n\t\t\tvar text1 = this.diff_text1(patches[x].diffs);\n\t\t\tvar start_loc;\n\t\t\tvar end_loc = -1;\n\t\t\tif (text1.length > this.Match_MaxBits) {\n\t\t\t\tstart_loc = this.match_main(text, text1.substring(0, this.Match_MaxBits), expected_loc);\n\t\t\t\tif (start_loc != -1) {\n\t\t\t\t\tend_loc = this.match_main(text, text1.substring(text1.length - this.Match_MaxBits), expected_loc + text1.length - this.Match_MaxBits);\n\t\t\t\t\tif (end_loc == -1 || start_loc >= end_loc) start_loc = -1;\n\t\t\t\t}\n\t\t\t} else start_loc = this.match_main(text, text1, expected_loc);\n\t\t\tif (start_loc == -1) {\n\t\t\t\tresults[x] = false;\n\t\t\t\tdelta -= patches[x].length2 - patches[x].length1;\n\t\t\t} else {\n\t\t\t\tresults[x] = true;\n\t\t\t\tdelta = start_loc - expected_loc;\n\t\t\t\tvar text2;\n\t\t\t\tif (end_loc == -1) text2 = text.substring(start_loc, start_loc + text1.length);\n\t\t\t\telse text2 = text.substring(start_loc, end_loc + this.Match_MaxBits);\n\t\t\t\tif (text1 == text2) text = text.substring(0, start_loc) + this.diff_text2(patches[x].diffs) + text.substring(start_loc + text1.length);\n\t\t\t\telse {\n\t\t\t\t\tvar diffs = this.diff_main(text1, text2, false);\n\t\t\t\t\tif (text1.length > this.Match_MaxBits && this.diff_levenshtein(diffs) / text1.length > this.Patch_DeleteThreshold) results[x] = false;\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis.diff_cleanupSemanticLossless(diffs);\n\t\t\t\t\t\tvar index1 = 0;\n\t\t\t\t\t\tvar index2;\n\t\t\t\t\t\tfor (var y = 0; y < patches[x].diffs.length; y++) {\n\t\t\t\t\t\t\tvar mod = patches[x].diffs[y];\n\t\t\t\t\t\t\tif (mod[0] !== DIFF_EQUAL) index2 = this.diff_xIndex(diffs, index1);\n\t\t\t\t\t\t\tif (mod[0] === DIFF_INSERT) text = text.substring(0, start_loc + index2) + mod[1] + text.substring(start_loc + index2);\n\t\t\t\t\t\t\telse if (mod[0] === DIFF_DELETE) text = text.substring(0, start_loc + index2) + text.substring(start_loc + this.diff_xIndex(diffs, index1 + mod[1].length));\n\t\t\t\t\t\t\tif (mod[0] !== DIFF_DELETE) index1 += mod[1].length;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\ttext = text.substring(nullPadding.length, text.length - nullPadding.length);\n\t\treturn [text, results];\n\t};\n\t/**\n\t* Add some padding on text start and end so that edges can match something.\n\t* Intended to be called only from within patch_apply.\n\t* @param {!Array.<!diff_match_patch.patch_obj>} patches Array of Patch objects.\n\t* @return {string} The padding string added to each side.\n\t*/\n\tdiff_match_patch.prototype.patch_addPadding = function(patches) {\n\t\tvar paddingLength = this.Patch_Margin;\n\t\tvar nullPadding = \"\";\n\t\tfor (var x = 1; x <= paddingLength; x++) nullPadding += String.fromCharCode(x);\n\t\tfor (var x = 0; x < patches.length; x++) {\n\t\t\tpatches[x].start1 += paddingLength;\n\t\t\tpatches[x].start2 += paddingLength;\n\t\t}\n\t\tvar patch = patches[0];\n\t\tvar diffs = patch.diffs;\n\t\tif (diffs.length == 0 || diffs[0][0] != DIFF_EQUAL) {\n\t\t\tdiffs.unshift(new diff_match_patch.Diff(DIFF_EQUAL, nullPadding));\n\t\t\tpatch.start1 -= paddingLength;\n\t\t\tpatch.start2 -= paddingLength;\n\t\t\tpatch.length1 += paddingLength;\n\t\t\tpatch.length2 += paddingLength;\n\t\t} else if (paddingLength > diffs[0][1].length) {\n\t\t\tvar extraLength = paddingLength - diffs[0][1].length;\n\t\t\tdiffs[0][1] = nullPadding.substring(diffs[0][1].length) + diffs[0][1];\n\t\t\tpatch.start1 -= extraLength;\n\t\t\tpatch.start2 -= extraLength;\n\t\t\tpatch.length1 += extraLength;\n\t\t\tpatch.length2 += extraLength;\n\t\t}\n\t\tpatch = patches[patches.length - 1];\n\t\tdiffs = patch.diffs;\n\t\tif (diffs.length == 0 || diffs[diffs.length - 1][0] != DIFF_EQUAL) {\n\t\t\tdiffs.push(new diff_match_patch.Diff(DIFF_EQUAL, nullPadding));\n\t\t\tpatch.length1 += paddingLength;\n\t\t\tpatch.length2 += paddingLength;\n\t\t} else if (paddingLength > diffs[diffs.length - 1][1].length) {\n\t\t\tvar extraLength = paddingLength - diffs[diffs.length - 1][1].length;\n\t\t\tdiffs[diffs.length - 1][1] += nullPadding.substring(0, extraLength);\n\t\t\tpatch.length1 += extraLength;\n\t\t\tpatch.length2 += extraLength;\n\t\t}\n\t\treturn nullPadding;\n\t};\n\t/**\n\t* Look through the patches and break up any which are longer than the maximum\n\t* limit of the match algorithm.\n\t* Intended to be called only from within patch_apply.\n\t* @param {!Array.<!diff_match_patch.patch_obj>} patches Array of Patch objects.\n\t*/\n\tdiff_match_patch.prototype.patch_splitMax = function(patches) {\n\t\tvar patch_size = this.Match_MaxBits;\n\t\tfor (var x = 0; x < patches.length; x++) {\n\t\t\tif (patches[x].length1 <= patch_size) continue;\n\t\t\tvar bigpatch = patches[x];\n\t\t\tpatches.splice(x--, 1);\n\t\t\tvar start1 = bigpatch.start1;\n\t\t\tvar start2 = bigpatch.start2;\n\t\t\tvar precontext = \"\";\n\t\t\twhile (bigpatch.diffs.length !== 0) {\n\t\t\t\tvar patch = new diff_match_patch.patch_obj();\n\t\t\t\tvar empty = true;\n\t\t\t\tpatch.start1 = start1 - precontext.length;\n\t\t\t\tpatch.start2 = start2 - precontext.length;\n\t\t\t\tif (precontext !== \"\") {\n\t\t\t\t\tpatch.length1 = patch.length2 = precontext.length;\n\t\t\t\t\tpatch.diffs.push(new diff_match_patch.Diff(DIFF_EQUAL, precontext));\n\t\t\t\t}\n\t\t\t\twhile (bigpatch.diffs.length !== 0 && patch.length1 < patch_size - this.Patch_Margin) {\n\t\t\t\t\tvar diff_type = bigpatch.diffs[0][0];\n\t\t\t\t\tvar diff_text = bigpatch.diffs[0][1];\n\t\t\t\t\tif (diff_type === DIFF_INSERT) {\n\t\t\t\t\t\tpatch.length2 += diff_text.length;\n\t\t\t\t\t\tstart2 += diff_text.length;\n\t\t\t\t\t\tpatch.diffs.push(bigpatch.diffs.shift());\n\t\t\t\t\t\tempty = false;\n\t\t\t\t\t} else if (diff_type === DIFF_DELETE && patch.diffs.length == 1 && patch.diffs[0][0] == DIFF_EQUAL && diff_text.length > 2 * patch_size) {\n\t\t\t\t\t\tpatch.length1 += diff_text.length;\n\t\t\t\t\t\tstart1 += diff_text.length;\n\t\t\t\t\t\tempty = false;\n\t\t\t\t\t\tpatch.diffs.push(new diff_match_patch.Diff(diff_type, diff_text));\n\t\t\t\t\t\tbigpatch.diffs.shift();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdiff_text = diff_text.substring(0, patch_size - patch.length1 - this.Patch_Margin);\n\t\t\t\t\t\tpatch.length1 += diff_text.length;\n\t\t\t\t\t\tstart1 += diff_text.length;\n\t\t\t\t\t\tif (diff_type === DIFF_EQUAL) {\n\t\t\t\t\t\t\tpatch.length2 += diff_text.length;\n\t\t\t\t\t\t\tstart2 += diff_text.length;\n\t\t\t\t\t\t} else empty = false;\n\t\t\t\t\t\tpatch.diffs.push(new diff_match_patch.Diff(diff_type, diff_text));\n\t\t\t\t\t\tif (diff_text == bigpatch.diffs[0][1]) bigpatch.diffs.shift();\n\t\t\t\t\t\telse bigpatch.diffs[0][1] = bigpatch.diffs[0][1].substring(diff_text.length);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tprecontext = this.diff_text2(patch.diffs);\n\t\t\t\tprecontext = precontext.substring(precontext.length - this.Patch_Margin);\n\t\t\t\tvar postcontext = this.diff_text1(bigpatch.diffs).substring(0, this.Patch_Margin);\n\t\t\t\tif (postcontext !== \"\") {\n\t\t\t\t\tpatch.length1 += postcontext.length;\n\t\t\t\t\tpatch.length2 += postcontext.length;\n\t\t\t\t\tif (patch.diffs.length !== 0 && patch.diffs[patch.diffs.length - 1][0] === DIFF_EQUAL) patch.diffs[patch.diffs.length - 1][1] += postcontext;\n\t\t\t\t\telse patch.diffs.push(new diff_match_patch.Diff(DIFF_EQUAL, postcontext));\n\t\t\t\t}\n\t\t\t\tif (!empty) patches.splice(++x, 0, patch);\n\t\t\t}\n\t\t}\n\t};\n\t/**\n\t* Take a list of patches and return a textual representation.\n\t* @param {!Array.<!diff_match_patch.patch_obj>} patches Array of Patch objects.\n\t* @return {string} Text representation of patches.\n\t*/\n\tdiff_match_patch.prototype.patch_toText = function(patches) {\n\t\tvar text = [];\n\t\tfor (var x = 0; x < patches.length; x++) text[x] = patches[x];\n\t\treturn text.join(\"\");\n\t};\n\t/**\n\t* Parse a textual representation of patches and return a list of Patch objects.\n\t* @param {string} textline Text representation of patches.\n\t* @return {!Array.<!diff_match_patch.patch_obj>} Array of Patch objects.\n\t* @throws {!Error} If invalid input.\n\t*/\n\tdiff_match_patch.prototype.patch_fromText = function(textline) {\n\t\tvar patches = [];\n\t\tif (!textline) return patches;\n\t\tvar text = textline.split(\"\\n\");\n\t\tvar textPointer = 0;\n\t\tvar patchHeader = /^@@ -(\\d+),?(\\d*) \\+(\\d+),?(\\d*) @@$/;\n\t\twhile (textPointer < text.length) {\n\t\t\tvar m = text[textPointer].match(patchHeader);\n\t\t\tif (!m) throw new Error(\"Invalid patch string: \" + text[textPointer]);\n\t\t\tvar patch = new diff_match_patch.patch_obj();\n\t\t\tpatches.push(patch);\n\t\t\tpatch.start1 = parseInt(m[1], 10);\n\t\t\tif (m[2] === \"\") {\n\t\t\t\tpatch.start1--;\n\t\t\t\tpatch.length1 = 1;\n\t\t\t} else if (m[2] == \"0\") patch.length1 = 0;\n\t\t\telse {\n\t\t\t\tpatch.start1--;\n\t\t\t\tpatch.length1 = parseInt(m[2], 10);\n\t\t\t}\n\t\t\tpatch.start2 = parseInt(m[3], 10);\n\t\t\tif (m[4] === \"\") {\n\t\t\t\tpatch.start2--;\n\t\t\t\tpatch.length2 = 1;\n\t\t\t} else if (m[4] == \"0\") patch.length2 = 0;\n\t\t\telse {\n\t\t\t\tpatch.start2--;\n\t\t\t\tpatch.length2 = parseInt(m[4], 10);\n\t\t\t}\n\t\t\ttextPointer++;\n\t\t\twhile (textPointer < text.length) {\n\t\t\t\tvar sign = text[textPointer].charAt(0);\n\t\t\t\ttry {\n\t\t\t\t\tvar line = decodeURI(text[textPointer].substring(1));\n\t\t\t\t} catch (ex) {\n\t\t\t\t\tthrow new Error(\"Illegal escape in patch_fromText: \" + line);\n\t\t\t\t}\n\t\t\t\tif (sign == \"-\") patch.diffs.push(new diff_match_patch.Diff(DIFF_DELETE, line));\n\t\t\t\telse if (sign == \"+\") patch.diffs.push(new diff_match_patch.Diff(DIFF_INSERT, line));\n\t\t\t\telse if (sign == \" \") patch.diffs.push(new diff_match_patch.Diff(DIFF_EQUAL, line));\n\t\t\t\telse if (sign == \"@\") break;\n\t\t\t\telse if (sign === \"\") {} else throw new Error(\"Invalid patch mode \\\"\" + sign + \"\\\" in: \" + line);\n\t\t\t\ttextPointer++;\n\t\t\t}\n\t\t}\n\t\treturn patches;\n\t};\n\t/**\n\t* Class representing one patch operation.\n\t* @constructor\n\t*/\n\tdiff_match_patch.patch_obj = function() {\n\t\t/** @type {!Array.<!diff_match_patch.Diff>} */\n\t\tthis.diffs = [];\n\t\t/** @type {?number} */\n\t\tthis.start1 = null;\n\t\t/** @type {?number} */\n\t\tthis.start2 = null;\n\t\t/** @type {number} */\n\t\tthis.length1 = 0;\n\t\t/** @type {number} */\n\t\tthis.length2 = 0;\n\t};\n\t/**\n\t* Emulate GNU diff's format.\n\t* Header: @@ -382,8 +481,9 @@\n\t* Indices are printed as 1-based, not 0-based.\n\t* @return {string} The GNU diff string.\n\t*/\n\tdiff_match_patch.patch_obj.prototype.toString = function() {\n\t\tvar coords1, coords2;\n\t\tif (this.length1 === 0) coords1 = this.start1 + \",0\";\n\t\telse if (this.length1 == 1) coords1 = this.start1 + 1;\n\t\telse coords1 = this.start1 + 1 + \",\" + this.length1;\n\t\tif (this.length2 === 0) coords2 = this.start2 + \",0\";\n\t\telse if (this.length2 == 1) coords2 = this.start2 + 1;\n\t\telse coords2 = this.start2 + 1 + \",\" + this.length2;\n\t\tvar text = [\"@@ -\" + coords1 + \" +\" + coords2 + \" @@\\n\"];\n\t\tvar op;\n\t\tfor (var x = 0; x < this.diffs.length; x++) {\n\t\t\tswitch (this.diffs[x][0]) {\n\t\t\t\tcase DIFF_INSERT:\n\t\t\t\t\top = \"+\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase DIFF_DELETE:\n\t\t\t\t\top = \"-\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase DIFF_EQUAL: op = \" \";\n\t\t\t}\n\t\t\ttext[x + 1] = op + encodeURI(this.diffs[x][1]) + \"\\n\";\n\t\t}\n\t\treturn text.join(\"\").replace(/%20/g, \" \");\n\t};\n\tmodule.exports = diff_match_patch;\n\tmodule.exports[\"diff_match_patch\"] = diff_match_patch;\n\tmodule.exports[\"DIFF_DELETE\"] = DIFF_DELETE;\n\tmodule.exports[\"DIFF_INSERT\"] = DIFF_INSERT;\n\tmodule.exports[\"DIFF_EQUAL\"] = DIFF_EQUAL;\n})))(), 1);\nfunction LCS(buffer1, buffer2) {\n\tlet equivalenceClasses = Object.create(null);\n\tfor (let j = 0; j < buffer2.length; j++) {\n\t\tconst item = buffer2[j];\n\t\tif (equivalenceClasses[item]) equivalenceClasses[item].push(j);\n\t\telse equivalenceClasses[item] = [j];\n\t}\n\tlet candidates = [{\n\t\tbuffer1index: -1,\n\t\tbuffer2index: -1,\n\t\tchain: null\n\t}];\n\tfor (let i = 0; i < buffer1.length; i++) {\n\t\tconst buffer2indices = equivalenceClasses[buffer1[i]] || [];\n\t\tlet r = 0;\n\t\tlet c = candidates[0];\n\t\tfor (const j of buffer2indices) {\n\t\t\tlet s;\n\t\t\tfor (s = r; s < candidates.length; s++) if (candidates[s].buffer2index < j && (s === candidates.length - 1 || candidates[s + 1].buffer2index > j)) break;\n\t\t\tif (s < candidates.length) {\n\t\t\t\tconst newCandidate = {\n\t\t\t\t\tbuffer1index: i,\n\t\t\t\t\tbuffer2index: j,\n\t\t\t\t\tchain: candidates[s]\n\t\t\t\t};\n\t\t\t\tif (r === candidates.length) candidates.push(c);\n\t\t\t\telse candidates[r] = c;\n\t\t\t\tr = s + 1;\n\t\t\t\tc = newCandidate;\n\t\t\t\tif (r === candidates.length) break;\n\t\t\t}\n\t\t}\n\t\tcandidates[r] = c;\n\t}\n\treturn candidates[candidates.length - 1];\n}\nfunction diffIndices(buffer1, buffer2) {\n\tconst lcs = LCS(buffer1, buffer2);\n\tlet result = [];\n\tlet tail1 = buffer1.length;\n\tlet tail2 = buffer2.length;\n\tfor (let candidate = lcs; candidate !== null; candidate = candidate.chain) {\n\t\tconst mismatchLength1 = tail1 - candidate.buffer1index - 1;\n\t\tconst mismatchLength2 = tail2 - candidate.buffer2index - 1;\n\t\ttail1 = candidate.buffer1index;\n\t\ttail2 = candidate.buffer2index;\n\t\tif (mismatchLength1 || mismatchLength2) result.push({\n\t\t\tbuffer1: [tail1 + 1, mismatchLength1],\n\t\t\tbuffer1Content: buffer1.slice(tail1 + 1, tail1 + 1 + mismatchLength1),\n\t\t\tbuffer2: [tail2 + 1, mismatchLength2],\n\t\t\tbuffer2Content: buffer2.slice(tail2 + 1, tail2 + 1 + mismatchLength2)\n\t\t});\n\t}\n\tresult.reverse();\n\treturn result;\n}\nfunction diff3MergeRegions(a, o, b) {\n\tlet hunks = [];\n\tfunction addHunk(h, ab) {\n\t\thunks.push({\n\t\t\tab,\n\t\t\toStart: h.buffer1[0],\n\t\t\toLength: h.buffer1[1],\n\t\t\tabStart: h.buffer2[0],\n\t\t\tabLength: h.buffer2[1]\n\t\t});\n\t}\n\tdiffIndices(o, a).forEach((item) => addHunk(item, \"a\"));\n\tdiffIndices(o, b).forEach((item) => addHunk(item, \"b\"));\n\thunks.sort((x, y) => x.oStart - y.oStart);\n\tlet results = [];\n\tlet currOffset = 0;\n\tfunction advanceTo(endOffset) {\n\t\tif (endOffset > currOffset) {\n\t\t\tresults.push({\n\t\t\t\tstable: true,\n\t\t\t\tbuffer: \"o\",\n\t\t\t\tbufferStart: currOffset,\n\t\t\t\tbufferLength: endOffset - currOffset,\n\t\t\t\tbufferContent: o.slice(currOffset, endOffset)\n\t\t\t});\n\t\t\tcurrOffset = endOffset;\n\t\t}\n\t}\n\twhile (hunks.length) {\n\t\tlet hunk = hunks.shift();\n\t\tlet regionStart = hunk.oStart;\n\t\tlet regionEnd = hunk.oStart + hunk.oLength;\n\t\tlet regionHunks = [hunk];\n\t\tadvanceTo(regionStart);\n\t\twhile (hunks.length) {\n\t\t\tconst nextHunk = hunks[0];\n\t\t\tconst nextHunkStart = nextHunk.oStart;\n\t\t\tif (nextHunkStart > regionEnd) break;\n\t\t\tregionEnd = Math.max(regionEnd, nextHunkStart + nextHunk.oLength);\n\t\t\tregionHunks.push(hunks.shift());\n\t\t}\n\t\tif (regionHunks.length === 1) {\n\t\t\tif (hunk.abLength > 0) {\n\t\t\t\tconst buffer = hunk.ab === \"a\" ? a : b;\n\t\t\t\tresults.push({\n\t\t\t\t\tstable: true,\n\t\t\t\t\tbuffer: hunk.ab,\n\t\t\t\t\tbufferStart: hunk.abStart,\n\t\t\t\t\tbufferLength: hunk.abLength,\n\t\t\t\t\tbufferContent: buffer.slice(hunk.abStart, hunk.abStart + hunk.abLength)\n\t\t\t\t});\n\t\t\t}\n\t\t} else {\n\t\t\tlet bounds = {\n\t\t\t\ta: [\n\t\t\t\t\ta.length,\n\t\t\t\t\t-1,\n\t\t\t\t\to.length,\n\t\t\t\t\t-1\n\t\t\t\t],\n\t\t\t\tb: [\n\t\t\t\t\tb.length,\n\t\t\t\t\t-1,\n\t\t\t\t\to.length,\n\t\t\t\t\t-1\n\t\t\t\t]\n\t\t\t};\n\t\t\twhile (regionHunks.length) {\n\t\t\t\thunk = regionHunks.shift();\n\t\t\t\tconst oStart = hunk.oStart;\n\t\t\t\tconst oEnd = oStart + hunk.oLength;\n\t\t\t\tconst abStart = hunk.abStart;\n\t\t\t\tconst abEnd = abStart + hunk.abLength;\n\t\t\t\tlet b2 = bounds[hunk.ab];\n\t\t\t\tb2[0] = Math.min(abStart, b2[0]);\n\t\t\t\tb2[1] = Math.max(abEnd, b2[1]);\n\t\t\t\tb2[2] = Math.min(oStart, b2[2]);\n\t\t\t\tb2[3] = Math.max(oEnd, b2[3]);\n\t\t\t}\n\t\t\tconst aStart = bounds.a[0] + (regionStart - bounds.a[2]);\n\t\t\tconst aEnd = bounds.a[1] + (regionEnd - bounds.a[3]);\n\t\t\tconst bStart = bounds.b[0] + (regionStart - bounds.b[2]);\n\t\t\tconst bEnd = bounds.b[1] + (regionEnd - bounds.b[3]);\n\t\t\tlet result = {\n\t\t\t\tstable: false,\n\t\t\t\taStart,\n\t\t\t\taLength: aEnd - aStart,\n\t\t\t\taContent: a.slice(aStart, aEnd),\n\t\t\t\toStart: regionStart,\n\t\t\t\toLength: regionEnd - regionStart,\n\t\t\t\toContent: o.slice(regionStart, regionEnd),\n\t\t\t\tbStart,\n\t\t\t\tbLength: bEnd - bStart,\n\t\t\t\tbContent: b.slice(bStart, bEnd)\n\t\t\t};\n\t\t\tresults.push(result);\n\t\t}\n\t\tcurrOffset = regionEnd;\n\t}\n\tadvanceTo(o.length);\n\treturn results;\n}\nfunction diff3Merge(a, o, b, options) {\n\toptions = Object.assign({\n\t\texcludeFalseConflicts: true,\n\t\tstringSeparator: /\\s+/\n\t}, options);\n\tif (typeof a === \"string\") a = a.split(options.stringSeparator);\n\tif (typeof o === \"string\") o = o.split(options.stringSeparator);\n\tif (typeof b === \"string\") b = b.split(options.stringSeparator);\n\tlet results = [];\n\tconst regions = diff3MergeRegions(a, o, b);\n\tlet okBuffer = [];\n\tfunction flushOk() {\n\t\tif (okBuffer.length) results.push({ ok: okBuffer });\n\t\tokBuffer = [];\n\t}\n\tfunction isFalseConflict(a2, b2) {\n\t\tif (a2.length !== b2.length) return false;\n\t\tfor (let i = 0; i < a2.length; i++) if (a2[i] !== b2[i]) return false;\n\t\treturn true;\n\t}\n\tregions.forEach((region) => {\n\t\tif (region.stable) okBuffer.push(...region.bufferContent);\n\t\telse if (options.excludeFalseConflicts && isFalseConflict(region.aContent, region.bContent)) okBuffer.push(...region.aContent);\n\t\telse {\n\t\t\tflushOk();\n\t\t\tresults.push({ conflict: {\n\t\t\t\ta: region.aContent,\n\t\t\t\taIndex: region.aStart,\n\t\t\t\to: region.oContent,\n\t\t\t\toIndex: region.oStart,\n\t\t\t\tb: region.bContent,\n\t\t\t\tbIndex: region.bStart\n\t\t\t} });\n\t\t}\n\t});\n\tflushOk();\n\treturn results;\n}\n// ../core/dist/index.js\nconst PACKET_TYPES = [\n\t\"disconnect\",\n\t\"connect\",\n\t\"heartbeat\",\n\t\"message\",\n\t\"json\",\n\t\"event\",\n\t\"ack\",\n\t\"error\",\n\t\"noop\"\n];\nfunction encodePacket(packet) {\n\tconst type = PACKET_TYPES.indexOf(packet.type ?? \"noop\");\n\tconst id = packet.id ?? \"\";\n\tlet data;\n\tswitch (packet.type) {\n\t\tcase \"event\":\n\t\t\tdata = JSON.stringify({\n\t\t\t\tname: packet.name,\n\t\t\t\targs: packet.args ?? []\n\t\t\t});\n\t\t\tbreak;\n\t\tcase \"ack\":\n\t\t\tdata = `${packet.ackId ?? \"\"}${packet.args?.length ? `+${JSON.stringify(packet.args)}` : \"\"}`;\n\t\t\tbreak;\n\t\tcase \"message\":\n\t\t\tdata = String(packet.data ?? \"\");\n\t\t\tbreak;\n\t\tcase \"json\": data = JSON.stringify(packet.data);\n\t}\n\tconst fields = [\n\t\tString(type),\n\t\t`${id}${packet.ack === \"data\" ? \"+\" : \"\"}`,\n\t\tpacket.endpoint ?? \"\"\n\t];\n\tif (data !== void 0) fields.push(data);\n\treturn fields.join(\":\");\n}\nfunction decodePacket(value) {\n\tconst match = value.match(/([^:]+):([0-9]+)?(\\+)?:([^:]+)?:?([\\s\\S]*)?/);\n\tif (!match) return {};\n\tconst packet = {\n\t\ttype: PACKET_TYPES[Number(match[1])],\n\t\tendpoint: match[4] || \"\"\n\t};\n\tif (match[2]) {\n\t\tpacket.id = match[2];\n\t\tpacket.ack = match[3] ? \"data\" : true;\n\t}\n\tconst data = match[5] || \"\";\n\tswitch (packet.type) {\n\t\tcase \"event\": {\n\t\t\tconst event = JSON.parse(data);\n\t\t\tpacket.name = event.name;\n\t\t\tpacket.args = event.args ?? [];\n\t\t\tbreak;\n\t\t}\n\t\tcase \"ack\": {\n\t\t\tconst ack = data.match(/^([0-9]+)(\\+)?([\\s\\S]*)/);\n\t\t\tif (ack) {\n\t\t\t\tpacket.ackId = ack[1];\n\t\t\t\tpacket.args = ack[3] ? JSON.parse(ack[3]) : [];\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tcase \"error\": {\n\t\t\tconst [reason, advice] = data.split(\"+\");\n\t\t\tpacket.reason = [\n\t\t\t\t\"transport not supported\",\n\t\t\t\t\"client not handshaken\",\n\t\t\t\t\"unauthorized\"\n\t\t\t][Number(reason)] ?? \"\";\n\t\t\tpacket.advice = [\"reconnect\"][Number(advice)] ?? \"\";\n\t\t\tbreak;\n\t\t}\n\t\tcase \"json\":\n\t\t\tpacket.data = JSON.parse(data);\n\t\t\tbreak;\n\t\tcase \"message\": packet.data = data;\n\t}\n\treturn packet;\n}\nfunction decodePayload(value) {\n\tif (!value.startsWith(\"�\")) return [decodePacket(value)];\n\tconst packets = [];\n\tlet offset = 1;\n\twhile (offset < value.length) {\n\t\tconst separator = value.indexOf(\"�\", offset);\n\t\tif (separator === -1) break;\n\t\tconst length = Number(value.slice(offset, separator));\n\t\tconst start = separator + 1;\n\t\tpackets.push(decodePacket(value.slice(start, start + length)));\n\t\toffset = start + length + 1;\n\t}\n\treturn packets;\n}\nfunction mergeCookies(current, additions) {\n\tconst cookies = /* @__PURE__ */ new Map();\n\tfor (const value of [current, ...additions.map((cookie) => cookie.split(\";\", 1)[0])]) for (const part of value.split(\";\")) {\n\t\tconst separator = part.indexOf(\"=\");\n\t\tif (separator === -1) continue;\n\t\tcookies.set(part.slice(0, separator).trim(), part.slice(separator + 1).trim());\n\t}\n\treturn [...cookies].map(([name, value]) => `${name}=${value}`).join(\"; \");\n}\nvar OverleafRealtimeSocket = class {\n\toptions;\n\tevents = new EventEmitter();\n\tendpoint;\n\torigin;\n\tcookie;\n\tsocket;\n\tconnected = false;\n\tprojectJoined = false;\n\texplicitlyDisconnected = false;\n\treconnectEnabled;\n\treconnectAttempts = 0;\n\treconnectTimer;\n\tinactivityTimer;\n\tconnectionAbort;\n\tcloseTimeoutMs = 6e4;\n\tacknowledgementId = 0;\n\tacknowledgements = /* @__PURE__ */ new Map();\n\tio = { reconnect: (enabled) => {\n\t\tthis.reconnectEnabled = enabled;\n\t\tif (!enabled && this.reconnectTimer) {\n\t\t\tclearTimeout(this.reconnectTimer);\n\t\t\tthis.reconnectTimer = void 0;\n\t\t}\n\t} };\n\tconstructor(url, options) {\n\t\tthis.options = options;\n\t\tthis.endpoint = new URL(url);\n\t\tthis.origin = options.origin;\n\t\tthis.cookie = options.cookie;\n\t\tthis.reconnectEnabled = options.reconnect ?? true;\n\t\tthis.connect();\n\t}\n\ton(event, handler) {\n\t\tthis.events.on(event, handler);\n\t\treturn this;\n\t}\n\tonce(event, handler) {\n\t\tthis.events.once(event, handler);\n\t\treturn this;\n\t}\n\tremoveListener(event, handler) {\n\t\tthis.events.removeListener(event, handler);\n\t\treturn this;\n\t}\n\tremoveAllListeners(event) {\n\t\tthis.events.removeAllListeners(event);\n\t\treturn this;\n\t}\n\temit(event, ...args) {\n\t\tconst callback = typeof args.at(-1) === \"function\" ? args.pop() : void 0;\n\t\tconst id = callback ? String(++this.acknowledgementId) : void 0;\n\t\tif (id && callback) this.acknowledgements.set(id, callback);\n\t\tconst packet = encodePacket({\n\t\t\ttype: \"event\",\n\t\t\tid,\n\t\t\tack: callback ? \"data\" : void 0,\n\t\t\tname: event,\n\t\t\targs\n\t\t});\n\t\tif (!this.sendApplicationEvent(packet) && callback) {\n\t\t\tif (id) this.acknowledgements.delete(id);\n\t\t\tqueueMicrotask(() => callback(/* @__PURE__ */ new Error(\"The Overleaf project session is not connected.\")));\n\t\t}\n\t\treturn this;\n\t}\n\tmarkProjectJoined() {\n\t\tthis.projectJoined = true;\n\t}\n\tdisconnect() {\n\t\tthis.explicitlyDisconnected = true;\n\t\tthis.reconnectEnabled = false;\n\t\tif (this.reconnectTimer) clearTimeout(this.reconnectTimer);\n\t\tif (this.connected) this.send(encodePacket({ type: \"disconnect\" }));\n\t\tthis.closeSocket(\"booted\");\n\t\treturn this;\n\t}\n\tasync connect() {\n\t\tif (this.explicitlyDisconnected) return;\n\t\tconst controller = new AbortController();\n\t\tthis.connectionAbort?.abort();\n\t\tthis.connectionAbort = controller;\n\t\ttry {\n\t\t\tthis.projectJoined = false;\n\t\t\tconst handshakeUrl = new URL(\"/socket.io/1/\", this.endpoint.origin);\n\t\t\tfor (const [name, value] of this.endpoint.searchParams) handshakeUrl.searchParams.set(name, value);\n\t\t\thandshakeUrl.searchParams.set(\"t\", String(Date.now()));\n\t\t\tconst response = await (this.options.fetch ?? fetch)(handshakeUrl, {\n\t\t\t\theaders: {\n\t\t\t\t\torigin: this.origin,\n\t\t\t\t\tcookie: this.cookie\n\t\t\t\t},\n\t\t\t\tredirect: \"manual\",\n\t\t\t\tsignal: AbortSignal.any([controller.signal, AbortSignal.timeout(15e3)])\n\t\t\t});\n\t\t\tif (!response.ok) throw new Error(`Socket.IO handshake failed: HTTP ${response.status} ${await response.text()}`);\n\t\t\tconst setCookies = response.headers.getSetCookie?.() ?? [];\n\t\t\tthis.cookie = mergeCookies(this.cookie, setCookies);\n\t\t\tconst [sessionId, heartbeatTimeout, closeTimeout, transports] = (await response.text()).split(\":\");\n\t\t\tif (!sessionId || !transports?.split(\",\").includes(\"websocket\")) throw new Error(\"Overleaf did not offer a Socket.IO WebSocket transport.\");\n\t\t\tthis.closeTimeoutMs = Math.max(Number(heartbeatTimeout), Number(closeTimeout), 10) * 1e3;\n\t\t\tconst websocketUrl = new URL(`/socket.io/1/websocket/${sessionId}`, this.endpoint.origin);\n\t\t\twebsocketUrl.protocol = websocketUrl.protocol === \"https:\" ? \"wss:\" : \"ws:\";\n\t\t\twebsocketUrl.search = this.endpoint.search;\n\t\t\tif (controller.signal.aborted) return;\n\t\t\tconst socket = new WebSocket(websocketUrl, { headers: {\n\t\t\t\torigin: this.origin,\n\t\t\t\tcookie: this.cookie\n\t\t\t} });\n\t\t\tthis.socket = socket;\n\t\t\tsocket.addEventListener(\"open\", () => {\n\t\t\t\tif (this.socket !== socket) return;\n\t\t\t\tthis.resetInactivityTimer();\n\t\t\t\tthis.events.emit(\"connecting\", \"websocket\");\n\t\t\t});\n\t\t\tsocket.addEventListener(\"message\", (event) => {\n\t\t\t\tif (this.socket === socket) this.receive(event.data, socket);\n\t\t\t});\n\t\t\tsocket.addEventListener(\"error\", (error) => {\n\t\t\t\tif (this.socket === socket) this.events.emit(\"error\", error);\n\t\t\t});\n\t\t\tsocket.addEventListener(\"close\", (event) => {\n\t\t\t\tif (this.socket === socket) this.handleClose(event);\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tif (controller.signal.aborted) return;\n\t\t\tthis.events.emit(\"connect_failed\", error);\n\t\t\tthis.events.emit(\"error\", error);\n\t\t\tthis.scheduleReconnect();\n\t\t}\n\t}\n\tasync receive(data, socket) {\n\t\tthis.resetInactivityTimer();\n\t\tconst value = typeof data === \"string\" ? data : data instanceof Blob ? await data.text() : Buffer.from(data).toString(\"utf8\");\n\t\tif (this.socket !== socket) return;\n\t\tfor (const packet of decodePayload(value)) this.handlePacket(packet);\n\t}\n\thandlePacket(packet) {\n\t\tswitch (packet.type) {\n\t\t\tcase \"connect\": {\n\t\t\t\tconst wasReconnecting = this.reconnectAttempts > 0;\n\t\t\t\tthis.connected = true;\n\t\t\t\tthis.events.emit(\"connect\");\n\t\t\t\tif (wasReconnecting) {\n\t\t\t\t\tthis.events.emit(\"reconnect\", \"websocket\", this.reconnectAttempts);\n\t\t\t\t\tthis.reconnectAttempts = 0;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"heartbeat\":\n\t\t\t\tthis.send(encodePacket({ type: \"heartbeat\" }));\n\t\t\t\tbreak;\n\t\t\tcase \"event\": {\n\t\t\t\tconst args = [...packet.args ?? []];\n\t\t\t\tif (packet.ack === \"data\" && packet.id) args.push((...acknowledgement) => {\n\t\t\t\t\tthis.send(encodePacket({\n\t\t\t\t\t\ttype: \"ack\",\n\t\t\t\t\t\tackId: packet.id,\n\t\t\t\t\t\targs: acknowledgement\n\t\t\t\t\t}));\n\t\t\t\t});\n\t\t\t\tthis.events.emit(packet.name ?? \"\", ...args);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"ack\": {\n\t\t\t\tconst callback = packet.ackId && this.acknowledgements.get(packet.ackId);\n\t\t\t\tif (callback && packet.ackId) {\n\t\t\t\t\tthis.acknowledgements.delete(packet.ackId);\n\t\t\t\t\tcallback(...packet.args ?? []);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"disconnect\":\n\t\t\t\tthis.closeSocket(\"booted\");\n\t\t\t\tbreak;\n\t\t\tcase \"error\":\n\t\t\t\tthis.events.emit(\"error\", packet.reason || \"Socket.IO protocol error\");\n\t\t\t\tif (packet.advice === \"reconnect\") this.closeSocket(\"server error\");\n\t\t\t\tbreak;\n\t\t\tcase \"message\":\n\t\t\tcase \"json\": this.events.emit(\"message\", packet.data);\n\t\t}\n\t}\n\tsend(packet) {\n\t\tif (this.connected && this.socket?.readyState === WebSocket.OPEN) this.socket.send(packet);\n\t}\n\tsendApplicationEvent(packet) {\n\t\tif (!this.connected || !this.projectJoined || this.socket?.readyState !== WebSocket.OPEN) return false;\n\t\tthis.socket.send(packet);\n\t\treturn true;\n\t}\n\tresetInactivityTimer() {\n\t\tif (this.inactivityTimer) clearTimeout(this.inactivityTimer);\n\t\tthis.inactivityTimer = setTimeout(() => this.closeSocket(\"timeout\"), this.closeTimeoutMs);\n\t}\n\thandleClose(event) {\n\t\tconst wasConnected = this.connected;\n\t\tthis.socket = void 0;\n\t\tthis.connected = false;\n\t\tthis.projectJoined = false;\n\t\tif (this.inactivityTimer) clearTimeout(this.inactivityTimer);\n\t\tif (wasConnected) {\n\t\t\tconst detail = event.reason ? `: ${event.reason}` : \"\";\n\t\t\tconst reason = `transport close (code ${event.code})${detail}`;\n\t\t\tthis.failAcknowledgements(reason);\n\t\t\tthis.events.emit(\"disconnect\", reason);\n\t\t}\n\t\tthis.scheduleReconnect();\n\t}\n\tcloseSocket(reason) {\n\t\tthis.connectionAbort?.abort();\n\t\tthis.connectionAbort = void 0;\n\t\tconst wasConnected = this.connected;\n\t\tthis.connected = false;\n\t\tthis.projectJoined = false;\n\t\tif (this.inactivityTimer) clearTimeout(this.inactivityTimer);\n\t\tconst socket = this.socket;\n\t\tthis.socket = void 0;\n\t\tsocket?.close();\n\t\tif (wasConnected) {\n\t\t\tthis.failAcknowledgements(reason);\n\t\t\tthis.events.emit(\"disconnect\", reason);\n\t\t}\n\t\tif (!this.explicitlyDisconnected) this.scheduleReconnect();\n\t}\n\tfailAcknowledgements(reason) {\n\t\tconst error = /* @__PURE__ */ new Error(`Overleaf realtime connection closed: ${reason}`);\n\t\tfor (const callback of this.acknowledgements.values()) callback(error);\n\t\tthis.acknowledgements.clear();\n\t}\n\tscheduleReconnect() {\n\t\tif (!this.reconnectEnabled || this.explicitlyDisconnected || this.reconnectTimer) return;\n\t\tconst maxAttempts = this.options.maxReconnectionAttempts ?? Infinity;\n\t\tif (this.reconnectAttempts >= maxAttempts) {\n\t\t\tthis.events.emit(\"reconnect_failed\");\n\t\t\treturn;\n\t\t}\n\t\tthis.reconnectAttempts += 1;\n\t\tconst initial = this.options.reconnectionDelay ?? 1e3;\n\t\tconst limit = this.options.reconnectionLimit ?? 16e3;\n\t\tconst delay = Math.min(initial * 2 ** (this.reconnectAttempts - 1), limit);\n\t\tthis.events.emit(\"reconnecting\", delay, this.reconnectAttempts);\n\t\tthis.reconnectTimer = setTimeout(() => {\n\t\t\tthis.reconnectTimer = void 0;\n\t\t\tthis.connect();\n\t\t}, delay);\n\t}\n};\nlet sink;\nfunction setLogSink(nextSink) {\n\tsink = nextSink;\n}\nfunction write(level, args) {\n\tif (sink !== void 0) {\n\t\tsink(level, args);\n\t\treturn;\n\t}\n\t(level === \"error\" ? console.error : level === \"warn\" ? console.warn : console.log)(...args);\n}\nfunction log(...args) {\n\twrite(\"info\", args);\n}\nfunction error(...args) {\n\twrite(\"error\", args);\n}\nfunction retryAfterMilliseconds(response, now) {\n\tconst retryAfter = response.headers.get(\"retry-after\");\n\tif (retryAfter) {\n\t\tconst seconds = Number(retryAfter);\n\t\tif (Number.isFinite(seconds)) return Math.max(1e3, seconds * 1e3);\n\t\tconst retryAt = Date.parse(retryAfter);\n\t\tif (Number.isFinite(retryAt)) return Math.max(1e3, retryAt - now);\n\t}\n\treturn 5e3;\n}\nvar HttpRequestScheduler = class {\n\toptions;\n\tchain = Promise.resolve();\n\tnextRequestAt = 0;\n\thistoryNextRequestAt = 0;\n\trateLimitedUntil = 0;\n\tminimumIntervalMs;\n\thistoryIntervalMs;\n\tfetchImplementation;\n\tnow;\n\twait;\n\tconstructor(options = {}) {\n\t\tthis.options = options;\n\t\tthis.minimumIntervalMs = options.minimumIntervalMs ?? 300;\n\t\tthis.historyIntervalMs = options.historyIntervalMs ?? 3e3;\n\t\tthis.fetchImplementation = options.fetch ?? fetch;\n\t\tthis.now = options.now ?? Date.now;\n\t\tthis.wait = options.wait ?? ((milliseconds) => new Promise((resolveWait) => setTimeout(resolveWait, milliseconds)));\n\t}\n\tfetch(input, init, timeoutMs = this.options.requestTimeoutMs ?? 6e4) {\n\t\tconst url = input instanceof Request ? input.url : String(input);\n\t\tconst history = url.includes(\"/updates?\") || url.includes(\"/filetree/diff?\") || url.includes(\"/diff?\");\n\t\treturn this.enqueue(async () => {\n\t\t\tconst now = this.now();\n\t\t\tconst readyAt = Math.max(this.nextRequestAt, this.rateLimitedUntil, history ? this.historyNextRequestAt : 0);\n\t\t\tif (readyAt > now) await this.wait(readyAt - now);\n\t\t\tconst requestAt = this.now();\n\t\t\tthis.nextRequestAt = requestAt + this.minimumIntervalMs;\n\t\t\tif (history) this.historyNextRequestAt = requestAt + this.historyIntervalMs;\n\t\t\tconst signals = [\n\t\t\t\tAbortSignal.timeout(timeoutMs),\n\t\t\t\tinit?.signal,\n\t\t\t\tinput instanceof Request ? input.signal : void 0\n\t\t\t].filter((signal) => Boolean(signal));\n\t\t\tlet response;\n\t\t\ttry {\n\t\t\t\tresponse = await this.fetchImplementation(input, {\n\t\t\t\t\t...init,\n\t\t\t\t\tsignal: AbortSignal.any(signals)\n\t\t\t\t});\n\t\t\t} catch (error$1) {\n\t\t\t\tconst destination = new URL(url);\n\t\t\t\terror(\"HTTP request failed\", {\n\t\t\t\t\tmethod: init?.method ?? (input instanceof Request ? input.method : \"GET\"),\n\t\t\t\t\turl: `${destination.origin}${destination.pathname}`,\n\t\t\t\t\terror: error$1\n\t\t\t\t});\n\t\t\t\tthrow error$1;\n\t\t\t}\n\t\t\tif (response.status === 429) {\n\t\t\t\tthis.rateLimitedUntil = Math.max(this.rateLimitedUntil, this.now() + retryAfterMilliseconds(response, this.now()));\n\t\t\t\tthis.options.onRateLimit?.(this.rateLimitedUntil);\n\t\t\t\tlog(`HTTP request scheduler entered rate-limit cooldown until ${new Date(this.rateLimitedUntil).toISOString()}.`);\n\t\t\t}\n\t\t\treturn response;\n\t\t});\n\t}\n\tenqueue(operation) {\n\t\tconst result = this.chain.then(operation);\n\t\tthis.chain = result.then(() => void 0, () => void 0);\n\t\treturn result;\n\t}\n};\nconst sharedHttpRequestScheduler = new HttpRequestScheduler();\n/** Extract set-cookie headers from an undici/Response object. */\nfunction getSetCookie(res) {\n\tif (typeof res.headers?.getSetCookie === \"function\") return res.headers.getSetCookie();\n\tconst raw = res.headers?.raw?.()?.[\"set-cookie\"];\n\tif (raw) return raw;\n\treturn [];\n}\nvar BaseAPI = class {\n\tscheduler;\n\turl;\n\tidentity;\n\tretryAfterMs(response, attempt) {\n\t\tconst retryAfter = response.headers?.get?.(\"retry-after\");\n\t\tif (retryAfter !== void 0 && retryAfter !== null) {\n\t\t\tconst seconds = Number(retryAfter);\n\t\t\tif (Number.isFinite(seconds)) return Math.max(1e3, seconds * 1e3);\n\t\t\tconst retryAt = Date.parse(retryAfter);\n\t\t\tif (Number.isFinite(retryAt)) return Math.max(1e3, retryAt - Date.now());\n\t\t}\n\t\treturn 5e3 * Math.pow(2, attempt);\n\t}\n\tconstructor(url, scheduler = sharedHttpRequestScheduler) {\n\t\tthis.scheduler = scheduler;\n\t\tthis.url = url;\n\t}\n\tasync getCsrfToken() {\n\t\tconst res = await this.scheduler.fetch(this.url + \"login\", {\n\t\t\tmethod: \"GET\",\n\t\t\tredirect: \"manual\"\n\t\t});\n\t\tconst match = (await res.text()).match(/<input.*name=\"_csrf\".*value=\"([^\"]*)\">/);\n\t\tif (!match) throw new Error(\"Failed to get CSRF token.\");\n\t\telse return {\n\t\t\tcsrfToken: match[1],\n\t\t\tcookies: getSetCookie(res)[0]?.split(\";\")[0] ?? \"\"\n\t\t};\n\t}\n\tasync getUserId(cookies) {\n\t\tconst body = await (await this.scheduler.fetch(this.url + \"project\", {\n\t\t\tmethod: \"GET\",\n\t\t\tredirect: \"manual\",\n\t\t\theaders: {\n\t\t\t\tConnection: \"keep-alive\",\n\t\t\t\tCookie: cookies\n\t\t\t}\n\t\t})).text();\n\t\tconst userIDMatch = body.match(/<meta\\s+name=\"ol-user_id\"\\s+content=\"([^\"]*)\">/);\n\t\tconst userEmailMatch = body.match(/<meta\\s+name=\"ol-usersEmail\"\\s+content=\"([^\"]*)\">/);\n\t\tconst csrfTokenMatch = body.match(/<meta\\s+name=\"ol-csrfToken\"\\s+content=\"([^\"]*)\">/);\n\t\tif (userIDMatch !== null && csrfTokenMatch !== null) {\n\t\t\tconst userId = userIDMatch[1];\n\t\t\tconst csrfToken = csrfTokenMatch[1];\n\t\t\treturn {\n\t\t\t\tuserId,\n\t\t\t\tuserEmail: userEmailMatch ? userEmailMatch[1] : \"\",\n\t\t\t\tcsrfToken\n\t\t\t};\n\t\t} else return;\n\t}\n\t_initSocketV0(identity, query) {\n\t\treturn new OverleafRealtimeSocket(new URL(this.url).origin + (query ?? \"\"), {\n\t\t\torigin: new URL(this.url).origin,\n\t\t\tcookie: identity.cookies,\n\t\t\treconnect: true,\n\t\t\treconnectionDelay: 1e3,\n\t\t\treconnectionLimit: 16e3,\n\t\t\tmaxReconnectionAttempts: 10,\n\t\t\tfetch: (input, init) => this.scheduler.fetch(input, init)\n\t\t});\n\t}\n\tasync passportLogin(email, password) {\n\t\tconst identity = await this.getCsrfToken();\n\t\tconst res = await this.scheduler.fetch(this.url + \"login\", {\n\t\t\tmethod: \"POST\",\n\t\t\tredirect: \"manual\",\n\t\t\theaders: {\n\t\t\t\tAccept: \"*/*\",\n\t\t\t\t\"Accept-Encoding\": \"gzip, deflate, br\",\n\t\t\t\tConnection: \"keep-alive\",\n\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t\tCookie: identity.cookies,\n\t\t\t\t\"X-Csrf-Token\": identity.csrfToken\n\t\t\t},\n\t\t\tbody: JSON.stringify({\n\t\t\t\t_csrf: identity.csrfToken,\n\t\t\t\temail,\n\t\t\t\tpassword\n\t\t\t})\n\t\t});\n\t\tif (res.status === 302) {\n\t\t\tconst redirect = (await res.text()).match(/Found. Redirecting to (.*)/)[1];\n\t\t\tif (redirect === \"/project\") {\n\t\t\t\tconst cookies = getSetCookie(res)[0] ?? \"\";\n\t\t\t\treturn await this.cookiesLogin(cookies);\n\t\t\t} else return {\n\t\t\t\ttype: \"error\",\n\t\t\t\tmessage: `Redirecting to /${redirect}`\n\t\t\t};\n\t\t} else if (res.status === 200) return {\n\t\t\ttype: \"error\",\n\t\t\tmessage: (await res.json()).message.message\n\t\t};\n\t\telse if (res.status === 401) return {\n\t\t\ttype: \"error\",\n\t\t\tmessage: (await res.json()).message.text\n\t\t};\n\t\telse return {\n\t\t\ttype: \"error\",\n\t\t\tmessage: `${res.status}: ` + await res.text()\n\t\t};\n\t}\n\tasync cookiesLogin(cookies) {\n\t\tconst res = await this.getUserId(cookies);\n\t\tif (res) {\n\t\t\tconst { userId, userEmail, csrfToken } = res;\n\t\t\tconst identity = await this.updateCookies({\n\t\t\t\tcookies,\n\t\t\t\tcsrfToken\n\t\t\t});\n\t\t\treturn {\n\t\t\t\ttype: \"success\",\n\t\t\t\tuserInfo: {\n\t\t\t\t\tuserId,\n\t\t\t\t\tuserEmail\n\t\t\t\t},\n\t\t\t\tidentity\n\t\t\t};\n\t\t} else return {\n\t\t\ttype: \"error\",\n\t\t\tmessage: \"Failed to get User ID.\"\n\t\t};\n\t}\n\tasync updateCookies(identity) {\n\t\tconst cookies = getSetCookie(await this.scheduler.fetch(this.url + \"socket.io/socket.io.js\", {\n\t\t\tmethod: \"GET\",\n\t\t\tredirect: \"manual\",\n\t\t\theaders: {\n\t\t\t\tConnection: \"keep-alive\",\n\t\t\t\tCookie: identity.cookies\n\t\t\t}\n\t\t}))[0]?.split(\";\")[0];\n\t\tif (cookies) identity.cookies = `${identity.cookies}; ${cookies}`;\n\t\treturn identity;\n\t}\n\tsetIdentity(identity) {\n\t\tthis.identity = identity;\n\t\treturn this;\n\t}\n\t/**\n\t* Check if an HTTP error is transient (worth retrying).\n\t* Retries on: 5xx server errors, network errors (fetch failures), and 429 rate limiting.\n\t*/\n\tisTransientError(statusCode, errorMessage) {\n\t\tif (statusCode === void 0) return true;\n\t\tif (statusCode >= 500 || statusCode === 429) return true;\n\t\tif (errorMessage && (errorMessage.includes(\"ECONNRESET\") || errorMessage.includes(\"ETIMEDOUT\") || errorMessage.includes(\"ECONNREFUSED\") || errorMessage.includes(\"ENOTFOUND\") || errorMessage.includes(\"socket hang up\"))) return true;\n\t\treturn false;\n\t}\n\tasync request(type, route, body, callback, extraHeaders, timeoutMs) {\n\t\tif (this.identity === void 0) return Promise.reject();\n\t\tconst MAX_HTTP_RETRIES = 2;\n\t\tlet lastError = {};\n\t\tfor (let attempt = 0; attempt <= MAX_HTTP_RETRIES; attempt++) try {\n\t\t\tlet res = void 0;\n\t\t\tswitch (type) {\n\t\t\t\tcase \"GET\":\n\t\t\t\t\tres = await this.scheduler.fetch(this.url + route, {\n\t\t\t\t\t\tmethod: \"GET\",\n\t\t\t\t\t\tredirect: \"manual\",\n\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\tConnection: \"keep-alive\",\n\t\t\t\t\t\t\tCookie: this.identity.cookies,\n\t\t\t\t\t\t\t...extraHeaders\n\t\t\t\t\t\t}\n\t\t\t\t\t}, timeoutMs);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"POST\":\n\t\t\t\t\tconst content_type = body instanceof FormData ? void 0 : { \"Content-Type\": \"application/json\" };\n\t\t\t\t\tconst raw_body = body instanceof FormData ? body : JSON.stringify({\n\t\t\t\t\t\t_csrf: this.identity.csrfToken,\n\t\t\t\t\t\t...body\n\t\t\t\t\t});\n\t\t\t\t\tres = await this.scheduler.fetch(this.url + route, {\n\t\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\t\tredirect: \"manual\",\n\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\tConnection: \"keep-alive\",\n\t\t\t\t\t\t\tCookie: this.identity.cookies,\n\t\t\t\t\t\t\t...content_type,\n\t\t\t\t\t\t\t...extraHeaders\n\t\t\t\t\t\t},\n\t\t\t\t\t\tbody: raw_body\n\t\t\t\t\t}, timeoutMs);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"PUT\": break;\n\t\t\t\tcase \"DELETE\": res = await this.scheduler.fetch(this.url + route, {\n\t\t\t\t\tmethod: \"DELETE\",\n\t\t\t\t\tredirect: \"manual\",\n\t\t\t\t\theaders: {\n\t\t\t\t\t\tConnection: \"keep-alive\",\n\t\t\t\t\t\tCookie: this.identity.cookies,\n\t\t\t\t\t\t\"X-Csrf-Token\": this.identity.csrfToken,\n\t\t\t\t\t\t...extraHeaders\n\t\t\t\t\t}\n\t\t\t\t}, timeoutMs);\n\t\t\t}\n\t\t\tif (res && (res.status === 200 || res.status === 204)) {\n\t\t\t\tconst _res = res.status === 200 ? await res.text() : void 0;\n\t\t\t\treturn {\n\t\t\t\t\ttype: \"success\",\n\t\t\t\t\t...callback && callback(_res)\n\t\t\t\t};\n\t\t\t} else if (res && this.isTransientError(res.status) && attempt < MAX_HTTP_RETRIES) {\n\t\t\t\tconst delayMs = res.status === 429 ? this.retryAfterMs(res, attempt) : Math.min(1e3 * Math.pow(2, attempt), 4e3);\n\t\t\t\tlog(`HTTP ${res.status} on ${route}, retrying in ${delayMs}ms (attempt ${attempt + 1}/${MAX_HTTP_RETRIES})`);\n\t\t\t\tlastError = {\n\t\t\t\t\tstatusCode: res.status,\n\t\t\t\t\tmessage: await res.text().catch(() => \"\")\n\t\t\t\t};\n\t\t\t\tawait new Promise((r) => setTimeout(r, delayMs));\n\t\t\t\tcontinue;\n\t\t\t} else {\n\t\t\t\tconst resOrFallback = res || {\n\t\t\t\t\tstatus: \"undefined\",\n\t\t\t\t\ttext: async () => \"\"\n\t\t\t\t};\n\t\t\t\tlet errorBody = \"\";\n\t\t\t\ttry {\n\t\t\t\t\terrorBody = await resOrFallback.text();\n\t\t\t\t} catch {\n\t\t\t\t\terrorBody = \"\";\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\ttype: \"error\",\n\t\t\t\t\tstatusCode: typeof resOrFallback.status === \"number\" ? resOrFallback.status : void 0,\n\t\t\t\t\tmessage: `${resOrFallback.status}: ${errorBody}`\n\t\t\t\t};\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tconst errMsg = err?.message || String(err);\n\t\t\tif (this.isTransientError(void 0, errMsg) && attempt < MAX_HTTP_RETRIES) {\n\t\t\t\tconst delayMs = Math.min(1e3 * Math.pow(2, attempt), 4e3);\n\t\t\t\tlog(`HTTP fetch error on ${route}: ${errMsg}, retrying in ${delayMs}ms (attempt ${attempt + 1}/${MAX_HTTP_RETRIES})`);\n\t\t\t\tawait new Promise((r) => setTimeout(r, delayMs));\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\treturn {\n\t\t\t\ttype: \"error\",\n\t\t\t\tstatusCode: void 0,\n\t\t\t\tmessage: errMsg\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\ttype: \"error\",\n\t\t\tstatusCode: lastError.statusCode,\n\t\t\tmessage: lastError.message || `Request failed after 3 attempts`\n\t\t};\n\t}\n\tasync download(route) {\n\t\tif (this.identity === void 0) return Promise.reject();\n\t\tlet content = [];\n\t\twhile (true) {\n\t\t\tconst res = await this.scheduler.fetch(this.url + route, {\n\t\t\t\tmethod: \"GET\",\n\t\t\t\tredirect: \"manual\",\n\t\t\t\theaders: {\n\t\t\t\t\tConnection: \"keep-alive\",\n\t\t\t\t\tCookie: this.identity.cookies\n\t\t\t\t}\n\t\t\t});\n\t\t\tif (res.status === 200) {\n\t\t\t\tcontent.push(Buffer.from(await res.arrayBuffer()));\n\t\t\t\tbreak;\n\t\t\t} else if (res.status === 206) content.push(Buffer.from(await res.arrayBuffer()));\n\t\t\telse break;\n\t\t}\n\t\treturn Buffer.concat(content);\n\t}\n\tasync logout(identity) {\n\t\tthis.setIdentity(identity);\n\t\treturn this.request(\"POST\", \"logout\");\n\t}\n\tasync userProjectsJson(identity) {\n\t\tthis.setIdentity(identity);\n\t\treturn this.request(\"GET\", \"user/projects\", void 0, (res) => {\n\t\t\tconst projects = JSON.parse(res).projects;\n\t\t\tprojects.forEach((project) => {\n\t\t\t\tproject.id = project._id;\n\t\t\t\tdelete project._id;\n\t\t\t});\n\t\t\treturn { projects };\n\t\t});\n\t}\n\tasync getProjectsJson(identity) {\n\t\tthis.setIdentity(identity);\n\t\treturn this.request(\"POST\", \"api/project\", {}, (res) => {\n\t\t\treturn { projects: JSON.parse(res).projects };\n\t\t});\n\t}\n\tasync projectEntitiesJson(identity, projectId) {\n\t\tthis.setIdentity(identity);\n\t\treturn this.request(\"GET\", `project/${projectId}/entities`, void 0, (res) => {\n\t\t\treturn { entities: JSON.parse(res).entities };\n\t\t});\n\t}\n\tasync newProject(identity, projectName, template) {\n\t\tthis.setIdentity(identity);\n\t\treturn this.request(\"POST\", \"project/new\", {\n\t\t\tprojectName,\n\t\t\ttemplate\n\t\t}, (res) => {\n\t\t\treturn { message: JSON.parse(res).project_id };\n\t\t});\n\t}\n\tasync cloneProject(identity, projectId, projectName) {\n\t\tthis.setIdentity(identity);\n\t\treturn this.request(\"POST\", `project/${projectId}/clone`, { projectName }, (res) => {\n\t\t\treturn { message: JSON.parse(res).project_id };\n\t\t});\n\t}\n\tasync renameProject(identity, projectId, newProjectName) {\n\t\tthis.setIdentity(identity);\n\t\treturn this.request(\"POST\", `project/${projectId}/rename`, { newProjectName });\n\t}\n\tasync deleteProject(identity, projectId) {\n\t\tthis.setIdentity(identity);\n\t\treturn this.request(\"DELETE\", `project/${projectId}`);\n\t}\n\tasync archiveProject(identity, projectId) {\n\t\tthis.setIdentity(identity);\n\t\treturn this.request(\"POST\", `project/${projectId}/archive`, void 0, void 0, { \"X-Csrf-Token\": identity.csrfToken });\n\t}\n\tasync unarchiveProject(identity, projectId) {\n\t\tthis.setIdentity(identity);\n\t\treturn this.request(\"DELETE\", `project/${projectId}/archive`);\n\t}\n\tasync trashProject(identity, projectId) {\n\t\tthis.setIdentity(identity);\n\t\treturn this.request(\"POST\", `project/${projectId}/trash`, void 0, void 0, { \"X-Csrf-Token\": identity.csrfToken });\n\t}\n\tasync untrashProject(identity, projectId) {\n\t\tthis.setIdentity(identity);\n\t\treturn this.request(\"DELETE\", `project/${projectId}/trash`);\n\t}\n\tasync getFile(identity, projectId, fileId) {\n\t\tthis.setIdentity(identity);\n\t\tconst content = await this.download(`project/${projectId}/file/${fileId}`);\n\t\treturn {\n\t\t\ttype: \"success\",\n\t\t\tcontent: new Uint8Array(content)\n\t\t};\n\t}\n\tasync addDoc(identity, projectId, parentFolderId, filename) {\n\t\tthis.setIdentity(identity);\n\t\treturn this.request(\"POST\", `project/${projectId}/doc`, {\n\t\t\tparent_folder_id: parentFolderId,\n\t\t\tname: filename\n\t\t}, (res) => {\n\t\t\tconst { _id } = JSON.parse(res);\n\t\t\treturn { entity: {\n\t\t\t\t_type: \"doc\",\n\t\t\t\t_id,\n\t\t\t\tname: filename\n\t\t\t} };\n\t\t}, { \"X-Csrf-Token\": identity.csrfToken });\n\t}\n\tasync uploadFile(identity, projectId, parentFolderId, filename, fileContent) {\n\t\tconst formData = new FormData();\n\t\tconst mimeType = src_default.getType(filename);\n\t\tformData.append(\"targetFolderId\", parentFolderId);\n\t\tformData.append(\"name\", filename);\n\t\tformData.append(\"type\", mimeType ? mimeType : \"text/plain\");\n\t\tformData.append(\"qqfile\", new Blob$1([Buffer.from(fileContent)], { type: mimeType ? mimeType : \"application/octet-stream\" }), filename);\n\t\tthis.setIdentity(identity);\n\t\treturn this.request(\"POST\", `project/${projectId}/upload?folder_id=${parentFolderId}`, formData, (res) => {\n\t\t\tconst { entity_id, entity_type } = JSON.parse(res);\n\t\t\treturn { entity: {\n\t\t\t\t_type: entity_type,\n\t\t\t\t_id: entity_id,\n\t\t\t\tname: filename\n\t\t\t} };\n\t\t}, { \"X-Csrf-Token\": identity.csrfToken });\n\t}\n\tasync uploadProject(identity, filename, fileContent) {\n\t\tconst uuid = v4();\n\t\tconst formData = new FormData();\n\t\tformData.append(\"qqfile\", new Blob$1([Buffer.from(fileContent)], { type: \"application/zip\" }), filename);\n\t\tthis.setIdentity(identity);\n\t\treturn this.request(\"POST\", `project/new/upload?_csrf=${identity.csrfToken}&qquuid=${uuid}&qqfilename=${filename}&qqtotalfilesize=${fileContent.length}`, formData, (res) => {\n\t\t\treturn { message: JSON.parse(res).project_id };\n\t\t});\n\t}\n\tasync addFolder(identity, projectId, folderName, parentFolderId) {\n\t\tconst body = {\n\t\t\tname: folderName,\n\t\t\tparent_folder_id: parentFolderId\n\t\t};\n\t\tthis.setIdentity(identity);\n\t\treturn this.request(\"POST\", `project/${projectId}/folder`, body, (res) => {\n\t\t\treturn { entity: JSON.parse(res) };\n\t\t}, { \"X-Csrf-Token\": identity.csrfToken });\n\t}\n\tasync deleteEntity(identity, projectId, fileType, fileId) {\n\t\tthis.setIdentity(identity);\n\t\treturn this.request(\"DELETE\", `project/${projectId}/${fileType}/${fileId}`);\n\t}\n\tasync deleteAuxFiles(identity, projectId) {\n\t\tthis.setIdentity(identity);\n\t\treturn this.request(\"DELETE\", `project/${projectId}/output`);\n\t}\n\tasync renameEntity(identity, projectId, entityType, entityId, name) {\n\t\tthis.setIdentity(identity);\n\t\treturn this.request(\"POST\", `project/${projectId}/${entityType}/${entityId}/rename`, { name }, void 0, { \"X-Csrf-Token\": identity.csrfToken });\n\t}\n\tasync moveEntity(identity, projectId, entityType, entityId, newParentFolderId) {\n\t\tthis.setIdentity(identity);\n\t\treturn this.request(\"POST\", `project/${projectId}/${entityType}/${entityId}/move`, { folder_id: newParentFolderId }, void 0, { \"X-Csrf-Token\": identity.csrfToken });\n\t}\n\tasync compile(identity, projectId, rootResourcePath, draft = false, stopOnFirstError = false) {\n\t\tconst body = {\n\t\t\tcheck: \"silent\",\n\t\t\tdraft,\n\t\t\tincrementalCompilesEnabled: true,\n\t\t\trootResourcePath,\n\t\t\tstopOnFirstError\n\t\t};\n\t\tthis.setIdentity(identity);\n\t\treturn this.request(\"POST\", `project/${projectId}/compile?auto_compile=true`, body, (res) => {\n\t\t\treturn { compile: JSON.parse(res) };\n\t\t}, { \"X-Csrf-Token\": identity.csrfToken }, 3e5);\n\t}\n\tasync stopCompile(identity, projectId) {\n\t\tthis.setIdentity(identity);\n\t\treturn this.request(\"POST\", `project/${projectId}/compile/stop`, void 0, void 0, { \"X-Csrf-Token\": identity.csrfToken });\n\t}\n\tasync indexAll(identity, projectId) {\n\t\tthis.setIdentity(identity);\n\t\treturn this.request(\"POST\", `project/${projectId}/references/indexAll`, { shouldBroadcast: false }, void 0);\n\t}\n\tasync getMetadata(identity, projectId) {\n\t\tthis.setIdentity(identity);\n\t\treturn this.request(\"GET\", `project/${projectId}/metadata`, void 0, (res) => {\n\t\t\treturn { meta: JSON.parse(res) };\n\t\t});\n\t}\n\tasync proxyRequestToSpellingApi(identity, language, userId, words) {\n\t\tconst body = {\n\t\t\tlanguage,\n\t\t\tskipLearnedWords: true,\n\t\t\ttoken: userId,\n\t\t\twords\n\t\t};\n\t\tthis.setIdentity(identity);\n\t\treturn this.request(\"POST\", \"spelling/check\", body, (res) => {\n\t\t\treturn { misspellings: JSON.parse(res).misspellings };\n\t\t});\n\t}\n\tasync spellingControllerLearn(identity, userId, word) {\n\t\tconst body = {\n\t\t\ttoken: userId,\n\t\t\tword\n\t\t};\n\t\tthis.setIdentity(identity);\n\t\treturn this.request(\"POST\", \"spelling/learn\", body);\n\t}\n\tasync spellingControllerUnlearn(identity, word) {\n\t\tthis.setIdentity(identity);\n\t\treturn this.request(\"POST\", \"spelling/unlearn\", { word }, void 0, { \"X-Csrf-Token\": identity.csrfToken });\n\t}\n\tasync getProjectSettings(identity, projectId) {\n\t\tthis.setIdentity(identity);\n\t\treturn this.request(\"GET\", `project/${projectId}`, void 0, (res) => {\n\t\t\tconst body = res || \"\";\n\t\t\tconst learnedWordsMatch = /<meta\\s+name=\"ol-learnedWords\"\\s+data-type=\"json\"\\s+content=\"(\\[.*?\\])\">/.exec(body);\n\t\t\tconst learnedWords = learnedWordsMatch !== null ? JSON.parse(learnedWordsMatch[1].replace(/"/g, \"\\\"\")) : [];\n\t\t\tconst languagesMatch = /<meta\\s+name=\"ol-languages\"\\s+data-type=\"json\"\\s+content=\"(\\[.*?\\])\">/.exec(body);\n\t\t\tconst languages = languagesMatch !== null ? JSON.parse(languagesMatch[1].replace(/"/g, \"\\\"\")) : [];\n\t\t\tif (languages.length) languages.unshift({\n\t\t\t\tname: \"Off\",\n\t\t\t\tcode: \"\"\n\t\t\t});\n\t\t\treturn { settings: {\n\t\t\t\tlearnedWords,\n\t\t\t\tlanguages,\n\t\t\t\tcompilers: [\n\t\t\t\t\t{\n\t\t\t\t\t\tcode: \"pdflatex\",\n\t\t\t\t\t\tname: \"pdfLaTex\"\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tcode: \"latex\",\n\t\t\t\t\t\tname: \"LaTex\"\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tcode: \"xelatex\",\n\t\t\t\t\t\tname: \"XeLaTex\"\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tcode: \"lualatex\",\n\t\t\t\t\t\tname: \"LuaLaTex\"\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t} };\n\t\t});\n\t}\n\tasync updateProjectSettings(identity, projectId, setting) {\n\t\tthis.setIdentity(identity);\n\t\treturn this.request(\"POST\", `project/${projectId}/settings`, setting);\n\t}\n\tasync getFileFromClsi(identity, url, compileGroup, clsiServerId, pdfDownloadDomain) {\n\t\tif (pdfDownloadDomain && clsiServerId) {\n\t\t\tconst cdnUrl = `${pdfDownloadDomain.replace(/\\/+$/, \"\")}/${url.replace(/^\\/+/g, \"\")}?compileGroup=${encodeURIComponent(compileGroup)}&clsiserverid=${encodeURIComponent(clsiServerId)}&enable_pdf_caching=true`;\n\t\t\tconst content = await this._downloadAbsolute(cdnUrl, false);\n\t\t\treturn {\n\t\t\t\ttype: \"success\",\n\t\t\t\tcontent: new Uint8Array(content)\n\t\t\t};\n\t\t}\n\t\turl = url.replace(/^\\/+/g, \"\");\n\t\tthis.setIdentity(identity);\n\t\tconst content = await this.download(url);\n\t\treturn {\n\t\t\ttype: \"success\",\n\t\t\tcontent: new Uint8Array(content)\n\t\t};\n\t}\n\t/** Download from an absolute URL, optionally including web frontend cookies. */\n\tasync _downloadAbsolute(absoluteUrl, includeCookies) {\n\t\tconst headers = { Connection: \"keep-alive\" };\n\t\tif (includeCookies && this.identity) headers[\"Cookie\"] = this.identity.cookies;\n\t\tlet content = [];\n\t\twhile (true) {\n\t\t\tconst res = await this.scheduler.fetch(absoluteUrl, {\n\t\t\t\tmethod: \"GET\",\n\t\t\t\tredirect: \"manual\",\n\t\t\t\theaders\n\t\t\t});\n\t\t\tif (res.status === 200) {\n\t\t\t\tcontent.push(Buffer.from(await res.arrayBuffer()));\n\t\t\t\tbreak;\n\t\t\t} else if (res.status === 206) content.push(Buffer.from(await res.arrayBuffer()));\n\t\t\telse break;\n\t\t}\n\t\treturn Buffer.concat(content);\n\t}\n\tasync proxySyncPdf(identity, projectId, page, h, v, buildId) {\n\t\tthis.setIdentity(identity);\n\t\tconst request = `project/${projectId}/sync/pdf?page=${page}&h=${h.toFixed(2)}&v=${v.toFixed(2)}&editorId=${v4()}&buildId=${buildId}`;\n\t\treturn this.request(\"GET\", request, void 0, (res) => {\n\t\t\treturn { syncPdf: JSON.parse(res).code[0] };\n\t\t});\n\t}\n\tasync proxySyncCode(identity, projectId, file, line, column, buildId) {\n\t\tthis.setIdentity(identity);\n\t\treturn this.request(\"GET\", `project/${projectId}/sync/code?file=${file}&line=${line}&column=${column}&editorId=${v4()}&buildId=${buildId}`, void 0, (res) => {\n\t\t\treturn { syncCode: JSON.parse(res).pdf };\n\t\t});\n\t}\n\tasync getAllTags(identity) {\n\t\tthis.setIdentity(identity);\n\t\treturn this.request(\"GET\", \"tag\", void 0, (res) => {\n\t\t\treturn { tags: JSON.parse(res) };\n\t\t});\n\t}\n\tasync createTag(identity, name) {\n\t\tthis.setIdentity(identity);\n\t\treturn this.request(\"POST\", \"tag\", { name }, (res) => {\n\t\t\treturn { tags: JSON.parse(res) };\n\t\t});\n\t}\n\tasync renameTag(identity, tagId, name) {\n\t\tthis.setIdentity(identity);\n\t\treturn this.request(\"POST\", `tag/${tagId}/rename`, { name });\n\t}\n\tasync deleteTag(identity, tagId) {\n\t\tthis.setIdentity(identity);\n\t\treturn this.request(\"DELETE\", `tag/${tagId}`);\n\t}\n\tasync addProjectToTag(identity, tagId, projectId) {\n\t\tthis.setIdentity(identity);\n\t\treturn this.request(\"POST\", `tag/${tagId}/project/${projectId}`);\n\t}\n\tasync removeProjectFromTag(identity, tagId, projectId) {\n\t\tthis.setIdentity(identity);\n\t\treturn this.request(\"DELETE\", `tag/${tagId}/project/${projectId}`);\n\t}\n\tasync proxyToHistoryApiAndGetUpdates(identity, projectId, before) {\n\t\tconst beforeQuery = before ? `&before=${before}` : \"\";\n\t\tthis.setIdentity(identity);\n\t\treturn this.request(\"GET\", `project/${projectId}/updates?min_count=10${beforeQuery}`, void 0, (res) => {\n\t\t\treturn { updates: JSON.parse(res) };\n\t\t});\n\t}\n\tasync proxyToHistoryApiAndGetFileDiff(identity, projectId, pathname, from, to) {\n\t\tthis.setIdentity(identity);\n\t\treturn this.request(\"GET\", `project/${projectId}/diff?pathname=${pathname}&from=${from}&to=${to}`, void 0, (res) => {\n\t\t\treturn { diff: JSON.parse(res) };\n\t\t});\n\t}\n\tasync proxyToHistoryApiAndGetFileTreeDiff(identity, projectId, from, to) {\n\t\tthis.setIdentity(identity);\n\t\treturn this.request(\"GET\", `project/${projectId}/filetree/diff?from=${from}&to=${to}`, void 0, (res) => {\n\t\t\treturn { treeDiff: JSON.parse(res) };\n\t\t});\n\t}\n\tasync downloadZipOfVersion(identity, projectId, version) {\n\t\tthis.setIdentity(identity);\n\t\tconst content = await this.download(`project/${projectId}/version/${version}/zip`);\n\t\treturn {\n\t\t\ttype: \"success\",\n\t\t\tcontent: new Uint8Array(content)\n\t\t};\n\t}\n\tasync getLabels(identity, projectId) {\n\t\tthis.setIdentity(identity);\n\t\treturn this.request(\"GET\", `project/${projectId}/labels`, void 0, (res) => {\n\t\t\treturn { labels: JSON.parse(res) };\n\t\t});\n\t}\n\tasync createLabel(identity, projectId, comment, version) {\n\t\tthis.setIdentity(identity);\n\t\treturn this.request(\"POST\", `project/${projectId}/labels`, {\n\t\t\tcomment,\n\t\t\tversion\n\t\t}, (res) => {\n\t\t\treturn { labels: [JSON.parse(res)] };\n\t\t});\n\t}\n\tasync deleteLabel(identity, projectId, labelId) {\n\t\tthis.setIdentity(identity);\n\t\treturn this.request(\"DELETE\", `project/${projectId}/labels/${labelId}`);\n\t}\n\tasync getMessages(identity, projectId, limit = 50) {\n\t\tthis.setIdentity(identity);\n\t\treturn this.request(\"GET\", `project/${projectId}/messages?limit=${limit}`, void 0, (res) => {\n\t\t\treturn { messages: JSON.parse(res) };\n\t\t}, { \"X-Csrf-Token\": identity.csrfToken });\n\t}\n\tasync sendMessage(identity, projectId, client_id, content) {\n\t\tthis.setIdentity(identity);\n\t\treturn this.request(\"POST\", `project/${projectId}/messages`, {\n\t\t\tclient_id,\n\t\t\tcontent\n\t\t}, void 0, { \"X-Csrf-Token\": identity.csrfToken });\n\t}\n};\nvar ExtendedBaseAPI = class extends BaseAPI {\n\tasync refreshLinkedFile(identity, project_id, file_id) {\n\t\tthis.setIdentity(identity);\n\t\treturn await this.request(\"POST\", `project/${project_id}/linked_file/${file_id}/refresh`, { shouldReindexReferences: false }, (res) => {\n\t\t\treturn { message: JSON.parse(res).new_file_id };\n\t\t}, { \"X-Csrf-Token\": identity.csrfToken });\n\t}\n\tasync createLinkedFile(identity, project_id, parent_folder_id, name, provider, data) {\n\t\tthis.setIdentity(identity);\n\t\treturn await this.request(\"POST\", `project/${project_id}/linked_file`, {\n\t\t\tname,\n\t\t\tparent_folder_id,\n\t\t\tprovider,\n\t\t\tdata\n\t\t}, (res) => {\n\t\t\treturn { message: JSON.parse(res).new_file_id };\n\t\t}, { \"X-Csrf-Token\": identity.csrfToken });\n\t}\n};\nconst SOCKET_OPERATION_TIMEOUT_MS = 15e3;\nfunction decodePackedUtf8(text) {\n\treturn Buffer.from(text, \"latin1\").toString(\"utf-8\");\n}\nvar SocketIOAPI = class SocketIOAPI {\n\turl;\n\tapi;\n\tidentity;\n\tprojectId;\n\tstatic alternativeSocketFactory;\n\tscheme;\n\trecord;\n\tjoinedProject;\n\tpendingProjectJoin;\n\t_handlers = [];\n\tconnectedPublicId;\n\tsocket;\n\temit;\n\t/** Track the scheme used when the socket was last initialized */\n\t_socketInitScheme;\n\tconstructor(url, api, identity, projectId) {\n\t\tthis.url = url;\n\t\tthis.api = api;\n\t\tthis.identity = identity;\n\t\tthis.projectId = projectId;\n\t\tthis.scheme = \"realtime\";\n\t\tthis.init();\n\t}\n\tstatic setAlternativeSocketFactory(factory) {\n\t\tSocketIOAPI.alternativeSocketFactory = factory;\n\t}\n\tinit() {\n\t\tif (this.socket) try {\n\t\t\tif (typeof this.socket.removeAllListeners === \"function\") this.socket.removeAllListeners();\n\t\t\tif (typeof this.socket.disconnect === \"function\") this.socket.disconnect();\n\t\t} catch {}\n\t\tswitch (this.scheme) {\n\t\t\tcase \"Alt\":\n\t\t\t\tif (!SocketIOAPI.alternativeSocketFactory) throw new Error(\"The alternative Overleaf connection is not available in this runtime.\");\n\t\t\t\tthis.socket = SocketIOAPI.alternativeSocketFactory(this.url, this.api, this.identity, this.projectId, this.record);\n\t\t\t\tbreak;\n\t\t\tcase \"realtime\":\n\t\t\t\tthis.record = void 0;\n\t\t\t\tthis.joinedProject = void 0;\n\t\t\t\tthis.resetProjectJoin(/* @__PURE__ */ new Error(\"The realtime connection was replaced.\"));\n\t\t\t\tconst query = `?projectId=${this.projectId}&t=${Date.now()}`;\n\t\t\t\tthis.socket = this.api._initSocketV0(this.identity, query);\n\t\t}\n\t\tthis.socket.emit[promisify.custom] = (event, ...args) => {\n\t\t\tconst timeoutPromise = new Promise((_, reject) => {\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\treject(\"timeout\");\n\t\t\t\t}, SOCKET_OPERATION_TIMEOUT_MS);\n\t\t\t});\n\t\t\tconst waitPromise = new Promise((resolve, reject) => {\n\t\t\t\tthis.socket.emit(event, ...args, (err, ...data) => {\n\t\t\t\t\tif (err) reject(err);\n\t\t\t\t\telse resolve(data);\n\t\t\t\t});\n\t\t\t});\n\t\t\treturn Promise.race([waitPromise, timeoutPromise]);\n\t\t};\n\t\tthis.emit = promisify(this.socket.emit).bind(this.socket);\n\t\tthis.initInternalHandlers();\n\t\tthis.resumeEventHandlers(this._handlers);\n\t\tthis._socketInitScheme = this.scheme;\n\t}\n\t/** Returns true if the socket needs re-initialization (scheme changed, or socket was never init'd) */\n\tget needsReinit() {\n\t\treturn this._socketInitScheme !== this.scheme || !this.socket;\n\t}\n\tget connectionScheme() {\n\t\treturn this.scheme;\n\t}\n\tinitInternalHandlers() {\n\t\tthis.socket.on(\"connect\", () => {\n\t\t\tlog(\"SocketIOAPI: connected\", {\n\t\t\t\tscheme: this.scheme,\n\t\t\t\tprojectId: this.projectId\n\t\t\t});\n\t\t});\n\t\tthis.socket.on(\"connect_failed\", (connectionError) => {\n\t\t\tlog(\"SocketIOAPI: connect_failed\", {\n\t\t\t\tscheme: this.scheme,\n\t\t\t\tprojectId: this.projectId,\n\t\t\t\terror: connectionError\n\t\t\t});\n\t\t});\n\t\tthis.socket.on(\"disconnect\", (reason) => {\n\t\t\tlog(\"SocketIOAPI: disconnect event\", {\n\t\t\t\tscheme: this.scheme,\n\t\t\t\tprojectId: this.projectId,\n\t\t\t\treason\n\t\t\t});\n\t\t\tif (this.scheme === \"realtime\") {\n\t\t\t\tthis.joinedProject = void 0;\n\t\t\t\tthis.connectedPublicId = void 0;\n\t\t\t\tthis.resetProjectJoin(/* @__PURE__ */ new Error(`Overleaf realtime connection closed: ${String(reason ?? \"unknown\")}`));\n\t\t\t}\n\t\t});\n\t\tthis.socket.on(\"reconnecting\", (delay, attempt) => {\n\t\t\tlog(\"SocketIOAPI: reconnecting\", {\n\t\t\t\tscheme: this.scheme,\n\t\t\t\tprojectId: this.projectId,\n\t\t\t\tdelay,\n\t\t\t\tattempt\n\t\t\t});\n\t\t});\n\t\tthis.socket.on(\"reconnect\", (transport, attempts) => {\n\t\t\tlog(\"SocketIOAPI: reconnected\", {\n\t\t\t\tscheme: this.scheme,\n\t\t\t\tprojectId: this.projectId,\n\t\t\t\ttransport,\n\t\t\t\tattempts\n\t\t\t});\n\t\t});\n\t\tthis.socket.on(\"reconnect_failed\", (error) => {\n\t\t\tlog(\"SocketIOAPI: reconnect_failed\", {\n\t\t\t\tscheme: this.scheme,\n\t\t\t\tprojectId: this.projectId,\n\t\t\t\terror\n\t\t\t});\n\t\t});\n\t\tthis.socket.on(\"forceDisconnect\", (message, delay = 10) => {\n\t\t\tlog(\"SocketIOAPI: forceDisconnect\", {\n\t\t\t\tmessage,\n\t\t\t\tdelay,\n\t\t\t\tprojectId: this.projectId\n\t\t\t});\n\t\t});\n\t\tthis.socket.on(\"connectionRejected\", (err) => {\n\t\t\tlog(\"SocketIOAPI: connectionRejected\", {\n\t\t\t\tscheme: this.scheme,\n\t\t\t\tprojectId: this.projectId,\n\t\t\t\terror: err\n\t\t\t});\n\t\t\tif (this.socket.io && typeof this.socket.io.reconnect === \"function\") this.socket.io.reconnect(false);\n\t\t});\n\t\tthis.socket.on(\"error\", (err) => {\n\t\t\terror(`Overleaf connection error: ${err?.message || String(err)}`);\n\t\t});\n\t\tif (this.scheme === \"realtime\") {\n\t\t\tthis.pendingProjectJoin ??= this.createProjectJoin();\n\t\t\tthis.socket.on(\"joinProjectResponse\", (res) => {\n\t\t\t\tconst publicId = res.publicId;\n\t\t\t\tconst project = res.project;\n\t\t\t\tthis.socket.markProjectJoined?.();\n\t\t\t\tlog(\"SocketIOAPI: project joined\", {\n\t\t\t\t\tscheme: this.scheme,\n\t\t\t\t\tprojectId: this.projectId,\n\t\t\t\t\tpublicId\n\t\t\t\t});\n\t\t\t\tthis.connectedPublicId = publicId;\n\t\t\t\tthis.joinedProject = project;\n\t\t\t\tthis.pendingProjectJoin?.resolve(project);\n\t\t\t\tfor (const handler of this._handlers) {\n\t\t\t\t\thandler.onProjectJoined?.(project);\n\t\t\t\t\thandler.onConnectionAccepted?.(publicId);\n\t\t\t\t}\n\t\t\t});\n\t\t\tthis.socket.on(\"connectionRejected\", (err) => {\n\t\t\t\tthis.pendingProjectJoin?.reject(err?.message || err);\n\t\t\t});\n\t\t}\n\t}\n\tcreateProjectJoin() {\n\t\tlet resolve;\n\t\tlet reject;\n\t\tconst promise = new Promise((resolveProject, rejectProject) => {\n\t\t\tresolve = resolveProject;\n\t\t\treject = rejectProject;\n\t\t});\n\t\tpromise.catch(() => void 0);\n\t\treturn {\n\t\t\tpromise,\n\t\t\tresolve,\n\t\t\treject\n\t\t};\n\t}\n\tresetProjectJoin(reason) {\n\t\tif (reason !== void 0) this.pendingProjectJoin?.reject(reason);\n\t\tthis.pendingProjectJoin = this.createProjectJoin();\n\t}\n\twaitForRealtimeProject() {\n\t\treturn this.joinedProject ? Promise.resolve(this.joinedProject) : this.pendingProjectJoin.promise;\n\t}\n\tasync emitProjectEvent(event, ...args) {\n\t\tif (this.scheme === \"realtime\") await this.waitForRealtimeProject();\n\t\treturn this.emit(event, ...args);\n\t}\n\tdisconnect() {\n\t\tthis.socket.disconnect();\n\t}\n\tget handlers() {\n\t\treturn this._handlers;\n\t}\n\tget isUsingAlternativeConnectionScheme() {\n\t\treturn this.scheme === \"Alt\";\n\t}\n\ttoggleAlternativeConnectionScheme(url, updatedRecord) {\n\t\tthis.scheme = this.scheme === \"Alt\" ? \"realtime\" : \"Alt\";\n\t\tif (updatedRecord) {\n\t\t\tthis.url = url;\n\t\t\tthis.record = Promise.resolve(updatedRecord);\n\t\t}\n\t}\n\tresumeEventHandlers(handlers) {\n\t\tthis._handlers = [];\n\t\thandlers.forEach((handler) => {\n\t\t\tthis.updateEventHandlers(handler);\n\t\t});\n\t}\n\tupdateEventHandlers(handlers) {\n\t\tthis._handlers.push(handlers);\n\t\tObject.values(handlers).forEach((handler) => {\n\t\t\tswitch (handler) {\n\t\t\t\tcase handlers.onFileCreated:\n\t\t\t\t\tthis.socket.on(\"reciveNewDoc\", (parentFolderId, doc) => {\n\t\t\t\t\t\thandler(parentFolderId, \"doc\", doc);\n\t\t\t\t\t});\n\t\t\t\t\tthis.socket.on(\"reciveNewFile\", (parentFolderId, file) => {\n\t\t\t\t\t\thandler(parentFolderId, \"file\", file);\n\t\t\t\t\t});\n\t\t\t\t\tthis.socket.on(\"reciveNewFolder\", (parentFolderId, folder) => {\n\t\t\t\t\t\thandler(parentFolderId, \"folder\", folder);\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\tcase handlers.onFileRenamed:\n\t\t\t\t\tthis.socket.on(\"reciveEntityRename\", (entityId, newName) => {\n\t\t\t\t\t\thandler(entityId, newName);\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\tcase handlers.onFileRemoved:\n\t\t\t\t\tthis.socket.on(\"removeEntity\", (entityId) => {\n\t\t\t\t\t\thandler(entityId);\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\tcase handlers.onFileMoved:\n\t\t\t\t\tthis.socket.on(\"reciveEntityMove\", (entityId, folderId) => {\n\t\t\t\t\t\thandler(entityId, folderId);\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\tcase handlers.onFileChanged:\n\t\t\t\t\tthis.socket.on(\"otUpdateApplied\", (update) => {\n\t\t\t\t\t\thandler(update);\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\tcase handlers.onDisconnected:\n\t\t\t\t\tthis.socket.on(\"disconnect\", (reason) => {\n\t\t\t\t\t\thandler(reason);\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\tcase handlers.onProjectJoined: break;\n\t\t\t\tcase handlers.onConnectionAccepted:\n\t\t\t\t\tthis.socket.on(\"connectionAccepted\", (_, publicId) => {\n\t\t\t\t\t\thandler(publicId);\n\t\t\t\t\t});\n\t\t\t\t\tif (this.connectedPublicId !== void 0) queueMicrotask(() => handler(this.connectedPublicId));\n\t\t\t\t\tbreak;\n\t\t\t\tcase handlers.onClientUpdated:\n\t\t\t\t\tthis.socket.on(\"clientTracking.clientUpdated\", (user) => {\n\t\t\t\t\t\thandler(user);\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\tcase handlers.onClientDisconnected:\n\t\t\t\t\tthis.socket.on(\"clientTracking.clientDisconnected\", (id) => {\n\t\t\t\t\t\thandler(id);\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\tcase handlers.onReceivedMessage:\n\t\t\t\t\tthis.socket.on(\"new-chat-message\", (message) => {\n\t\t\t\t\t\thandler(message);\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\tcase handlers.onSpellCheckLanguageUpdated:\n\t\t\t\t\tthis.socket.on(\"spellCheckLanguageUpdated\", (language) => {\n\t\t\t\t\t\thandler(language);\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\tcase handlers.onCompilerUpdated:\n\t\t\t\t\tthis.socket.on(\"compilerUpdated\", (compiler) => {\n\t\t\t\t\t\thandler(compiler);\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\tcase handlers.onRootDocUpdated: this.socket.on(\"rootDocUpdated\", (rootDocId) => {\n\t\t\t\t\thandler(rootDocId);\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\tget unSyncFileChanges() {\n\t\treturn this.scheme === \"Alt\" ? this.socket.unSyncedChanges : 0;\n\t}\n\tasync syncFileChanges() {\n\t\tif (this.scheme === \"Alt\") return await this.socket.uploadToVFS();\n\t}\n\t/**\n\t* Reference: services/web/frontend/js/ide/connection/ConnectionManager.js#L427\n\t* @param {string} projectId - The project id.\n\t* @returns {Promise}\n\t*/\n\tasync joinProject(project_id) {\n\t\tconst timeoutPromise = new Promise((_, reject) => {\n\t\t\tsetTimeout(() => {\n\t\t\t\treject(\"timeout\");\n\t\t\t}, SOCKET_OPERATION_TIMEOUT_MS);\n\t\t});\n\t\tswitch (this.scheme) {\n\t\t\tcase \"Alt\": return Promise.race([this.emit(\"joinProject\", { project_id }).then((returns) => returns[0]), timeoutPromise]);\n\t\t\tcase \"realtime\": return Promise.race([this.waitForRealtimeProject(), timeoutPromise]);\n\t\t}\n\t}\n\t/**\n\t* Reference: services/web/frontend/js/ide/editor/Document.js#L500\n\t* @param {string} docId - The document id.\n\t* @returns {Promise}\n\t*/\n\tasync joinDoc(docId) {\n\t\treturn this.emitProjectEvent(\"joinDoc\", docId, { encodeRanges: true }).then((returns) => {\n\t\t\tconst [docLinesAscii, version, updates, ranges] = returns;\n\t\t\treturn {\n\t\t\t\tdocLines: docLinesAscii.map((line) => decodePackedUtf8(line)),\n\t\t\t\tversion,\n\t\t\t\tupdates,\n\t\t\t\tranges\n\t\t\t};\n\t\t});\n\t}\n\t/**\n\t* Reference: services/web/frontend/js/ide/editor/Document.js#L591\n\t* @param {string} docId - The document id.\n\t* @returns {Promise}\n\t*/\n\tasync leaveDoc(docId) {\n\t\treturn this.emitProjectEvent(\"leaveDoc\", docId).then(() => {});\n\t}\n\t/**\n\t* Reference: services/web/frontend/js/ide/editor/ShareJsDocs.js#L78\n\t* @param {string} docId - The document id.\n\t* @param {any} update - The changes.\n\t* @returns {Promise}\n\t*/\n\tasync applyOtUpdate(docId, update) {\n\t\ttry {\n\t\t\tawait this.emitProjectEvent(\"applyOtUpdate\", docId, update);\n\t\t} catch (error) {\n\t\t\tlet detail;\n\t\t\tif (error instanceof Error) detail = error.message;\n\t\t\telse if (typeof error === \"string\") detail = error;\n\t\t\telse try {\n\t\t\t\tdetail = JSON.stringify(error);\n\t\t\t} catch {\n\t\t\t\tdetail = String(error);\n\t\t\t}\n\t\t\tthrow new Error(`Overleaf document update rejected: ${detail}`);\n\t\t}\n\t}\n\t/**\n\t* Reference: services/web/frontend/js/ide/online-users/OnlineUserManager.js#L42\n\t* @returns {Promise}\n\t*/\n\tasync getConnectedUsers() {\n\t\treturn this.emitProjectEvent(\"clientTracking.getConnectedUsers\").then((returns) => {\n\t\t\tconst [connectedUsers] = returns;\n\t\t\treturn connectedUsers;\n\t\t});\n\t}\n\t/**\n\t* Reference: services/web/frontend/js/ide/online-users/OnlineUserManager.js#L150\n\t* @param {string} docId - The document id.\n\t* @returns {Promise}\n\t*/\n\tasync updatePosition(doc_id, row, column) {\n\t\treturn this.emitProjectEvent(\"clientTracking.updatePosition\", {\n\t\t\trow,\n\t\t\tcolumn,\n\t\t\tdoc_id\n\t\t}).then(() => {});\n\t}\n};\nfunction configPath(environment = process.env) {\n\treturn environment.LEAFRELAY_CONFIG ? resolve(environment.LEAFRELAY_CONFIG) : join(environment.LEAFRELAY_HOME ? resolve(environment.LEAFRELAY_HOME) : join(homedir(), \".leafrelay\"), \"config.json\");\n}\nfunction normalizeServerUrl(value) {\n\tconst url = new URL(value.includes(\"://\") ? value : `https://${value}`);\n\turl.pathname = \"/\";\n\turl.search = \"\";\n\turl.hash = \"\";\n\treturn url.href;\n}\nfunction serverKey(value) {\n\treturn new URL(normalizeServerUrl(value)).host;\n}\nasync function readConfig(path = configPath()) {\n\ttry {\n\t\tconst parsed = JSON.parse(await readFile(path, \"utf8\"));\n\t\tif (parsed.version !== 1 || typeof parsed.servers !== \"object\" || parsed.servers === null) throw new Error(`Unsupported LeafRelay configuration in ${path}`);\n\t\treturn parsed;\n\t} catch (error) {\n\t\tif (error.code === \"ENOENT\") return {\n\t\t\tversion: 1,\n\t\t\tservers: {},\n\t\t\tknownServers: {}\n\t\t};\n\t\tthrow error;\n\t}\n}\nasync function writeConfig(config, path = configPath()) {\n\tawait mkdir(dirname(path), {\n\t\trecursive: true,\n\t\tmode: 448\n\t});\n\tawait writeFile(path, `${JSON.stringify(config, null, 2)}\\n`, {\n\t\tencoding: \"utf8\",\n\t\tmode: 384\n\t});\n\tawait chmod(path, 384);\n}\nasync function saveServerSession(session, path = configPath()) {\n\tconst config = await readConfig(path);\n\tconst key = serverKey(session.url);\n\tconfig.servers[key] = session;\n\tconfig.knownServers ??= {};\n\tconfig.knownServers[key] ??= {\n\t\tname: key,\n\t\turl: session.url\n\t};\n\tawait writeConfig(config, path);\n}\nasync function saveKnownServer(name, url, path = configPath()) {\n\tconst config = await readConfig(path);\n\tconst key = serverKey(url);\n\tconfig.knownServers ??= {};\n\tconfig.knownServers[key] = {\n\t\tname,\n\t\turl: normalizeServerUrl(url)\n\t};\n\tawait writeConfig(config, path);\n}\nasync function removeKnownServer(server, path = configPath()) {\n\tconst config = await readConfig(path);\n\tconst key = serverKey(server);\n\tdelete config.servers[key];\n\tdelete config.knownServers?.[key];\n\tawait writeConfig(config, path);\n}\nasync function removeServerSession(server, path = configPath()) {\n\tconst config = await readConfig(path);\n\tdelete config.servers[serverKey(server)];\n\tawait writeConfig(config, path);\n}\nasync function getServerSession(server, environment = process.env, path = configPath(environment)) {\n\tconst key = serverKey(server);\n\tconst stored = (await readConfig(path)).servers[key];\n\tconst cookie = environment.LEAFRELAY_COOKIE;\n\tif (!cookie) return stored;\n\treturn {\n\t\turl: stored?.url ?? normalizeServerUrl(server),\n\t\tuserId: stored?.userId ?? \"\",\n\t\tuserEmail: stored?.userEmail ?? \"\",\n\t\tidentity: {\n\t\t\tcookies: cookie,\n\t\t\tcsrfToken: stored?.identity.csrfToken ?? \"\"\n\t\t},\n\t\tupdatedAt: stored?.updatedAt ?? (/* @__PURE__ */ new Date(0)).toISOString()\n\t};\n}\nfunction projectPath(root, path) {\n\tconst target = resolve(root, path.replace(/^\\/+/, \"\"));\n\tconst relativePath = relative(root, target);\n\tif (relativePath.startsWith(\"..\") || relativePath === \"..\") throw new Error(`Path escapes the local project: ${path}`);\n\treturn target;\n}\nfunction syncPath(root, path) {\n\treturn `/${relative(root, path).split(sep).join(\"/\")}`;\n}\nvar NodeReplicaFileSystem = class {\n\troot;\n\tignore;\n\twatcher;\n\tconstructor(root, ignore) {\n\t\tthis.root = root;\n\t\tthis.ignore = ignore;\n\t}\n\tasync listFiles() {\n\t\tconst files = [];\n\t\tconst visit = async (directory) => {\n\t\t\tfor (const entry of await readdir(directory, { withFileTypes: true })) {\n\t\t\t\tconst absolute = resolve(directory, entry.name);\n\t\t\t\tconst path = syncPath(this.root, absolute);\n\t\t\t\tif (this.ignore(path) || entry.name.startsWith(\".\") || entry.isSymbolicLink()) continue;\n\t\t\t\tif (entry.isDirectory()) await visit(absolute);\n\t\t\t\telse if (entry.isFile()) files.push(path);\n\t\t\t}\n\t\t};\n\t\tawait visit(this.root);\n\t\treturn files.sort();\n\t}\n\tasync read(path) {\n\t\tconst target = projectPath(this.root, path);\n\t\ttry {\n\t\t\tconst stat = await lstat(target);\n\t\t\tif (!stat.isFile() || stat.isSymbolicLink()) return;\n\t\t\treturn new Uint8Array(await readFile(target));\n\t\t} catch (error) {\n\t\t\tif (error.code === \"ENOENT\") return;\n\t\t\tthrow error;\n\t\t}\n\t}\n\tasync write(path, content) {\n\t\tconst target = projectPath(this.root, path);\n\t\tawait mkdir(dirname(target), { recursive: true });\n\t\tawait writeFile(target, content);\n\t}\n\tasync remove(path) {\n\t\tawait rm(projectPath(this.root, path), {\n\t\t\tforce: true,\n\t\t\trecursive: true\n\t\t});\n\t}\n\tasync watch(onChange) {\n\t\tthis.watcher = watch$1(this.root, {\n\t\t\tignoreInitial: true,\n\t\t\tfollowSymlinks: false,\n\t\t\tignored: (path) => {\n\t\t\t\tconst relativePath = relative(this.root, path);\n\t\t\t\tif (!relativePath) return false;\n\t\t\t\tconst normalized = `/${relativePath.split(sep).join(\"/\")}`;\n\t\t\t\treturn this.ignore(normalized) || normalized.split(\"/\").some((part) => part.startsWith(\".\"));\n\t\t\t},\n\t\t\tawaitWriteFinish: {\n\t\t\t\tstabilityThreshold: 200,\n\t\t\t\tpollInterval: 50\n\t\t\t}\n\t\t});\n\t\tconst handler = (path) => onChange(syncPath(this.root, path));\n\t\tthis.watcher.on(\"add\", handler).on(\"change\", handler).on(\"unlink\", handler);\n\t\tawait new Promise((resolveReady, reject) => {\n\t\t\tthis.watcher.once(\"ready\", resolveReady).once(\"error\", reject);\n\t\t});\n\t\treturn async () => {\n\t\t\tawait this.watcher?.close();\n\t\t};\n\t}\n};\nfunction parseProjectUri(value) {\n\tconst uri = new URL(value);\n\tconst decodedQuery = decodeURIComponent(uri.search.slice(1));\n\tconst query = new URLSearchParams(decodedQuery);\n\tconst projectId = query.get(\"project\");\n\tif (!projectId) throw new Error(\"The project URI in .overleaf/settings.json does not contain a project ID.\");\n\treturn {\n\t\tserverName: uri.host,\n\t\tprojectId,\n\t\tprojectName: decodeURIComponent(uri.pathname.split(\"/\").filter(Boolean)[0] ?? \"\"),\n\t\tuserId: query.get(\"user\") ?? void 0\n\t};\n}\nasync function readProjectSettings(directory) {\n\tconst settingsPath = resolve(directory, \".overleaf\", \"settings.json\");\n\tconst raw = JSON.parse(await readFile(settingsPath, \"utf8\"));\n\tif (typeof raw.uri !== \"string\") throw new Error(`${settingsPath} does not contain a valid project URI.`);\n\tconst parsed = parseProjectUri(raw.uri);\n\tconst serverName = typeof raw.serverName === \"string\" ? raw.serverName : parsed.serverName;\n\tconst localReplica = raw.localReplica;\n\treturn {\n\t\turi: raw.uri,\n\t\tserverName,\n\t\tserverUrl: typeof raw.serverUrl === \"string\" ? raw.serverUrl : `https://${serverName}/`,\n\t\tprojectId: parsed.projectId,\n\t\tprojectName: typeof raw.projectName === \"string\" ? raw.projectName : parsed.projectName,\n\t\tuserId: parsed.userId,\n\t\tlocalReplica: { settings: localReplica?.settings ?? {} }\n\t};\n}\nconst DEFAULT_IGNORE_PATTERNS = [\n\t\"**/.*\",\n\t\"**/.*/**\",\n\t\"**/*.aux\",\n\t\"**/__latexindent*\",\n\t\"**/*.bbl\",\n\t\"**/*.bcf\",\n\t\"**/*.blg\",\n\t\"**/*.fdb_latexmk\",\n\t\"**/*.fls\",\n\t\"**/*.lof\",\n\t\"**/*.log\",\n\t\"**/*.lot\",\n\t\"**/*.out\",\n\t\"**/*.run.xml\",\n\t\"**/*.synctex(busy)\",\n\t\"**/*.synctex.gz\",\n\t\"**/*.toc\",\n\t\"**/*.xdv\",\n\t\"**/main.pdf\",\n\t\"**/output.pdf\"\n];\nfunction createIgnoreMatcher(patterns) {\n\tconst configured = Array.isArray(patterns) ? patterns.filter((pattern) => typeof pattern === \"string\") : [];\n\tconst allPatterns = [...DEFAULT_IGNORE_PATTERNS, ...configured];\n\treturn (path) => {\n\t\tconst normalized = path.replace(/^\\/+/, \"\");\n\t\treturn normalized.split(\"/\").some((part) => part.startsWith(\".\")) || allPatterns.some((pattern) => minimatch(normalized, pattern, { dot: true }));\n\t};\n}\nfunction normalizePath$1(path) {\n\tconst normalized = `/${posix.normalize(path).replace(/^\\/+/, \"\")}`;\n\tif (normalized.includes(\"/../\") || normalized.endsWith(\"/..\")) throw new Error(`Invalid project path: ${path}`);\n\treturn normalized;\n}\nfunction textContent(content) {\n\tif (content.includes(0)) return;\n\ttry {\n\t\treturn new TextDecoder(\"utf-8\", { fatal: true }).decode(content);\n\t} catch {\n\t\treturn;\n\t}\n}\nvar RemoteProject = class {\n\turl;\n\tprojectId;\n\tcookies;\n\tapi;\n\tidentity;\n\tsocket;\n\tproject;\n\tentries = /* @__PURE__ */ new Map();\n\tidToPath = /* @__PURE__ */ new Map();\n\tcollaboratorNames = /* @__PURE__ */ new Map();\n\tchangeHandler;\n\treconnectHandler;\n\texternalTransport;\n\tconstructor(url, projectId, cookies, transport) {\n\t\tthis.url = url;\n\t\tthis.projectId = projectId;\n\t\tthis.cookies = cookies;\n\t\tthis.externalTransport = transport;\n\t\tthis.api = transport?.api ?? new BaseAPI(url);\n\t}\n\tasync connect() {\n\t\tif (this.externalTransport) {\n\t\t\tthis.identity = this.externalTransport.identity;\n\t\t\tthis.socket = this.externalTransport.socket;\n\t\t} else {\n\t\t\tconst login = await this.api.cookiesLogin(this.cookies);\n\t\t\tif (login.type !== \"success\" || !login.identity) throw new Error(login.message || `Authentication to ${this.url} failed.`);\n\t\t\tthis.identity = login.identity;\n\t\t\tthis.socket = new SocketIOAPI(this.url, this.api, this.identity, this.projectId);\n\t\t}\n\t\tthis.project = await this.socket.joinProject(this.projectId);\n\t\tthis.indexCollaborators();\n\t\tthis.reindex();\n\t\tthis.registerEvents();\n\t}\n\tdisconnect() {\n\t\tif (!this.externalTransport) this.socket?.disconnect();\n\t}\n\tonChange(handler) {\n\t\tthis.changeHandler = handler;\n\t\treturn () => {\n\t\t\tif (this.changeHandler === handler) this.changeHandler = void 0;\n\t\t};\n\t}\n\tonReconnect(handler) {\n\t\tthis.reconnectHandler = handler;\n\t\treturn () => {\n\t\t\tif (this.reconnectHandler === handler) this.reconnectHandler = void 0;\n\t\t};\n\t}\n\tlistEntries() {\n\t\treturn [...this.entries.values()];\n\t}\n\tentry(path) {\n\t\treturn this.entries.get(normalizePath$1(path));\n\t}\n\tasync read(path) {\n\t\tconst entry = this.requireEntry(path);\n\t\tif (entry.type === \"doc\") {\n\t\t\tconst result = await this.socket.joinDoc(entry.entity._id);\n\t\t\treturn new TextEncoder().encode(result.docLines.join(\"\\n\"));\n\t\t}\n\t\tif (entry.type === \"file\") {\n\t\t\tconst result = await this.api.getFile(this.identity, this.projectId, entry.entity._id);\n\t\t\tif (result.type === \"success\" && result.content) return result.content;\n\t\t\tthrow new Error(`Could not download ${path}.`);\n\t\t}\n\t\tthrow new Error(`${path} is not a file.`);\n\t}\n\tasync mkdir(path) {\n\t\tconst normalized = normalizePath$1(path);\n\t\tif (this.entries.has(normalized)) return;\n\t\tconst { parent, name } = await this.ensureParent(normalized);\n\t\tconst result = await this.api.addFolder(this.identity, this.projectId, name, parent._id);\n\t\tif (result.type !== \"success\" || !result.entity) throw new Error(result.message || `Could not create ${normalized}.`);\n\t\tconst folder = result.entity;\n\t\tfolder._type = \"folder\";\n\t\tfolder.docs ??= [];\n\t\tfolder.fileRefs ??= [];\n\t\tfolder.folders ??= [];\n\t\tparent.folders.push(folder);\n\t\tthis.reindex();\n\t}\n\tasync write(path, content) {\n\t\tconst normalized = normalizePath$1(path);\n\t\tconst existing = this.entries.get(normalized);\n\t\tif (existing?.type === \"folder\") throw new Error(`${normalized} is a directory.`);\n\t\tif (existing?.type === \"doc\") {\n\t\t\tawait this.writeDocument(existing.entity, content);\n\t\t\treturn;\n\t\t}\n\t\tif (existing) await this.remove(normalized);\n\t\tconst { parent, name } = await this.ensureParent(normalized);\n\t\tif (textContent(content) !== void 0) {\n\t\t\tconst created = await this.api.addDoc(this.identity, this.projectId, parent._id, name);\n\t\t\tif (created.type !== \"success\" || !created.entity) throw new Error(created.message || `Could not create ${normalized}.`);\n\t\t\tconst entity = created.entity;\n\t\t\tentity._type = \"doc\";\n\t\t\tparent.docs.push(entity);\n\t\t\tthis.reindex();\n\t\t\tif (content.length !== 0) await this.writeDocument(entity, content);\n\t\t\treturn;\n\t\t}\n\t\tconst uploaded = await this.api.uploadFile(this.identity, this.projectId, parent._id, name, content);\n\t\tif (uploaded.type !== \"success\" || !uploaded.entity) throw new Error(uploaded.message || `Could not upload ${normalized}.`);\n\t\tconst entity = uploaded.entity;\n\t\tentity._type = \"file\";\n\t\tparent.fileRefs.push(entity);\n\t\tthis.reindex();\n\t}\n\tasync remove(path) {\n\t\tconst normalized = normalizePath$1(path);\n\t\tconst entry = this.requireEntry(normalized);\n\t\tif (!entry.parent) throw new Error(\"The project root cannot be removed.\");\n\t\tconst result = await this.api.deleteEntity(this.identity, this.projectId, entry.type, entry.entity._id);\n\t\tif (result.type !== \"success\") throw new Error(result.message || `Could not remove ${normalized}.`);\n\t\tthis.removeFromParent(entry);\n\t\tthis.reindex();\n\t}\n\tasync getCurrentVersion() {\n\t\tconst response = await this.api.proxyToHistoryApiAndGetUpdates(this.identity, this.projectId);\n\t\tconst version = response.updates?.updates.at(0)?.toV ?? 0;\n\t\tif (response.type !== \"success\" || !Number.isInteger(version)) throw new Error(response.message || \"Could not determine the current Overleaf project version.\");\n\t\treturn version;\n\t}\n\tasync getFileTreeDiff(from, to) {\n\t\tif (from >= to) return { diff: [] };\n\t\tconst response = await this.api.proxyToHistoryApiAndGetFileTreeDiff(this.identity, this.projectId, from, to);\n\t\tif (response.type === \"success\") return response.treeDiff;\n\t\tif (response.statusCode === 404) return;\n\t\tthrow new Error(response.message || \"Could not load the Overleaf file-tree history.\");\n\t}\n\tasync writeDocument(entity, content) {\n\t\tconst text = textContent(content);\n\t\tif (text === void 0) {\n\t\t\tconst path = this.idToPath.get(entity._id);\n\t\t\tawait this.remove(path);\n\t\t\tawait this.write(path, content);\n\t\t\treturn;\n\t\t}\n\t\tconst remote = await this.socket.joinDoc(entity._id);\n\t\tconst previous = remote.docLines.join(\"\\n\");\n\t\tif (previous === text) return;\n\t\tlet position = 0;\n\t\tconst operations = [];\n\t\tfor (const part of new import_diff_match_patch.default().diff_main(previous, text)) {\n\t\t\tconst start = position;\n\t\t\tif (part[0] !== -1) position += part[1].length;\n\t\t\tif (part[0] === 1) operations.push({\n\t\t\t\tp: start,\n\t\t\t\ti: part[1]\n\t\t\t});\n\t\t\tif (part[0] === -1) operations.push({\n\t\t\t\tp: start,\n\t\t\t\td: part[1]\n\t\t\t});\n\t\t}\n\t\tconst update = {\n\t\t\tdoc: entity._id,\n\t\t\tv: remote.version,\n\t\t\thash: createHash(\"sha1\").update(`blob ${text.length}\\x00${text}`).digest(\"hex\"),\n\t\t\top: operations\n\t\t};\n\t\tawait this.socket.applyOtUpdate(entity._id, update);\n\t}\n\tasync ensureParent(path) {\n\t\tconst name = posix.basename(path);\n\t\tconst parentPath = posix.dirname(path);\n\t\tif (parentPath !== \"/\" && !this.entries.has(parentPath)) await this.mkdir(parentPath);\n\t\tconst parentEntry = parentPath === \"/\" ? this.entries.get(\"/\") : this.entries.get(parentPath);\n\t\tif (!parentEntry || parentEntry.type !== \"folder\") throw new Error(`Parent directory ${parentPath} does not exist.`);\n\t\treturn {\n\t\t\tparent: parentEntry.entity,\n\t\t\tname\n\t\t};\n\t}\n\trequireEntry(path) {\n\t\tconst normalized = normalizePath$1(path);\n\t\tconst entry = this.entries.get(normalized);\n\t\tif (!entry) throw new Error(`Remote path not found: ${normalized}`);\n\t\treturn entry;\n\t}\n\treindex() {\n\t\tthis.entries.clear();\n\t\tthis.idToPath.clear();\n\t\tconst root = this.project.rootFolder[0];\n\t\troot._type = \"folder\";\n\t\tthis.indexFolder(root, \"/\");\n\t}\n\tindexFolder(folder, path, parent) {\n\t\tthis.entries.set(path, {\n\t\t\tpath,\n\t\t\ttype: \"folder\",\n\t\t\tentity: folder,\n\t\t\tparent\n\t\t});\n\t\tthis.idToPath.set(folder._id, path);\n\t\tfor (const child of folder.folders ?? []) {\n\t\t\tchild._type = \"folder\";\n\t\t\tthis.indexFolder(child, normalizePath$1(posix.join(path, child.name)), folder);\n\t\t}\n\t\tfor (const child of folder.docs ?? []) {\n\t\t\tchild._type = \"doc\";\n\t\t\tconst childPath = normalizePath$1(posix.join(path, child.name));\n\t\t\tthis.entries.set(childPath, {\n\t\t\t\tpath: childPath,\n\t\t\t\ttype: \"doc\",\n\t\t\t\tentity: child,\n\t\t\t\tparent: folder\n\t\t\t});\n\t\t\tthis.idToPath.set(child._id, childPath);\n\t\t}\n\t\tfor (const child of folder.fileRefs ?? []) {\n\t\t\tchild._type = \"file\";\n\t\t\tconst childPath = normalizePath$1(posix.join(path, child.name));\n\t\t\tthis.entries.set(childPath, {\n\t\t\t\tpath: childPath,\n\t\t\t\ttype: \"file\",\n\t\t\t\tentity: child,\n\t\t\t\tparent: folder\n\t\t\t});\n\t\t\tthis.idToPath.set(child._id, childPath);\n\t\t}\n\t}\n\tfolderById(id) {\n\t\tconst path = this.idToPath.get(id);\n\t\tconst entry = path ? this.entries.get(path) : void 0;\n\t\treturn entry?.type === \"folder\" ? entry.entity : void 0;\n\t}\n\tremoveFromParent(entry) {\n\t\tif (!entry.parent) return;\n\t\tconst collection = entry.type === \"folder\" ? entry.parent.folders : entry.type === \"doc\" ? entry.parent.docs : entry.parent.fileRefs;\n\t\tconst index = collection.findIndex((item) => item._id === entry.entity._id);\n\t\tif (index !== -1) collection.splice(index, 1);\n\t}\n\temitChange(path, previousPath, actor) {\n\t\tthis.changeHandler?.({\n\t\t\tpath: normalizePath$1(path),\n\t\t\tpreviousPath,\n\t\t\tactor\n\t\t});\n\t}\n\tindexCollaborators() {\n\t\tfor (const member of [this.project.owner, ...this.project.members]) {\n\t\t\tif (!member?._id) continue;\n\t\t\tconst name = [member.first_name, member.last_name].filter(Boolean).join(\" \").trim();\n\t\t\tif (name) this.collaboratorNames.set(member._id, name);\n\t\t}\n\t}\n\tactor(userId) {\n\t\tif (!userId) return;\n\t\tconst name = this.collaboratorNames.get(userId);\n\t\treturn name ? `${name} (Overleaf)` : `Overleaf user ${userId}`;\n\t}\n\tregisterEvents() {\n\t\tthis.socket.updateEventHandlers({\n\t\t\tonProjectJoined: (project) => {\n\t\t\t\tthis.project = project;\n\t\t\t\tthis.indexCollaborators();\n\t\t\t\tthis.reindex();\n\t\t\t\tthis.reconnectHandler?.();\n\t\t\t},\n\t\t\tonClientUpdated: (user) => {\n\t\t\t\tif (user.user_id && user.name) this.collaboratorNames.set(user.user_id, user.name);\n\t\t\t},\n\t\t\tonFileCreated: (parentId, type, entity) => {\n\t\t\t\tconst parent = this.folderById(parentId);\n\t\t\t\tif (!parent || type === \"outputs\") return;\n\t\t\t\tif (this.idToPath.has(entity._id)) return;\n\t\t\t\tentity._type = type;\n\t\t\t\tif (type === \"folder\") {\n\t\t\t\t\tconst folder = entity;\n\t\t\t\t\tfolder.docs ??= [];\n\t\t\t\t\tfolder.fileRefs ??= [];\n\t\t\t\t\tfolder.folders ??= [];\n\t\t\t\t\tparent.folders.push(folder);\n\t\t\t\t} else if (type === \"doc\") parent.docs.push(entity);\n\t\t\t\telse parent.fileRefs.push(entity);\n\t\t\t\tconst parentPath = this.idToPath.get(parentId) ?? \"/\";\n\t\t\t\tthis.reindex();\n\t\t\t\tthis.emitChange(posix.join(parentPath, entity.name));\n\t\t\t},\n\t\t\tonFileRenamed: (entityId, newName) => {\n\t\t\t\tconst previousPath = this.idToPath.get(entityId);\n\t\t\t\tif (!previousPath) return;\n\t\t\t\tthis.entries.get(previousPath).entity.name = newName;\n\t\t\t\tthis.reindex();\n\t\t\t\tthis.emitChange(this.idToPath.get(entityId), previousPath);\n\t\t\t},\n\t\t\tonFileRemoved: (entityId) => {\n\t\t\t\tconst previousPath = this.idToPath.get(entityId);\n\t\t\t\tif (!previousPath) return;\n\t\t\t\tconst entry = this.entries.get(previousPath);\n\t\t\t\tthis.removeFromParent(entry);\n\t\t\t\tthis.reindex();\n\t\t\t\tthis.emitChange(previousPath);\n\t\t\t},\n\t\t\tonFileMoved: (entityId, parentId) => {\n\t\t\t\tconst previousPath = this.idToPath.get(entityId);\n\t\t\t\tconst nextParent = this.folderById(parentId);\n\t\t\t\tif (!previousPath || !nextParent) return;\n\t\t\t\tconst entry = this.entries.get(previousPath);\n\t\t\t\tthis.removeFromParent(entry);\n\t\t\t\tif (entry.type === \"folder\") nextParent.folders.push(entry.entity);\n\t\t\t\telse if (entry.type === \"doc\") nextParent.docs.push(entry.entity);\n\t\t\t\telse nextParent.fileRefs.push(entry.entity);\n\t\t\t\tthis.reindex();\n\t\t\t\tthis.emitChange(this.idToPath.get(entityId), previousPath);\n\t\t\t},\n\t\t\tonFileChanged: (update) => {\n\t\t\t\tconst path = this.idToPath.get(update.doc);\n\t\t\t\tif (path) this.emitChange(path, void 0, this.actor(update.meta?.user_id));\n\t\t\t}\n\t\t});\n\t}\n};\nconst decoder = new TextDecoder(\"utf-8\", { fatal: true });\nfunction decode(content) {\n\tif (content === void 0) return \"\";\n\tif (content.includes(0)) return;\n\ttry {\n\t\treturn decoder.decode(content);\n\t} catch {\n\t\treturn;\n\t}\n}\nfunction lineStarts(content) {\n\tconst starts = [0];\n\tfor (let index = 0; index < content.length; index++) if (content[index] === \"\\n\" && index + 1 < content.length) starts.push(index + 1);\n\treturn starts;\n}\nfunction lineAt(starts, offset) {\n\tlet low = 0;\n\tlet high = starts.length;\n\twhile (low < high) {\n\t\tconst middle = Math.floor((low + high) / 2);\n\t\tif (starts[middle] <= offset) low = middle + 1;\n\t\telse high = middle;\n\t}\n\treturn Math.max(1, low);\n}\nfunction toLineRange(content, start, end) {\n\tconst starts = lineStarts(content);\n\tconst safeStart = Math.min(start, Math.max(0, content.length - 1));\n\tconst safeEnd = Math.min(Math.max(start, end - 1), Math.max(0, content.length - 1));\n\treturn {\n\t\tstart: lineAt(starts, safeStart),\n\t\tend: lineAt(starts, safeEnd)\n\t};\n}\nfunction mergeRanges(ranges) {\n\tconst merged = [];\n\tfor (const range of ranges.sort((a, b) => a.start - b.start)) {\n\t\tconst previous = merged.at(-1);\n\t\tif (previous && range.start <= previous.end + 1) previous.end = Math.max(previous.end, range.end);\n\t\telse merged.push({ ...range });\n\t}\n\treturn merged;\n}\nfunction formatRanges(ranges) {\n\tconst shown = ranges.slice(0, 3).map((range) => range.start === range.end ? String(range.start) : `${range.start}-${range.end}`);\n\treturn `${shown.join(\", \")}${ranges.length > shown.length ? ` (+${ranges.length - shown.length} more)` : \"\"}`;\n}\nfunction describeContentChange(before, after) {\n\tif (before && after && Buffer.from(before).equals(Buffer.from(after))) return;\n\tconst oldText = decode(before);\n\tconst newText = decode(after);\n\tif (oldText === void 0 || newText === void 0) return `binary bytes ${before?.byteLength ?? 0} -> ${after?.byteLength ?? 0}`;\n\tif (oldText.length === 0 && newText.length === 0) return;\n\tif (oldText.length === 0) {\n\t\tconst count = lineStarts(newText).length;\n\t\treturn `added lines ${count === 1 ? \"1\" : `1-${count}`}`;\n\t}\n\tif (newText.length === 0) {\n\t\tconst count = lineStarts(oldText).length;\n\t\treturn `removed lines ${count === 1 ? \"1\" : `1-${count}`}`;\n\t}\n\tconst changes = [];\n\tlet oldOffset = 0;\n\tlet newOffset = 0;\n\tlet current;\n\tconst finish = () => {\n\t\tif (current) {\n\t\t\tchanges.push(current);\n\t\t\tcurrent = void 0;\n\t\t}\n\t};\n\tfor (const [operation, value] of new import_diff_match_patch.default().diff_main(oldText, newText)) {\n\t\tif (operation === 0) {\n\t\t\tfinish();\n\t\t\toldOffset += value.length;\n\t\t\tnewOffset += value.length;\n\t\t\tcontinue;\n\t\t}\n\t\tcurrent ??= {\n\t\t\toldStart: oldOffset,\n\t\t\toldEnd: oldOffset,\n\t\t\tnewStart: newOffset,\n\t\t\tnewEnd: newOffset\n\t\t};\n\t\tif (operation === -1) oldOffset += value.length;\n\t\tif (operation === 1) newOffset += value.length;\n\t\tcurrent.oldEnd = oldOffset;\n\t\tcurrent.newEnd = newOffset;\n\t}\n\tfinish();\n\tconst ranges = mergeRanges(changes.map((change) => change.newEnd > change.newStart ? toLineRange(newText, change.newStart, change.newEnd) : toLineRange(oldText, change.oldStart, change.oldEnd)));\n\treturn ranges.length === 0 ? void 0 : `lines ${formatRanges(ranges)}`;\n}\nconst textDecoder = new TextDecoder(\"utf-8\", { fatal: true });\nconst textEncoder = new TextEncoder();\nfunction decodeText(content) {\n\tif (content.includes(0)) return;\n\ttry {\n\t\treturn textDecoder.decode(content);\n\t} catch {\n\t\treturn;\n\t}\n}\nfunction splitLines(content) {\n\treturn content.match(/[^\\n]*\\n|[^\\n]+$/g) ?? [];\n}\nfunction encodeTextBase(content) {\n\treturn decodeText(content);\n}\nfunction mergeText(baseContent, localContent, remoteContent) {\n\tconst base = decodeText(baseContent);\n\tconst local = decodeText(localContent);\n\tconst remote = decodeText(remoteContent);\n\tif (base === void 0 || local === void 0 || remote === void 0) return { status: \"binary\" };\n\tconst regions = diff3Merge(splitLines(local), splitLines(base), splitLines(remote), { excludeFalseConflicts: true });\n\tif (regions.some((region) => region.conflict !== void 0)) return { status: \"conflict\" };\n\treturn {\n\t\tstatus: \"merged\",\n\t\tcontent: textEncoder.encode(regions.flatMap((region) => region.ok ?? []).join(\"\"))\n\t};\n}\nfunction sha256(content) {\n\treturn createHash(\"sha256\").update(content).digest(\"hex\");\n}\nfunction createSyncState(projectUri, remoteVersion, initialized = true) {\n\treturn {\n\t\tschemaVersion: 1,\n\t\tprojectUri,\n\t\tremoteVersion,\n\t\tinitialized,\n\t\tfiles: {},\n\t\ttextBases: {},\n\t\tconflicts: {}\n\t};\n}\nfunction updateSyncCheckpoint(state, path, content) {\n\tstate.files[path] = sha256(content);\n\tconst textBase = encodeTextBase(content);\n\tif (textBase === void 0) delete state.textBases[path];\n\telse state.textBases[path] = textBase;\n}\nfunction removeSyncCheckpoint(state, path) {\n\tconst checkpointPaths = /* @__PURE__ */ new Set([...Object.keys(state.files), ...Object.keys(state.conflicts)]);\n\tfor (const checkpointPath of checkpointPaths) if (checkpointPath === path || checkpointPath.startsWith(`${path}/`)) {\n\t\tdelete state.files[checkpointPath];\n\t\tdelete state.textBases[checkpointPath];\n\t\tdelete state.conflicts[checkpointPath];\n\t}\n}\nfunction readTextBase(state, path) {\n\tconst textBase = state?.textBases[path];\n\treturn textBase === void 0 ? void 0 : new TextEncoder().encode(textBase);\n}\nfunction normalizePath(path) {\n\treturn `/${posix.normalize(path).replace(/^\\/+/, \"\")}`;\n}\nfunction isRemoteFile(entry) {\n\treturn entry?.type === \"doc\" || entry?.type === \"file\";\n}\nvar SyncEngine = class {\n\toptions;\n\tstate;\n\tqueue = Promise.resolve();\n\tconflicts = /* @__PURE__ */ new Set();\n\tstopLocalWatch;\n\tstopRemoteChange;\n\tstopRemoteReconnect;\n\teventTimers = /* @__PURE__ */ new Map();\n\tstopped = false;\n\tfailedPaths = /* @__PURE__ */ new Map();\n\tretryTimer;\n\tretryDelayMs = 3e4;\n\tpendingRemoteVersion;\n\tpendingInitialization = false;\n\tget syncError() {\n\t\tif (this.failedPaths.size === 0) return;\n\t\tconst [path, failure] = this.failedPaths.entries().next().value;\n\t\treturn `${this.failedPaths.size} path(s) could not synchronize, including ${path}: ${failure.message}. Other paths remain active; failed paths will retry automatically.`;\n\t}\n\tconstructor(options) {\n\t\tthis.options = options;\n\t}\n\tasync start() {\n\t\tthis.stopped = false;\n\t\tconst startup = this.enqueue(() => this.initialize());\n\t\ttry {\n\t\t\tawait startup;\n\t\t} catch (error) {\n\t\t\tawait this.stop();\n\t\t\tthrow error;\n\t\t}\n\t}\n\tasync initialize() {\n\t\tthis.state = await this.options.stateStore.load();\n\t\tthis.stopLocalWatch = await this.options.local.watch((path) => this.schedule(path, \"local\"));\n\t\tthis.stopRemoteChange = this.options.remote.onChange((change) => {\n\t\t\tif (this.stopped) return;\n\t\t\tif (change.previousPath) this.schedule(change.previousPath, \"remote\", change.actor);\n\t\t\tthis.schedule(change.path, \"remote\", change.actor);\n\t\t});\n\t\tthis.stopRemoteReconnect = this.options.remote.onReconnect?.(() => {\n\t\t\tif (this.stopped) return;\n\t\t\tthis.queue = this.queue.then(() => this.reconcileAfterReconnect()).catch((error) => {\n\t\t\t\tthis.options.log(`Failed to reconcile after reconnecting: ${error instanceof Error ? error.message : String(error)}`);\n\t\t\t});\n\t\t});\n\t\tconst currentVersion = await this.options.remote.getCurrentVersion();\n\t\tconst localFiles = await this.options.local.listFiles();\n\t\tconst remoteFiles = this.remoteFilePaths();\n\t\tthis.options.log(`Checking replica at Overleaf version ${currentVersion}: ${localFiles.length} local file(s), ${remoteFiles.length} remote file(s).`);\n\t\tif (!this.state || !this.state.initialized) await this.initializeState(currentVersion, localFiles, remoteFiles);\n\t\telse {\n\t\t\tthis.restoreConflicts();\n\t\t\tawait this.startupReconcile(currentVersion, localFiles, remoteFiles);\n\t\t}\n\t\tthis.options.log(this.syncError ? `Synchronization active with pending retries. ${this.syncError}` : `Synchronization active at Overleaf version ${this.state.remoteVersion}.`);\n\t}\n\tasync stop() {\n\t\tthis.stopped = true;\n\t\tif (this.retryTimer) {\n\t\t\tclearTimeout(this.retryTimer);\n\t\t\tthis.retryTimer = void 0;\n\t\t}\n\t\tthis.stopRemoteChange?.();\n\t\tthis.stopRemoteChange = void 0;\n\t\tthis.stopRemoteReconnect?.();\n\t\tthis.stopRemoteReconnect = void 0;\n\t\tfor (const pending of this.eventTimers.values()) clearTimeout(pending.timer);\n\t\tthis.eventTimers.clear();\n\t\tawait this.stopLocalWatch?.();\n\t\tthis.stopLocalWatch = void 0;\n\t\tawait this.queue;\n\t}\n\tgetConflicts() {\n\t\treturn [...this.conflicts].sort();\n\t}\n\tasync resolveConflict(path, winner) {\n\t\tconst normalized = normalizePath(path);\n\t\tif (!this.conflicts.has(normalized)) throw new Error(`No unresolved conflict exists for ${normalized}.`);\n\t\tawait this.enqueue(async () => {\n\t\t\tconst remoteEntry = this.options.remote.entry(normalized);\n\t\t\tif (winner === \"local\") {\n\t\t\t\tconst localContent = await this.options.local.read(normalized);\n\t\t\t\tif (localContent) {\n\t\t\t\t\tawait this.options.remote.write(normalized, localContent);\n\t\t\t\t\tconst synchronized = await this.options.remote.read(normalized);\n\t\t\t\t\tif (sha256(synchronized) !== sha256(localContent)) await this.options.local.write(normalized, synchronized);\n\t\t\t\t\tupdateSyncCheckpoint(this.state, normalized, synchronized);\n\t\t\t\t} else {\n\t\t\t\t\tif (remoteEntry) await this.options.remote.remove(normalized);\n\t\t\t\t\tremoveSyncCheckpoint(this.state, normalized);\n\t\t\t\t}\n\t\t\t} else if (isRemoteFile(remoteEntry)) {\n\t\t\t\tconst remoteContent = await this.options.remote.read(normalized);\n\t\t\t\tawait this.options.local.write(normalized, remoteContent);\n\t\t\t\tupdateSyncCheckpoint(this.state, normalized, remoteContent);\n\t\t\t} else {\n\t\t\t\tawait this.options.local.remove(normalized);\n\t\t\t\tremoveSyncCheckpoint(this.state, normalized);\n\t\t\t}\n\t\t\tthis.conflicts.delete(normalized);\n\t\t\tdelete this.state.conflicts[normalized];\n\t\t\tawait this.options.stateStore.save(this.state);\n\t\t\tthis.options.log(`Resolved ${normalized} using ${winner === \"local\" ? \"local\" : \"Overleaf\"} content.`);\n\t\t});\n\t}\n\tasync retry(path) {\n\t\tconst normalized = normalizePath(path);\n\t\tconst reason = this.state.conflicts[normalized];\n\t\tthis.conflicts.delete(normalized);\n\t\tdelete this.state.conflicts[normalized];\n\t\ttry {\n\t\t\tawait this.enqueue(() => this.reconcilePath(normalized, \"local\"));\n\t\t} catch (error) {\n\t\t\tif (reason !== void 0) {\n\t\t\t\tthis.conflicts.add(normalized);\n\t\t\t\tthis.state.conflicts[normalized] = reason;\n\t\t\t\tawait this.options.stateStore.save(this.state);\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\t}\n\tasync initializeState(currentVersion, localFiles, remoteFiles) {\n\t\tif (!this.state) {\n\t\t\tthis.state = createSyncState(this.options.projectUri, currentVersion, false);\n\t\t\tawait this.options.stateStore.save(this.state);\n\t\t}\n\t\tthis.restoreConflicts();\n\t\tthis.pendingRemoteVersion = currentVersion;\n\t\tthis.pendingInitialization = true;\n\t\tconst paths = /* @__PURE__ */ new Set([\n\t\t\t...localFiles,\n\t\t\t...remoteFiles,\n\t\t\t...Object.keys(this.state.files)\n\t\t]);\n\t\tfor (const path of [...paths].sort()) {\n\t\t\tconst normalized = normalizePath(path);\n\t\t\tif (this.conflicts.has(normalized)) continue;\n\t\t\ttry {\n\t\t\t\tif (this.state.files[normalized] !== void 0) await this.synchronizePath(normalized, \"local\");\n\t\t\t\telse await this.initializePath(normalized);\n\t\t\t} catch (error) {\n\t\t\t\tthis.recordFailure(normalized, \"local\", error);\n\t\t\t}\n\t\t}\n\t\tawait this.finishRemoteBatch();\n\t\tif (this.conflicts.size !== 0) this.options.log(`Synchronization remains active; ${this.conflicts.size} conflicting path(s) are paused.`);\n\t}\n\tasync initializePath(path) {\n\t\tconst remoteEntry = this.options.remote.entry(path);\n\t\tif (remoteEntry?.type === \"folder\") return;\n\t\tconst localContent = await this.options.local.read(path);\n\t\tconst remoteContent = isRemoteFile(remoteEntry) ? await this.options.remote.read(path) : void 0;\n\t\tif ((localContent && sha256(localContent)) === (remoteContent && sha256(remoteContent))) {\n\t\t\tif (localContent) {\n\t\t\t\tupdateSyncCheckpoint(this.state, path, localContent);\n\t\t\t\tawait this.options.stateStore.save(this.state);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tif (!localContent && remoteContent) {\n\t\t\tawait this.options.local.write(path, remoteContent);\n\t\t\tupdateSyncCheckpoint(this.state, path, remoteContent);\n\t\t\tawait this.options.stateStore.save(this.state);\n\t\t\tthis.logChange(\"pull\", \"add\", path, void 0, remoteContent);\n\t\t\treturn;\n\t\t}\n\t\tawait this.recordConflict(path, remoteContent ? \"Local and Overleaf content differ, but no common checkpoint exists.\" : \"The local path has no matching Overleaf file and no common checkpoint exists.\");\n\t}\n\trestoreConflicts() {\n\t\tfor (const [path, reason] of Object.entries(this.state.conflicts)) {\n\t\t\tif (this.conflicts.has(path)) continue;\n\t\t\tthis.conflicts.add(path);\n\t\t\tthis.options.onConflict(path, reason);\n\t\t}\n\t}\n\tasync recordConflict(path, reason) {\n\t\tthis.conflicts.add(path);\n\t\tthis.state.conflicts[path] = reason;\n\t\tawait this.options.stateStore.save(this.state);\n\t\tthis.options.onConflict(path, reason);\n\t}\n\tasync startupReconcile(currentVersion, localFiles, remoteFiles) {\n\t\tconst state = this.state;\n\t\tif (state.remoteVersion > currentVersion) throw new Error(\"Synchronization paused: the local checkpoint is newer than the Overleaf project history.\");\n\t\tconst localHashes = /* @__PURE__ */ new Map();\n\t\tfor (const path of localFiles) {\n\t\t\tconst content = await this.options.local.read(path);\n\t\t\tif (content) localHashes.set(path, sha256(content));\n\t\t}\n\t\tconst localChanged = /* @__PURE__ */ new Set();\n\t\tfor (const path of /* @__PURE__ */ new Set([...Object.keys(state.files), ...localFiles])) if (state.files[path] !== localHashes.get(path)) localChanged.add(path);\n\t\tlet remoteDiff = { diff: [] };\n\t\tif (state.remoteVersion < currentVersion) {\n\t\t\tremoteDiff = await this.options.remote.getFileTreeDiff(state.remoteVersion, currentVersion);\n\t\t\tif (!remoteDiff) throw new Error(\"Synchronization paused: Overleaf history is unavailable, so remote changes cannot be distinguished safely.\");\n\t\t}\n\t\tconst candidates = /* @__PURE__ */ new Set([...localChanged, ...this.failedPaths.keys()]);\n\t\tconst knownFiles = /* @__PURE__ */ new Set([\n\t\t\t...Object.keys(state.files),\n\t\t\t...localFiles,\n\t\t\t...remoteFiles\n\t\t]);\n\t\tfor (const path of [...localFiles, ...remoteFiles]) if (state.files[path] === void 0) candidates.add(path);\n\t\tfor (const change of remoteDiff.diff) {\n\t\t\tif (!change.operation) continue;\n\t\t\tconst paths = [change.pathname, change.newPathname].filter((path) => Boolean(path));\n\t\t\tfor (const changedPath of paths.map(normalizePath)) {\n\t\t\t\tlet matched = false;\n\t\t\t\tfor (const filePath of knownFiles) if (filePath === changedPath || filePath.startsWith(`${changedPath}/`)) {\n\t\t\t\t\tcandidates.add(filePath);\n\t\t\t\t\tmatched = true;\n\t\t\t\t}\n\t\t\t\tif (!matched) candidates.add(changedPath);\n\t\t\t}\n\t\t}\n\t\tthis.pendingRemoteVersion = currentVersion;\n\t\tthis.options.log(`Reconciling ${candidates.size} changed path(s).`);\n\t\tfor (const path of [...candidates].sort()) {\n\t\t\tif (this.stopped) return;\n\t\t\ttry {\n\t\t\t\tawait this.synchronizePath(path, localChanged.has(path) ? \"local\" : \"remote\");\n\t\t\t} catch (error) {\n\t\t\t\tthis.recordFailure(path, localChanged.has(path) ? \"local\" : \"remote\", error);\n\t\t\t}\n\t\t}\n\t\tawait this.finishRemoteBatch();\n\t\tif (this.conflicts.size !== 0) this.options.log(`Synchronization remains active; ${this.conflicts.size} conflicting path(s) are paused.`);\n\t}\n\tasync reconcileAfterReconnect() {\n\t\tif (this.stopped) return;\n\t\tconst currentVersion = await this.options.remote.getCurrentVersion();\n\t\tawait this.startupReconcile(currentVersion, await this.options.local.listFiles(), this.remoteFilePaths());\n\t\tthis.options.log(this.syncError ? `Realtime connection restored; ${this.syncError}` : `Realtime connection restored at Overleaf version ${currentVersion}.`);\n\t}\n\tschedule(path, source, actor) {\n\t\tconst normalized = normalizePath(path);\n\t\tif (this.stopped || this.shouldIgnore(normalized) || this.conflicts.has(normalized)) return;\n\t\tconst previous = this.eventTimers.get(normalized);\n\t\tif (previous) clearTimeout(previous.timer);\n\t\tconst actors = previous?.actors ?? /* @__PURE__ */ new Set();\n\t\tlet unknownRemoteActor = previous?.unknownRemoteActor ?? false;\n\t\tif (source === \"remote\") {\n\t\t\tif (actor) actors.add(actor);\n\t\t\telse unknownRemoteActor = true;\n\t\t}\n\t\tconst pending = {\n\t\t\tsource: previous?.source === \"local\" || source === \"local\" ? \"local\" : \"remote\",\n\t\t\tactors,\n\t\t\tunknownRemoteActor,\n\t\t\ttimer: setTimeout(() => {\n\t\t\t\tthis.eventTimers.delete(normalized);\n\t\t\t\tif (this.stopped) return;\n\t\t\t\tconst remoteActor = pending.unknownRemoteActor ? void 0 : pending.actors.size === 1 ? [...pending.actors][0] : pending.actors.size > 1 ? \"multiple Overleaf collaborators\" : void 0;\n\t\t\t\tthis.queue = this.queue.then(() => this.synchronizePath(normalized, pending.source, remoteActor)).catch((error) => {\n\t\t\t\t\tthis.recordFailure(normalized, pending.source, error, remoteActor);\n\t\t\t\t});\n\t\t\t}, 250)\n\t\t};\n\t\tthis.eventTimers.set(normalized, pending);\n\t}\n\tasync synchronizePath(path, source, actor) {\n\t\tif (this.pendingInitialization && this.state.files[path] === void 0) await this.initializePath(path);\n\t\telse await this.reconcilePath(path, source, actor);\n\t\tif (this.failedPaths.delete(path)) this.options.onSyncError?.(this.syncError);\n\t}\n\trecordFailure(path, source, error, actor) {\n\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\tthis.failedPaths.set(path, {\n\t\t\tsource,\n\t\t\tactor,\n\t\t\tmessage\n\t\t});\n\t\tthis.options.log(`Failed to synchronize ${path}: ${message}; retrying without stopping other paths.`);\n\t\tthis.options.onSyncError?.(this.syncError);\n\t\tthis.scheduleRetry();\n\t}\n\tscheduleRetry() {\n\t\tif (this.stopped || this.retryTimer || this.failedPaths.size === 0) return;\n\t\tthis.retryTimer = setTimeout(() => {\n\t\t\tthis.retryTimer = void 0;\n\t\t\tthis.enqueue(async () => {\n\t\t\t\tif (this.stopped) return;\n\t\t\t\tfor (const [path, failure] of Array.from(this.failedPaths)) {\n\t\t\t\t\tif (this.stopped) return;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait this.synchronizePath(path, failure.source, failure.actor);\n\t\t\t\t\t\tthis.options.log(`Recovered synchronization for ${path}.`);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\t\t\t\tthis.failedPaths.set(path, {\n\t\t\t\t\t\t\t...failure,\n\t\t\t\t\t\t\tmessage\n\t\t\t\t\t\t});\n\t\t\t\t\t\tthis.options.log(`Retry failed for ${path}: ${message}`);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tawait this.finishRemoteBatch();\n\t\t\t}).catch((error) => this.options.log(`Could not checkpoint retry batch: ${String(error)}`)).finally(() => {\n\t\t\t\tthis.retryDelayMs = this.failedPaths.size ? Math.min(this.retryDelayMs * 2, 12e4) : 3e4;\n\t\t\t\tthis.scheduleRetry();\n\t\t\t});\n\t\t}, this.retryDelayMs);\n\t}\n\tasync finishRemoteBatch() {\n\t\tif (this.stopped || this.failedPaths.size || this.pendingRemoteVersion === void 0) return;\n\t\tthis.state.remoteVersion = this.pendingRemoteVersion;\n\t\tif (this.pendingInitialization) this.state.initialized = true;\n\t\tawait this.options.stateStore.save(this.state);\n\t\tthis.pendingRemoteVersion = void 0;\n\t\tthis.pendingInitialization = false;\n\t}\n\tenqueue(operation) {\n\t\tconst result = this.queue.then(operation);\n\t\tthis.queue = result.then(() => void 0, () => void 0);\n\t\treturn result;\n\t}\n\tasync reconcilePath(path, source, actor) {\n\t\tconst normalized = normalizePath(path);\n\t\tif (this.stopped || this.shouldIgnore(normalized) || this.conflicts.has(normalized)) return;\n\t\tconst remoteEntry = this.options.remote.entry(normalized);\n\t\tif (remoteEntry?.type === \"folder\") return;\n\t\tconst localContent = await this.options.local.read(normalized);\n\t\tconst remoteContent = isRemoteFile(remoteEntry) ? await this.options.remote.read(normalized) : void 0;\n\t\tconst baseHash = this.state.files[normalized];\n\t\tconst baseContent = readTextBase(this.state, normalized);\n\t\tconst localHash = localContent && sha256(localContent);\n\t\tconst remoteHash = remoteContent && sha256(remoteContent);\n\t\tif (localHash === remoteHash) {\n\t\t\tif (localHash !== baseHash) {\n\t\t\t\tif (localContent) updateSyncCheckpoint(this.state, normalized, localContent);\n\t\t\t\telse removeSyncCheckpoint(this.state, normalized);\n\t\t\t\tawait this.options.stateStore.save(this.state);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tconst localChanged = localHash !== baseHash;\n\t\tconst remoteChanged = remoteHash !== baseHash;\n\t\tif (localChanged && remoteChanged) {\n\t\t\tif (baseContent && localContent && remoteContent) {\n\t\t\t\tconst merged = mergeText(baseContent, localContent, remoteContent);\n\t\t\t\tif (merged.status === \"merged\" && merged.content) {\n\t\t\t\t\tawait this.options.local.write(normalized, merged.content);\n\t\t\t\t\tawait this.options.remote.write(normalized, merged.content);\n\t\t\t\t\tupdateSyncCheckpoint(this.state, normalized, merged.content);\n\t\t\t\t\tawait this.options.stateStore.save(this.state);\n\t\t\t\t\tthis.logChange(\"merge\", \"update\", normalized, baseContent, merged.content, actor);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\tawait this.recordConflict(normalized, \"Both local and Overleaf content changed since the last synchronized checkpoint.\");\n\t\t\treturn;\n\t\t}\n\t\tif (source === \"remote\" && localChanged && !remoteChanged) return;\n\t\tif (localChanged || !remoteChanged && source === \"local\") {\n\t\t\tlet pushedContent = localContent;\n\t\t\tif (!localContent) {\n\t\t\t\tif (remoteEntry) await this.options.remote.remove(normalized);\n\t\t\t\tremoveSyncCheckpoint(this.state, normalized);\n\t\t\t} else {\n\t\t\t\tawait this.options.remote.write(normalized, localContent);\n\t\t\t\tconst synchronized = await this.options.remote.read(normalized);\n\t\t\t\tif (sha256(synchronized) !== sha256(localContent)) await this.options.local.write(normalized, synchronized);\n\t\t\t\tpushedContent = synchronized;\n\t\t\t\tupdateSyncCheckpoint(this.state, normalized, synchronized);\n\t\t\t}\n\t\t\tawait this.options.stateStore.save(this.state);\n\t\t\tif (!localContent && remoteEntry) this.logChange(\"push\", \"delete\", normalized, baseContent ?? remoteContent, void 0, actor);\n\t\t\telse if (localContent) this.logChange(\"push\", remoteEntry ? \"update\" : \"add\", normalized, baseContent ?? remoteContent, pushedContent, actor);\n\t\t\treturn;\n\t\t}\n\t\tif (!remoteContent) {\n\t\t\tif (localContent) await this.options.local.remove(normalized);\n\t\t\tremoveSyncCheckpoint(this.state, normalized);\n\t\t} else {\n\t\t\tawait this.options.local.write(normalized, remoteContent);\n\t\t\tupdateSyncCheckpoint(this.state, normalized, remoteContent);\n\t\t}\n\t\tawait this.options.stateStore.save(this.state);\n\t\tif (!remoteContent && localContent) this.logChange(\"pull\", \"delete\", normalized, baseContent ?? localContent, void 0, actor);\n\t\telse if (remoteContent) this.logChange(\"pull\", localContent ? \"update\" : \"add\", normalized, baseContent ?? localContent, remoteContent, actor);\n\t}\n\tlogChange(direction, operation, path, before, after, actor) {\n\t\tconst summary = describeContentChange(before, after);\n\t\tconst source = direction === \"push\" ? \"local filesystem\" : direction === \"pull\" ? actor ?? \"Overleaf\" : `local filesystem + ${actor ?? \"Overleaf\"}`;\n\t\tthis.options.log([\n\t\t\t`[${direction}] ${operation} ${JSON.stringify(path)}`,\n\t\t\tsummary,\n\t\t\t`source=${source}`\n\t\t].filter(Boolean).join(\"; \"));\n\t}\n\tremoteFilePaths() {\n\t\treturn this.options.remote.listEntries().filter((entry) => isRemoteFile(entry) && !this.shouldIgnore(entry.path)).map((entry) => entry.path);\n\t}\n\tshouldIgnore(path) {\n\t\treturn this.options.ignore(path) || path.split(\"/\").some((part) => part.startsWith(\".\"));\n\t}\n};\nconst HASH_PATTERN = /^[a-f0-9]{64}$/;\nconst encoder = new TextEncoder();\nfunction json(value) {\n\treturn `${JSON.stringify(value, null, 2)}\\n`;\n}\nfunction pathKey(path) {\n\treturn sha256(encoder.encode(path));\n}\nasync function readJson(path) {\n\treturn JSON.parse(await readFile(path, \"utf8\"));\n}\nasync function listFiles(directory) {\n\tconst result = [];\n\tconst visit = async (current) => {\n\t\tlet entries;\n\t\ttry {\n\t\t\tentries = await readdir(current, { withFileTypes: true });\n\t\t} catch (error) {\n\t\t\tif (error.code === \"ENOENT\") return;\n\t\t\tthrow error;\n\t\t}\n\t\tfor (const entry of entries) {\n\t\t\tconst path = join(current, entry.name);\n\t\t\tif (entry.isDirectory()) await visit(path);\n\t\t\telse if (entry.isFile()) result.push(path);\n\t\t}\n\t};\n\tawait visit(directory);\n\treturn result;\n}\nasync function atomicWrite(path, content) {\n\tawait mkdir(dirname(path), { recursive: true });\n\tconst temporary = `${path}.${process.pid}.${randomUUID()}.tmp`;\n\ttry {\n\t\tawait writeFile(temporary, content);\n\t\tawait rename(temporary, path);\n\t} finally {\n\t\tawait rm(temporary, { force: true });\n\t}\n}\nfunction parseFormat(value, projectUri) {\n\tif (typeof value !== \"object\" || value === null) return false;\n\tconst format = value;\n\treturn format.schemaVersion === 1 && format.projectUri === projectUri;\n}\nfunction parseCursor(value) {\n\tif (typeof value !== \"object\" || value === null) return false;\n\tconst cursor = value;\n\treturn Number.isInteger(cursor.remoteVersion) && cursor.remoteVersion >= 0 && typeof cursor.initialized === \"boolean\";\n}\nfunction parsePathRecord(value) {\n\tif (typeof value !== \"object\" || value === null) return false;\n\tconst record = value;\n\tif (typeof record.path !== \"string\" || !record.path.startsWith(\"/\")) return false;\n\tif (record.hash !== void 0 && (typeof record.hash !== \"string\" || !HASH_PATTERN.test(record.hash))) return false;\n\tif (record.baseHash !== void 0 && (typeof record.baseHash !== \"string\" || !HASH_PATTERN.test(record.baseHash) || record.hash !== record.baseHash)) return false;\n\tif (record.conflict !== void 0 && typeof record.conflict !== \"string\") return false;\n\treturn record.hash !== void 0 || record.conflict !== void 0;\n}\nfunction createRecord(state, path) {\n\tconst hash = state.files[path];\n\tconst textBase = state.textBases[path];\n\tconst conflict = state.conflicts[path];\n\tif (hash === void 0 && conflict === void 0) return;\n\treturn {\n\t\tpath,\n\t\t...hash === void 0 ? {} : { hash },\n\t\t...textBase === void 0 ? {} : { baseHash: hash },\n\t\t...conflict === void 0 ? {} : { conflict }\n\t};\n}\nvar FileSyncStateStore = class {\n\tprojectUri;\n\tlegacyPath;\n\tsyncDirectory;\n\tformatPath;\n\tcursorPath;\n\tpathsDirectory;\n\tbasesDirectory;\n\tpersistedRecords = /* @__PURE__ */ new Map();\n\tpersistedCursor;\n\tinvalidRecordPaths = /* @__PURE__ */ new Set();\n\tinitialized = false;\n\tconstructor(directory, projectUri) {\n\t\tthis.projectUri = projectUri;\n\t\tconst overleafDirectory = resolve(directory, \".overleaf\");\n\t\tthis.legacyPath = join(overleafDirectory, \"sync-state.json\");\n\t\tthis.syncDirectory = join(overleafDirectory, \"sync\");\n\t\tthis.formatPath = join(this.syncDirectory, \"format.json\");\n\t\tthis.cursorPath = join(this.syncDirectory, \"cursor.json\");\n\t\tthis.pathsDirectory = join(this.syncDirectory, \"paths\");\n\t\tthis.basesDirectory = join(this.syncDirectory, \"bases\");\n\t}\n\tasync load() {\n\t\tthis.invalidRecordPaths.clear();\n\t\ttry {\n\t\t\tconst format = await readJson(this.formatPath);\n\t\t\tconst cursor = await readJson(this.cursorPath);\n\t\t\tif (!parseFormat(format, this.projectUri) || !parseCursor(cursor)) return;\n\t\t\tconst state = {\n\t\t\t\tschemaVersion: 1,\n\t\t\t\tprojectUri: this.projectUri,\n\t\t\t\tremoteVersion: cursor.remoteVersion,\n\t\t\t\tinitialized: cursor.initialized,\n\t\t\t\tfiles: {},\n\t\t\t\ttextBases: {},\n\t\t\t\tconflicts: {}\n\t\t\t};\n\t\t\tconst records = /* @__PURE__ */ new Map();\n\t\t\tconst referencedBases = /* @__PURE__ */ new Set();\n\t\t\tlet stateIncomplete = false;\n\t\t\tfor (const recordPath of await listFiles(this.pathsDirectory)) {\n\t\t\t\tconst record = await this.loadRecord(recordPath);\n\t\t\t\tif (!record) {\n\t\t\t\t\tif (recordPath.endsWith(\".json\")) {\n\t\t\t\t\t\tthis.invalidRecordPaths.add(recordPath);\n\t\t\t\t\t\tstateIncomplete = true;\n\t\t\t\t\t} else await rm(recordPath, { force: true });\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (record.hash !== void 0) state.files[record.path] = record.hash;\n\t\t\t\tif (record.baseHash !== void 0) {\n\t\t\t\t\tlet textBase;\n\t\t\t\t\ttry {\n\t\t\t\t\t\ttextBase = await readFile(this.basePath(record.baseHash), \"utf8\");\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tif (error.code === \"ENOENT\") {\n\t\t\t\t\t\t\tthis.invalidRecordPaths.add(recordPath);\n\t\t\t\t\t\t\tstateIncomplete = true;\n\t\t\t\t\t\t\tdelete state.files[record.path];\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthrow error;\n\t\t\t\t\t}\n\t\t\t\t\tif (sha256(encoder.encode(textBase)) !== record.baseHash) {\n\t\t\t\t\t\tthis.invalidRecordPaths.add(recordPath);\n\t\t\t\t\t\tstateIncomplete = true;\n\t\t\t\t\t\tdelete state.files[record.path];\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tstate.textBases[record.path] = textBase;\n\t\t\t\t\treferencedBases.add(record.baseHash);\n\t\t\t\t}\n\t\t\t\tif (record.conflict !== void 0) state.conflicts[record.path] = record.conflict;\n\t\t\t\trecords.set(record.path, json(record));\n\t\t\t}\n\t\t\tif (stateIncomplete) state.initialized = false;\n\t\t\tawait this.removeOrphanBases(referencedBases);\n\t\t\tthis.persistedRecords = records;\n\t\t\tthis.persistedCursor = json(cursor);\n\t\t\tthis.initialized = true;\n\t\t\treturn state;\n\t\t} catch (error) {\n\t\t\tif (error.code === \"ENOENT\" || error instanceof SyntaxError) return;\n\t\t\tthrow error;\n\t\t}\n\t}\n\tasync save(state) {\n\t\tif (state.projectUri !== this.projectUri || state.schemaVersion !== 1) throw new Error(\"Cannot persist synchronization state for a different project or schema.\");\n\t\tif (!this.initialized) await this.initializeStorage();\n\t\tconst paths = /* @__PURE__ */ new Set([\n\t\t\t...this.persistedRecords.keys(),\n\t\t\t...Object.keys(state.files),\n\t\t\t...Object.keys(state.conflicts)\n\t\t]);\n\t\tconst obsoleteBases = /* @__PURE__ */ new Set();\n\t\tfor (const path of [...paths].sort()) {\n\t\t\tconst record = createRecord(state, path);\n\t\t\tconst serialized = record && json(record);\n\t\t\tconst previous = this.persistedRecords.get(path);\n\t\t\tif (serialized === previous) continue;\n\t\t\tif (previous) {\n\t\t\t\tconst previousRecord = JSON.parse(previous);\n\t\t\t\tif (previousRecord.baseHash) obsoleteBases.add(previousRecord.baseHash);\n\t\t\t}\n\t\t\tif (!record || !serialized) {\n\t\t\t\tawait rm(this.recordPath(path), { force: true });\n\t\t\t\tthis.persistedRecords.delete(path);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (record.baseHash) {\n\t\t\t\tconst textBase = state.textBases[path];\n\t\t\t\tif (textBase === void 0 || sha256(encoder.encode(textBase)) !== record.baseHash) throw new Error(`Text checkpoint does not match its content hash: ${path}`);\n\t\t\t\tawait this.writeBase(record.baseHash, textBase);\n\t\t\t}\n\t\t\tconst destination = this.recordPath(path);\n\t\t\tawait atomicWrite(destination, serialized);\n\t\t\tthis.invalidRecordPaths.delete(destination);\n\t\t\tthis.persistedRecords.set(path, serialized);\n\t\t}\n\t\tconst cursor = json({\n\t\t\tremoteVersion: state.remoteVersion,\n\t\t\tinitialized: state.initialized\n\t\t});\n\t\tif (cursor !== this.persistedCursor) {\n\t\t\tawait atomicWrite(this.cursorPath, cursor);\n\t\t\tthis.persistedCursor = cursor;\n\t\t}\n\t\tif (state.initialized) {\n\t\t\tawait Promise.all([...this.invalidRecordPaths].map((path) => rm(path, { force: true })));\n\t\t\tthis.invalidRecordPaths.clear();\n\t\t}\n\t\tawait rm(this.legacyPath, { force: true });\n\t\tawait this.removeObsoleteBases(state, obsoleteBases);\n\t}\n\tasync initializeStorage() {\n\t\tawait rm(this.syncDirectory, {\n\t\t\trecursive: true,\n\t\t\tforce: true\n\t\t});\n\t\tawait mkdir(this.pathsDirectory, { recursive: true });\n\t\tawait mkdir(this.basesDirectory, { recursive: true });\n\t\tawait atomicWrite(this.formatPath, json({\n\t\t\tschemaVersion: 1,\n\t\t\tprojectUri: this.projectUri\n\t\t}));\n\t\tthis.persistedRecords.clear();\n\t\tthis.persistedCursor = void 0;\n\t\tthis.invalidRecordPaths.clear();\n\t\tthis.initialized = true;\n\t}\n\trecordPath(path) {\n\t\tconst key = pathKey(path);\n\t\treturn join(this.pathsDirectory, key.slice(0, 2), `${key}.json`);\n\t}\n\tasync loadRecord(recordPath) {\n\t\tif (!recordPath.endsWith(\".json\")) return;\n\t\ttry {\n\t\t\tconst record = await readJson(recordPath);\n\t\t\tif (!parsePathRecord(record) || recordPath !== this.recordPath(record.path)) return;\n\t\t\treturn record;\n\t\t} catch (error) {\n\t\t\tif (error.code === \"ENOENT\" || error instanceof SyntaxError) return;\n\t\t\tthrow error;\n\t\t}\n\t}\n\tbasePath(hash) {\n\t\treturn join(this.basesDirectory, hash.slice(0, 2), `${hash}.txt`);\n\t}\n\tasync writeBase(hash, content) {\n\t\tconst path = this.basePath(hash);\n\t\ttry {\n\t\t\tif (sha256(encoder.encode(await readFile(path, \"utf8\"))) === hash) return;\n\t\t} catch (error) {\n\t\t\tif (error.code !== \"ENOENT\") throw error;\n\t\t}\n\t\tawait atomicWrite(path, content);\n\t}\n\tasync removeObsoleteBases(state, candidates) {\n\t\tif (candidates.size === 0) return;\n\t\tconst referenced = /* @__PURE__ */ new Set();\n\t\tfor (const [path, textBase] of Object.entries(state.textBases)) if (textBase !== void 0 && state.files[path] !== void 0) referenced.add(state.files[path]);\n\t\tfor (const hash of candidates) if (!referenced.has(hash)) await rm(this.basePath(hash), { force: true });\n\t}\n\tasync removeOrphanBases(referencedHashes) {\n\t\tconst referencedPaths = new Set([...referencedHashes].map((hash) => this.basePath(hash)));\n\t\tfor (const path of await listFiles(this.basesDirectory)) if (!referencedPaths.has(path)) await rm(path, { force: true });\n\t}\n};\nasync function startServe(directory = process.cwd(), options = {}) {\n\tconst root = resolve(directory);\n\tconst settings = await readProjectSettings(root);\n\tconst session = await getServerSession(settings.serverName);\n\tif (!session) throw new Error(`No login is stored for ${settings.serverName}. Run: leafrelay login ${settings.serverName}`);\n\tconst cookie = options.cookie || process.env.LEAFRELAY_COOKIE || session.identity.cookies;\n\tconst remote = options.remote ?? new RemoteProject(session.url || settings.serverUrl, settings.projectId, cookie);\n\tawait remote.connect();\n\tconst configuredPatterns = settings.localReplica.settings[\"ignore-patterns\"];\n\tconst ignore = createIgnoreMatcher(configuredPatterns);\n\tconst local = new NodeReplicaFileSystem(root, ignore);\n\tconst engine = new SyncEngine({\n\t\tprojectUri: settings.uri,\n\t\tlocal,\n\t\tremote,\n\t\tstateStore: new FileSyncStateStore(root, settings.uri),\n\t\tignore,\n\t\tonSyncError: options.onSyncError,\n\t\tlog: options.log ?? log,\n\t\tonConflict: options.onConflict ?? ((path, reason) => {\n\t\t\t(options.log ?? log)(`Conflict paused for ${path}: ${reason}`);\n\t\t})\n\t});\n\ttry {\n\t\tawait engine.start();\n\t} catch (error) {\n\t\tremote.disconnect();\n\t\tthrow error;\n\t}\n\t(options.log ?? log)(`LeafRelay is serving ${root} (${settings.projectName}).`);\n\treturn {\n\t\troot,\n\t\tserverName: settings.serverName,\n\t\tprojectId: settings.projectId,\n\t\tprojectName: settings.projectName,\n\t\tsyncError: () => engine.syncError,\n\t\tconflicts: () => engine.getConflicts(),\n\t\tresolveConflict: (path, winner) => engine.resolveConflict(path, winner),\n\t\tretry: (path) => engine.retry(path),\n\t\tstop: async () => {\n\t\t\tawait engine.stop();\n\t\t\tremote.disconnect();\n\t\t}\n\t};\n}\n// ../protocol/dist/index.js\nconst RPC_METHOD = {\n\tinitialize: \"leafrelay/initialize\",\n\tdaemonStatus: \"leafrelay/daemon/status\",\n\tdaemonShutdown: \"leafrelay/daemon/shutdown\",\n\treplicaAttach: \"leafrelay/replica/attach\",\n\treplicaDetach: \"leafrelay/replica/detach\",\n\treplicaResolveConflict: \"leafrelay/replica/resolveConflict\",\n\treplicaRetry: \"leafrelay/replica/retry\",\n\tsessionImport: \"leafrelay/session/import\",\n\tsessionLogin: \"leafrelay/session/login\",\n\tsessionLogout: \"leafrelay/session/logout\",\n\tserverList: \"leafrelay/server/list\",\n\tserverAdd: \"leafrelay/server/add\",\n\tserverRemove: \"leafrelay/server/remove\",\n\tserverCall: \"leafrelay/server/call\",\n\tprojectOpen: \"leafrelay/project/open\",\n\tprojectClose: \"leafrelay/project/close\",\n\tprojectCall: \"leafrelay/project/call\"\n};\nconst RPC_NOTIFICATION = {\n\tlog: \"leafrelay/log\",\n\treplicaStatus: \"leafrelay/replica/status\",\n\treplicaConflict: \"leafrelay/replica/conflict\",\n\tprojectEvent: \"leafrelay/project/event\"\n};\n// src/codec.ts\nfunction isEncodedBinary(value) {\n\treturn typeof value === \"object\" && value !== null && value.$leafrelay === \"bytes\" && typeof value.base64 === \"string\";\n}\nfunction encodeRpcValue(value) {\n\tif (value instanceof Uint8Array) return {\n\t\t$leafrelay: \"bytes\",\n\t\tbase64: Buffer.from(value).toString(\"base64\")\n\t};\n\tif (Array.isArray(value)) return value.map(encodeRpcValue);\n\tif (typeof value === \"object\" && value !== null) return Object.fromEntries(Object.entries(value).map(([key, child]) => [key, encodeRpcValue(child)]));\n\treturn value;\n}\nfunction decodeRpcValue(value) {\n\tif (isEncodedBinary(value)) return Uint8Array.from(Buffer.from(value.base64, \"base64\"));\n\tif (Array.isArray(value)) return value.map(decodeRpcValue);\n\tif (typeof value === \"object\" && value !== null) return Object.fromEntries(Object.entries(value).map(([key, child]) => [key, decodeRpcValue(child)]));\n\treturn value;\n}\n// src/paths.ts\nfunction daemonPaths(environment = process.env) {\n\tconst home = environment.LEAFRELAY_HOME ? resolve(environment.LEAFRELAY_HOME) : join(homedir(), \".leafrelay\");\n\treturn {\n\t\thome,\n\t\tsocketPath: process.platform === \"win32\" ? `\\\\\\\\.\\\\pipe\\\\leafrelay-${createHash(\"sha256\").update(home).digest(\"hex\").slice(0, 16)}` : join(home, \"daemon.sock\"),\n\t\tmetadataPath: join(home, \"daemon.json\"),\n\t\tlogPath: join(home, \"daemon.log\"),\n\t\tstartupLockPath: join(home, \"daemon.starting\")\n\t};\n}\n// src/transport.ts\nconst CLOSED_SOCKET_ERRORS = /* @__PURE__ */ new Set([\n\t\"EPIPE\",\n\t\"ECONNRESET\",\n\t\"ERR_SOCKET_CLOSED\",\n\t\"ERR_STREAM_DESTROYED\",\n\t\"ERR_STREAM_WRITE_AFTER_END\"\n]);\nvar LeafRelaySocketWriter = class extends SocketMessageWriter {\n\ttransportSocket;\n\tconstructor(transportSocket) {\n\t\tsuper(transportSocket);\n\t\tthis.transportSocket = transportSocket;\n\t}\n\tasync write(message) {\n\t\ttry {\n\t\t\tawait super.write(message);\n\t\t} catch (error) {\n\t\t\tconst code = error.code;\n\t\t\tif (this.transportSocket.destroyed || this.transportSocket.writableEnded || code && CLOSED_SOCKET_ERRORS.has(code)) return;\n\t\t\tthrow error;\n\t\t}\n\t}\n};\nfunction createSocketRpcConnection(socket) {\n\treturn createMessageConnection(new SocketMessageReader(socket), new LeafRelaySocketWriter(socket));\n}\n// src/networkRuntime.ts\nconst SERVER_OPERATIONS = /* @__PURE__ */ new Set([\n\t\"userProjectsJson\",\n\t\"getProjectsJson\",\n\t\"projectEntitiesJson\",\n\t\"newProject\",\n\t\"cloneProject\",\n\t\"renameProject\",\n\t\"deleteProject\",\n\t\"archiveProject\",\n\t\"unarchiveProject\",\n\t\"trashProject\",\n\t\"untrashProject\",\n\t\"getFile\",\n\t\"addDoc\",\n\t\"uploadFile\",\n\t\"uploadProject\",\n\t\"addFolder\",\n\t\"deleteEntity\",\n\t\"deleteAuxFiles\",\n\t\"renameEntity\",\n\t\"moveEntity\",\n\t\"compile\",\n\t\"stopCompile\",\n\t\"indexAll\",\n\t\"getMetadata\",\n\t\"proxyRequestToSpellingApi\",\n\t\"spellingControllerLearn\",\n\t\"spellingControllerUnlearn\",\n\t\"getProjectSettings\",\n\t\"updateProjectSettings\",\n\t\"getFileFromClsi\",\n\t\"proxySyncPdf\",\n\t\"proxySyncCode\",\n\t\"getAllTags\",\n\t\"createTag\",\n\t\"renameTag\",\n\t\"deleteTag\",\n\t\"addProjectToTag\",\n\t\"removeProjectFromTag\",\n\t\"proxyToHistoryApiAndGetUpdates\",\n\t\"proxyToHistoryApiAndGetFileDiff\",\n\t\"proxyToHistoryApiAndGetFileTreeDiff\",\n\t\"downloadZipOfVersion\",\n\t\"getLabels\",\n\t\"createLabel\",\n\t\"deleteLabel\",\n\t\"getMessages\",\n\t\"sendMessage\",\n\t\"refreshLinkedFile\",\n\t\"createLinkedFile\"\n]);\nconst PROJECT_OPERATIONS = /* @__PURE__ */ new Set([\n\t\"init\",\n\t\"joinProject\",\n\t\"joinDoc\",\n\t\"leaveDoc\",\n\t\"applyOtUpdate\",\n\t\"getConnectedUsers\",\n\t\"updatePosition\",\n\t\"syncFileChanges\"\n]);\nconst REMOTE_PROJECT_OPERATIONS = /* @__PURE__ */ new Set([\n\t\"entry\",\n\t\"listEntries\",\n\t\"read\",\n\t\"write\",\n\t\"mkdir\",\n\t\"remove\",\n\t\"getCurrentVersion\",\n\t\"getFileTreeDiff\"\n]);\nvar NetworkRuntimeRegistry = class {\n\tevents;\n\tservers = /* @__PURE__ */ new Map();\n\tprojects = /* @__PURE__ */ new Map();\n\tconstructor(events) {\n\t\tthis.events = events;\n\t}\n\tget projectCount() {\n\t\treturn this.projects.size;\n\t}\n\tasync listServers() {\n\t\tconst config = await readConfig();\n\t\tconst keys = /* @__PURE__ */ new Set([...Object.keys(config.knownServers ?? {}), ...Object.keys(config.servers)]);\n\t\tif (keys.size === 0) keys.add(\"www.overleaf.com\");\n\t\treturn [...keys].sort().map((key) => {\n\t\t\tconst session = config.servers[key];\n\t\t\tconst known = config.knownServers?.[key];\n\t\t\treturn {\n\t\t\t\tname: known?.name ?? key,\n\t\t\t\turl: known?.url ?? session?.url ?? normalizeServerUrl(key),\n\t\t\t\tloggedIn: Boolean(session),\n\t\t\t\tuserId: session?.userId,\n\t\t\t\tuserEmail: session?.userEmail\n\t\t\t};\n\t\t});\n\t}\n\tasync addServer(name, url) {\n\t\tawait saveKnownServer(name, url);\n\t}\n\tasync removeServer(server) {\n\t\tconst key = serverKey(server);\n\t\tfor (const project of this.projects.values()) if (project.server.key === key) await this.stopProject(project);\n\t\tthis.servers.delete(key);\n\t\tawait removeKnownServer(server);\n\t}\n\tasync login(params) {\n\t\tconst url = normalizeServerUrl(params.server);\n\t\tconst scheduler = new HttpRequestScheduler({ onRateLimit: (until) => this.events.log(\"warn\", `${serverKey(url)} is rate limited until ${new Date(until).toISOString()}.`) });\n\t\tconst api = new ExtendedBaseAPI(url, scheduler);\n\t\tconst response = params.cookie ? await api.cookiesLogin(params.cookie) : await api.passportLogin(params.email ?? \"\", params.password ?? \"\");\n\t\tif (response.type !== \"success\" || !response.identity || !response.userInfo) throw new Error(response.message || `Login to ${url} failed.`);\n\t\tconst session = {\n\t\t\turl,\n\t\t\tuserId: response.userInfo.userId,\n\t\t\tuserEmail: response.userInfo.userEmail || params.email || \"\",\n\t\t\tidentity: response.identity,\n\t\t\tupdatedAt: (/* @__PURE__ */ new Date()).toISOString()\n\t\t};\n\t\tawait saveServerSession(session);\n\t\tthis.servers.set(serverKey(url), {\n\t\t\tkey: serverKey(url),\n\t\t\tsession,\n\t\t\tscheduler,\n\t\t\tapi\n\t\t});\n\t\treturn {\n\t\t\tuserId: session.userId,\n\t\t\tuserEmail: session.userEmail\n\t\t};\n\t}\n\tasync importSession(params) {\n\t\tconst result = await this.login({\n\t\t\tserver: params.url,\n\t\t\tcookie: params.identity.cookies\n\t\t});\n\t\tawait saveKnownServer(params.name, params.url);\n\t\treturn result;\n\t}\n\tasync logout(server) {\n\t\tconst runtime = await this.requireServer(server);\n\t\tawait runtime.api.logout(runtime.session.identity);\n\t\tawait removeServerSession(server);\n\t\tthis.servers.delete(runtime.key);\n\t}\n\tasync callServer(server, operation, args) {\n\t\tif (!SERVER_OPERATIONS.has(operation)) throw new Error(`Unsupported server operation: ${operation}.`);\n\t\tconst runtime = await this.requireServer(server);\n\t\tconst method = runtime.api[operation];\n\t\tif (typeof method !== \"function\") throw new Error(`Server operation ${operation} is unavailable.`);\n\t\treturn method.call(runtime.api, runtime.session.identity, ...args);\n\t}\n\tasync openProject(clientId, server, projectId) {\n\t\tconst runtime = await this.getOrCreateProject(server, projectId);\n\t\tconst shared = runtime.owners.size !== 0 || runtime.replicaReferences !== 0;\n\t\truntime.owners.add(clientId);\n\t\tawait runtime.ready;\n\t\treturn {\n\t\t\tprojectKey: runtime.key,\n\t\t\tshared\n\t\t};\n\t}\n\tcloseProject(clientId, projectKey) {\n\t\tconst runtime = this.requireProject(projectKey);\n\t\truntime.owners.delete(clientId);\n\t\tthis.scheduleProjectStop(runtime);\n\t}\n\tasync callProject(projectKey, operation, args) {\n\t\tconst runtime = this.requireProject(projectKey);\n\t\tawait runtime.ready;\n\t\tif (operation.startsWith(\"remote.\")) {\n\t\t\tconst remoteOperation = operation.slice(7);\n\t\t\tif (!REMOTE_PROJECT_OPERATIONS.has(remoteOperation)) throw new Error(`Unsupported remote project operation: ${remoteOperation}.`);\n\t\t\tconst method = runtime.remote[remoteOperation];\n\t\t\tif (typeof method !== \"function\") throw new Error(`Remote project operation ${remoteOperation} is unavailable.`);\n\t\t\treturn this.enqueueProjectOperation(runtime, () => method.apply(runtime.remote, args));\n\t\t}\n\t\tif (!PROJECT_OPERATIONS.has(operation)) throw new Error(`Unsupported project operation: ${operation}.`);\n\t\tconst method = runtime.socket[operation];\n\t\tif (typeof method !== \"function\") throw new Error(`Project operation ${operation} is unavailable.`);\n\t\treturn method.apply(runtime.socket, args);\n\t}\n\tasync acquireReplica(server, projectId) {\n\t\tconst runtime = await this.getOrCreateProject(server, projectId);\n\t\truntime.replicaReferences += 1;\n\t\tawait runtime.ready;\n\t\tlet released = false;\n\t\treturn {\n\t\t\tremote: this.replicaRemote(runtime),\n\t\t\trelease: () => {\n\t\t\t\tif (released) return;\n\t\t\t\treleased = true;\n\t\t\t\truntime.replicaReferences -= 1;\n\t\t\t\tthis.scheduleProjectStop(runtime);\n\t\t\t}\n\t\t};\n\t}\n\tdetachClient(clientId) {\n\t\tfor (const runtime of this.projects.values()) if (runtime.owners.delete(clientId)) this.scheduleProjectStop(runtime);\n\t}\n\tasync stopAll() {\n\t\tawait Promise.all([...this.projects.values()].map((runtime) => this.stopProject(runtime)));\n\t\tthis.servers.clear();\n\t}\n\tasync requireServer(server) {\n\t\tconst key = serverKey(server);\n\t\tconst existing = this.servers.get(key);\n\t\tif (existing) return existing;\n\t\tconst session = await getServerSession(server);\n\t\tif (!session) throw new Error(`Not logged in to ${key}.`);\n\t\tconst scheduler = new HttpRequestScheduler({ onRateLimit: (until) => this.events.log(\"warn\", `${key} is rate limited until ${new Date(until).toISOString()}.`) });\n\t\tconst runtime = {\n\t\t\tkey,\n\t\t\tsession,\n\t\t\tscheduler,\n\t\t\tapi: new ExtendedBaseAPI(session.url, scheduler)\n\t\t};\n\t\tthis.servers.set(key, runtime);\n\t\treturn runtime;\n\t}\n\tasync getOrCreateProject(server, projectId) {\n\t\tconst serverRuntime = await this.requireServer(server);\n\t\tconst key = `${serverRuntime.key}:${projectId}`;\n\t\tconst existing = this.projects.get(key);\n\t\tif (existing) return existing;\n\t\tconst socket = new SocketIOAPI(serverRuntime.session.url, serverRuntime.api, serverRuntime.session.identity, projectId);\n\t\tconst remote = new RemoteProject(serverRuntime.session.url, projectId, serverRuntime.session.identity.cookies, {\n\t\t\tapi: serverRuntime.api,\n\t\t\tidentity: serverRuntime.session.identity,\n\t\t\tsocket\n\t\t});\n\t\tconst runtime = {\n\t\t\tkey,\n\t\t\tserver: serverRuntime,\n\t\t\tprojectId,\n\t\t\tsocket,\n\t\t\tremote,\n\t\t\tready: Promise.resolve(),\n\t\t\towners: /* @__PURE__ */ new Set(),\n\t\t\treplicaReferences: 0,\n\t\t\toperationQueue: Promise.resolve()\n\t\t};\n\t\truntime.ready = remote.connect().then(() => this.registerProjectEvents(runtime)).catch((error) => {\n\t\t\tthis.projects.delete(key);\n\t\t\tsocket.disconnect();\n\t\t\tthrow error;\n\t\t});\n\t\tthis.projects.set(key, runtime);\n\t\treturn runtime;\n\t}\n\tregisterProjectEvents(runtime) {\n\t\tconst emit = (event, ...args) => this.events.projectEvent(runtime.owners, {\n\t\t\tprojectKey: runtime.key,\n\t\t\tevent,\n\t\t\targs\n\t\t});\n\t\truntime.socket.updateEventHandlers({\n\t\t\tonFileCreated: (...args) => emit(\"onFileCreated\", ...args),\n\t\t\tonFileRenamed: (...args) => emit(\"onFileRenamed\", ...args),\n\t\t\tonFileRemoved: (...args) => emit(\"onFileRemoved\", ...args),\n\t\t\tonFileMoved: (...args) => emit(\"onFileMoved\", ...args),\n\t\t\tonFileChanged: (...args) => emit(\"onFileChanged\", ...args),\n\t\t\tonDisconnected: (reason) => emit(\"onDisconnected\", reason),\n\t\t\tonConnectionAccepted: (...args) => emit(\"onConnectionAccepted\", ...args),\n\t\t\tonClientUpdated: (...args) => emit(\"onClientUpdated\", ...args),\n\t\t\tonClientDisconnected: (...args) => emit(\"onClientDisconnected\", ...args),\n\t\t\tonReceivedMessage: (...args) => emit(\"onReceivedMessage\", ...args),\n\t\t\tonSpellCheckLanguageUpdated: (...args) => emit(\"onSpellCheckLanguageUpdated\", ...args),\n\t\t\tonCompilerUpdated: (...args) => emit(\"onCompilerUpdated\", ...args),\n\t\t\tonRootDocUpdated: (...args) => emit(\"onRootDocUpdated\", ...args)\n\t\t});\n\t}\n\trequireProject(projectKey) {\n\t\tconst runtime = this.projects.get(projectKey);\n\t\tif (!runtime) throw new Error(`Unknown project runtime ${projectKey}.`);\n\t\treturn runtime;\n\t}\n\treplicaRemote(runtime) {\n\t\treturn {\n\t\t\tconnect: async () => {},\n\t\t\tdisconnect: () => {},\n\t\t\tlistEntries: () => runtime.remote.listEntries(),\n\t\t\tentry: (path) => runtime.remote.entry(path),\n\t\t\tread: (path) => this.enqueueProjectOperation(runtime, () => runtime.remote.read(path)),\n\t\t\twrite: (path, content) => this.enqueueProjectOperation(runtime, () => runtime.remote.write(path, content)),\n\t\t\tremove: (path) => this.enqueueProjectOperation(runtime, () => runtime.remote.remove(path)),\n\t\t\tgetCurrentVersion: () => this.enqueueProjectOperation(runtime, () => runtime.remote.getCurrentVersion()),\n\t\t\tgetFileTreeDiff: (from, to) => this.enqueueProjectOperation(runtime, () => runtime.remote.getFileTreeDiff(from, to)),\n\t\t\tonChange: (handler) => runtime.remote.onChange(handler),\n\t\t\tonReconnect: (handler) => runtime.remote.onReconnect(handler)\n\t\t};\n\t}\n\tenqueueProjectOperation(runtime, operation) {\n\t\tconst result = runtime.operationQueue.then(operation);\n\t\truntime.operationQueue = result.then(() => void 0, () => void 0);\n\t\treturn result;\n\t}\n\tscheduleProjectStop(runtime) {\n\t\tif (runtime.owners.size !== 0 || runtime.replicaReferences !== 0) return;\n\t\tthis.stopProject(runtime);\n\t}\n\tasync stopProject(runtime) {\n\t\tif (!this.projects.delete(runtime.key)) return;\n\t\truntime.socket.disconnect();\n\t}\n};\n// src/replicaRegistry.ts\nvar ReplicaAlreadyActiveError = class extends Error {\n\tprojectId;\n\tactiveRoot;\n\trequestedRoot;\n\tcode = \"ReplicaAlreadyActive\";\n\tconstructor(projectId, activeRoot, requestedRoot) {\n\t\tsuper(`Overleaf project ${projectId} is already synchronized by ${activeRoot}; ${requestedRoot} cannot become a second writable replica.`);\n\t\tthis.projectId = projectId;\n\t\tthis.activeRoot = activeRoot;\n\t\tthis.requestedRoot = requestedRoot;\n\t}\n};\nvar ReplicaRegistry = class {\n\tevents;\n\tstart;\n\tbyId = /* @__PURE__ */ new Map();\n\tbyRoot = /* @__PURE__ */ new Map();\n\tbyProject = /* @__PURE__ */ new Map();\n\tprojectOperations = /* @__PURE__ */ new Map();\n\tclients = /* @__PURE__ */ new Set();\n\tconstructor(events, start = startServe) {\n\t\tthis.events = events;\n\t\tthis.start = start;\n\t}\n\tget size() {\n\t\treturn this.byId.size;\n\t}\n\tregisterClient(clientId) {\n\t\tthis.clients.add(clientId);\n\t}\n\tasync attach(clientId, params) {\n\t\tconst root = await realpath(resolve(params.directory));\n\t\tconst settings = await readProjectSettings(root);\n\t\tconst projectKey = `${settings.serverName}\\0${settings.projectId}`;\n\t\treturn this.withProjectLock(projectKey, () => this.attachResolved(clientId, params, root, settings, projectKey));\n\t}\n\tasync attachResolved(clientId, params, root, settings, projectKey) {\n\t\tif (!this.clients.has(clientId)) throw new Error(\"The replica client disconnected before attachment started.\");\n\t\tconst rootEntry = this.byRoot.get(root);\n\t\tif (rootEntry) {\n\t\t\tif (rootEntry.projectKey !== projectKey) throw new Error(`${root} is already registered for another Overleaf project.`);\n\t\t\tthis.addOwner(rootEntry, clientId);\n\t\t\treturn this.result(rootEntry, true);\n\t\t}\n\t\tconst projectEntry = this.byProject.get(projectKey);\n\t\tif (projectEntry) throw new ReplicaAlreadyActiveError(settings.projectId, projectEntry.root, root);\n\t\tconst id = randomUUID();\n\t\tconst owners = /* @__PURE__ */ new Set([clientId]);\n\t\tconst status = { state: \"starting\" };\n\t\tlet entry;\n\t\tthis.events.status(owners, {\n\t\t\treplicaId: id,\n\t\t\tstatus\n\t\t});\n\t\tthis.events.log(`[${settings.projectName}] Starting synchronization for ${root}.`);\n\t\ttry {\n\t\t\tconst running = await this.start(root, {\n\t\t\t\tcookie: params.cookie,\n\t\t\t\tonSyncError: (message) => {\n\t\t\t\t\tif (!entry) return;\n\t\t\t\t\tentry.status = message ? {\n\t\t\t\t\t\tstate: \"error\",\n\t\t\t\t\t\tmessage\n\t\t\t\t\t} : entry.running.conflicts().length ? { state: \"paused\" } : { state: \"active\" };\n\t\t\t\t\tthis.events.status(entry.owners, {\n\t\t\t\t\t\treplicaId: id,\n\t\t\t\t\t\tstatus: entry.status\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tlog: (message) => this.events.log(`[${settings.projectName}] ${message}`),\n\t\t\t\tonConflict: (path, reason) => {\n\t\t\t\t\tif (!entry) return;\n\t\t\t\t\tentry.status = {\n\t\t\t\t\t\tstate: \"paused\",\n\t\t\t\t\t\tmessage: `Conflict in ${path}`\n\t\t\t\t\t};\n\t\t\t\t\tthis.events.conflict(entry.owners, {\n\t\t\t\t\t\treplicaId: entry.id,\n\t\t\t\t\t\tpath,\n\t\t\t\t\t\treason,\n\t\t\t\t\t\tconflicts: entry.running.conflicts()\n\t\t\t\t\t});\n\t\t\t\t\tthis.events.status(entry.owners, {\n\t\t\t\t\t\treplicaId: entry.id,\n\t\t\t\t\t\tstatus: entry.status\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t\tif (!this.clients.has(clientId)) {\n\t\t\t\tawait running.stop();\n\t\t\t\tthis.events.empty();\n\t\t\t\tthrow new Error(\"The replica client disconnected before attachment completed.\");\n\t\t\t}\n\t\t\tentry = {\n\t\t\t\tid,\n\t\t\t\troot,\n\t\t\t\tprojectKey,\n\t\t\t\tserverName: settings.serverName,\n\t\t\t\tprojectId: settings.projectId,\n\t\t\t\tprojectName: settings.projectName,\n\t\t\t\towners,\n\t\t\t\trunning,\n\t\t\t\tstatus: running.syncError() ? {\n\t\t\t\t\tstate: \"error\",\n\t\t\t\t\tmessage: running.syncError()\n\t\t\t\t} : running.conflicts().length === 0 ? { state: \"active\" } : { state: \"paused\" }\n\t\t\t};\n\t\t\tthis.byId.set(id, entry);\n\t\t\tthis.byRoot.set(root, entry);\n\t\t\tthis.byProject.set(projectKey, entry);\n\t\t\tthis.events.status(owners, {\n\t\t\t\treplicaId: id,\n\t\t\t\tstatus: entry.status\n\t\t\t});\n\t\t\treturn this.result(entry, false);\n\t\t} catch (error) {\n\t\t\tconst failed = {\n\t\t\t\tstate: \"error\",\n\t\t\t\tmessage: error instanceof Error ? error.message : String(error)\n\t\t\t};\n\t\t\tthis.events.status(owners, {\n\t\t\t\treplicaId: id,\n\t\t\t\tstatus: failed\n\t\t\t});\n\t\t\tthrow error;\n\t\t}\n\t}\n\tasync detach(clientId, replicaId) {\n\t\tconst entry = this.require(replicaId);\n\t\tawait this.withProjectLock(entry.projectKey, async () => {\n\t\t\tentry.owners.delete(clientId);\n\t\t\tif (entry.owners.size === 0) await this.stop(entry);\n\t\t});\n\t}\n\tasync detachClient(clientId) {\n\t\tthis.clients.delete(clientId);\n\t\tconst owned = [...this.byId.values()].filter((entry) => entry.owners.has(clientId));\n\t\tawait Promise.all(owned.map((entry) => this.withProjectLock(entry.projectKey, async () => {\n\t\t\tentry.owners.delete(clientId);\n\t\t\tif (entry.owners.size === 0) await this.stop(entry);\n\t\t})));\n\t}\n\tasync resolveConflict(replicaId, path, winner) {\n\t\tconst entry = this.require(replicaId);\n\t\tawait entry.running.resolveConflict(path, winner);\n\t\tentry.status = entry.running.syncError() ? {\n\t\t\tstate: \"error\",\n\t\t\tmessage: entry.running.syncError()\n\t\t} : entry.running.conflicts().length === 0 ? { state: \"active\" } : { state: \"paused\" };\n\t\tthis.events.status(entry.owners, {\n\t\t\treplicaId,\n\t\t\tstatus: entry.status\n\t\t});\n\t}\n\tasync retry(replicaId, path) {\n\t\tconst entry = this.require(replicaId);\n\t\tawait entry.running.retry(path);\n\t\tentry.status = entry.running.syncError() ? {\n\t\t\tstate: \"error\",\n\t\t\tmessage: entry.running.syncError()\n\t\t} : entry.running.conflicts().length === 0 ? { state: \"active\" } : { state: \"paused\" };\n\t\tthis.events.status(entry.owners, {\n\t\t\treplicaId,\n\t\t\tstatus: entry.status\n\t\t});\n\t}\n\tlist() {\n\t\treturn [...this.byId.values()].map((entry) => ({\n\t\t\tid: entry.id,\n\t\t\troot: entry.root,\n\t\t\tserverName: entry.serverName,\n\t\t\tprojectId: entry.projectId,\n\t\t\tprojectName: entry.projectName,\n\t\t\tclients: entry.owners.size,\n\t\t\tstatus: entry.status,\n\t\t\tconflicts: entry.running.conflicts()\n\t\t}));\n\t}\n\tasync stopAll() {\n\t\tawait Promise.all([...this.byId.values()].map((entry) => this.stop(entry)));\n\t}\n\taddOwner(entry, clientId) {\n\t\tentry.owners.add(clientId);\n\t}\n\tasync stop(entry) {\n\t\tif (!this.byId.delete(entry.id)) return;\n\t\tthis.byRoot.delete(entry.root);\n\t\tthis.byProject.delete(entry.projectKey);\n\t\tentry.status = { state: \"stopping\" };\n\t\tthis.events.status(entry.owners, {\n\t\t\treplicaId: entry.id,\n\t\t\tstatus: entry.status\n\t\t});\n\t\tawait entry.running.stop();\n\t\tthis.events.empty();\n\t}\n\trequire(replicaId) {\n\t\tconst entry = this.byId.get(replicaId);\n\t\tif (!entry) throw new Error(`Unknown replica ${replicaId}.`);\n\t\treturn entry;\n\t}\n\tresult(entry, shared) {\n\t\treturn {\n\t\t\treplicaId: entry.id,\n\t\t\troot: entry.root,\n\t\t\tserverName: entry.serverName,\n\t\t\tprojectId: entry.projectId,\n\t\t\tprojectName: entry.projectName,\n\t\t\tshared,\n\t\t\tstatus: entry.status,\n\t\t\tconflicts: entry.running.conflicts()\n\t\t};\n\t}\n\tasync withProjectLock(projectKey, operation) {\n\t\tconst previous = this.projectOperations.get(projectKey) ?? Promise.resolve();\n\t\tlet release;\n\t\tconst current = new Promise((resolveOperation) => {\n\t\t\trelease = resolveOperation;\n\t\t});\n\t\tthis.projectOperations.set(projectKey, current);\n\t\tawait previous;\n\t\ttry {\n\t\t\treturn await operation();\n\t\t} finally {\n\t\t\trelease();\n\t\t\tif (this.projectOperations.get(projectKey) === current) this.projectOperations.delete(projectKey);\n\t\t}\n\t}\n};\n// src/server.ts\nconst IDLE_EXIT_MS = 6e4;\nconst REPLICA_ALREADY_ACTIVE = -32010;\nconst daemonVersion = \"0.2.9\";\nvar LeafRelayDaemonServer = class {\n\toptions;\n\tpaths;\n\ttoken;\n\tstartedAt = (/* @__PURE__ */ new Date()).toISOString();\n\tclients = /* @__PURE__ */ new Set();\n\tnetwork;\n\treplicas;\n\tserver;\n\tidleTimer;\n\tstopping;\n\tconstructor(options = {}) {\n\t\tthis.options = options;\n\t\tthis.paths = options.paths ?? daemonPaths();\n\t\tthis.token = options.token ?? randomBytes(32).toString(\"hex\");\n\t\tthis.network = new NetworkRuntimeRegistry({\n\t\t\tprojectEvent: (owners, notification) => this.notifyOwners(owners, RPC_NOTIFICATION.projectEvent, notification),\n\t\t\tlog: (level, message) => void this.log(level, message)\n\t\t});\n\t\tthis.replicas = new ReplicaRegistry({\n\t\t\tstatus: (owners, notification) => this.notifyOwners(owners, RPC_NOTIFICATION.replicaStatus, notification),\n\t\t\tconflict: (owners, notification) => this.notifyOwners(owners, RPC_NOTIFICATION.replicaConflict, notification),\n\t\t\tempty: () => this.scheduleIdleExit(),\n\t\t\tlog: (message) => void this.log(\"info\", message)\n\t\t}, async (directory, startOptions) => {\n\t\t\tconst settings = await readProjectSettings(directory);\n\t\t\tconst lease = await this.network.acquireReplica(settings.serverName, settings.projectId);\n\t\t\ttry {\n\t\t\t\tconst running = await startServe(directory, {\n\t\t\t\t\t...startOptions,\n\t\t\t\t\tremote: lease.remote\n\t\t\t\t});\n\t\t\t\treturn {\n\t\t\t\t\t...running,\n\t\t\t\t\tstop: async () => {\n\t\t\t\t\t\tawait running.stop();\n\t\t\t\t\t\tlease.release();\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t} catch (error) {\n\t\t\t\tlease.release();\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t});\n\t}\n\tasync start() {\n\t\tawait mkdir(this.paths.home, {\n\t\t\trecursive: true,\n\t\t\tmode: 448\n\t\t});\n\t\tsetLogSink((level, args) => void this.log(level, formatWithOptions({\n\t\t\tdepth: 5,\n\t\t\tbreakLength: Infinity\n\t\t}, ...args)));\n\t\tif (process.platform !== \"win32\") await rm(this.paths.socketPath, { force: true });\n\t\tthis.server = createServer((socket) => this.accept(socket));\n\t\tawait new Promise((resolveListen, reject) => {\n\t\t\tthis.server.once(\"error\", reject);\n\t\t\tthis.server.listen(this.paths.socketPath, () => {\n\t\t\t\tthis.server.off(\"error\", reject);\n\t\t\t\tresolveListen();\n\t\t\t});\n\t\t});\n\t\tif (process.platform !== \"win32\") await chmod(this.paths.socketPath, 384);\n\t\tconst metadata = {\n\t\t\tpid: process.pid,\n\t\t\tsocketPath: this.paths.socketPath,\n\t\t\ttoken: this.token,\n\t\t\tprotocolVersion: 1,\n\t\t\tversion: daemonVersion,\n\t\t\tstartedAt: this.startedAt\n\t\t};\n\t\tawait writeFile(this.paths.metadataPath, `${JSON.stringify(metadata, null, 2)}\\n`, {\n\t\t\tencoding: \"utf8\",\n\t\t\tmode: 384\n\t\t});\n\t\tawait chmod(this.paths.metadataPath, 384);\n\t\tawait this.log(\"info\", `Daemon ${daemonVersion} listening on ${this.paths.socketPath}.`);\n\t\tthis.scheduleIdleExit();\n\t\treturn metadata;\n\t}\n\tasync stop() {\n\t\tif (this.stopping) return this.stopping;\n\t\tthis.stopping = this.performStop();\n\t\treturn this.stopping;\n\t}\n\tstatus() {\n\t\treturn {\n\t\t\tpid: process.pid,\n\t\t\tversion: daemonVersion,\n\t\t\tprotocolVersion: 1,\n\t\t\tstartedAt: this.startedAt,\n\t\t\tclients: this.clients.size,\n\t\t\tprojects: this.network.projectCount,\n\t\t\treplicas: this.replicas.list()\n\t\t};\n\t}\n\taccept(socket) {\n\t\tthis.cancelIdleExit();\n\t\tconst rpc = createSocketRpcConnection(socket);\n\t\tconst client = {\n\t\t\tleaseId: randomUUID(),\n\t\t\tsocket,\n\t\t\trpc,\n\t\t\tinitialized: false\n\t\t};\n\t\tthis.clients.add(client);\n\t\trpc.onRequest(RPC_METHOD.initialize, (params) => this.initialize(client, params));\n\t\trpc.onRequest(RPC_METHOD.daemonStatus, () => this.authorized(client, () => this.status()));\n\t\trpc.onRequest(RPC_METHOD.daemonShutdown, () => this.authorized(client, async () => {\n\t\t\tsetTimeout(() => void this.stop(), 25);\n\t\t\treturn null;\n\t\t}));\n\t\trpc.onRequest(RPC_METHOD.replicaAttach, (params) => this.authorized(client, async () => {\n\t\t\ttry {\n\t\t\t\treturn await this.replicas.attach(client.leaseId, params);\n\t\t\t} catch (error) {\n\t\t\t\tif (error instanceof ReplicaAlreadyActiveError) throw new ResponseError(REPLICA_ALREADY_ACTIVE, error.message, {\n\t\t\t\t\tcode: error.code,\n\t\t\t\t\tprojectId: error.projectId,\n\t\t\t\t\tactiveRoot: error.activeRoot,\n\t\t\t\t\trequestedRoot: error.requestedRoot\n\t\t\t\t});\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}));\n\t\trpc.onRequest(RPC_METHOD.replicaDetach, (params) => this.authorized(client, async () => {\n\t\t\tawait this.replicas.detach(client.leaseId, params.replicaId);\n\t\t\treturn null;\n\t\t}));\n\t\trpc.onRequest(RPC_METHOD.replicaResolveConflict, (params) => this.authorized(client, async () => {\n\t\t\tawait this.replicas.resolveConflict(params.replicaId, params.path, params.winner);\n\t\t\treturn null;\n\t\t}));\n\t\trpc.onRequest(RPC_METHOD.replicaRetry, (params) => this.authorized(client, async () => {\n\t\t\tawait this.replicas.retry(params.replicaId, params.path);\n\t\t\treturn null;\n\t\t}));\n\t\trpc.onRequest(RPC_METHOD.serverList, () => this.authorized(client, () => this.network.listServers()));\n\t\trpc.onRequest(RPC_METHOD.serverAdd, (params) => this.authorized(client, async () => {\n\t\t\tawait this.network.addServer(params.name, params.url);\n\t\t\treturn null;\n\t\t}));\n\t\trpc.onRequest(RPC_METHOD.serverRemove, (params) => this.authorized(client, async () => {\n\t\t\tawait this.network.removeServer(params.server);\n\t\t\treturn null;\n\t\t}));\n\t\trpc.onRequest(RPC_METHOD.sessionLogin, (params) => this.authorized(client, () => this.network.login(params)));\n\t\trpc.onRequest(RPC_METHOD.sessionImport, (params) => this.authorized(client, () => this.network.importSession(params)));\n\t\trpc.onRequest(RPC_METHOD.sessionLogout, (params) => this.authorized(client, async () => {\n\t\t\tawait this.network.logout(params.server);\n\t\t\treturn null;\n\t\t}));\n\t\trpc.onRequest(RPC_METHOD.serverCall, (params) => this.authorized(client, async () => {\n\t\t\treturn encodeRpcValue(await this.network.callServer(params.server, params.operation, decodeRpcValue(params.args)));\n\t\t}));\n\t\trpc.onRequest(RPC_METHOD.projectOpen, (params) => this.authorized(client, () => this.network.openProject(client.leaseId, params.server, params.projectId)));\n\t\trpc.onRequest(RPC_METHOD.projectClose, (params) => this.authorized(client, () => {\n\t\t\tthis.network.closeProject(client.leaseId, params.projectKey);\n\t\t\treturn null;\n\t\t}));\n\t\trpc.onRequest(RPC_METHOD.projectCall, (params) => this.authorized(client, async () => {\n\t\t\treturn encodeRpcValue(await await this.network.callProject(params.projectKey, params.operation, decodeRpcValue(params.args)));\n\t\t}));\n\t\trpc.onClose(() => void this.closeClient(client));\n\t\trpc.onError((error) => void this.log(\"error\", `JSON-RPC connection error: ${String(error[0])}`));\n\t\trpc.listen();\n\t}\n\tinitialize(client, params) {\n\t\tif (params.token !== this.token) throw new ResponseError(-32001, \"Daemon authentication failed.\");\n\t\tif (params.protocolVersion !== 1) throw new ResponseError(-32002, `Protocol ${params.protocolVersion} is incompatible with daemon protocol 1.`);\n\t\tif (!params.clientId) throw new ResponseError(-32602, \"clientId is required.\");\n\t\tclient.clientId = params.clientId;\n\t\tclient.initialized = true;\n\t\tthis.replicas.registerClient(client.leaseId);\n\t\tthis.log(\"info\", `${params.clientName} ${params.clientVersion} connected (${params.clientId}).`);\n\t\treturn {\n\t\t\tdaemonVersion,\n\t\t\tprotocolVersion: 1,\n\t\t\tpid: process.pid,\n\t\t\tstartedAt: this.startedAt\n\t\t};\n\t}\n\tasync authorized(client, operation) {\n\t\tif (!client.initialized) throw new ResponseError(-32001, \"Initialize the daemon connection first.\");\n\t\ttry {\n\t\t\treturn await operation();\n\t\t} catch (error) {\n\t\t\tif (error instanceof ResponseError) throw error;\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\tawait this.log(\"error\", `RPC operation failed: ${formatWithOptions({\n\t\t\t\tdepth: 5,\n\t\t\t\tbreakLength: Infinity\n\t\t\t}, error)}`);\n\t\t\tthrow new ResponseError(-32603, message);\n\t\t}\n\t}\n\tasync closeClient(client) {\n\t\tif (!this.clients.delete(client)) return;\n\t\tif (client.clientId) try {\n\t\t\tawait this.replicas.detachClient(client.leaseId);\n\t\t} catch (error) {\n\t\t\tawait this.log(\"error\", `Failed to stop replicas for a disconnected client: ${error instanceof Error ? error.message : String(error)}`);\n\t\t} finally {\n\t\t\tthis.network.detachClient(client.leaseId);\n\t\t}\n\t\tthis.scheduleIdleExit();\n\t}\n\tnotifyOwners(owners, method, notification) {\n\t\tfor (const client of this.clients) if (owners.has(client.leaseId)) this.notifyClient(client, method, notification);\n\t}\n\tasync log(level, message) {\n\t\tconst notification = {\n\t\t\ttimestamp: (/* @__PURE__ */ new Date()).toISOString(),\n\t\t\tlevel,\n\t\t\tmessage\n\t\t};\n\t\tawait appendFile(this.paths.logPath, `${notification.timestamp} [${level}] ${message}\\n`, {\n\t\t\tencoding: \"utf8\",\n\t\t\tmode: 384\n\t\t});\n\t\tfor (const client of this.clients) if (client.initialized) this.notifyClient(client, RPC_NOTIFICATION.log, notification);\n\t}\n\tnotifyClient(client, method, notification) {\n\t\tif (!this.clients.has(client) || client.socket.destroyed) return;\n\t\tclient.rpc.sendNotification(method, notification).catch(() => this.closeClient(client));\n\t}\n\tscheduleIdleExit() {\n\t\tif (this.options.exitOnIdle === false || this.clients.size !== 0 || this.replicas.size !== 0 || this.idleTimer) return;\n\t\tthis.idleTimer = setTimeout(() => void this.stop(), IDLE_EXIT_MS);\n\t\tthis.idleTimer.unref();\n\t}\n\tcancelIdleExit() {\n\t\tif (this.idleTimer) {\n\t\t\tclearTimeout(this.idleTimer);\n\t\t\tthis.idleTimer = void 0;\n\t\t}\n\t}\n\tasync performStop() {\n\t\tthis.cancelIdleExit();\n\t\tawait this.replicas.stopAll();\n\t\tawait this.network.stopAll();\n\t\tsetLogSink(void 0);\n\t\tfor (const client of this.clients) {\n\t\t\tclient.rpc.dispose();\n\t\t\tclient.socket.destroy();\n\t\t}\n\t\tthis.clients.clear();\n\t\tif (this.server) await new Promise((resolveClose) => this.server.close(() => resolveClose()));\n\t\tawait rm(this.paths.metadataPath, { force: true });\n\t\tif (process.platform !== \"win32\") await rm(this.paths.socketPath, { force: true });\n\t}\n};\nasync function readDaemonMetadata(paths = daemonPaths()) {\n\ttry {\n\t\treturn JSON.parse(await readFile(paths.metadataPath, \"utf8\"));\n\t} catch (error) {\n\t\tif (error.code === \"ENOENT\") return;\n\t\tthrow error;\n\t}\n}\nexport { NetworkRuntimeRegistry as a, decodeRpcValue as c, RPC_NOTIFICATION as d, log as f, ReplicaRegistry as i, encodeRpcValue as l, readDaemonMetadata as n, createSocketRpcConnection as o, ReplicaAlreadyActiveError as r, daemonPaths as s, LeafRelayDaemonServer as t, RPC_METHOD as u };\n\n//# sourceMappingURL=server-VUA8bWES.js.map","'use strict'\n\n// Note: this is the semver.org version of the spec that it implements\n// Not necessarily the package version of this code.\nconst SEMVER_SPEC_VERSION = '2.0.0'\n\nconst MAX_LENGTH = 256\nconst MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER ||\n/* istanbul ignore next */ 9007199254740991\n\n// Max safe segment length for coercion.\nconst MAX_SAFE_COMPONENT_LENGTH = 16\n\n// Max safe length for a build identifier. The max length minus 6 characters for\n// the shortest version with a build 0.0.0+BUILD.\nconst MAX_SAFE_BUILD_LENGTH = MAX_LENGTH - 6\n\nconst RELEASE_TYPES = [\n 'major',\n 'premajor',\n 'minor',\n 'preminor',\n 'patch',\n 'prepatch',\n 'prerelease',\n]\n\nmodule.exports = {\n MAX_LENGTH,\n MAX_SAFE_COMPONENT_LENGTH,\n MAX_SAFE_BUILD_LENGTH,\n MAX_SAFE_INTEGER,\n RELEASE_TYPES,\n SEMVER_SPEC_VERSION,\n FLAG_INCLUDE_PRERELEASE: 0b001,\n FLAG_LOOSE: 0b010,\n}\n","'use strict'\n\nconst debug = (\n typeof process === 'object' &&\n process.env &&\n process.env.NODE_DEBUG &&\n /\\bsemver\\b/i.test(process.env.NODE_DEBUG)\n) ? (...args) => console.error('SEMVER', ...args)\n : () => {}\n\nmodule.exports = debug\n","'use strict'\n\nconst {\n MAX_SAFE_COMPONENT_LENGTH,\n MAX_SAFE_BUILD_LENGTH,\n MAX_LENGTH,\n} = require('./constants')\nconst debug = require('./debug')\nexports = module.exports = {}\n\n// The actual regexps go on exports.re\nconst re = exports.re = []\nconst safeRe = exports.safeRe = []\nconst src = exports.src = []\nconst safeSrc = exports.safeSrc = []\nconst t = exports.t = {}\nlet R = 0\n\nconst LETTERDASHNUMBER = '[a-zA-Z0-9-]'\n\n// Replace some greedy regex tokens to prevent regex dos issues. These regex are\n// used internally via the safeRe object since all inputs in this library get\n// normalized first to trim and collapse all extra whitespace. The original\n// regexes are exported for userland consumption and lower level usage. A\n// future breaking change could export the safer regex only with a note that\n// all input should have extra whitespace removed.\nconst safeRegexReplacements = [\n ['\\\\s', 1],\n ['\\\\d', MAX_LENGTH],\n [LETTERDASHNUMBER, MAX_SAFE_BUILD_LENGTH],\n]\n\nconst makeSafeRegex = (value) => {\n for (const [token, max] of safeRegexReplacements) {\n value = value\n .split(`${token}*`).join(`${token}{0,${max}}`)\n .split(`${token}+`).join(`${token}{1,${max}}`)\n }\n return value\n}\n\nconst createToken = (name, value, isGlobal) => {\n const safe = makeSafeRegex(value)\n const index = R++\n debug(name, index, value)\n t[name] = index\n src[index] = value\n safeSrc[index] = safe\n re[index] = new RegExp(value, isGlobal ? 'g' : undefined)\n safeRe[index] = new RegExp(safe, isGlobal ? 'g' : undefined)\n}\n\n// The following Regular Expressions can be used for tokenizing,\n// validating, and parsing SemVer version strings.\n\n// ## Numeric Identifier\n// A single `0`, or a non-zero digit followed by zero or more digits.\n\ncreateToken('NUMERICIDENTIFIER', '0|[1-9]\\\\d*')\ncreateToken('NUMERICIDENTIFIERLOOSE', '\\\\d+')\n\n// ## Non-numeric Identifier\n// Zero or more digits, followed by a letter or hyphen, and then zero or\n// more letters, digits, or hyphens.\n\ncreateToken('NONNUMERICIDENTIFIER', `\\\\d*[a-zA-Z-]${LETTERDASHNUMBER}*`)\n\n// ## Main Version\n// Three dot-separated numeric identifiers.\n\ncreateToken('MAINVERSION', `(${src[t.NUMERICIDENTIFIER]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIER]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIER]})`)\n\ncreateToken('MAINVERSIONLOOSE', `(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIERLOOSE]})`)\n\n// ## Pre-release Version Identifier\n// A numeric identifier, or a non-numeric identifier.\n// Non-numeric identifiers include numeric identifiers but can be longer.\n// Therefore non-numeric identifiers must go first.\n\ncreateToken('PRERELEASEIDENTIFIER', `(?:${src[t.NONNUMERICIDENTIFIER]\n}|${src[t.NUMERICIDENTIFIER]})`)\n\ncreateToken('PRERELEASEIDENTIFIERLOOSE', `(?:${src[t.NONNUMERICIDENTIFIER]\n}|${src[t.NUMERICIDENTIFIERLOOSE]})`)\n\n// ## Pre-release Version\n// Hyphen, followed by one or more dot-separated pre-release version\n// identifiers.\n\ncreateToken('PRERELEASE', `(?:-(${src[t.PRERELEASEIDENTIFIER]\n}(?:\\\\.${src[t.PRERELEASEIDENTIFIER]})*))`)\n\ncreateToken('PRERELEASELOOSE', `(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE]\n}(?:\\\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`)\n\n// ## Build Metadata Identifier\n// Any combination of digits, letters, or hyphens.\n\ncreateToken('BUILDIDENTIFIER', `${LETTERDASHNUMBER}+`)\n\n// ## Build Metadata\n// Plus sign, followed by one or more period-separated build metadata\n// identifiers.\n\ncreateToken('BUILD', `(?:\\\\+(${src[t.BUILDIDENTIFIER]\n}(?:\\\\.${src[t.BUILDIDENTIFIER]})*))`)\n\n// ## Full Version String\n// A main version, followed optionally by a pre-release version and\n// build metadata.\n\n// Note that the only major, minor, patch, and pre-release sections of\n// the version string are capturing groups. The build metadata is not a\n// capturing group, because it should not ever be used in version\n// comparison.\n\ncreateToken('FULLPLAIN', `v?${src[t.MAINVERSION]\n}${src[t.PRERELEASE]}?${\n src[t.BUILD]}?`)\n\ncreateToken('FULL', `^${src[t.FULLPLAIN]}$`)\n\n// like full, but allows v1.2.3 and =1.2.3, which people do sometimes.\n// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty\n// common in the npm registry.\ncreateToken('LOOSEPLAIN', `[v=\\\\s]*${src[t.MAINVERSIONLOOSE]\n}${src[t.PRERELEASELOOSE]}?${\n src[t.BUILD]}?`)\n\ncreateToken('LOOSE', `^${src[t.LOOSEPLAIN]}$`)\n\ncreateToken('GTLT', '((?:<|>)?=?)')\n\n// Something like \"2.*\" or \"1.2.x\".\n// Note that \"x.x\" is a valid xRange identifier, meaning \"any version\"\n// Only the first item is strictly required.\ncreateToken('XRANGEIDENTIFIERLOOSE', `${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\\\*`)\ncreateToken('XRANGEIDENTIFIER', `${src[t.NUMERICIDENTIFIER]}|x|X|\\\\*`)\n\ncreateToken('XRANGEPLAIN', `[v=\\\\s]*(${src[t.XRANGEIDENTIFIER]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIER]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIER]})` +\n `(?:${src[t.PRERELEASE]})?${\n src[t.BUILD]}?` +\n `)?)?`)\n\ncreateToken('XRANGEPLAINLOOSE', `[v=\\\\s]*(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n `(?:${src[t.PRERELEASELOOSE]})?${\n src[t.BUILD]}?` +\n `)?)?`)\n\ncreateToken('XRANGE', `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAIN]}$`)\ncreateToken('XRANGELOOSE', `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAINLOOSE]}$`)\n\n// Coercion.\n// Extract anything that could conceivably be a part of a valid semver\ncreateToken('COERCEPLAIN', `${'(^|[^\\\\d])' +\n '(\\\\d{1,'}${MAX_SAFE_COMPONENT_LENGTH}})` +\n `(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` +\n `(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?`)\ncreateToken('COERCE', `${src[t.COERCEPLAIN]}(?:$|[^\\\\d])`)\ncreateToken('COERCEFULL', src[t.COERCEPLAIN] +\n `(?:${src[t.PRERELEASE]})?` +\n `(?:${src[t.BUILD]})?` +\n `(?:$|[^\\\\d])`)\ncreateToken('COERCERTL', src[t.COERCE], true)\ncreateToken('COERCERTLFULL', src[t.COERCEFULL], true)\n\n// Tilde ranges.\n// Meaning is \"reasonably at or greater than\"\ncreateToken('LONETILDE', '(?:~>?)')\n\ncreateToken('TILDETRIM', `(\\\\s*)${src[t.LONETILDE]}\\\\s+`, true)\nexports.tildeTrimReplace = '$1~'\n\ncreateToken('TILDE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`)\ncreateToken('TILDELOOSE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`)\n\n// Caret ranges.\n// Meaning is \"at least and backwards compatible with\"\ncreateToken('LONECARET', '(?:\\\\^)')\n\ncreateToken('CARETTRIM', `(\\\\s*)${src[t.LONECARET]}\\\\s+`, true)\nexports.caretTrimReplace = '$1^'\n\ncreateToken('CARET', `^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`)\ncreateToken('CARETLOOSE', `^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`)\n\n// A simple gt/lt/eq thing, or just \"\" to indicate \"any version\"\ncreateToken('COMPARATORLOOSE', `^${src[t.GTLT]}\\\\s*(${src[t.LOOSEPLAIN]})$|^$`)\ncreateToken('COMPARATOR', `^${src[t.GTLT]}\\\\s*(${src[t.FULLPLAIN]})$|^$`)\n\n// An expression to strip any whitespace between the gtlt and the thing\n// it modifies, so that `> 1.2.3` ==> `>1.2.3`\ncreateToken('COMPARATORTRIM', `(\\\\s*)${src[t.GTLT]\n}\\\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`, true)\nexports.comparatorTrimReplace = '$1$2$3'\n\n// Something like `1.2.3 - 1.2.4`\n// Note that these all use the loose form, because they'll be\n// checked against either the strict or loose comparator form\n// later.\ncreateToken('HYPHENRANGE', `^\\\\s*(${src[t.XRANGEPLAIN]})` +\n `\\\\s+-\\\\s+` +\n `(${src[t.XRANGEPLAIN]})` +\n `\\\\s*$`)\n\ncreateToken('HYPHENRANGELOOSE', `^\\\\s*(${src[t.XRANGEPLAINLOOSE]})` +\n `\\\\s+-\\\\s+` +\n `(${src[t.XRANGEPLAINLOOSE]})` +\n `\\\\s*$`)\n\n// Star ranges basically just allow anything at all.\ncreateToken('STAR', '(<|>)?=?\\\\s*\\\\*')\n// >=0.0.0 is like a star\ncreateToken('GTE0', '^\\\\s*>=\\\\s*0\\\\.0\\\\.0\\\\s*$')\ncreateToken('GTE0PRE', '^\\\\s*>=\\\\s*0\\\\.0\\\\.0-0\\\\s*$')\n","'use strict'\n\n// parse out just the options we care about\nconst looseOption = Object.freeze({ loose: true })\nconst emptyOpts = Object.freeze({ })\nconst parseOptions = options => {\n if (!options) {\n return emptyOpts\n }\n\n if (typeof options !== 'object') {\n return looseOption\n }\n\n return options\n}\nmodule.exports = parseOptions\n","'use strict'\n\nconst numeric = /^[0-9]+$/\nconst compareIdentifiers = (a, b) => {\n if (typeof a === 'number' && typeof b === 'number') {\n return a === b ? 0 : a < b ? -1 : 1\n }\n\n const anum = numeric.test(a)\n const bnum = numeric.test(b)\n\n if (anum && bnum) {\n a = +a\n b = +b\n }\n\n return a === b ? 0\n : (anum && !bnum) ? -1\n : (bnum && !anum) ? 1\n : a < b ? -1\n : 1\n}\n\nconst rcompareIdentifiers = (a, b) => compareIdentifiers(b, a)\n\nmodule.exports = {\n compareIdentifiers,\n rcompareIdentifiers,\n}\n","'use strict'\n\nconst debug = require('../internal/debug')\nconst { MAX_LENGTH, MAX_SAFE_INTEGER } = require('../internal/constants')\nconst { safeRe: re, t } = require('../internal/re')\n\nconst parseOptions = require('../internal/parse-options')\nconst { compareIdentifiers } = require('../internal/identifiers')\n\nconst isPrereleaseIdentifier = (prerelease, identifier) => {\n const identifiers = identifier.split('.')\n if (identifiers.length > prerelease.length) {\n return false\n }\n\n for (let i = 0; i < identifiers.length; i++) {\n if (compareIdentifiers(prerelease[i], identifiers[i]) !== 0) {\n return false\n }\n }\n\n return true\n}\n\nclass SemVer {\n constructor (version, options) {\n options = parseOptions(options)\n\n if (version instanceof SemVer) {\n if (version.loose === !!options.loose &&\n version.includePrerelease === !!options.includePrerelease) {\n return version\n } else {\n version = version.version\n }\n } else if (typeof version !== 'string') {\n throw new TypeError(`Invalid version. Must be a string. Got type \"${typeof version}\".`)\n }\n\n if (version.length > MAX_LENGTH) {\n throw new TypeError(\n `version is longer than ${MAX_LENGTH} characters`\n )\n }\n\n debug('SemVer', version, options)\n this.options = options\n this.loose = !!options.loose\n // this isn't actually relevant for versions, but keep it so that we\n // don't run into trouble passing this.options around.\n this.includePrerelease = !!options.includePrerelease\n\n const m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL])\n\n if (!m) {\n throw new TypeError(`Invalid Version: ${version}`)\n }\n\n this.raw = version\n\n // these are actually numbers\n this.major = +m[1]\n this.minor = +m[2]\n this.patch = +m[3]\n\n if (this.major > MAX_SAFE_INTEGER || this.major < 0) {\n throw new TypeError('Invalid major version')\n }\n\n if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) {\n throw new TypeError('Invalid minor version')\n }\n\n if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) {\n throw new TypeError('Invalid patch version')\n }\n\n // numberify any prerelease numeric ids\n if (!m[4]) {\n this.prerelease = []\n } else {\n this.prerelease = m[4].split('.').map((id) => {\n if (/^[0-9]+$/.test(id)) {\n const num = +id\n if (num >= 0 && num < MAX_SAFE_INTEGER) {\n return num\n }\n }\n return id\n })\n }\n\n this.build = m[5] ? m[5].split('.') : []\n this.format()\n }\n\n format () {\n this.version = `${this.major}.${this.minor}.${this.patch}`\n if (this.prerelease.length) {\n this.version += `-${this.prerelease.join('.')}`\n }\n return this.version\n }\n\n toString () {\n return this.version\n }\n\n compare (other) {\n debug('SemVer.compare', this.version, this.options, other)\n if (!(other instanceof SemVer)) {\n if (typeof other === 'string' && other === this.version) {\n return 0\n }\n other = new SemVer(other, this.options)\n }\n\n if (other.version === this.version) {\n return 0\n }\n\n return this.compareMain(other) || this.comparePre(other)\n }\n\n compareMain (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n if (this.major < other.major) {\n return -1\n }\n if (this.major > other.major) {\n return 1\n }\n if (this.minor < other.minor) {\n return -1\n }\n if (this.minor > other.minor) {\n return 1\n }\n if (this.patch < other.patch) {\n return -1\n }\n if (this.patch > other.patch) {\n return 1\n }\n return 0\n }\n\n comparePre (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n // NOT having a prerelease is > having one\n if (this.prerelease.length && !other.prerelease.length) {\n return -1\n } else if (!this.prerelease.length && other.prerelease.length) {\n return 1\n } else if (!this.prerelease.length && !other.prerelease.length) {\n return 0\n }\n\n let i = 0\n do {\n const a = this.prerelease[i]\n const b = other.prerelease[i]\n debug('prerelease compare', i, a, b)\n if (a === undefined && b === undefined) {\n return 0\n } else if (b === undefined) {\n return 1\n } else if (a === undefined) {\n return -1\n } else if (a === b) {\n continue\n } else {\n return compareIdentifiers(a, b)\n }\n } while (++i)\n }\n\n compareBuild (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n let i = 0\n do {\n const a = this.build[i]\n const b = other.build[i]\n debug('build compare', i, a, b)\n if (a === undefined && b === undefined) {\n return 0\n } else if (b === undefined) {\n return 1\n } else if (a === undefined) {\n return -1\n } else if (a === b) {\n continue\n } else {\n return compareIdentifiers(a, b)\n }\n } while (++i)\n }\n\n // preminor will bump the version up to the next minor release, and immediately\n // down to pre-release. premajor and prepatch work the same way.\n inc (release, identifier, identifierBase) {\n if (release.startsWith('pre')) {\n if (!identifier && identifierBase === false) {\n throw new Error('invalid increment argument: identifier is empty')\n }\n // Avoid an invalid semver results\n if (identifier) {\n const match = `-${identifier}`.match(this.options.loose ? re[t.PRERELEASELOOSE] : re[t.PRERELEASE])\n if (!match || match[1] !== identifier) {\n throw new Error(`invalid identifier: ${identifier}`)\n }\n }\n }\n\n switch (release) {\n case 'premajor':\n this.prerelease.length = 0\n this.patch = 0\n this.minor = 0\n this.major++\n this.inc('pre', identifier, identifierBase)\n break\n case 'preminor':\n this.prerelease.length = 0\n this.patch = 0\n this.minor++\n this.inc('pre', identifier, identifierBase)\n break\n case 'prepatch':\n // If this is already a prerelease, it will bump to the next version\n // drop any prereleases that might already exist, since they are not\n // relevant at this point.\n this.prerelease.length = 0\n this.inc('patch', identifier, identifierBase)\n this.inc('pre', identifier, identifierBase)\n break\n // If the input is a non-prerelease version, this acts the same as\n // prepatch.\n case 'prerelease':\n if (this.prerelease.length === 0) {\n this.inc('patch', identifier, identifierBase)\n }\n this.inc('pre', identifier, identifierBase)\n break\n case 'release':\n if (this.prerelease.length === 0) {\n throw new Error(`version ${this.raw} is not a prerelease`)\n }\n this.prerelease.length = 0\n break\n\n case 'major':\n // If this is a pre-major version, bump up to the same major version.\n // Otherwise increment major.\n // 1.0.0-5 bumps to 1.0.0\n // 1.1.0 bumps to 2.0.0\n if (\n this.minor !== 0 ||\n this.patch !== 0 ||\n this.prerelease.length === 0\n ) {\n this.major++\n }\n this.minor = 0\n this.patch = 0\n this.prerelease = []\n break\n case 'minor':\n // If this is a pre-minor version, bump up to the same minor version.\n // Otherwise increment minor.\n // 1.2.0-5 bumps to 1.2.0\n // 1.2.1 bumps to 1.3.0\n if (this.patch !== 0 || this.prerelease.length === 0) {\n this.minor++\n }\n this.patch = 0\n this.prerelease = []\n break\n case 'patch':\n // If this is not a pre-release version, it will increment the patch.\n // If it is a pre-release it will bump up to the same patch version.\n // 1.2.0-5 patches to 1.2.0\n // 1.2.0 patches to 1.2.1\n if (this.prerelease.length === 0) {\n this.patch++\n }\n this.prerelease = []\n break\n // This probably shouldn't be used publicly.\n // 1.0.0 'pre' would become 1.0.0-0 which is the wrong direction.\n case 'pre': {\n const base = Number(identifierBase) ? 1 : 0\n\n if (this.prerelease.length === 0) {\n this.prerelease = [base]\n } else {\n let i = this.prerelease.length\n while (--i >= 0) {\n if (typeof this.prerelease[i] === 'number') {\n this.prerelease[i]++\n i = -2\n }\n }\n if (i === -1) {\n // didn't increment anything\n if (identifier === this.prerelease.join('.') && identifierBase === false) {\n throw new Error('invalid increment argument: identifier already exists')\n }\n this.prerelease.push(base)\n }\n }\n if (identifier) {\n // 1.2.0-beta.1 bumps to 1.2.0-beta.2,\n // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0\n let prerelease = [identifier, base]\n if (identifierBase === false) {\n prerelease = [identifier]\n }\n if (isPrereleaseIdentifier(this.prerelease, identifier)) {\n const prereleaseBase = this.prerelease[identifier.split('.').length]\n if (isNaN(prereleaseBase)) {\n this.prerelease = prerelease\n }\n } else {\n this.prerelease = prerelease\n }\n }\n break\n }\n default:\n throw new Error(`invalid increment argument: ${release}`)\n }\n this.raw = this.format()\n if (this.build.length) {\n this.raw += `+${this.build.join('.')}`\n }\n return this\n }\n}\n\nmodule.exports = SemVer\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst parse = (version, options, throwErrors = false) => {\n if (version instanceof SemVer) {\n return version\n }\n try {\n return new SemVer(version, options)\n } catch (er) {\n if (!throwErrors) {\n return null\n }\n throw er\n }\n}\n\nmodule.exports = parse\n","'use strict'\n\nconst parse = require('./parse')\nconst valid = (version, options) => {\n const v = parse(version, options)\n return v ? v.version : null\n}\nmodule.exports = valid\n","'use strict'\n\nconst parse = require('./parse')\nconst clean = (version, options) => {\n const s = parse(version.trim().replace(/^[=v]+/, ''), options)\n return s ? s.version : null\n}\nmodule.exports = clean\n","'use strict'\n\nconst SemVer = require('../classes/semver')\n\nconst inc = (version, release, options, identifier, identifierBase) => {\n if (typeof (options) === 'string') {\n identifierBase = identifier\n identifier = options\n options = undefined\n }\n\n try {\n return new SemVer(\n version instanceof SemVer ? version.version : version,\n options\n ).inc(release, identifier, identifierBase).version\n } catch (er) {\n return null\n }\n}\nmodule.exports = inc\n","'use strict'\n\nconst parse = require('./parse.js')\n\nconst diff = (version1, version2) => {\n const v1 = parse(version1, null, true)\n const v2 = parse(version2, null, true)\n const comparison = v1.compare(v2)\n\n if (comparison === 0) {\n return null\n }\n\n const v1Higher = comparison > 0\n const highVersion = v1Higher ? v1 : v2\n const lowVersion = v1Higher ? v2 : v1\n const highHasPre = !!highVersion.prerelease.length\n const lowHasPre = !!lowVersion.prerelease.length\n\n if (lowHasPre && !highHasPre) {\n // Going from prerelease -> no prerelease requires some special casing\n\n // If the low version has only a major, then it will always be a major\n // Some examples:\n // 1.0.0-1 -> 1.0.0\n // 1.0.0-1 -> 1.1.1\n // 1.0.0-1 -> 2.0.0\n if (!lowVersion.patch && !lowVersion.minor) {\n return 'major'\n }\n\n // If the main part has no difference\n if (lowVersion.compareMain(highVersion) === 0) {\n if (lowVersion.minor && !lowVersion.patch) {\n return 'minor'\n }\n return 'patch'\n }\n }\n\n // add the `pre` prefix if we are going to a prerelease version\n const prefix = highHasPre ? 'pre' : ''\n\n if (v1.major !== v2.major) {\n return prefix + 'major'\n }\n\n if (v1.minor !== v2.minor) {\n return prefix + 'minor'\n }\n\n if (v1.patch !== v2.patch) {\n return prefix + 'patch'\n }\n\n // high and low are prereleases\n return 'prerelease'\n}\n\nmodule.exports = diff\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst major = (a, loose) => new SemVer(a, loose).major\nmodule.exports = major\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst minor = (a, loose) => new SemVer(a, loose).minor\nmodule.exports = minor\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst patch = (a, loose) => new SemVer(a, loose).patch\nmodule.exports = patch\n","'use strict'\n\nconst parse = require('./parse')\nconst prerelease = (version, options) => {\n const parsed = parse(version, options)\n return (parsed && parsed.prerelease.length) ? parsed.prerelease : null\n}\nmodule.exports = prerelease\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst compare = (a, b, loose) =>\n new SemVer(a, loose).compare(new SemVer(b, loose))\n\nmodule.exports = compare\n","'use strict'\n\nconst compare = require('./compare')\nconst rcompare = (a, b, loose) => compare(b, a, loose)\nmodule.exports = rcompare\n","'use strict'\n\nconst compare = require('./compare')\nconst compareLoose = (a, b) => compare(a, b, true)\nmodule.exports = compareLoose\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst compareBuild = (a, b, loose) => {\n const versionA = new SemVer(a, loose)\n const versionB = new SemVer(b, loose)\n return versionA.compare(versionB) || versionA.compareBuild(versionB)\n}\nmodule.exports = compareBuild\n","'use strict'\n\nconst compareBuild = require('./compare-build')\nconst sort = (list, loose) => list.sort((a, b) => compareBuild(a, b, loose))\nmodule.exports = sort\n","'use strict'\n\nconst compareBuild = require('./compare-build')\nconst rsort = (list, loose) => list.sort((a, b) => compareBuild(b, a, loose))\nmodule.exports = rsort\n","'use strict'\n\nconst compare = require('./compare')\nconst gt = (a, b, loose) => compare(a, b, loose) > 0\nmodule.exports = gt\n","'use strict'\n\nconst compare = require('./compare')\nconst lt = (a, b, loose) => compare(a, b, loose) < 0\nmodule.exports = lt\n","'use strict'\n\nconst compare = require('./compare')\nconst eq = (a, b, loose) => compare(a, b, loose) === 0\nmodule.exports = eq\n","'use strict'\n\nconst compare = require('./compare')\nconst neq = (a, b, loose) => compare(a, b, loose) !== 0\nmodule.exports = neq\n","'use strict'\n\nconst compare = require('./compare')\nconst gte = (a, b, loose) => compare(a, b, loose) >= 0\nmodule.exports = gte\n","'use strict'\n\nconst compare = require('./compare')\nconst lte = (a, b, loose) => compare(a, b, loose) <= 0\nmodule.exports = lte\n","'use strict'\n\nconst eq = require('./eq')\nconst neq = require('./neq')\nconst gt = require('./gt')\nconst gte = require('./gte')\nconst lt = require('./lt')\nconst lte = require('./lte')\n\nconst cmp = (a, op, b, loose) => {\n switch (op) {\n case '===':\n if (typeof a === 'object') {\n a = a.version\n }\n if (typeof b === 'object') {\n b = b.version\n }\n return a === b\n\n case '!==':\n if (typeof a === 'object') {\n a = a.version\n }\n if (typeof b === 'object') {\n b = b.version\n }\n return a !== b\n\n case '':\n case '=':\n case '==':\n return eq(a, b, loose)\n\n case '!=':\n return neq(a, b, loose)\n\n case '>':\n return gt(a, b, loose)\n\n case '>=':\n return gte(a, b, loose)\n\n case '<':\n return lt(a, b, loose)\n\n case '<=':\n return lte(a, b, loose)\n\n default:\n throw new TypeError(`Invalid operator: ${op}`)\n }\n}\nmodule.exports = cmp\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst parse = require('./parse')\nconst { safeRe: re, t } = require('../internal/re')\n\nconst coerce = (version, options) => {\n if (version instanceof SemVer) {\n return version\n }\n\n if (typeof version === 'number') {\n version = String(version)\n }\n\n if (typeof version !== 'string') {\n return null\n }\n\n options = options || {}\n\n let match = null\n if (!options.rtl) {\n match = version.match(options.includePrerelease ? re[t.COERCEFULL] : re[t.COERCE])\n } else {\n // Find the right-most coercible string that does not share\n // a terminus with a more left-ward coercible string.\n // Eg, '1.2.3.4' wants to coerce '2.3.4', not '3.4' or '4'\n // With includePrerelease option set, '1.2.3.4-rc' wants to coerce '2.3.4-rc', not '2.3.4'\n //\n // Walk through the string checking with a /g regexp\n // Manually set the index so as to pick up overlapping matches.\n // Stop when we get a match that ends at the string end, since no\n // coercible string can be more right-ward without the same terminus.\n const coerceRtlRegex = options.includePrerelease ? re[t.COERCERTLFULL] : re[t.COERCERTL]\n let next\n while ((next = coerceRtlRegex.exec(version)) &&\n (!match || match.index + match[0].length !== version.length)\n ) {\n if (!match ||\n next.index + next[0].length !== match.index + match[0].length) {\n match = next\n }\n coerceRtlRegex.lastIndex = next.index + next[1].length + next[2].length\n }\n // leave it in a clean state\n coerceRtlRegex.lastIndex = -1\n }\n\n if (match === null) {\n return null\n }\n\n const major = match[2]\n const minor = match[3] || '0'\n const patch = match[4] || '0'\n const prerelease = options.includePrerelease && match[5] ? `-${match[5]}` : ''\n const build = options.includePrerelease && match[6] ? `+${match[6]}` : ''\n\n return parse(`${major}.${minor}.${patch}${prerelease}${build}`, options)\n}\nmodule.exports = coerce\n","'use strict'\n\nconst parse = require('./parse')\nconst constants = require('../internal/constants')\nconst SemVer = require('../classes/semver')\n\nconst truncate = (version, truncation, options) => {\n if (!constants.RELEASE_TYPES.includes(truncation)) {\n return null\n }\n\n const clonedVersion = cloneInputVersion(version, options)\n return clonedVersion && doTruncation(clonedVersion, truncation)\n}\n\nconst cloneInputVersion = (version, options) => {\n const versionStringToParse = (\n version instanceof SemVer ? version.version : version\n )\n\n return parse(versionStringToParse, options)\n}\n\nconst doTruncation = (version, truncation) => {\n if (isPrerelease(truncation)) {\n return version.version\n }\n\n version.prerelease = []\n\n switch (truncation) {\n case 'major':\n version.minor = 0\n version.patch = 0\n break\n case 'minor':\n version.patch = 0\n break\n }\n\n return version.format()\n}\n\nconst isPrerelease = (type) => {\n return type.startsWith('pre')\n}\n\nmodule.exports = truncate\n","'use strict'\n\nclass LRUCache {\n constructor () {\n this.max = 1000\n this.map = new Map()\n }\n\n get (key) {\n const value = this.map.get(key)\n if (value === undefined) {\n return undefined\n } else {\n // Remove the key from the map and add it to the end\n this.map.delete(key)\n this.map.set(key, value)\n return value\n }\n }\n\n delete (key) {\n return this.map.delete(key)\n }\n\n set (key, value) {\n const deleted = this.delete(key)\n\n if (!deleted && value !== undefined) {\n // If cache is full, delete the least recently used item\n if (this.map.size >= this.max) {\n const firstKey = this.map.keys().next().value\n this.delete(firstKey)\n }\n\n this.map.set(key, value)\n }\n\n return this\n }\n}\n\nmodule.exports = LRUCache\n","'use strict'\n\nconst SPACE_CHARACTERS = /\\s+/g\n\n// hoisted class for cyclic dependency\nclass Range {\n constructor (range, options) {\n options = parseOptions(options)\n\n if (range instanceof Range) {\n if (\n range.loose === !!options.loose &&\n range.includePrerelease === !!options.includePrerelease\n ) {\n return range\n } else {\n return new Range(range.raw, options)\n }\n }\n\n if (range instanceof Comparator) {\n // just put it in the set and return\n this.raw = range.value\n this.set = [[range]]\n this.formatted = undefined\n return this\n }\n\n this.options = options\n this.loose = !!options.loose\n this.includePrerelease = !!options.includePrerelease\n\n // First reduce all whitespace as much as possible so we do not have to rely\n // on potentially slow regexes like \\s*. This is then stored and used for\n // future error messages as well.\n this.raw = range.trim().replace(SPACE_CHARACTERS, ' ')\n\n // First, split on ||\n this.set = this.raw\n .split('||')\n // map the range to a 2d array of comparators\n .map(r => this.parseRange(r.trim()))\n // throw out any comparator lists that are empty\n // this generally means that it was not a valid range, which is allowed\n // in loose mode, but will still throw if the WHOLE range is invalid.\n .filter(c => c.length)\n\n if (!this.set.length) {\n throw new TypeError(`Invalid SemVer Range: ${this.raw}`)\n }\n\n // if we have any that are not the null set, throw out null sets.\n if (this.set.length > 1) {\n // keep the first one, in case they're all null sets\n const first = this.set[0]\n this.set = this.set.filter(c => !isNullSet(c[0]))\n if (this.set.length === 0) {\n this.set = [first]\n } else if (this.set.length > 1) {\n // if we have any that are *, then the range is just *\n for (const c of this.set) {\n if (c.length === 1 && isAny(c[0])) {\n this.set = [c]\n break\n }\n }\n }\n }\n\n this.formatted = undefined\n }\n\n get range () {\n if (this.formatted === undefined) {\n this.formatted = ''\n for (let i = 0; i < this.set.length; i++) {\n if (i > 0) {\n this.formatted += '||'\n }\n const comps = this.set[i]\n for (let k = 0; k < comps.length; k++) {\n if (k > 0) {\n this.formatted += ' '\n }\n this.formatted += comps[k].toString().trim()\n }\n }\n }\n return this.formatted\n }\n\n format () {\n return this.range\n }\n\n toString () {\n return this.range\n }\n\n parseRange (range) {\n // strip build metadata so it can't bleed into the version\n range = range.replace(BUILDSTRIPRE, '')\n\n // memoize range parsing for performance.\n // this is a very hot path, and fully deterministic.\n const memoOpts =\n (this.options.includePrerelease && FLAG_INCLUDE_PRERELEASE) |\n (this.options.loose && FLAG_LOOSE)\n const memoKey = memoOpts + ':' + range\n const cached = cache.get(memoKey)\n if (cached) {\n return cached\n }\n\n const loose = this.options.loose\n // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4`\n const hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE]\n range = range.replace(hr, hyphenReplace(this.options.includePrerelease))\n debug('hyphen replace', range)\n\n // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5`\n range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace)\n debug('comparator trim', range)\n\n // `~ 1.2.3` => `~1.2.3`\n range = range.replace(re[t.TILDETRIM], tildeTrimReplace)\n debug('tilde trim', range)\n\n // `^ 1.2.3` => `^1.2.3`\n range = range.replace(re[t.CARETTRIM], caretTrimReplace)\n debug('caret trim', range)\n\n // At this point, the range is completely trimmed and\n // ready to be split into comparators.\n\n let rangeList = range\n .split(' ')\n .map(comp => parseComparator(comp, this.options))\n .join(' ')\n .split(/\\s+/)\n // >=0.0.0 is equivalent to *\n .map(comp => replaceGTE0(comp, this.options))\n\n if (loose) {\n // in loose mode, throw out any that are not valid comparators\n rangeList = rangeList.filter(comp => {\n debug('loose invalid filter', comp, this.options)\n return !!comp.match(re[t.COMPARATORLOOSE])\n })\n }\n debug('range list', rangeList)\n\n // if any comparators are the null set, then replace with JUST null set\n // if more than one comparator, remove any * comparators\n // also, don't include the same comparator more than once\n const rangeMap = new Map()\n const comparators = rangeList.map(comp => new Comparator(comp, this.options))\n for (const comp of comparators) {\n if (isNullSet(comp)) {\n return [comp]\n }\n rangeMap.set(comp.value, comp)\n }\n if (rangeMap.size > 1 && rangeMap.has('')) {\n rangeMap.delete('')\n }\n\n const result = [...rangeMap.values()]\n cache.set(memoKey, result)\n return result\n }\n\n intersects (range, options) {\n if (!(range instanceof Range)) {\n throw new TypeError('a Range is required')\n }\n\n return this.set.some((thisComparators) => {\n return (\n isSatisfiable(thisComparators, options) &&\n range.set.some((rangeComparators) => {\n return (\n isSatisfiable(rangeComparators, options) &&\n thisComparators.every((thisComparator) => {\n return rangeComparators.every((rangeComparator) => {\n return thisComparator.intersects(rangeComparator, options)\n })\n })\n )\n })\n )\n })\n }\n\n // if ANY of the sets match ALL of its comparators, then pass\n test (version) {\n if (!version) {\n return false\n }\n\n if (typeof version === 'string') {\n try {\n version = new SemVer(version, this.options)\n } catch (er) {\n return false\n }\n }\n\n for (let i = 0; i < this.set.length; i++) {\n if (testSet(this.set[i], version, this.options)) {\n return true\n }\n }\n return false\n }\n}\n\nmodule.exports = Range\n\nconst LRU = require('../internal/lrucache')\nconst cache = new LRU()\n\nconst parseOptions = require('../internal/parse-options')\nconst Comparator = require('./comparator')\nconst debug = require('../internal/debug')\nconst SemVer = require('./semver')\nconst {\n safeRe: re,\n src,\n t,\n comparatorTrimReplace,\n tildeTrimReplace,\n caretTrimReplace,\n} = require('../internal/re')\nconst { FLAG_INCLUDE_PRERELEASE, FLAG_LOOSE } = require('../internal/constants')\n\n// unbounded global build-metadata stripper used by parseRange\nconst BUILDSTRIPRE = new RegExp(src[t.BUILD], 'g')\n\nconst isNullSet = c => c.value === '<0.0.0-0'\nconst isAny = c => c.value === ''\n\n// take a set of comparators and determine whether there\n// exists a version which can satisfy it\nconst isSatisfiable = (comparators, options) => {\n let result = true\n const remainingComparators = comparators.slice()\n let testComparator = remainingComparators.pop()\n\n while (result && remainingComparators.length) {\n result = remainingComparators.every((otherComparator) => {\n return testComparator.intersects(otherComparator, options)\n })\n\n testComparator = remainingComparators.pop()\n }\n\n return result\n}\n\n// comprised of xranges, tildes, stars, and gtlt's at this point.\n// already replaced the hyphen ranges\n// turn into a set of JUST comparators.\nconst parseComparator = (comp, options) => {\n comp = comp.replace(re[t.BUILD], '')\n debug('comp', comp, options)\n comp = replaceCarets(comp, options)\n debug('caret', comp)\n comp = replaceTildes(comp, options)\n debug('tildes', comp)\n comp = replaceXRanges(comp, options)\n debug('xrange', comp)\n comp = replaceStars(comp, options)\n debug('stars', comp)\n return comp\n}\n\nconst isX = id => !id || id.toLowerCase() === 'x' || id === '*'\n\nconst invalidXRangeOrder = (M, m, p) => (\n (isX(M) && !isX(m)) ||\n (isX(m) && p && !isX(p))\n)\n\n// ~, ~> --> * (any, kinda silly)\n// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0-0\n// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0-0\n// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0-0\n// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0-0\n// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0-0\n// ~0.0.1 --> >=0.0.1 <0.1.0-0\nconst replaceTildes = (comp, options) => {\n return comp\n .trim()\n .split(/\\s+/)\n .map((c) => replaceTilde(c, options))\n .join(' ')\n}\n\nconst replaceTilde = (comp, options) => {\n const r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE]\n // if we're including prereleases in the match, then the lower bound is\n // -0, the lowest possible prerelease value, just like x-ranges and carets.\n // this keeps `~1.2` equivalent to the `1.2.x` x-range it's documented as.\n const z = options.includePrerelease ? '-0' : ''\n return comp.replace(r, (_, M, m, p, pr) => {\n debug('tilde', comp, _, M, m, p, pr)\n let ret\n\n if (isX(M)) {\n ret = ''\n } else if (isX(m)) {\n ret = `>=${M}.0.0${z} <${+M + 1}.0.0-0`\n } else if (isX(p)) {\n // ~1.2 == >=1.2.0 <1.3.0-0\n ret = `>=${M}.${m}.0${z} <${M}.${+m + 1}.0-0`\n } else if (pr) {\n debug('replaceTilde pr', pr)\n ret = `>=${M}.${m}.${p}-${pr\n } <${M}.${+m + 1}.0-0`\n } else {\n // ~1.2.3 == >=1.2.3 <1.3.0-0\n ret = `>=${M}.${m}.${p\n } <${M}.${+m + 1}.0-0`\n }\n\n debug('tilde return', ret)\n return ret\n })\n}\n\n// ^ --> * (any, kinda silly)\n// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0-0\n// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0-0\n// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0-0\n// ^1.2.3 --> >=1.2.3 <2.0.0-0\n// ^1.2.0 --> >=1.2.0 <2.0.0-0\n// ^0.0.1 --> >=0.0.1 <0.0.2-0\n// ^0.1.0 --> >=0.1.0 <0.2.0-0\nconst replaceCarets = (comp, options) => {\n return comp\n .trim()\n .split(/\\s+/)\n .map((c) => replaceCaret(c, options))\n .join(' ')\n}\n\nconst replaceCaret = (comp, options) => {\n debug('caret', comp, options)\n const r = options.loose ? re[t.CARETLOOSE] : re[t.CARET]\n const z = options.includePrerelease ? '-0' : ''\n return comp.replace(r, (_, M, m, p, pr) => {\n debug('caret', comp, _, M, m, p, pr)\n let ret\n\n if (isX(M)) {\n ret = ''\n } else if (isX(m)) {\n ret = `>=${M}.0.0${z} <${+M + 1}.0.0-0`\n } else if (isX(p)) {\n if (M === '0') {\n ret = `>=${M}.${m}.0${z} <${M}.${+m + 1}.0-0`\n } else {\n ret = `>=${M}.${m}.0${z} <${+M + 1}.0.0-0`\n }\n } else if (pr) {\n debug('replaceCaret pr', pr)\n if (M === '0') {\n if (m === '0') {\n ret = `>=${M}.${m}.${p}-${pr\n } <${M}.${m}.${+p + 1}-0`\n } else {\n ret = `>=${M}.${m}.${p}-${pr\n } <${M}.${+m + 1}.0-0`\n }\n } else {\n ret = `>=${M}.${m}.${p}-${pr\n } <${+M + 1}.0.0-0`\n }\n } else {\n debug('no pr')\n if (M === '0') {\n if (m === '0') {\n ret = `>=${M}.${m}.${p\n } <${M}.${m}.${+p + 1}-0`\n } else {\n ret = `>=${M}.${m}.${p\n } <${M}.${+m + 1}.0-0`\n }\n } else {\n ret = `>=${M}.${m}.${p\n } <${+M + 1}.0.0-0`\n }\n }\n\n debug('caret return', ret)\n return ret\n })\n}\n\nconst replaceXRanges = (comp, options) => {\n debug('replaceXRanges', comp, options)\n return comp\n .split(/\\s+/)\n .map((c) => replaceXRange(c, options))\n .join(' ')\n}\n\nconst replaceXRange = (comp, options) => {\n comp = comp.trim()\n const r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE]\n return comp.replace(r, (ret, gtlt, M, m, p, pr) => {\n debug('xRange', comp, ret, gtlt, M, m, p, pr)\n if (invalidXRangeOrder(M, m, p)) {\n return comp\n }\n\n const xM = isX(M)\n const xm = xM || isX(m)\n const xp = xm || isX(p)\n const anyX = xp\n\n if (gtlt === '=' && anyX) {\n gtlt = ''\n }\n\n // if we're including prereleases in the match, then we need\n // to fix this to -0, the lowest possible prerelease value\n pr = options.includePrerelease ? '-0' : ''\n\n if (xM) {\n if (gtlt === '>' || gtlt === '<') {\n // nothing is allowed\n ret = '<0.0.0-0'\n } else {\n // nothing is forbidden\n ret = '*'\n }\n } else if (gtlt && anyX) {\n // we know patch is an x, because we have any x at all.\n // replace X with 0\n if (xm) {\n m = 0\n }\n p = 0\n\n if (gtlt === '>') {\n // >1 => >=2.0.0\n // >1.2 => >=1.3.0\n gtlt = '>='\n if (xm) {\n M = +M + 1\n m = 0\n p = 0\n } else {\n m = +m + 1\n p = 0\n }\n } else if (gtlt === '<=') {\n // <=0.7.x is actually <0.8.0, since any 0.7.x should\n // pass. Similarly, <=7.x is actually <8.0.0, etc.\n gtlt = '<'\n if (xm) {\n M = +M + 1\n } else {\n m = +m + 1\n }\n }\n\n if (gtlt === '<') {\n pr = '-0'\n }\n\n ret = `${gtlt + M}.${m}.${p}${pr}`\n } else if (xm) {\n ret = `>=${M}.0.0${pr} <${+M + 1}.0.0-0`\n } else if (xp) {\n ret = `>=${M}.${m}.0${pr\n } <${M}.${+m + 1}.0-0`\n }\n\n debug('xRange return', ret)\n\n return ret\n })\n}\n\n// Because * is AND-ed with everything else in the comparator,\n// and '' means \"any version\", just remove the *s entirely.\nconst replaceStars = (comp, options) => {\n debug('replaceStars', comp, options)\n // Looseness is ignored here. star is always as loose as it gets!\n return comp\n .trim()\n .replace(re[t.STAR], '')\n}\n\nconst replaceGTE0 = (comp, options) => {\n debug('replaceGTE0', comp, options)\n return comp\n .trim()\n .replace(re[options.includePrerelease ? t.GTE0PRE : t.GTE0], '')\n}\n\n// This function is passed to string.replace(re[t.HYPHENRANGE])\n// M, m, patch, prerelease, build\n// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5\n// 1.2.3 - 3.4 => >=1.2.0 <3.5.0-0 Any 3.4.x will do\n// 1.2 - 3.4 => >=1.2.0 <3.5.0-0\n// TODO build?\nconst hyphenReplace = incPr => ($0,\n from, fM, fm, fp, fpr, fb,\n to, tM, tm, tp, tpr) => {\n if (isX(fM)) {\n from = ''\n } else if (isX(fm)) {\n from = `>=${fM}.0.0${incPr ? '-0' : ''}`\n } else if (isX(fp)) {\n from = `>=${fM}.${fm}.0${incPr ? '-0' : ''}`\n } else if (fpr) {\n from = `>=${from}`\n } else {\n from = `>=${from}${incPr ? '-0' : ''}`\n }\n\n if (isX(tM)) {\n to = ''\n } else if (isX(tm)) {\n to = `<${+tM + 1}.0.0-0`\n } else if (isX(tp)) {\n to = `<${tM}.${+tm + 1}.0-0`\n } else if (tpr) {\n to = `<=${tM}.${tm}.${tp}-${tpr}`\n } else if (incPr) {\n to = `<${tM}.${tm}.${+tp + 1}-0`\n } else {\n to = `<=${to}`\n }\n\n return `${from} ${to}`.trim()\n}\n\nconst testSet = (set, version, options) => {\n for (let i = 0; i < set.length; i++) {\n if (!set[i].test(version)) {\n return false\n }\n }\n\n if (version.prerelease.length && !options.includePrerelease) {\n // Find the set of versions that are allowed to have prereleases\n // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0\n // That should allow `1.2.3-pr.2` to pass.\n // However, `1.2.4-alpha.notready` should NOT be allowed,\n // even though it's within the range set by the comparators.\n for (let i = 0; i < set.length; i++) {\n debug(set[i].semver)\n if (set[i].semver === Comparator.ANY) {\n continue\n }\n\n if (set[i].semver.prerelease.length > 0) {\n const allowed = set[i].semver\n if (allowed.major === version.major &&\n allowed.minor === version.minor &&\n allowed.patch === version.patch) {\n return true\n }\n }\n }\n\n // Version has a -pre, but it's not one of the ones we like.\n return false\n }\n\n return true\n}\n","'use strict'\n\nconst ANY = Symbol('SemVer ANY')\n// hoisted class for cyclic dependency\nclass Comparator {\n static get ANY () {\n return ANY\n }\n\n constructor (comp, options) {\n options = parseOptions(options)\n\n if (comp instanceof Comparator) {\n if (comp.loose === !!options.loose) {\n return comp\n } else {\n comp = comp.value\n }\n }\n\n comp = comp.trim().split(/\\s+/).join(' ')\n debug('comparator', comp, options)\n this.options = options\n this.loose = !!options.loose\n this.parse(comp)\n\n if (this.semver === ANY) {\n this.value = ''\n } else {\n this.value = this.operator + this.semver.version\n }\n\n debug('comp', this)\n }\n\n parse (comp) {\n const r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR]\n const m = comp.match(r)\n\n if (!m) {\n throw new TypeError(`Invalid comparator: ${comp}`)\n }\n\n this.operator = m[1] !== undefined ? m[1] : ''\n if (this.operator === '=') {\n this.operator = ''\n }\n\n // if it literally is just '>' or '' then allow anything.\n if (!m[2]) {\n this.semver = ANY\n } else {\n this.semver = new SemVer(m[2], this.options.loose)\n }\n }\n\n toString () {\n return this.value\n }\n\n test (version) {\n debug('Comparator.test', version, this.options.loose)\n\n if (this.semver === ANY || version === ANY) {\n return true\n }\n\n if (typeof version === 'string') {\n try {\n version = new SemVer(version, this.options)\n } catch (er) {\n return false\n }\n }\n\n return cmp(version, this.operator, this.semver, this.options)\n }\n\n intersects (comp, options) {\n if (!(comp instanceof Comparator)) {\n throw new TypeError('a Comparator is required')\n }\n\n if (this.operator === '') {\n if (this.value === '') {\n return true\n }\n return new Range(comp.value, options).test(this.value)\n } else if (comp.operator === '') {\n if (comp.value === '') {\n return true\n }\n return new Range(this.value, options).test(comp.semver)\n }\n\n options = parseOptions(options)\n\n // Special cases where nothing can possibly be lower\n if (options.includePrerelease &&\n (this.value === '<0.0.0-0' || comp.value === '<0.0.0-0')) {\n return false\n }\n if (!options.includePrerelease &&\n (this.value.startsWith('<0.0.0') || comp.value.startsWith('<0.0.0'))) {\n return false\n }\n\n // Same direction increasing (> or >=)\n if (this.operator.startsWith('>') && comp.operator.startsWith('>')) {\n return true\n }\n // Same direction decreasing (< or <=)\n if (this.operator.startsWith('<') && comp.operator.startsWith('<')) {\n return true\n }\n // same SemVer and both sides are inclusive (<= or >=)\n if (\n (this.semver.version === comp.semver.version) &&\n this.operator.includes('=') && comp.operator.includes('=')) {\n return true\n }\n // opposite directions less than\n if (cmp(this.semver, '<', comp.semver, options) &&\n this.operator.startsWith('>') && comp.operator.startsWith('<')) {\n return true\n }\n // opposite directions greater than\n if (cmp(this.semver, '>', comp.semver, options) &&\n this.operator.startsWith('<') && comp.operator.startsWith('>')) {\n return true\n }\n return false\n }\n}\n\nmodule.exports = Comparator\n\nconst parseOptions = require('../internal/parse-options')\nconst { safeRe: re, t } = require('../internal/re')\nconst cmp = require('../functions/cmp')\nconst debug = require('../internal/debug')\nconst SemVer = require('./semver')\nconst Range = require('./range')\n","'use strict'\n\nconst Range = require('../classes/range')\nconst satisfies = (version, range, options) => {\n try {\n range = new Range(range, options)\n } catch (er) {\n return false\n }\n return range.test(version)\n}\nmodule.exports = satisfies\n","'use strict'\n\nconst Range = require('../classes/range')\n\n// Mostly just for testing and legacy API reasons\nconst toComparators = (range, options) =>\n new Range(range, options).set\n .map(comp => comp.map(c => c.value).join(' ').trim().split(' '))\n\nmodule.exports = toComparators\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\n\nconst maxSatisfying = (versions, range, options) => {\n let max = null\n let maxSV = null\n let rangeObj = null\n try {\n rangeObj = new Range(range, options)\n } catch (er) {\n return null\n }\n versions.forEach((v) => {\n if (rangeObj.test(v)) {\n // satisfies(v, range, options)\n if (!max || maxSV.compare(v) === -1) {\n // compare(max, v, true)\n max = v\n maxSV = new SemVer(max, options)\n }\n }\n })\n return max\n}\nmodule.exports = maxSatisfying\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\nconst minSatisfying = (versions, range, options) => {\n let min = null\n let minSV = null\n let rangeObj = null\n try {\n rangeObj = new Range(range, options)\n } catch (er) {\n return null\n }\n versions.forEach((v) => {\n if (rangeObj.test(v)) {\n // satisfies(v, range, options)\n if (!min || minSV.compare(v) === 1) {\n // compare(min, v, true)\n min = v\n minSV = new SemVer(min, options)\n }\n }\n })\n return min\n}\nmodule.exports = minSatisfying\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\nconst gt = require('../functions/gt')\n\nconst minVersion = (range, loose) => {\n range = new Range(range, loose)\n\n let minver = new SemVer('0.0.0')\n if (range.test(minver)) {\n return minver\n }\n\n minver = new SemVer('0.0.0-0')\n if (range.test(minver)) {\n return minver\n }\n\n minver = null\n for (let i = 0; i < range.set.length; ++i) {\n const comparators = range.set[i]\n\n let setMin = null\n comparators.forEach((comparator) => {\n // Clone to avoid manipulating the comparator's semver object.\n const compver = new SemVer(comparator.semver.version)\n switch (comparator.operator) {\n case '>':\n if (compver.prerelease.length === 0) {\n compver.patch++\n } else {\n compver.prerelease.push(0)\n }\n compver.raw = compver.format()\n /* fallthrough */\n case '':\n case '>=':\n if (!setMin || gt(compver, setMin)) {\n setMin = compver\n }\n break\n case '<':\n case '<=':\n /* Ignore maximum versions */\n break\n /* istanbul ignore next */\n default:\n throw new Error(`Unexpected operation: ${comparator.operator}`)\n }\n })\n if (setMin && (!minver || gt(minver, setMin))) {\n minver = setMin\n }\n }\n\n if (minver && range.test(minver)) {\n return minver\n }\n\n return null\n}\nmodule.exports = minVersion\n","'use strict'\n\nconst Range = require('../classes/range')\nconst validRange = (range, options) => {\n try {\n // Return '*' instead of '' so that truthiness works.\n // This will throw if it's invalid anyway\n return new Range(range, options).range || '*'\n } catch (er) {\n return null\n }\n}\nmodule.exports = validRange\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst Comparator = require('../classes/comparator')\nconst { ANY } = Comparator\nconst Range = require('../classes/range')\nconst satisfies = require('../functions/satisfies')\nconst gt = require('../functions/gt')\nconst lt = require('../functions/lt')\nconst lte = require('../functions/lte')\nconst gte = require('../functions/gte')\n\nconst outside = (version, range, hilo, options) => {\n version = new SemVer(version, options)\n range = new Range(range, options)\n\n let gtfn, ltefn, ltfn, comp, ecomp\n switch (hilo) {\n case '>':\n gtfn = gt\n ltefn = lte\n ltfn = lt\n comp = '>'\n ecomp = '>='\n break\n case '<':\n gtfn = lt\n ltefn = gte\n ltfn = gt\n comp = '<'\n ecomp = '<='\n break\n default:\n throw new TypeError('Must provide a hilo val of \"<\" or \">\"')\n }\n\n // If it satisfies the range it is not outside\n if (satisfies(version, range, options)) {\n return false\n }\n\n // From now on, variable terms are as if we're in \"gtr\" mode.\n // but note that everything is flipped for the \"ltr\" function.\n\n for (let i = 0; i < range.set.length; ++i) {\n const comparators = range.set[i]\n\n let high = null\n let low = null\n\n comparators.forEach((comparator) => {\n if (comparator.semver === ANY) {\n comparator = new Comparator('>=0.0.0')\n }\n high = high || comparator\n low = low || comparator\n if (gtfn(comparator.semver, high.semver, options)) {\n high = comparator\n } else if (ltfn(comparator.semver, low.semver, options)) {\n low = comparator\n }\n })\n\n // If the edge version comparator has a operator then our version\n // isn't outside it\n if (high.operator === comp || high.operator === ecomp) {\n return false\n }\n\n // If the lowest version comparator has an operator and our version\n // is less than it then it isn't higher than the range\n if ((!low.operator || low.operator === comp) &&\n ltefn(version, low.semver)) {\n return false\n } else if (low.operator === ecomp && ltfn(version, low.semver)) {\n return false\n }\n }\n return true\n}\n\nmodule.exports = outside\n","'use strict'\n\n// Determine if version is greater than all the versions possible in the range.\nconst outside = require('./outside')\nconst gtr = (version, range, options) => outside(version, range, '>', options)\nmodule.exports = gtr\n","'use strict'\n\nconst outside = require('./outside')\n// Determine if version is less than all the versions possible in the range\nconst ltr = (version, range, options) => outside(version, range, '<', options)\nmodule.exports = ltr\n","'use strict'\n\nconst Range = require('../classes/range')\nconst intersects = (r1, r2, options) => {\n r1 = new Range(r1, options)\n r2 = new Range(r2, options)\n return r1.intersects(r2, options)\n}\nmodule.exports = intersects\n","'use strict'\n\n// given a set of versions and a range, create a \"simplified\" range\n// that includes the same versions that the original range does\n// If the original range is shorter than the simplified one, return that.\nconst satisfies = require('../functions/satisfies.js')\nconst compare = require('../functions/compare.js')\nmodule.exports = (versions, range, options) => {\n const set = []\n let first = null\n let prev = null\n const v = versions.sort((a, b) => compare(a, b, options))\n for (const version of v) {\n const included = satisfies(version, range, options)\n if (included) {\n prev = version\n if (!first) {\n first = version\n }\n } else {\n if (prev) {\n set.push([first, prev])\n }\n prev = null\n first = null\n }\n }\n if (first) {\n set.push([first, null])\n }\n\n const ranges = []\n for (const [min, max] of set) {\n if (min === max) {\n ranges.push(min)\n } else if (!max && min === v[0]) {\n ranges.push('*')\n } else if (!max) {\n ranges.push(`>=${min}`)\n } else if (min === v[0]) {\n ranges.push(`<=${max}`)\n } else {\n ranges.push(`${min} - ${max}`)\n }\n }\n const simplified = ranges.join(' || ')\n const original = typeof range.raw === 'string' ? range.raw : String(range)\n return simplified.length < original.length ? simplified : range\n}\n","'use strict'\n\nconst Range = require('../classes/range.js')\nconst Comparator = require('../classes/comparator.js')\nconst { ANY } = Comparator\nconst satisfies = require('../functions/satisfies.js')\nconst compare = require('../functions/compare.js')\n\n// Complex range `r1 || r2 || ...` is a subset of `R1 || R2 || ...` iff:\n// - Every simple range `r1, r2, ...` is a null set, OR\n// - Every simple range `r1, r2, ...` which is not a null set is a subset of\n// some `R1, R2, ...`\n//\n// Simple range `c1 c2 ...` is a subset of simple range `C1 C2 ...` iff:\n// - If c is only the ANY comparator\n// - If C is only the ANY comparator, return true\n// - Else if in prerelease mode, return false\n// - else replace c with `[>=0.0.0]`\n// - If C is only the ANY comparator\n// - if in prerelease mode, return true\n// - else replace C with `[>=0.0.0]`\n// - Let EQ be the set of = comparators in c\n// - If EQ is more than one, return true (null set)\n// - Let GT be the highest > or >= comparator in c\n// - Let LT be the lowest < or <= comparator in c\n// - If GT and LT, and GT.semver > LT.semver, return true (null set)\n// - If any C is a = range, and GT or LT are set, return false\n// - If EQ\n// - If GT, and EQ does not satisfy GT, return true (null set)\n// - If LT, and EQ does not satisfy LT, return true (null set)\n// - If EQ satisfies every C, return true\n// - Else return false\n// - If GT\n// - If GT.semver is lower than any > or >= comp in C, return false\n// - If GT is >=, and GT.semver does not satisfy every C, return false\n// - If GT.semver has a prerelease, and not in prerelease mode\n// - If no C has a prerelease and the GT.semver tuple, return false\n// - If LT\n// - If LT.semver is greater than any < or <= comp in C, return false\n// - If LT is <=, and LT.semver does not satisfy every C, return false\n// - If LT.semver has a prerelease, and not in prerelease mode\n// - If no C has a prerelease and the LT.semver tuple, return false\n// - Else return true\n\nconst subset = (sub, dom, options = {}) => {\n if (sub === dom) {\n return true\n }\n\n sub = new Range(sub, options)\n dom = new Range(dom, options)\n let sawNonNull = false\n\n OUTER: for (const simpleSub of sub.set) {\n for (const simpleDom of dom.set) {\n const isSub = simpleSubset(simpleSub, simpleDom, options)\n sawNonNull = sawNonNull || isSub !== null\n if (isSub) {\n continue OUTER\n }\n }\n // the null set is a subset of everything, but null simple ranges in\n // a complex range should be ignored. so if we saw a non-null range,\n // then we know this isn't a subset, but if EVERY simple range was null,\n // then it is a subset.\n if (sawNonNull) {\n return false\n }\n }\n return true\n}\n\nconst minimumVersionWithPreRelease = [new Comparator('>=0.0.0-0')]\nconst minimumVersion = [new Comparator('>=0.0.0')]\n\nconst simpleSubset = (sub, dom, options) => {\n if (sub === dom) {\n return true\n }\n\n if (sub.length === 1 && sub[0].semver === ANY) {\n if (dom.length === 1 && dom[0].semver === ANY) {\n return true\n } else if (options.includePrerelease) {\n sub = minimumVersionWithPreRelease\n } else {\n sub = minimumVersion\n }\n }\n\n if (dom.length === 1 && dom[0].semver === ANY) {\n if (options.includePrerelease) {\n return true\n } else {\n dom = minimumVersion\n }\n }\n\n const eqSet = new Set()\n let gt, lt\n for (const c of sub) {\n if (c.operator === '>' || c.operator === '>=') {\n gt = higherGT(gt, c, options)\n } else if (c.operator === '<' || c.operator === '<=') {\n lt = lowerLT(lt, c, options)\n } else {\n eqSet.add(c.semver)\n }\n }\n\n if (eqSet.size > 1) {\n return null\n }\n\n let gtltComp\n if (gt && lt) {\n gtltComp = compare(gt.semver, lt.semver, options)\n if (gtltComp > 0) {\n return null\n } else if (gtltComp === 0 && (gt.operator !== '>=' || lt.operator !== '<=')) {\n return null\n }\n }\n\n // will iterate one or zero times\n for (const eq of eqSet) {\n if (gt && !satisfies(eq, String(gt), options)) {\n return null\n }\n\n if (lt && !satisfies(eq, String(lt), options)) {\n return null\n }\n\n for (const c of dom) {\n if (!satisfies(eq, String(c), options)) {\n return false\n }\n }\n\n return true\n }\n\n let higher, lower\n let hasDomLT, hasDomGT\n // if the subset has a prerelease, we need a comparator in the superset\n // with the same tuple and a prerelease, or it's not a subset\n let needDomLTPre = lt &&\n !options.includePrerelease &&\n lt.semver.prerelease.length ? lt.semver : false\n let needDomGTPre = gt &&\n !options.includePrerelease &&\n gt.semver.prerelease.length ? gt.semver : false\n // exception: <1.2.3-0 is the same as <1.2.3\n if (needDomLTPre && needDomLTPre.prerelease.length === 1 &&\n lt.operator === '<' && needDomLTPre.prerelease[0] === 0) {\n needDomLTPre = false\n }\n\n for (const c of dom) {\n hasDomGT = hasDomGT || c.operator === '>' || c.operator === '>='\n hasDomLT = hasDomLT || c.operator === '<' || c.operator === '<='\n if (gt) {\n if (needDomGTPre) {\n if (c.semver.prerelease && c.semver.prerelease.length &&\n c.semver.major === needDomGTPre.major &&\n c.semver.minor === needDomGTPre.minor &&\n c.semver.patch === needDomGTPre.patch) {\n needDomGTPre = false\n }\n }\n if (c.operator === '>' || c.operator === '>=') {\n higher = higherGT(gt, c, options)\n if (higher === c && higher !== gt) {\n return false\n }\n } else if (gt.operator === '>=' && !c.test(gt.semver)) {\n return false\n }\n }\n if (lt) {\n if (needDomLTPre) {\n if (c.semver.prerelease && c.semver.prerelease.length &&\n c.semver.major === needDomLTPre.major &&\n c.semver.minor === needDomLTPre.minor &&\n c.semver.patch === needDomLTPre.patch) {\n needDomLTPre = false\n }\n }\n if (c.operator === '<' || c.operator === '<=') {\n lower = lowerLT(lt, c, options)\n if (lower === c && lower !== lt) {\n return false\n }\n } else if (lt.operator === '<=' && !c.test(lt.semver)) {\n return false\n }\n }\n if (!c.operator && (lt || gt) && gtltComp !== 0) {\n return false\n }\n }\n\n // if there was a < or >, and nothing in the dom, then must be false\n // UNLESS it was limited by another range in the other direction.\n // Eg, >1.0.0 <1.0.1 is still a subset of <2.0.0\n if (gt && hasDomLT && !lt && gtltComp !== 0) {\n return false\n }\n\n if (lt && hasDomGT && !gt && gtltComp !== 0) {\n return false\n }\n\n // we needed a prerelease range in a specific tuple, but didn't get one\n // then this isn't a subset. eg >=1.2.3-pre is not a subset of >=1.0.0,\n // because it includes prereleases in the 1.2.3 tuple\n if (needDomGTPre || needDomLTPre) {\n return false\n }\n\n return true\n}\n\n// >=1.2.3 is lower than >1.2.3\nconst higherGT = (a, b, options) => {\n if (!a) {\n return b\n }\n const comp = compare(a.semver, b.semver, options)\n return comp > 0 ? a\n : comp < 0 ? b\n : b.operator === '>' && a.operator === '>=' ? b\n : a\n}\n\n// <=1.2.3 is higher than <1.2.3\nconst lowerLT = (a, b, options) => {\n if (!a) {\n return b\n }\n const comp = compare(a.semver, b.semver, options)\n return comp < 0 ? a\n : comp > 0 ? b\n : b.operator === '<' && a.operator === '<=' ? b\n : a\n}\n\nmodule.exports = subset\n","'use strict'\n\n// just pre-load all the stuff that index.js lazily exports\nconst internalRe = require('./internal/re')\nconst constants = require('./internal/constants')\nconst SemVer = require('./classes/semver')\nconst identifiers = require('./internal/identifiers')\nconst parse = require('./functions/parse')\nconst valid = require('./functions/valid')\nconst clean = require('./functions/clean')\nconst inc = require('./functions/inc')\nconst diff = require('./functions/diff')\nconst major = require('./functions/major')\nconst minor = require('./functions/minor')\nconst patch = require('./functions/patch')\nconst prerelease = require('./functions/prerelease')\nconst compare = require('./functions/compare')\nconst rcompare = require('./functions/rcompare')\nconst compareLoose = require('./functions/compare-loose')\nconst compareBuild = require('./functions/compare-build')\nconst sort = require('./functions/sort')\nconst rsort = require('./functions/rsort')\nconst gt = require('./functions/gt')\nconst lt = require('./functions/lt')\nconst eq = require('./functions/eq')\nconst neq = require('./functions/neq')\nconst gte = require('./functions/gte')\nconst lte = require('./functions/lte')\nconst cmp = require('./functions/cmp')\nconst coerce = require('./functions/coerce')\nconst truncate = require('./functions/truncate')\nconst Comparator = require('./classes/comparator')\nconst Range = require('./classes/range')\nconst satisfies = require('./functions/satisfies')\nconst toComparators = require('./ranges/to-comparators')\nconst maxSatisfying = require('./ranges/max-satisfying')\nconst minSatisfying = require('./ranges/min-satisfying')\nconst minVersion = require('./ranges/min-version')\nconst validRange = require('./ranges/valid')\nconst outside = require('./ranges/outside')\nconst gtr = require('./ranges/gtr')\nconst ltr = require('./ranges/ltr')\nconst intersects = require('./ranges/intersects')\nconst simplifyRange = require('./ranges/simplify')\nconst subset = require('./ranges/subset')\nmodule.exports = {\n parse,\n valid,\n clean,\n inc,\n diff,\n major,\n minor,\n patch,\n prerelease,\n compare,\n rcompare,\n compareLoose,\n compareBuild,\n sort,\n rsort,\n gt,\n lt,\n eq,\n neq,\n gte,\n lte,\n cmp,\n coerce,\n truncate,\n Comparator,\n Range,\n satisfies,\n toComparators,\n maxSatisfying,\n minSatisfying,\n minVersion,\n validRange,\n outside,\n gtr,\n ltr,\n intersects,\n simplifyRange,\n subset,\n SemVer,\n re: internalRe.re,\n src: internalRe.src,\n tokens: internalRe.t,\n SEMVER_SPEC_VERSION: constants.SEMVER_SPEC_VERSION,\n RELEASE_TYPES: constants.RELEASE_TYPES,\n compareIdentifiers: identifiers.compareIdentifiers,\n rcompareIdentifiers: identifiers.rcompareIdentifiers,\n}\n","import { a as NetworkRuntimeRegistry, c as decodeRpcValue, d as RPC_NOTIFICATION, f as log, i as ReplicaRegistry, l as encodeRpcValue, n as readDaemonMetadata, o as createSocketRpcConnection, r as ReplicaAlreadyActiveError, s as daemonPaths, t as LeafRelayDaemonServer, u as RPC_METHOD } from \"./server-VUA8bWES.js\";\nimport { randomUUID } from \"node:crypto\";\nimport { compare, valid } from \"semver\";\nimport { mkdir, readFile, rm, stat } from \"node:fs/promises\";\nimport { connect } from \"node:net\";\nimport { spawn } from \"node:child_process\";\nimport { fileURLToPath } from \"node:url\";\n// src/client.ts\nconst START_TIMEOUT_MS = 15e3;\nconst START_POLL_MS = 75;\nvar LeafRelayDaemonClient = class LeafRelayDaemonClient {\n\toptions;\n\tsocket;\n\trpc;\n\tconnected = false;\n\tclosing = false;\n\treconnecting;\n\treconnectTimer;\n\tcancelReconnectWait;\n\tconnectionClosed = Promise.resolve();\n\tinitializeState;\n\tpaths;\n\tenvironment;\n\tlogListeners = /* @__PURE__ */ new Set();\n\tstatusListeners = /* @__PURE__ */ new Set();\n\tconflictListeners = /* @__PURE__ */ new Set();\n\tprojectListeners = /* @__PURE__ */ new Set();\n\treplicas = /* @__PURE__ */ new Map();\n\tprojects = /* @__PURE__ */ new Map();\n\tclientId;\n\tconstructor(options) {\n\t\tthis.options = options;\n\t\tthis.environment = options.environment ?? process.env;\n\t\tthis.paths = daemonPaths(this.environment);\n\t\tthis.clientId = options.clientId ?? randomUUID();\n\t}\n\tstatic async connect(options) {\n\t\tconst client = new LeafRelayDaemonClient(options);\n\t\tclient.reconnecting = client.connectTransport();\n\t\ttry {\n\t\t\tawait client.reconnecting;\n\t\t} catch (error) {\n\t\t\tclient.close();\n\t\t\tthrow error;\n\t\t} finally {\n\t\t\tclient.reconnecting = void 0;\n\t\t}\n\t\treturn client;\n\t}\n\tget initializeResult() {\n\t\treturn this.initializeState;\n\t}\n\tstatus() {\n\t\treturn this.request(RPC_METHOD.daemonStatus);\n\t}\n\tasync attachReplica(params) {\n\t\tconst replicaId = randomUUID();\n\t\tconst registration = { params };\n\t\tthis.replicas.set(replicaId, registration);\n\t\ttry {\n\t\t\tif (!this.connected) await this.ensureReconnected();\n\t\t\tif (!registration.result) {\n\t\t\t\tconst rpc = this.rpc;\n\t\t\t\ttry {\n\t\t\t\t\tawait this.registerReplica(replicaId, registration);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tif (this.closing || this.rpc === rpc && this.connected) throw error;\n\t\t\t\t\tawait this.ensureReconnected();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn registration.result;\n\t\t} catch (error) {\n\t\t\tthis.replicas.delete(replicaId);\n\t\t\tthrow error;\n\t\t}\n\t}\n\tasync detachReplica(replicaId) {\n\t\tif (!this.connected) await this.ensureReconnected();\n\t\tconst registration = this.replicas.get(replicaId);\n\t\tthis.replicas.delete(replicaId);\n\t\tawait this.request(RPC_METHOD.replicaDetach, { replicaId: registration?.currentId ?? replicaId });\n\t}\n\tasync resolveConflict(params) {\n\t\tif (!this.connected) await this.ensureReconnected();\n\t\tconst registration = this.replicas.get(params.replicaId);\n\t\tawait this.request(RPC_METHOD.replicaResolveConflict, {\n\t\t\t...params,\n\t\t\treplicaId: registration?.currentId ?? params.replicaId\n\t\t});\n\t}\n\tasync retry(replicaId, path) {\n\t\tif (!this.connected) await this.ensureReconnected();\n\t\tconst registration = this.replicas.get(replicaId);\n\t\tawait this.request(RPC_METHOD.replicaRetry, {\n\t\t\treplicaId: registration?.currentId ?? replicaId,\n\t\t\tpath\n\t\t});\n\t}\n\tonLog(handler) {\n\t\treturn addListener(this.logListeners, handler);\n\t}\n\tonReplicaStatus(handler) {\n\t\treturn addListener(this.statusListeners, handler);\n\t}\n\tonReplicaConflict(handler) {\n\t\treturn addListener(this.conflictListeners, handler);\n\t}\n\tlistServers() {\n\t\treturn this.request(RPC_METHOD.serverList);\n\t}\n\tasync addServer(name, url) {\n\t\tawait this.request(RPC_METHOD.serverAdd, {\n\t\t\tname,\n\t\t\turl\n\t\t});\n\t}\n\tasync removeServer(server) {\n\t\tawait this.request(RPC_METHOD.serverRemove, { server });\n\t}\n\tlogin(params) {\n\t\treturn this.request(RPC_METHOD.sessionLogin, params);\n\t}\n\timportSession(params) {\n\t\treturn this.request(RPC_METHOD.sessionImport, params);\n\t}\n\tasync logout(server) {\n\t\tawait this.request(RPC_METHOD.sessionLogout, { server });\n\t}\n\tasync callServer(server, operation, args = []) {\n\t\tconst result = await this.request(RPC_METHOD.serverCall, {\n\t\t\tserver,\n\t\t\toperation,\n\t\t\targs: encodeRpcValue(args)\n\t\t});\n\t\treturn decodeRpcValue(result);\n\t}\n\tasync openProject(server, projectId) {\n\t\tconst projectKey = `${new URL(server.includes(\"://\") ? server : `https://${server}`).host}:${projectId}`;\n\t\tconst registration = {\n\t\t\tserver,\n\t\t\tprojectId,\n\t\t\tcurrentKey: projectKey\n\t\t};\n\t\tthis.projects.set(projectKey, registration);\n\t\ttry {\n\t\t\tif (!this.connected) await this.ensureReconnected();\n\t\t\tif (!registration.result) {\n\t\t\t\tconst rpc = this.rpc;\n\t\t\t\ttry {\n\t\t\t\t\tawait this.registerProject(registration);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tif (this.closing || this.rpc === rpc && this.connected) throw error;\n\t\t\t\t\tawait this.ensureReconnected();\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn registration.result;\n\t\t} catch (error) {\n\t\t\tif (this.projects.get(projectKey) === registration) this.projects.delete(projectKey);\n\t\t\tthrow error;\n\t\t}\n\t}\n\tasync closeProject(projectKey) {\n\t\tconst registration = this.projects.get(projectKey);\n\t\tawait this.request(RPC_METHOD.projectClose, { projectKey: registration?.currentKey ?? projectKey });\n\t\tthis.projects.delete(projectKey);\n\t}\n\tasync callProject(projectKey, operation, args = []) {\n\t\tconst registration = this.projects.get(projectKey);\n\t\tconst result = await this.request(RPC_METHOD.projectCall, {\n\t\t\tprojectKey: registration?.currentKey ?? projectKey,\n\t\t\toperation,\n\t\t\targs: encodeRpcValue(args)\n\t\t});\n\t\treturn decodeRpcValue(result);\n\t}\n\tonProjectEvent(handler) {\n\t\treturn addListener(this.projectListeners, handler);\n\t}\n\tasync shutdownDaemon() {\n\t\tthis.closing = true;\n\t\tawait this.rawRequest(RPC_METHOD.daemonShutdown);\n\t}\n\tclose() {\n\t\tthis.closing = true;\n\t\tif (this.reconnectTimer) clearTimeout(this.reconnectTimer);\n\t\tthis.cancelReconnectWait?.();\n\t\tthis.connected = false;\n\t\tthis.rpc?.dispose();\n\t\tthis.socket?.destroy();\n\t\tthis.rpc = void 0;\n\t\tthis.socket = void 0;\n\t}\n\tasync request(method, params) {\n\t\tif (!this.connected) await this.ensureReconnected();\n\t\treturn this.rawRequest(method, params);\n\t}\n\trawRequest(method, params) {\n\t\tif (!this.rpc) return Promise.reject(/* @__PURE__ */ new Error(\"LeafRelay daemon is disconnected.\"));\n\t\tconst response = params === void 0 ? this.rpc.sendRequest(method) : this.rpc.sendRequest(method, params);\n\t\treturn Promise.race([response, this.connectionClosed.then(() => Promise.reject(/* @__PURE__ */ new Error(\"LeafRelay daemon connection closed.\")))]);\n\t}\n\tasync ensureReconnected() {\n\t\tif (this.closing) throw new Error(\"LeafRelay daemon client is closed.\");\n\t\tthis.reconnecting ??= this.reconnectTransport().finally(() => {\n\t\t\tthis.reconnecting = void 0;\n\t\t});\n\t\treturn this.reconnecting;\n\t}\n\tasync reconnectTransport() {\n\t\tlet attempt = 0;\n\t\twhile (!this.closing) try {\n\t\t\tawait this.connectTransport();\n\t\t\treturn;\n\t\t} catch (error) {\n\t\t\tconst code = error.code;\n\t\t\tif (code === -32001 || code === -32002 || error instanceof DaemonVersionError || this.closing) throw error;\n\t\t\tconst delay = Math.min(1e3 * 2 ** attempt++, 16e3);\n\t\t\tdispatch(this.logListeners, {\n\t\t\t\ttimestamp: (/* @__PURE__ */ new Date()).toISOString(),\n\t\t\t\tlevel: \"warn\",\n\t\t\t\tmessage: `Daemon reconnection failed; retrying in ${delay}ms: ${error instanceof Error ? error.message : String(error)}`\n\t\t\t});\n\t\t\tawait new Promise((resolveWait) => {\n\t\t\t\tthis.cancelReconnectWait = resolveWait;\n\t\t\t\tthis.reconnectTimer = setTimeout(resolveWait, delay);\n\t\t\t});\n\t\t\tthis.cancelReconnectWait = void 0;\n\t\t\tthis.reconnectTimer = void 0;\n\t\t}\n\t\tthrow new Error(\"LeafRelay daemon client is closed.\");\n\t}\n\tasync connectTransport() {\n\t\tconst metadata = await this.findOrStartDaemon();\n\t\tconst socket = await tryConnect(metadata);\n\t\tif (!socket) throw new Error(`LeafRelay daemon is not running at ${this.paths.socketPath}.`);\n\t\tconst rpc = createSocketRpcConnection(socket);\n\t\tlet signalClosed;\n\t\tthis.connectionClosed = new Promise((resolveClosed) => {\n\t\t\tsignalClosed = resolveClosed;\n\t\t});\n\t\tthis.socket = socket;\n\t\tthis.rpc = rpc;\n\t\tthis.registerNotifications(rpc);\n\t\trpc.onClose(() => {\n\t\t\tsignalClosed();\n\t\t\tif (this.rpc !== rpc) return;\n\t\t\tthis.connected = false;\n\t\t\tthis.rpc = void 0;\n\t\t\tthis.socket = void 0;\n\t\t\tfor (const registration of this.replicas.values()) {\n\t\t\t\tregistration.currentId = void 0;\n\t\t\t\tregistration.result = void 0;\n\t\t\t}\n\t\t\tfor (const registration of this.projects.values()) registration.result = void 0;\n\t\t\tif (!this.closing) this.ensureReconnected().catch((error) => dispatch(this.logListeners, {\n\t\t\t\ttimestamp: (/* @__PURE__ */ new Date()).toISOString(),\n\t\t\t\tlevel: \"error\",\n\t\t\t\tmessage: `Daemon reconnection failed: ${error instanceof Error ? error.message : String(error)}`\n\t\t\t}));\n\t\t});\n\t\trpc.listen();\n\t\ttry {\n\t\t\tthis.initializeState = await rpc.sendRequest(RPC_METHOD.initialize, {\n\t\t\t\ttoken: metadata.token,\n\t\t\t\tclientId: this.clientId,\n\t\t\t\tclientName: this.options.clientName,\n\t\t\t\tclientVersion: this.options.clientVersion,\n\t\t\t\tprotocolVersion: 1\n\t\t\t});\n\t\t\tawait this.restoreRegistrations();\n\t\t\tthis.connected = true;\n\t\t} catch (connectError) {\n\t\t\tthis.connected = false;\n\t\t\trpc.dispose();\n\t\t\tsocket.destroy();\n\t\t\tif (this.rpc === rpc) {\n\t\t\t\tthis.rpc = void 0;\n\t\t\t\tthis.socket = void 0;\n\t\t\t}\n\t\t\tthrow connectError;\n\t\t}\n\t}\n\tasync restoreRegistrations() {\n\t\tfor (const registration of this.projects.values()) await this.registerProject(registration);\n\t\tfor (const [replicaId, registration] of this.replicas) await this.registerReplica(replicaId, registration);\n\t\tif (this.projects.size !== 0 || this.replicas.size !== 0) dispatch(this.logListeners, {\n\t\t\ttimestamp: (/* @__PURE__ */ new Date()).toISOString(),\n\t\t\tlevel: \"info\",\n\t\t\tmessage: `Daemon registrations restored: ${this.projects.size} project(s), ${this.replicas.size} local replica(s).`\n\t\t});\n\t}\n\tasync registerProject(registration) {\n\t\tconst rpc = this.rpc;\n\t\tconst result = await this.rawRequest(RPC_METHOD.projectOpen, {\n\t\t\tserver: registration.server,\n\t\t\tprojectId: registration.projectId\n\t\t});\n\t\tif (this.rpc !== rpc) throw new Error(\"LeafRelay daemon connection changed during project attachment.\");\n\t\tregistration.currentKey = result.projectKey;\n\t\tregistration.result = result;\n\t}\n\tasync registerReplica(replicaId, registration) {\n\t\tconst rpc = this.rpc;\n\t\tconst result = await this.rawRequest(RPC_METHOD.replicaAttach, registration.params);\n\t\tif (this.rpc !== rpc) throw new Error(\"LeafRelay daemon connection changed during replica attachment.\");\n\t\tregistration.currentId = result.replicaId;\n\t\tregistration.result = {\n\t\t\t...result,\n\t\t\treplicaId\n\t\t};\n\t\tdispatch(this.statusListeners, {\n\t\t\treplicaId,\n\t\t\tstatus: result.status\n\t\t});\n\t\tfor (const path of result.conflicts) dispatch(this.conflictListeners, {\n\t\t\treplicaId,\n\t\t\tpath,\n\t\t\tconflicts: result.conflicts,\n\t\t\treason: \"This path has an unresolved synchronization conflict.\"\n\t\t});\n\t}\n\tregisterNotifications(rpc) {\n\t\trpc.onNotification(RPC_NOTIFICATION.log, (event) => dispatch(this.logListeners, event));\n\t\trpc.onNotification(RPC_NOTIFICATION.replicaStatus, (event) => {\n\t\t\tdispatch(this.statusListeners, {\n\t\t\t\t...event,\n\t\t\t\treplicaId: this.stableReplicaId(event.replicaId)\n\t\t\t});\n\t\t});\n\t\trpc.onNotification(RPC_NOTIFICATION.replicaConflict, (event) => {\n\t\t\tdispatch(this.conflictListeners, {\n\t\t\t\t...event,\n\t\t\t\treplicaId: this.stableReplicaId(event.replicaId)\n\t\t\t});\n\t\t});\n\t\trpc.onNotification(RPC_NOTIFICATION.projectEvent, (event) => {\n\t\t\tdispatch(this.projectListeners, {\n\t\t\t\t...event,\n\t\t\t\tprojectKey: this.stableProjectKey(event.projectKey)\n\t\t\t});\n\t\t});\n\t}\n\tstableReplicaId(currentId) {\n\t\treturn [...this.replicas].find(([, registration]) => registration.currentId === currentId)?.[0] ?? currentId;\n\t}\n\tstableProjectKey(currentKey) {\n\t\treturn [...this.projects].find(([, registration]) => registration.currentKey === currentKey)?.[0] ?? currentKey;\n\t}\n\tasync findOrStartDaemon() {\n\t\tlet metadata = await readMetadata(this.paths);\n\t\tif (metadata && await tryConnect(metadata).then((socket) => {\n\t\t\tsocket?.destroy();\n\t\t\treturn Boolean(socket);\n\t\t})) {\n\t\t\tconst order = versionOrder(metadata, this.options);\n\t\t\tif (order > 0) throw newerDaemonError(metadata, this.options);\n\t\t\tif (order === 0 || this.options.autoStart === false) return metadata;\n\t\t}\n\t\tif (this.options.autoStart === false) throw new Error(`LeafRelay daemon is not running at ${this.paths.socketPath}.`);\n\t\tmetadata = await startDaemon(this.paths, this.options, this.environment);\n\t\treturn metadata;\n\t}\n};\nfunction addListener(listeners, handler) {\n\tlisteners.add(handler);\n\treturn { dispose: () => listeners.delete(handler) };\n}\nfunction dispatch(listeners, event) {\n\tfor (const listener of listeners) listener(event);\n}\nasync function startDaemon(paths, options, environment) {\n\tawait mkdir(paths.home, {\n\t\trecursive: true,\n\t\tmode: 448\n\t});\n\tlet ownsLock = false;\n\ttry {\n\t\tawait mkdir(paths.startupLockPath, { mode: 448 });\n\t\townsLock = true;\n\t} catch (lockError) {\n\t\tif (lockError.code !== \"EEXIST\") throw lockError;\n\t\tconst lockStat = await stat(paths.startupLockPath).catch(() => void 0);\n\t\tif (lockStat && Date.now() - lockStat.mtimeMs > START_TIMEOUT_MS) {\n\t\t\tawait rm(paths.startupLockPath, {\n\t\t\t\trecursive: true,\n\t\t\t\tforce: true\n\t\t\t});\n\t\t\treturn startDaemon(paths, options, environment);\n\t\t}\n\t}\n\tif (ownsLock) try {\n\t\tconst running = await readMetadata(paths);\n\t\tif (running && await isListening(running)) {\n\t\t\tconst order = versionOrder(running, options);\n\t\t\tif (order > 0) throw newerDaemonError(running, options);\n\t\t\tif (order === 0) return running;\n\t\t\tlog(`Upgrading LeafRelay daemon ${running.version} to ${options.clientVersion}; waiting for active synchronization to stop.`);\n\t\t\tawait stopForUpgrade(paths, running, options);\n\t\t}\n\t\tconst entrypoint = options.daemonEntrypoint ?? new URL(\"./daemon.js\", import.meta.url);\n\t\tconst childEnvironment = { ...environment };\n\t\tchildEnvironment.LEAFRELAY_HOME = paths.home;\n\t\tspawn(process.execPath, [typeof entrypoint === \"string\" ? entrypoint : fileURLToPath(entrypoint)], {\n\t\t\tdetached: true,\n\t\t\tstdio: \"ignore\",\n\t\t\tenv: childEnvironment\n\t\t}).unref();\n\t\tconst started = await waitForDaemon(paths);\n\t\tif (versionOrder(started, options) !== 0) throw new DaemonVersionError(`Started daemon ${started.version} does not match client ${options.clientVersion}. Update the LeafRelay installation and retry.`);\n\t\treturn started;\n\t} finally {\n\t\tawait rm(paths.startupLockPath, {\n\t\t\trecursive: true,\n\t\t\tforce: true\n\t\t});\n\t}\n\tconst deadline = Date.now() + START_TIMEOUT_MS;\n\twhile (Date.now() < deadline) {\n\t\tconst metadata = await waitForDaemon(paths);\n\t\tconst order = versionOrder(metadata, options);\n\t\tif (order > 0) throw newerDaemonError(metadata, options);\n\t\tif (order === 0) return metadata;\n\t\tawait new Promise((resolveWait) => setTimeout(resolveWait, START_POLL_MS));\n\t}\n\tthrow new Error(\"Timed out waiting for the LeafRelay daemon upgrade.\");\n}\nasync function waitForDaemon(paths) {\n\tconst deadline = Date.now() + START_TIMEOUT_MS;\n\tlet lastError;\n\twhile (Date.now() < deadline) {\n\t\ttry {\n\t\t\tconst metadata = await readMetadata(paths);\n\t\t\tif (metadata && await tryConnect(metadata).then((socket) => {\n\t\t\t\tsocket?.destroy();\n\t\t\t\treturn Boolean(socket);\n\t\t\t})) return metadata;\n\t\t} catch (pollError) {\n\t\t\tlastError = pollError;\n\t\t}\n\t\tawait new Promise((resolveWait) => setTimeout(resolveWait, START_POLL_MS));\n\t}\n\tthrow new Error(`LeafRelay daemon did not start within ${START_TIMEOUT_MS}ms.`, { cause: lastError });\n}\nasync function readMetadata(paths) {\n\ttry {\n\t\treturn JSON.parse(await readFile(paths.metadataPath, \"utf8\"));\n\t} catch (readError) {\n\t\tif (readError.code === \"ENOENT\") return;\n\t\tthrow readError;\n\t}\n}\nasync function tryConnect(metadata) {\n\treturn new Promise((resolveConnection) => {\n\t\tconst socket = connect(metadata.socketPath);\n\t\tsocket.once(\"connect\", () => resolveConnection(socket));\n\t\tsocket.once(\"error\", () => {\n\t\t\tsocket.destroy();\n\t\t\tresolveConnection(void 0);\n\t\t});\n\t});\n}\nvar DaemonVersionError = class extends Error {};\nfunction versionOrder(metadata, options) {\n\treturn valid(metadata.version) && valid(options.clientVersion) ? compare(metadata.version, options.clientVersion) : 0;\n}\nfunction newerDaemonError(metadata, options) {\n\treturn new DaemonVersionError(`LeafRelay daemon ${metadata.version} is newer than this ${options.clientName} client (${options.clientVersion}). Update ${options.clientName === \"vscode\" ? \"the LeafRelay VS Code extension\" : \"LeafRelay (npm install -g leafrelay@latest)\"} and retry.`);\n}\nasync function isListening(metadata) {\n\tconst socket = await tryConnect(metadata);\n\tsocket?.destroy();\n\treturn Boolean(socket);\n}\nasync function stopForUpgrade(paths, metadata, options) {\n\tconst socket = await tryConnect(metadata);\n\tif (!socket) return;\n\tconst rpc = createSocketRpcConnection(socket);\n\trpc.listen();\n\tlet timer;\n\ttry {\n\t\tawait Promise.race([(async () => {\n\t\t\tawait rpc.sendRequest(RPC_METHOD.initialize, {\n\t\t\t\ttoken: metadata.token,\n\t\t\t\tclientId: randomUUID(),\n\t\t\t\tclientName: options.clientName,\n\t\t\t\tclientVersion: options.clientVersion,\n\t\t\t\tprotocolVersion: metadata.protocolVersion\n\t\t\t});\n\t\t\tawait rpc.sendRequest(RPC_METHOD.daemonShutdown);\n\t\t\tconst deadline = Date.now() + START_TIMEOUT_MS;\n\t\t\twhile (Date.now() < deadline) {\n\t\t\t\tconst current = await readMetadata(paths);\n\t\t\t\tif (!current || current.token !== metadata.token) return;\n\t\t\t\tawait new Promise((resolveWait) => setTimeout(resolveWait, START_POLL_MS));\n\t\t\t}\n\t\t\tthrow new Error(\"Old LeafRelay daemon did not finish shutting down.\");\n\t\t})(), new Promise((_, reject) => {\n\t\t\ttimer = setTimeout(() => reject(/* @__PURE__ */ new Error(\"Timed out stopping the old LeafRelay daemon.\")), START_TIMEOUT_MS);\n\t\t})]);\n\t} finally {\n\t\tif (timer) clearTimeout(timer);\n\t\trpc.dispose();\n\t\tsocket.destroy();\n\t}\n}\nexport { DaemonVersionError, LeafRelayDaemonClient, LeafRelayDaemonServer, NetworkRuntimeRegistry, ReplicaAlreadyActiveError, ReplicaRegistry, daemonPaths, decodeRpcValue, encodeRpcValue, readDaemonMetadata };\n\n//# sourceMappingURL=index.js.map","import { LeafRelayDaemonClient } from '@leafrelay/daemon';\n\ndeclare const LEAFRELAY_VERSION: string;\n\nexport function connectCliDaemon(autoStart = true): Promise<LeafRelayDaemonClient> {\n return LeafRelayDaemonClient.connect({\n clientName: 'cli',\n clientVersion: LEAFRELAY_VERSION,\n daemonEntrypoint: new URL('./daemon.js', import.meta.url),\n autoStart,\n });\n}\n","import { LeafRelayDaemonClient } from '@leafrelay/daemon';\nimport type { ReplicaAttachResult, ReplicaConflictNotification, ReplicaStatusNotification } from '@leafrelay/protocol';\nimport { connectCliDaemon } from './daemonClient';\n\nexport interface RunningServe {\n readonly replica: ReplicaAttachResult;\n stop(): Promise<void>;\n}\n\nexport async function startServe(directory = process.cwd()): Promise<RunningServe> {\n const client = await connectCliDaemon();\n client.onLog((event) => console.log(`${event.timestamp} [${event.level}] ${event.message}`));\n client.onReplicaStatus((event: ReplicaStatusNotification) => {\n console.log(\n `Replica ${event.replicaId}: ${event.status.state}${event.status.message ? ` (${event.status.message})` : ''}`,\n );\n });\n client.onReplicaConflict((event: ReplicaConflictNotification) => {\n console.error(`Conflict in ${event.path}: ${event.reason}`);\n });\n try {\n const replica = await client.attachReplica({ directory });\n return {\n replica,\n stop: async () => {\n await client.detachReplica(replica.replicaId);\n client.close();\n },\n };\n } catch (error) {\n client.close();\n throw error;\n }\n}\n\nexport async function serve(directory = process.cwd()): Promise<void> {\n const running = await startServe(directory);\n console.log(\n `${running.replica.shared ? 'Attached to' : 'Started'} ${running.replica.projectName} at ${running.replica.root}.`,\n );\n await new Promise<void>((resolveStop) => {\n const stop = () => {\n process.off('SIGINT', stop);\n process.off('SIGTERM', stop);\n running.stop().then(resolveStop, (error) => {\n console.error(error);\n resolveStop();\n });\n };\n process.on('SIGINT', stop);\n process.on('SIGTERM', stop);\n });\n}\n\nexport async function daemonStatus(): Promise<void> {\n let client: LeafRelayDaemonClient | undefined;\n try {\n client = await connectCliDaemon(false);\n console.log(JSON.stringify(await client.status(), null, 2));\n } catch {\n console.log('LeafRelay daemon is not running.');\n } finally {\n client?.close();\n }\n}\n\nexport async function daemonStop(): Promise<void> {\n let client: LeafRelayDaemonClient | undefined;\n try {\n client = await connectCliDaemon(false);\n await client.shutdownDaemon();\n console.log('LeafRelay daemon stopped.');\n } catch {\n console.log('LeafRelay daemon is not running.');\n } finally {\n client?.close();\n }\n}\n\nexport async function daemonRestart(): Promise<void> {\n await daemonStop();\n const client = await connectCliDaemon();\n const status = await client.status();\n console.log(`LeafRelay daemon restarted (pid ${status.pid}).`);\n client.close();\n}\n"],"ignoreList":[1,2,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],"mappings":";;;;;;;;;;;;;AAmBA,IAAI,iBAAiB,IAAI,eAAe,QAAQ,IAAI,MAAM,EAAE,SAAS,CAAC,EAAE,EAAA,CAAG,SAAS,KAAK,IAAI,OAAO,GAAG,KAAK,OAAO,IAAI;AAgBvH,MAAM,UAAU;CACf,uBAAuB,CAAC,KAAK;CAC7B,2BAA2B,CAAC,KAAK;CACjC,gDAAgD,CAAC,KAAK;CACtD,qCAAqC,CAAC,KAAK;CAC3C,qCAAqC,CAAC,KAAK;CAC3C,mCAAmC,CAAC,KAAK;CACzC,8BAA8B,CAAC,MAAM;CACrC,oCAAoC,CAAC,KAAK;CAC1C,qCAAqC,CAAC,KAAK;CAC3C,qCAAqC,CAAC,KAAK;CAC3C,4BAA4B,CAAC,KAAK;CAClC,2BAA2B,CAAC,OAAO,OAAO;CAC1C,+DAA+D,CAAC,KAAK;CACrE,2CAA2C,CAAC,MAAM;CAClD,6BAA6B,CAAC,OAAO,MAAM;CAC3C,iCAAiC,CAAC,KAAK;CACvC,8BAA8B,CAAC,OAAO;CACtC,uBAAuB,CAAC,KAAK;CAC7B,+BAA+B,CAAC,OAAO;CACvC,yCAAyC,CAAC,KAAK;CAC/C,yCAAyC,CAAC,KAAK;CAC/C,gCAAgC,CAAC,KAAK;CACtC,wCAAwC,CAAC,KAAK;CAC9C,6BAA6B,CAAC,KAAK;CACnC,2CAA2C,CAAC,KAAK;CACjD,0DAA0D,CAAC,KAAK;CAChE,uDAAuD,CAAC,KAAK;CAC7D,wCAAwC,CAAC,KAAK;CAC9C,uCAAuC,CAAC,MAAM;CAC9C,iCAAiC,CAAC,KAAK;CACvC,iCAAiC,CAAC,MAAM;CACxC,iCAAiC,CAAC,SAAS;CAC3C,+BAA+B,CAAC,OAAO;CACvC,gCAAgC,CAAC,QAAQ;CACzC,sCAAsC,CAAC,KAAK;CAC5C,yCAAyC,CAAC,MAAM;CAChD,8BAA8B,CAAC,KAAK;CACpC,gCAAgC,CAAC,KAAK;CACtC,qCAAqC,CAAC,MAAM;CAC5C,qCAAqC,CAAC,KAAK;CAC3C,uBAAuB,CAAC,KAAK;CAC7B,mCAAmC,CAAC,KAAK;CACzC,gCAAgC,CAAC,OAAO;CACxC,wCAAwC,CAAC,KAAK;CAC9C,8BAA8B,CAAC,KAAK;CACpC,4CAA4C,CAAC,KAAK;CAClD,4BAA4B,CAAC,KAAK;CAClC,+BAA+B,CAAC,KAAK;CACrC,iCAAiC;EAChC;EACA;EACA;EACA;EACA;CACD;CACA,gDAAgD,CAAC,QAAQ;CACzD,oDAAoD,CAAC,QAAQ;CAC7D,+BAA+B,CAAC,KAAK;CACrC,gCAAgC,CAAC,SAAS;CAC1C,+BAA+B,CAAC,KAAK;CACrC,iCAAiC,CAAC,MAAM;CACxC,0CAA0C,CAAC,MAAM;CACjD,yCAAyC,CAAC,MAAM;CAChD,0CAA0C,CAAC,MAAM;CACjD,0CAA0C,CAAC,MAAM;CACjD,yCAAyC,CAAC,KAAK;CAC/C,6BAA6B,CAAC,KAAK;CACnC,4BAA4B,CAAC,KAAK;CAClC,4BAA4B,CAAC,KAAK;CAClC,8BAA8B,CAAC,OAAO;CACtC,wBAAwB,CAAC,MAAM;CAC/B,mCAAmC,CAAC,KAAK;CACzC,uBAAuB,CAAC,KAAK;CAC7B,4BAA4B,CAAC,MAAM;CACnC,6BAA6B;EAC5B;EACA;EACA;EACA;CACD;CACA,iCAAiC,CAAC,OAAO,MAAM;CAC/C,oCAAoC,CAAC,OAAO,MAAM;CAClD,4BAA4B,CAAC,OAAO,MAAM;CAC1C,0CAA0C,CAAC,WAAW;CACtD,uBAAuB,CAAC,KAAK;CAC7B,6BAA6B,CAAC,KAAK;CACnC,2BAA2B,CAAC,KAAK;CACjC,gCAAgC,CAAC,MAAM;CACvC,+BAA+B,CAAC,MAAM;CACtC,2BAA2B,CAAC,KAAK;CACjC,+BAA+B,CAAC,KAAK;CACrC,2BAA2B,CAAC,KAAK;CACjC,gCAAgC,CAAC,KAAK;CACtC,2BAA2B,CAAC,KAAK;CACjC,6BAA6B,CAAC,KAAK;CACnC,6BAA6B,CAAC,KAAK;CACnC,oCAAoC,CAAC,KAAK;CAC1C,8BAA8B,CAAC,KAAK;CACpC,6BAA6B,CAAC,KAAK;CACnC,gCAAgC,CAAC,OAAO,KAAK;CAC7C,+BAA+B,CAAC,KAAK;CACrC,iCAAiC,CAAC,KAAK;CACvC,uBAAuB,CAAC,MAAM;CAC9B,8BAA8B,CAAC,OAAO;CACtC,6BAA6B,CAAC,QAAQ,UAAU;CAChD,8BAA8B,CAAC,KAAK;CACpC,iCAAiC,CAAC,KAAK;CACvC,8BAA8B;EAC7B;EACA;EACA;EACA;CACD;CACA,+BAA+B,CAAC,KAAK;CACrC,+BAA+B,CAAC,KAAK;CACrC,iCAAiC,CAAC,KAAK;CACvC,iCAAiC,CAAC,KAAK;CACvC,kCAAkC,CAAC,KAAK;CACxC,kCAAkC,CAAC,KAAK;CACxC,mCAAmC,CAAC,KAAK;CACzC,oCAAoC,CAAC,KAAK;CAC1C,iCAAiC,CAAC,KAAK;CACvC,uCAAuC,CAAC,KAAK;CAC7C,8CAA8C,CAAC,KAAK;CACpD,8BAA8B,CAAC,KAAK;CACpC,oCAAoC,CAAC,KAAK;CAC1C,iCAAiC,CAAC,KAAK;CACvC,mCAAmC,CAAC,KAAK;CACzC,iCAAiC,CAAC,KAAK;CACvC,qCAAqC,CAAC,OAAO,KAAK;CAClD,2BAA2B,CAAC,KAAK;CACjC,2BAA2B,CAAC,KAAK;CACjC,4BAA4B,CAAC,KAAK;CAClC,uBAAuB,CAAC,KAAK;CAC7B,wCAAwC,CAAC,MAAM;CAC/C,uCAAuC,CAAC,OAAO;CAC/C,oCAAoC,CAAC,OAAO;CAC5C,mCAAmC,CAAC,MAAM;CAC1C,mCAAmC,CAAC,MAAM;CAC1C,4CAA4C,CAAC,SAAS;CACtD,sCAAsC,CAAC,SAAS;CAChD,oCAAoC,CAAC,OAAO;CAC5C,2CAA2C,CAAC,QAAQ;CACpD,wCAAwC,CAAC,KAAK;CAC9C,oCAAoC,CAAC,KAAK;CAC1C,+CAA+C,CAAC,MAAM;CACtD,0BAA0B,CAAC,OAAO,KAAK;CACvC,kCAAkC,CAAC,KAAK;CACxC,+BAA+B,CAAC,KAAK;CACrC,2CAA2C,CAAC,KAAK;CACjD,mCAAmC,CAAC,KAAK;CACzC,uCAAuC,CAAC,KAAK;CAC7C,wCAAwC,CAAC,KAAK;CAC9C,gCAAgC,CAAC,KAAK;CACtC,2BAA2B,CAAC,KAAK;CACjC,8CAA8C,CAAC,KAAK;CACpD,wBAAwB,CAAC,MAAM;CAC/B,qCAAqC,CAAC,KAAK;CAC3C,2BAA2B,CAAC,MAAM;CAClC,2BAA2B,CAAC,MAAM;CAClC,0BAA0B,CAAC,KAAK;CAChC,2BAA2B,CAAC,KAAK;CACjC,0BAA0B,CAAC,KAAK;CAChC,4BAA4B,CAAC,OAAO;CACpC,wCAAwC,CAAC,WAAW;CACpD,+BAA+B,CAAC,KAAK;CACrC,8BAA8B;EAC7B;EACA;EACA;CACD;CACA,yCAAyC,CAAC,KAAK;CAC/C,wCAAwC,CAAC,IAAI;CAC7C,8BAA8B,CAAC,OAAO,KAAK;CAC3C,4BAA4B,CAAC,KAAK;CAClC,mCAAmC,CAAC,KAAK;CACzC,mCAAmC,CAAC,KAAK;CACzC,8BAA8B,CAAC,KAAK;CACpC,oCAAoC,CAAC,OAAO,KAAK;CACjD,4BAA4B,CAAC,KAAK;CAClC,4BAA4B,CAAC,KAAK;CAClC,4BAA4B,CAAC,KAAK;CAClC,yCAAyC,CAAC,WAAW;CACrD,2CAA2C,CAAC,KAAK;CACjD,0BAA0B,CAAC,KAAK;CAChC,4BAA4B,CAAC,KAAK;CAClC,uBAAuB,CAAC,KAAK;CAC7B,yCAAyC,CAAC,KAAK;CAC/C,wBAAwB,CAAC,MAAM;CAC/B,sCAAsC,CAAC,MAAM;CAC7C,2BAA2B,CAAC,OAAO,KAAK;CACxC,8BAA8B,CAAC,QAAQ;CACvC,8BAA8B,CAAC,MAAM;CACrC,gCAAgC,CAAC,KAAK;CACtC,6BAA6B,CAAC,KAAK;CACnC,+BAA+B,CAAC,KAAK;CACrC,kCAAkC,CAAC,OAAO,KAAK;CAC/C,+BAA+B,CAAC,KAAK;CACrC,6BAA6B,CAAC,OAAO,KAAK;CAC1C,8BAA8B,CAAC,MAAM;CACrC,gCAAgC,CAAC,KAAK;CACtC,yBAAyB,CAAC,OAAO,KAAK;CACtC,wBAAwB;EACvB;EACA;EACA;EACA;CACD;CACA,oCAAoC,CAAC,KAAK;CAC1C,+BAA+B,CAAC,QAAQ;CACxC,sDAAsD,CAAC,KAAK;CAC5D,2DAA2D,CAAC,KAAK;CACjE,+BAA+B,CAAC,KAAK;CACrC,kCAAkC,CAAC,KAAK;CACxC,mCAAmC,CAAC,KAAK;CACzC,+BAA+B,CAAC,KAAK;CACrC,mCAAmC,CAAC,KAAK;CACzC,mCAAmC,CAAC,KAAK;CACzC,iCAAiC,CAAC,KAAK;CACvC,oCAAoC,CAAC,SAAS;CAC9C,sCAAsC,CAAC,KAAK;CAC5C,uBAAuB,CAAC,KAAK;CAC7B,+BAA+B,CAAC,KAAK;CACrC,sCAAsC,CAAC,OAAO;CAC9C,wBAAwB,CAAC,KAAK;CAC9B,wBAAwB,CAAC,KAAK;CAC9B,kCAAkC,CAAC,KAAK;CACxC,kCAAkC,CAAC,KAAK;CACxC,uBAAuB,CAAC,KAAK;CAC7B,8BAA8B,CAAC,KAAK;CACpC,8BAA8B,CAAC,KAAK;CACpC,8BAA8B,CAAC,KAAK;CACpC,8BAA8B,CAAC,KAAK;CACpC,8BAA8B,CAAC,KAAK;CACpC,8BAA8B,CAAC,KAAK;CACpC,8BAA8B,CAAC,KAAK;CACpC,sCAAsC,CAAC,KAAK;CAC5C,sCAAsC,CAAC,KAAK;CAC5C,mCAAmC,CAAC,KAAK;CACzC,+BAA+B,CAAC,KAAK;CACrC,qCAAqC,CAAC,KAAK;CAC3C,4BAA4B;EAC3B;EACA;EACA;EACA;EACA;EACA;CACD;CACA,kDAAkD,CAAC,MAAM;CACzD,yDAAyD,CAAC,MAAM;CAChE,kDAAkD,CAAC,MAAM;CACzD,qDAAqD,CAAC,MAAM;CAC5D,iCAAiC,CAAC,KAAK;CACvC,+BAA+B,CAAC,KAAK;CACrC,0BAA0B,CAAC,KAAK;CAChC,0BAA0B,CAAC,KAAK;CAChC,kCAAkC,CAAC,MAAM;CACzC,8BAA8B,CAAC,KAAK;CACpC,iCAAiC,CAAC,KAAK;CACvC,8BAA8B,CAAC,MAAM;CACrC,iCAAiC;EAChC;EACA;EACA;CACD;CACA,uDAAuD,CAAC,MAAM;CAC9D,8DAA8D,CAAC,MAAM;CACrE,uDAAuD,CAAC,MAAM;CAC9D,2DAA2D,CAAC,MAAM;CAClE,0DAA0D,CAAC,MAAM;CACjE,8BAA8B,CAAC,QAAQ,KAAK;CAC5C,mCAAmC,CAAC,KAAK;CACzC,oDAAoD,CAAC,MAAM;CAC3D,oDAAoD,CAAC,MAAM;CAC3D,4BAA4B;EAC3B;EACA;EACA;EACA;CACD;CACA,0BAA0B,CAAC,KAAK;CAChC,kCAAkC,CAAC,KAAK;CACxC,wBAAwB,CAAC,MAAM;CAC/B,4BAA4B,CAAC,KAAK;CAClC,+BAA+B,CAAC,MAAM;CACtC,yBAAyB,CAAC,QAAQ;CAClC,8CAA8C,CAAC,KAAK;CACpD,qCAAqC,CAAC,KAAK;CAC3C,wBAAwB,CAAC,OAAO,MAAM;CACtC,sCAAsC,CAAC,KAAK;CAC5C,mCAAmC,CAAC,KAAK;CACzC,gCAAgC,CAAC,KAAK;CACtC,uCAAuC,CAAC,KAAK;CAC7C,qCAAqC,CAAC,OAAO;CAC7C,gDAAgD,CAAC,QAAQ;CACzD,sCAAsC,CAAC,MAAM;CAC7C,uCAAuC,CAAC,MAAM;CAC9C,gCAAgC,CAAC,KAAK;CACtC,gCAAgC,CAAC,KAAK;CACtC,gCAAgC,CAAC,KAAK;CACtC,4CAA4C,CAAC,KAAK;CAClD,qDAAqD,CAAC,KAAK;CAC3D,+CAA+C,CAAC,KAAK;CACrD,8CAA8C,CAAC,KAAK;CACpD,uDAAuD,CAAC,MAAM;CAC9D,+CAA+C,CAAC,KAAK;CACrD,wDAAwD,CAAC,KAAK;CAC9D,4CAA4C,CAAC,KAAK;CAClD,qDAAqD,CAAC,KAAK;CAC3D,mDAAmD,CAAC,KAAK;CACzD,4DAA4D,CAAC,KAAK;CAClE,kDAAkD,CAAC,KAAK;CACxD,2DAA2D,CAAC,KAAK;CACjE,2CAA2C,CAAC,KAAK;CACjD,kDAAkD,CAAC,KAAK;CACxD,oDAAoD,CAAC,KAAK;CAC1D,+CAA+C,CAAC,KAAK;CACrD,8BAA8B,CAAC,IAAI;CACnC,+BAA+B,CAAC,KAAK;CACrC,qCAAqC,CAAC,MAAM;CAC5C,2CAA2C,CAAC,KAAK;CACjD,0CAA0C,CAAC,KAAK;CAChD,6EAA6E,CAAC,MAAM;CACpF,sEAAsE,CAAC,MAAM;CAC7E,0EAA0E,CAAC,MAAM;CACjF,yEAAyE,CAAC,MAAM;CAChF,qEAAqE,CAAC,MAAM;CAC5E,wEAAwE,CAAC,MAAM;CAC/E,2EAA2E,CAAC,MAAM;CAClF,2EAA2E,CAAC,MAAM;CAClF,0CAA0C,CAAC,KAAK;CAChD,2BAA2B,CAAC,IAAI;CAChC,kCAAkC,CAAC,KAAK;CACxC,wBAAwB;EACvB;EACA;EACA;CACD;CACA,6BAA6B,CAAC,KAAK;CACnC,6BAA6B,CAAC,KAAK;CACnC,6BAA6B,CAAC,KAAK;CACnC,0BAA0B,CAAC,MAAM;CACjC,8BAA8B,CAAC,IAAI;CACnC,+BAA+B,CAAC,KAAK;CACrC,iCAAiC,CAAC,KAAK;CACvC,sCAAsC,CAAC,KAAK;CAC5C,qCAAqC,CAAC,UAAU;CAChD,mCAAmC,CAAC,OAAO;CAC3C,mCAAmC,CAAC,KAAK;CACzC,oCAAoC,CAAC,KAAK;CAC1C,yCAAyC,CAAC,KAAK;CAC/C,6BAA6B,CAAC,MAAM;CACpC,uCAAuC,CAAC,MAAM;CAC9C,qCAAqC;EACpC;EACA;EACA;EACA;EACA;EACA;CACD;CACA,uBAAuB,CAAC,KAAK;CAC7B,+BAA+B,CAAC,KAAK;CACrC,sCAAsC,CAAC,KAAK;CAC5C,0CAA0C,CAAC,UAAU;CACrD,kCAAkC,CAAC,YAAY;CAC/C,2BAA2B,CAAC,KAAK;CACjC,gCAAgC,CAAC,IAAI;CACrC,oCAAoC,CAAC,MAAM;CAC3C,sCAAsC,CAAC,QAAQ;CAC/C,wCAAwC,CAAC,IAAI;CAC7C,2BAA2B,CAAC,KAAK;CACjC,wBAAwB,CAAC,MAAM;CAC/B,wBAAwB,CAAC,MAAM;CAC/B,wBAAwB,CAAC,MAAM;CAC/B,2CAA2C,CAAC,KAAK;CACjD,+CAA+C,CAAC,KAAK;CACrD,8CAA8C,CAAC,KAAK;CACpD,0CAA0C,CAAC,KAAK;CAChD,sCAAsC,CAAC,OAAO,MAAM;CACpD,wBAAwB,CAAC,KAAK;CAC9B,iCAAiC,CAAC,SAAS;CAC3C,+CAA+C,CAAC,IAAI;CACpD,mCAAmC,CAAC,QAAQ,MAAM;CAClD,gCAAgC,CAAC,KAAK;CACtC,gCAAgC,CAAC,KAAK;CACtC,qCAAqC,CAAC,KAAK;CAC3C,qCAAqC,CAAC,KAAK;CAC3C,wCAAwC,CAAC,KAAK;CAC9C,qCAAqC,CAAC,KAAK;CAC3C,uCAAuC,CAAC,OAAO,KAAK;CACpD,8CAA8C,CAAC,KAAK;CACpD,qCAAqC,CAAC,OAAO;CAC7C,uCAAuC,CAAC,IAAI;CAC5C,gCAAgC,CAAC,MAAM;CACvC,gCAAgC,CAAC,KAAK;CACtC,yCAAyC,CAAC,KAAK;CAC/C,gCAAgC,CAAC,KAAK;CACtC,yCAAyC,CAAC,KAAK;CAC/C,mCAAmC,CAAC,KAAK;CACzC,4CAA4C,CAAC,KAAK;CAClD,gCAAgC,CAAC,KAAK;CACtC,kCAAkC,CAAC,KAAK;CACxC,yCAAyC,CAAC,KAAK;CAC/C,2CAA2C,CAAC,KAAK;CACjD,gCAAgC,CAAC,OAAO,MAAM;CAC9C,uBAAuB,CAAC,KAAK;CAC7B,mCAAmC,CAAC,OAAO,MAAM;CACjD,8BAA8B,CAAC,KAAK;CACpC,mCAAmC,CAAC,KAAK;CACzC,iCAAiC,CAAC,KAAK;CACvC,oCAAoC,CAAC,KAAK;CAC1C,6CAA6C,CAAC,KAAK;CACnD,gCAAgC;EAC/B;EACA;EACA;CACD;CACA,kCAAkC,CAAC,KAAK;CACxC,4BAA4B,CAAC,KAAK;CAClC,gCAAgC,CAAC,KAAK;CACtC,2BAA2B,CAAC,KAAK;CACjC,wBAAwB,CAAC,OAAO,MAAM;CACtC,6BAA6B,CAAC,KAAK;CACnC,0BAA0B,CAAC,KAAK;CAChC,yBAAyB,CAAC,UAAU;CACpC,4BAA4B,CAAC,QAAQ,IAAI;CACzC,uBAAuB,CAAC,KAAK;CAC7B,yBAAyB;EACxB;EACA;EACA;EACA;EACA;EACA;CACD;CACA,6BAA6B,CAAC,KAAK;CACnC,uBAAuB,CAAC,KAAK;CAC7B,6BAA6B,CAAC,OAAO;CACrC,4BAA4B,CAAC,MAAM;CACnC,kCAAkC,CAAC,OAAO;CAC1C,4BAA4B,CAAC,KAAK;CAClC,kCAAkC,CAAC,KAAK;CACxC,+BAA+B,CAAC,KAAK;CACrC,uBAAuB,CAAC,KAAK;CAC7B,0BAA0B,CAAC,KAAK;CAChC,wBAAwB,CAAC,KAAK;CAC9B,wBAAwB,CAAC,MAAM;CAC/B,iCAAiC,CAAC,KAAK;CACvC,oCAAoC,CAAC,KAAK;CAC1C,mCAAmC,CAAC,KAAK;CACzC,0CAA0C,CAAC,KAAK;CAChD,qDAAqD,CAAC,QAAQ;CAC9D,qCAAqC,CAAC,KAAK;CAC3C,sCAAsC,CAAC,KAAK;CAC5C,2CAA2C,CAAC,KAAK;CACjD,uBAAuB,CAAC,OAAO,MAAM;CACrC,kCAAkC,CAAC,KAAK;CACxC,+BAA+B,CAAC,IAAI;CACpC,yBAAyB,CAAC,KAAK;CAC/B,gCAAgC,CAAC,KAAK;CACtC,iCAAiC,CAAC,MAAM;CACxC,qBAAqB,CAAC,KAAK;CAC3B,gCAAgC;EAC/B;EACA;EACA;EACA;CACD;CACA,gCAAgC,CAAC,KAAK;CACtC,gCAAgC,CAAC,KAAK;CACtC,uBAAuB,CAAC,OAAO;CAC/B,sBAAsB,CAAC,OAAO;CAC9B,4BAA4B,CAAC,SAAS;CACtC,yBAAyB,CAAC,OAAO;CACjC,uBAAuB,CAAC,OAAO,OAAO;CACtC,sBAAsB,CAAC,IAAI;CAC3B,uBAAuB,CAAC,OAAO,KAAK;CACpC,qBAAqB;EACpB;EACA;EACA;EACA;EACA;CACD;CACA,wBAAwB,CAAC,KAAK;CAC9B,gCAAgC,CAAC,KAAK;CACtC,sBAAsB,CAAC,MAAM;CAC7B,2BAA2B,CAAC,KAAK;CACjC,kCAAkC,CAAC,KAAK;CACxC,uBAAuB,CAAC,KAAK;CAC7B,4BAA4B,CAAC,MAAM;CACnC,4BAA4B,CAAC,KAAK;CAClC,sBAAsB,CAAC,MAAM;CAC7B,qBAAqB,CAAC,KAAK;CAC3B,gCAAgC,CAAC,QAAQ,MAAM;CAC/C,gCAAgC,CAAC,KAAK;CACtC,0BAA0B;EACzB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACD;CACA,sBAAsB,CAAC,KAAK;CAC5B,4BAA4B,CAAC,KAAK;CAClC,4BAA4B,CAAC,KAAK;CAClC,iCAAiC,CAAC,KAAK;CACvC,qBAAqB,CAAC,KAAK;CAC3B,uBAAuB,CAAC,KAAK;CAC7B,qBAAqB,CAAC,KAAK;CAC3B,0BAA0B,CAAC,KAAK;CAChC,kCAAkC,CAAC,KAAK;CACxC,gCAAgC,CAAC,KAAK;CACtC,0BAA0B,CAAC,KAAK;CAChC,0BAA0B,CAAC,KAAK;CAChC,4BAA4B;EAC3B;EACA;EACA;EACA;CACD;CACA,yBAAyB,CAAC,KAAK;CAC/B,8BAA8B,CAAC,KAAK;CACpC,gCAAgC,CAAC,KAAK;CACtC,uBAAuB,CAAC,KAAK;CAC7B,0BAA0B,CAAC,UAAU;CACrC,4BAA4B,CAAC,QAAQ;CACrC,sBAAsB,CAAC,MAAM;CAC7B,qBAAqB,CAAC,KAAK;CAC3B,2BAA2B,CAAC,KAAK;CACjC,sCAAsC,CAAC,SAAS;CAChD,4BAA4B,CAAC,OAAO;CACpC,+BAA+B,CAAC,MAAM;CACtC,sCAAsC,CAAC,MAAM;CAC7C,0CAA0C,CAAC,UAAU;CACrD,sCAAsC,CAAC,QAAQ;CAC/C,mCAAmC,CAAC,SAAS;CAC7C,gCAAgC,CAAC,MAAM;CACvC,0BAA0B,CAAC,MAAM;CACjC,uBAAuB,CAAC,OAAO;CAC/B,8BAA8B,CAAC,MAAM;CACrC,gCAAgC,CAAC,OAAO,KAAK;CAC7C,0BAA0B,CAAC,KAAK;CAChC,qBAAqB,CAAC,KAAK;CAC3B,kCAAkC,CAAC,QAAQ,MAAM;CACjD,gCAAgC,CAAC,aAAa;CAC9C,6BAA6B,CAAC,KAAK;CACnC,wBAAwB,CAAC,KAAK;CAC9B,wBAAwB,CAAC,KAAK;CAC9B,yBAAyB,CAAC,MAAM;CAChC,0BAA0B,CAAC,KAAK;CAChC,0BAA0B,CAAC,KAAK;CAChC,4BAA4B,CAAC,KAAK;CAClC,wBAAwB,CAAC,KAAK;CAC9B,+BAA+B,CAAC,MAAM;CACtC,4BAA4B;EAC3B;EACA;EACA;EACA;EACA;CACD;CACA,6BAA6B;EAC5B;EACA;EACA;CACD;CACA,4BAA4B;EAC3B;EACA;EACA;EACA;CACD;CACA,yBAAyB,CAAC,KAAK;CAC/B,6BAA6B,CAAC,KAAK;CACnC,4BAA4B,CAAC,KAAK;CAClC,4BAA4B,CAAC,KAAK;CAClC,yBAAyB,CAAC,KAAK;CAC/B,wBAAwB,CAAC,MAAM,KAAK;CACpC,qCAAqC,CAAC,KAAK;CAC3C,qBAAqB,CAAC,KAAK;CAC3B,sBAAsB,CAAC,MAAM,IAAI;CACjC,uBAAuB,CAAC,QAAQ,MAAM;CACtC,wBAAwB,CAAC,OAAO,KAAK;CACrC,oCAAoC,CAAC,OAAO,KAAK;CACjD,mCAAmC,CAAC,KAAK;CACzC,gCAAgC,CAAC,MAAM;CACvC,wCAAwC,CAAC,KAAK;CAC9C,uCAAuC,CAAC,KAAK;CAC7C,qBAAqB,CAAC,KAAK;CAC3B,oBAAoB,CAAC,IAAI;CACzB,sBAAsB,CAAC,MAAM;CAC7B,iCAAiC,CAAC,KAAK;CACvC,iCAAiC,CAAC,KAAK;CACvC,qBAAqB,CAAC,MAAM;CAC5B,yBAAyB,CAAC,KAAK;CAC/B,0BAA0B,CAAC,MAAM;CACjC,wBAAwB,CAAC,KAAK;CAC9B,yBAAyB,CAAC,SAAS;CACnC,wBAAwB,CAAC,QAAQ;CACjC,4BAA4B,CAAC,IAAI;CACjC,sBAAsB,CAAC,KAAK;CAC5B,qBAAqB,CAAC,KAAK;CAC3B,qBAAqB,CAAC,OAAO,IAAI;CACjC,qBAAqB,CAAC,KAAK;CAC3B,yBAAyB,CAAC,KAAK;CAC/B,yBAAyB,CAAC,WAAW,MAAM;CAC3C,sBAAsB,CAAC,MAAM;CAC7B,uBAAuB,CAAC,OAAO;CAC/B,gCAAgC,CAAC,KAAK;CACtC,gCAAgC,CAAC,KAAK;CACtC,gCAAgC,CAAC,KAAK;CACtC,iCAAiC,CAAC,MAAM;CACxC,yCAAyC,CAAC,cAAc;CACxD,gCAAgC,CAAC,KAAK;CACtC,gCAAgC,CAAC,KAAK;CACtC,iCAAiC,CAAC,MAAM;CACxC,6BAA6B,CAAC,KAAK;CACnC,uCAAuC,CAAC,QAAQ;CAChD,8BAA8B;EAC7B;EACA;EACA;CACD;CACA,sBAAsB,CAAC,KAAK;CAC5B,2BAA2B,CAAC,MAAM;CAClC,2BAA2B,CAAC,KAAK;CACjC,oBAAoB,CAAC,IAAI;CACzB,gCAAgC,CAAC,MAAM;CACvC,0BAA0B;EACzB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACD;CACA,wBAAwB,CAAC,OAAO,MAAM;CACtC,2BAA2B,CAAC,KAAK;CACjC,iBAAiB,CAAC,KAAK;CACvB,iBAAiB,CAAC,KAAK;CACvB,oBAAoB,CAAC,OAAO;CAC5B,0BAA0B,CAAC,KAAK;CAChC,oCAAoC,CAAC,KAAK;CAC1C,6BAA6B,CAAC,WAAW;CACzC,6BAA6B,CAAC,WAAW;CACzC,6BAA6B,CAAC,WAAW;CACzC,iBAAiB,CAAC,KAAK;CACvB,eAAe,CAAC,MAAM;CACtB,gBAAgB;EACf;EACA;EACA;CACD;CACA,eAAe,CAAC,KAAK;CACrB,gBAAgB,CAAC,MAAM;CACvB,eAAe,CAAC,MAAM;CACtB,oBAAoB,CAAC,KAAK;CAC1B,mBAAmB,CAAC,KAAK;CACzB,kBAAkB,CAAC,KAAK;CACxB,kBAAkB,CAAC,KAAK;CACxB,wBAAwB,CAAC,OAAO,IAAI;CACpC,+BAA+B,CAAC,KAAK;CACrC,qBAAqB,CAAC,KAAK;CAC3B,eAAe,CAAC,MAAM;CACtB,kBAAkB,CAAC,KAAK;CACxB,kBAAkB,CAAC,KAAK;CACxB,mBAAmB,CAAC,MAAM;CAC1B,kBAAkB,CAAC,KAAK;CACxB,mBAAmB,CAAC,MAAM;CAC1B,kBAAkB,CAAC,KAAK;CACxB,kBAAkB,CAAC,QAAQ,KAAK;CAChC,iBAAiB,CAAC,KAAK;CACvB,6BAA6B,CAAC,KAAK;CACnC,oCAAoC,CAAC,KAAK;CAC1C,6BAA6B,CAAC,OAAO;CACrC,0BAA0B;EACzB;EACA;EACA;EACA;CACD;CACA,kBAAkB,CAAC,QAAQ,KAAK;CAChC,0BAA0B,CAAC,MAAM;CACjC,iBAAiB,CAAC,KAAK;CACvB,iBAAiB,CAAC,KAAK;CACvB,0BAA0B,CAAC,KAAK;CAChC,iBAAiB,CAAC,KAAK;CACvB,iBAAiB,CAAC,KAAK;CACvB,kCAAkC,CAAC,KAAK;CACxC,kCAAkC,CAAC,KAAK;CACxC,4BAA4B,CAAC,KAAK;CAClC,oBAAoB,CAAC,KAAK;CAC1B,qBAAqB,CAAC,KAAK;CAC3B,sBAAsB,CAAC,KAAK;CAC5B,qBAAqB,CAAC,KAAK;CAC3B,qBAAqB,CAAC,KAAK;CAC3B,yBAAyB,CAAC,KAAK;CAC/B,kCAAkC,CAAC,KAAK;CACxC,sBAAsB,CAAC,MAAM;CAC7B,kBAAkB,CAAC,KAAK;CACxB,wBAAwB,CAAC,KAAK;CAC9B,eAAe,CAAC,KAAK;CACrB,qBAAqB,CAAC,KAAK;CAC3B,sBAAsB,CAAC,KAAK;CAC5B,eAAe,CAAC,KAAK;CACrB,oBAAoB;EACnB;EACA;EACA;EACA;EACA;CACD;CACA,gBAAgB,CAAC,MAAM;CACvB,eAAe,CAAC,KAAK;CACrB,uBAAuB,CAAC,KAAK;CAC7B,kBAAkB,CAAC,MAAM;CACzB,eAAe,CAAC,MAAM;CACtB,gBAAgB,CAAC,OAAO,KAAK;CAC7B,2BAA2B,CAAC,KAAK;CACjC,2BAA2B,CAAC,KAAK;CACjC,4BAA4B,CAAC,KAAK;CAClC,2BAA2B,CAAC,KAAK;CACjC,eAAe,CAAC,KAAK;CACrB,eAAe,CAAC,KAAK;CACrB,mBAAmB,CAAC,KAAK;CACzB,mBAAmB,CAAC,KAAK;CACzB,uBAAuB,CAAC,KAAK;CAC7B,uBAAuB,CAAC,KAAK;CAC7B,kBAAkB,CAAC,MAAM;CACzB,iBAAiB,CAAC,KAAK;CACvB,yBAAyB,CAAC,KAAK;CAC/B,iBAAiB,CAAC,KAAK;CACvB,iBAAiB,CAAC,KAAK;CACvB,iBAAiB,CAAC,KAAK;CACvB,iBAAiB,CAAC,MAAM;CACxB,qBAAqB,CAAC,MAAM;CAC5B,uCAAuC,CAAC,KAAK;CAC7C,qCAAqC,CAAC,KAAK;CAC3C,wBAAwB,CAAC,OAAO,MAAM;CACtC,qBAAqB,CAAC,KAAK;CAC3B,kBAAkB,CAAC,MAAM;CACzB,sBAAsB,CAAC,MAAM;CAC7B,uCAAuC,CAAC,KAAK;CAC7C,iBAAiB,CAAC,KAAK;CACvB,sBAAsB,CAAC,KAAK;CAC5B,iBAAiB,CAAC,MAAM;CACxB,uBAAuB,CAAC,OAAO;CAC/B,uBAAuB,CAAC,OAAO;CAC/B,uBAAuB,CAAC,OAAO;CAC/B,yBAAyB,CAAC,KAAK;CAC/B,gCAAgC,CAAC,KAAK;CACtC,gBAAgB,CAAC,KAAK;CACtB,yBAAyB,CAAC,KAAK;CAC/B,qBAAqB,CAAC,IAAI;CAC1B,sBAAsB,CAAC,MAAM;CAC7B,sBAAsB,CAAC,MAAM;CAC7B,oCAAoC,CAAC,KAAK;CAC1C,oBAAoB,CAAC,KAAK;CAC1B,0BAA0B,CAAC,MAAM;CACjC,cAAc,CAAC,KAAK,KAAK;CACzB,YAAY;EACX;EACA;EACA;EACA;EACA;EACA;EACA;CACD;CACA,oBAAoB,CAAC,KAAK;CAC1B,kBAAkB;EACjB;EACA;EACA;EACA;CACD;CACA,8BAA8B,CAAC,KAAK;CACpC,sBAAsB,CAAC,MAAM;CAC7B,cAAc,CAAC,KAAK;CACpB,mBAAmB,CAAC,KAAK;CACzB,cAAc,CAAC,KAAK;CACpB,eAAe,CAAC,MAAM;CACtB,cAAc,CAAC,MAAM;CACrB,iBAAiB,CAAC,KAAK,KAAK;CAC5B,qBAAqB,CAAC,KAAK;CAC3B,eAAe,CAAC,MAAM;CACtB,eAAe,CAAC,MAAM;CACtB,iBAAiB,CAAC,KAAK;CACvB,cAAc,CAAC,KAAK;CACpB,mBAAmB,CAAC,KAAK;CACzB,mBAAmB,CAAC,IAAI;CACxB,oBAAoB,CAAC,KAAK;CAC1B,gBAAgB,CAAC,KAAK;CACtB,qBAAqB,CAAC,OAAO,MAAM;CACnC,yBAAyB,CAAC,OAAO,MAAM;CACvC,qBAAqB,CAAC,OAAO,MAAM;CACnC,qBAAqB,CAAC,OAAO,MAAM;CACnC,wBAAwB,CAAC,OAAO,MAAM;CACtC,sBAAsB,CAAC,KAAK;CAC5B,iBAAiB,CAAC,KAAK;CACvB,qBAAqB,CAAC,OAAO,KAAK;CAClC,oCAAoC,CAAC,KAAK;CAC1C,sBAAsB,CAAC,OAAO,MAAM;CACpC,kBAAkB,CAAC,KAAK;CACxB,eAAe,CAAC,KAAK;CACrB,eAAe,CAAC,KAAK;CACrB,eAAe,CAAC,KAAK;CACrB,eAAe,CAAC,KAAK;CACrB,oBAAoB;EACnB;EACA;EACA;CACD;CACA,eAAe,CAAC,KAAK;CACrB,kBAAkB,CAAC,OAAO,KAAK;CAC/B,kBAAkB,CAAC,KAAK;CACxB,iBAAiB,CAAC,IAAI;CACtB,kBAAkB,CAAC,KAAK;CACxB,kBAAkB,CAAC,KAAK;CACxB,kBAAkB,CAAC,KAAK;CACxB,mBAAmB,CAAC,KAAK;CACzB,qBAAqB,CAAC,OAAO;CAC7B,eAAe,CAAC,KAAK;CACrB,2BAA2B,CAAC,KAAK;AAClC;AACA,OAAO,OAAO,OAAO;AAErB,MAAM,QAAQ;CACb,4BAA4B,CAAC,IAAI;CACjC,4BAA4B,CAAC,cAAc;CAC3C,0BAA0B,CAAC,IAAI;CAC/B,oBAAoB,CAAC,MAAM;CAC3B,0BAA0B,CAAC,YAAY;CACvC,wBAAwB,CAAC,MAAM;CAC/B,2BAA2B,CAAC,SAAS;CACrC,+BAA+B,CAAC,aAAa;CAC7C,2BAA2B,CAAC,SAAS;CACrC,4BAA4B,CAAC,KAAK;CAClC,6BAA6B,CAAC,MAAM;CACpC,6BAA6B,CAAC,MAAM;CACpC,oCAAoC,CAAC,KAAK;CAC1C,qCAAqC,CAAC,MAAM;CAC5C,oBAAoB,CAAC,MAAM;CAC3B,4BAA4B,CAAC,KAAK;CAClC,yBAAyB,CAAC,OAAO;CACjC,wBAAwB,CAAC,MAAM;CAC/B,+BAA+B,CAAC,OAAO;CACvC,8BAA8B,CAAC,OAAO;CACtC,2BAA2B,CAAC,OAAO;CACnC,2BAA2B,CAAC,OAAO;CACnC,0BAA0B,CAAC,OAAO;CAClC,uBAAuB,CAAC,KAAK;CAC7B,wBAAwB,CAAC,IAAI;CAC7B,mBAAmB,CAAC,KAAK;CACzB,wBAAwB,CAAC,KAAK;CAC9B,8BAA8B,CAAC,KAAK;CACpC,4BAA4B,CAAC,UAAU;CACvC,qBAAqB,CAAC,KAAK;CAC3B,2BAA2B,CAAC,KAAK;CACjC,wBAAwB,CAAC,MAAM;CAC/B,wBAAwB,CAAC,OAAO;CAChC,0BAA0B,CAAC,MAAM;CACjC,wBAAwB,CAAC,MAAM;CAC/B,6BAA6B,CAAC,WAAW;CACzC,wBAAwB,CAAC,MAAM;CAC/B,mBAAmB,CAAC,KAAK;CACzB,uBAAuB,CAAC,KAAK;CAC7B,mBAAmB,CAAC,KAAK;CACzB,uBAAuB,CAAC,KAAK;CAC7B,0BAA0B,CAAC,KAAK;CAChC,wBAAwB,CAAC,SAAS;CAClC,uBAAuB,CAAC,KAAK;CAC7B,uBAAuB,CAAC,KAAK;CAC7B,mBAAmB,CAAC,KAAK;CACzB,oBAAoB,CAAC,IAAI;CACzB,qBAAqB,CAAC,OAAO;CAC7B,2BAA2B,CAAC,KAAK;CACjC,yBAAyB,CAAC,OAAO,OAAO;CACxC,qBAAqB,CAAC,OAAO;CAC7B,uBAAuB,CAAC,KAAK;CAC7B,4BAA4B;EAC3B;EACA;EACA;CACD;CACA,sCAAsC,CAAC,KAAK;CAC5C,uBAAuB,CAAC,OAAO;CAC/B,0BAA0B,CAAC,KAAK;CAChC,oBAAoB,CAAC,QAAQ,KAAK;CAClC,qBAAqB,CAAC,OAAO;CAC7B,2BAA2B,CAAC,QAAQ;CACpC,uBAAuB,CAAC,QAAQ;CAChC,uBAAuB,CAAC,KAAK;CAC7B,wBAAwB,CAAC,SAAS;CAClC,4BAA4B,CAAC,KAAK;CAClC,8BAA8B,CAAC,KAAK;CACpC,wBAAwB,CAAC,MAAM;CAC/B,6BAA6B,CAAC,aAAa;CAC3C,oBAAoB,CAAC,KAAK;CAC1B,2BAA2B,CAAC,MAAM;CAClC,2BAA2B;EAC1B;EACA;EACA;CACD;CACA,0BAA0B,CAAC,QAAQ;CACnC,oBAAoB,CAAC,MAAM;CAC3B,wCAAwC,CAAC,KAAK;CAC9C,sCAAsC,CAAC,OAAO;CAC9C,4BAA4B,CAAC,UAAU;CACvC,6BAA6B,CAAC,OAAO;CACrC,wBAAwB,CAAC,MAAM;CAC/B,2BAA2B,CAAC,MAAM;CAClC,2BAA2B,CAAC,MAAM;CAClC,wBAAwB,CAAC,MAAM;CAC/B,oBAAoB,CAAC,OAAO,MAAM;CAClC,mBAAmB;EAClB;EACA;EACA;EACA;CACD;CACA,oBAAoB,CAAC,MAAM;CAC3B,0BAA0B,CAAC,YAAY;CACvC,sBAAsB,CAAC,OAAO,KAAK;CACnC,mBAAmB,CAAC,KAAK;CACzB,uBAAuB,CAAC,IAAI;CAC5B,yBAAyB,CAAC,IAAI;CAC9B,oBAAoB,CAAC,KAAK;CAC1B,4BAA4B;EAC3B;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACD;CACA,mBAAmB,CAAC,KAAK;CACzB,iCAAiC,CAAC,KAAK;CACvC,mBAAmB,CAAC,KAAK;CACzB,yBAAyB,CAAC,OAAO;CACjC,uBAAuB;EACtB;EACA;EACA;EACA;EACA;EACA;CACD;CACA,oBAAoB,CAAC,MAAM;CAC3B,+BAA+B,CAAC,MAAM;CACtC,mCAAmC,CAAC,KAAK;CACzC,mBAAmB,CAAC,KAAK;CACzB,6BAA6B,CAAC,KAAK;CACnC,wBAAwB,CAAC,KAAK;CAC9B,6BAA6B,CAAC,OAAO,MAAM;CAC3C,0BAA0B,CAAC,KAAK;CAChC,sBAAsB,CAAC,KAAK;CAC5B,0BAA0B,CAAC,OAAO,KAAK;CACvC,+BAA+B,CAAC,KAAK;CACrC,qBAAqB,CAAC,IAAI;CAC1B,8BAA8B,CAAC,IAAI;CACnC,yBAAyB,CAAC,KAAK;CAC/B,wBAAwB,CAAC,KAAK;CAC9B,4BAA4B,CAAC,SAAS;CACtC,uBAAuB,CAAC,KAAK;CAC7B,uBAAuB,CAAC,KAAK;CAC7B,0BAA0B;EACzB;EACA;EACA;CACD;CACA,8BAA8B,CAAC,OAAO;CACtC,wBAAwB,CAAC,SAAS;CAClC,yBAAyB,CAAC,MAAM;CAChC,uBAAuB,CAAC,OAAO,KAAK;CACpC,2BAA2B,CAAC,KAAK;CACjC,uCAAuC,CAAC,KAAK;CAC7C,kCAAkC,CAAC,IAAI;CACvC,uCAAuC,CAAC,KAAK;CAC7C,gCAAgC,CAAC,IAAI;CACrC,6BAA6B,CAAC,MAAM;CACpC,gCAAgC,CAAC,KAAK;CACtC,6BAA6B,CAAC,MAAM;CACpC,iCAAiC,CAAC,KAAK;CACvC,6BAA6B,CAAC,KAAK;CACnC,wBAAwB,CAAC,KAAK;CAC9B,uBAAuB,CAAC,KAAK;CAC7B,uBAAuB,CAAC,KAAK;CAC7B,mBAAmB,CAAC,KAAK;CACzB,wBAAwB,CAAC,MAAM;CAC/B,+BAA+B,CAAC,KAAK;CACrC,gCAAgC,CAAC,KAAK;CACtC,+BAA+B,CAAC,KAAK;CACrC,gCAAgC,CAAC,KAAK;CACtC,mBAAmB,CAAC,KAAK;CACzB,yBAAyB,CAAC,QAAQ;CAClC,0BAA0B,CAAC,SAAS;CACpC,sCAAsC,CAAC,QAAQ;CAC/C,2CAA2C,CAAC,QAAQ;CACpD,uBAAuB,CAAC,KAAK;CAC7B,qBAAqB,CAAC,OAAO,OAAO;CACpC,wBAAwB,CAAC,OAAO,MAAM;CACtC,4BAA4B,CAAC,IAAI;CACjC,kCAAkC,CAAC,KAAK;CACxC,mBAAmB,CAAC,KAAK;CACzB,oBAAoB,CAAC,MAAM;CAC3B,wBAAwB,CAAC,OAAO;CAChC,uBAAuB,CAAC,KAAK;CAC7B,wBAAwB,CAAC,MAAM;CAC/B,wBAAwB,CAAC,MAAM;CAC/B,wBAAwB,CAAC,SAAS;CAClC,uBAAuB,CAAC,OAAO,WAAW;CAC1C,0BAA0B,CAAC,KAAK;CAChC,gCAAgC,CAAC,KAAK;CACtC,oBAAoB,CAAC,MAAM;CAC3B,oBAAoB,CAAC,MAAM;CAC3B,wBAAwB,CAAC,MAAM;CAC/B,sBAAsB,CAAC,KAAK;CAC5B,gCAAgC,CAAC,QAAQ;CACzC,kCAAkC,CAAC,IAAI;CACvC,4BAA4B,CAAC,MAAM;CACnC,oBAAoB,CAAC,MAAM;CAC3B,+BAA+B,CAAC,KAAK;CACrC,sBAAsB,CAAC,KAAK;CAC5B,sBAAsB,CAAC,KAAK;CAC5B,wBAAwB,CAAC,MAAM;CAC/B,4BAA4B,CAAC,UAAU;CACvC,wBAAwB,CAAC,MAAM;CAC/B,4BAA4B,CAAC,KAAK;CAClC,6BAA6B,CAAC,KAAK;CACnC,6BAA6B,CAAC,KAAK;CACnC,2BAA2B,CAAC,KAAK;CACjC,2BAA2B,CAAC,KAAK;CACjC,wBAAwB,CAAC,MAAM;CAC/B,oBAAoB,CAAC,MAAM;CAC3B,yBAAyB,CAAC,SAAS,KAAK;CACxC,yBAAyB,CAAC,KAAK;CAC/B,mBAAmB;EAClB;EACA;EACA;EACA;CACD;CACA,uBAAuB,CAAC,KAAK;CAC7B,uBAAuB,CAAC,KAAK;CAC7B,yBAAyB,CAAC,KAAK;CAC/B,wBAAwB,CAAC,QAAQ,MAAM;CACvC,wBAAwB,CAAC,MAAM;CAC/B,sBAAsB;EACrB;EACA;EACA;EACA;CACD;CACA,oBAAoB,CAAC,MAAM;CAC3B,uBAAuB,CAAC,KAAK;CAC7B,mBAAmB,CAAC,KAAK;CACzB,6BAA6B,CAAC,QAAQ;CACtC,cAAc,CAAC,OAAO;CACtB,aAAa,CAAC,QAAQ,KAAK;CAC3B,eAAe,CAAC,KAAK;CACrB,aAAa,CAAC,KAAK;CACnB,eAAe,CAAC,MAAM,KAAK;CAC3B,cAAc;EACb;EACA;EACA;EACA;CACD;CACA,oBAAoB,CAAC,MAAM;CAC3B,aAAa,CAAC,MAAM;CACpB,aAAa;EACZ;EACA;EACA;CACD;CACA,cAAc;EACb;EACA;EACA;EACA;EACA;EACA;CACD;CACA,aAAa;EACZ;EACA;EACA;EACA;CACD;CACA,aAAa,CAAC,KAAK;CACnB,cAAc,CAAC,KAAK;CACpB,aAAa,CAAC,KAAK;CACnB,cAAc,CAAC,MAAM;CACrB,cAAc,CAAC,MAAM;CACrB,YAAY,CAAC,IAAI;CACjB,mBAAmB,CAAC,KAAK;CACzB,YAAY,CAAC,KAAK;CAClB,YAAY,CAAC,KAAK;CAClB,aAAa,CAAC,MAAM;CACpB,cAAc,CAAC,OAAO;CACtB,cAAc,CAAC,KAAK;CACpB,cAAc,CAAC,MAAM;CACrB,cAAc,CAAC,MAAM;CACrB,cAAc,CAAC,MAAM;CACrB,cAAc,CAAC,MAAM;CACrB,aAAa,CAAC,OAAO,KAAK;CAC1B,aAAa,CAAC,KAAK;CACnB,mBAAmB,CAAC,MAAM;CAC1B,aAAa,CAAC,KAAK;CACnB,aAAa,CAAC,KAAK;CACnB,cAAc,CAAC,MAAM;CACrB,eAAe,CAAC,IAAI;CACpB,aAAa,CAAC,KAAK;CACnB,cAAc,CAAC,MAAM;CACrB,uBAAuB,CAAC,OAAO;CAC/B,cAAc,CAAC,MAAM;CACrB,uBAAuB,CAAC,OAAO;CAC/B,eAAe,CAAC,MAAM;CACtB,aAAa,CAAC,KAAK;CACnB,cAAc,CAAC,MAAM;CACrB,cAAc,CAAC,MAAM;CACrB,aAAa,CAAC,KAAK;CACnB,aAAa,CAAC,OAAO,MAAM;CAC3B,cAAc;EACb;EACA;EACA;CACD;CACA,aAAa,CAAC,KAAK;CACnB,cAAc,CAAC,KAAK;CACpB,aAAa,CAAC,OAAO,MAAM;CAC3B,aAAa,CAAC,OAAO,KAAK;CAC1B,aAAa,CAAC,KAAK;CACnB,aAAa,CAAC,KAAK;CACnB,cAAc,CAAC,MAAM;CACrB,cAAc,CAAC,MAAM;CACrB,aAAa,CAAC,KAAK;CACnB,cAAc,CAAC,MAAM;CACrB,cAAc,CAAC,MAAM;CACrB,cAAc,CAAC,MAAM;CACrB,aAAa,CAAC,KAAK;CACnB,cAAc,CAAC,MAAM;CACrB,eAAe,CAAC,MAAM;CACtB,aAAa,CAAC,KAAK;CACnB,aAAa,CAAC,KAAK;CACnB,iBAAiB,CAAC,OAAO,MAAM;CAC/B,aAAa,CAAC,KAAK;CACnB,cAAc,CAAC,OAAO,MAAM;CAC5B,iBAAiB,CAAC,KAAK;CACvB,cAAc,CAAC,MAAM;CACrB,aAAa,CAAC,KAAK;CACnB,oCAAoC,CAAC,0BAA0B;CAC/D,kBAAkB,CAAC,OAAO;CAC1B,kCAAkC,CAAC,OAAO;CAC1C,2CAA2C,CAAC,OAAO;CACnD,0BAA0B,CAAC,OAAO;CAClC,kBAAkB;EACjB;EACA;EACA;EACA;CACD;CACA,aAAa,CAAC,KAAK;CACnB,mBAAmB,CAAC,MAAM;CAC1B,qBAAqB,CAAC,KAAK;CAC3B,cAAc,CAAC,OAAO,MAAM;CAC5B,YAAY,CAAC,IAAI;CACjB,cAAc;EACb;EACA;EACA;CACD;CACA,aAAa,CAAC,KAAK;CACnB,aAAa,CAAC,KAAK;CACnB,aAAa,CAAC,KAAK;CACnB,cAAc;EACb;EACA;EACA;EACA;EACA;CACD;CACA,kBAAkB,CAAC,MAAM;CACzB,kBAAkB,CAAC,MAAM;CACzB,sBAAsB,CAAC,OAAO;CAC9B,aAAa,CAAC,KAAK;CACnB,aAAa,CAAC,KAAK;CACnB,cAAc,CAAC,OAAO,MAAM;CAC5B,oBAAoB,CAAC,SAAS,OAAO;CACrC,yBAAyB,CAAC,MAAM;CAChC,kBAAkB,CAAC,SAAS,OAAO;CACnC,iBAAiB,CAAC,OAAO,MAAM;CAC/B,kBAAkB,CAAC,MAAM;CACzB,uBAAuB,CAAC,YAAY,UAAU;CAC9C,iBAAiB,CAAC,OAAO,KAAK;CAC9B,qBAAqB,CAAC,UAAU,WAAW;CAC3C,YAAY,CAAC,KAAK;CAClB,YAAY,CAAC,KAAK;CAClB,aAAa;EACZ;EACA;EACA;CACD;CACA,aAAa,CAAC,MAAM;CACpB,mBAAmB,CAAC,MAAM,KAAK;CAC/B,YAAY,CAAC,KAAK;CAClB,aAAa,CAAC,MAAM;CACpB,iBAAiB,CAAC,MAAM,UAAU;CAClC,eAAe,CAAC,KAAK;CACrB,YAAY,CAAC,KAAK;CAClB,WAAW,CAAC,IAAI;CAChB,cAAc;EACb;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACD;CACA,iBAAiB,CAAC,KAAK;CACvB,YAAY,CAAC,MAAM;CACnB,aAAa,CAAC,QAAQ,KAAK;CAC3B,aAAa,CAAC,MAAM;CACpB,aAAa,CAAC,QAAQ,KAAK;CAC3B,aAAa,CAAC,MAAM;CACpB,eAAe,CAAC,UAAU,MAAM;CAChC,6BAA6B,CAAC,KAAK;CACnC,cAAc;EACb;EACA;EACA;EACA;EACA;EACA;CACD;CACA,eAAe,CAAC,KAAK;CACrB,iBAAiB;EAChB;EACA;EACA;CACD;CACA,cAAc,CAAC,OAAO;CACtB,YAAY,CAAC,KAAK;CAClB,aAAa,CAAC,MAAM;CACpB,YAAY,CAAC,MAAM;CACnB,aAAa,CAAC,QAAQ,KAAK;CAC3B,cAAc,CAAC,OAAO,MAAM;CAC5B,eAAe,CAAC,KAAK;CACrB,cAAc,CAAC,MAAM;CACrB,cAAc,CAAC,MAAM;CACrB,cAAc,CAAC,MAAM;CACrB,qBAAqB,CAAC,KAAK;CAC3B,cAAc,CAAC,MAAM;CACrB,aAAa,CAAC,QAAQ,OAAO;CAC7B,aAAa,CAAC,OAAO,MAAM;CAC3B,cAAc;EACb;EACA;EACA;EACA;CACD;CACA,aAAa;EACZ;EACA;EACA;CACD;CACA,cAAc;EACb;EACA;EACA;EACA;EACA;CACD;CACA,aAAa,CAAC,KAAK;CACnB,mBAAmB,CAAC,MAAM,KAAK;CAC/B,cAAc,CAAC,MAAM;AACtB;AACA,OAAO,OAAO,KAAK;AAEnB,IAAI,yBAAyB,SAAS,UAAU,OAAO,MAAM,GAAG;CAC/D,IAAI,SAAS,OAAO,CAAC,GAAG,MAAM,IAAI,UAAU,+CAA+C;CAC3F,IAAI,OAAO,UAAU,aAAa,aAAa,SAAS,CAAC,IAAI,CAAC,MAAM,IAAI,QAAQ,GAAG,MAAM,IAAI,UAAU,0EAA0E;CACjL,OAAO,SAAS,MAAM,IAAI,SAAS,MAAM,EAAE,KAAK,QAAQ,IAAI,IAAI,EAAE,QAAQ,MAAM,IAAI,QAAQ;AAC7F;AACA,IAAI;AACJ,IAAI;AACJ,IAAI;AACJ,IAAI,OAAO,MAAM;CAChB,YAAY,GAAG,MAAM;EACpB,sBAAsB,IAAI,sBAAsB,IAAI,IAAI,CAAC;EACzD,sBAAsB,IAAI,sBAAsB,IAAI,IAAI,CAAC;EACzD,uBAAuB,IAAI,sBAAsB,IAAI,IAAI,CAAC;EAC1D,KAAK,MAAM,OAAO,MAAM,KAAK,OAAO,GAAG;CACxC;CACA,OAAO,SAAS,QAAQ,OAAO;EAC9B,KAAK,IAAI,CAAC,MAAM,eAAe,OAAO,QAAQ,OAAO,GAAG;GACvD,OAAO,KAAK,YAAY;GACxB,aAAa,WAAW,KAAK,QAAQ,IAAI,YAAY,CAAC;GACtD,IAAI,gBAAgB,uBAAuB,MAAM,wBAAwB,GAAG,CAAC,CAAC,IAAI,IAAI;GACtF,IAAI,CAAC,eAAe;IACnB,gCAAgC,IAAI,IAAI;IACxC,uBAAuB,MAAM,wBAAwB,GAAG,CAAC,CAAC,IAAI,MAAM,aAAa;GAClF;GACA,IAAI,QAAQ;GACZ,KAAK,IAAI,aAAa,YAAY;IACjC,MAAM,UAAU,UAAU,WAAW,GAAG;IACxC,YAAY,UAAU,UAAU,MAAM,CAAC,IAAI;IAC3C,cAAc,IAAI,SAAS;IAC3B,IAAI,OAAO,uBAAuB,MAAM,uBAAuB,GAAG,CAAC,CAAC,IAAI,MAAM,SAAS;IACvF,QAAQ;IACR,IAAI,SAAS;IACb,MAAM,cAAc,uBAAuB,MAAM,uBAAuB,GAAG,CAAC,CAAC,IAAI,SAAS;IAC1F,IAAI,eAAe,eAAe,QAAQ,CAAC,OAAO,MAAM,IAAI,MAAM,IAAI,KAAK,MAAM,UAAU,oBAAoB,YAAY,MAAM,UAAU,oDAAoD;IAC/L,uBAAuB,MAAM,uBAAuB,GAAG,CAAC,CAAC,IAAI,WAAW,IAAI;GAC7E;EACD;EACA,OAAO;CACR;CACA,QAAQ,MAAM;EACb,IAAI,OAAO,SAAS,UAAU,OAAO;EACrC,MAAM,OAAO,KAAK,QAAQ,aAAa,EAAE,CAAC,CAAC,YAAY;EACvD,MAAM,MAAM,KAAK,QAAQ,UAAU,EAAE,CAAC,CAAC,YAAY;EACnD,MAAM,UAAU,KAAK,SAAS,KAAK;EACnC,IAAI,EAAE,IAAI,SAAS,KAAK,SAAS,MAAM,SAAS,OAAO;EACvD,OAAO,uBAAuB,MAAM,uBAAuB,GAAG,CAAC,CAAC,IAAI,GAAG,KAAK;CAC7E;CACA,aAAa,MAAM;EAClB,IAAI,OAAO,SAAS,UAAU,OAAO;EACrC,OAAO,MAAM,QAAQ,GAAG,CAAC,CAAC;EAC1B,QAAQ,QAAQ,uBAAuB,MAAM,uBAAuB,GAAG,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,YAAY,CAAC,MAAM;CAC7G;CACA,iBAAiB,MAAM;EACtB,IAAI,OAAO,SAAS,UAAU,OAAO;EACrC,OAAO,KAAK,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,YAAY;EAC7C,MAAM,aAAa,uBAAuB,MAAM,wBAAwB,GAAG,CAAC,CAAC,IAAI,IAAI;EACrF,OAAO,aAAa,IAAI,IAAI,UAAU,IAAI;CAC3C;CACA,UAAU;EACT,KAAK,eAAe;GACnB,MAAM,IAAI,MAAM,8HAA8H;EAC/I;EACA,OAAO,OAAO,IAAI;EAClB,OAAO;CACR;CACA,gBAAgB;EACf,OAAO;GACN,OAAO,uBAAuB,MAAM,uBAAuB,GAAG;GAC9D,YAAY,uBAAuB,MAAM,uBAAuB,GAAG;EACpE;CACD;AACD;AACA,wCAAwC,IAAI,QAAQ,GAAG,wCAAwC,IAAI,QAAQ,GAAG,yCAAyC,IAAI,QAAQ;AAEjJ,IAAI,KAAK,OAAO,OAAO,CAAC,CAAC,QAAQ;AAEnD,MAAM,YAAY,CAAC;AACnB,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,EAAE,GAAG,UAAU,MAAM,IAAI,IAAA,CAAK,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;AA6B5E,MAAM,aAAa;CAClB,WAAW;CACX,UAAU;CACV,eAAe;CACf,iBAAiB;AAClB;AACA,MAAM,iBAAiB;CACtB,MAAM;CACN,aAAa,eAAe;CAC5B,kBAAkB,eAAe;CACjC,MAAM,WAAW;CACjB,OAAO;CACP,OAAO;CACP,YAAY;CACZ,eAAe;AAChB;AACA,OAAO,OAAO,cAAc;AAU3B,WAAW,UACX,WAAW,iBACX,WAAW,eACX,WAAW;AAGX,WAAW,UACX,WAAW,iBACX,WAAW;AAGX,WAAW,iBACX,WAAW,eACX,WAAW;AAGc,QAAQ;AAuNjB,QAAQ;AAIV,KAAK;AAoBI,OAAO,OAAO;CACrC,WAAW,KAAK,IAAI;CACpB,aAAa,UAAU,UAAU,WAAW,UAAU,KAAK;CAC3D,eAAe,UAAU;EACxB,IAAI,OAAO,aAAa,KAAK;CAC9B;AACD,CAAC;AA4ZgC,OAAO,OAAO,EAAE,SAAS,KAAK,CAAC;AA2R/B,OAAO,OAAO;CAC9C,MAAM;CACN,SAAS;CACT,KAAK;CACL,MAAM;CACN,kBAAkB;AACnB,CAAC;AA+buB,OAAO,OAAO,CAAC,CAAC;AA+Df,IAAI,IAAI,4nCAA4nC,MAAM,GAAG,CAAC;;AAmkCvpC,OAAO,OAAO;CAC7B,oBAAoB;CACpB,cAAc;AACf,CAAC;AAgjBD,MAAM,YAAY,GAAG,GAAG,QAAQ;CAC/B,MAAM,KAAK,aAAa,SAAS,WAAW,GAAG,GAAG,IAAI;CACtD,MAAM,KAAK,aAAa,SAAS,WAAW,GAAG,GAAG,IAAI;CACtD,MAAM,IAAI,OAAO,QAAQ,MAAM,QAAQ,MAAM,IAAI,IAAI,GAAG;CACxD,OAAO,KAAK;EACX,OAAO,EAAE;EACT,KAAK,EAAE;EACP,KAAK,IAAI,MAAM,GAAG,EAAE,EAAE;EACtB,MAAM,IAAI,MAAM,EAAE,KAAK,GAAG,QAAQ,EAAE,EAAE;EACtC,MAAM,IAAI,MAAM,EAAE,KAAK,GAAG,MAAM;CACjC;AACD;AACA,MAAM,cAAc,KAAK,QAAQ;CAChC,MAAM,IAAI,IAAI,MAAM,GAAG;CACvB,OAAO,IAAI,EAAE,KAAK;AACnB;AACA,MAAM,SAAS,GAAG,GAAG,QAAQ;CAC5B,IAAI,MAAM,KAAK,MAAM,QAAQ,KAAK,GAAG;CACrC,IAAI,KAAK,IAAI,QAAQ,CAAC;CACtB,IAAI,KAAK,IAAI,QAAQ,GAAG,KAAK,CAAC;CAC9B,IAAI,IAAI;CACR,IAAI,MAAM,KAAK,KAAK,GAAG;EACtB,IAAI,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE;EAC3B,OAAO,CAAC;EACR,OAAO,IAAI;EACX,OAAO,KAAK,KAAK,CAAC,QAAQ;GACzB,IAAI,MAAM,IAAI;IACb,KAAK,KAAK,CAAC;IACX,KAAK,IAAI,QAAQ,GAAG,IAAI,CAAC;GAC1B,OAAO,IAAI,KAAK,WAAW,GAAG;IAC7B,MAAM,IAAI,KAAK,IAAI;IACnB,IAAI,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,EAAE;GAClC,OAAO;IACN,MAAM,KAAK,IAAI;IACf,IAAI,QAAQ,KAAK,KAAK,MAAM,MAAM;KACjC,OAAO;KACP,QAAQ;IACT;IACA,KAAK,IAAI,QAAQ,GAAG,IAAI,CAAC;GAC1B;GACA,IAAI,KAAK,MAAM,MAAM,IAAI,KAAK;EAC/B;EACA,IAAI,KAAK,UAAU,UAAU,KAAK,GAAG,SAAS,CAAC,MAAM,KAAK;CAC3D;CACA,OAAO;AACR;AAEA,MAAM,WAAW,YAAY,KAAK,OAAO,IAAI;AAC7C,MAAM,UAAU,WAAW,KAAK,OAAO,IAAI;AAC3C,MAAM,WAAW,YAAY,KAAK,OAAO,IAAI;AAC7C,MAAM,WAAW,YAAY,KAAK,OAAO,IAAI;AAC7C,MAAM,YAAY,aAAa,KAAK,OAAO,IAAI;AAC/C,MAAM,kBAAkB,IAAI,OAAO,UAAU,GAAG;AAChD,MAAM,iBAAiB,IAAI,OAAO,SAAS,GAAG;AAC9C,MAAM,kBAAkB,IAAI,OAAO,UAAU,GAAG;AAChD,MAAM,kBAAkB,IAAI,OAAO,UAAU,GAAG;AAChD,MAAM,mBAAmB,IAAI,OAAO,WAAW,GAAG;AAClD,MAAM,eAAe;AACrB,MAAM,cAAc;AACpB,MAAM,eAAe;AACrB,MAAM,eAAe;AACrB,MAAM,gBAAgB;AACtB,MAAM,gBAAgB;AACtB,MAAM,uBAAuB;AAC7B,MAAM,sBAAsB;AAC5B,MAAM,yBAAyB;AAC/B,SAAS,QAAQ,KAAK;CACrB,OAAO,CAAC,MAAM,GAAG,IAAI,SAAS,KAAK,EAAE,IAAI,IAAI,WAAW,CAAC;AAC1D;AACA,SAAS,aAAa,KAAK;CAC1B,OAAO,IAAI,QAAQ,cAAc,QAAQ,CAAC,CAAC,QAAQ,aAAa,OAAO,CAAC,CAAC,QAAQ,cAAc,QAAQ,CAAC,CAAC,QAAQ,cAAc,QAAQ,CAAC,CAAC,QAAQ,eAAe,SAAS;AAC1K;AACA,SAAS,eAAe,KAAK;CAC5B,OAAO,IAAI,QAAQ,iBAAiB,IAAI,CAAC,CAAC,QAAQ,gBAAgB,GAAG,CAAC,CAAC,QAAQ,iBAAiB,GAAG,CAAC,CAAC,QAAQ,iBAAiB,GAAG,CAAC,CAAC,QAAQ,kBAAkB,GAAG;AACjK;AACA,SAAS,QAAQ,QAAQ,OAAO;CAC/B,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK,OAAO,KAAK,MAAM,EAAE;AAC5D;;;;;;AAMA,SAAS,gBAAgB,KAAK;CAC7B,MAAM,QAAQ,CAAC;CACf,IAAI,QAAQ;CACZ,SAAS;EACR,MAAM,IAAI,SAAS,KAAK,KAAK,GAAG;EAChC,IAAI,CAAC,GAAG;GACP,MAAM,OAAO,IAAI,MAAM,GAAG;GAC1B,KAAK,KAAK,QAAQ,KAAK;GACvB,QAAQ,OAAO,IAAI;GACnB,OAAO;EACR;EACA,MAAM,EAAE,KAAK,MAAM,SAAS;EAC5B,MAAM,IAAI,IAAI,MAAM,GAAG;EACvB,EAAE,KAAK,QAAQ,EAAE;EACjB,EAAE,EAAE,SAAS,MAAM,MAAM,OAAO;EAChC,IAAI,CAAC,KAAK,QAAQ;GACjB,QAAQ,OAAO,CAAC;GAChB,OAAO;EACR;EACA,QAAQ,EAAE,IAAI;EACd,QAAQ,OAAO,CAAC;EAChB,MAAM;CACP;AACD;AACA,SAAS,OAAO,KAAK,UAAU,CAAC,GAAG;CAClC,IAAI,CAAC,KAAK,OAAO,CAAC;CAClB,MAAM,EAAE,MAAM,eAAe,YAAY,sBAAsB,WAAW,qBAAqB,cAAc,2BAA2B;CACxI,IAAI,IAAI,MAAM,GAAG,CAAC,MAAM,MAAM,MAAM,WAAW,IAAI,MAAM,CAAC;CAC1D,OAAO,QAAQ,aAAa,GAAG,GAAG,KAAK,WAAW,UAAU,GAAG,aAAa,IAAI,CAAC,CAAC,IAAI,cAAc;AACrG;AACA,SAAS,QAAQ,KAAK;CACrB,OAAO,MAAM,MAAM;AACpB;AACA,SAAS,SAAS,IAAI;CACrB,OAAO,SAAS,KAAK,EAAE;AACxB;AACA,SAAS,IAAI,GAAG,GAAG;CAClB,OAAO,KAAK;AACb;AACA,SAAS,IAAI,GAAG,GAAG;CAClB,OAAO,KAAK;AACb;AACA,SAAS,QAAQ,KAAK,KAAK,QAAQ,KAAK,WAAW,aAAa;CAC/D,MAAM,MAAM,CAAC;CACb,IAAI,SAAS;CACb,KAAK,IAAI,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK,KAAK,IAAI,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;EAC5E,IAAI,IAAI,UAAU,KAAK,OAAO;EAC9B,MAAM,YAAY,IAAI,KAAK,MAAM,OAAO;EACxC,IAAI,eAAe,CAAC,WAAW;EAC/B,IAAI,SAAS,UAAU,SAAS,WAAW,OAAO;EAClD,IAAI,KAAK,SAAS;EAClB,UAAU,UAAU;CACrB;CACA,OAAO;AACR;AACA,SAAS,eAAe,MAAM,iBAAiB,KAAK,WAAW;CAC9D,MAAM,IAAI,KAAK,MAAM,MAAM;CAC3B,MAAM,IAAI,CAAC;;CAEX,IAAI,EAAE,OAAO,KAAK,KAAK,EAAE,OAAO,KAAK,GAAG,OAAO;;CAE/C,MAAM,IAAI,QAAQ,EAAE,EAAE;CACtB,MAAM,IAAI,QAAQ,EAAE,EAAE;CACtB,MAAM,QAAQ,KAAK,IAAI,EAAE,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,MAAM;CAC/C,IAAI,OAAO,EAAE,WAAW,KAAK,EAAE,OAAO,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,QAAQ,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI;CACtF,IAAI,OAAO;CACX,IAAI,IAAI,GAAG;EACV,QAAQ;EACR,OAAO;CACR;CACA,MAAM,MAAM,EAAE,KAAK,QAAQ;CAC3B,IAAI,SAAS;CACb,KAAK,IAAI,IAAI,GAAG,KAAK,GAAG,CAAC,KAAK,EAAE,SAAS,KAAK,KAAK,MAAM;EACxD,IAAI;EACJ,IAAI,iBAAiB;GACpB,IAAI,OAAO,aAAa,CAAC;GACzB,IAAI,MAAM,MAAM,IAAI;EACrB,OAAO;GACN,IAAI,OAAO,CAAC;GACZ,IAAI,KAAK;IACR,MAAM,OAAO,QAAQ,EAAE;IACvB,IAAI,OAAO,GAAG;KACb,MAAM,IAAI,IAAI,MAAM,OAAO,CAAC,CAAC,CAAC,KAAK,GAAG;KACtC,IAAI,IAAI,GAAG,IAAI,MAAM,IAAI,EAAE,MAAM,CAAC;UAC7B,IAAI,IAAI;IACd;GACD;EACD;EACA,IAAI,SAAS,EAAE,SAAS,WAAW;EACnC,EAAE,KAAK,CAAC;EACR,UAAU,EAAE;CACb;CACA,OAAO;AACR;AACA,SAAS,QAAQ,KAAK,KAAK,WAAW,UAAU,OAAO,aAAa,OAAO;CAC1E,IAAI,QAAQ,UAAU,OAAO,CAAC,GAAG;CACjC,IAAI,MAAM,CAAC,EAAE;CACb,IAAI,WAAW;CACf,IAAI,cAAc;CAClB,IAAI,aAAa;CACjB,SAAS;EACR,MAAM,IAAI,SAAS,KAAK,KAAK,GAAG;EAChC,IAAI,CAAC,GAAG,OAAO,QAAQ,KAAK,KAAK,CAAC,EAAE,GAAG,KAAK,WAAW,WAAW;EAClE,MAAM,MAAM,EAAE;EACd,IAAI,MAAM,KAAK,GAAG,GAAG;GACpB,MAAM,QAAQ,KAAK,MAAM,MAAM,EAAE,OAAO,KAAK,CAAC,EAAE,GAAG,KAAK,WAAW,eAAe,CAAC,EAAE,KAAK,MAAM;GAChG,aAAa;GACb,IAAI,CAAC,EAAE,KAAK,QAAQ;GACpB,MAAM,EAAE;GACR;EACD;EACA,MAAM,oBAAoB,iCAAiC,KAAK,EAAE,IAAI;EACtE,MAAM,kBAAkB,uCAAuC,KAAK,EAAE,IAAI;EAC1E,MAAM,aAAa,qBAAqB;EACxC,MAAM,YAAY,EAAE,KAAK,QAAQ,GAAG,KAAK;EACzC,IAAI,CAAC,cAAc,CAAC,WAAW;GAC9B,IAAI,WAAW,eAAe,EAAE,KAAK,MAAM,YAAY,GAAG;IACzD;IACA,MAAM,EAAE,MAAM,MAAM,EAAE,OAAO,WAAW,EAAE;IAC1C,QAAQ;IACR;GACD;GACA,OAAO,QAAQ,KAAK,MAAM,MAAM,EAAE,OAAO,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,KAAK,WAAW,WAAW;EACzF;EACA,IAAI,YAAY;GACf,cAAc,SAAS,CAAC;GACxB,aAAa;EACd;EACA,IAAI;EACJ,IAAI,YAAY,SAAS,eAAe,EAAE,MAAM,iBAAiB,KAAK,SAAS;OAC1E;GACJ,IAAI,IAAI,gBAAgB,EAAE,IAAI;GAC9B,IAAI,EAAE,WAAW,KAAK,EAAE,OAAO,KAAK,GAAG;IACtC,IAAI,QAAQ,EAAE,IAAI,KAAK,WAAW,UAAU,QAAQ,GAAG,aAAa,KAAK,CAAC,CAAC,IAAI,OAAO;;IAEtF,IAAI,EAAE,WAAW,GAAG;KACnB,MAAM,QAAQ,KAAK,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,KAAK,WAAW,eAAe,CAAC,EAAE,KAAK,MAAM;KAClF,IAAI,CAAC,EAAE,KAAK,QAAQ;KACpB,MAAM,EAAE;KACR;IACD;GACD;GACA,IAAI,eAAe,eAAe,CAAC,EAAE,KAAK,UAAU,CAAC;GACrD,KAAK,IAAI,IAAI,GAAG,gBAAgB,IAAI,IAAI,QAAQ,KAAK,IAAI,IAAI,IAAI,eAAe;GAChF,SAAS,CAAC;GACV,IAAI,eAAe;GACnB,OAAO,KAAK,IAAI,IAAI,GAAG,IAAI,EAAE,QAAQ,KAAK;IACzC,MAAM,WAAW,QAAQ,EAAE,IAAI,KAAK,WAAW,UAAU,QAAQ,GAAG,aAAa,KAAK;IACtF,KAAK,IAAI,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;KACzC,MAAM,IAAI,SAAS;KACnB,IAAI,gBAAgB,CAAC,GAAG;KACxB,IAAI,OAAO,UAAU,OAAO,eAAe,EAAE,SAAS,WAAW,MAAM;KACvE,OAAO,KAAK,CAAC;KACb,gBAAgB,EAAE;IACnB;GACD;EACD;EACA,MAAM,QAAQ,KAAK,KAAK,QAAQ,KAAK,WAAW,eAAe,CAAC,EAAE,KAAK,MAAM;EAC7E,IAAI,CAAC,EAAE,KAAK,QAAQ;EACpB,MAAM,EAAE;CACT;CACA,OAAO;AACR;AAEA,MAAM,eAAe;CACpB,aAAa,CAAC,sBAAsB;CACpC,aAAa,CAAC,eAAe;CAC7B,aAAa,CAAC,aAAa;CAC3B,aAAa,CAAC,YAAY;CAC1B,aAAa,CAAC,SAAS;CACvB,aAAa,CAAC,SAAS;CACvB,aAAa,CAAC,gBAAgB,IAAI;CAClC,aAAa,CAAC,SAAS;CACvB,aAAa,CAAC,UAAU,IAAI;CAC5B,aAAa,CAAC,cAAc;CAC5B,aAAa,CAAC,uBAAuB;CACrC,aAAa,CAAC,SAAS;CACvB,YAAY,CAAC,6BAA6B;CAC1C,cAAc,CAAC,WAAW;AAC3B;AACA,MAAM,eAAe,MAAM,EAAE,QAAQ,aAAa,MAAM;AACxD,MAAM,UAAU;AAChB,MAAM,cAAc,MAAM,UAAU,SAAS,OAAO,SAAS;CAC5D,MAAM,QAAQ,MAAM;EACnB,MAAM,IAAI,OAAO,EAAE,UAAU,IAAI,IAAI;EACrC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,IAAI,IAAI;CAClC;CACA,MAAM,MAAM;;CAEZ,IAAI,KAAK,OAAO,GAAG,MAAM,KAAK,MAAM,IAAI,MAAM,2BAA2B;;CAEzE,MAAM,SAAS,CAAC;CAChB,MAAM,OAAO,CAAC;CACd,IAAI,IAAI,MAAM;CACd,IAAI,WAAW;CACf,IAAI,WAAW;CACf,IAAI,SAAS;CACb,IAAI,SAAS;CACb,IAAI,aAAa;CACjB,OAAO,OAAO,IAAI,KAAK,QAAQ;EAC9B,MAAM,IAAI,OAAO,cAAc,KAAK,YAAY,CAAC,CAAC;EAClD,KAAK,MAAM,OAAO,MAAM,QAAQ,MAAM,MAAM,GAAG;GAC9C,SAAS;GACT;GACA;EACD;EACA,IAAI,MAAM,OAAO,YAAY,CAAC,UAAU;GACvC,SAAS,IAAI;GACb;EACD;EACA,WAAW;EACX,IAAI,MAAM,MACL;OAAA,CAAC,UAAU;IACd,WAAW;IACX;IACA;GACD;;EAED,IAAI,MAAM,OAAO,CAAC,UACZ;QAAA,MAAM,CAAC,KAAK,CAAC,MAAM,SAAS,OAAO,QAAQ,YAAY,GAAG,IAAI,KAAK,WAAW,KAAK,CAAC,GAAG;IAC3F,IAAI,YAAY,OAAO,CAAC,SAAS,KAAK,SAAS,GAAG;IAClD,KAAK,IAAI;IACT,IAAI,KAAK,KAAK,KAAK,IAAI;SAClB,OAAO,KAAK,IAAI;IACrB,SAAS;GACV;;EAED,WAAW;EACX,MAAM,IAAI,KAAK,CAAC;EAChB,IAAI,YAAY;GACf,IAAI,EAAE,YAAY,CAAC,IAAI,WAAW,YAAY,CAAC,GAAG,OAAO,KAAK,YAAY,UAAU,IAAI,MAAM,YAAY,CAAC,CAAC;QACvG,IAAI,MAAM,YAAY,OAAO,KAAK,YAAY,CAAC,CAAC;GACrD,aAAa;GACb,KAAK,EAAE;GACP;EACD;EACA,IAAI,KAAK,WAAW,MAAM,IAAI,EAAE,MAAM,GAAG;GACxC,OAAO,KAAK,YAAY,IAAI,GAAG,CAAC;GAChC,KAAK,EAAE,SAAS;GAChB;EACD;EACA,IAAI,KAAK,WAAW,KAAK,IAAI,EAAE,MAAM,GAAG;GACvC,aAAa;GACb,KAAK,EAAE,SAAS;GAChB;EACD;EACA,OAAO,KAAK,YAAY,CAAC,CAAC;EAC1B,KAAK,EAAE;CACR;CACA,IAAI,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;CAClC,IAAI,CAAC,OAAO,UAAU,CAAC,KAAK,QAAQ,OAAO,CAAC,SAAS,KAAK,SAAS,GAAG;CACtE,MAAM,UAAU,OAAO,SAAS,MAAM,MAAM,OAAO,KAAK,EAAE,IAAI;CAC9D,MAAM,QAAQ,OAAO,SAAS,KAAK,OAAO,KAAK,KAAK,EAAE,IAAI;CAC1D,MAAM,OAAO,OAAO,OAAO,UAAU,KAAK,SAAS,MAAM,UAAU,MAAM,QAAQ,MAAM,OAAO,SAAS,UAAU;CACjH,OAAO,CAAC,IAAI,OAAO,MAAM,SAAS,OAAO,GAAG,GAAG,SAAS,GAAG;AAC5D;AAEA,MAAM,QAAQ;CACb,GAAG;CACH,IAAI;AACL;AACA,MAAM,WAAW;AACjB,MAAM,OAAO,QAAQ;CACpB,GAAG;CACH;AACD;AACA,MAAM,YAAY,MAAM,EAAE,QAAQ,wBAAwB,MAAM;AAChE,MAAM,aAAa,MAAM,IAAI,OAAO,IAAI,SAAS,CAAC,EAAE,IAAI,IAAI;AAC5D,MAAM,4BAA4B,IAAI,IAAI;AAC1C,MAAM,UAAU,OAAO;CACtB,IAAI,KAAK,UAAU,IAAI,EAAE;CACzB,IAAI,CAAC,IAAI;EACR,KAAK,UAAU,EAAE;EACjB,IAAI,UAAU,QAAQ,KAAK,UAAU,MAAM;EAC3C,UAAU,IAAI,IAAI,EAAE;CACrB;CACA,OAAO;AACR;AACA,MAAM,YAAY,GAAG,MAAM;CAC1B,IAAI,MAAM,EAAE,IAAI,OAAO;CACvB,IAAI,CAAC,EAAE,IAAI,OAAO;CAClB,MAAM,OAAO,EAAE,WAAW,CAAC;CAC3B,IAAI,QAAQ,KAAK,OAAO,EAAE,GAAG,KAAK,CAAC;CACnC,MAAM,QAAQ,EAAE,0BAA0B,IAAI,WAAW,GAAG;CAC5D,MAAM,UAAU,EAAE,GAAG,KAAK,CAAC,IAAI,IAAI;CACnC,OAAO,MAAM,UAAU;AACxB;AACA,MAAM,YAAY,GAAG,QAAQ,OAAO,SAAS;CAC5C,MAAM,OAAO,CAAC;CACd,KAAK,IAAI,IAAI,GAAG,IAAI,EAAE,SAAS;EAC9B,MAAM,IAAI,OAAO,cAAc,EAAE,YAAY,CAAC,CAAC;EAC/C,IAAI,MAAM,MAAM;GACf,MAAM,IAAI,EAAE,YAAY,IAAI,CAAC;GAC7B,MAAM,KAAK,MAAM,KAAK,IAAI,IAAI,OAAO,cAAc,CAAC;GACpD,KAAK,KAAK,IAAI,EAAE,CAAC;GACjB,KAAK,IAAI,GAAG;GACZ;EACD;EACA,IAAI,MAAM,KAAK;GACd,MAAM,CAAC,IAAI,YAAY,WAAW,GAAG,GAAG,QAAQ,IAAI;GACpD,IAAI,UAAU;IACb,KAAK,KAAK;KACT,GAAG;KACH;IACD,CAAC;IACD,KAAK;IACL;GACD;EACD;EACA,IAAI,CAAC,SAAS,SAAS,SAAS,CAAC,KAAK,EAAE,IAAI,OAAO,KAAK;GACvD,KAAK,KAAK;IACT,GAAG;IACH,MAAM;GACP,CAAC;GACD,KAAK;GACL;EACD;EACA,KAAK,KAAK,CAAC,SAAS,MAAM,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,SAAS,MAAM,MAAM,EAAE,GAAG,QAAQ,IAAI,MAAM,MAAM,EAAE,GAAG,OAAO,IAAI,MAAM,MAAM,EAAE,GAAG,MAAM,IAAI,IAAI,CAAC,CAAC;EACnJ,KAAK,EAAE;CACR;CACA,OAAO;AACR;AACA,MAAM,QAAQ,SAAS;CACtB,MAAM,wBAAwB,IAAI,IAAI;CACtC,MAAM,QAAQ,CAAC;CACf,KAAK,SAAS,KAAK,MAAM;EACxB,IAAI,IAAI,MAAM,QAAQ,MAAM,KAAK,CAAC;OAC7B,IAAI,IAAI,MAAM,WAAW,MAAM,QAAQ,MAAM,IAAI,MAAM,IAAI,GAAG,CAAC;CACrE,CAAC;CACD,OAAO;AACR;AACA,MAAM,SAAS,MAAM,OAAO,OAAO,KAAK,QAAQ;CAC/C,IAAI,MAAM,CAAC;CACX,MAAM,OAAO,CAAC,GAAG;CACjB,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,KAAK;EACjC,MAAM,MAAM,KAAK;EACjB,MAAM,QAAQ,MAAM,IAAI,CAAC;EACzB,IAAI,IAAI,MAAM,UAAU,UAAU,KAAK,GAAG;GACzC,MAAM,MAAM,MAAM,MAAM,OAAO,IAAI,GAAG,OAAO,KAAK;GAClD,IAAI,KAAK;IACR,GAAG;IACH,MAAM,IAAI;IACV,MAAM;GACP,CAAC;GACD,IAAI;EACL,OAAO,IAAI,IAAI,MAAM,SAAS,CAAC,KAAK,KAAK,KAAK,MAAM,CAAC,CAAC;OACjD,IAAI,IAAI,MAAM,QAAQ,IAAI,KAAK,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,CAAC;OACtD,IAAI,IAAI,MAAM,OAAO,IAAI,KAAK,IAAI,GAAG,CAAC;OACtC,IAAI,IAAI,MAAM,SAAS,IAAI,KAAK,IAAI,GAAG,CAAC;OACxC,IAAI,KAAK,GAAG;CAClB;CACA,OAAO;AACR;AACA,MAAM,aAAa,OAAO,SAAS;CAClC,MAAM,MAAM,CAAC;CACb,IAAI,MAAM;CACV,MAAM,cAAc;EACnB,KAAK,MAAM,MAAM,IAAI,UAAU,IAAI,GAAG,IAAI,KAAK,IAAI,EAAE,CAAC;EACtD,MAAM;CACP;CACA,KAAK,MAAM,MAAM,OAAO;EACvB,IAAI,GAAG,MAAM,OAAO;GACnB,OAAO,GAAG;GACV;EACD;EACA,MAAM;EACN,IAAI,KAAK,GAAG,MAAM,QAAQ;GACzB,GAAG;GACH,MAAM,GAAG,KAAK,KAAK,MAAM,UAAU,GAAG,IAAI,CAAC;EAC5C,IAAI,EAAE;CACP;CACA,MAAM;CACN,OAAO;AACR;AACA,MAAM,WAAW,OAAO,WAAW;CAClC,IAAI,KAAK;CACT,MAAM,SAAS,SAAS;EACvB,GAAG;EACH,IAAI;EACJ;CACD;CACA,MAAM,OAAO,OAAO,SAAS,MAAM,aAAa,MAAM,OAAO,KAAK,IAAI,IAAI,GAAG,IAAI;CACjF,MAAM,QAAQ,IAAI,SAAS;EAC1B,QAAQ,GAAG,GAAX;GACC,KAAK;IACJ,MAAM,KAAK,SAAS,OAAO,GAAG,EAAE,IAAI,KAAK;IACzC,OAAO;KACN,GAAG;KACH,IAAI;KACJ,IAAI,GAAG;KACP;KACA;IACD;GACD,KAAK;GACL,KAAK,QAAQ,OAAO;IACnB,GAAG,GAAG;IACN,IAAI;IACJ;GACD;GACA,KAAK,SAAS,OAAO;IACpB,GAAG;IACH,IAAI;IACJ,IAAI,GAAG;IACP;GACD;EACD;EACA,MAAM,QAAQ,SAAS,GAAG,KAAK,KAAK,MAAM,IAAI,GAAG,IAAI,CAAC;EACtD,QAAQ,GAAG,MAAX;GACC,KAAK,KAAK,OAAO,MAAM,KAAK,IAAI,CAAC;GACjC,KAAK,KAAK,OAAO,MAAM,CAAC,MAAM,GAAG,KAAK,IAAI,CAAC,CAAC;GAC5C,KAAK,KAAK,OAAO;IAChB,GAAG;IACH,IAAI;IACJ,KAAK,MAAM,KAAK,KAAK,CAAC;IACtB;GACD;EACD;EACA,MAAM,QAAQ,MAAM,CAAC,CAAC;EACtB,MAAM,QAAQ,MAAM,KAAK,KAAK,CAAC;EAC/B,MAAM,IAAI,KAAK,MAAM,KAAK;EAC1B,OAAO,GAAG,SAAS,MAAM,QAAQ;CAClC;CACA,OAAO,CAAC,IAAI,OAAO,KAAK,GAAG,EAAE;AAC9B;AACA,MAAM,QAAQ,UAAU;CACvB,MAAM,QAAQ,CAAC;CACf,MAAM,uBAAuB,IAAI,IAAI;CACrC,MAAM,OAAO,MAAM,EAAE,MAAM,UAAU,UAAU,OAAO,EAAE,EAAE;CAC1D,MAAM,QAAQ,GAAG,WAAW;EAC3B,IAAI,EAAE,MAAM,WAAW,KAAK,IAAI,CAAC,GAAG;EACpC,KAAK,IAAI,CAAC;EACV,MAAM,QAAQ,SAAS,MAAM,KAAK,GAAG,SAAS,EAAE,GAAG,IAAI,MAAM;EAC7D,QAAQ,EAAE,GAAV;GACC,KAAK;IACJ,KAAK,YAAY,EAAE,IAAI,IAAI,GAAG,CAAC,CAAC,KAAK,IAAI,GAAG;IAC5C,KAAK,MAAM,KAAK,EAAE,KAAK,KAAK,GAAG,MAAM;IACrC;GACD,KAAK;IACJ,KAAK,KAAK,IAAI,EAAE,GAAG,EAAE,OAAO,IAAI,EAAE,IAAI,GAAG;IACzC,KAAK,EAAE,KAAK,SAAS,IAAI;IACzB,OAAO,KAAK,EAAE,MAAM,MAAM;GAC3B,KAAK;IACJ,KAAK,GAAG,KAAK,UAAU,EAAE,EAAE,EAAE,MAAM,IAAI,EAAE,IAAI,GAAG;IAChD;GACD,KAAK;IACJ,KAAK,GAAG,EAAE,GAAG,MAAM,IAAI,EAAE,IAAI,GAAG;IAChC;GACD,SAAS,KAAK,GAAG,EAAE,MAAM,QAAQ,MAAM,IAAI,MAAM,IAAI,EAAE,IAAI,GAAG;EAC/D;EACA,KAAK,EAAE,MAAM,MAAM;CACpB;CACA,KAAK,OAAO,EAAE;CACd,OAAO,CAAC,YAAY,IAAI,KAAK,KAAK,GAAG,KAAK,CAAC,CAAC,KAAK,IAAI;AACtD;AACA,IAAI,QAAQ,MAAM;CACjB;CACA,UAAU,CAAC;CACX,QAAQ;CACR,OAAO,CAAC;CACR,MAAM,CAAC;CACP,YAAY,KAAK;EAChB,KAAK,MAAM;CACZ;CACA,IAAI,OAAO;EACV,OAAO,CAAC,KAAK,QAAQ,UAAU,CAAC,KAAK,SAAS,CAAC,KAAK,KAAK;CAC1D;AACD;AACA,MAAM,aAAa,GAAG,MAAM;CAC3B,IAAI,EAAE,IAAI,WAAW,EAAE,IAAI,QAAQ,OAAO;CAC1C,IAAI,EAAE,KAAK,WAAW,EAAE,KAAK,QAAQ,OAAO;CAC5C,IAAI,EAAE,IAAI,MAAM,IAAI,MAAM,OAAO,EAAE,IAAI,EAAE,GAAG,OAAO;CACnD,OAAO,EAAE,KAAK,OAAO,MAAM,EAAE,KAAK,MAAM,MAAM,EAAE,QAAQ,EAAE,OAAO,UAAU,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;AAC9F;AACA,MAAM,SAAS,UAAU;CACxB,KAAK,IAAI,aAAa,IAAI;CAC1B,MAAM,IAAI,aAAa,IAAI;CAC3B,KAAK;AACN;AACA,IAAI,MAAM,MAAM;CACf;CACA;CACA;CACA,YAAY,MAAM,UAAU,OAAO;EAClC,KAAK,OAAO;EACZ,KAAK,WAAW;EAChB,KAAK,SAAS;CACf;CACA,QAAQ;EACP,OAAO,IAAI,MAAM,EAAE,KAAK,OAAO,GAAG;CACnC;CACA,KAAK,OAAO;EACX,MAAM,MAAM,MAAM,QAAQ,KAAK,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,GAAG,MAAM,IAAI,CAAC;EAC/D,IAAI,MAAM,OAAO,MAAM,IAAI,QAAQ,MAAM,EAAE;EAC3C,OAAO;CACR;CACA,OAAO,OAAO,MAAM;EACnB,MAAM,EAAE,SAAS,KAAK;EACtB,IAAI,KAAK,KAAK,QAAQ,MAAM,KAAK,OAAO;EACxC,KAAK,KAAK,MAAM,MAAM;EACtB,OAAO;CACR;CACA,WAAW,OAAO,MAAM;EACvB,MAAM,EAAE,QAAQ,KAAK;EACrB,IAAI,IAAI,KAAK,QAAQ,MAAM,KAAK,OAAO;EACvC,IAAI,KAAK,MAAM,MAAM;EACrB,MAAM,QAAQ,KAAK,IAAI;EACvB,OAAO;CACR;CACA,WAAW,GAAG,KAAK;EAClB,OAAO,QAAQ,KAAK,QAAQ,KAAK,YAAY,MAAM;CACpD;CACA,IAAI,OAAO,MAAM,GAAG,KAAK;EACxB,QAAQ,KAAK,GAAb;GACC,KAAK;IACJ,IAAI,CAAC,KAAK,OAAO,OAAO,IAAI,GAAG;IAC/B,KAAK,MAAM,KAAK,KAAK,KAAK,KAAK,IAAI,OAAO,GAAG,GAAG,GAAG;IACnD;GACD,KAAK;IACJ,IAAI,CAAC,KAAK,OAAO,OAAO,IAAI,GAAG;IAC/B,MAAM,MAAM,KAAK,MAAM;IACvB,KAAK,IAAI,KAAK,KAAK,KAAK,GAAG,KAAK;IAChC,KAAK,KAAK,GAAG;IACb,OAAO,KAAK,OAAO,OAAO;KACzB,GAAG;KACH,KAAK;KACL,OAAO;IACR,GAAG,GAAG,GAAG;GACV,KAAK;IACJ,IAAI,KAAK,WAAW,GAAG,GAAG,GAAG;IAC7B,IAAI,KAAK,WAAW,OAAO,IAAI,GAAG,KAAK,IAAI,OAAO,KAAK,MAAM,GAAG,GAAG;IACnE;GACD,KAAK;IACJ,MAAM,QAAQ;IACd;GACD,SAAS,KAAK,WAAW,OAAO,IAAI;EACrC;CACD;CACA,OAAO,OAAO,KAAK,GAAG,KAAK;EAC1B,KAAK,MAAM,KAAK,MAAM,MAAM,IAAI,EAAE,QAAQ,IAAI,OAAO,UAAU,EAAE,OAAO,IAAI,KAAK,GAAG;EACpF,MAAM,KAAK,KAAK,GAAG;EACnB,IAAI,CAAC,IAAI,MAAM,OAAO,KAAK,IAAI,OAAO,IAAI,IAAI,MAAM,GAAG,GAAG;CAC3D;CACA,KAAK,OAAO,GAAG,GAAG,KAAK;EACtB,MAAM,OAAO,KAAK,MAAM;EACxB,KAAK,MAAM,MAAM,MAAM,SAAS,QAAQ,GAAG,GAAX;GAC/B,KAAK;IACJ,IAAI,SAAS,IAAI,CAAC,GAAG,KAAK,IAAI,MAAM,GAAG,MAAM,IAAI,GAAG,GAAG;IACvD;GACD,KAAK;IACJ,IAAI,CAAC,KAAK,WAAW,GAAG,GAAG,GAAG,KAAK,IAAI,MAAM,GAAG,MAAM,IAAI,GAAG,GAAG;IAChE;GACD,KAAK;IACJ,IAAI,CAAC,KAAK,WAAW,GAAG,GAAG,KAAK,GAAG,GAAG,KAAK,CAAC,GAAG,KAAK,IAAI,MAAM,GAAG,MAAM,IAAI,GAAG,GAAG;IACjF;GACD,KAAK,QAAQ,IAAI,CAAC,KAAK,WAAW,GAAG,GAAG,GAAG,KAAK,IAAI,MAAM,IAAI,IAAI,GAAG,GAAG;EACzE;EACA,IAAI,CAAC,KAAK,WAAW,GAAG,GAAG,GAAG,KAAK,MAAM,OAAO,MAAM,MAAM;GAC3D,IAAI,IAAI,MAAM,MAAM;IACnB,KAAK,OAAO,MAAM,KAAK,IAAI,GAAG,GAAG;IACjC;GACD;GACA,MAAM,MAAM,KAAK,KAAK,IAAI,OAAO,GAAG,GAAG,KAAK;GAC5C,KAAK,OAAO,MAAM;IACjB,GAAG;IACH,KAAK,IAAI;IACT,OAAO;GACR,GAAG,IAAI,GAAG,GAAG;EACd;EACA,OAAO,KAAK,KAAK,IAAI;CACtB;AACD;AACA,MAAM,YAAY,UAAU;CAC3B,MAAM,MAAM,MAAM,IAAI,KAAK;CAC3B,IAAI,CAAC,MAAM,KAAK,QAAQ,OAAO;CAC/B,OAAO,GAAG,IAAI,GAAG,MAAM,KAAK,KAAK,MAAM,GAAG,EAAE,IAAI,GAAG,GAAG,SAAS,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG;AAC5F;AACA,MAAM,aAAa,KAAK;AACxB,IAAI,MAAM,MAAM;CACf;CACA,0BAA0B,IAAI,IAAI;CAClC,QAAQ;CACR;CACA;CACA;CACA;CACA,YAAY,OAAO,OAAO;EACzB,KAAK,SAAS;EACd,KAAK,OAAO,IAAI,IAAI,OAAO,OAAO,KAAK;EACvC,KAAK,UAAU,IAAI,IAAI,OAAO,MAAM,KAAK;CAC1C;CACA,MAAM,OAAO;EACZ,OAAO;GACN;GACA,OAAO,MAAM;GACb,MAAM,MAAM;GACZ,sBAAsB,IAAI,IAAI;EAC/B;CACD;CACA,QAAQ,OAAO;EACd,MAAM,MAAM,SAAS,KAAK;EAC1B,MAAM,QAAQ,KAAK,QAAQ,IAAI,GAAG;EAClC,IAAI,OAAO,OAAO;EAClB,IAAI,KAAK,QAAQ,YAAY,KAAK,OAAO;EACzC,MAAM,IAAI,KAAK,MAAM,KAAK;EAC1B,KAAK,QAAQ,IAAI,KAAK,CAAC;EACvB,KAAK,SAAS,IAAI,SAAS;EAC3B,OAAO;CACR;CACA,SAAS;EACR,KAAK,QAAQ,MAAM;EACnB,KAAK,QAAQ;EACb,KAAK,SAAS,KAAK;EACnB,KAAK,YAAY,KAAK;CACvB;CACA,MAAM,UAAU;EACf,IAAI,UAAU;GACb,IAAI,KAAK,WAAW,OAAO,KAAK;GAChC,MAAM,QAAQ,KAAK,QAAQ,MAAM;GACjC,KAAK,QAAQ,IAAI,OAAO,KAAK,QAAQ,GAAG,IAAI;GAC5C,OAAO,KAAK,YAAY,KAAK,MAAM,KAAK,QAAQ,KAAK,KAAK,CAAC;EAC5D;EACA,IAAI,KAAK,QAAQ,OAAO,KAAK;EAC7B,MAAM,QAAQ,KAAK,KAAK,MAAM;EAC9B,KAAK,KAAK,IAAI,OAAO,KAAK,QAAQ,GAAG,IAAI;EACzC,OAAO,KAAK,SAAS,KAAK,QAAQ,KAAK,KAAK,KAAK,KAAK,CAAC;CACxD;CACA,KAAK,GAAG,GAAG;EACV,MAAM,OAAO,EAAE,WAAW,CAAC;EAC3B,MAAM,QAAQ,OAAO,MAAM,KAAK,IAAI,EAAE,KAAK,IAAI,CAAC;EAChD,IAAI,OAAO,OAAO;EAClB,MAAM,IAAI,MAAM,KAAK,YAAY,KAAK,QAAQ,KAAK,QAAQ,KAAK,EAAE,OAAO,GAAG,GAAG,IAAI,CAAC,IAAI,KAAK,QAAQ,KAAK,KAAK,KAAK,EAAE,OAAO,GAAG,GAAG,IAAI,CAAC;EACxI,IAAI,OAAO,KAAK;GACf,IAAI,CAAC,EAAE,OAAO;IACb,EAAE,QAAQ,IAAI,MAAM,GAAG;IACvB,KAAK,SAAS;GACf;GACA,EAAE,MAAM,QAAQ;EACjB,OAAO,EAAE,KAAK,IAAI,GAAG,CAAC;EACtB,KAAK;EACL,OAAO;CACR;AACD;AACA,MAAM,UAAU,UAAU;CACzB,MAAM,QAAQ,CAAC;CACf,KAAK,IAAI,IAAI,OAAO,EAAE,MAAM,SAAS,IAAI,EAAE,MAAM;EAChD,IAAI,EAAE,MAAM,WAAW,EAAE,MAAM,OAAO,OAAO,KAAK;EAClD,MAAM,KAAK,CAAC;CACb;CACA,OAAO;AACR;AACA,MAAM,cAAc,OAAO,OAAO,OAAO,QAAQ;CAChD,IAAI,KAAK;CACT,IAAI,KAAK;CACT,IAAI,SAAS;CACb,IAAI,SAAS;CACb,OAAO,KAAK,KAAK;EAChB,MAAM,IAAI,MAAM;EAChB,IAAI,GAAG,MAAM,QAAQ;GACpB,SAAS;GACT,SAAS;GACT;EACD;EACA,MAAM,IAAI,MAAM;EAChB,IAAI,MAAM,EAAE,MAAM,SAAS,EAAE,MAAM,SAAS,SAAS,GAAG,CAAC,KAAK,EAAE,MAAM,WAAW,EAAE,GAAG,KAAK,CAAC,IAAI;GAC/F;GACA;GACA;EACD;EACA,IAAI,WAAW,IAAI,OAAO;EAC1B,KAAK,SAAS;EACd,KAAK,EAAE;CACR;CACA,OAAO,MAAM,GAAG,EAAE,MAAM,QAAQ;CAChC,OAAO,OAAO,MAAM;AACrB;AACA,MAAM,WAAW,UAAU;CAC1B,IAAI,MAAM;CACV,IAAI,MAAM;CACV,KAAK,MAAM,MAAM,OAAO;EACvB,MAAM,CAAC,IAAI,MAAM,YAAY,EAAE;EAC/B,OAAO;EACP,OAAO;CACR;CACA,OAAO,CAAC,KAAK,GAAG;AACjB;AACA,MAAM,eAAe,OAAO;CAC3B,IAAI,GAAG,MAAM,QAAQ,OAAO,CAAC,GAAG,QAAQ;CACxC,IAAI,GAAG,MAAM,OAAO,OAAO,CAAC,GAAG,CAAC;CAChC,IAAI,GAAG,SAAS,KAAK,OAAO,CAAC,GAAG,QAAQ;CACxC,MAAM,OAAO,GAAG,KAAK,IAAI,OAAO;CAChC,MAAM,MAAM,KAAK,IAAI,GAAG,KAAK,KAAK,MAAM,EAAE,EAAE,CAAC;CAC7C,MAAM,MAAM,KAAK,IAAI,GAAG,KAAK,KAAK,MAAM,EAAE,EAAE,CAAC;CAC7C,MAAM,OAAO,QAAQ,IAAI,IAAI;CAC7B,OAAO,GAAG,SAAS,MAAM,CAAC,KAAK,GAAG,IAAI,GAAG,SAAS,MAAM,CAAC,GAAG,GAAG,IAAI,GAAG,SAAS,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,IAAI;AAC5G;AACA,MAAM,YAAY,MAAM,OAAO,UAAU;CACxC,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK,IAAI,CAAC,SAAS,KAAK,IAAI,MAAM,QAAQ,EAAE,GAAG,OAAO;CACvF,OAAO;AACR;AACA,MAAM,mBAAmB;AACzB,MAAM,YAAY;AAClB,MAAM,cAAc,MAAM,UAAU,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI;AACvD,MAAM,WAAW,MAAM;CACtB,IAAI,EAAE,SAAS,GAAG,GAAG,MAAM,IAAI,MAAM,gDAAgD,CAAC;AACvF;AACA,IAAI,UAAU,MAAM;CACnB;CACA;CACA;CACA;CACA;CACA;CACA;CACA,eAAe;CACf;CACA;CACA,QAAQ;CACR,OAAO;CACP,OAAO;CACP,UAAU,CAAC;CACX,UAAU,CAAC;CACX;CACA;CACA,SAAS;CACT;CACA;CACA,YAAY,SAAS,UAAU,CAAC,GAAG;EAClC,IAAI,QAAQ,SAAS,GAAG,GAAG,MAAM,IAAI,MAAM,wDAAwD,OAAO;EAC1G,KAAK,UAAU;EACf,KAAK,UAAU;EACf,MAAM,EAAE,SAAS,OAAO,QAAQ,OAAO,WAAW,MAAM;EACxD,KAAK,QAAQ,MAAM,OAAO,QAAQ,KAAK,KAAK;EAC5C,MAAM,UAAU,eAAe,KAAK,OAAO;EAC3C,MAAM,OAAO,SAAS,SAAS,QAAQ,SAAS,SAAS,KAAK,KAAK;EACnE,IAAI,CAAC,SAAS,MAAM,MAAM,KAAK,IAAI,GAAG,GAAG,KAAK,QAAQ,IAAI;EAC1D,IAAI,KAAK,OAAO,QAAQ,UAAU,OAAO,KAAK,KAAK;EACnD,MAAM,CAAC,OAAO,QAAQ,QAAQ,OAAO,MAAM;EAC3C,KAAK,SAAS;EACd,KAAK,QAAQ;EACb,IAAI,MAAM,OAAO,OAAO,GAAG,MAAM,KAAK,GAAG;GACxC,KAAK,WAAW,MAAM,KAAK,OAAO,GAAG,EAAE,CAAC,CAAC,KAAK,EAAE;GAChD,KAAK,eAAe;EACrB,OAAO;GACN,MAAM,OAAO,OAAO,GAAG,MAAM,QAAQ,KAAK,IAAI,SAAS;IACtD,IAAI,GAAG;IACP,IAAI,OAAO,GAAG,EAAE;GACjB,IAAI,EAAE,IAAI,GAAG,GAAG;GAChB,KAAK,MAAM,MAAM,OAAO;IACvB,MAAM,IAAI,IAAI,EAAE;IAChB,IAAI,CAAC,GAAG;IACR,KAAK,QAAQ,KAAK,CAAC;GACpB;GACA,KAAK,IAAI,IAAI,MAAM,SAAS,GAAG,KAAK,GAAG,KAAK;IAC3C,MAAM,IAAI,IAAI,MAAM,EAAE;IACtB,IAAI,CAAC,GAAG;IACR,KAAK,QAAQ,QAAQ,CAAC;GACvB;GACA,KAAK,SAAS,CAAC,EAAE,KAAK,QAAQ,UAAU,KAAK,QAAQ;GACrD,IAAI,CAAC,QAAQ;IACZ,KAAK,aAAa,KAAK,QAAQ,KAAK,MAAM,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE;IACvD,KAAK,aAAa,KAAK,QAAQ,KAAK,MAAM,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE;GACxD;GACA,KAAK,UAAU,OAAO,KAAK,MAAM,CAAC,EAAE,MAAM,KAAK,QAAQ,QAAQ,CAAC,KAAK,QAAQ,UAAU,KAAK,CAAC;GAC7F,KAAK,QAAQ,CAAC,CAAC,KAAK,SAAS,OAAO,MAAM,EAAE,MAAM,UAAU,EAAE,MAAM,KAAK;GACzE,MAAM,CAAC,KAAK,OAAO,QAAQ,KAAK;GAChC,KAAK,OAAO;GACZ,KAAK,OAAO;EACb;CACD;CACA,KAAK,GAAG;EACP,IAAI,KAAK,OAAO;GACf,QAAQ,CAAC;GACT,OAAO,KAAK,MAAM,EAAE,UAAU,KAAK,KAAK,CAAC;EAC1C;EACA,IAAI,iBAAiB,KAAK,CAAC,GAAG;GAC7B,QAAQ,CAAC;GACT,OAAO,KAAK,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC;EAC5B;EACA,OAAO,KAAK,MAAM,GAAG,CAAC;CACvB;;;;;;;;;CASA,cAAc,GAAG;EAChB,OAAO,KAAK,MAAM,KAAK,QAAQ,EAAE,UAAU,KAAK,KAAK,IAAI,CAAC;CAC3D;CACA,MAAM,GAAG,OAAO;EACf,IAAI,KAAK,aAAa,KAAK,GAAG,OAAO,KAAK,gBAAgB,KAAK,eAAe,UAAU,KAAK,QAAQ,EAAA,CAAG,KAAK,CAAC,IAAI,MAAM,KAAK;EAC7H,MAAM,MAAM,KAAK;EACjB,MAAM,MAAM,KAAK;EACjB,IAAI,UAAU,KAAK,GAAG;GACrB,MAAM,OAAO,EAAE;GACf,MAAM,QAAQ,OAAO,KAAK;GAC1B,IAAI,OAAO,OAAO,QAAQ,KAAK,OAAO;GACtC,IAAI,QAAQ,OAAO,OAAO,KAAK,QAAQ,WAAW,CAAC;EACpD;EACA,IAAI,UAAU,KAAK,MAAM,MAAM,SAAS,OAAO,MAAM,SAAS,MAAM,OAAO;EAC3E,MAAM,SAAS,KAAK,QAAQ;EAC5B,IAAI,KAAK,QAAQ;GAChB,IAAI,KAAK,eAAe,KAAK,KAAK,KAAK,eAAe,KAAK,GACtD;QAAA,CAAC,EAAE,WAAW,KAAK,UAAU,KAAK,CAAC,EAAE,SAAS,KAAK,UAAU,GAAG,OAAO;GAAA,OACrE;IACN,UAAU,WAAW,CAAC;IACtB,MAAM,MAAM,MAAM,SAAS,KAAK,QAAQ;IACxC,IAAI,CAAC,SAAS,KAAK,SAAS,OAAO,CAAC,KAAK,CAAC,SAAS,KAAK,SAAS,OAAO,GAAG,GAAG,OAAO;GACtF;EACD;EACA,MAAM,WAAW,CAAC,KAAK,QAAQ,OAAO,EAAE,WAAW,GAAG;EACtD,IAAI,KAAK,SAAS;GACjB,IAAI,MAAM,OAAO,MAAM,MAAM,OAAO;GACpC,IAAI,YAAY,CAAC,QAAQ,OAAO;GAChC,IAAI,KAAK,OAAO,OAAO;GACvB,UAAU,WAAW,CAAC;GACtB,MAAM,MAAM,MAAM,SAAS,KAAK,QAAQ;GACxC,OAAO,WAAW,KAAK,SAAS,OAAO,QAAQ,GAAG;EACnD;EACA,UAAU,WAAW,CAAC;EACtB,IAAI,MAAM,OAAO,MAAM,MAAM;GAC5B,KAAK,WAAW,MAAM,KAAK,KAAK;GAChC,MAAM,MAAM,KAAK,aAAa,IAAI,IAAI,MAAM,OAAO,KAAK,MAAM;GAC9D,MAAM,QAAQ,IAAI,MAAM;GACxB,IAAI,IAAI,OAAO,KAAK,QAAQ,GAAG,IAAI;GACnC,IAAI,QAAQ,IAAI,KAAK,KAAK;GAC1B,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK,QAAQ,IAAI,KAAK,OAAO,MAAM,IAAI,GAAG,IAAI;GAChF,OAAO,MAAM;EACd;EACA,KAAK,WAAW,MAAM,KAAK,KAAK;EAChC,MAAM,MAAM,KAAK,SAAS,IAAI,IAAI,KAAK,QAAQ,KAAK,MAAM;EAC1D,IAAI,IAAI,IAAI,MAAM,QAAQ;EAC1B,MAAM,MAAM,UAAU;EACtB,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;GACtC,IAAI,EAAE,MAAM,OAAO;GACnB,MAAM,OAAO,MAAM,EAAE,WAAW,CAAC,IAAI,MAAM,EAAE,CAAC,WAAW,CAAC;GAC1D,IAAI,EAAE,QAAQ,SAAS,IAAI,KAAK,GAAG,MAAM,EAAE;EAC5C;EACA,OAAO,EAAE;CACV;;CAEA,WAAW;EACV,OAAO,KAAK,KAAK,MAAM;CACxB;AACD;AAEA,MAAM,qBAAqB;AAC3B,MAAM,sBAAsB,YAAY;CACvC,IAAI,OAAO,YAAY,UAAU,MAAM,IAAI,UAAU,iBAAiB;CACtE,IAAI,QAAQ,SAAS,oBAAoB,MAAM,IAAI,UAAU,qBAAqB;AACnF;;;;;;;;;;;;;AAcA,MAAM,UAAU,GAAG,EAAE,uBAAuB,OAAO,gBAAgB,UAAU,CAAC,MAAM;CACnF,IAAI,eAAe,OAAO,uBAAuB,EAAE,QAAQ,gBAAgB,MAAM,IAAI,EAAE,QAAQ,kBAAkB,MAAM;CACvH,OAAO,uBAAuB,EAAE,QAAQ,cAAc,MAAM,IAAI,EAAE,QAAQ,gBAAgB,MAAM;AACjG;;;;;;;;;;;;;;;;;;;;AAqBA,MAAM,YAAY,GAAG,EAAE,uBAAuB,OAAO,gBAAgB,SAAS,CAAC,MAAM;CACpF,IAAI,eAAe,OAAO,uBAAuB,EAAE,QAAQ,iBAAiB,IAAI,IAAI,EAAE,QAAQ,4BAA4B,MAAM,CAAC,CAAC,QAAQ,aAAa,IAAI;CAC3J,OAAO,uBAAuB,EAAE,QAAQ,mBAAmB,IAAI,IAAI,EAAE,QAAQ,8BAA8B,MAAM,CAAC,CAAC,QAAQ,eAAe,IAAI;AAC/I;AAEA,MAAM,aAAa,GAAG,SAAS,UAAU,CAAC,MAAM;CAC/C,mBAAmB,OAAO;CAC1B,IAAI,CAAC,QAAQ,aAAa,QAAQ,OAAO,CAAC,MAAM,KAAK,OAAO;CAC5D,OAAO,gBAAgB,SAAS,OAAO,CAAC,CAAC,MAAM,CAAC;AACjD;AACA,MAAM,wBAAwB,IAAI,IAAI;AACtC,MAAM,WAAW;AACjB,MAAM,mBAAmB,SAAS,YAAY;CAC7C,MAAM,MAAM,UAAU,OAAO,KAAK,UAAU,OAAO;CACnD,IAAI,KAAK,MAAM,IAAI,GAAG;CACtB,IAAI,IAAI,MAAM,OAAO,GAAG;MACnB;EACJ,KAAK,IAAI,UAAU,SAAS,EAAE,GAAG,QAAQ,CAAC;EAC1C,IAAI,MAAM,QAAQ,UAAU,MAAM,OAAO,MAAM,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK;CACnE;CACA,MAAM,IAAI,KAAK,EAAE;CACjB,OAAO;AACR;;AAEA,MAAM,kBAAkB,OAAO,YAAY,YAAY,UAAU,QAAQ,KAAK,kCAAkC,QAAQ,WAAW;AACnI,MAAM,OAAO;CACZ,OAAO,EAAE,KAAK,KAAK;CACnB,OAAO,EAAE,KAAK,IAAI;AACnB;AACA,UAAU,MAAM,oBAAoB,UAAU,KAAK,MAAM,MAAM,KAAK,MAAM;AAC1E,MAAM,WAAW,OAAO,aAAa;AACrC,UAAU,WAAW;AACrB,MAAM,UAAU,SAAS,UAAU,CAAC,OAAO,MAAM,UAAU,GAAG,SAAS,OAAO;AAC9E,UAAU,SAAS;AACnB,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,OAAO,OAAO,CAAC,GAAG,GAAG,CAAC;AACjD,MAAM,YAAY,QAAQ;CACzB,IAAI,CAAC,OAAO,OAAO,QAAQ,YAAY,CAAC,OAAO,KAAK,GAAG,CAAC,CAAC,QAAQ,OAAO;CACxE,MAAM,OAAO;CACb,MAAM,KAAK,GAAG,SAAS,UAAU,CAAC,MAAM,KAAK,GAAG,SAAS,IAAI,KAAK,OAAO,CAAC;CAC1E,OAAO,OAAO,OAAO,GAAG;EACvB,WAAW,MAAM,kBAAkB,KAAK,UAAU;GACjD,YAAY,SAAS,UAAU,CAAC,GAAG;IAClC,MAAM,SAAS,IAAI,KAAK,OAAO,CAAC;GACjC;GACA,OAAO,SAAS,SAAS;IACxB,OAAO,KAAK,SAAS,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC;GACzC;EACD;EACA,WAAW,GAAG,UAAU,CAAC,MAAM,KAAK,SAAS,GAAG,IAAI,KAAK,OAAO,CAAC;EACjE,SAAS,GAAG,UAAU,CAAC,MAAM,KAAK,OAAO,GAAG,IAAI,KAAK,OAAO,CAAC;EAC7D,SAAS,SAAS,UAAU,CAAC,MAAM,KAAK,OAAO,SAAS,IAAI,KAAK,OAAO,CAAC;EACzE,WAAW,YAAY,KAAK,SAAS,IAAI,KAAK,OAAO,CAAC;EACtD,cAAc,SAAS,UAAU,CAAC,MAAM,KAAK,YAAY,SAAS,IAAI,KAAK,OAAO,CAAC;EACnF,QAAQ,MAAM,SAAS,UAAU,CAAC,MAAM,KAAK,MAAM,MAAM,SAAS,IAAI,KAAK,OAAO,CAAC;EACnF,KAAK,KAAK;EACV;CACD,CAAC;AACF;AACA,UAAU,WAAW;AACrB,MAAM,eAAe,SAAS,UAAU,CAAC,MAAM;CAC9C,mBAAmB,OAAO;CAC1B,IAAI,QAAQ,WAAW,CAAC,mBAAmB,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO;CACzE,OAAO,OAAO,SAAS,EAAE,KAAK,QAAQ,eAAe,CAAC;AACvD;AACA,UAAU,cAAc;AACxB,MAAM,SAAS,MAAM,SAAS,UAAU,CAAC,MAAM;CAC9C,MAAM,KAAK,IAAI,UAAU,SAAS,OAAO;CACzC,OAAO,KAAK,QAAQ,MAAM,GAAG,MAAM,CAAC,CAAC;CACrC,IAAI,GAAG,QAAQ,UAAU,CAAC,KAAK,QAAQ,KAAK,KAAK,OAAO;CACxD,OAAO;AACR;AACA,UAAU,QAAQ;AAClB,MAAM,YAAY;AAClB,MAAM,YAAY,SAAS,UAAU;CACpC,IAAI,IAAI,QAAQ;CAChB,IAAI,QAAQ,OAAO,CAAC,MAAM,OAAO,QAAQ,OAAO,CAAC,MAAM,KAAK;CAC5D,IAAI,WAAW;CACf,OAAO,IAAI,QAAQ,QAAQ,KAAK;EAC/B,MAAM,IAAI,QAAQ,OAAO,CAAC;EAC1B,IAAI,MAAM,OAAO,UAAU,OAAO;EAClC,WAAW;EACX,IAAI,MAAM,MAAM;CACjB;CACA,OAAO;AACR;AACA,MAAM,WAAW,SAAS,UAAU;CACnC,IAAI,CAAC,UAAU,YAAY,SAAS,YAAY,QAAQ,OAAO;CAC/D,IAAI,MAAM;CACV,KAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;EACxC,MAAM,IAAI,QAAQ,OAAO,CAAC;EAC1B,IAAI,MAAM,MAAM,OAAO,QAAQ,OAAO,EAAE,CAAC,KAAK;OACzC,IAAI,MAAM,OAAO,MAAM,KAAK;OAC5B,IAAI,MAAM,KAAK;GACnB,MAAM,QAAQ,SAAS,SAAS,CAAC;GACjC,IAAI,UAAU,IAAI;IACjB,OAAO;IACP;GACD;GACA,IAAI,OAAO,QAAQ,MAAM,IAAI,GAAG,KAAK;GACrC,IAAI,KAAK,WAAW,IAAI,GAAG,OAAO,KAAK,MAAM,CAAC;GAC9C,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,WAAW,KAAK,KAAK,SAAS,QAAQ,OAAO,IAAI,CAAC,CAAC,GAAG;GACpE,OAAO;GACP,IAAI;EACL,OAAO,IAAI,CAAC,SAAS,MAAM,SAAS,CAAC,KAAK,QAAQ,OAAO,IAAI,CAAC,MAAM,OAAO,QAAQ,SAAS,KAAK,IAAI,CAAC,GAAG;OACpG,OAAO;CACb;CACA,OAAO;AACR;AACA,MAAM,WAAW,YAAY;CAC5B,IAAI,eAAe,KAAK,OAAO,KAAK,QAAQ,SAAS,IAAI,GAAG,OAAO;CACnE,IAAI,QAAQ;CACZ,KAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;EACxC,MAAM,IAAI,QAAQ,OAAO,CAAC;EAC1B,IAAI,MAAM,MACL;OAAA,EAAE,MAAM,QAAQ,QAAQ,OAAO;EAAA,OAC7B,IAAI,MAAM,KAAK;GACrB,MAAM,QAAQ,SAAS,SAAS,CAAC;GACjC,IAAI,UAAU,IAAI,IAAI;EACvB,OAAO,IAAI,QAAQ,SAAS,CAAC,KAAK,QAAQ,OAAO,IAAI,CAAC,MAAM,KAAK;GAChE;GACA;EACD,OAAO,IAAI,MAAM,KACZ;OAAA,CAAC,SAAS,OAAO;EAAA,OACf,IAAI,MAAM,OAAO,CAAC,OAAO,OAAO;CACxC;CACA,OAAO,CAAC;AACT;AACA,IAAI;AACJ,IAAI;AACJ,MAAM,gBAAgB,GAAG,MAAM,OAAO,MAAM,WAAW,MAAM,IAAI,MAAM,MAAM,EAAE,cAAc,CAAC;AAC9F,MAAM,YAAY,GAAG,MAAM,WAAW,MAAM,cAAc,aAAa,GAAG,IAAI,IAAI,YAAY,SAAS,KAAK,KAAK,aAAa,GAAG,IAAI,IAAI,YAAY;AACrJ,MAAM,UAAU,MAAM,MAAM,OAAO,MAAM;AACzC,MAAM,WAAW,MAAM,OAAO,MAAM,YAAY,YAAY,KAAK,CAAC;AAClE,MAAM,aAAa,MAAM,OAAO,MAAM,YAAY,SAAS,KAAK,CAAC;AACjE,MAAM,WAAW,MAAM;CACtB,IAAI,EAAE,OAAO,MAAM,EAAE,OAAO,IAAI,OAAO;CACvC,MAAM,IAAI,EAAE,OAAO,MAAM,IAAI,UAAU,EAAE,EAAE,IAAI,IAAI;CACnD,MAAM,OAAO,EAAE;CACf,MAAM,QAAQ,EAAE,IAAI;CACpB,OAAO,MAAM,MAAM,SAAS,KAAK,KAAK,SAAS,MAAM,SAAS,YAAY,UAAU,KAAK,KAAK,UAAU,MAAM,UAAU,WAAW,IAAI;AACxI;AACA,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,OAAO,CAAC,EAAE,WAAW,GAAG;AACpE,MAAM,cAAc,GAAG,OAAO,KAAK,KAAK,QAAQ;CAC/C,KAAK,IAAI,IAAI,OAAO,IAAI,MAAM;EAC7B,IAAI,EAAE,WAAW,CAAC,MAAM,IAAI;GAC3B,IAAI,CAAC,KAAK,OAAO;GACjB,MAAM,IAAI,EAAE,WAAW,IAAI,CAAC,MAAM,KAAK,IAAI,IAAI,IAAI;GACnD,IAAI,KAAK,OAAO,MAAM,EAAE,WAAW,CAAC,GAAG,GAAG,GAAG,OAAO;EACrD;EACA,MAAM,IAAI,QAAQ,GAAG,GAAG,GAAG;EAC3B,IAAI,MAAM,IAAI,OAAO;EACrB,IAAI,IAAI;EACR,OAAO,IAAI,OAAO,MAAM,EAAE,WAAW,CAAC,GAAG,GAAG,GAAG;CAChD;CACA,OAAO;AACR;AACA,MAAM,SAAS,GAAG,QAAQ,QAAQ,MAAM,MAAM,KAAK,QAAQ,OAAO,MAAM,KAAK,MAAM,MAAM,MAAM;AAC/F,MAAM,WAAW,GAAG,MAAM,QAAQ;CACjC,IAAI,QAAQ,QAAQ,OAAO,EAAE,QAAQ,KAAK,IAAI;CAC9C,MAAM,IAAI,EAAE,QAAQ,KAAK,IAAI;CAC7B,MAAM,IAAI,EAAE,QAAQ,MAAM,IAAI;CAC9B,OAAO,MAAM,KAAK,IAAI,MAAM,KAAK,IAAI,KAAK,IAAI,GAAG,CAAC;AACnD;AACA,MAAM,WAAW,GAAG,MAAM,QAAQ,QAAQ,SAAS,EAAE,YAAY,KAAK,IAAI,IAAI,KAAK,IAAI,EAAE,YAAY,KAAK,IAAI,GAAG,EAAE,YAAY,MAAM,IAAI,CAAC;AAC1I,MAAM,UAAU,CAAC;AACjB,IAAI,YAAY,MAAM;CACrB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA,YAAY,CAAC;CACb,UAAU,CAAC;CACX,WAAW,CAAC;CACZ,4BAA4B,IAAI,IAAI;CACpC,WAAW;CACX,iCAAiC,IAAI,QAAQ;CAC7C,YAAY,SAAS,UAAU,CAAC,GAAG;EAClC,mBAAmB,OAAO;EAC1B,UAAU,WAAW,CAAC;EACtB,KAAK,UAAU;EACf,KAAK,uBAAuB,QAAQ,wBAAwB;EAC5D,KAAK,UAAU;EACf,KAAK,WAAW,QAAQ,YAAY;EACpC,KAAK,YAAY,KAAK,aAAa;EACnC,MAAM,MAAM;EACZ,KAAK,uBAAuB,CAAC,CAAC,QAAQ,wBAAwB,QAAQ,SAAS;EAC/E,IAAI,KAAK,sBAAsB,KAAK,UAAU,KAAK,QAAQ,QAAQ,OAAO,GAAG;EAC7E,KAAK,0BAA0B,CAAC,CAAC,QAAQ;EACzC,KAAK,SAAS;EACd,KAAK,WAAW,CAAC,CAAC,QAAQ;EAC1B,KAAK,UAAU;EACf,KAAK,QAAQ;EACb,KAAK,UAAU,CAAC,CAAC,QAAQ;EACzB,KAAK,SAAS,CAAC,CAAC,KAAK,QAAQ;EAC7B,KAAK,qBAAqB,QAAQ,uBAAuB,KAAK,IAAI,QAAQ,qBAAqB,CAAC,EAAE,KAAK,aAAa,KAAK;EACzH,KAAK,UAAU,CAAC;EAChB,KAAK,YAAY,CAAC;EAClB,KAAK,MAAM,CAAC;EACZ,KAAK,YAAY,CAAC,KAAK;EACvB,KAAK,WAAW,QAAQ,qBAAqB,MAAM;EACnD,MAAM,IAAI,QAAQ;EAClB,KAAK,QAAQ,MAAM,OAAO,QAAQ,KAAK,KAAK;EAC5C,KAAK,KAAK;EACV,MAAM,SAAS,KAAK,IAAI,KAAK,QAAQ,KAAK,WAAW,GAAG,CAAC;EACzD,KAAK,WAAW,KAAK,IAAI,KAAK,KAAK,MAAM,KAAK,aAAa,IAAI,SAAS,IAAI,OAAO,EAAE;EACrF,KAAK,YAAY,KAAK,IAAI,KAAK,KAAK,MAAM;GACzC,MAAM,MAAM,KAAK,SAAS,KAAK,IAAI,SAAS,IAAI,IAAI;GACpD,MAAM,OAAO,IAAI,MAAM,OAAO,KAAK,GAAG,GAAG,CAAC,CAAC,QAAQ,MAAM,OAAO,MAAM,YAAY,CAAC,CAAC,CAAC;GACrF,OAAO,CAAC,GAAG,IAAI,IAAI,IAAI,CAAC;EACzB,CAAC;EACD,KAAK,gBAAgB,KAAK,UAAU,MAAM,MAAM,EAAE,MAAM;EACxD,KAAK,UAAU,KAAK,IAAI,KAAK,KAAK,MAAM;GACvC,MAAM,CAAC,IAAI,IAAI,MAAM;GACrB,IAAI,KAAK,SAAS,MAAM,IAAI,WAAW,GAClC;QAAA,OAAO,YAAY,OAAO,UAAU,OAAO;GAAA;GAEhD,IAAI,KAAK,SAAS,MAAM,QAAQ,aAAa,IAAI,WAAW,KAAK,OAAO,YAAY,OAAO,IAAI,OAAO;GACtG,IAAI,CAAC,KAAK,aAAa,OAAO,OAAO,IAAI,OAAO,KAAK;GACrD,IAAI,IAAI,WAAW,KAAK,OAAO,YAAY,OAAO,YAAY,OAAO,YAAY,OAAO,MAAM,KAAK,uBAAuB,GAAG,OAAO;GACpI,IAAI,IAAI,WAAW,KAAK,OAAO,YAAY,OAAO,YAAY,OAAO,IAAI,OAAO;EACjF,CAAC;CACF;CACA,MAAM,GAAG;EACR,OAAO,KAAK,QAAQ,EAAE,UAAU,KAAK,KAAK,IAAI;CAC/C;CACA,WAAW,KAAK;EACf,IAAI,CAAC,KAAK,WAAW,OAAO;EAC5B,IAAI,QAAQ,IAAI,EAAE,GAAG,OAAO;EAC5B,IAAI,IAAI,OAAO,MAAM,IAAI,OAAO,MAAM,IAAI,OAAO,OAAO,QAAQ,IAAI,EAAE,GAAG,OAAO;EAChF,MAAM,IAAI,QAAQ,GAAG;EACrB,OAAO,MAAM,KAAK,KAAK,IAAI;CAC5B;CACA,WAAW;EACV,IAAI,KAAK,QAAQ,iBAAiB,KAAK,IAAI,SAAS,GAAG,OAAO;EAC9D,KAAK,MAAM,WAAW,KAAK,KAAK,KAAK,MAAM,QAAQ,SAAS,IAAI,OAAO,SAAS,UAAU,OAAO;EACjG,OAAO;CACR;CACA,OAAO;EACN,MAAM,UAAU,KAAK;EACrB,MAAM,UAAU,KAAK;EACrB,IAAI,CAAC,QAAQ,aAAa,QAAQ,OAAO,CAAC,MAAM,KAAK;GACpD,KAAK,UAAU;GACf;EACD;EACA,IAAI,CAAC,SAAS;GACb,KAAK,QAAQ;GACb;EACD;EACA,KAAK,YAAY;EACjB,KAAK,UAAU,CAAC,GAAG,IAAI,IAAI,KAAK,YAAY,CAAC,CAAC;EAC9C,MAAM,eAAe,KAAK,QAAQ,KAAK,MAAM,KAAK,YAAY,CAAC,CAAC;EAChE,KAAK,YAAY,KAAK,WAAW,YAAY;EAC7C,KAAK,WAAW;EAChB,IAAI,MAAM,KAAK,UAAU,KAAK,GAAG,GAAG,OAAO;GAC1C,IAAI,KAAK,aAAa,KAAK,oBAAoB;IAC9C,MAAM,IAAI,EAAE,OAAO,OAAO,UAAU,EAAE,EAAE,IAAI,IAAI;IAChD,MAAM,QAAQ,EAAE,OAAO,MAAM,EAAE,OAAO,OAAO,EAAE,OAAO,OAAO,CAAC,UAAU,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,OAAO,MAAM,CAAC,UAAU,KAAK,CAAC,CAAC;IACpI,MAAM,UAAU,WAAW,KAAK,EAAE,EAAE;IACpC,IAAI,OAAO,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,MAAM,KAAK,MAAM,CAAC,CAAC,GAAG,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,OAAO,KAAK,MAAM,EAAE,CAAC,CAAC;SACnG,IAAI,SAAS,OAAO,CAAC,KAAK,MAAM,EAAE,EAAE,GAAG,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,OAAO,KAAK,MAAM,EAAE,CAAC,CAAC;GACtF;GACA,OAAO,EAAE,KAAK,OAAO,KAAK,MAAM,EAAE,CAAC;EACpC,CAAC;EACD,KAAK,MAAM,IAAI,QAAQ,MAAM,EAAE,QAAQ,KAAK,MAAM,EAAE;EACpD,IAAI,KAAK,WAAW,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,IAAI,QAAQ,KAAK;GAC7D,MAAM,IAAI,KAAK,IAAI;GACnB,IAAI,EAAE,OAAO,MAAM,EAAE,OAAO,MAAM,KAAK,UAAU,EAAE,CAAC,OAAO,QAAQ,QAAQ,EAAE,EAAE,KAAK,UAAU,KAAK,UAAU,EAAE,CAAC,EAAE,IAAI;IACrH,IAAI,UAAU,KAAK,UAAU,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK;IAC5C,EAAE,KAAK;GACR;EACD;EACA,IAAI,CAAC,QAAQ,OAAO,KAAK,UAAU;EACnC,KAAK,WAAW;EAChB,KAAK,IAAI,SAAS,KAAK,MAAM;GAC5B,KAAK,IAAI,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK,IAAI,IAAI,OAAO,SAAS,IAAI,KAAK,KAAK,MAAM,KAAK,UAAU,EAAE,CAAC,EAAE;EACtG,CAAC;CACF;CACA,YAAY;EACX,IAAI,SAAS;EACb,OAAO,QAAQ;GACd,SAAS;GACT,MAAM,MAAM,KAAK,IAAI,GAAG,GAAG,KAAK,IAAI,KAAK,MAAM,EAAE,MAAM,CAAC;GACxD,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,KAAK;IAC7B,MAAM,yBAAyB,IAAI,IAAI;IACvC,KAAK,IAAI,SAAS,KAAK,MAAM;KAC5B,IAAI,EAAE,IAAI,cAAc,WAAW,IAAI,OAAO,YAAY,CAAC,QAAQ,KAAK,UAAU,EAAE,CAAC,EAAE,GAAG;KAC1F,MAAM,QAAQ,CAAC,GAAG,KAAK,UAAU,EAAE;KACnC,MAAM,KAAK;KACX,MAAM,MAAM,GAAG,IAAI,OAAO,GAAG,MAAM,KAAK,GAAG;KAC3C,MAAM,IAAI,OAAO,IAAI,GAAG;KACxB,IAAI,GAAG,EAAE,KAAK,CAAC;UACV,OAAO,IAAI,KAAK,CAAC,CAAC,CAAC;IACzB,CAAC;IACD,MAAM,uBAAuB,IAAI,IAAI;IACrC,KAAK,MAAM,KAAK,OAAO,OAAO,GAAG;KAChC,IAAI,EAAE,SAAS,GAAG;KAClB,MAAM,CAAC,OAAO,GAAG,QAAQ;KACzB,MAAM,OAAO,KAAK,EAAE,KAAK,MAAM,KAAK,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,GAAG,EAAE;KAC/D,KAAK,UAAU,MAAM,CAAC,KAAK;KAC3B,KAAK,IAAI,MAAM,CAAC,KAAK,KAAK,MAAM,IAAI;KACpC,KAAK,MAAM,KAAK,MAAM,KAAK,IAAI,CAAC;IACjC;IACA,IAAI,KAAK,MAAM;KACd,SAAS;KACT,KAAK,MAAM,KAAK,IAAI,QAAQ,GAAG,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC;KACjD,KAAK,YAAY,KAAK,UAAU,QAAQ,GAAG,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC;IAC9D;GACD;EACD;CACD;CACA,WAAW,WAAW;EACrB,IAAI,KAAK,QAAQ,YACX;QAAA,MAAM,WAAW,WAAW,KAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK,IAAI,QAAQ,OAAO,MAAM,QAAQ,KAAK;EAAA;EAEjH,MAAM,EAAE,oBAAoB,MAAM,KAAK;EACvC,IAAI,qBAAqB,GAAG;GAC3B,YAAY,KAAK,qBAAqB,SAAS;GAC/C,YAAY,KAAK,sBAAsB,SAAS;EACjD,OAAO,IAAI,qBAAqB,GAAG,YAAY,KAAK,iBAAiB,SAAS;OACzE,YAAY,KAAK,0BAA0B,SAAS;EACzD,OAAO;CACR;CACA,0BAA0B,WAAW;EACpC,OAAO,UAAU,KAAK,UAAU;GAC/B,IAAI,KAAK;GACT,OAAO,QAAQ,KAAK,MAAM,QAAQ,MAAM,KAAK,CAAC,IAAI;IACjD,IAAI,IAAI;IACR,OAAO,MAAM,IAAI,OAAO,MAAM;IAC9B,IAAI,MAAM,IAAI,MAAM,OAAO,IAAI,IAAI,EAAE;GACtC;GACA,OAAO;EACR,CAAC;CACF;CACA,iBAAiB,WAAW;EAC3B,OAAO,UAAU,KAAK,UAAU;GAC/B,MAAM,OAAO,KAAK,WAAW,KAAK,IAAI;GACtC,QAAQ,MAAM,QAAQ,KAAK,SAAS;IACnC,MAAM,OAAO,IAAI,IAAI,SAAS;IAC9B,IAAI,SAAS,QAAQ,SAAS,MAAM,OAAO;IAC3C,IAAI,SAAS,MACR;SAAA,IAAI,SAAS,QAAQ,QAAQ,SAAS,QAAQ,SAAS,OAAO,SAAS,MAAM;MAChF,IAAI,IAAI;MACR,OAAO;KACR;;IAED,IAAI,KAAK,IAAI;IACb,OAAO;GACR,GAAG,CAAC,CAAC;GACL,OAAO,MAAM,WAAW,IAAI,CAAC,EAAE,IAAI;EACpC,CAAC;CACF;CACA,UAAU,GAAG;EACZ,MAAM,MAAM,CAAC,KAAK,aAAa,CAAC,EAAE,SAAS,IAAI,IAAI,MAAM,EAAE,SAAS,GAAG,IAAI,SAAS;EACpF,IAAI,OAAO,KAAK,YAAY,IAAI;EAChC,IAAI,OAAO;EACX,IAAI,YAAY;EAChB,IAAI;EACJ,IAAI,YAAY;EAChB,MAAM,MAAM,CAAC,CAAC,KAAK,QAAQ;EAC3B,MAAM,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,IAAI,QAAQ,KAAK;GAC/C,MAAM,MAAM,KAAK,IAAI;GACrB,MAAM,IAAI,IAAI,IAAI,SAAS;GAC3B,IAAI,MAAM,SAAS,MAAM,KAAK,SAAS,MAAM,MAAM;GACnD,IAAI,OAAO,SAAS,GAAG;IACtB,MAAM,IAAI,QAAQ,GAAG,EAAE,QAAQ,GAAG;IAClC,YAAY,IAAI;IAChB,OAAO,EAAE,MAAM,SAAS;IACxB,IAAI,SAAS,MAAM,KAAK,GAAG;KAC1B,IAAI,IAAI;KACR,OAAO,IAAI,KAAK,MAAM,EAAE,WAAW,IAAI,CAAC,GAAG,GAAG,GAAG;KACjD,YAAY,MAAM,IAAI,IAAI,QAAQ,GAAG,IAAI,GAAG,GAAG,IAAI;KACnD,OAAO,EAAE,MAAM,WAAW,CAAC;IAC5B;IACA,MAAM,WAAW,KAAK,YAAY,OAAO,IAAI,KAAK,SAAS,MAAM,SAAS,KAAK,KAAK,OAAO,IAAI;IAC/F,OAAO,WAAW,KAAK;IACvB,MAAM,CAAC;GACR;GACA,IAAI,YAAY;GAChB,IAAI,OAAO,OAAO,MAAM,UAAU;IACjC,YAAY,SAAS,GAAG,MAAM,WAAW,MAAM,SAAS;IACxD,IAAI,cAAc,IAAI;GACvB;GACA,IAAI,KAAK,eACH;SAAA,MAAM,KAAK,KAAK,UAAU,IAAI,IAAI,CAAC,EAAE,SAAS,CAAC,GAAG,SAAS;GAAA;GAEjE,IAAI,OAAO,OAAO,MAAM,UAAU;IACjC,YAAY,SAAS,GAAG,MAAM,WAAW,MAAM,SAAS;IACxD,IAAI,cAAc,IAAI;GACvB;GACA,MAAM,QAAQ,KAAK,QAAQ;GAC3B,IAAI,UAAU,UAAU,KAAK,OAAO;GACpC,IAAI,UAAU,UAAU,KAAK;IAC5B,IAAI,KAAK,WAAW,WAAW,GAAG,GAAG,WAAW,MAAM,GAAG,GAAG,OAAO;IACnE,IAAI,CAAC,WAAW,GAAG,GAAG,WAAW,KAAK,GAAG,GAAG,OAAO;IACnD;GACD;GACA,IAAI,UAAU,SAAS,UAAU,QAAQ;IACxC,MAAM,IAAI,KAAK,MAAM,GAAG,KAAK,UAAU,QAAQ,KAAK,GAAG;IACvD,IAAI,MAAM,MAAM,OAAO;IACvB;GACD;GACA,OAAO;EACR;EACA,OAAO;CACR;CACA,YAAY,MAAM,KAAK,OAAO;EAC7B,MAAM,MAAM,CAAC,CAAC,KAAK,QAAQ;EAC3B,MAAM,IAAI,KAAK;EACf,IAAI,UAAU,QAAQ;GACrB,IAAI,IAAI,KAAK,CAAC,aAAa,IAAI,IAAI,KAAK,EAAE,GAAG,OAAO;GACpD,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK,IAAI,CAAC,SAAS,KAAK,IAAI,GAAG,GAAG,OAAO;GAChE,OAAO;EACR;EACA,MAAM,IAAI,IAAI;EACd,IAAI,UAAU,QAAQ;GACrB,IAAI,IAAI,IAAI;GACZ,IAAI,CAAC,aAAa,GAAG,KAAK,EAAE,GACvB;QAAA,KAAK,OAAO,MAAM,MAAM,KAAK,CAAC,aAAa,GAAG,KAAK,EAAE,EAAE,GAAG,OAAO;GAAA;GAEtE,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK,IAAI,CAAC,SAAS,KAAK,IAAI,GAAG,GAAG,OAAO;GAChE,OAAO;EACR;EACA,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK;GAC3B,IAAI,aAAa,GAAG,KAAK,EAAE,KAAK,IAAI,IAAI,GAAG;IAC1C,IAAI,IAAI,IAAI;IACZ,OAAO,IAAI,KAAK,SAAS,KAAK,IAAI,GAAG,GAAG;IACxC,IAAI,MAAM,GAAG,OAAO;GACrB;GACA,IAAI,CAAC,SAAS,KAAK,IAAI,GAAG,GAAG,OAAO;EACrC;EACA,OAAO;CACR;CACA,MAAM,GAAG,KAAK,MAAM,KAAK,KAAK;EAC7B,IAAI,KAAK,WAAW,WAAW,GAAG,GAAG,EAAE,QAAQ,MAAM,GAAG,GAAG,OAAO;EAClE,MAAM,IAAI,IAAI,OAAO,IAAI;EACzB,IAAI,IAAI;EACR,KAAK,IAAI,IAAI,QAAQ,GAAG,GAAG,GAAG,GAAG,MAAM,IAAI,IAAI,QAAQ,GAAG,GAAG,GAAG,GAAG;GAClE,IAAI,OAAO,IAAI;GACf,OAAO,OAAO,EAAE,UAAU,MAAM,EAAE,WAAW,IAAI,GAAG,GAAG,GAAG;GAC1D,KAAK,OAAO,MAAM,WAAW,IAAI,MAAM,EAAE,UAAU,EAAE,WAAW,GAAG,CAAC,IAAI,IAAI,KAAK,EAAE,cAAc,EAAE,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,WAAW,GAAG,MAAM,EAAE,QAAQ,KAAK,GAAG,GAAG,OAAO;GACrK,IAAI,QAAQ,WAAW,GAAG,GAAG,MAAM,KAAK,GAAG,GAAG,OAAO;GACrD,IAAI;EACL;EACA,OAAO;CACR;CACA,aAAa,GAAG;EACf,MAAM,OAAO;EACb,OAAO,MAAM,MAAM,KAAK,KAAK,cAAc,KAAK,aAAa,KAAK,4BAA4B,KAAK,2BAA2B,KAAK,cAAc,KAAK,QAAQ,OAAO,KAAK;CAC3K;CACA,OAAO,GAAG;EACT,MAAM,EAAE,WAAW,4BAA4B;EAC/C,IAAI,QAAQ,KAAK,YAAY,YAAY,EAAE,MAAM,IAAI,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC;EACpE,MAAM,YAAY,KAAK;EACvB,IAAI,WAAW,QAAQ,MAAM,KAAK,MAAM,EAAE,UAAU,SAAS,CAAC;EAC9D,YAAY;GACX;GACA;GACA;GACA;GACA;EACD;EACA,OAAO;CACR;CACA,sBAAsB,MAAM;EAC3B,MAAM,QAAQ,CAAC,GAAG,IAAI;EACtB,IAAI,eAAe;EACnB,GAAG;GACF,eAAe;GACf,IAAI,CAAC,KAAK,yBAAyB;IAClC,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,SAAS,GAAG,KAAK;KAC1C,MAAM,IAAI,MAAM;KAChB,IAAI,MAAM,KAAK,MAAM,MAAM,MAAM,OAAO,IAAI;KAC5C,IAAI,MAAM,OAAO,MAAM,IAAI;MAC1B,eAAe;MACf,MAAM,OAAO,GAAG,CAAC;MACjB;KACD;IACD;IACA,IAAI,MAAM,OAAO,OAAO,MAAM,WAAW,MAAM,MAAM,OAAO,OAAO,MAAM,OAAO,KAAK;KACpF,eAAe;KACf,MAAM,IAAI;IACX;GACD;GACA,MAAM,OAAO,KAAK,WAAW,KAAK,IAAI;GACtC,IAAI,KAAK;GACT,OAAO,QAAQ,KAAK,MAAM,QAAQ,MAAM,KAAK,CAAC,IAAI;IACjD,MAAM,IAAI,MAAM,KAAK;IACrB,IAAI,KAAK,MAAM,OAAO,MAAM,QAAQ,MAAM,MAAM;KAC/C,eAAe;KACf,MAAM,OAAO,KAAK,GAAG,CAAC;KACtB,KAAK,KAAK,IAAI,KAAK,GAAG,IAAI;IAC3B;GACD;EACD,SAAS;EACT,OAAO,MAAM,WAAW,IAAI,CAAC,EAAE,IAAI;CACpC;CACA,qBAAqB,WAAW;EAC/B,MAAM,EAAE,iBAAiB,QAAQ,KAAK;EACtC,IAAI,eAAe;EACnB,GAAG;GACF,eAAe;GACf,KAAK,IAAI,SAAS,WAAW;IAC5B,IAAI,KAAK;IACT,OAAO,QAAQ,KAAK,MAAM,QAAQ,MAAM,KAAK,CAAC,IAAI;KACjD,IAAI,MAAM;KACV,OAAO,MAAM,MAAM,OAAO,MAAM;KAChC,IAAI,MAAM,IAAI,MAAM,OAAO,KAAK,GAAG,MAAM,EAAE;KAC3C,IAAI,OAAO,MAAM,KAAK;KACtB,MAAM,IAAI,MAAM,KAAK;KACrB,MAAM,KAAK,MAAM,KAAK;KACtB,IAAI,SAAS,MAAM;KACnB,IAAI,CAAC,KAAK,MAAM,OAAO,MAAM,QAAQ,CAAC,MAAM,OAAO,OAAO,OAAO,QAAQ,UAAU,UAAU,gBAAgB;KAC7G,eAAe;KACf,MAAM,OAAO,IAAI,CAAC;KAClB,MAAM,QAAQ,MAAM,MAAM,CAAC;KAC3B,MAAM,MAAM;KACZ,UAAU,KAAK,KAAK;KACpB;IACD;IACA,IAAI,CAAC,KAAK,yBAAyB;KAClC,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,SAAS,GAAG,KAAK;MAC1C,MAAM,IAAI,MAAM;MAChB,IAAI,MAAM,KAAK,MAAM,MAAM,MAAM,OAAO,IAAI;MAC5C,IAAI,MAAM,OAAO,MAAM,IAAI;OAC1B,eAAe;OACf,MAAM,OAAO,GAAG,CAAC;OACjB;MACD;KACD;KACA,IAAI,MAAM,OAAO,OAAO,MAAM,WAAW,MAAM,MAAM,OAAO,OAAO,MAAM,OAAO,KAAK;MACpF,eAAe;MACf,MAAM,IAAI;KACX;IACD;IACA,MAAM,OAAO,KAAK,WAAW,KAAK,IAAI;IACtC,IAAI,KAAK;IACT,OAAO,QAAQ,KAAK,MAAM,QAAQ,MAAM,KAAK,CAAC,IAAI;KACjD,MAAM,IAAI,MAAM,KAAK;KACrB,IAAI,KAAK,MAAM,OAAO,MAAM,QAAQ,MAAM,MAAM;MAC/C,eAAe;MACf,MAAM,QAAQ,OAAO,KAAK,MAAM,KAAK,OAAO,OAAO,CAAC,GAAG,IAAI,CAAC;MAC5D,MAAM,OAAO,KAAK,GAAG,GAAG,GAAG,KAAK;MAChC,IAAI,MAAM,WAAW,GAAG,MAAM,KAAK,EAAE;MACrC,KAAK,KAAK,IAAI,KAAK,GAAG,IAAI;KAC3B;IACD;GACD;EACD,SAAS;EACT,OAAO;CACR;CACA,sBAAsB,WAAW;EAChC,IAAI,UAAU,SAAS,KAAK,OAAO;EACnC,KAAK,IAAI,IAAI,GAAG,IAAI,UAAU,SAAS,GAAG,KAAK,KAAK,IAAI,IAAI,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;GAC7F,MAAM,UAAU,KAAK,WAAW,UAAU,IAAI,UAAU,IAAI,CAAC,KAAK,uBAAuB;GACzF,IAAI,SAAS;IACZ,UAAU,KAAK,CAAC;IAChB,UAAU,KAAK;IACf;GACD;EACD;EACA,OAAO,UAAU,QAAQ,OAAO,GAAG,MAAM;CAC1C;CACA,WAAW,GAAG,GAAG,eAAe,OAAO;EACtC,IAAI,KAAK;EACT,IAAI,KAAK;EACT,IAAI,SAAS,CAAC;EACd,IAAI,QAAQ;EACZ,OAAO,KAAK,EAAE,UAAU,KAAK,EAAE,QAAQ,IAAI,EAAE,QAAQ,EAAE,KAAK;GAC3D,OAAO,KAAK,UAAU,MAAM,EAAE,MAAM,EAAE,GAAG;GACzC;GACA;EACD,OAAO,IAAI,gBAAgB,EAAE,QAAQ,QAAQ,EAAE,QAAQ,EAAE,KAAK,IAAI;GACjE,OAAO,KAAK,EAAE,GAAG;GACjB;EACD,OAAO,IAAI,gBAAgB,EAAE,QAAQ,QAAQ,EAAE,QAAQ,EAAE,KAAK,IAAI;GACjE,OAAO,KAAK,EAAE,GAAG;GACjB;EACD,OAAO,IAAI,EAAE,QAAQ,OAAO,EAAE,QAAQ,KAAK,QAAQ,OAAO,CAAC,EAAE,GAAG,CAAC,WAAW,GAAG,MAAM,EAAE,QAAQ,MAAM;GACpG,IAAI,UAAU,KAAK,OAAO;GAC1B,QAAQ;GACR,OAAO,KAAK,EAAE,GAAG;GACjB;GACA;EACD,OAAO,IAAI,EAAE,QAAQ,OAAO,EAAE,QAAQ,KAAK,QAAQ,OAAO,CAAC,EAAE,GAAG,CAAC,WAAW,GAAG,MAAM,EAAE,QAAQ,MAAM;GACpG,IAAI,UAAU,KAAK,OAAO;GAC1B,QAAQ;GACR,OAAO,KAAK,EAAE,GAAG;GACjB;GACA;EACD,OAAO,OAAO;EACd,OAAO,EAAE,WAAW,EAAE,UAAU;CACjC;CACA,cAAc;EACb,IAAI,KAAK,UAAU;EACnB,MAAM,UAAU,KAAK;EACrB,IAAI,SAAS;EACb,IAAI,eAAe;EACnB,KAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,UAAU,QAAQ,OAAO,CAAC,MAAM,KAAK,KAAK;GACrE,SAAS,CAAC;GACV;EACD;EACA,IAAI,cAAc,KAAK,UAAU,QAAQ,MAAM,YAAY;EAC3D,KAAK,SAAS;CACf;CACA,UAAU,MAAM,UAAU,SAAS,SAAS;EAC3C,IAAI,iBAAiB;EACrB,IAAI,oBAAoB;EACxB,MAAM,KAAK,KAAK,YAAY,QAAQ,QAAQ,IAAI;EAChD,MAAM,KAAK,OAAO,KAAK,KAAK,QAAQ,OAAO;EAC3C,IAAI,OAAO,IAAI;GACd,MAAM,OAAO,QAAQ;GACrB,MAAM,QAAQ,QAAQ,KAAK;GAC3B,IAAI,OAAO,SAAS,YAAY,OAAO,UAAU,UAAU;IAC1D,iBAAiB;IACjB,oBAAoB;GACrB,OAAO,IAAI,SAAS,GAAG,CAAC,YAAY,MAAM,KAAK,YAAY,KAAK,SAAS,KAAK,EAAE,CAAC,YAAY,MAAM,MAAM,YAAY,GAAG;IACvH,iBAAiB,KAAK;IACtB,oBAAoB,KAAK;GAC1B;EACD,OAAO,IAAI,KAAK,WAAW;GAC1B,MAAM,YAAY,OAAO,KAAK,OAAO,YAAY,YAAY,KAAK,KAAK,EAAE;GACzE,MAAM,UAAU,CAAC,aAAa,KAAK,OAAO,MAAM,KAAK,OAAO,MAAM,KAAK,OAAO,OAAO,YAAY,KAAK,KAAK,EAAE;GAC7G,MAAM,eAAe,OAAO,QAAQ,OAAO,YAAY,YAAY,KAAK,QAAQ,EAAE;GAClF,MAAM,aAAa,CAAC,gBAAgB,QAAQ,OAAO,MAAM,QAAQ,OAAO,MAAM,QAAQ,OAAO,OAAO,OAAO,QAAQ,OAAO,YAAY,YAAY,KAAK,QAAQ,EAAE;GACjK,MAAM,MAAM,UAAU,IAAI,YAAY,IAAI,KAAK;GAC/C,MAAM,MAAM,aAAa,IAAI,eAAe,IAAI,KAAK;GACrD,IAAI,OAAO,QAAQ,YAAY,OAAO,QAAQ,UAAU;IACvD,MAAM,CAAC,IAAI,MAAM,CAAC,KAAK,MAAM,QAAQ,IAAI;IACzC,IAAI,GAAG,YAAY,MAAM,GAAG,YAAY,GAAG;KAC1C,oBAAoB,MAAM;KAC1B,iBAAiB,MAAM;IACxB;GACD;EACD;EACA,OAAO;EACP,IAAI,QAAQ,SAAS,QAAQ,GAAG,OAAO,KAAK,eAAe,MAAM,SAAS,SAAS,gBAAgB,iBAAiB;EACpH,OAAO,KAAK,UAAU,MAAM,SAAS,SAAS,gBAAgB,iBAAiB;CAChF;CACA,eAAe,MAAM,SAAS,SAAS,WAAW,cAAc;EAC/D,MAAM,EAAE,MAAM,MAAM,MAAM,aAAa,KAAK,kBAAkB,SAAS,SAAS,YAAY;EAC5F,IAAI,KAAK,QAAQ;GAChB,MAAM,UAAU,YAAY,KAAK;GACjC,IAAI,CAAC,KAAK,UAAU,MAAM,MAAM,SAAS,WAAW,GAAG,OAAO,GAAG,OAAO;GACxE,aAAa,KAAK;GAClB,gBAAgB,KAAK;EACtB;EACA,IAAI,gBAAgB;EACpB,IAAI,KAAK,QAAQ;GAChB,IAAI,KAAK,SAAS,YAAY,KAAK,QAAQ,OAAO;GAClD,IAAI,YAAY,KAAK,SAAS,KAAK;GACnC,IAAI,KAAK,UAAU,MAAM,MAAM,SAAS,WAAW,CAAC,GAAG,gBAAgB,KAAK;QACvE;IACJ,IAAI,KAAK,KAAK,SAAS,OAAO,MAAM,YAAY,KAAK,WAAW,KAAK,QAAQ,OAAO;IACpF;IACA,IAAI,CAAC,KAAK,UAAU,MAAM,MAAM,SAAS,WAAW,CAAC,GAAG,OAAO;IAC/D,gBAAgB,KAAK,SAAS;GAC/B;EACD;EACA,IAAI,CAAC,KAAK,QAAQ;GACjB,IAAI,UAAU,CAAC,CAAC;GAChB,KAAK,IAAI,IAAI,WAAW,IAAI,KAAK,SAAS,eAAe,KAAK;IAC7D,MAAM,IAAI,OAAO,KAAK,EAAE;IACxB,UAAU;IACV,IAAI,MAAM,OAAO,MAAM,QAAQ,CAAC,KAAK,QAAQ,OAAO,EAAE,WAAW,GAAG,GAAG,OAAO;GAC/E;GACA,OAAO,WAAW;EACnB;EACA,OAAO,CAAC,CAAC,KAAK,2BAA2B,MAAM,UAAU,KAAK,SAAS,eAAe,WAAW,GAAG,SAAS,GAAG,CAAC,CAAC,+BAA+B,IAAI,IAAI,CAAC;CAC3J;CACA,kBAAkB,SAAS,SAAS,cAAc;EACjD,IAAI,UAAU,KAAK,eAAe,IAAI,OAAO;EAC7C,IAAI,CAAC,SAAS;GACb,UAAU,CAAC;GACX,KAAK,eAAe,IAAI,SAAS,OAAO;EACzC;EACA,MAAM,MAAM,eAAe,KAAK,UAAU,IAAI;EAC9C,MAAM,QAAQ,QAAQ;EACtB,IAAI,OAAO,OAAO;EAClB,MAAM,UAAU,QAAQ,QAAQ,UAAU,YAAY;EACtD,MAAM,SAAS,QAAQ,YAAY,QAAQ;EAC3C,MAAM,OAAO,QAAQ,MAAM,cAAc,OAAO;EAChD,MAAM,OAAO,QAAQ,MAAM,UAAU,GAAG,UAAU,KAAK,IAAI,MAAM;EACjE,MAAM,OAAO,UAAU,CAAC,IAAI,QAAQ,MAAM,SAAS,CAAC;EACpD,MAAM,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;EACzB,IAAI,UAAU,SAAS;EACvB,IAAI,aAAa;EACjB,MAAM,iBAAiB,CAAC,CAAC;EACzB,KAAK,MAAM,KAAK,MAAM,IAAI,MAAM,UAAU;GACzC,eAAe,KAAK,UAAU;GAC9B,UAAU,CAAC,CAAC,GAAG,CAAC;GAChB,SAAS,KAAK,OAAO;EACtB,OAAO;GACN,QAAQ,EAAE,CAAC,KAAK,CAAC;GACjB;EACD;EACA,SAAS,SAAS,GAAG,MAAM;GAC1B,EAAE,KAAK,aAAa,eAAe;EACpC,CAAC;EACD,MAAM,QAAQ;GACb;GACA;GACA;GACA;EACD;EACA,QAAQ,OAAO;EACf,OAAO;CACR;CACA,2BAA2B,MAAM,cAAc,YAAY,WAAW,WAAW,SAAS,eAAe,SAAS,OAAO;EACxH,MAAM,KAAK,aAAa;EACxB,IAAI,CAAC,IAAI;GACR,IAAI,SAAS,OAAO,aAAa,cAAc,cAAc,aAAa,KAAK,KAAK,eAAe;GACnG,KAAK,IAAI,IAAI,WAAW,IAAI,YAAY,KAAK;IAC5C,UAAU;IACV,MAAM,IAAI,KAAK;IACf,IAAI,MAAM,OAAO,MAAM,QAAQ,CAAC,KAAK,QAAQ,OAAO,EAAE,WAAW,GAAG,GAAG,OAAO;GAC/E;GACA,OAAO;EACR;EACA,MAAM,CAAC,MAAM,QAAQ;EACrB,MAAM,QAAQ,UAAU,aAAa,aAAa;EAClD,OAAO,aAAa,OAAO;GAC1B,MAAM,MAAM,aAAa,KAAK,SAAS,KAAK;GAC5C,IAAI,MAAM,IAAI,GAAG,GAAG,OAAO;GAC3B,MAAM,IAAI,GAAG;GACb,IAAI,KAAK,UAAU,MAAM,MAAM,SAAS,WAAW,GAAG,YAAY,KAAK,MAAM,KAAK,gBAAgB,KAAK,sBAAsB;IAC5H,MAAM,MAAM,KAAK,2BAA2B,MAAM,cAAc,YAAY,YAAY,KAAK,QAAQ,YAAY,GAAG,SAAS,gBAAgB,GAAG,SAAS,KAAK;IAC9J,IAAI,QAAQ,OAAO,OAAO;GAC3B;GACA,IAAI,cAAc,OAAO;GACzB,MAAM,IAAI,KAAK;GACf,IAAI,MAAM,OAAO,MAAM,QAAQ,CAAC,KAAK,QAAQ,OAAO,EAAE,WAAW,GAAG,GAAG,OAAO;GAC9E;EACD;EACA,OAAO,WAAW;CACnB;CACA,UAAU,MAAM,SAAS,SAAS,WAAW,cAAc,UAAU,KAAK,QAAQ;EACjF,IAAI;EACJ,IAAI;EACJ,IAAI;EACJ,IAAI;EACJ,KAAK,KAAK,WAAW,KAAK,cAAc,KAAK,KAAK,IAAI,SAAS,KAAK,MAAM,GAAG,KAAK,QAAQ,QAAQ,KAAK,MAAM,KAAK,IAAI,MAAM,MAAM;GACjI,IAAI,IAAI,QAAQ;GAChB,IAAI,IAAI,KAAK;;GAEb,IAAI,MAAM,SAAS,MAAM,UAAU,OAAO;;GAE1C,IAAI,CAAC,aAAa,GAAG,CAAC,GAAG,OAAO;EACjC;EACA,IAAI,OAAO,MAAM,OAAO,IAAI,OAAO;OAC9B,IAAI,OAAO,IAAI,OAAO;OACtB,IAAI,OAAO,IAAI,OAAO,OAAO,KAAK,KAAK,KAAK,QAAQ;OACpD,MAAM,IAAI,MAAM,MAAM;;CAE5B;CACA,cAAc;EACb,OAAO,YAAY,KAAK,SAAS,KAAK,OAAO;CAC9C;CACA,MAAM,SAAS;EACd,mBAAmB,OAAO;EAC1B,MAAM,UAAU,KAAK;EACrB,IAAI,YAAY,MAAM,OAAO;EAC7B,IAAI,YAAY,IAAI,OAAO;EAC3B,MAAM,EAAE,QAAQ,iBAAiB,QAAQ,OAAO,KAAK,cAAc;EACnE,MAAM,MAAM,QAAQ,SAAS,KAAK;EAClC,IAAI,QAAQ,KAAK,KAAK,EAAE,UAAU,CAAC,mBAAmB,QAAQ,YAAY,MAAM,QAAQ,YAAY,IAAI,OAAO,KAAK,MAAM,GAAG;EAC7H,IAAI,KAAK,UAAU,OAAO;EAC1B,IAAI,IAAI,KAAK,UAAU,IAAI,OAAO;EAClC,IAAI,CAAC,GAAG;GACP,IAAI,IAAI,QAAQ,SAAS;IACxB;IACA;IACA;IACA;GACD,CAAC;GACD,KAAK,UAAU,IAAI,SAAS,CAAC;EAC9B;EACA,OAAO;CACR;CACA,YAAY,GAAG;EACd,IAAI,KAAK,yBAAyB,OAAO,EAAE,MAAM,GAAG;OAC/C,IAAI,KAAK,aAAa,aAAa,KAAK,CAAC,GAAG,OAAO,CAAC,IAAI,GAAG,EAAE,MAAM,KAAK,CAAC;OACzE,OAAO,EAAE,MAAM,KAAK;CAC1B;CACA,MAAM,GAAG,UAAU,KAAK,SAAS;EAChC,IAAI,KAAK,SAAS,OAAO;EACzB,IAAI,KAAK,OAAO,OAAO,MAAM;EAC7B,IAAI,MAAM,OAAO,SAAS,OAAO;EACjC,MAAM,UAAU,KAAK;EACrB,IAAI,QAAQ,KAAK,aAAa,CAAC;EAC/B,IAAI,CAAC,OAAO;GACX,IAAI,CAAC,WAAW,CAAC,KAAK,UAAU,KAAK,aAAa,KAAK,kBAAkB,gBAAgB,GAAG;IAC3F,cAAc;IACd,MAAM,MAAM,KAAK,UAAU,CAAC;IAC5B,IAAI,QAAQ,MAAM,OAAO,QAAQ,aAAa,QAAQ,KAAK;IAC3D,IAAI,QAAQ,OAAO,OAAO,QAAQ,aAAa,OAAO,CAAC,KAAK;GAC7D;GACA,QAAQ,KAAK,OAAO,CAAC;EACtB;EACA,MAAM,KAAK,MAAM;EACjB,MAAM,WAAW,KAAK,UAAU,MAAM,aAAa,KAAK,sBAAsB,EAAE,IAAI;EACpF,MAAM,MAAM,KAAK;EACjB,IAAI,WAAW,GAAG,GAAG,SAAS;EAC9B,IAAI,CAAC,UAAU,KAAK,IAAI,IAAI,GAAG,SAAS,GAAG,CAAC,YAAY,KAAK,GAAG,KAAK,WAAW,GAAG;EACnF,KAAK,IAAI,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;GACpC,MAAM,UAAU,IAAI;GACpB,MAAM,QAAQ,UAAU,KAAK,IAAI,KAAK,QAAQ;GAC9C,IAAI,UAAU,SAAS,aAAa,QAAQ,IAAI,QAAQ,IAAI,QAAQ,KAAK,YAAY,UAAU,SAAS,KAAK,IAAI,QAAQ,aAAa,QAAQ,WAAW,IAAI,KAAK,UAAU,CAAC,QAAQ,GAAG,CAAC,QAAQ,GAAG,SAAS,OAAO,IAAI,KAAK,UAAU,IAAI,UAAU,SAAS,OAAO,GAAG;IACvQ,IAAI,QAAQ,YAAY,OAAO;IAC/B,OAAO,CAAC,KAAK;GACd;EACD;EACA,IAAI,QAAQ,YAAY,OAAO;EAC/B,OAAO,KAAK;CACb;CACA,OAAO,SAAS,KAAK;EACpB,OAAO,UAAU,SAAS,GAAG,CAAC,CAAC;CAChC;AACD;;AAEA,UAAU,YAAY;AACtB,UAAU,SAAS;AACnB,UAAU,WAAW;CAEkD,gCAAgB,SAAS,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2B1G,IAAI,mBAAmB,WAAW;EACjC,KAAK,eAAe;EACpB,KAAK,gBAAgB;EACrB,KAAK,kBAAkB;EACvB,KAAK,iBAAiB;EACtB,KAAK,wBAAwB;EAC7B,KAAK,eAAe;EACpB,KAAK,gBAAgB;CACtB;;;;;;CAMA,IAAI,cAAc;CAClB,IAAI,cAAc;CAClB,IAAI,aAAa;;;;;;;;;;CAUjB,iBAAiB,OAAO,SAAS,IAAI,MAAM;EAC1C,OAAO,CAAC,IAAI,IAAI;CACjB;;;;;;;;;;;;;;CAcA,iBAAiB,UAAU,YAAY,SAAS,OAAO,OAAO,gBAAgB,cAAc;EAC3F,IAAI,OAAO,gBAAgB,aAAa;GACvC,IAAI,KAAK,gBAAgB,GAAG,eAAe,OAAO;QAC7C,gCAAgC,IAAI,KAAK,EAAA,CAAG,QAAQ,IAAI,KAAK,eAAe;EAClF;EACA,IAAI,WAAW;EACf,IAAI,SAAS,QAAQ,SAAS,MAAM,MAAM,IAAI,MAAM,yBAAyB;EAC7E,IAAI,SAAS,OAAO;GACnB,IAAI,OAAO,OAAO,CAAC,IAAI,iBAAiB,KAAK,YAAY,KAAK,CAAC;GAC/D,OAAO,CAAC;EACT;EACA,IAAI,OAAO,kBAAkB,aAAa,iBAAiB;EAC3D,IAAI,aAAa;EACjB,IAAI,eAAe,KAAK,kBAAkB,OAAO,KAAK;EACtD,IAAI,eAAe,MAAM,UAAU,GAAG,YAAY;EAClD,QAAQ,MAAM,UAAU,YAAY;EACpC,QAAQ,MAAM,UAAU,YAAY;EACpC,eAAe,KAAK,kBAAkB,OAAO,KAAK;EAClD,IAAI,eAAe,MAAM,UAAU,MAAM,SAAS,YAAY;EAC9D,QAAQ,MAAM,UAAU,GAAG,MAAM,SAAS,YAAY;EACtD,QAAQ,MAAM,UAAU,GAAG,MAAM,SAAS,YAAY;EACtD,IAAI,QAAQ,KAAK,cAAc,OAAO,OAAO,YAAY,QAAQ;EACjE,IAAI,cAAc,MAAM,QAAQ,IAAI,iBAAiB,KAAK,YAAY,YAAY,CAAC;EACnF,IAAI,cAAc,MAAM,KAAK,IAAI,iBAAiB,KAAK,YAAY,YAAY,CAAC;EAChF,KAAK,kBAAkB,KAAK;EAC5B,OAAO;CACR;;;;;;;;;;;;;CAaA,iBAAiB,UAAU,gBAAgB,SAAS,OAAO,OAAO,YAAY,UAAU;EACvF,IAAI;EACJ,IAAI,CAAC,OAAO,OAAO,CAAC,IAAI,iBAAiB,KAAK,aAAa,KAAK,CAAC;EACjE,IAAI,CAAC,OAAO,OAAO,CAAC,IAAI,iBAAiB,KAAK,aAAa,KAAK,CAAC;EACjE,IAAI,WAAW,MAAM,SAAS,MAAM,SAAS,QAAQ;EACrD,IAAI,YAAY,MAAM,SAAS,MAAM,SAAS,QAAQ;EACtD,IAAI,IAAI,SAAS,QAAQ,SAAS;EAClC,IAAI,KAAK,IAAI;GACZ,QAAQ;IACP,IAAI,iBAAiB,KAAK,aAAa,SAAS,UAAU,GAAG,CAAC,CAAC;IAC/D,IAAI,iBAAiB,KAAK,YAAY,SAAS;IAC/C,IAAI,iBAAiB,KAAK,aAAa,SAAS,UAAU,IAAI,UAAU,MAAM,CAAC;GAChF;GACA,IAAI,MAAM,SAAS,MAAM,QAAQ,MAAM,EAAE,CAAC,KAAK,MAAM,EAAE,CAAC,KAAK;GAC7D,OAAO;EACR;EACA,IAAI,UAAU,UAAU,GAAG,OAAO,CAAC,IAAI,iBAAiB,KAAK,aAAa,KAAK,GAAG,IAAI,iBAAiB,KAAK,aAAa,KAAK,CAAC;EAC/H,IAAI,KAAK,KAAK,gBAAgB,OAAO,KAAK;EAC1C,IAAI,IAAI;GACP,IAAI,UAAU,GAAG;GACjB,IAAI,UAAU,GAAG;GACjB,IAAI,UAAU,GAAG;GACjB,IAAI,UAAU,GAAG;GACjB,IAAI,aAAa,GAAG;GACpB,IAAI,UAAU,KAAK,UAAU,SAAS,SAAS,YAAY,QAAQ;GACnE,IAAI,UAAU,KAAK,UAAU,SAAS,SAAS,YAAY,QAAQ;GACnE,OAAO,QAAQ,OAAO,CAAC,IAAI,iBAAiB,KAAK,YAAY,UAAU,CAAC,GAAG,OAAO;EACnF;EACA,IAAI,cAAc,MAAM,SAAS,OAAO,MAAM,SAAS,KAAK,OAAO,KAAK,eAAe,OAAO,OAAO,QAAQ;EAC7G,OAAO,KAAK,aAAa,OAAO,OAAO,QAAQ;CAChD;;;;;;;;;;;CAWA,iBAAiB,UAAU,iBAAiB,SAAS,OAAO,OAAO,UAAU;EAC5E,IAAI,IAAI,KAAK,mBAAmB,OAAO,KAAK;EAC5C,QAAQ,EAAE;EACV,QAAQ,EAAE;EACV,IAAI,YAAY,EAAE;EAClB,IAAI,QAAQ,KAAK,UAAU,OAAO,OAAO,OAAO,QAAQ;EACxD,KAAK,mBAAmB,OAAO,SAAS;EACxC,KAAK,qBAAqB,KAAK;EAC/B,MAAM,KAAK,IAAI,iBAAiB,KAAK,YAAY,EAAE,CAAC;EACpD,IAAI,UAAU;EACd,IAAI,eAAe;EACnB,IAAI,eAAe;EACnB,IAAI,cAAc;EAClB,IAAI,cAAc;EAClB,OAAO,UAAU,MAAM,QAAQ;GAC9B,QAAQ,MAAM,QAAQ,CAAC,IAAvB;IACC,KAAK;KACJ;KACA,eAAe,MAAM,QAAQ,CAAC;KAC9B;IACD,KAAK;KACJ;KACA,eAAe,MAAM,QAAQ,CAAC;KAC9B;IACD,KAAK;KACJ,IAAI,gBAAgB,KAAK,gBAAgB,GAAG;MAC3C,MAAM,OAAO,UAAU,eAAe,cAAc,eAAe,YAAY;MAC/E,UAAU,UAAU,eAAe;MACnC,IAAI,UAAU,KAAK,UAAU,aAAa,aAAa,OAAO,QAAQ;MACtE,KAAK,IAAI,IAAI,QAAQ,SAAS,GAAG,KAAK,GAAG,KAAK,MAAM,OAAO,SAAS,GAAG,QAAQ,EAAE;MACjF,UAAU,UAAU,QAAQ;KAC7B;KACA,eAAe;KACf,eAAe;KACf,cAAc;KACd,cAAc;GAChB;GACA;EACD;EACA,MAAM,IAAI;EACV,OAAO;CACR;;;;;;;;;;;CAWA,iBAAiB,UAAU,eAAe,SAAS,OAAO,OAAO,UAAU;EAC1E,IAAI,eAAe,MAAM;EACzB,IAAI,eAAe,MAAM;EACzB,IAAI,QAAQ,KAAK,MAAM,eAAe,gBAAgB,CAAC;EACvD,IAAI,WAAW;EACf,IAAI,WAAW,IAAI;EACnB,IAAI,KAAK,IAAI,MAAM,QAAQ;EAC3B,IAAI,KAAK,IAAI,MAAM,QAAQ;EAC3B,KAAK,IAAI,IAAI,GAAG,IAAI,UAAU,KAAK;GAClC,GAAG,KAAK;GACR,GAAG,KAAK;EACT;EACA,GAAG,WAAW,KAAK;EACnB,GAAG,WAAW,KAAK;EACnB,IAAI,QAAQ,eAAe;EAC3B,IAAI,QAAQ,QAAQ,KAAK;EACzB,IAAI,UAAU;EACd,IAAI,QAAQ;EACZ,IAAI,UAAU;EACd,IAAI,QAAQ;EACZ,KAAK,IAAI,IAAI,GAAG,IAAI,OAAO,KAAK;GAC/B,qBAAqB,IAAI,KAAK,EAAA,CAAG,QAAQ,IAAI,UAAU;GACvD,KAAK,IAAI,KAAK,CAAC,IAAI,SAAS,MAAM,IAAI,OAAO,MAAM,GAAG;IACrD,IAAI,YAAY,WAAW;IAC3B,IAAI;IACJ,IAAI,MAAM,CAAC,KAAK,MAAM,KAAK,GAAG,YAAY,KAAK,GAAG,YAAY,IAAI,KAAK,GAAG,YAAY;SACjF,KAAK,GAAG,YAAY,KAAK;IAC9B,IAAI,KAAK,KAAK;IACd,OAAO,KAAK,gBAAgB,KAAK,gBAAgB,MAAM,OAAO,EAAE,KAAK,MAAM,OAAO,EAAE,GAAG;KACtF;KACA;IACD;IACA,GAAG,aAAa;IAChB,IAAI,KAAK,cAAc,SAAS;SAC3B,IAAI,KAAK,cAAc,WAAW;SAClC,IAAI,OAAO;KACf,IAAI,YAAY,WAAW,QAAQ;KACnC,IAAI,aAAa,KAAK,YAAY,YAAY,GAAG,cAAc,IAAI;MAClE,IAAI,KAAK,eAAe,GAAG;MAC3B,IAAI,MAAM,IAAI,OAAO,KAAK,kBAAkB,OAAO,OAAO,IAAI,IAAI,QAAQ;KAC3E;IACD;GACD;GACA,KAAK,IAAI,KAAK,CAAC,IAAI,SAAS,MAAM,IAAI,OAAO,MAAM,GAAG;IACrD,IAAI,YAAY,WAAW;IAC3B,IAAI;IACJ,IAAI,MAAM,CAAC,KAAK,MAAM,KAAK,GAAG,YAAY,KAAK,GAAG,YAAY,IAAI,KAAK,GAAG,YAAY;SACjF,KAAK,GAAG,YAAY,KAAK;IAC9B,IAAI,KAAK,KAAK;IACd,OAAO,KAAK,gBAAgB,KAAK,gBAAgB,MAAM,OAAO,eAAe,KAAK,CAAC,KAAK,MAAM,OAAO,eAAe,KAAK,CAAC,GAAG;KAC5H;KACA;IACD;IACA,GAAG,aAAa;IAChB,IAAI,KAAK,cAAc,SAAS;SAC3B,IAAI,KAAK,cAAc,WAAW;SAClC,IAAI,CAAC,OAAO;KAChB,IAAI,YAAY,WAAW,QAAQ;KACnC,IAAI,aAAa,KAAK,YAAY,YAAY,GAAG,cAAc,IAAI;MAClE,IAAI,KAAK,GAAG;MACZ,IAAI,KAAK,WAAW,KAAK;MACzB,KAAK,eAAe;MACpB,IAAI,MAAM,IAAI,OAAO,KAAK,kBAAkB,OAAO,OAAO,IAAI,IAAI,QAAQ;KAC3E;IACD;GACD;EACD;EACA,OAAO,CAAC,IAAI,iBAAiB,KAAK,aAAa,KAAK,GAAG,IAAI,iBAAiB,KAAK,aAAa,KAAK,CAAC;CACrG;;;;;;;;;;;;CAYA,iBAAiB,UAAU,oBAAoB,SAAS,OAAO,OAAO,GAAG,GAAG,UAAU;EACrF,IAAI,SAAS,MAAM,UAAU,GAAG,CAAC;EACjC,IAAI,SAAS,MAAM,UAAU,GAAG,CAAC;EACjC,IAAI,SAAS,MAAM,UAAU,CAAC;EAC9B,IAAI,SAAS,MAAM,UAAU,CAAC;EAC9B,IAAI,QAAQ,KAAK,UAAU,QAAQ,QAAQ,OAAO,QAAQ;EAC1D,IAAI,SAAS,KAAK,UAAU,QAAQ,QAAQ,OAAO,QAAQ;EAC3D,OAAO,MAAM,OAAO,MAAM;CAC3B;;;;;;;;;;;;CAYA,iBAAiB,UAAU,qBAAqB,SAAS,OAAO,OAAO;EACtE,IAAI,YAAY,CAAC;EACjB,IAAI,WAAW,CAAC;EAChB,UAAU,KAAK;;;;;;;;;EASf,SAAS,wBAAwB,MAAM;GACtC,IAAI,QAAQ;GACZ,IAAI,YAAY;GAChB,IAAI,UAAU;GACd,IAAI,kBAAkB,UAAU;GAChC,OAAO,UAAU,KAAK,SAAS,GAAG;IACjC,UAAU,KAAK,QAAQ,MAAM,SAAS;IACtC,IAAI,WAAW,IAAI,UAAU,KAAK,SAAS;IAC3C,IAAI,OAAO,KAAK,UAAU,WAAW,UAAU,CAAC;IAChD,IAAI,SAAS,iBAAiB,SAAS,eAAe,IAAI,IAAI,SAAS,UAAU,KAAK,GAAG,SAAS,OAAO,aAAa,SAAS,KAAK;SAC/H;KACJ,IAAI,mBAAmB,UAAU;MAChC,OAAO,KAAK,UAAU,SAAS;MAC/B,UAAU,KAAK;KAChB;KACA,SAAS,OAAO,aAAa,eAAe;KAC5C,SAAS,QAAQ;KACjB,UAAU,qBAAqB;IAChC;IACA,YAAY,UAAU;GACvB;GACA,OAAO;EACR;EACA,IAAI,WAAW;EACf,IAAI,SAAS,wBAAwB,KAAK;EAC1C,WAAW;EACX,OAAO;GACN;GACA,QAAQ,wBAAwB,KAAK;GACrC;EACD;CACD;;;;;;;;CAQA,iBAAiB,UAAU,qBAAqB,SAAS,OAAO,WAAW;EAC1E,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;GACtC,IAAI,QAAQ,MAAM,EAAE,CAAC;GACrB,IAAI,OAAO,CAAC;GACZ,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK,KAAK,KAAK,UAAU,MAAM,WAAW,CAAC;GAC7E,MAAM,EAAE,CAAC,KAAK,KAAK,KAAK,EAAE;EAC3B;CACD;;;;;;;;CAQA,iBAAiB,UAAU,oBAAoB,SAAS,OAAO,OAAO;EACrE,IAAI,CAAC,SAAS,CAAC,SAAS,MAAM,OAAO,CAAC,KAAK,MAAM,OAAO,CAAC,GAAG,OAAO;EACnE,IAAI,aAAa;EACjB,IAAI,aAAa,KAAK,IAAI,MAAM,QAAQ,MAAM,MAAM;EACpD,IAAI,aAAa;EACjB,IAAI,eAAe;EACnB,OAAO,aAAa,YAAY;GAC/B,IAAI,MAAM,UAAU,cAAc,UAAU,KAAK,MAAM,UAAU,cAAc,UAAU,GAAG;IAC3F,aAAa;IACb,eAAe;GAChB,OAAO,aAAa;GACpB,aAAa,KAAK,OAAO,aAAa,cAAc,IAAI,UAAU;EACnE;EACA,OAAO;CACR;;;;;;;CAOA,iBAAiB,UAAU,oBAAoB,SAAS,OAAO,OAAO;EACrE,IAAI,CAAC,SAAS,CAAC,SAAS,MAAM,OAAO,MAAM,SAAS,CAAC,KAAK,MAAM,OAAO,MAAM,SAAS,CAAC,GAAG,OAAO;EACjG,IAAI,aAAa;EACjB,IAAI,aAAa,KAAK,IAAI,MAAM,QAAQ,MAAM,MAAM;EACpD,IAAI,aAAa;EACjB,IAAI,aAAa;EACjB,OAAO,aAAa,YAAY;GAC/B,IAAI,MAAM,UAAU,MAAM,SAAS,YAAY,MAAM,SAAS,UAAU,KAAK,MAAM,UAAU,MAAM,SAAS,YAAY,MAAM,SAAS,UAAU,GAAG;IACnJ,aAAa;IACb,aAAa;GACd,OAAO,aAAa;GACpB,aAAa,KAAK,OAAO,aAAa,cAAc,IAAI,UAAU;EACnE;EACA,OAAO;CACR;;;;;;;;;CASA,iBAAiB,UAAU,sBAAsB,SAAS,OAAO,OAAO;EACvE,IAAI,eAAe,MAAM;EACzB,IAAI,eAAe,MAAM;EACzB,IAAI,gBAAgB,KAAK,gBAAgB,GAAG,OAAO;EACnD,IAAI,eAAe,cAAc,QAAQ,MAAM,UAAU,eAAe,YAAY;OAC/E,IAAI,eAAe,cAAc,QAAQ,MAAM,UAAU,GAAG,YAAY;EAC7E,IAAI,cAAc,KAAK,IAAI,cAAc,YAAY;EACrD,IAAI,SAAS,OAAO,OAAO;EAC3B,IAAI,OAAO;EACX,IAAI,SAAS;EACb,OAAO,MAAM;GACZ,IAAI,UAAU,MAAM,UAAU,cAAc,MAAM;GAClD,IAAI,QAAQ,MAAM,QAAQ,OAAO;GACjC,IAAI,SAAS,IAAI,OAAO;GACxB,UAAU;GACV,IAAI,SAAS,KAAK,MAAM,UAAU,cAAc,MAAM,KAAK,MAAM,UAAU,GAAG,MAAM,GAAG;IACtF,OAAO;IACP;GACD;EACD;CACD;;;;;;;;;;;;CAYA,iBAAiB,UAAU,kBAAkB,SAAS,OAAO,OAAO;EACnE,IAAI,KAAK,gBAAgB,GAAG,OAAO;EACnC,IAAI,WAAW,MAAM,SAAS,MAAM,SAAS,QAAQ;EACrD,IAAI,YAAY,MAAM,SAAS,MAAM,SAAS,QAAQ;EACtD,IAAI,SAAS,SAAS,KAAK,UAAU,SAAS,IAAI,SAAS,QAAQ,OAAO;EAC1E,IAAI,MAAM;;;;;;;;;;;;;EAaV,SAAS,iBAAiB,UAAU,WAAW,GAAG;GACjD,IAAI,OAAO,SAAS,UAAU,GAAG,IAAI,KAAK,MAAM,SAAS,SAAS,CAAC,CAAC;GACpE,IAAI,IAAI;GACR,IAAI,cAAc;GAClB,IAAI,iBAAiB,iBAAiB,kBAAkB;GACxD,QAAQ,IAAI,UAAU,QAAQ,MAAM,IAAI,CAAC,MAAM,IAAI;IAClD,IAAI,eAAe,IAAI,kBAAkB,SAAS,UAAU,CAAC,GAAG,UAAU,UAAU,CAAC,CAAC;IACtF,IAAI,eAAe,IAAI,kBAAkB,SAAS,UAAU,GAAG,CAAC,GAAG,UAAU,UAAU,GAAG,CAAC,CAAC;IAC5F,IAAI,YAAY,SAAS,eAAe,cAAc;KACrD,cAAc,UAAU,UAAU,IAAI,cAAc,CAAC,IAAI,UAAU,UAAU,GAAG,IAAI,YAAY;KAChG,kBAAkB,SAAS,UAAU,GAAG,IAAI,YAAY;KACxD,kBAAkB,SAAS,UAAU,IAAI,YAAY;KACrD,mBAAmB,UAAU,UAAU,GAAG,IAAI,YAAY;KAC1D,mBAAmB,UAAU,UAAU,IAAI,YAAY;IACxD;GACD;GACA,IAAI,YAAY,SAAS,KAAK,SAAS,QAAQ,OAAO;IACrD;IACA;IACA;IACA;IACA;GACD;QACK,OAAO;EACb;EACA,IAAI,MAAM,iBAAiB,UAAU,WAAW,KAAK,KAAK,SAAS,SAAS,CAAC,CAAC;EAC9E,IAAI,MAAM,iBAAiB,UAAU,WAAW,KAAK,KAAK,SAAS,SAAS,CAAC,CAAC;EAC9E,IAAI;EACJ,IAAI,CAAC,OAAO,CAAC,KAAK,OAAO;OACpB,IAAI,CAAC,KAAK,KAAK;OACf,IAAI,CAAC,KAAK,KAAK;OACf,KAAK,IAAI,EAAE,CAAC,SAAS,IAAI,EAAE,CAAC,SAAS,MAAM;EAChD,IAAI,SAAS,SAAS,SAAS;EAC/B,IAAI,MAAM,SAAS,MAAM,QAAQ;GAChC,UAAU,GAAG;GACb,UAAU,GAAG;GACb,UAAU,GAAG;GACb,UAAU,GAAG;EACd,OAAO;GACN,UAAU,GAAG;GACb,UAAU,GAAG;GACb,UAAU,GAAG;GACb,UAAU,GAAG;EACd;EACA,IAAI,aAAa,GAAG;EACpB,OAAO;GACN;GACA;GACA;GACA;GACA;EACD;CACD;;;;;CAKA,iBAAiB,UAAU,uBAAuB,SAAS,OAAO;EACjE,IAAI,UAAU;EACd,IAAI,aAAa,CAAC;EAClB,IAAI,mBAAmB;;EAEvB,IAAI,eAAe;EACnB,IAAI,UAAU;EACd,IAAI,qBAAqB;EACzB,IAAI,oBAAoB;EACxB,IAAI,qBAAqB;EACzB,IAAI,oBAAoB;EACxB,OAAO,UAAU,MAAM,QAAQ;GAC9B,IAAI,MAAM,QAAQ,CAAC,MAAM,YAAY;IACpC,WAAW,sBAAsB;IACjC,qBAAqB;IACrB,oBAAoB;IACpB,qBAAqB;IACrB,oBAAoB;IACpB,eAAe,MAAM,QAAQ,CAAC;GAC/B,OAAO;IACN,IAAI,MAAM,QAAQ,CAAC,MAAM,aAAa,sBAAsB,MAAM,QAAQ,CAAC,EAAE,CAAC;SACzE,qBAAqB,MAAM,QAAQ,CAAC,EAAE,CAAC;IAC5C,IAAI,gBAAgB,aAAa,UAAU,KAAK,IAAI,oBAAoB,iBAAiB,KAAK,aAAa,UAAU,KAAK,IAAI,oBAAoB,iBAAiB,GAAG;KACrK,MAAM,OAAO,WAAW,mBAAmB,IAAI,GAAG,IAAI,iBAAiB,KAAK,aAAa,YAAY,CAAC;KACtG,MAAM,WAAW,mBAAmB,KAAK,EAAE,CAAC,KAAK;KACjD;KACA;KACA,UAAU,mBAAmB,IAAI,WAAW,mBAAmB,KAAK;KACpE,qBAAqB;KACrB,oBAAoB;KACpB,qBAAqB;KACrB,oBAAoB;KACpB,eAAe;KACf,UAAU;IACX;GACD;GACA;EACD;EACA,IAAI,SAAS,KAAK,kBAAkB,KAAK;EACzC,KAAK,6BAA6B,KAAK;EACvC,UAAU;EACV,OAAO,UAAU,MAAM,QAAQ;GAC9B,IAAI,MAAM,UAAU,EAAE,CAAC,MAAM,eAAe,MAAM,QAAQ,CAAC,MAAM,aAAa;IAC7E,IAAI,WAAW,MAAM,UAAU,EAAE,CAAC;IAClC,IAAI,YAAY,MAAM,QAAQ,CAAC;IAC/B,IAAI,kBAAkB,KAAK,oBAAoB,UAAU,SAAS;IAClE,IAAI,kBAAkB,KAAK,oBAAoB,WAAW,QAAQ;IAClE,IAAI,mBAAmB,iBAClB;SAAA,mBAAmB,SAAS,SAAS,KAAK,mBAAmB,UAAU,SAAS,GAAG;MACtF,MAAM,OAAO,SAAS,GAAG,IAAI,iBAAiB,KAAK,YAAY,UAAU,UAAU,GAAG,eAAe,CAAC,CAAC;MACvG,MAAM,UAAU,EAAE,CAAC,KAAK,SAAS,UAAU,GAAG,SAAS,SAAS,eAAe;MAC/E,MAAM,UAAU,EAAE,CAAC,KAAK,UAAU,UAAU,eAAe;MAC3D;KACD;WACM,IAAI,mBAAmB,SAAS,SAAS,KAAK,mBAAmB,UAAU,SAAS,GAAG;KAC7F,MAAM,OAAO,SAAS,GAAG,IAAI,iBAAiB,KAAK,YAAY,SAAS,UAAU,GAAG,eAAe,CAAC,CAAC;KACtG,MAAM,UAAU,EAAE,CAAC,KAAK;KACxB,MAAM,UAAU,EAAE,CAAC,KAAK,UAAU,UAAU,GAAG,UAAU,SAAS,eAAe;KACjF,MAAM,UAAU,EAAE,CAAC,KAAK;KACxB,MAAM,UAAU,EAAE,CAAC,KAAK,SAAS,UAAU,eAAe;KAC1D;IACD;IACA;GACD;GACA;EACD;CACD;;;;;;;CAOA,iBAAiB,UAAU,+BAA+B,SAAS,OAAO;;;;;;;;;;;EAWzE,SAAS,2BAA2B,KAAK,KAAK;GAC7C,IAAI,CAAC,OAAO,CAAC,KAAK,OAAO;GACzB,IAAI,QAAQ,IAAI,OAAO,IAAI,SAAS,CAAC;GACrC,IAAI,QAAQ,IAAI,OAAO,CAAC;GACxB,IAAI,mBAAmB,MAAM,MAAM,iBAAiB,qBAAqB;GACzE,IAAI,mBAAmB,MAAM,MAAM,iBAAiB,qBAAqB;GACzE,IAAI,cAAc,oBAAoB,MAAM,MAAM,iBAAiB,gBAAgB;GACnF,IAAI,cAAc,oBAAoB,MAAM,MAAM,iBAAiB,gBAAgB;GACnF,IAAI,aAAa,eAAe,MAAM,MAAM,iBAAiB,eAAe;GAC5E,IAAI,aAAa,eAAe,MAAM,MAAM,iBAAiB,eAAe;GAC5E,IAAI,aAAa,cAAc,IAAI,MAAM,iBAAiB,kBAAkB;GAC5E,IAAI,aAAa,cAAc,IAAI,MAAM,iBAAiB,oBAAoB;GAC9E,IAAI,cAAc,YAAY,OAAO;QAChC,IAAI,cAAc,YAAY,OAAO;QACrC,IAAI,oBAAoB,CAAC,eAAe,aAAa,OAAO;QAC5D,IAAI,eAAe,aAAa,OAAO;QACvC,IAAI,oBAAoB,kBAAkB,OAAO;GACtD,OAAO;EACR;EACA,IAAI,UAAU;EACd,OAAO,UAAU,MAAM,SAAS,GAAG;GAClC,IAAI,MAAM,UAAU,EAAE,CAAC,MAAM,cAAc,MAAM,UAAU,EAAE,CAAC,MAAM,YAAY;IAC/E,IAAI,YAAY,MAAM,UAAU,EAAE,CAAC;IACnC,IAAI,OAAO,MAAM,QAAQ,CAAC;IAC1B,IAAI,YAAY,MAAM,UAAU,EAAE,CAAC;IACnC,IAAI,eAAe,KAAK,kBAAkB,WAAW,IAAI;IACzD,IAAI,cAAc;KACjB,IAAI,eAAe,KAAK,UAAU,KAAK,SAAS,YAAY;KAC5D,YAAY,UAAU,UAAU,GAAG,UAAU,SAAS,YAAY;KAClE,OAAO,eAAe,KAAK,UAAU,GAAG,KAAK,SAAS,YAAY;KAClE,YAAY,eAAe;IAC5B;IACA,IAAI,gBAAgB;IACpB,IAAI,WAAW;IACf,IAAI,gBAAgB;IACpB,IAAI,YAAY,2BAA2B,WAAW,IAAI,IAAI,2BAA2B,MAAM,SAAS;IACxG,OAAO,KAAK,OAAO,CAAC,MAAM,UAAU,OAAO,CAAC,GAAG;KAC9C,aAAa,KAAK,OAAO,CAAC;KAC1B,OAAO,KAAK,UAAU,CAAC,IAAI,UAAU,OAAO,CAAC;KAC7C,YAAY,UAAU,UAAU,CAAC;KACjC,IAAI,QAAQ,2BAA2B,WAAW,IAAI,IAAI,2BAA2B,MAAM,SAAS;KACpG,IAAI,SAAS,WAAW;MACvB,YAAY;MACZ,gBAAgB;MAChB,WAAW;MACX,gBAAgB;KACjB;IACD;IACA,IAAI,MAAM,UAAU,EAAE,CAAC,MAAM,eAAe;KAC3C,IAAI,eAAe,MAAM,UAAU,EAAE,CAAC,KAAK;UACtC;MACJ,MAAM,OAAO,UAAU,GAAG,CAAC;MAC3B;KACD;KACA,MAAM,QAAQ,CAAC,KAAK;KACpB,IAAI,eAAe,MAAM,UAAU,EAAE,CAAC,KAAK;UACtC;MACJ,MAAM,OAAO,UAAU,GAAG,CAAC;MAC3B;KACD;IACD;GACD;GACA;EACD;CACD;CACA,iBAAiB,wBAAwB;CACzC,iBAAiB,mBAAmB;CACpC,iBAAiB,kBAAkB;CACnC,iBAAiB,qBAAqB;CACtC,iBAAiB,uBAAuB;;;;;CAKxC,iBAAiB,UAAU,yBAAyB,SAAS,OAAO;EACnE,IAAI,UAAU;EACd,IAAI,aAAa,CAAC;EAClB,IAAI,mBAAmB;;EAEvB,IAAI,eAAe;EACnB,IAAI,UAAU;EACd,IAAI,UAAU;EACd,IAAI,UAAU;EACd,IAAI,WAAW;EACf,IAAI,WAAW;EACf,OAAO,UAAU,MAAM,QAAQ;GAC9B,IAAI,MAAM,QAAQ,CAAC,MAAM,YAAY;IACpC,IAAI,MAAM,QAAQ,CAAC,EAAE,CAAC,SAAS,KAAK,kBAAkB,YAAY,WAAW;KAC5E,WAAW,sBAAsB;KACjC,UAAU;KACV,UAAU;KACV,eAAe,MAAM,QAAQ,CAAC;IAC/B,OAAO;KACN,mBAAmB;KACnB,eAAe;IAChB;IACA,WAAW,WAAW;GACvB,OAAO;IACN,IAAI,MAAM,QAAQ,CAAC,MAAM,aAAa,WAAW;SAC5C,WAAW;IAChB,IAAI,iBAAiB,WAAW,WAAW,YAAY,YAAY,aAAa,SAAS,KAAK,gBAAgB,KAAK,UAAU,UAAU,WAAW,YAAY,IAAI;KACjK,MAAM,OAAO,WAAW,mBAAmB,IAAI,GAAG,IAAI,iBAAiB,KAAK,aAAa,YAAY,CAAC;KACtG,MAAM,WAAW,mBAAmB,KAAK,EAAE,CAAC,KAAK;KACjD;KACA,eAAe;KACf,IAAI,WAAW,SAAS;MACvB,WAAW,WAAW;MACtB,mBAAmB;KACpB,OAAO;MACN;MACA,UAAU,mBAAmB,IAAI,WAAW,mBAAmB,KAAK;MACpE,WAAW,WAAW;KACvB;KACA,UAAU;IACX;GACD;GACA;EACD;EACA,IAAI,SAAS,KAAK,kBAAkB,KAAK;CAC1C;;;;;;CAMA,iBAAiB,UAAU,oBAAoB,SAAS,OAAO;EAC9D,MAAM,KAAK,IAAI,iBAAiB,KAAK,YAAY,EAAE,CAAC;EACpD,IAAI,UAAU;EACd,IAAI,eAAe;EACnB,IAAI,eAAe;EACnB,IAAI,cAAc;EAClB,IAAI,cAAc;EAClB,IAAI;EACJ,OAAO,UAAU,MAAM,QAAQ,QAAQ,MAAM,QAAQ,CAAC,IAAvB;GAC9B,KAAK;IACJ;IACA,eAAe,MAAM,QAAQ,CAAC;IAC9B;IACA;GACD,KAAK;IACJ;IACA,eAAe,MAAM,QAAQ,CAAC;IAC9B;IACA;GACD,KAAK;IACJ,IAAI,eAAe,eAAe,GAAG;KACpC,IAAI,iBAAiB,KAAK,iBAAiB,GAAG;MAC7C,eAAe,KAAK,kBAAkB,aAAa,WAAW;MAC9D,IAAI,iBAAiB,GAAG;OACvB,IAAI,UAAU,eAAe,eAAe,KAAK,MAAM,UAAU,eAAe,eAAe,EAAE,CAAC,MAAM,YAAY,MAAM,UAAU,eAAe,eAAe,EAAE,CAAC,MAAM,YAAY,UAAU,GAAG,YAAY;YAC3M;QACJ,MAAM,OAAO,GAAG,GAAG,IAAI,iBAAiB,KAAK,YAAY,YAAY,UAAU,GAAG,YAAY,CAAC,CAAC;QAChG;OACD;OACA,cAAc,YAAY,UAAU,YAAY;OAChD,cAAc,YAAY,UAAU,YAAY;MACjD;MACA,eAAe,KAAK,kBAAkB,aAAa,WAAW;MAC9D,IAAI,iBAAiB,GAAG;OACvB,MAAM,QAAQ,CAAC,KAAK,YAAY,UAAU,YAAY,SAAS,YAAY,IAAI,MAAM,QAAQ,CAAC;OAC9F,cAAc,YAAY,UAAU,GAAG,YAAY,SAAS,YAAY;OACxE,cAAc,YAAY,UAAU,GAAG,YAAY,SAAS,YAAY;MACzE;KACD;KACA,WAAW,eAAe;KAC1B,MAAM,OAAO,SAAS,eAAe,YAAY;KACjD,IAAI,YAAY,QAAQ;MACvB,MAAM,OAAO,SAAS,GAAG,IAAI,iBAAiB,KAAK,aAAa,WAAW,CAAC;MAC5E;KACD;KACA,IAAI,YAAY,QAAQ;MACvB,MAAM,OAAO,SAAS,GAAG,IAAI,iBAAiB,KAAK,aAAa,WAAW,CAAC;MAC5E;KACD;KACA;IACD,OAAO,IAAI,YAAY,KAAK,MAAM,UAAU,EAAE,CAAC,MAAM,YAAY;KAChE,MAAM,UAAU,EAAE,CAAC,MAAM,MAAM,QAAQ,CAAC;KACxC,MAAM,OAAO,SAAS,CAAC;IACxB,OAAO;IACP,eAAe;IACf,eAAe;IACf,cAAc;IACd,cAAc;EAChB;EACA,IAAI,MAAM,MAAM,SAAS,EAAE,CAAC,OAAO,IAAI,MAAM,IAAI;EACjD,IAAI,UAAU;EACd,UAAU;EACV,OAAO,UAAU,MAAM,SAAS,GAAG;GAClC,IAAI,MAAM,UAAU,EAAE,CAAC,MAAM,cAAc,MAAM,UAAU,EAAE,CAAC,MAAM,YAAY;IAC/E,IAAI,MAAM,QAAQ,CAAC,EAAE,CAAC,UAAU,MAAM,QAAQ,CAAC,EAAE,CAAC,SAAS,MAAM,UAAU,EAAE,CAAC,EAAE,CAAC,MAAM,KAAK,MAAM,UAAU,EAAE,CAAC,IAAI;KAClH,MAAM,QAAQ,CAAC,KAAK,MAAM,UAAU,EAAE,CAAC,KAAK,MAAM,QAAQ,CAAC,EAAE,CAAC,UAAU,GAAG,MAAM,QAAQ,CAAC,EAAE,CAAC,SAAS,MAAM,UAAU,EAAE,CAAC,EAAE,CAAC,MAAM;KAClI,MAAM,UAAU,EAAE,CAAC,KAAK,MAAM,UAAU,EAAE,CAAC,KAAK,MAAM,UAAU,EAAE,CAAC;KACnE,MAAM,OAAO,UAAU,GAAG,CAAC;KAC3B,UAAU;IACX,OAAO,IAAI,MAAM,QAAQ,CAAC,EAAE,CAAC,UAAU,GAAG,MAAM,UAAU,EAAE,CAAC,EAAE,CAAC,MAAM,KAAK,MAAM,UAAU,EAAE,CAAC,IAAI;KACjG,MAAM,UAAU,EAAE,CAAC,MAAM,MAAM,UAAU,EAAE,CAAC;KAC5C,MAAM,QAAQ,CAAC,KAAK,MAAM,QAAQ,CAAC,EAAE,CAAC,UAAU,MAAM,UAAU,EAAE,CAAC,EAAE,CAAC,MAAM,IAAI,MAAM,UAAU,EAAE,CAAC;KACnG,MAAM,OAAO,UAAU,GAAG,CAAC;KAC3B,UAAU;IACX;GACD;GACA;EACD;EACA,IAAI,SAAS,KAAK,kBAAkB,KAAK;CAC1C;;;;;;;;;CASA,iBAAiB,UAAU,cAAc,SAAS,OAAO,KAAK;EAC7D,IAAI,SAAS;EACb,IAAI,SAAS;EACb,IAAI,cAAc;EAClB,IAAI,cAAc;EAClB,IAAI,IAAI;EACR,OAAO,IAAI,MAAM,QAAQ,KAAK;GAC7B,IAAI,MAAM,EAAE,CAAC,OAAO,aAAa,UAAU,MAAM,EAAE,CAAC,EAAE,CAAC;GACvD,IAAI,MAAM,EAAE,CAAC,OAAO,aAAa,UAAU,MAAM,EAAE,CAAC,EAAE,CAAC;GACvD,IAAI,SAAS,KAAK;GAClB,cAAc;GACd,cAAc;EACf;EACA,IAAI,MAAM,UAAU,KAAK,MAAM,EAAE,CAAC,OAAO,aAAa,OAAO;EAC7D,OAAO,eAAe,MAAM;CAC7B;;;;;;CAMA,iBAAiB,UAAU,kBAAkB,SAAS,OAAO;EAC5D,IAAI,OAAO,CAAC;EACZ,IAAI,cAAc;EAClB,IAAI,aAAa;EACjB,IAAI,aAAa;EACjB,IAAI,eAAe;EACnB,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;GACtC,IAAI,KAAK,MAAM,EAAE,CAAC;GAClB,IAAI,OAAO,MAAM,EAAE,CAAC,EAAE,CAAC,QAAQ,aAAa,OAAO,CAAC,CAAC,QAAQ,YAAY,MAAM,CAAC,CAAC,QAAQ,YAAY,MAAM,CAAC,CAAC,QAAQ,cAAc,YAAY;GAC/I,QAAQ,IAAR;IACC,KAAK;KACJ,KAAK,KAAK,wCAAwC,OAAO;KACzD;IACD,KAAK;KACJ,KAAK,KAAK,wCAAwC,OAAO;KACzD;IACD,KAAK,YAAY,KAAK,KAAK,WAAW,OAAO;GAC9C;EACD;EACA,OAAO,KAAK,KAAK,EAAE;CACpB;;;;;;CAMA,iBAAiB,UAAU,aAAa,SAAS,OAAO;EACvD,IAAI,OAAO,CAAC;EACZ,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK,IAAI,MAAM,EAAE,CAAC,OAAO,aAAa,KAAK,KAAK,MAAM,EAAE,CAAC;EAC3F,OAAO,KAAK,KAAK,EAAE;CACpB;;;;;;CAMA,iBAAiB,UAAU,aAAa,SAAS,OAAO;EACvD,IAAI,OAAO,CAAC;EACZ,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK,IAAI,MAAM,EAAE,CAAC,OAAO,aAAa,KAAK,KAAK,MAAM,EAAE,CAAC;EAC3F,OAAO,KAAK,KAAK,EAAE;CACpB;;;;;;;CAOA,iBAAiB,UAAU,mBAAmB,SAAS,OAAO;EAC7D,IAAI,cAAc;EAClB,IAAI,aAAa;EACjB,IAAI,YAAY;EAChB,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;GACtC,IAAI,KAAK,MAAM,EAAE,CAAC;GAClB,IAAI,OAAO,MAAM,EAAE,CAAC;GACpB,QAAQ,IAAR;IACC,KAAK;KACJ,cAAc,KAAK;KACnB;IACD,KAAK;KACJ,aAAa,KAAK;KAClB;IACD,KAAK;KACJ,eAAe,KAAK,IAAI,YAAY,SAAS;KAC7C,aAAa;KACb,YAAY;GACd;EACD;EACA,eAAe,KAAK,IAAI,YAAY,SAAS;EAC7C,OAAO;CACR;;;;;;;;;CASA,iBAAiB,UAAU,eAAe,SAAS,OAAO;EACzD,IAAI,OAAO,CAAC;EACZ,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK,QAAQ,MAAM,EAAE,CAAC,IAAjB;GACtC,KAAK;IACJ,KAAK,KAAK,MAAM,UAAU,MAAM,EAAE,CAAC,EAAE;IACrC;GACD,KAAK;IACJ,KAAK,KAAK,MAAM,MAAM,EAAE,CAAC,EAAE,CAAC;IAC5B;GACD,KAAK,YAAY,KAAK,KAAK,MAAM,MAAM,EAAE,CAAC,EAAE,CAAC;EAC9C;EACA,OAAO,KAAK,KAAK,GAAG,CAAC,CAAC,QAAQ,QAAQ,GAAG;CAC1C;;;;;;;;;CASA,iBAAiB,UAAU,iBAAiB,SAAS,OAAO,OAAO;EAClE,IAAI,QAAQ,CAAC;EACb,IAAI,cAAc;EAClB,IAAI,UAAU;EACd,IAAI,SAAS,MAAM,MAAM,KAAK;EAC9B,KAAK,IAAI,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;GACvC,IAAI,QAAQ,OAAO,EAAE,CAAC,UAAU,CAAC;GACjC,QAAQ,OAAO,EAAE,CAAC,OAAO,CAAC,GAA1B;IACC,KAAK;KACJ,IAAI;MACH,MAAM,iBAAiB,IAAI,iBAAiB,KAAK,aAAa,UAAU,KAAK,CAAC;KAC/E,SAAS,IAAI;MACZ,MAAM,IAAI,MAAM,uCAAuC,KAAK;KAC7D;KACA;IACD,KAAK;IACL,KAAK;KACJ,IAAI,IAAI,SAAS,OAAO,EAAE;KAC1B,IAAI,MAAM,CAAC,KAAK,IAAI,GAAG,MAAM,IAAI,MAAM,uCAAuC,KAAK;KACnF,IAAI,OAAO,MAAM,UAAU,SAAS,WAAW,CAAC;KAChD,IAAI,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,KAAK,MAAM,iBAAiB,IAAI,iBAAiB,KAAK,YAAY,IAAI;UAC5F,MAAM,iBAAiB,IAAI,iBAAiB,KAAK,aAAa,IAAI;KACvE;IACD,SAAS,IAAI,OAAO,IAAI,MAAM,IAAI,MAAM,+CAA+C,OAAO,EAAE;GACjG;EACD;EACA,IAAI,WAAW,MAAM,QAAQ,MAAM,IAAI,MAAM,mBAAmB,UAAU,0CAA0C,MAAM,SAAS,IAAI;EACvI,OAAO;CACR;;;;;;;;CAQA,iBAAiB,UAAU,aAAa,SAAS,MAAM,SAAS,KAAK;EACpE,IAAI,QAAQ,QAAQ,WAAW,QAAQ,OAAO,MAAM,MAAM,IAAI,MAAM,0BAA0B;EAC9F,MAAM,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,KAAK,MAAM,CAAC;EAC5C,IAAI,QAAQ,SAAS,OAAO;OACvB,IAAI,CAAC,KAAK,QAAQ,OAAO;OACzB,IAAI,KAAK,UAAU,KAAK,MAAM,QAAQ,MAAM,KAAK,SAAS,OAAO;OACjE,OAAO,KAAK,aAAa,MAAM,SAAS,GAAG;CACjD;;;;;;;;;;CAUA,iBAAiB,UAAU,eAAe,SAAS,MAAM,SAAS,KAAK;EACtE,IAAI,QAAQ,SAAS,KAAK,eAAe,MAAM,IAAI,MAAM,oCAAoC;EAC7F,IAAI,IAAI,KAAK,gBAAgB,OAAO;EACpC,IAAI,MAAM;;;;;;;;;EASV,SAAS,kBAAkB,GAAG,GAAG;GAChC,IAAI,WAAW,IAAI,QAAQ;GAC3B,IAAI,YAAY,KAAK,IAAI,MAAM,CAAC;GAChC,IAAI,CAAC,IAAI,gBAAgB,OAAO,YAAY,IAAI;GAChD,OAAO,WAAW,YAAY,IAAI;EACnC;EACA,IAAI,kBAAkB,KAAK;EAC3B,IAAI,WAAW,KAAK,QAAQ,SAAS,GAAG;EACxC,IAAI,YAAY,IAAI;GACnB,kBAAkB,KAAK,IAAI,kBAAkB,GAAG,QAAQ,GAAG,eAAe;GAC1E,WAAW,KAAK,YAAY,SAAS,MAAM,QAAQ,MAAM;GACzD,IAAI,YAAY,IAAI,kBAAkB,KAAK,IAAI,kBAAkB,GAAG,QAAQ,GAAG,eAAe;EAC/F;EACA,IAAI,YAAY,KAAK,QAAQ,SAAS;EACtC,WAAW;EACX,IAAI,SAAS;EACb,IAAI,UAAU,QAAQ,SAAS,KAAK;EACpC,IAAI;EACJ,KAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;GACxC,UAAU;GACV,UAAU;GACV,OAAO,UAAU,SAAS;IACzB,IAAI,kBAAkB,GAAG,MAAM,OAAO,KAAK,iBAAiB,UAAU;SACjE,UAAU;IACf,UAAU,KAAK,OAAO,UAAU,WAAW,IAAI,OAAO;GACvD;GACA,UAAU;GACV,IAAI,QAAQ,KAAK,IAAI,GAAG,MAAM,UAAU,CAAC;GACzC,IAAI,SAAS,KAAK,IAAI,MAAM,SAAS,KAAK,MAAM,IAAI,QAAQ;GAC5D,IAAI,KAAK,MAAM,SAAS,CAAC;GACzB,GAAG,SAAS,MAAM,KAAK,KAAK;GAC5B,KAAK,IAAI,IAAI,QAAQ,KAAK,OAAO,KAAK;IACrC,IAAI,YAAY,EAAE,KAAK,OAAO,IAAI,CAAC;IACnC,IAAI,MAAM,GAAG,GAAG,MAAM,GAAG,IAAI,MAAM,IAAI,KAAK;SACvC,GAAG,MAAM,GAAG,IAAI,MAAM,IAAI,KAAK,cAAc,QAAQ,IAAI,KAAK,QAAQ,OAAO,IAAI,KAAK,QAAQ,IAAI;IACvG,IAAI,GAAG,KAAK,WAAW;KACtB,IAAI,QAAQ,kBAAkB,GAAG,IAAI,CAAC;KACtC,IAAI,SAAS,iBAAiB;MAC7B,kBAAkB;MAClB,WAAW,IAAI;MACf,IAAI,WAAW,KAAK,QAAQ,KAAK,IAAI,GAAG,IAAI,MAAM,QAAQ;WACrD;KACN;IACD;GACD;GACA,IAAI,kBAAkB,IAAI,GAAG,GAAG,IAAI,iBAAiB;GACrD,UAAU;EACX;EACA,OAAO;CACR;;;;;;;CAOA,iBAAiB,UAAU,kBAAkB,SAAS,SAAS;EAC9D,IAAI,IAAI,CAAC;EACT,KAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK,EAAE,QAAQ,OAAO,CAAC,KAAK;EAChE,KAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK,EAAE,QAAQ,OAAO,CAAC,MAAM,KAAK,QAAQ,SAAS,IAAI;EAC3F,OAAO;CACR;;;;;;;;CAQA,iBAAiB,UAAU,oBAAoB,SAAS,OAAO,MAAM;EACpE,IAAI,KAAK,UAAU,GAAG;EACtB,IAAI,MAAM,WAAW,MAAM,MAAM,MAAM,uBAAuB;EAC9D,IAAI,UAAU,KAAK,UAAU,MAAM,QAAQ,MAAM,SAAS,MAAM,OAAO;EACvE,IAAI,UAAU;EACd,OAAO,KAAK,QAAQ,OAAO,KAAK,KAAK,YAAY,OAAO,KAAK,QAAQ,SAAS,KAAK,gBAAgB,KAAK,eAAe,KAAK,cAAc;GACzI,WAAW,KAAK;GAChB,UAAU,KAAK,UAAU,MAAM,SAAS,SAAS,MAAM,SAAS,MAAM,UAAU,OAAO;EACxF;EACA,WAAW,KAAK;EAChB,IAAI,SAAS,KAAK,UAAU,MAAM,SAAS,SAAS,MAAM,MAAM;EAChE,IAAI,QAAQ,MAAM,MAAM,QAAQ,IAAI,iBAAiB,KAAK,YAAY,MAAM,CAAC;EAC7E,IAAI,SAAS,KAAK,UAAU,MAAM,SAAS,MAAM,SAAS,MAAM,SAAS,MAAM,UAAU,OAAO;EAChG,IAAI,QAAQ,MAAM,MAAM,KAAK,IAAI,iBAAiB,KAAK,YAAY,MAAM,CAAC;EAC1E,MAAM,UAAU,OAAO;EACvB,MAAM,UAAU,OAAO;EACvB,MAAM,WAAW,OAAO,SAAS,OAAO;EACxC,MAAM,WAAW,OAAO,SAAS,OAAO;CACzC;;;;;;;;;;;;;;;;;;;;;;;CAuBA,iBAAiB,UAAU,aAAa,SAAS,GAAG,OAAO,OAAO;EACjE,IAAI,OAAO;EACX,IAAI,OAAO,KAAK,YAAY,OAAO,SAAS,YAAY,OAAO,SAAS,aAAa;GACpF,QAAQ;GACR,QAAQ,KAAK,UAAU,OAAO,OAAO,IAAI;GACzC,IAAI,MAAM,SAAS,GAAG;IACrB,KAAK,qBAAqB,KAAK;IAC/B,KAAK,uBAAuB,KAAK;GAClC;EACD,OAAO,IAAI,KAAK,OAAO,KAAK,YAAY,OAAO,SAAS,eAAe,OAAO,SAAS,aAAa;GACnG,QAAQ;GACR,QAAQ,KAAK,WAAW,KAAK;EAC9B,OAAO,IAAI,OAAO,KAAK,YAAY,SAAS,OAAO,SAAS,YAAY,OAAO,SAAS,aAAa;GACpG,QAAQ;GACR,QAAQ;EACT,OAAO,IAAI,OAAO,KAAK,YAAY,OAAO,SAAS,YAAY,SAAS,OAAO,SAAS,UAAU;GACjG,QAAQ;GACR,QAAQ;EACT,OAAO,MAAM,IAAI,MAAM,oCAAoC;EAC3D,IAAI,MAAM,WAAW,GAAG,OAAO,CAAC;EAChC,IAAI,UAAU,CAAC;EACf,IAAI,QAAQ,IAAI,iBAAiB,UAAU;EAC3C,IAAI,kBAAkB;EACtB,IAAI,cAAc;EAClB,IAAI,cAAc;EAClB,IAAI,gBAAgB;EACpB,IAAI,iBAAiB;EACrB,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;GACtC,IAAI,YAAY,MAAM,EAAE,CAAC;GACzB,IAAI,YAAY,MAAM,EAAE,CAAC;GACzB,IAAI,CAAC,mBAAmB,cAAc,YAAY;IACjD,MAAM,SAAS;IACf,MAAM,SAAS;GAChB;GACA,QAAQ,WAAR;IACC,KAAK;KACJ,MAAM,MAAM,qBAAqB,MAAM;KACvC,MAAM,WAAW,UAAU;KAC3B,iBAAiB,eAAe,UAAU,GAAG,WAAW,IAAI,YAAY,eAAe,UAAU,WAAW;KAC5G;IACD,KAAK;KACJ,MAAM,WAAW,UAAU;KAC3B,MAAM,MAAM,qBAAqB,MAAM;KACvC,iBAAiB,eAAe,UAAU,GAAG,WAAW,IAAI,eAAe,UAAU,cAAc,UAAU,MAAM;KACnH;IACD,KAAK,YAAY,IAAI,UAAU,UAAU,IAAI,KAAK,gBAAgB,mBAAmB,MAAM,UAAU,IAAI,GAAG;KAC3G,MAAM,MAAM,qBAAqB,MAAM;KACvC,MAAM,WAAW,UAAU;KAC3B,MAAM,WAAW,UAAU;IAC5B,OAAO,IAAI,UAAU,UAAU,IAAI,KAAK,cACnC;SAAA,iBAAiB;MACpB,KAAK,kBAAkB,OAAO,aAAa;MAC3C,QAAQ,KAAK,KAAK;MAClB,QAAQ,IAAI,iBAAiB,UAAU;MACvC,kBAAkB;MAClB,gBAAgB;MAChB,cAAc;KACf;;GAEF;GACA,IAAI,cAAc,aAAa,eAAe,UAAU;GACxD,IAAI,cAAc,aAAa,eAAe,UAAU;EACzD;EACA,IAAI,iBAAiB;GACpB,KAAK,kBAAkB,OAAO,aAAa;GAC3C,QAAQ,KAAK,KAAK;EACnB;EACA,OAAO;CACR;;;;;;CAMA,iBAAiB,UAAU,iBAAiB,SAAS,SAAS;EAC7D,IAAI,cAAc,CAAC;EACnB,KAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;GACxC,IAAI,QAAQ,QAAQ;GACpB,IAAI,YAAY,IAAI,iBAAiB,UAAU;GAC/C,UAAU,QAAQ,CAAC;GACnB,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,MAAM,QAAQ,KAAK,UAAU,MAAM,KAAK,IAAI,iBAAiB,KAAK,MAAM,MAAM,EAAE,CAAC,IAAI,MAAM,MAAM,EAAE,CAAC,EAAE;GAChI,UAAU,SAAS,MAAM;GACzB,UAAU,SAAS,MAAM;GACzB,UAAU,UAAU,MAAM;GAC1B,UAAU,UAAU,MAAM;GAC1B,YAAY,KAAK;EAClB;EACA,OAAO;CACR;;;;;;;;;CASA,iBAAiB,UAAU,cAAc,SAAS,SAAS,MAAM;EAChE,IAAI,QAAQ,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;EACzC,UAAU,KAAK,eAAe,OAAO;EACrC,IAAI,cAAc,KAAK,iBAAiB,OAAO;EAC/C,OAAO,cAAc,OAAO;EAC5B,KAAK,eAAe,OAAO;EAC3B,IAAI,QAAQ;EACZ,IAAI,UAAU,CAAC;EACf,KAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;GACxC,IAAI,eAAe,QAAQ,EAAE,CAAC,SAAS;GACvC,IAAI,QAAQ,KAAK,WAAW,QAAQ,EAAE,CAAC,KAAK;GAC5C,IAAI;GACJ,IAAI,UAAU;GACd,IAAI,MAAM,SAAS,KAAK,eAAe;IACtC,YAAY,KAAK,WAAW,MAAM,MAAM,UAAU,GAAG,KAAK,aAAa,GAAG,YAAY;IACtF,IAAI,aAAa,IAAI;KACpB,UAAU,KAAK,WAAW,MAAM,MAAM,UAAU,MAAM,SAAS,KAAK,aAAa,GAAG,eAAe,MAAM,SAAS,KAAK,aAAa;KACpI,IAAI,WAAW,MAAM,aAAa,SAAS,YAAY;IACxD;GACD,OAAO,YAAY,KAAK,WAAW,MAAM,OAAO,YAAY;GAC5D,IAAI,aAAa,IAAI;IACpB,QAAQ,KAAK;IACb,SAAS,QAAQ,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC;GAC1C,OAAO;IACN,QAAQ,KAAK;IACb,QAAQ,YAAY;IACpB,IAAI;IACJ,IAAI,WAAW,IAAI,QAAQ,KAAK,UAAU,WAAW,YAAY,MAAM,MAAM;SACxE,QAAQ,KAAK,UAAU,WAAW,UAAU,KAAK,aAAa;IACnE,IAAI,SAAS,OAAO,OAAO,KAAK,UAAU,GAAG,SAAS,IAAI,KAAK,WAAW,QAAQ,EAAE,CAAC,KAAK,IAAI,KAAK,UAAU,YAAY,MAAM,MAAM;SAChI;KACJ,IAAI,QAAQ,KAAK,UAAU,OAAO,OAAO,KAAK;KAC9C,IAAI,MAAM,SAAS,KAAK,iBAAiB,KAAK,iBAAiB,KAAK,IAAI,MAAM,SAAS,KAAK,uBAAuB,QAAQ,KAAK;UAC3H;MACJ,KAAK,6BAA6B,KAAK;MACvC,IAAI,SAAS;MACb,IAAI;MACJ,KAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC,MAAM,QAAQ,KAAK;OACjD,IAAI,MAAM,QAAQ,EAAE,CAAC,MAAM;OAC3B,IAAI,IAAI,OAAO,YAAY,SAAS,KAAK,YAAY,OAAO,MAAM;OAClE,IAAI,IAAI,OAAO,aAAa,OAAO,KAAK,UAAU,GAAG,YAAY,MAAM,IAAI,IAAI,KAAK,KAAK,UAAU,YAAY,MAAM;YAChH,IAAI,IAAI,OAAO,aAAa,OAAO,KAAK,UAAU,GAAG,YAAY,MAAM,IAAI,KAAK,UAAU,YAAY,KAAK,YAAY,OAAO,SAAS,IAAI,EAAE,CAAC,MAAM,CAAC;OAC1J,IAAI,IAAI,OAAO,aAAa,UAAU,IAAI,EAAE,CAAC;MAC9C;KACD;IACD;GACD;EACD;EACA,OAAO,KAAK,UAAU,YAAY,QAAQ,KAAK,SAAS,YAAY,MAAM;EAC1E,OAAO,CAAC,MAAM,OAAO;CACtB;;;;;;;CAOA,iBAAiB,UAAU,mBAAmB,SAAS,SAAS;EAC/D,IAAI,gBAAgB,KAAK;EACzB,IAAI,cAAc;EAClB,KAAK,IAAI,IAAI,GAAG,KAAK,eAAe,KAAK,eAAe,OAAO,aAAa,CAAC;EAC7E,KAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;GACxC,QAAQ,EAAE,CAAC,UAAU;GACrB,QAAQ,EAAE,CAAC,UAAU;EACtB;EACA,IAAI,QAAQ,QAAQ;EACpB,IAAI,QAAQ,MAAM;EAClB,IAAI,MAAM,UAAU,KAAK,MAAM,EAAE,CAAC,MAAM,YAAY;GACnD,MAAM,QAAQ,IAAI,iBAAiB,KAAK,YAAY,WAAW,CAAC;GAChE,MAAM,UAAU;GAChB,MAAM,UAAU;GAChB,MAAM,WAAW;GACjB,MAAM,WAAW;EAClB,OAAO,IAAI,gBAAgB,MAAM,EAAE,CAAC,EAAE,CAAC,QAAQ;GAC9C,IAAI,cAAc,gBAAgB,MAAM,EAAE,CAAC,EAAE,CAAC;GAC9C,MAAM,EAAE,CAAC,KAAK,YAAY,UAAU,MAAM,EAAE,CAAC,EAAE,CAAC,MAAM,IAAI,MAAM,EAAE,CAAC;GACnE,MAAM,UAAU;GAChB,MAAM,UAAU;GAChB,MAAM,WAAW;GACjB,MAAM,WAAW;EAClB;EACA,QAAQ,QAAQ,QAAQ,SAAS;EACjC,QAAQ,MAAM;EACd,IAAI,MAAM,UAAU,KAAK,MAAM,MAAM,SAAS,EAAE,CAAC,MAAM,YAAY;GAClE,MAAM,KAAK,IAAI,iBAAiB,KAAK,YAAY,WAAW,CAAC;GAC7D,MAAM,WAAW;GACjB,MAAM,WAAW;EAClB,OAAO,IAAI,gBAAgB,MAAM,MAAM,SAAS,EAAE,CAAC,EAAE,CAAC,QAAQ;GAC7D,IAAI,cAAc,gBAAgB,MAAM,MAAM,SAAS,EAAE,CAAC,EAAE,CAAC;GAC7D,MAAM,MAAM,SAAS,EAAE,CAAC,MAAM,YAAY,UAAU,GAAG,WAAW;GAClE,MAAM,WAAW;GACjB,MAAM,WAAW;EAClB;EACA,OAAO;CACR;;;;;;;CAOA,iBAAiB,UAAU,iBAAiB,SAAS,SAAS;EAC7D,IAAI,aAAa,KAAK;EACtB,KAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;GACxC,IAAI,QAAQ,EAAE,CAAC,WAAW,YAAY;GACtC,IAAI,WAAW,QAAQ;GACvB,QAAQ,OAAO,KAAK,CAAC;GACrB,IAAI,SAAS,SAAS;GACtB,IAAI,SAAS,SAAS;GACtB,IAAI,aAAa;GACjB,OAAO,SAAS,MAAM,WAAW,GAAG;IACnC,IAAI,QAAQ,IAAI,iBAAiB,UAAU;IAC3C,IAAI,QAAQ;IACZ,MAAM,SAAS,SAAS,WAAW;IACnC,MAAM,SAAS,SAAS,WAAW;IACnC,IAAI,eAAe,IAAI;KACtB,MAAM,UAAU,MAAM,UAAU,WAAW;KAC3C,MAAM,MAAM,KAAK,IAAI,iBAAiB,KAAK,YAAY,UAAU,CAAC;IACnE;IACA,OAAO,SAAS,MAAM,WAAW,KAAK,MAAM,UAAU,aAAa,KAAK,cAAc;KACrF,IAAI,YAAY,SAAS,MAAM,EAAE,CAAC;KAClC,IAAI,YAAY,SAAS,MAAM,EAAE,CAAC;KAClC,IAAI,cAAc,aAAa;MAC9B,MAAM,WAAW,UAAU;MAC3B,UAAU,UAAU;MACpB,MAAM,MAAM,KAAK,SAAS,MAAM,MAAM,CAAC;MACvC,QAAQ;KACT,OAAO,IAAI,cAAc,eAAe,MAAM,MAAM,UAAU,KAAK,MAAM,MAAM,EAAE,CAAC,MAAM,cAAc,UAAU,SAAS,IAAI,YAAY;MACxI,MAAM,WAAW,UAAU;MAC3B,UAAU,UAAU;MACpB,QAAQ;MACR,MAAM,MAAM,KAAK,IAAI,iBAAiB,KAAK,WAAW,SAAS,CAAC;MAChE,SAAS,MAAM,MAAM;KACtB,OAAO;MACN,YAAY,UAAU,UAAU,GAAG,aAAa,MAAM,UAAU,KAAK,YAAY;MACjF,MAAM,WAAW,UAAU;MAC3B,UAAU,UAAU;MACpB,IAAI,cAAc,YAAY;OAC7B,MAAM,WAAW,UAAU;OAC3B,UAAU,UAAU;MACrB,OAAO,QAAQ;MACf,MAAM,MAAM,KAAK,IAAI,iBAAiB,KAAK,WAAW,SAAS,CAAC;MAChE,IAAI,aAAa,SAAS,MAAM,EAAE,CAAC,IAAI,SAAS,MAAM,MAAM;WACvD,SAAS,MAAM,EAAE,CAAC,KAAK,SAAS,MAAM,EAAE,CAAC,EAAE,CAAC,UAAU,UAAU,MAAM;KAC5E;IACD;IACA,aAAa,KAAK,WAAW,MAAM,KAAK;IACxC,aAAa,WAAW,UAAU,WAAW,SAAS,KAAK,YAAY;IACvE,IAAI,cAAc,KAAK,WAAW,SAAS,KAAK,CAAC,CAAC,UAAU,GAAG,KAAK,YAAY;IAChF,IAAI,gBAAgB,IAAI;KACvB,MAAM,WAAW,YAAY;KAC7B,MAAM,WAAW,YAAY;KAC7B,IAAI,MAAM,MAAM,WAAW,KAAK,MAAM,MAAM,MAAM,MAAM,SAAS,EAAE,CAAC,OAAO,YAAY,MAAM,MAAM,MAAM,MAAM,SAAS,EAAE,CAAC,MAAM;UAC5H,MAAM,MAAM,KAAK,IAAI,iBAAiB,KAAK,YAAY,WAAW,CAAC;IACzE;IACA,IAAI,CAAC,OAAO,QAAQ,OAAO,EAAE,GAAG,GAAG,KAAK;GACzC;EACD;CACD;;;;;;CAMA,iBAAiB,UAAU,eAAe,SAAS,SAAS;EAC3D,IAAI,OAAO,CAAC;EACZ,KAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK,KAAK,KAAK,QAAQ;EAC3D,OAAO,KAAK,KAAK,EAAE;CACpB;;;;;;;CAOA,iBAAiB,UAAU,iBAAiB,SAAS,UAAU;EAC9D,IAAI,UAAU,CAAC;EACf,IAAI,CAAC,UAAU,OAAO;EACtB,IAAI,OAAO,SAAS,MAAM,IAAI;EAC9B,IAAI,cAAc;EAClB,IAAI,cAAc;EAClB,OAAO,cAAc,KAAK,QAAQ;GACjC,IAAI,IAAI,KAAK,YAAY,CAAC,MAAM,WAAW;GAC3C,IAAI,CAAC,GAAG,MAAM,IAAI,MAAM,2BAA2B,KAAK,YAAY;GACpE,IAAI,QAAQ,IAAI,iBAAiB,UAAU;GAC3C,QAAQ,KAAK,KAAK;GAClB,MAAM,SAAS,SAAS,EAAE,IAAI,EAAE;GAChC,IAAI,EAAE,OAAO,IAAI;IAChB,MAAM;IACN,MAAM,UAAU;GACjB,OAAO,IAAI,EAAE,MAAM,KAAK,MAAM,UAAU;QACnC;IACJ,MAAM;IACN,MAAM,UAAU,SAAS,EAAE,IAAI,EAAE;GAClC;GACA,MAAM,SAAS,SAAS,EAAE,IAAI,EAAE;GAChC,IAAI,EAAE,OAAO,IAAI;IAChB,MAAM;IACN,MAAM,UAAU;GACjB,OAAO,IAAI,EAAE,MAAM,KAAK,MAAM,UAAU;QACnC;IACJ,MAAM;IACN,MAAM,UAAU,SAAS,EAAE,IAAI,EAAE;GAClC;GACA;GACA,OAAO,cAAc,KAAK,QAAQ;IACjC,IAAI,OAAO,KAAK,YAAY,CAAC,OAAO,CAAC;IACrC,IAAI;KACH,IAAI,OAAO,UAAU,KAAK,YAAY,CAAC,UAAU,CAAC,CAAC;IACpD,SAAS,IAAI;KACZ,MAAM,IAAI,MAAM,uCAAuC,IAAI;IAC5D;IACA,IAAI,QAAQ,KAAK,MAAM,MAAM,KAAK,IAAI,iBAAiB,KAAK,aAAa,IAAI,CAAC;SACzE,IAAI,QAAQ,KAAK,MAAM,MAAM,KAAK,IAAI,iBAAiB,KAAK,aAAa,IAAI,CAAC;SAC9E,IAAI,QAAQ,KAAK,MAAM,MAAM,KAAK,IAAI,iBAAiB,KAAK,YAAY,IAAI,CAAC;SAC7E,IAAI,QAAQ,KAAK;SACjB,IAAI,SAAS,IAAI,CAAC,OAAO,MAAM,IAAI,MAAM,0BAA0B,OAAO,YAAY,IAAI;IAC/F;GACD;EACD;EACA,OAAO;CACR;;;;;CAKA,iBAAiB,YAAY,WAAW;;EAEvC,KAAK,QAAQ,CAAC;;EAEd,KAAK,SAAS;;EAEd,KAAK,SAAS;;EAEd,KAAK,UAAU;;EAEf,KAAK,UAAU;CAChB;;;;;;;CAOA,iBAAiB,UAAU,UAAU,WAAW,WAAW;EAC1D,IAAI,SAAS;EACb,IAAI,KAAK,YAAY,GAAG,UAAU,KAAK,SAAS;OAC3C,IAAI,KAAK,WAAW,GAAG,UAAU,KAAK,SAAS;OAC/C,UAAU,KAAK,SAAS,IAAI,MAAM,KAAK;EAC5C,IAAI,KAAK,YAAY,GAAG,UAAU,KAAK,SAAS;OAC3C,IAAI,KAAK,WAAW,GAAG,UAAU,KAAK,SAAS;OAC/C,UAAU,KAAK,SAAS,IAAI,MAAM,KAAK;EAC5C,IAAI,OAAO,CAAC,SAAS,UAAU,OAAO,UAAU,OAAO;EACvD,IAAI;EACJ,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,MAAM,QAAQ,KAAK;GAC3C,QAAQ,KAAK,MAAM,EAAE,CAAC,IAAtB;IACC,KAAK;KACJ,KAAK;KACL;IACD,KAAK;KACJ,KAAK;KACL;IACD,KAAK,YAAY,KAAK;GACvB;GACA,KAAK,IAAI,KAAK,KAAK,UAAU,KAAK,MAAM,EAAE,CAAC,EAAE,IAAI;EAClD;EACA,OAAO,KAAK,KAAK,EAAE,CAAC,CAAC,QAAQ,QAAQ,GAAG;CACzC;CACA,OAAO,UAAU;CACjB,OAAO,QAAQ,sBAAsB;CACrC,OAAO,QAAQ,iBAAiB;CAChC,OAAO,QAAQ,iBAAiB;CAChC,OAAO,QAAQ,gBAAgB;AAChC,EAAE,EAAA,CAAG;AA2iBL,SAAS,MAAM,OAAO,MAAM;CAK3B,CAAC,UAAU,UAAU,QAAQ,QAAQ,UAAU,SAAS,QAAQ,OAAO,QAAQ,IAAA,CAAK,GAAG,IAAI;AAC5F;AACA,SAAS,IAAI,GAAG,MAAM;CACrB,MAAM,QAAQ,IAAI;AACnB;AACA,SAAS,MAAM,GAAG,MAAM;CACvB,MAAM,SAAS,IAAI;AACpB;AACA,SAAS,uBAAuB,UAAU,KAAK;CAC9C,MAAM,aAAa,SAAS,QAAQ,IAAI,aAAa;CACrD,IAAI,YAAY;EACf,MAAM,UAAU,OAAO,UAAU;EACjC,IAAI,OAAO,SAAS,OAAO,GAAG,OAAO,KAAK,IAAI,KAAK,UAAU,GAAG;EAChE,MAAM,UAAU,KAAK,MAAM,UAAU;EACrC,IAAI,OAAO,SAAS,OAAO,GAAG,OAAO,KAAK,IAAI,KAAK,UAAU,GAAG;CACjE;CACA,OAAO;AACR;AACA,IAAI,uBAAuB,MAAM;CAChC;CACA,QAAQ,QAAQ,QAAQ;CACxB,gBAAgB;CAChB,uBAAuB;CACvB,mBAAmB;CACnB;CACA;CACA;CACA;CACA;CACA,YAAY,UAAU,CAAC,GAAG;EACzB,KAAK,UAAU;EACf,KAAK,oBAAoB,QAAQ,qBAAqB;EACtD,KAAK,oBAAoB,QAAQ,qBAAqB;EACtD,KAAK,sBAAsB,QAAQ,SAAS;EAC5C,KAAK,MAAM,QAAQ,OAAO,KAAK;EAC/B,KAAK,OAAO,QAAQ,UAAU,iBAAiB,IAAI,SAAS,gBAAgB,WAAW,aAAa,YAAY,CAAC;CAClH;CACA,MAAM,OAAO,MAAM,YAAY,KAAK,QAAQ,oBAAoB,KAAK;EACpE,MAAM,MAAM,iBAAiB,UAAU,MAAM,MAAM,OAAO,KAAK;EAC/D,MAAM,UAAU,IAAI,SAAS,WAAW,KAAK,IAAI,SAAS,iBAAiB,KAAK,IAAI,SAAS,QAAQ;EACrG,OAAO,KAAK,QAAQ,YAAY;GAC/B,MAAM,MAAM,KAAK,IAAI;GACrB,MAAM,UAAU,KAAK,IAAI,KAAK,eAAe,KAAK,kBAAkB,UAAU,KAAK,uBAAuB,CAAC;GAC3G,IAAI,UAAU,KAAK,MAAM,KAAK,KAAK,UAAU,GAAG;GAChD,MAAM,YAAY,KAAK,IAAI;GAC3B,KAAK,gBAAgB,YAAY,KAAK;GACtC,IAAI,SAAS,KAAK,uBAAuB,YAAY,KAAK;GAC1D,MAAM,UAAU;IACf,YAAY,QAAQ,SAAS;IAC7B,MAAM;IACN,iBAAiB,UAAU,MAAM,SAAS,KAAK;GAChD,CAAC,CAAC,QAAQ,WAAW,QAAQ,MAAM,CAAC;GACpC,IAAI;GACJ,IAAI;IACH,WAAW,MAAM,KAAK,oBAAoB,OAAO;KAChD,GAAG;KACH,QAAQ,YAAY,IAAI,OAAO;IAChC,CAAC;GACF,SAAS,SAAS;IACjB,MAAM,cAAc,IAAI,IAAI,GAAG;IAC/B,MAAM,uBAAuB;KAC5B,QAAQ,MAAM,WAAW,iBAAiB,UAAU,MAAM,SAAS;KACnE,KAAK,GAAG,YAAY,SAAS,YAAY;KACzC,OAAO;IACR,CAAC;IACD,MAAM;GACP;GACA,IAAI,SAAS,WAAW,KAAK;IAC5B,KAAK,mBAAmB,KAAK,IAAI,KAAK,kBAAkB,KAAK,IAAI,IAAI,uBAAuB,UAAU,KAAK,IAAI,CAAC,CAAC;IACjH,KAAK,QAAQ,cAAc,KAAK,gBAAgB;IAChD,IAAI,4DAA4D,IAAI,KAAK,KAAK,gBAAgB,CAAC,CAAC,YAAY,EAAE,EAAE;GACjH;GACA,OAAO;EACR,CAAC;CACF;CACA,QAAQ,WAAW;EAClB,MAAM,SAAS,KAAK,MAAM,KAAK,SAAS;EACxC,KAAK,QAAQ,OAAO,WAAW,KAAK,SAAS,KAAK,CAAC;EACnD,OAAO;CACR;AACD;AACmC,IAAI,qBAAqB;AAikD5C,IAAI,YAAY,SAAS,EAAE,OAAO,KAAK,CAAC;AA6FpC,IAAI,YAAY,SAAS,EAAE,OAAO,KAAK,CAAC;AACxC,IAAI,YAAY;AAidpB,IAAI,YAAY;AAgThC,MAAM,aAAa;CAClB,YAAY;CACZ,cAAc;CACd,gBAAgB;CAChB,eAAe;CACf,eAAe;CACf,wBAAwB;CACxB,cAAc;CACd,eAAe;CACf,cAAc;CACd,eAAe;CACf,YAAY;CACZ,WAAW;CACX,cAAc;CACd,YAAY;CACZ,aAAa;CACb,cAAc;CACd,aAAa;AACd;AACA,MAAM,mBAAmB;CACxB,KAAK;CACL,eAAe;CACf,iBAAiB;CACjB,cAAc;AACf;AAEA,SAAS,gBAAgB,OAAO;CAC/B,OAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,MAAM,eAAe,WAAW,OAAO,MAAM,WAAW;AAC/G;AACA,SAAS,eAAe,OAAO;CAC9B,IAAI,iBAAiB,YAAY,OAAO;EACvC,YAAY;EACZ,QAAQ,OAAO,KAAK,KAAK,CAAC,CAAC,SAAS,QAAQ;CAC7C;CACA,IAAI,MAAM,QAAQ,KAAK,GAAG,OAAO,MAAM,IAAI,cAAc;CACzD,IAAI,OAAO,UAAU,YAAY,UAAU,MAAM,OAAO,OAAO,YAAY,OAAO,QAAQ,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,WAAW,CAAC,KAAK,eAAe,KAAK,CAAC,CAAC,CAAC;CACpJ,OAAO;AACR;AACA,SAAS,eAAe,OAAO;CAC9B,IAAI,gBAAgB,KAAK,GAAG,OAAO,WAAW,KAAK,OAAO,KAAK,MAAM,QAAQ,QAAQ,CAAC;CACtF,IAAI,MAAM,QAAQ,KAAK,GAAG,OAAO,MAAM,IAAI,cAAc;CACzD,IAAI,OAAO,UAAU,YAAY,UAAU,MAAM,OAAO,OAAO,YAAY,OAAO,QAAQ,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,WAAW,CAAC,KAAK,eAAe,KAAK,CAAC,CAAC,CAAC;CACpJ,OAAO;AACR;AAEA,SAAS,YAAY,cAAc,QAAQ,KAAK;CAC/C,MAAM,OAAO,YAAY,iBAAiB,QAAQ,YAAY,cAAc,IAAI,KAAK,QAAQ,GAAG,YAAY;CAC5G,OAAO;EACN;EACA,YAAY,QAAQ,aAAa,UAAU,0BAA0B,WAAW,QAAQ,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,MAAM,GAAG,EAAE,MAAM,KAAK,MAAM,aAAa;EAC9J,cAAc,KAAK,MAAM,aAAa;EACtC,SAAS,KAAK,MAAM,YAAY;EAChC,iBAAiB,KAAK,MAAM,iBAAiB;CAC9C;AACD;AAEA,MAAM,uCAAuC,IAAI,IAAI;CACpD;CACA;CACA;CACA;CACA;AACD,CAAC;AACD,IAAI,wBAAwB,cAAc,oBAAoB;CAC7D;CACA,YAAY,iBAAiB;EAC5B,MAAM,eAAe;EACrB,KAAK,kBAAkB;CACxB;CACA,MAAM,MAAM,SAAS;EACpB,IAAI;GACH,MAAM,MAAM,MAAM,OAAO;EAC1B,SAAS,OAAO;GACf,MAAM,OAAO,MAAM;GACnB,IAAI,KAAK,gBAAgB,aAAa,KAAK,gBAAgB,iBAAiB,QAAQ,qBAAqB,IAAI,IAAI,GAAG;GACpH,MAAM;EACP;CACD;AACD;AACA,SAAS,0BAA0B,QAAQ;CAC1C,OAAO,wBAAwB,IAAI,oBAAoB,MAAM,GAAG,IAAI,sBAAsB,MAAM,CAAC;AAClG;;;CC9yVA,OAAO,UAAU;EACf;EACA;EACA;EACA,kBAxBuB,OAAO;6BACL;EAwBzB;GAdA;GACA;GACA;GACA;GACA;GACA;GACA;EAQA;EACA;EACA,yBAAyB;EACzB,YAAY;CACd;;;;CC1BA,OAAO,UAPL,OAAO,YAAY,YACnB,QAAQ,OACR,QAAQ,IAAI,cACZ,cAAc,KAAK,QAAQ,IAAI,UAAU,KACtC,GAAG,SAAS,QAAQ,MAAM,UAAU,GAAG,IAAI,UACtC,CAAC;;;;CCNX,MAAM,EACJ,2BACA,uBACA,eAAA,kBAAA;CAEF,MAAM,QAAA,cAAA;CACN,UAAU,OAAO,UAAU,CAAC;CAG5B,MAAM,KAAK,QAAQ,KAAK,CAAC;CACzB,MAAM,SAAS,QAAQ,SAAS,CAAC;CACjC,MAAM,MAAM,QAAQ,MAAM,CAAC;CAC3B,MAAM,UAAU,QAAQ,UAAU,CAAC;CACnC,MAAM,IAAI,QAAQ,IAAI,CAAC;CACvB,IAAI,IAAI;CAER,MAAM,mBAAmB;CAQzB,MAAM,wBAAwB;EAC5B,CAAC,OAAO,CAAC;EACT,CAAC,OAAO,UAAU;EAClB,CAAC,kBAAkB,qBAAqB;CAC1C;CAEA,MAAM,iBAAiB,UAAU;EAC/B,KAAK,MAAM,CAAC,OAAO,QAAQ,uBACzB,QAAQ,MACL,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC,KAAK,GAAG,MAAM,KAAK,IAAI,EAAE,CAAC,CAC7C,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC,KAAK,GAAG,MAAM,KAAK,IAAI,EAAE;EAEjD,OAAO;CACT;CAEA,MAAM,eAAe,MAAM,OAAO,aAAa;EAC7C,MAAM,OAAO,cAAc,KAAK;EAChC,MAAM,QAAQ;EACd,MAAM,MAAM,OAAO,KAAK;EACxB,EAAE,QAAQ;EACV,IAAI,SAAS;EACb,QAAQ,SAAS;EACjB,GAAG,SAAS,IAAI,OAAO,OAAO,WAAW,MAAM,KAAA,CAAS;EACxD,OAAO,SAAS,IAAI,OAAO,MAAM,WAAW,MAAM,KAAA,CAAS;CAC7D;CAQA,YAAY,qBAAqB,aAAa;CAC9C,YAAY,0BAA0B,MAAM;CAM5C,YAAY,wBAAwB,gBAAgB,iBAAiB,EAAE;CAKvE,YAAY,eAAe,IAAI,IAAI,EAAE,mBAAmB,OACjC,IAAI,EAAE,mBAAmB,OACzB,IAAI,EAAE,mBAAmB,EAAE;CAElD,YAAY,oBAAoB,IAAI,IAAI,EAAE,wBAAwB,OACtC,IAAI,EAAE,wBAAwB,OAC9B,IAAI,EAAE,wBAAwB,EAAE;CAO5D,YAAY,wBAAwB,MAAM,IAAI,EAAE,sBAC/C,GAAG,IAAI,EAAE,mBAAmB,EAAE;CAE/B,YAAY,6BAA6B,MAAM,IAAI,EAAE,sBACpD,GAAG,IAAI,EAAE,wBAAwB,EAAE;CAMpC,YAAY,cAAc,QAAQ,IAAI,EAAE,sBACvC,QAAQ,IAAI,EAAE,sBAAsB,KAAK;CAE1C,YAAY,mBAAmB,SAAS,IAAI,EAAE,2BAC7C,QAAQ,IAAI,EAAE,2BAA2B,KAAK;CAK/C,YAAY,mBAAmB,GAAG,iBAAiB,EAAE;CAMrD,YAAY,SAAS,UAAU,IAAI,EAAE,iBACpC,QAAQ,IAAI,EAAE,iBAAiB,KAAK;CAWrC,YAAY,aAAa,KAAK,IAAI,EAAE,eACjC,IAAI,EAAE,YAAY,GACnB,IAAI,EAAE,OAAO,EAAE;CAEjB,YAAY,QAAQ,IAAI,IAAI,EAAE,WAAW,EAAE;CAK3C,YAAY,cAAc,WAAW,IAAI,EAAE,oBACxC,IAAI,EAAE,iBAAiB,GACxB,IAAI,EAAE,OAAO,EAAE;CAEjB,YAAY,SAAS,IAAI,IAAI,EAAE,YAAY,EAAE;CAE7C,YAAY,QAAQ,cAAc;CAKlC,YAAY,yBAAyB,GAAG,IAAI,EAAE,wBAAwB,SAAS;CAC/E,YAAY,oBAAoB,GAAG,IAAI,EAAE,mBAAmB,SAAS;CAErE,YAAY,eAAe,YAAY,IAAI,EAAE,kBAAkB,UAClC,IAAI,EAAE,kBAAkB,UACxB,IAAI,EAAE,kBAAkB,MAC5B,IAAI,EAAE,YAAY,IACtB,IAAI,EAAE,OAAO,MACT;CAEzB,YAAY,oBAAoB,YAAY,IAAI,EAAE,uBAAuB,UACvC,IAAI,EAAE,uBAAuB,UAC7B,IAAI,EAAE,uBAAuB,MACjC,IAAI,EAAE,iBAAiB,IAC3B,IAAI,EAAE,OAAO,MACT;CAE9B,YAAY,UAAU,IAAI,IAAI,EAAE,MAAM,MAAM,IAAI,EAAE,aAAa,EAAE;CACjE,YAAY,eAAe,IAAI,IAAI,EAAE,MAAM,MAAM,IAAI,EAAE,kBAAkB,EAAE;CAI3E,YAAY,eAAe,oBACD,0BAA0B,iBACtB,0BAA0B,mBAC1B,0BAA0B,KAAK;CAC7D,YAAY,UAAU,GAAG,IAAI,EAAE,aAAa,aAAa;CACzD,YAAY,cAAc,IAAI,EAAE,eAClB,MAAM,IAAI,EAAE,YAAY,OAClB,IAAI,EAAE,OAAO,eACL;CAC5B,YAAY,aAAa,IAAI,EAAE,SAAS,IAAI;CAC5C,YAAY,iBAAiB,IAAI,EAAE,aAAa,IAAI;CAIpD,YAAY,aAAa,SAAS;CAElC,YAAY,aAAa,SAAS,IAAI,EAAE,WAAW,OAAO,IAAI;CAC9D,QAAQ,mBAAmB;CAE3B,YAAY,SAAS,IAAI,IAAI,EAAE,aAAa,IAAI,EAAE,aAAa,EAAE;CACjE,YAAY,cAAc,IAAI,IAAI,EAAE,aAAa,IAAI,EAAE,kBAAkB,EAAE;CAI3E,YAAY,aAAa,SAAS;CAElC,YAAY,aAAa,SAAS,IAAI,EAAE,WAAW,OAAO,IAAI;CAC9D,QAAQ,mBAAmB;CAE3B,YAAY,SAAS,IAAI,IAAI,EAAE,aAAa,IAAI,EAAE,aAAa,EAAE;CACjE,YAAY,cAAc,IAAI,IAAI,EAAE,aAAa,IAAI,EAAE,kBAAkB,EAAE;CAG3E,YAAY,mBAAmB,IAAI,IAAI,EAAE,MAAM,OAAO,IAAI,EAAE,YAAY,MAAM;CAC9E,YAAY,cAAc,IAAI,IAAI,EAAE,MAAM,OAAO,IAAI,EAAE,WAAW,MAAM;CAIxE,YAAY,kBAAkB,SAAS,IAAI,EAAE,MAC5C,OAAO,IAAI,EAAE,YAAY,GAAG,IAAI,EAAE,aAAa,IAAI,IAAI;CACxD,QAAQ,wBAAwB;CAMhC,YAAY,eAAe,SAAS,IAAI,EAAE,aAAa,aAEhC,IAAI,EAAE,aAAa,OAChB;CAE1B,YAAY,oBAAoB,SAAS,IAAI,EAAE,kBAAkB,aAErC,IAAI,EAAE,kBAAkB,OACrB;CAG/B,YAAY,QAAQ,iBAAiB;CAErC,YAAY,QAAQ,2BAA2B;CAC/C,YAAY,WAAW,6BAA6B;;;;CC3NpD,MAAM,cAAc,OAAO,OAAO,EAAE,OAAO,KAAK,CAAC;CACjD,MAAM,YAAY,OAAO,OAAO,CAAE,CAAC;CACnC,MAAM,gBAAe,YAAW;EAC9B,IAAI,CAAC,SACH,OAAO;EAGT,IAAI,OAAO,YAAY,UACrB,OAAO;EAGT,OAAO;CACT;CACA,OAAO,UAAU;;;;CCdjB,MAAM,UAAU;CAChB,MAAM,sBAAsB,GAAG,MAAM;EACnC,IAAI,OAAO,MAAM,YAAY,OAAO,MAAM,UACxC,OAAO,MAAM,IAAI,IAAI,IAAI,IAAI,KAAK;EAGpC,MAAM,OAAO,QAAQ,KAAK,CAAC;EAC3B,MAAM,OAAO,QAAQ,KAAK,CAAC;EAE3B,IAAI,QAAQ,MAAM;GAChB,IAAI,CAAC;GACL,IAAI,CAAC;EACP;EAEA,OAAO,MAAM,IAAI,IACZ,QAAQ,CAAC,OAAQ,KACjB,QAAQ,CAAC,OAAQ,IAClB,IAAI,IAAI,KACR;CACN;CAEA,MAAM,uBAAuB,GAAG,MAAM,mBAAmB,GAAG,CAAC;CAE7D,OAAO,UAAU;EACf;EACA;CACF;;;;CC1BA,MAAM,QAAA,cAAA;CACN,MAAM,EAAE,YAAY,qBAAA,kBAAA;CACpB,MAAM,EAAE,QAAQ,IAAI,MAAA,WAAA;CAEpB,MAAM,eAAA,sBAAA;CACN,MAAM,EAAE,uBAAA,oBAAA;CAER,MAAM,0BAA0B,YAAY,eAAe;EACzD,MAAM,cAAc,WAAW,MAAM,GAAG;EACxC,IAAI,YAAY,SAAS,WAAW,QAClC,OAAO;EAGT,KAAK,IAAI,IAAI,GAAG,IAAI,YAAY,QAAQ,KACtC,IAAI,mBAAmB,WAAW,IAAI,YAAY,EAAE,MAAM,GACxD,OAAO;EAIX,OAAO;CACT;CAuUA,OAAO,UAAU,MArUX,OAAO;EACX,YAAa,SAAS,SAAS;GAC7B,UAAU,aAAa,OAAO;GAE9B,IAAI,mBAAmB,QAAQ;IAC7B,IAAI,QAAQ,UAAU,CAAC,CAAC,QAAQ,SAC9B,QAAQ,sBAAsB,CAAC,CAAC,QAAQ,mBACxC,OAAO;SAEP,UAAU,QAAQ;GAEtB,OAAO,IAAI,OAAO,YAAY,UAC5B,MAAM,IAAI,UAAU,gDAAgD,OAAO,QAAQ,GAAG;GAGxF,IAAI,QAAQ,SAAS,YACnB,MAAM,IAAI,UACR,0BAA0B,WAAW,YACvC;GAGF,MAAM,UAAU,SAAS,OAAO;GAChC,KAAK,UAAU;GACf,KAAK,QAAQ,CAAC,CAAC,QAAQ;GAGvB,KAAK,oBAAoB,CAAC,CAAC,QAAQ;GAEnC,MAAM,IAAI,QAAQ,KAAK,CAAC,CAAC,MAAM,QAAQ,QAAQ,GAAG,EAAE,SAAS,GAAG,EAAE,KAAK;GAEvE,IAAI,CAAC,GACH,MAAM,IAAI,UAAU,oBAAoB,SAAS;GAGnD,KAAK,MAAM;GAGX,KAAK,QAAQ,CAAC,EAAE;GAChB,KAAK,QAAQ,CAAC,EAAE;GAChB,KAAK,QAAQ,CAAC,EAAE;GAEhB,IAAI,KAAK,QAAQ,oBAAoB,KAAK,QAAQ,GAChD,MAAM,IAAI,UAAU,uBAAuB;GAG7C,IAAI,KAAK,QAAQ,oBAAoB,KAAK,QAAQ,GAChD,MAAM,IAAI,UAAU,uBAAuB;GAG7C,IAAI,KAAK,QAAQ,oBAAoB,KAAK,QAAQ,GAChD,MAAM,IAAI,UAAU,uBAAuB;GAI7C,IAAI,CAAC,EAAE,IACL,KAAK,aAAa,CAAC;QAEnB,KAAK,aAAa,EAAE,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,OAAO;IAC5C,IAAI,WAAW,KAAK,EAAE,GAAG;KACvB,MAAM,MAAM,CAAC;KACb,IAAI,OAAO,KAAK,MAAM,kBACpB,OAAO;IAEX;IACA,OAAO;GACT,CAAC;GAGH,KAAK,QAAQ,EAAE,KAAK,EAAE,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC;GACvC,KAAK,OAAO;EACd;EAEA,SAAU;GACR,KAAK,UAAU,GAAG,KAAK,MAAM,GAAG,KAAK,MAAM,GAAG,KAAK;GACnD,IAAI,KAAK,WAAW,QAClB,KAAK,WAAW,IAAI,KAAK,WAAW,KAAK,GAAG;GAE9C,OAAO,KAAK;EACd;EAEA,WAAY;GACV,OAAO,KAAK;EACd;EAEA,QAAS,OAAO;GACd,MAAM,kBAAkB,KAAK,SAAS,KAAK,SAAS,KAAK;GACzD,IAAI,EAAE,iBAAiB,SAAS;IAC9B,IAAI,OAAO,UAAU,YAAY,UAAU,KAAK,SAC9C,OAAO;IAET,QAAQ,IAAI,OAAO,OAAO,KAAK,OAAO;GACxC;GAEA,IAAI,MAAM,YAAY,KAAK,SACzB,OAAO;GAGT,OAAO,KAAK,YAAY,KAAK,KAAK,KAAK,WAAW,KAAK;EACzD;EAEA,YAAa,OAAO;GAClB,IAAI,EAAE,iBAAiB,SACrB,QAAQ,IAAI,OAAO,OAAO,KAAK,OAAO;GAGxC,IAAI,KAAK,QAAQ,MAAM,OACrB,OAAO;GAET,IAAI,KAAK,QAAQ,MAAM,OACrB,OAAO;GAET,IAAI,KAAK,QAAQ,MAAM,OACrB,OAAO;GAET,IAAI,KAAK,QAAQ,MAAM,OACrB,OAAO;GAET,IAAI,KAAK,QAAQ,MAAM,OACrB,OAAO;GAET,IAAI,KAAK,QAAQ,MAAM,OACrB,OAAO;GAET,OAAO;EACT;EAEA,WAAY,OAAO;GACjB,IAAI,EAAE,iBAAiB,SACrB,QAAQ,IAAI,OAAO,OAAO,KAAK,OAAO;GAIxC,IAAI,KAAK,WAAW,UAAU,CAAC,MAAM,WAAW,QAC9C,OAAO;QACF,IAAI,CAAC,KAAK,WAAW,UAAU,MAAM,WAAW,QACrD,OAAO;QACF,IAAI,CAAC,KAAK,WAAW,UAAU,CAAC,MAAM,WAAW,QACtD,OAAO;GAGT,IAAI,IAAI;GACR,GAAG;IACD,MAAM,IAAI,KAAK,WAAW;IAC1B,MAAM,IAAI,MAAM,WAAW;IAC3B,MAAM,sBAAsB,GAAG,GAAG,CAAC;IACnC,IAAI,MAAM,KAAA,KAAa,MAAM,KAAA,GAC3B,OAAO;SACF,IAAI,MAAM,KAAA,GACf,OAAO;SACF,IAAI,MAAM,KAAA,GACf,OAAO;SACF,IAAI,MAAM,GACf;SAEA,OAAO,mBAAmB,GAAG,CAAC;GAElC,SAAS,EAAE;EACb;EAEA,aAAc,OAAO;GACnB,IAAI,EAAE,iBAAiB,SACrB,QAAQ,IAAI,OAAO,OAAO,KAAK,OAAO;GAGxC,IAAI,IAAI;GACR,GAAG;IACD,MAAM,IAAI,KAAK,MAAM;IACrB,MAAM,IAAI,MAAM,MAAM;IACtB,MAAM,iBAAiB,GAAG,GAAG,CAAC;IAC9B,IAAI,MAAM,KAAA,KAAa,MAAM,KAAA,GAC3B,OAAO;SACF,IAAI,MAAM,KAAA,GACf,OAAO;SACF,IAAI,MAAM,KAAA,GACf,OAAO;SACF,IAAI,MAAM,GACf;SAEA,OAAO,mBAAmB,GAAG,CAAC;GAElC,SAAS,EAAE;EACb;EAIA,IAAK,SAAS,YAAY,gBAAgB;GACxC,IAAI,QAAQ,WAAW,KAAK,GAAG;IAC7B,IAAI,CAAC,cAAc,mBAAmB,OACpC,MAAM,IAAI,MAAM,iDAAiD;IAGnE,IAAI,YAAY;KACd,MAAM,QAAQ,IAAI,aAAa,MAAM,KAAK,QAAQ,QAAQ,GAAG,EAAE,mBAAmB,GAAG,EAAE,WAAW;KAClG,IAAI,CAAC,SAAS,MAAM,OAAO,YACzB,MAAM,IAAI,MAAM,uBAAuB,YAAY;IAEvD;GACF;GAEA,QAAQ,SAAR;IACE,KAAK;KACH,KAAK,WAAW,SAAS;KACzB,KAAK,QAAQ;KACb,KAAK,QAAQ;KACb,KAAK;KACL,KAAK,IAAI,OAAO,YAAY,cAAc;KAC1C;IACF,KAAK;KACH,KAAK,WAAW,SAAS;KACzB,KAAK,QAAQ;KACb,KAAK;KACL,KAAK,IAAI,OAAO,YAAY,cAAc;KAC1C;IACF,KAAK;KAIH,KAAK,WAAW,SAAS;KACzB,KAAK,IAAI,SAAS,YAAY,cAAc;KAC5C,KAAK,IAAI,OAAO,YAAY,cAAc;KAC1C;IAGF,KAAK;KACH,IAAI,KAAK,WAAW,WAAW,GAC7B,KAAK,IAAI,SAAS,YAAY,cAAc;KAE9C,KAAK,IAAI,OAAO,YAAY,cAAc;KAC1C;IACF,KAAK;KACH,IAAI,KAAK,WAAW,WAAW,GAC7B,MAAM,IAAI,MAAM,WAAW,KAAK,IAAI,qBAAqB;KAE3D,KAAK,WAAW,SAAS;KACzB;IAEF,KAAK;KAKH,IACE,KAAK,UAAU,KACf,KAAK,UAAU,KACf,KAAK,WAAW,WAAW,GAE3B,KAAK;KAEP,KAAK,QAAQ;KACb,KAAK,QAAQ;KACb,KAAK,aAAa,CAAC;KACnB;IACF,KAAK;KAKH,IAAI,KAAK,UAAU,KAAK,KAAK,WAAW,WAAW,GACjD,KAAK;KAEP,KAAK,QAAQ;KACb,KAAK,aAAa,CAAC;KACnB;IACF,KAAK;KAKH,IAAI,KAAK,WAAW,WAAW,GAC7B,KAAK;KAEP,KAAK,aAAa,CAAC;KACnB;IAGF,KAAK,OAAO;KACV,MAAM,OAAO,OAAO,cAAc,IAAI,IAAI;KAE1C,IAAI,KAAK,WAAW,WAAW,GAC7B,KAAK,aAAa,CAAC,IAAI;UAClB;MACL,IAAI,IAAI,KAAK,WAAW;MACxB,OAAO,EAAE,KAAK,GACZ,IAAI,OAAO,KAAK,WAAW,OAAO,UAAU;OAC1C,KAAK,WAAW,EAAE;OAClB,IAAI;MACN;MAEF,IAAI,MAAM,IAAI;OAEZ,IAAI,eAAe,KAAK,WAAW,KAAK,GAAG,KAAK,mBAAmB,OACjE,MAAM,IAAI,MAAM,uDAAuD;OAEzE,KAAK,WAAW,KAAK,IAAI;MAC3B;KACF;KACA,IAAI,YAAY;MAGd,IAAI,aAAa,CAAC,YAAY,IAAI;MAClC,IAAI,mBAAmB,OACrB,aAAa,CAAC,UAAU;MAE1B,IAAI,uBAAuB,KAAK,YAAY,UAAU,GAAG;OACvD,MAAM,iBAAiB,KAAK,WAAW,WAAW,MAAM,GAAG,CAAC,CAAC;OAC7D,IAAI,MAAM,cAAc,GACtB,KAAK,aAAa;MAEtB,OACE,KAAK,aAAa;KAEtB;KACA;IACF;IACA,SACE,MAAM,IAAI,MAAM,+BAA+B,SAAS;GAC5D;GACA,KAAK,MAAM,KAAK,OAAO;GACvB,IAAI,KAAK,MAAM,QACb,KAAK,OAAO,IAAI,KAAK,MAAM,KAAK,GAAG;GAErC,OAAO;EACT;CACF;;;;CCzVA,MAAM,SAAA,iBAAA;CACN,MAAM,SAAS,SAAS,SAAS,cAAc,UAAU;EACvD,IAAI,mBAAmB,QACrB,OAAO;EAET,IAAI;GACF,OAAO,IAAI,OAAO,SAAS,OAAO;EACpC,SAAS,IAAI;GACX,IAAI,CAAC,aACH,OAAO;GAET,MAAM;EACR;CACF;CAEA,OAAO,UAAU;;;;CCfjB,MAAM,QAAA,cAAA;CACN,MAAM,SAAS,SAAS,YAAY;EAClC,MAAM,IAAI,MAAM,SAAS,OAAO;EAChC,OAAO,IAAI,EAAE,UAAU;CACzB;CACA,OAAO,UAAU;;;;CCLjB,MAAM,QAAA,cAAA;CACN,MAAM,SAAS,SAAS,YAAY;EAClC,MAAM,IAAI,MAAM,QAAQ,KAAK,CAAC,CAAC,QAAQ,UAAU,EAAE,GAAG,OAAO;EAC7D,OAAO,IAAI,EAAE,UAAU;CACzB;CACA,OAAO,UAAU;;;;CCLjB,MAAM,SAAA,iBAAA;CAEN,MAAM,OAAO,SAAS,SAAS,SAAS,YAAY,mBAAmB;EACrE,IAAI,OAAQ,YAAa,UAAU;GACjC,iBAAiB;GACjB,aAAa;GACb,UAAU,KAAA;EACZ;EAEA,IAAI;GACF,OAAO,IAAI,OACT,mBAAmB,SAAS,QAAQ,UAAU,SAC9C,OACF,CAAC,CAAC,IAAI,SAAS,YAAY,cAAc,CAAC,CAAC;EAC7C,SAAS,IAAI;GACX,OAAO;EACT;CACF;CACA,OAAO,UAAU;;;;CClBjB,MAAM,QAAA,cAAA;CAEN,MAAM,QAAQ,UAAU,aAAa;EACnC,MAAM,KAAK,MAAM,UAAU,MAAM,IAAI;EACrC,MAAM,KAAK,MAAM,UAAU,MAAM,IAAI;EACrC,MAAM,aAAa,GAAG,QAAQ,EAAE;EAEhC,IAAI,eAAe,GACjB,OAAO;EAGT,MAAM,WAAW,aAAa;EAC9B,MAAM,cAAc,WAAW,KAAK;EACpC,MAAM,aAAa,WAAW,KAAK;EACnC,MAAM,aAAa,CAAC,CAAC,YAAY,WAAW;EAG5C,IAAI,CAFe,CAAC,WAAW,WAAW,UAEzB,CAAC,YAAY;GAQ5B,IAAI,CAAC,WAAW,SAAS,CAAC,WAAW,OACnC,OAAO;GAIT,IAAI,WAAW,YAAY,WAAW,MAAM,GAAG;IAC7C,IAAI,WAAW,SAAS,CAAC,WAAW,OAClC,OAAO;IAET,OAAO;GACT;EACF;EAGA,MAAM,SAAS,aAAa,QAAQ;EAEpC,IAAI,GAAG,UAAU,GAAG,OAClB,OAAO,SAAS;EAGlB,IAAI,GAAG,UAAU,GAAG,OAClB,OAAO,SAAS;EAGlB,IAAI,GAAG,UAAU,GAAG,OAClB,OAAO,SAAS;EAIlB,OAAO;CACT;CAEA,OAAO,UAAU;;;;CCzDjB,MAAM,SAAA,iBAAA;CACN,MAAM,SAAS,GAAG,UAAU,IAAI,OAAO,GAAG,KAAK,CAAC,CAAC;CACjD,OAAO,UAAU;;;;CCFjB,MAAM,SAAA,iBAAA;CACN,MAAM,SAAS,GAAG,UAAU,IAAI,OAAO,GAAG,KAAK,CAAC,CAAC;CACjD,OAAO,UAAU;;;;CCFjB,MAAM,SAAA,iBAAA;CACN,MAAM,SAAS,GAAG,UAAU,IAAI,OAAO,GAAG,KAAK,CAAC,CAAC;CACjD,OAAO,UAAU;;;;CCFjB,MAAM,QAAA,cAAA;CACN,MAAM,cAAc,SAAS,YAAY;EACvC,MAAM,SAAS,MAAM,SAAS,OAAO;EACrC,OAAQ,UAAU,OAAO,WAAW,SAAU,OAAO,aAAa;CACpE;CACA,OAAO,UAAU;;;;CCLjB,MAAM,SAAA,iBAAA;CACN,MAAM,WAAW,GAAG,GAAG,UACrB,IAAI,OAAO,GAAG,KAAK,CAAC,CAAC,QAAQ,IAAI,OAAO,GAAG,KAAK,CAAC;CAEnD,OAAO,UAAU;;;;CCJjB,MAAM,UAAA,gBAAA;CACN,MAAM,YAAY,GAAG,GAAG,UAAU,QAAQ,GAAG,GAAG,KAAK;CACrD,OAAO,UAAU;;;;CCFjB,MAAM,UAAA,gBAAA;CACN,MAAM,gBAAgB,GAAG,MAAM,QAAQ,GAAG,GAAG,IAAI;CACjD,OAAO,UAAU;;;;CCFjB,MAAM,SAAA,iBAAA;CACN,MAAM,gBAAgB,GAAG,GAAG,UAAU;EACpC,MAAM,WAAW,IAAI,OAAO,GAAG,KAAK;EACpC,MAAM,WAAW,IAAI,OAAO,GAAG,KAAK;EACpC,OAAO,SAAS,QAAQ,QAAQ,KAAK,SAAS,aAAa,QAAQ;CACrE;CACA,OAAO,UAAU;;;;CCNjB,MAAM,eAAA,sBAAA;CACN,MAAM,QAAQ,MAAM,UAAU,KAAK,MAAM,GAAG,MAAM,aAAa,GAAG,GAAG,KAAK,CAAC;CAC3E,OAAO,UAAU;;;;CCFjB,MAAM,eAAA,sBAAA;CACN,MAAM,SAAS,MAAM,UAAU,KAAK,MAAM,GAAG,MAAM,aAAa,GAAG,GAAG,KAAK,CAAC;CAC5E,OAAO,UAAU;;;;CCFjB,MAAM,UAAA,gBAAA;CACN,MAAM,MAAM,GAAG,GAAG,UAAU,QAAQ,GAAG,GAAG,KAAK,IAAI;CACnD,OAAO,UAAU;;;;CCFjB,MAAM,UAAA,gBAAA;CACN,MAAM,MAAM,GAAG,GAAG,UAAU,QAAQ,GAAG,GAAG,KAAK,IAAI;CACnD,OAAO,UAAU;;;;CCFjB,MAAM,UAAA,gBAAA;CACN,MAAM,MAAM,GAAG,GAAG,UAAU,QAAQ,GAAG,GAAG,KAAK,MAAM;CACrD,OAAO,UAAU;;;;CCFjB,MAAM,UAAA,gBAAA;CACN,MAAM,OAAO,GAAG,GAAG,UAAU,QAAQ,GAAG,GAAG,KAAK,MAAM;CACtD,OAAO,UAAU;;;;CCFjB,MAAM,UAAA,gBAAA;CACN,MAAM,OAAO,GAAG,GAAG,UAAU,QAAQ,GAAG,GAAG,KAAK,KAAK;CACrD,OAAO,UAAU;;;;CCFjB,MAAM,UAAA,gBAAA;CACN,MAAM,OAAO,GAAG,GAAG,UAAU,QAAQ,GAAG,GAAG,KAAK,KAAK;CACrD,OAAO,UAAU;;;;CCFjB,MAAM,KAAA,WAAA;CACN,MAAM,MAAA,YAAA;CACN,MAAM,KAAA,WAAA;CACN,MAAM,MAAA,YAAA;CACN,MAAM,KAAA,WAAA;CACN,MAAM,MAAA,YAAA;CAEN,MAAM,OAAO,GAAG,IAAI,GAAG,UAAU;EAC/B,QAAQ,IAAR;GACE,KAAK;IACH,IAAI,OAAO,MAAM,UACf,IAAI,EAAE;IAER,IAAI,OAAO,MAAM,UACf,IAAI,EAAE;IAER,OAAO,MAAM;GAEf,KAAK;IACH,IAAI,OAAO,MAAM,UACf,IAAI,EAAE;IAER,IAAI,OAAO,MAAM,UACf,IAAI,EAAE;IAER,OAAO,MAAM;GAEf,KAAK;GACL,KAAK;GACL,KAAK,MACH,OAAO,GAAG,GAAG,GAAG,KAAK;GAEvB,KAAK,MACH,OAAO,IAAI,GAAG,GAAG,KAAK;GAExB,KAAK,KACH,OAAO,GAAG,GAAG,GAAG,KAAK;GAEvB,KAAK,MACH,OAAO,IAAI,GAAG,GAAG,KAAK;GAExB,KAAK,KACH,OAAO,GAAG,GAAG,GAAG,KAAK;GAEvB,KAAK,MACH,OAAO,IAAI,GAAG,GAAG,KAAK;GAExB,SACE,MAAM,IAAI,UAAU,qBAAqB,IAAI;EACjD;CACF;CACA,OAAO,UAAU;;;;CCnDjB,MAAM,SAAA,iBAAA;CACN,MAAM,QAAA,cAAA;CACN,MAAM,EAAE,QAAQ,IAAI,MAAA,WAAA;CAEpB,MAAM,UAAU,SAAS,YAAY;EACnC,IAAI,mBAAmB,QACrB,OAAO;EAGT,IAAI,OAAO,YAAY,UACrB,UAAU,OAAO,OAAO;EAG1B,IAAI,OAAO,YAAY,UACrB,OAAO;EAGT,UAAU,WAAW,CAAC;EAEtB,IAAI,QAAQ;EACZ,IAAI,CAAC,QAAQ,KACX,QAAQ,QAAQ,MAAM,QAAQ,oBAAoB,GAAG,EAAE,cAAc,GAAG,EAAE,OAAO;OAC5E;GAUL,MAAM,iBAAiB,QAAQ,oBAAoB,GAAG,EAAE,iBAAiB,GAAG,EAAE;GAC9E,IAAI;GACJ,QAAQ,OAAO,eAAe,KAAK,OAAO,OACrC,CAAC,SAAS,MAAM,QAAQ,MAAM,EAAE,CAAC,WAAW,QAAQ,SACvD;IACA,IAAI,CAAC,SACC,KAAK,QAAQ,KAAK,EAAE,CAAC,WAAW,MAAM,QAAQ,MAAM,EAAE,CAAC,QAC3D,QAAQ;IAEV,eAAe,YAAY,KAAK,QAAQ,KAAK,EAAE,CAAC,SAAS,KAAK,EAAE,CAAC;GACnE;GAEA,eAAe,YAAY;EAC7B;EAEA,IAAI,UAAU,MACZ,OAAO;EAGT,MAAM,QAAQ,MAAM;EACpB,MAAM,QAAQ,MAAM,MAAM;EAC1B,MAAM,QAAQ,MAAM,MAAM;EAC1B,MAAM,aAAa,QAAQ,qBAAqB,MAAM,KAAK,IAAI,MAAM,OAAO;EAC5E,MAAM,QAAQ,QAAQ,qBAAqB,MAAM,KAAK,IAAI,MAAM,OAAO;EAEvE,OAAO,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,aAAa,SAAS,OAAO;CACzE;CACA,OAAO,UAAU;;;;CC3DjB,MAAM,QAAA,cAAA;CACN,MAAM,YAAA,kBAAA;CACN,MAAM,SAAA,iBAAA;CAEN,MAAM,YAAY,SAAS,YAAY,YAAY;EACjD,IAAI,CAAC,UAAU,cAAc,SAAS,UAAU,GAC9C,OAAO;EAGT,MAAM,gBAAgB,kBAAkB,SAAS,OAAO;EACxD,OAAO,iBAAiB,aAAa,eAAe,UAAU;CAChE;CAEA,MAAM,qBAAqB,SAAS,YAAY;EAC9C,MAAM,uBACJ,mBAAmB,SAAS,QAAQ,UAAU;EAGhD,OAAO,MAAM,sBAAsB,OAAO;CAC5C;CAEA,MAAM,gBAAgB,SAAS,eAAe;EAC5C,IAAI,aAAa,UAAU,GACzB,OAAO,QAAQ;EAGjB,QAAQ,aAAa,CAAC;EAEtB,QAAQ,YAAR;GACE,KAAK;IACH,QAAQ,QAAQ;IAChB,QAAQ,QAAQ;IAChB;GACF,KAAK,SACH,QAAQ,QAAQ;EAEpB;EAEA,OAAO,QAAQ,OAAO;CACxB;CAEA,MAAM,gBAAgB,SAAS;EAC7B,OAAO,KAAK,WAAW,KAAK;CAC9B;CAEA,OAAO,UAAU;;;;CC7CjB,IAAM,WAAN,MAAe;EACb,cAAe;GACb,KAAK,MAAM;GACX,KAAK,sBAAM,IAAI,IAAI;EACrB;EAEA,IAAK,KAAK;GACR,MAAM,QAAQ,KAAK,IAAI,IAAI,GAAG;GAC9B,IAAI,UAAU,KAAA,GACZ;QACK;IAEL,KAAK,IAAI,OAAO,GAAG;IACnB,KAAK,IAAI,IAAI,KAAK,KAAK;IACvB,OAAO;GACT;EACF;EAEA,OAAQ,KAAK;GACX,OAAO,KAAK,IAAI,OAAO,GAAG;EAC5B;EAEA,IAAK,KAAK,OAAO;GAGf,IAAI,CAFY,KAAK,OAAO,GAEjB,KAAK,UAAU,KAAA,GAAW;IAEnC,IAAI,KAAK,IAAI,QAAQ,KAAK,KAAK;KAC7B,MAAM,WAAW,KAAK,IAAI,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC;KACxC,KAAK,OAAO,QAAQ;IACtB;IAEA,KAAK,IAAI,IAAI,KAAK,KAAK;GACzB;GAEA,OAAO;EACT;CACF;CAEA,OAAO,UAAU;;;;CCvCjB,MAAM,mBAAmB;CAuNzB,OAAO,UAAU,MApNX,MAAM;EACV,YAAa,OAAO,SAAS;GAC3B,UAAU,aAAa,OAAO;GAE9B,IAAI,iBAAiB,OAAO;IAC1B,IACE,MAAM,UAAU,CAAC,CAAC,QAAQ,SAC1B,MAAM,sBAAsB,CAAC,CAAC,QAAQ,mBAEtC,OAAO;SAEP,OAAO,IAAI,MAAM,MAAM,KAAK,OAAO;GAEvC;GAEA,IAAI,iBAAiB,YAAY;IAE/B,KAAK,MAAM,MAAM;IACjB,KAAK,MAAM,CAAC,CAAC,KAAK,CAAC;IACnB,KAAK,YAAY,KAAA;IACjB,OAAO;GACT;GAEA,KAAK,UAAU;GACf,KAAK,QAAQ,CAAC,CAAC,QAAQ;GACvB,KAAK,oBAAoB,CAAC,CAAC,QAAQ;GAKnC,KAAK,MAAM,MAAM,KAAK,CAAC,CAAC,QAAQ,kBAAkB,GAAG;GAGrD,KAAK,MAAM,KAAK,IACb,MAAM,IAAI,CAAC,CAEX,KAAI,MAAK,KAAK,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC,CAInC,QAAO,MAAK,EAAE,MAAM;GAEvB,IAAI,CAAC,KAAK,IAAI,QACZ,MAAM,IAAI,UAAU,yBAAyB,KAAK,KAAK;GAIzD,IAAI,KAAK,IAAI,SAAS,GAAG;IAEvB,MAAM,QAAQ,KAAK,IAAI;IACvB,KAAK,MAAM,KAAK,IAAI,QAAO,MAAK,CAAC,UAAU,EAAE,EAAE,CAAC;IAChD,IAAI,KAAK,IAAI,WAAW,GACtB,KAAK,MAAM,CAAC,KAAK;SACZ,IAAI,KAAK,IAAI,SAAS,GAEtB;UAAA,MAAM,KAAK,KAAK,KACnB,IAAI,EAAE,WAAW,KAAK,MAAM,EAAE,EAAE,GAAG;MACjC,KAAK,MAAM,CAAC,CAAC;MACb;KACF;;GAGN;GAEA,KAAK,YAAY,KAAA;EACnB;EAEA,IAAI,QAAS;GACX,IAAI,KAAK,cAAc,KAAA,GAAW;IAChC,KAAK,YAAY;IACjB,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,IAAI,QAAQ,KAAK;KACxC,IAAI,IAAI,GACN,KAAK,aAAa;KAEpB,MAAM,QAAQ,KAAK,IAAI;KACvB,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;MACrC,IAAI,IAAI,GACN,KAAK,aAAa;MAEpB,KAAK,aAAa,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,KAAK;KAC7C;IACF;GACF;GACA,OAAO,KAAK;EACd;EAEA,SAAU;GACR,OAAO,KAAK;EACd;EAEA,WAAY;GACV,OAAO,KAAK;EACd;EAEA,WAAY,OAAO;GAEjB,QAAQ,MAAM,QAAQ,cAAc,EAAE;GAOtC,MAAM,YAFH,KAAK,QAAQ,qBAAqB,4BAClC,KAAK,QAAQ,SAAS,eACE,MAAM;GACjC,MAAM,SAAS,MAAM,IAAI,OAAO;GAChC,IAAI,QACF,OAAO;GAGT,MAAM,QAAQ,KAAK,QAAQ;GAE3B,MAAM,KAAK,QAAQ,GAAG,EAAE,oBAAoB,GAAG,EAAE;GACjD,QAAQ,MAAM,QAAQ,IAAI,cAAc,KAAK,QAAQ,iBAAiB,CAAC;GACvE,MAAM,kBAAkB,KAAK;GAG7B,QAAQ,MAAM,QAAQ,GAAG,EAAE,iBAAiB,qBAAqB;GACjE,MAAM,mBAAmB,KAAK;GAG9B,QAAQ,MAAM,QAAQ,GAAG,EAAE,YAAY,gBAAgB;GACvD,MAAM,cAAc,KAAK;GAGzB,QAAQ,MAAM,QAAQ,GAAG,EAAE,YAAY,gBAAgB;GACvD,MAAM,cAAc,KAAK;GAKzB,IAAI,YAAY,MACb,MAAM,GAAG,CAAC,CACV,KAAI,SAAQ,gBAAgB,MAAM,KAAK,OAAO,CAAC,CAAC,CAChD,KAAK,GAAG,CAAC,CACT,MAAM,KAAK,CAAC,CAEZ,KAAI,SAAQ,YAAY,MAAM,KAAK,OAAO,CAAC;GAE9C,IAAI,OAEF,YAAY,UAAU,QAAO,SAAQ;IACnC,MAAM,wBAAwB,MAAM,KAAK,OAAO;IAChD,OAAO,CAAC,CAAC,KAAK,MAAM,GAAG,EAAE,gBAAgB;GAC3C,CAAC;GAEH,MAAM,cAAc,SAAS;GAK7B,MAAM,2BAAW,IAAI,IAAI;GACzB,MAAM,cAAc,UAAU,KAAI,SAAQ,IAAI,WAAW,MAAM,KAAK,OAAO,CAAC;GAC5E,KAAK,MAAM,QAAQ,aAAa;IAC9B,IAAI,UAAU,IAAI,GAChB,OAAO,CAAC,IAAI;IAEd,SAAS,IAAI,KAAK,OAAO,IAAI;GAC/B;GACA,IAAI,SAAS,OAAO,KAAK,SAAS,IAAI,EAAE,GACtC,SAAS,OAAO,EAAE;GAGpB,MAAM,SAAS,CAAC,GAAG,SAAS,OAAO,CAAC;GACpC,MAAM,IAAI,SAAS,MAAM;GACzB,OAAO;EACT;EAEA,WAAY,OAAO,SAAS;GAC1B,IAAI,EAAE,iBAAiB,QACrB,MAAM,IAAI,UAAU,qBAAqB;GAG3C,OAAO,KAAK,IAAI,MAAM,oBAAoB;IACxC,OACE,cAAc,iBAAiB,OAAO,KACtC,MAAM,IAAI,MAAM,qBAAqB;KACnC,OACE,cAAc,kBAAkB,OAAO,KACvC,gBAAgB,OAAO,mBAAmB;MACxC,OAAO,iBAAiB,OAAO,oBAAoB;OACjD,OAAO,eAAe,WAAW,iBAAiB,OAAO;MAC3D,CAAC;KACH,CAAC;IAEL,CAAC;GAEL,CAAC;EACH;EAGA,KAAM,SAAS;GACb,IAAI,CAAC,SACH,OAAO;GAGT,IAAI,OAAO,YAAY,UACrB,IAAI;IACF,UAAU,IAAI,OAAO,SAAS,KAAK,OAAO;GAC5C,SAAS,IAAI;IACX,OAAO;GACT;GAGF,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,IAAI,QAAQ,KACnC,IAAI,QAAQ,KAAK,IAAI,IAAI,SAAS,KAAK,OAAO,GAC5C,OAAO;GAGX,OAAO;EACT;CACF;CAKA,MAAM,QAAQ,KAAA,iBAAA,GAAQ;CAEtB,MAAM,eAAA,sBAAA;CACN,MAAM,aAAA,mBAAA;CACN,MAAM,QAAA,cAAA;CACN,MAAM,SAAA,iBAAA;CACN,MAAM,EACJ,QAAQ,IACR,KACA,GACA,uBACA,kBACA,qBAAA,WAAA;CAEF,MAAM,EAAE,yBAAyB,eAAA,kBAAA;CAGjC,MAAM,eAAe,IAAI,OAAO,IAAI,EAAE,QAAQ,GAAG;CAEjD,MAAM,aAAY,MAAK,EAAE,UAAU;CACnC,MAAM,SAAQ,MAAK,EAAE,UAAU;CAI/B,MAAM,iBAAiB,aAAa,YAAY;EAC9C,IAAI,SAAS;EACb,MAAM,uBAAuB,YAAY,MAAM;EAC/C,IAAI,iBAAiB,qBAAqB,IAAI;EAE9C,OAAO,UAAU,qBAAqB,QAAQ;GAC5C,SAAS,qBAAqB,OAAO,oBAAoB;IACvD,OAAO,eAAe,WAAW,iBAAiB,OAAO;GAC3D,CAAC;GAED,iBAAiB,qBAAqB,IAAI;EAC5C;EAEA,OAAO;CACT;CAKA,MAAM,mBAAmB,MAAM,YAAY;EACzC,OAAO,KAAK,QAAQ,GAAG,EAAE,QAAQ,EAAE;EACnC,MAAM,QAAQ,MAAM,OAAO;EAC3B,OAAO,cAAc,MAAM,OAAO;EAClC,MAAM,SAAS,IAAI;EACnB,OAAO,cAAc,MAAM,OAAO;EAClC,MAAM,UAAU,IAAI;EACpB,OAAO,eAAe,MAAM,OAAO;EACnC,MAAM,UAAU,IAAI;EACpB,OAAO,aAAa,MAAM,OAAO;EACjC,MAAM,SAAS,IAAI;EACnB,OAAO;CACT;CAEA,MAAM,OAAM,OAAM,CAAC,MAAM,GAAG,YAAY,MAAM,OAAO,OAAO;CAE5D,MAAM,sBAAsB,GAAG,GAAG,MAC/B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAChB,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC;CAUxB,MAAM,iBAAiB,MAAM,YAAY;EACvC,OAAO,KACJ,KAAK,CAAC,CACN,MAAM,KAAK,CAAC,CACZ,KAAK,MAAM,aAAa,GAAG,OAAO,CAAC,CAAC,CACpC,KAAK,GAAG;CACb;CAEA,MAAM,gBAAgB,MAAM,YAAY;EACtC,MAAM,IAAI,QAAQ,QAAQ,GAAG,EAAE,cAAc,GAAG,EAAE;EAIlD,MAAM,IAAI,QAAQ,oBAAoB,OAAO;EAC7C,OAAO,KAAK,QAAQ,IAAI,GAAG,GAAG,GAAG,GAAG,OAAO;GACzC,MAAM,SAAS,MAAM,GAAG,GAAG,GAAG,GAAG,EAAE;GACnC,IAAI;GAEJ,IAAI,IAAI,CAAC,GACP,MAAM;QACD,IAAI,IAAI,CAAC,GACd,MAAM,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE;QAC3B,IAAI,IAAI,CAAC,GAEd,MAAM,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE;QACnC,IAAI,IAAI;IACb,MAAM,mBAAmB,EAAE;IAC3B,MAAM,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GACzB,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE;GACnB,OAEE,MAAM,KAAK,EAAE,GAAG,EAAE,GAAG,EACpB,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE;GAGnB,MAAM,gBAAgB,GAAG;GACzB,OAAO;EACT,CAAC;CACH;CAUA,MAAM,iBAAiB,MAAM,YAAY;EACvC,OAAO,KACJ,KAAK,CAAC,CACN,MAAM,KAAK,CAAC,CACZ,KAAK,MAAM,aAAa,GAAG,OAAO,CAAC,CAAC,CACpC,KAAK,GAAG;CACb;CAEA,MAAM,gBAAgB,MAAM,YAAY;EACtC,MAAM,SAAS,MAAM,OAAO;EAC5B,MAAM,IAAI,QAAQ,QAAQ,GAAG,EAAE,cAAc,GAAG,EAAE;EAClD,MAAM,IAAI,QAAQ,oBAAoB,OAAO;EAC7C,OAAO,KAAK,QAAQ,IAAI,GAAG,GAAG,GAAG,GAAG,OAAO;GACzC,MAAM,SAAS,MAAM,GAAG,GAAG,GAAG,GAAG,EAAE;GACnC,IAAI;GAEJ,IAAI,IAAI,CAAC,GACP,MAAM;QACD,IAAI,IAAI,CAAC,GACd,MAAM,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE;QAC3B,IAAI,IAAI,CAAC,GAAG;IACjB,IAAI,MAAM,KACR,MAAM,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE;SAExC,MAAM,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;GAEvC,OAAO,IAAI,IAAI;IACb,MAAM,mBAAmB,EAAE;IAC3B,IAAI,MAAM,KAAK;KACb,IAAI,MAAM,KACR,MAAM,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GACzB,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE;UAEtB,MAAM,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GACzB,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE;IAErB,OACE,MAAM,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GACzB,IAAI,CAAC,IAAI,EAAE;GAEhB,OAAO;IACL,MAAM,OAAO;IACb,IAAI,MAAM,KAAK;KACb,IAAI,MAAM,KACR,MAAM,KAAK,EAAE,GAAG,EAAE,GAAG,EACpB,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE;UAEtB,MAAM,KAAK,EAAE,GAAG,EAAE,GAAG,EACpB,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE;IAErB,OACE,MAAM,KAAK,EAAE,GAAG,EAAE,GAAG,EACpB,IAAI,CAAC,IAAI,EAAE;GAEhB;GAEA,MAAM,gBAAgB,GAAG;GACzB,OAAO;EACT,CAAC;CACH;CAEA,MAAM,kBAAkB,MAAM,YAAY;EACxC,MAAM,kBAAkB,MAAM,OAAO;EACrC,OAAO,KACJ,MAAM,KAAK,CAAC,CACZ,KAAK,MAAM,cAAc,GAAG,OAAO,CAAC,CAAC,CACrC,KAAK,GAAG;CACb;CAEA,MAAM,iBAAiB,MAAM,YAAY;EACvC,OAAO,KAAK,KAAK;EACjB,MAAM,IAAI,QAAQ,QAAQ,GAAG,EAAE,eAAe,GAAG,EAAE;EACnD,OAAO,KAAK,QAAQ,IAAI,KAAK,MAAM,GAAG,GAAG,GAAG,OAAO;GACjD,MAAM,UAAU,MAAM,KAAK,MAAM,GAAG,GAAG,GAAG,EAAE;GAC5C,IAAI,mBAAmB,GAAG,GAAG,CAAC,GAC5B,OAAO;GAGT,MAAM,KAAK,IAAI,CAAC;GAChB,MAAM,KAAK,MAAM,IAAI,CAAC;GACtB,MAAM,KAAK,MAAM,IAAI,CAAC;GACtB,MAAM,OAAO;GAEb,IAAI,SAAS,OAAO,MAClB,OAAO;GAKT,KAAK,QAAQ,oBAAoB,OAAO;GAExC,IAAI,IAAI;IACN,IAAI,SAAS,OAAO,SAAS,KAE3B,MAAM;SAGN,MAAM;GAEV,OAAO,IAAI,QAAQ,MAAM;IAGvB,IAAI,IACF,IAAI;IAEN,IAAI;IAEJ,IAAI,SAAS,KAAK;KAGhB,OAAO;KACP,IAAI,IAAI;MACN,IAAI,CAAC,IAAI;MACT,IAAI;MACJ,IAAI;KACN,OAAO;MACL,IAAI,CAAC,IAAI;MACT,IAAI;KACN;IACF,OAAO,IAAI,SAAS,MAAM;KAGxB,OAAO;KACP,IAAI,IACF,IAAI,CAAC,IAAI;UAET,IAAI,CAAC,IAAI;IAEb;IAEA,IAAI,SAAS,KACX,KAAK;IAGP,MAAM,GAAG,OAAO,EAAE,GAAG,EAAE,GAAG,IAAI;GAChC,OAAO,IAAI,IACT,MAAM,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE;QAC5B,IAAI,IACT,MAAM,KAAK,EAAE,GAAG,EAAE,IAAI,GACrB,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE;GAGnB,MAAM,iBAAiB,GAAG;GAE1B,OAAO;EACT,CAAC;CACH;CAIA,MAAM,gBAAgB,MAAM,YAAY;EACtC,MAAM,gBAAgB,MAAM,OAAO;EAEnC,OAAO,KACJ,KAAK,CAAC,CACN,QAAQ,GAAG,EAAE,OAAO,EAAE;CAC3B;CAEA,MAAM,eAAe,MAAM,YAAY;EACrC,MAAM,eAAe,MAAM,OAAO;EAClC,OAAO,KACJ,KAAK,CAAC,CACN,QAAQ,GAAG,QAAQ,oBAAoB,EAAE,UAAU,EAAE,OAAO,EAAE;CACnE;CAQA,MAAM,iBAAgB,WAAU,IAC9B,MAAM,IAAI,IAAI,IAAI,KAAK,IACvB,IAAI,IAAI,IAAI,IAAI,QAAQ;EACxB,IAAI,IAAI,EAAE,GACR,OAAO;OACF,IAAI,IAAI,EAAE,GACf,OAAO,KAAK,GAAG,MAAM,QAAQ,OAAO;OAC/B,IAAI,IAAI,EAAE,GACf,OAAO,KAAK,GAAG,GAAG,GAAG,IAAI,QAAQ,OAAO;OACnC,IAAI,KACT,OAAO,KAAK;OAEZ,OAAO,KAAK,OAAO,QAAQ,OAAO;EAGpC,IAAI,IAAI,EAAE,GACR,KAAK;OACA,IAAI,IAAI,EAAE,GACf,KAAK,IAAI,CAAC,KAAK,EAAE;OACZ,IAAI,IAAI,EAAE,GACf,KAAK,IAAI,GAAG,GAAG,CAAC,KAAK,EAAE;OAClB,IAAI,KACT,KAAK,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG;OACvB,IAAI,OACT,KAAK,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC,KAAK,EAAE;OAE7B,KAAK,KAAK;EAGZ,OAAO,GAAG,KAAK,GAAG,KAAK,KAAK;CAC9B;CAEA,MAAM,WAAW,KAAK,SAAS,YAAY;EACzC,KAAK,IAAI,IAAI,GAAG,IAAI,IAAI,QAAQ,KAC9B,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,GACtB,OAAO;EAIX,IAAI,QAAQ,WAAW,UAAU,CAAC,QAAQ,mBAAmB;GAM3D,KAAK,IAAI,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;IACnC,MAAM,IAAI,EAAE,CAAC,MAAM;IACnB,IAAI,IAAI,EAAE,CAAC,WAAW,WAAW,KAC/B;IAGF,IAAI,IAAI,EAAE,CAAC,OAAO,WAAW,SAAS,GAAG;KACvC,MAAM,UAAU,IAAI,EAAE,CAAC;KACvB,IAAI,QAAQ,UAAU,QAAQ,SAC1B,QAAQ,UAAU,QAAQ,SAC1B,QAAQ,UAAU,QAAQ,OAC5B,OAAO;IAEX;GACF;GAGA,OAAO;EACT;EAEA,OAAO;CACT;;;;CC9jBA,MAAM,MAAM,OAAO,YAAY;CAqI/B,OAAO,UAAU,MAnIX,WAAW;EACf,WAAW,MAAO;GAChB,OAAO;EACT;EAEA,YAAa,MAAM,SAAS;GAC1B,UAAU,aAAa,OAAO;GAE9B,IAAI,gBAAgB,YAAY;IAC9B,IAAI,KAAK,UAAU,CAAC,CAAC,QAAQ,OAC3B,OAAO;SAEP,OAAO,KAAK;GAEhB;GAEA,OAAO,KAAK,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,KAAK,GAAG;GACxC,MAAM,cAAc,MAAM,OAAO;GACjC,KAAK,UAAU;GACf,KAAK,QAAQ,CAAC,CAAC,QAAQ;GACvB,KAAK,MAAM,IAAI;GAEf,IAAI,KAAK,WAAW,KAClB,KAAK,QAAQ;QAEb,KAAK,QAAQ,KAAK,WAAW,KAAK,OAAO;GAG3C,MAAM,QAAQ,IAAI;EACpB;EAEA,MAAO,MAAM;GACX,MAAM,IAAI,KAAK,QAAQ,QAAQ,GAAG,EAAE,mBAAmB,GAAG,EAAE;GAC5D,MAAM,IAAI,KAAK,MAAM,CAAC;GAEtB,IAAI,CAAC,GACH,MAAM,IAAI,UAAU,uBAAuB,MAAM;GAGnD,KAAK,WAAW,EAAE,OAAO,KAAA,IAAY,EAAE,KAAK;GAC5C,IAAI,KAAK,aAAa,KACpB,KAAK,WAAW;GAIlB,IAAI,CAAC,EAAE,IACL,KAAK,SAAS;QAEd,KAAK,SAAS,IAAI,OAAO,EAAE,IAAI,KAAK,QAAQ,KAAK;EAErD;EAEA,WAAY;GACV,OAAO,KAAK;EACd;EAEA,KAAM,SAAS;GACb,MAAM,mBAAmB,SAAS,KAAK,QAAQ,KAAK;GAEpD,IAAI,KAAK,WAAW,OAAO,YAAY,KACrC,OAAO;GAGT,IAAI,OAAO,YAAY,UACrB,IAAI;IACF,UAAU,IAAI,OAAO,SAAS,KAAK,OAAO;GAC5C,SAAS,IAAI;IACX,OAAO;GACT;GAGF,OAAO,IAAI,SAAS,KAAK,UAAU,KAAK,QAAQ,KAAK,OAAO;EAC9D;EAEA,WAAY,MAAM,SAAS;GACzB,IAAI,EAAE,gBAAgB,aACpB,MAAM,IAAI,UAAU,0BAA0B;GAGhD,IAAI,KAAK,aAAa,IAAI;IACxB,IAAI,KAAK,UAAU,IACjB,OAAO;IAET,OAAO,IAAI,MAAM,KAAK,OAAO,OAAO,CAAC,CAAC,KAAK,KAAK,KAAK;GACvD,OAAO,IAAI,KAAK,aAAa,IAAI;IAC/B,IAAI,KAAK,UAAU,IACjB,OAAO;IAET,OAAO,IAAI,MAAM,KAAK,OAAO,OAAO,CAAC,CAAC,KAAK,KAAK,MAAM;GACxD;GAEA,UAAU,aAAa,OAAO;GAG9B,IAAI,QAAQ,sBACT,KAAK,UAAU,cAAc,KAAK,UAAU,aAC7C,OAAO;GAET,IAAI,CAAC,QAAQ,sBACV,KAAK,MAAM,WAAW,QAAQ,KAAK,KAAK,MAAM,WAAW,QAAQ,IAClE,OAAO;GAIT,IAAI,KAAK,SAAS,WAAW,GAAG,KAAK,KAAK,SAAS,WAAW,GAAG,GAC/D,OAAO;GAGT,IAAI,KAAK,SAAS,WAAW,GAAG,KAAK,KAAK,SAAS,WAAW,GAAG,GAC/D,OAAO;GAGT,IACG,KAAK,OAAO,YAAY,KAAK,OAAO,WACrC,KAAK,SAAS,SAAS,GAAG,KAAK,KAAK,SAAS,SAAS,GAAG,GACzD,OAAO;GAGT,IAAI,IAAI,KAAK,QAAQ,KAAK,KAAK,QAAQ,OAAO,KAC5C,KAAK,SAAS,WAAW,GAAG,KAAK,KAAK,SAAS,WAAW,GAAG,GAC7D,OAAO;GAGT,IAAI,IAAI,KAAK,QAAQ,KAAK,KAAK,QAAQ,OAAO,KAC5C,KAAK,SAAS,WAAW,GAAG,KAAK,KAAK,SAAS,WAAW,GAAG,GAC7D,OAAO;GAET,OAAO;EACT;CACF;CAIA,MAAM,eAAA,sBAAA;CACN,MAAM,EAAE,QAAQ,IAAI,MAAA,WAAA;CACpB,MAAM,MAAA,YAAA;CACN,MAAM,QAAA,cAAA;CACN,MAAM,SAAA,iBAAA;CACN,MAAM,QAAA,cAAA;;;;CC5IN,MAAM,QAAA,cAAA;CACN,MAAM,aAAa,SAAS,OAAO,YAAY;EAC7C,IAAI;GACF,QAAQ,IAAI,MAAM,OAAO,OAAO;EAClC,SAAS,IAAI;GACX,OAAO;EACT;EACA,OAAO,MAAM,KAAK,OAAO;CAC3B;CACA,OAAO,UAAU;;;;CCTjB,MAAM,QAAA,cAAA;CAGN,MAAM,iBAAiB,OAAO,YAC5B,IAAI,MAAM,OAAO,OAAO,CAAC,CAAC,IACvB,KAAI,SAAQ,KAAK,KAAI,MAAK,EAAE,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC;CAEnE,OAAO,UAAU;;;;CCPjB,MAAM,SAAA,iBAAA;CACN,MAAM,QAAA,cAAA;CAEN,MAAM,iBAAiB,UAAU,OAAO,YAAY;EAClD,IAAI,MAAM;EACV,IAAI,QAAQ;EACZ,IAAI,WAAW;EACf,IAAI;GACF,WAAW,IAAI,MAAM,OAAO,OAAO;EACrC,SAAS,IAAI;GACX,OAAO;EACT;EACA,SAAS,SAAS,MAAM;GACtB,IAAI,SAAS,KAAK,CAAC,GAEb;QAAA,CAAC,OAAO,MAAM,QAAQ,CAAC,MAAM,IAAI;KAEnC,MAAM;KACN,QAAQ,IAAI,OAAO,KAAK,OAAO;IACjC;;EAEJ,CAAC;EACD,OAAO;CACT;CACA,OAAO,UAAU;;;;CCxBjB,MAAM,SAAA,iBAAA;CACN,MAAM,QAAA,cAAA;CACN,MAAM,iBAAiB,UAAU,OAAO,YAAY;EAClD,IAAI,MAAM;EACV,IAAI,QAAQ;EACZ,IAAI,WAAW;EACf,IAAI;GACF,WAAW,IAAI,MAAM,OAAO,OAAO;EACrC,SAAS,IAAI;GACX,OAAO;EACT;EACA,SAAS,SAAS,MAAM;GACtB,IAAI,SAAS,KAAK,CAAC,GAEb;QAAA,CAAC,OAAO,MAAM,QAAQ,CAAC,MAAM,GAAG;KAElC,MAAM;KACN,QAAQ,IAAI,OAAO,KAAK,OAAO;IACjC;;EAEJ,CAAC;EACD,OAAO;CACT;CACA,OAAO,UAAU;;;;CCvBjB,MAAM,SAAA,iBAAA;CACN,MAAM,QAAA,cAAA;CACN,MAAM,KAAA,WAAA;CAEN,MAAM,cAAc,OAAO,UAAU;EACnC,QAAQ,IAAI,MAAM,OAAO,KAAK;EAE9B,IAAI,SAAS,IAAI,OAAO,OAAO;EAC/B,IAAI,MAAM,KAAK,MAAM,GACnB,OAAO;EAGT,SAAS,IAAI,OAAO,SAAS;EAC7B,IAAI,MAAM,KAAK,MAAM,GACnB,OAAO;EAGT,SAAS;EACT,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,IAAI,QAAQ,EAAE,GAAG;GACzC,MAAM,cAAc,MAAM,IAAI;GAE9B,IAAI,SAAS;GACb,YAAY,SAAS,eAAe;IAElC,MAAM,UAAU,IAAI,OAAO,WAAW,OAAO,OAAO;IACpD,QAAQ,WAAW,UAAnB;KACE,KAAK;MACH,IAAI,QAAQ,WAAW,WAAW,GAChC,QAAQ;WAER,QAAQ,WAAW,KAAK,CAAC;MAE3B,QAAQ,MAAM,QAAQ,OAAO;KAE/B,KAAK;KACL,KAAK;MACH,IAAI,CAAC,UAAU,GAAG,SAAS,MAAM,GAC/B,SAAS;MAEX;KACF,KAAK;KACL,KAAK,MAEH;;KAEF,SACE,MAAM,IAAI,MAAM,yBAAyB,WAAW,UAAU;IAClE;GACF,CAAC;GACD,IAAI,WAAW,CAAC,UAAU,GAAG,QAAQ,MAAM,IACzC,SAAS;EAEb;EAEA,IAAI,UAAU,MAAM,KAAK,MAAM,GAC7B,OAAO;EAGT,OAAO;CACT;CACA,OAAO,UAAU;;;;CC5DjB,MAAM,QAAA,cAAA;CACN,MAAM,cAAc,OAAO,YAAY;EACrC,IAAI;GAGF,OAAO,IAAI,MAAM,OAAO,OAAO,CAAC,CAAC,SAAS;EAC5C,SAAS,IAAI;GACX,OAAO;EACT;CACF;CACA,OAAO,UAAU;;;;CCVjB,MAAM,SAAA,iBAAA;CACN,MAAM,aAAA,mBAAA;CACN,MAAM,EAAE,QAAQ;CAChB,MAAM,QAAA,cAAA;CACN,MAAM,YAAA,kBAAA;CACN,MAAM,KAAA,WAAA;CACN,MAAM,KAAA,WAAA;CACN,MAAM,MAAA,YAAA;CACN,MAAM,MAAA,YAAA;CAEN,MAAM,WAAW,SAAS,OAAO,MAAM,YAAY;EACjD,UAAU,IAAI,OAAO,SAAS,OAAO;EACrC,QAAQ,IAAI,MAAM,OAAO,OAAO;EAEhC,IAAI,MAAM,OAAO,MAAM,MAAM;EAC7B,QAAQ,MAAR;GACE,KAAK;IACH,OAAO;IACP,QAAQ;IACR,OAAO;IACP,OAAO;IACP,QAAQ;IACR;GACF,KAAK;IACH,OAAO;IACP,QAAQ;IACR,OAAO;IACP,OAAO;IACP,QAAQ;IACR;GACF,SACE,MAAM,IAAI,UAAU,2CAAuC;EAC/D;EAGA,IAAI,UAAU,SAAS,OAAO,OAAO,GACnC,OAAO;EAMT,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,IAAI,QAAQ,EAAE,GAAG;GACzC,MAAM,cAAc,MAAM,IAAI;GAE9B,IAAI,OAAO;GACX,IAAI,MAAM;GAEV,YAAY,SAAS,eAAe;IAClC,IAAI,WAAW,WAAW,KACxB,aAAa,IAAI,WAAW,SAAS;IAEvC,OAAO,QAAQ;IACf,MAAM,OAAO;IACb,IAAI,KAAK,WAAW,QAAQ,KAAK,QAAQ,OAAO,GAC9C,OAAO;SACF,IAAI,KAAK,WAAW,QAAQ,IAAI,QAAQ,OAAO,GACpD,MAAM;GAEV,CAAC;GAID,IAAI,KAAK,aAAa,QAAQ,KAAK,aAAa,OAC9C,OAAO;GAKT,KAAK,CAAC,IAAI,YAAY,IAAI,aAAa,SACnC,MAAM,SAAS,IAAI,MAAM,GAC3B,OAAO;QACF,IAAI,IAAI,aAAa,SAAS,KAAK,SAAS,IAAI,MAAM,GAC3D,OAAO;EAEX;EACA,OAAO;CACT;CAEA,OAAO,UAAU;;;;CC9EjB,MAAM,UAAA,gBAAA;CACN,MAAM,OAAO,SAAS,OAAO,YAAY,QAAQ,SAAS,OAAO,KAAK,OAAO;CAC7E,OAAO,UAAU;;;;CCHjB,MAAM,UAAA,gBAAA;CAEN,MAAM,OAAO,SAAS,OAAO,YAAY,QAAQ,SAAS,OAAO,KAAK,OAAO;CAC7E,OAAO,UAAU;;;;CCHjB,MAAM,QAAA,cAAA;CACN,MAAM,cAAc,IAAI,IAAI,YAAY;EACtC,KAAK,IAAI,MAAM,IAAI,OAAO;EAC1B,KAAK,IAAI,MAAM,IAAI,OAAO;EAC1B,OAAO,GAAG,WAAW,IAAI,OAAO;CAClC;CACA,OAAO,UAAU;;;;CCHjB,MAAM,YAAA,kBAAA;CACN,MAAM,UAAA,gBAAA;CACN,OAAO,WAAW,UAAU,OAAO,YAAY;EAC7C,MAAM,MAAM,CAAC;EACb,IAAI,QAAQ;EACZ,IAAI,OAAO;EACX,MAAM,IAAI,SAAS,MAAM,GAAG,MAAM,QAAQ,GAAG,GAAG,OAAO,CAAC;EACxD,KAAK,MAAM,WAAW,GAEpB,IADiB,UAAU,SAAS,OAAO,OAChC,GAAG;GACZ,OAAO;GACP,IAAI,CAAC,OACH,QAAQ;EAEZ,OAAO;GACL,IAAI,MACF,IAAI,KAAK,CAAC,OAAO,IAAI,CAAC;GAExB,OAAO;GACP,QAAQ;EACV;EAEF,IAAI,OACF,IAAI,KAAK,CAAC,OAAO,IAAI,CAAC;EAGxB,MAAM,SAAS,CAAC;EAChB,KAAK,MAAM,CAAC,KAAK,QAAQ,KACvB,IAAI,QAAQ,KACV,OAAO,KAAK,GAAG;OACV,IAAI,CAAC,OAAO,QAAQ,EAAE,IAC3B,OAAO,KAAK,GAAG;OACV,IAAI,CAAC,KACV,OAAO,KAAK,KAAK,KAAK;OACjB,IAAI,QAAQ,EAAE,IACnB,OAAO,KAAK,KAAK,KAAK;OAEtB,OAAO,KAAK,GAAG,IAAI,KAAK,KAAK;EAGjC,MAAM,aAAa,OAAO,KAAK,MAAM;EACrC,MAAM,WAAW,OAAO,MAAM,QAAQ,WAAW,MAAM,MAAM,OAAO,KAAK;EACzE,OAAO,WAAW,SAAS,SAAS,SAAS,aAAa;CAC5D;;;;CC9CA,MAAM,QAAA,cAAA;CACN,MAAM,aAAA,mBAAA;CACN,MAAM,EAAE,QAAQ;CAChB,MAAM,YAAA,kBAAA;CACN,MAAM,UAAA,gBAAA;CAsCN,MAAM,UAAU,KAAK,KAAK,UAAU,CAAC,MAAM;EACzC,IAAI,QAAQ,KACV,OAAO;EAGT,MAAM,IAAI,MAAM,KAAK,OAAO;EAC5B,MAAM,IAAI,MAAM,KAAK,OAAO;EAC5B,IAAI,aAAa;EAEjB,OAAO,KAAK,MAAM,aAAa,IAAI,KAAK;GACtC,KAAK,MAAM,aAAa,IAAI,KAAK;IAC/B,MAAM,QAAQ,aAAa,WAAW,WAAW,OAAO;IACxD,aAAa,cAAc,UAAU;IACrC,IAAI,OACF,SAAS;GAEb;GAKA,IAAI,YACF,OAAO;EAEX;EACA,OAAO;CACT;CAEA,MAAM,+BAA+B,CAAC,IAAI,WAAW,WAAW,CAAC;CACjE,MAAM,iBAAiB,CAAC,IAAI,WAAW,SAAS,CAAC;CAEjD,MAAM,gBAAgB,KAAK,KAAK,YAAY;EAC1C,IAAI,QAAQ,KACV,OAAO;EAGT,IAAI,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC,WAAW,KAAK;GAC7C,IAAI,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC,WAAW,KACxC,OAAO;QACF,IAAI,QAAQ,mBACjB,MAAM;QAEN,MAAM;EAEV;EAEA,IAAI,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC,WAAW,KAAK;GAC7C,IAAI,QAAQ,mBACV,OAAO;QAEP,MAAM;EAEV;EAEA,MAAM,wBAAQ,IAAI,IAAI;EACtB,IAAI,IAAI;EACR,KAAK,MAAM,KAAK,KACd,IAAI,EAAE,aAAa,OAAO,EAAE,aAAa,MACvC,KAAK,SAAS,IAAI,GAAG,OAAO;OACvB,IAAI,EAAE,aAAa,OAAO,EAAE,aAAa,MAC9C,KAAK,QAAQ,IAAI,GAAG,OAAO;OAE3B,MAAM,IAAI,EAAE,MAAM;EAItB,IAAI,MAAM,OAAO,GACf,OAAO;EAGT,IAAI;EACJ,IAAI,MAAM,IAAI;GACZ,WAAW,QAAQ,GAAG,QAAQ,GAAG,QAAQ,OAAO;GAChD,IAAI,WAAW,GACb,OAAO;QACF,IAAI,aAAa,MAAM,GAAG,aAAa,QAAQ,GAAG,aAAa,OACpE,OAAO;EAEX;EAGA,KAAK,MAAM,MAAM,OAAO;GACtB,IAAI,MAAM,CAAC,UAAU,IAAI,OAAO,EAAE,GAAG,OAAO,GAC1C,OAAO;GAGT,IAAI,MAAM,CAAC,UAAU,IAAI,OAAO,EAAE,GAAG,OAAO,GAC1C,OAAO;GAGT,KAAK,MAAM,KAAK,KACd,IAAI,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,OAAO,GACnC,OAAO;GAIX,OAAO;EACT;EAEA,IAAI,QAAQ;EACZ,IAAI,UAAU;EAGd,IAAI,eAAe,MACjB,CAAC,QAAQ,qBACT,GAAG,OAAO,WAAW,SAAS,GAAG,SAAS;EAC5C,IAAI,eAAe,MACjB,CAAC,QAAQ,qBACT,GAAG,OAAO,WAAW,SAAS,GAAG,SAAS;EAE5C,IAAI,gBAAgB,aAAa,WAAW,WAAW,KACnD,GAAG,aAAa,OAAO,aAAa,WAAW,OAAO,GACxD,eAAe;EAGjB,KAAK,MAAM,KAAK,KAAK;GACnB,WAAW,YAAY,EAAE,aAAa,OAAO,EAAE,aAAa;GAC5D,WAAW,YAAY,EAAE,aAAa,OAAO,EAAE,aAAa;GAC5D,IAAI,IAAI;IACN,IAAI,cACE;SAAA,EAAE,OAAO,cAAc,EAAE,OAAO,WAAW,UAC3C,EAAE,OAAO,UAAU,aAAa,SAChC,EAAE,OAAO,UAAU,aAAa,SAChC,EAAE,OAAO,UAAU,aAAa,OAClC,eAAe;IAAA;IAGnB,IAAI,EAAE,aAAa,OAAO,EAAE,aAAa,MAAM;KAC7C,SAAS,SAAS,IAAI,GAAG,OAAO;KAChC,IAAI,WAAW,KAAK,WAAW,IAC7B,OAAO;IAEX,OAAO,IAAI,GAAG,aAAa,QAAQ,CAAC,EAAE,KAAK,GAAG,MAAM,GAClD,OAAO;GAEX;GACA,IAAI,IAAI;IACN,IAAI,cACE;SAAA,EAAE,OAAO,cAAc,EAAE,OAAO,WAAW,UAC3C,EAAE,OAAO,UAAU,aAAa,SAChC,EAAE,OAAO,UAAU,aAAa,SAChC,EAAE,OAAO,UAAU,aAAa,OAClC,eAAe;IAAA;IAGnB,IAAI,EAAE,aAAa,OAAO,EAAE,aAAa,MAAM;KAC7C,QAAQ,QAAQ,IAAI,GAAG,OAAO;KAC9B,IAAI,UAAU,KAAK,UAAU,IAC3B,OAAO;IAEX,OAAO,IAAI,GAAG,aAAa,QAAQ,CAAC,EAAE,KAAK,GAAG,MAAM,GAClD,OAAO;GAEX;GACA,IAAI,CAAC,EAAE,aAAa,MAAM,OAAO,aAAa,GAC5C,OAAO;EAEX;EAKA,IAAI,MAAM,YAAY,CAAC,MAAM,aAAa,GACxC,OAAO;EAGT,IAAI,MAAM,YAAY,CAAC,MAAM,aAAa,GACxC,OAAO;EAMT,IAAI,gBAAgB,cAClB,OAAO;EAGT,OAAO;CACT;CAGA,MAAM,YAAY,GAAG,GAAG,YAAY;EAClC,IAAI,CAAC,GACH,OAAO;EAET,MAAM,OAAO,QAAQ,EAAE,QAAQ,EAAE,QAAQ,OAAO;EAChD,OAAO,OAAO,IAAI,IACd,OAAO,IAAI,IACX,EAAE,aAAa,OAAO,EAAE,aAAa,OAAO,IAC5C;CACN;CAGA,MAAM,WAAW,GAAG,GAAG,YAAY;EACjC,IAAI,CAAC,GACH,OAAO;EAET,MAAM,OAAO,QAAQ,EAAE,QAAQ,EAAE,QAAQ,OAAO;EAChD,OAAO,OAAO,IAAI,IACd,OAAO,IAAI,IACX,EAAE,aAAa,OAAO,EAAE,aAAa,OAAO,IAC5C;CACN;CAEA,OAAO,UAAU;;;;CCrPjB,MAAM,aAAA,WAAA;CACN,MAAM,YAAA,kBAAA;CACN,MAAM,SAAA,iBAAA;CACN,MAAM,cAAA,oBAAA;CAuCN,OAAO,UAAU;EACf,OAvCI,cAuCJ;EACA,OAvCI,gBAuCJ;EACA,OAvCI,cAuCJ;EACA,KAvCI,YAuCJ;EACA,MAvCI,aAuCJ;EACA,OAvCI,cAuCJ;EACA,OAvCI,cAuCJ;EACA,OAvCI,cAuCJ;EACA,YAvCI,mBAuCJ;EACA,SAvCI,gBAuCJ;EACA,UAvCI,iBAuCJ;EACA,cAvCI,sBAuCJ;EACA,cAvCI,sBAuCJ;EACA,MAvCI,aAuCJ;EACA,OAvCI,cAuCJ;EACA,IAvCI,WAuCJ;EACA,IAvCI,WAuCJ;EACA,IAvCI,WAuCJ;EACA,KAvCI,YAuCJ;EACA,KAvCI,YAuCJ;EACA,KAvCI,YAuCJ;EACA,KAvCI,YAuCJ;EACA,QAvCI,eAuCJ;EACA,UAvCI,iBAuCJ;EACA,YAvCI,mBAuCJ;EACA,OAvCI,cAuCJ;EACA,WAvCI,kBAuCJ;EACA,eAvCI,uBAuCJ;EACA,eAvCI,uBAuCJ;EACA,eAvCI,uBAuCJ;EACA,YAvCI,oBAuCJ;EACA,YAvCI,cAuCJ;EACA,SAvCI,gBAuCJ;EACA,KAvCI,YAuCJ;EACA,KAvCI,YAuCJ;EACA,YAvCI,mBAuCJ;EACA,eAvCI,iBAuCJ;EACA,QAvCI,eAuCJ;EACA;EACA,IAAI,WAAW;EACf,KAAK,WAAW;EAChB,QAAQ,WAAW;EACnB,qBAAqB,UAAU;EAC/B,eAAe,UAAU;EACzB,oBAAoB,YAAY;EAChC,qBAAqB,YAAY;CACnC;;ACpFA,MAAM,mBAAmB;AACzB,MAAM,gBAAgB;AACtB,IAAI,wBAAwB,MAAM,sBAAsB;CACvD;CACA;CACA;CACA,YAAY;CACZ,UAAU;CACV;CACA;CACA;CACA,mBAAmB,QAAQ,QAAQ;CACnC;CACA;CACA;CACA,+BAA+B,IAAI,IAAI;CACvC,kCAAkC,IAAI,IAAI;CAC1C,oCAAoC,IAAI,IAAI;CAC5C,mCAAmC,IAAI,IAAI;CAC3C,2BAA2B,IAAI,IAAI;CACnC,2BAA2B,IAAI,IAAI;CACnC;CACA,YAAY,SAAS;EACpB,KAAK,UAAU;EACf,KAAK,cAAc,QAAQ,eAAe,QAAQ;EAClD,KAAK,QAAQ,YAAY,KAAK,WAAW;EACzC,KAAK,WAAW,QAAQ,YAAY,WAAW;CAChD;CACA,aAAa,QAAQ,SAAS;EAC7B,MAAM,SAAS,IAAI,sBAAsB,OAAO;EAChD,OAAO,eAAe,OAAO,iBAAiB;EAC9C,IAAI;GACH,MAAM,OAAO;EACd,SAAS,OAAO;GACf,OAAO,MAAM;GACb,MAAM;EACP,UAAU;GACT,OAAO,eAAe,KAAK;EAC5B;EACA,OAAO;CACR;CACA,IAAI,mBAAmB;EACtB,OAAO,KAAK;CACb;CACA,SAAS;EACR,OAAO,KAAK,QAAQ,WAAW,YAAY;CAC5C;CACA,MAAM,cAAc,QAAQ;EAC3B,MAAM,YAAY,WAAW;EAC7B,MAAM,eAAe,EAAE,OAAO;EAC9B,KAAK,SAAS,IAAI,WAAW,YAAY;EACzC,IAAI;GACH,IAAI,CAAC,KAAK,WAAW,MAAM,KAAK,kBAAkB;GAClD,IAAI,CAAC,aAAa,QAAQ;IACzB,MAAM,MAAM,KAAK;IACjB,IAAI;KACH,MAAM,KAAK,gBAAgB,WAAW,YAAY;IACnD,SAAS,OAAO;KACf,IAAI,KAAK,WAAW,KAAK,QAAQ,OAAO,KAAK,WAAW,MAAM;KAC9D,MAAM,KAAK,kBAAkB;IAC9B;GACD;GACA,OAAO,aAAa;EACrB,SAAS,OAAO;GACf,KAAK,SAAS,OAAO,SAAS;GAC9B,MAAM;EACP;CACD;CACA,MAAM,cAAc,WAAW;EAC9B,IAAI,CAAC,KAAK,WAAW,MAAM,KAAK,kBAAkB;EAClD,MAAM,eAAe,KAAK,SAAS,IAAI,SAAS;EAChD,KAAK,SAAS,OAAO,SAAS;EAC9B,MAAM,KAAK,QAAQ,WAAW,eAAe,EAAE,WAAW,cAAc,aAAa,UAAU,CAAC;CACjG;CACA,MAAM,gBAAgB,QAAQ;EAC7B,IAAI,CAAC,KAAK,WAAW,MAAM,KAAK,kBAAkB;EAClD,MAAM,eAAe,KAAK,SAAS,IAAI,OAAO,SAAS;EACvD,MAAM,KAAK,QAAQ,WAAW,wBAAwB;GACrD,GAAG;GACH,WAAW,cAAc,aAAa,OAAO;EAC9C,CAAC;CACF;CACA,MAAM,MAAM,WAAW,MAAM;EAC5B,IAAI,CAAC,KAAK,WAAW,MAAM,KAAK,kBAAkB;EAClD,MAAM,eAAe,KAAK,SAAS,IAAI,SAAS;EAChD,MAAM,KAAK,QAAQ,WAAW,cAAc;GAC3C,WAAW,cAAc,aAAa;GACtC;EACD,CAAC;CACF;CACA,MAAM,SAAS;EACd,OAAO,YAAY,KAAK,cAAc,OAAO;CAC9C;CACA,gBAAgB,SAAS;EACxB,OAAO,YAAY,KAAK,iBAAiB,OAAO;CACjD;CACA,kBAAkB,SAAS;EAC1B,OAAO,YAAY,KAAK,mBAAmB,OAAO;CACnD;CACA,cAAc;EACb,OAAO,KAAK,QAAQ,WAAW,UAAU;CAC1C;CACA,MAAM,UAAU,MAAM,KAAK;EAC1B,MAAM,KAAK,QAAQ,WAAW,WAAW;GACxC;GACA;EACD,CAAC;CACF;CACA,MAAM,aAAa,QAAQ;EAC1B,MAAM,KAAK,QAAQ,WAAW,cAAc,EAAE,OAAO,CAAC;CACvD;CACA,MAAM,QAAQ;EACb,OAAO,KAAK,QAAQ,WAAW,cAAc,MAAM;CACpD;CACA,cAAc,QAAQ;EACrB,OAAO,KAAK,QAAQ,WAAW,eAAe,MAAM;CACrD;CACA,MAAM,OAAO,QAAQ;EACpB,MAAM,KAAK,QAAQ,WAAW,eAAe,EAAE,OAAO,CAAC;CACxD;CACA,MAAM,WAAW,QAAQ,WAAW,OAAO,CAAC,GAAG;EAM9C,OAAO,eAAe,MALD,KAAK,QAAQ,WAAW,YAAY;GACxD;GACA;GACA,MAAM,eAAe,IAAI;EAC1B,CAAC,CAC2B;CAC7B;CACA,MAAM,YAAY,QAAQ,WAAW;EACpC,MAAM,aAAa,GAAG,IAAI,IAAI,OAAO,SAAS,KAAK,IAAI,SAAS,WAAW,QAAQ,CAAC,CAAC,KAAK,GAAG;EAC7F,MAAM,eAAe;GACpB;GACA;GACA,YAAY;EACb;EACA,KAAK,SAAS,IAAI,YAAY,YAAY;EAC1C,IAAI;GACH,IAAI,CAAC,KAAK,WAAW,MAAM,KAAK,kBAAkB;GAClD,IAAI,CAAC,aAAa,QAAQ;IACzB,MAAM,MAAM,KAAK;IACjB,IAAI;KACH,MAAM,KAAK,gBAAgB,YAAY;IACxC,SAAS,OAAO;KACf,IAAI,KAAK,WAAW,KAAK,QAAQ,OAAO,KAAK,WAAW,MAAM;KAC9D,MAAM,KAAK,kBAAkB;IAC9B;GACD;GACA,OAAO,aAAa;EACrB,SAAS,OAAO;GACf,IAAI,KAAK,SAAS,IAAI,UAAU,MAAM,cAAc,KAAK,SAAS,OAAO,UAAU;GACnF,MAAM;EACP;CACD;CACA,MAAM,aAAa,YAAY;EAC9B,MAAM,eAAe,KAAK,SAAS,IAAI,UAAU;EACjD,MAAM,KAAK,QAAQ,WAAW,cAAc,EAAE,YAAY,cAAc,cAAc,WAAW,CAAC;EAClG,KAAK,SAAS,OAAO,UAAU;CAChC;CACA,MAAM,YAAY,YAAY,WAAW,OAAO,CAAC,GAAG;EACnD,MAAM,eAAe,KAAK,SAAS,IAAI,UAAU;EAMjD,OAAO,eAAe,MALD,KAAK,QAAQ,WAAW,aAAa;GACzD,YAAY,cAAc,cAAc;GACxC;GACA,MAAM,eAAe,IAAI;EAC1B,CAAC,CAC2B;CAC7B;CACA,eAAe,SAAS;EACvB,OAAO,YAAY,KAAK,kBAAkB,OAAO;CAClD;CACA,MAAM,iBAAiB;EACtB,KAAK,UAAU;EACf,MAAM,KAAK,WAAW,WAAW,cAAc;CAChD;CACA,QAAQ;EACP,KAAK,UAAU;EACf,IAAI,KAAK,gBAAgB,aAAa,KAAK,cAAc;EACzD,KAAK,sBAAsB;EAC3B,KAAK,YAAY;EACjB,KAAK,KAAK,QAAQ;EAClB,KAAK,QAAQ,QAAQ;EACrB,KAAK,MAAM,KAAK;EAChB,KAAK,SAAS,KAAK;CACpB;CACA,MAAM,QAAQ,QAAQ,QAAQ;EAC7B,IAAI,CAAC,KAAK,WAAW,MAAM,KAAK,kBAAkB;EAClD,OAAO,KAAK,WAAW,QAAQ,MAAM;CACtC;CACA,WAAW,QAAQ,QAAQ;EAC1B,IAAI,CAAC,KAAK,KAAK,OAAO,QAAQ,uBAAuB,IAAI,MAAM,mCAAmC,CAAC;EACnG,MAAM,WAAW,WAAW,KAAK,IAAI,KAAK,IAAI,YAAY,MAAM,IAAI,KAAK,IAAI,YAAY,QAAQ,MAAM;EACvG,OAAO,QAAQ,KAAK,CAAC,UAAU,KAAK,iBAAiB,WAAW,QAAQ,uBAAuB,IAAI,MAAM,qCAAqC,CAAC,CAAC,CAAC,CAAC;CACnJ;CACA,MAAM,oBAAoB;EACzB,IAAI,KAAK,SAAS,MAAM,IAAI,MAAM,oCAAoC;EACtE,KAAK,iBAAiB,KAAK,mBAAmB,CAAC,CAAC,cAAc;GAC7D,KAAK,eAAe,KAAK;EAC1B,CAAC;EACD,OAAO,KAAK;CACb;CACA,MAAM,qBAAqB;EAC1B,IAAI,UAAU;EACd,OAAO,CAAC,KAAK,SAAS,IAAI;GACzB,MAAM,KAAK,iBAAiB;GAC5B;EACD,SAAS,OAAO;GACf,MAAM,OAAO,MAAM;GACnB,IAAI,SAAS,UAAU,SAAS,UAAU,iBAAiB,sBAAsB,KAAK,SAAS,MAAM;GACrG,MAAM,QAAQ,KAAK,IAAI,MAAM,KAAK,WAAW,IAAI;GACjD,SAAS,KAAK,cAAc;IAC3B,4BAA4B,IAAI,KAAK,EAAA,CAAG,YAAY;IACpD,OAAO;IACP,SAAS,2CAA2C,MAAM,MAAM,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;GACtH,CAAC;GACD,MAAM,IAAI,SAAS,gBAAgB;IAClC,KAAK,sBAAsB;IAC3B,KAAK,iBAAiB,WAAW,aAAa,KAAK;GACpD,CAAC;GACD,KAAK,sBAAsB,KAAK;GAChC,KAAK,iBAAiB,KAAK;EAC5B;EACA,MAAM,IAAI,MAAM,oCAAoC;CACrD;CACA,MAAM,mBAAmB;EACxB,MAAM,WAAW,MAAM,KAAK,kBAAkB;EAC9C,MAAM,SAAS,MAAM,WAAW,QAAQ;EACxC,IAAI,CAAC,QAAQ,MAAM,IAAI,MAAM,sCAAsC,KAAK,MAAM,WAAW,EAAE;EAC3F,MAAM,MAAM,0BAA0B,MAAM;EAC5C,IAAI;EACJ,KAAK,mBAAmB,IAAI,SAAS,kBAAkB;GACtD,eAAe;EAChB,CAAC;EACD,KAAK,SAAS;EACd,KAAK,MAAM;EACX,KAAK,sBAAsB,GAAG;EAC9B,IAAI,cAAc;GACjB,aAAa;GACb,IAAI,KAAK,QAAQ,KAAK;GACtB,KAAK,YAAY;GACjB,KAAK,MAAM,KAAK;GAChB,KAAK,SAAS,KAAK;GACnB,KAAK,MAAM,gBAAgB,KAAK,SAAS,OAAO,GAAG;IAClD,aAAa,YAAY,KAAK;IAC9B,aAAa,SAAS,KAAK;GAC5B;GACA,KAAK,MAAM,gBAAgB,KAAK,SAAS,OAAO,GAAG,aAAa,SAAS,KAAK;GAC9E,IAAI,CAAC,KAAK,SAAS,KAAK,kBAAkB,CAAC,CAAC,OAAO,UAAU,SAAS,KAAK,cAAc;IACxF,4BAA4B,IAAI,KAAK,EAAA,CAAG,YAAY;IACpD,OAAO;IACP,SAAS,+BAA+B,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;GAC9F,CAAC,CAAC;EACH,CAAC;EACD,IAAI,OAAO;EACX,IAAI;GACH,KAAK,kBAAkB,MAAM,IAAI,YAAY,WAAW,YAAY;IACnE,OAAO,SAAS;IAChB,UAAU,KAAK;IACf,YAAY,KAAK,QAAQ;IACzB,eAAe,KAAK,QAAQ;IAC5B,iBAAiB;GAClB,CAAC;GACD,MAAM,KAAK,qBAAqB;GAChC,KAAK,YAAY;EAClB,SAAS,cAAc;GACtB,KAAK,YAAY;GACjB,IAAI,QAAQ;GACZ,OAAO,QAAQ;GACf,IAAI,KAAK,QAAQ,KAAK;IACrB,KAAK,MAAM,KAAK;IAChB,KAAK,SAAS,KAAK;GACpB;GACA,MAAM;EACP;CACD;CACA,MAAM,uBAAuB;EAC5B,KAAK,MAAM,gBAAgB,KAAK,SAAS,OAAO,GAAG,MAAM,KAAK,gBAAgB,YAAY;EAC1F,KAAK,MAAM,CAAC,WAAW,iBAAiB,KAAK,UAAU,MAAM,KAAK,gBAAgB,WAAW,YAAY;EACzG,IAAI,KAAK,SAAS,SAAS,KAAK,KAAK,SAAS,SAAS,GAAG,SAAS,KAAK,cAAc;GACrF,4BAA4B,IAAI,KAAK,EAAA,CAAG,YAAY;GACpD,OAAO;GACP,SAAS,kCAAkC,KAAK,SAAS,KAAK,eAAe,KAAK,SAAS,KAAK;EACjG,CAAC;CACF;CACA,MAAM,gBAAgB,cAAc;EACnC,MAAM,MAAM,KAAK;EACjB,MAAM,SAAS,MAAM,KAAK,WAAW,WAAW,aAAa;GAC5D,QAAQ,aAAa;GACrB,WAAW,aAAa;EACzB,CAAC;EACD,IAAI,KAAK,QAAQ,KAAK,MAAM,IAAI,MAAM,gEAAgE;EACtG,aAAa,aAAa,OAAO;EACjC,aAAa,SAAS;CACvB;CACA,MAAM,gBAAgB,WAAW,cAAc;EAC9C,MAAM,MAAM,KAAK;EACjB,MAAM,SAAS,MAAM,KAAK,WAAW,WAAW,eAAe,aAAa,MAAM;EAClF,IAAI,KAAK,QAAQ,KAAK,MAAM,IAAI,MAAM,gEAAgE;EACtG,aAAa,YAAY,OAAO;EAChC,aAAa,SAAS;GACrB,GAAG;GACH;EACD;EACA,SAAS,KAAK,iBAAiB;GAC9B;GACA,QAAQ,OAAO;EAChB,CAAC;EACD,KAAK,MAAM,QAAQ,OAAO,WAAW,SAAS,KAAK,mBAAmB;GACrE;GACA;GACA,WAAW,OAAO;GAClB,QAAQ;EACT,CAAC;CACF;CACA,sBAAsB,KAAK;EAC1B,IAAI,eAAe,iBAAiB,MAAM,UAAU,SAAS,KAAK,cAAc,KAAK,CAAC;EACtF,IAAI,eAAe,iBAAiB,gBAAgB,UAAU;GAC7D,SAAS,KAAK,iBAAiB;IAC9B,GAAG;IACH,WAAW,KAAK,gBAAgB,MAAM,SAAS;GAChD,CAAC;EACF,CAAC;EACD,IAAI,eAAe,iBAAiB,kBAAkB,UAAU;GAC/D,SAAS,KAAK,mBAAmB;IAChC,GAAG;IACH,WAAW,KAAK,gBAAgB,MAAM,SAAS;GAChD,CAAC;EACF,CAAC;EACD,IAAI,eAAe,iBAAiB,eAAe,UAAU;GAC5D,SAAS,KAAK,kBAAkB;IAC/B,GAAG;IACH,YAAY,KAAK,iBAAiB,MAAM,UAAU;GACnD,CAAC;EACF,CAAC;CACF;CACA,gBAAgB,WAAW;EAC1B,OAAO,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,MAAM,GAAG,kBAAkB,aAAa,cAAc,SAAS,CAAC,GAAG,MAAM;CACpG;CACA,iBAAiB,YAAY;EAC5B,OAAO,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,MAAM,GAAG,kBAAkB,aAAa,eAAe,UAAU,CAAC,GAAG,MAAM;CACtG;CACA,MAAM,oBAAoB;EACzB,IAAI,WAAW,MAAM,aAAa,KAAK,KAAK;EAC5C,IAAI,YAAY,MAAM,WAAW,QAAQ,CAAC,CAAC,MAAM,WAAW;GAC3D,QAAQ,QAAQ;GAChB,OAAO,QAAQ,MAAM;EACtB,CAAC,GAAG;GACH,MAAM,QAAQ,aAAa,UAAU,KAAK,OAAO;GACjD,IAAI,QAAQ,GAAG,MAAM,iBAAiB,UAAU,KAAK,OAAO;GAC5D,IAAI,UAAU,KAAK,KAAK,QAAQ,cAAc,OAAO,OAAO;EAC7D;EACA,IAAI,KAAK,QAAQ,cAAc,OAAO,MAAM,IAAI,MAAM,sCAAsC,KAAK,MAAM,WAAW,EAAE;EACpH,WAAW,MAAM,YAAY,KAAK,OAAO,KAAK,SAAS,KAAK,WAAW;EACvE,OAAO;CACR;AACD;AACA,SAAS,YAAY,WAAW,SAAS;CACxC,UAAU,IAAI,OAAO;CACrB,OAAO,EAAE,eAAe,UAAU,OAAO,OAAO,EAAE;AACnD;AACA,SAAS,SAAS,WAAW,OAAO;CACnC,KAAK,MAAM,YAAY,WAAW,SAAS,KAAK;AACjD;AACA,eAAe,YAAY,OAAO,SAAS,aAAa;CACvD,MAAM,MAAM,MAAM,MAAM;EACvB,WAAW;EACX,MAAM;CACP,CAAC;CACD,IAAI,WAAW;CACf,IAAI;EACH,MAAM,MAAM,MAAM,iBAAiB,EAAE,MAAM,IAAI,CAAC;EAChD,WAAW;CACZ,SAAS,WAAW;EACnB,IAAI,UAAU,SAAS,UAAU,MAAM;EACvC,MAAM,WAAW,MAAM,KAAK,MAAM,eAAe,CAAC,CAAC,YAAY,KAAK,CAAC;EACrE,IAAI,YAAY,KAAK,IAAI,IAAI,SAAS,UAAU,kBAAkB;GACjE,MAAM,GAAG,MAAM,iBAAiB;IAC/B,WAAW;IACX,OAAO;GACR,CAAC;GACD,OAAO,YAAY,OAAO,SAAS,WAAW;EAC/C;CACD;CACA,IAAI,UAAU,IAAI;EACjB,MAAM,UAAU,MAAM,aAAa,KAAK;EACxC,IAAI,WAAW,MAAM,YAAY,OAAO,GAAG;GAC1C,MAAM,QAAQ,aAAa,SAAS,OAAO;GAC3C,IAAI,QAAQ,GAAG,MAAM,iBAAiB,SAAS,OAAO;GACtD,IAAI,UAAU,GAAG,OAAO;GACxB,IAAI,8BAA8B,QAAQ,QAAQ,MAAM,QAAQ,cAAc,8CAA8C;GAC5H,MAAM,eAAe,OAAO,SAAS,OAAO;EAC7C;EACA,MAAM,aAAa,QAAQ,oBAAoB,IAAI,IAAI,eAAe,YAAY,GAAG;EACrF,MAAM,mBAAmB,EAAE,GAAG,YAAY;EAC1C,iBAAiB,iBAAiB,MAAM;EACxC,MAAM,QAAQ,UAAU,CAAC,OAAO,eAAe,WAAW,aAAa,cAAc,UAAU,CAAC,GAAG;GAClG,UAAU;GACV,OAAO;GACP,KAAK;EACN,CAAC,CAAC,CAAC,MAAM;EACT,MAAM,UAAU,MAAM,cAAc,KAAK;EACzC,IAAI,aAAa,SAAS,OAAO,MAAM,GAAG,MAAM,IAAI,mBAAmB,kBAAkB,QAAQ,QAAQ,yBAAyB,QAAQ,cAAc,+CAA+C;EACvM,OAAO;CACR,UAAU;EACT,MAAM,GAAG,MAAM,iBAAiB;GAC/B,WAAW;GACX,OAAO;EACR,CAAC;CACF;CACA,MAAM,WAAW,KAAK,IAAI,IAAI;CAC9B,OAAO,KAAK,IAAI,IAAI,UAAU;EAC7B,MAAM,WAAW,MAAM,cAAc,KAAK;EAC1C,MAAM,QAAQ,aAAa,UAAU,OAAO;EAC5C,IAAI,QAAQ,GAAG,MAAM,iBAAiB,UAAU,OAAO;EACvD,IAAI,UAAU,GAAG,OAAO;EACxB,MAAM,IAAI,SAAS,gBAAgB,WAAW,aAAa,aAAa,CAAC;CAC1E;CACA,MAAM,IAAI,MAAM,qDAAqD;AACtE;AACA,eAAe,cAAc,OAAO;CACnC,MAAM,WAAW,KAAK,IAAI,IAAI;CAC9B,IAAI;CACJ,OAAO,KAAK,IAAI,IAAI,UAAU;EAC7B,IAAI;GACH,MAAM,WAAW,MAAM,aAAa,KAAK;GACzC,IAAI,YAAY,MAAM,WAAW,QAAQ,CAAC,CAAC,MAAM,WAAW;IAC3D,QAAQ,QAAQ;IAChB,OAAO,QAAQ,MAAM;GACtB,CAAC,GAAG,OAAO;EACZ,SAAS,WAAW;GACnB,YAAY;EACb;EACA,MAAM,IAAI,SAAS,gBAAgB,WAAW,aAAa,aAAa,CAAC;CAC1E;CACA,MAAM,IAAI,MAAM,yCAAyC,iBAAiB,MAAM,EAAE,OAAO,UAAU,CAAC;AACrG;AACA,eAAe,aAAa,OAAO;CAClC,IAAI;EACH,OAAO,KAAK,MAAM,MAAM,SAAS,MAAM,cAAc,MAAM,CAAC;CAC7D,SAAS,WAAW;EACnB,IAAI,UAAU,SAAS,UAAU;EACjC,MAAM;CACP;AACD;AACA,eAAe,WAAW,UAAU;CACnC,OAAO,IAAI,SAAS,sBAAsB;EACzC,MAAM,SAAS,QAAQ,SAAS,UAAU;EAC1C,OAAO,KAAK,iBAAiB,kBAAkB,MAAM,CAAC;EACtD,OAAO,KAAK,eAAe;GAC1B,OAAO,QAAQ;GACf,kBAAkB,KAAK,CAAC;EACzB,CAAC;CACF,CAAC;AACF;AACA,IAAI,qBAAqB,cAAc,MAAM,CAAC;AAC9C,SAAS,aAAa,UAAU,SAAS;CACxC,QAAA,GAAOA,cAAAA,MAAAA,CAAM,SAAS,OAAO,MAAA,GAAKA,cAAAA,MAAAA,CAAM,QAAQ,aAAa,KAAA,GAAIC,cAAAA,QAAAA,CAAQ,SAAS,SAAS,QAAQ,aAAa,IAAI;AACrH;AACA,SAAS,iBAAiB,UAAU,SAAS;CAC5C,OAAO,IAAI,mBAAmB,oBAAoB,SAAS,QAAQ,sBAAsB,QAAQ,WAAW,WAAW,QAAQ,cAAc,YAAY,QAAQ,eAAe,WAAW,oCAAoC,8CAA8C,YAAY;AAC1R;AACA,eAAe,YAAY,UAAU;CACpC,MAAM,SAAS,MAAM,WAAW,QAAQ;CACxC,QAAQ,QAAQ;CAChB,OAAO,QAAQ,MAAM;AACtB;AACA,eAAe,eAAe,OAAO,UAAU,SAAS;CACvD,MAAM,SAAS,MAAM,WAAW,QAAQ;CACxC,IAAI,CAAC,QAAQ;CACb,MAAM,MAAM,0BAA0B,MAAM;CAC5C,IAAI,OAAO;CACX,IAAI;CACJ,IAAI;EACH,MAAM,QAAQ,KAAK,EAAE,YAAY;GAChC,MAAM,IAAI,YAAY,WAAW,YAAY;IAC5C,OAAO,SAAS;IAChB,UAAU,WAAW;IACrB,YAAY,QAAQ;IACpB,eAAe,QAAQ;IACvB,iBAAiB,SAAS;GAC3B,CAAC;GACD,MAAM,IAAI,YAAY,WAAW,cAAc;GAC/C,MAAM,WAAW,KAAK,IAAI,IAAI;GAC9B,OAAO,KAAK,IAAI,IAAI,UAAU;IAC7B,MAAM,UAAU,MAAM,aAAa,KAAK;IACxC,IAAI,CAAC,WAAW,QAAQ,UAAU,SAAS,OAAO;IAClD,MAAM,IAAI,SAAS,gBAAgB,WAAW,aAAa,aAAa,CAAC;GAC1E;GACA,MAAM,IAAI,MAAM,oDAAoD;EACrE,EAAA,CAAG,GAAG,IAAI,SAAS,GAAG,WAAW;GAChC,QAAQ,iBAAiB,uBAAuB,IAAI,MAAM,8CAA8C,CAAC,GAAG,gBAAgB;EAC7H,CAAC,CAAC,CAAC;CACJ,UAAU;EACT,IAAI,OAAO,aAAa,KAAK;EAC7B,IAAI,QAAQ;EACZ,OAAO,QAAQ;CAChB;AACD;;ACpfA,SAAgB,iBAAiB,YAAY,MAAsC;CAC/E,OAAO,sBAAsB,QAAQ;EACjC,YAAY;EACZ,eAAA;EACA,kBAAkB,IAAI,IAAI,eAAe,YAAY,GAAG;EACxD;CACJ,CAAC;AACL;;ACFA,eAAsB,WAAW,YAAY,QAAQ,IAAI,GAA0B;CAC/E,MAAM,SAAS,MAAM,iBAAiB;CACtC,OAAO,OAAO,UAAU,QAAQ,IAAI,GAAG,MAAM,UAAU,IAAI,MAAM,MAAM,IAAI,MAAM,SAAS,CAAC;CAC3F,OAAO,iBAAiB,UAAqC;EACzD,QAAQ,IACJ,WAAW,MAAM,UAAU,IAAI,MAAM,OAAO,QAAQ,MAAM,OAAO,UAAU,KAAK,MAAM,OAAO,QAAQ,KAAK,IAC9G;CACJ,CAAC;CACD,OAAO,mBAAmB,UAAuC;EAC7D,QAAQ,MAAM,eAAe,MAAM,KAAK,IAAI,MAAM,QAAQ;CAC9D,CAAC;CACD,IAAI;EACA,MAAM,UAAU,MAAM,OAAO,cAAc,EAAE,UAAU,CAAC;EACxD,OAAO;GACH;GACA,MAAM,YAAY;IACd,MAAM,OAAO,cAAc,QAAQ,SAAS;IAC5C,OAAO,MAAM;GACjB;EACJ;CACJ,SAAS,OAAO;EACZ,OAAO,MAAM;EACb,MAAM;CACV;AACJ;AAEA,eAAsB,MAAM,YAAY,QAAQ,IAAI,GAAkB;CAClE,MAAM,UAAU,MAAM,WAAW,SAAS;CAC1C,QAAQ,IACJ,GAAG,QAAQ,QAAQ,SAAS,gBAAgB,UAAU,GAAG,QAAQ,QAAQ,YAAY,MAAM,QAAQ,QAAQ,KAAK,EACpH;CACA,MAAM,IAAI,SAAe,gBAAgB;EACrC,MAAM,aAAa;GACf,QAAQ,IAAI,UAAU,IAAI;GAC1B,QAAQ,IAAI,WAAW,IAAI;GAC3B,QAAQ,KAAK,CAAC,CAAC,KAAK,cAAc,UAAU;IACxC,QAAQ,MAAM,KAAK;IACnB,YAAY;GAChB,CAAC;EACL;EACA,QAAQ,GAAG,UAAU,IAAI;EACzB,QAAQ,GAAG,WAAW,IAAI;CAC9B,CAAC;AACL;AAEA,eAAsB,eAA8B;CAChD,IAAI;CACJ,IAAI;EACA,SAAS,MAAM,iBAAiB,KAAK;EACrC,QAAQ,IAAI,KAAK,UAAU,MAAM,OAAO,OAAO,GAAG,MAAM,CAAC,CAAC;CAC9D,QAAQ;EACJ,QAAQ,IAAI,kCAAkC;CAClD,UAAU;EACN,QAAQ,MAAM;CAClB;AACJ;AAEA,eAAsB,aAA4B;CAC9C,IAAI;CACJ,IAAI;EACA,SAAS,MAAM,iBAAiB,KAAK;EACrC,MAAM,OAAO,eAAe;EAC5B,QAAQ,IAAI,2BAA2B;CAC3C,QAAQ;EACJ,QAAQ,IAAI,kCAAkC;CAClD,UAAU;EACN,QAAQ,MAAM;CAClB;AACJ;AAEA,eAAsB,gBAA+B;CACjD,MAAM,WAAW;CACjB,MAAM,SAAS,MAAM,iBAAiB;CACtC,MAAM,SAAS,MAAM,OAAO,OAAO;CACnC,QAAQ,IAAI,mCAAmC,OAAO,IAAI,GAAG;CAC7D,OAAO,MAAM;AACjB"}
|