@m2c2kit/build-helpers 0.3.29 → 0.3.31

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/index.js +324 -1464
  2. package/package.json +12 -12
package/dist/index.js CHANGED
@@ -19,20 +19,6 @@ import { fileURLToPath as fileURLToPath$1 } from 'node:url';
19
19
  import 'node:stream';
20
20
  import child_process$2 from 'child_process';
21
21
 
22
- // Generated using scripts/write-decode-map.ts
23
- const htmlDecodeTree = /* #__PURE__ */ new Uint16Array(
24
- // prettier-ignore
25
- /* #__PURE__ */ "\u1d41<\xd5\u0131\u028a\u049d\u057b\u05d0\u0675\u06de\u07a2\u07d6\u080f\u0a4a\u0a91\u0da1\u0e6d\u0f09\u0f26\u10ca\u1228\u12e1\u1415\u149d\u14c3\u14df\u1525\0\0\0\0\0\0\u156b\u16cd\u198d\u1c12\u1ddd\u1f7e\u2060\u21b0\u228d\u23c0\u23fb\u2442\u2824\u2912\u2d08\u2e48\u2fce\u3016\u32ba\u3639\u37ac\u38fe\u3a28\u3a71\u3ae0\u3b2e\u0800EMabcfglmnoprstu\\bfms\x7f\x84\x8b\x90\x95\x98\xa6\xb3\xb9\xc8\xcflig\u803b\xc6\u40c6P\u803b&\u4026cute\u803b\xc1\u40c1reve;\u4102\u0100iyx}rc\u803b\xc2\u40c2;\u4410r;\uc000\ud835\udd04rave\u803b\xc0\u40c0pha;\u4391acr;\u4100d;\u6a53\u0100gp\x9d\xa1on;\u4104f;\uc000\ud835\udd38plyFunction;\u6061ing\u803b\xc5\u40c5\u0100cs\xbe\xc3r;\uc000\ud835\udc9cign;\u6254ilde\u803b\xc3\u40c3ml\u803b\xc4\u40c4\u0400aceforsu\xe5\xfb\xfe\u0117\u011c\u0122\u0127\u012a\u0100cr\xea\xf2kslash;\u6216\u0176\xf6\xf8;\u6ae7ed;\u6306y;\u4411\u0180crt\u0105\u010b\u0114ause;\u6235noullis;\u612ca;\u4392r;\uc000\ud835\udd05pf;\uc000\ud835\udd39eve;\u42d8c\xf2\u0113mpeq;\u624e\u0700HOacdefhilorsu\u014d\u0151\u0156\u0180\u019e\u01a2\u01b5\u01b7\u01ba\u01dc\u0215\u0273\u0278\u027ecy;\u4427PY\u803b\xa9\u40a9\u0180cpy\u015d\u0162\u017aute;\u4106\u0100;i\u0167\u0168\u62d2talDifferentialD;\u6145leys;\u612d\u0200aeio\u0189\u018e\u0194\u0198ron;\u410cdil\u803b\xc7\u40c7rc;\u4108nint;\u6230ot;\u410a\u0100dn\u01a7\u01adilla;\u40b8terDot;\u40b7\xf2\u017fi;\u43a7rcle\u0200DMPT\u01c7\u01cb\u01d1\u01d6ot;\u6299inus;\u6296lus;\u6295imes;\u6297o\u0100cs\u01e2\u01f8kwiseContourIntegral;\u6232eCurly\u0100DQ\u0203\u020foubleQuote;\u601duote;\u6019\u0200lnpu\u021e\u0228\u0247\u0255on\u0100;e\u0225\u0226\u6237;\u6a74\u0180git\u022f\u0236\u023aruent;\u6261nt;\u622fourIntegral;\u622e\u0100fr\u024c\u024e;\u6102oduct;\u6210nterClockwiseContourIntegral;\u6233oss;\u6a2fcr;\uc000\ud835\udc9ep\u0100;C\u0284\u0285\u62d3ap;\u624d\u0580DJSZacefios\u02a0\u02ac\u02b0\u02b4\u02b8\u02cb\u02d7\u02e1\u02e6\u0333\u048d\u0100;o\u0179\u02a5trahd;\u6911cy;\u4402cy;\u4405cy;\u440f\u0180grs\u02bf\u02c4\u02c7ger;\u6021r;\u61a1hv;\u6ae4\u0100ay\u02d0\u02d5ron;\u410e;\u4414l\u0100;t\u02dd\u02de\u6207a;\u4394r;\uc000\ud835\udd07\u0100af\u02eb\u0327\u0100cm\u02f0\u0322ritical\u0200ADGT\u0300\u0306\u0316\u031ccute;\u40b4o\u0174\u030b\u030d;\u42d9bleAcute;\u42ddrave;\u4060ilde;\u42dcond;\u62c4ferentialD;\u6146\u0470\u033d\0\0\0\u0342\u0354\0\u0405f;\uc000\ud835\udd3b\u0180;DE\u0348\u0349\u034d\u40a8ot;\u60dcqual;\u6250ble\u0300CDLRUV\u0363\u0372\u0382\u03cf\u03e2\u03f8ontourIntegra\xec\u0239o\u0274\u0379\0\0\u037b\xbb\u0349nArrow;\u61d3\u0100eo\u0387\u03a4ft\u0180ART\u0390\u0396\u03a1rrow;\u61d0ightArrow;\u61d4e\xe5\u02cang\u0100LR\u03ab\u03c4eft\u0100AR\u03b3\u03b9rrow;\u67f8ightArrow;\u67faightArrow;\u67f9ight\u0100AT\u03d8\u03derrow;\u61d2ee;\u62a8p\u0241\u03e9\0\0\u03efrrow;\u61d1ownArrow;\u61d5erticalBar;\u6225n\u0300ABLRTa\u0412\u042a\u0430\u045e\u047f\u037crrow\u0180;BU\u041d\u041e\u0422\u6193ar;\u6913pArrow;\u61f5reve;\u4311eft\u02d2\u043a\0\u0446\0\u0450ightVector;\u6950eeVector;\u695eector\u0100;B\u0459\u045a\u61bdar;\u6956ight\u01d4\u0467\0\u0471eeVector;\u695fector\u0100;B\u047a\u047b\u61c1ar;\u6957ee\u0100;A\u0486\u0487\u62a4rrow;\u61a7\u0100ct\u0492\u0497r;\uc000\ud835\udc9frok;\u4110\u0800NTacdfglmopqstux\u04bd\u04c0\u04c4\u04cb\u04de\u04e2\u04e7\u04ee\u04f5\u0521\u052f\u0536\u0552\u055d\u0560\u0565G;\u414aH\u803b\xd0\u40d0cute\u803b\xc9\u40c9\u0180aiy\u04d2\u04d7\u04dcron;\u411arc\u803b\xca\u40ca;\u442dot;\u4116r;\uc000\ud835\udd08rave\u803b\xc8\u40c8ement;\u6208\u0100ap\u04fa\u04fecr;\u4112ty\u0253\u0506\0\0\u0512mallSquare;\u65fberySmallSquare;\u65ab\u0100gp\u0526\u052aon;\u4118f;\uc000\ud835\udd3csilon;\u4395u\u0100ai\u053c\u0549l\u0100;T\u0542\u0543\u6a75ilde;\u6242librium;\u61cc\u0100ci\u0557\u055ar;\u6130m;\u6a73a;\u4397ml\u803b\xcb\u40cb\u0100ip\u056a\u056fsts;\u6203onentialE;\u6147\u0280cfios\u0585\u0588\u058d\u05b2\u05ccy;\u4424r;\uc000\ud835\udd09lled\u0253\u0597\0\0\u05a3mallSquare;\u65fcerySmallSquare;\u65aa\u0370\u05ba\0\u05bf\0\0\u05c4f;\uc000\ud835\udd3dAll;\u6200riertrf;\u6131c\xf2\u05cb\u0600JTabcdfgorst\u05e8\u05ec\u05ef\u05fa\u0600\u0612\u0616\u061b\u061d\u0623\u066c\u0672cy;\u4403\u803b>\u403emma\u0100;d\u05f7\u05f8\u4393;\u43dcreve;\u411e\u0180eiy\u0607\u060c\u0610dil;\u4122rc;\u411c;\u4413ot;\u4120r;\uc000\ud835\udd0a;\u62d9pf;\uc000\ud835\udd3eeater\u0300EFGLST\u0635\u0644\u064e\u0656\u065b\u0666qual\u0100;L\u063e\u063f\u6265ess;\u62dbullEqual;\u6267reater;\u6aa2ess;\u6277lantEqual;\u6a7eilde;\u6273cr;\uc000\ud835\udca2;\u626b\u0400Aacfiosu\u0685\u068b\u0696\u069b\u069e\u06aa\u06be\u06caRDcy;\u442a\u0100ct\u0690\u0694ek;\u42c7;\u405eirc;\u4124r;\u610clbertSpace;\u610b\u01f0\u06af\0\u06b2f;\u610dizontalLine;\u6500\u0100ct\u06c3\u06c5\xf2\u06a9rok;\u4126mp\u0144\u06d0\u06d8ownHum\xf0\u012fqual;\u624f\u0700EJOacdfgmnostu\u06fa\u06fe\u0703\u0707\u070e\u071a\u071e\u0721\u0728\u0744\u0778\u078b\u078f\u0795cy;\u4415lig;\u4132cy;\u4401cute\u803b\xcd\u40cd\u0100iy\u0713\u0718rc\u803b\xce\u40ce;\u4418ot;\u4130r;\u6111rave\u803b\xcc\u40cc\u0180;ap\u0720\u072f\u073f\u0100cg\u0734\u0737r;\u412ainaryI;\u6148lie\xf3\u03dd\u01f4\u0749\0\u0762\u0100;e\u074d\u074e\u622c\u0100gr\u0753\u0758ral;\u622bsection;\u62c2isible\u0100CT\u076c\u0772omma;\u6063imes;\u6062\u0180gpt\u077f\u0783\u0788on;\u412ef;\uc000\ud835\udd40a;\u4399cr;\u6110ilde;\u4128\u01eb\u079a\0\u079ecy;\u4406l\u803b\xcf\u40cf\u0280cfosu\u07ac\u07b7\u07bc\u07c2\u07d0\u0100iy\u07b1\u07b5rc;\u4134;\u4419r;\uc000\ud835\udd0dpf;\uc000\ud835\udd41\u01e3\u07c7\0\u07ccr;\uc000\ud835\udca5rcy;\u4408kcy;\u4404\u0380HJacfos\u07e4\u07e8\u07ec\u07f1\u07fd\u0802\u0808cy;\u4425cy;\u440cppa;\u439a\u0100ey\u07f6\u07fbdil;\u4136;\u441ar;\uc000\ud835\udd0epf;\uc000\ud835\udd42cr;\uc000\ud835\udca6\u0580JTaceflmost\u0825\u0829\u082c\u0850\u0863\u09b3\u09b8\u09c7\u09cd\u0a37\u0a47cy;\u4409\u803b<\u403c\u0280cmnpr\u0837\u083c\u0841\u0844\u084dute;\u4139bda;\u439bg;\u67ealacetrf;\u6112r;\u619e\u0180aey\u0857\u085c\u0861ron;\u413ddil;\u413b;\u441b\u0100fs\u0868\u0970t\u0500ACDFRTUVar\u087e\u08a9\u08b1\u08e0\u08e6\u08fc\u092f\u095b\u0390\u096a\u0100nr\u0883\u088fgleBracket;\u67e8row\u0180;BR\u0899\u089a\u089e\u6190ar;\u61e4ightArrow;\u61c6eiling;\u6308o\u01f5\u08b7\0\u08c3bleBracket;\u67e6n\u01d4\u08c8\0\u08d2eeVector;\u6961ector\u0100;B\u08db\u08dc\u61c3ar;\u6959loor;\u630aight\u0100AV\u08ef\u08f5rrow;\u6194ector;\u694e\u0100er\u0901\u0917e\u0180;AV\u0909\u090a\u0910\u62a3rrow;\u61a4ector;\u695aiangle\u0180;BE\u0924\u0925\u0929\u62b2ar;\u69cfqual;\u62b4p\u0180DTV\u0937\u0942\u094cownVector;\u6951eeVector;\u6960ector\u0100;B\u0956\u0957\u61bfar;\u6958ector\u0100;B\u0965\u0966\u61bcar;\u6952ight\xe1\u039cs\u0300EFGLST\u097e\u098b\u0995\u099d\u09a2\u09adqualGreater;\u62daullEqual;\u6266reater;\u6276ess;\u6aa1lantEqual;\u6a7dilde;\u6272r;\uc000\ud835\udd0f\u0100;e\u09bd\u09be\u62d8ftarrow;\u61daidot;\u413f\u0180npw\u09d4\u0a16\u0a1bg\u0200LRlr\u09de\u09f7\u0a02\u0a10eft\u0100AR\u09e6\u09ecrrow;\u67f5ightArrow;\u67f7ightArrow;\u67f6eft\u0100ar\u03b3\u0a0aight\xe1\u03bfight\xe1\u03caf;\uc000\ud835\udd43er\u0100LR\u0a22\u0a2ceftArrow;\u6199ightArrow;\u6198\u0180cht\u0a3e\u0a40\u0a42\xf2\u084c;\u61b0rok;\u4141;\u626a\u0400acefiosu\u0a5a\u0a5d\u0a60\u0a77\u0a7c\u0a85\u0a8b\u0a8ep;\u6905y;\u441c\u0100dl\u0a65\u0a6fiumSpace;\u605flintrf;\u6133r;\uc000\ud835\udd10nusPlus;\u6213pf;\uc000\ud835\udd44c\xf2\u0a76;\u439c\u0480Jacefostu\u0aa3\u0aa7\u0aad\u0ac0\u0b14\u0b19\u0d91\u0d97\u0d9ecy;\u440acute;\u4143\u0180aey\u0ab4\u0ab9\u0aberon;\u4147dil;\u4145;\u441d\u0180gsw\u0ac7\u0af0\u0b0eative\u0180MTV\u0ad3\u0adf\u0ae8ediumSpace;\u600bhi\u0100cn\u0ae6\u0ad8\xeb\u0ad9eryThi\xee\u0ad9ted\u0100GL\u0af8\u0b06reaterGreate\xf2\u0673essLes\xf3\u0a48Line;\u400ar;\uc000\ud835\udd11\u0200Bnpt\u0b22\u0b28\u0b37\u0b3areak;\u6060BreakingSpace;\u40a0f;\u6115\u0680;CDEGHLNPRSTV\u0b55\u0b56\u0b6a\u0b7c\u0ba1\u0beb\u0c04\u0c5e\u0c84\u0ca6\u0cd8\u0d61\u0d85\u6aec\u0100ou\u0b5b\u0b64ngruent;\u6262pCap;\u626doubleVerticalBar;\u6226\u0180lqx\u0b83\u0b8a\u0b9bement;\u6209ual\u0100;T\u0b92\u0b93\u6260ilde;\uc000\u2242\u0338ists;\u6204reater\u0380;EFGLST\u0bb6\u0bb7\u0bbd\u0bc9\u0bd3\u0bd8\u0be5\u626fqual;\u6271ullEqual;\uc000\u2267\u0338reater;\uc000\u226b\u0338ess;\u6279lantEqual;\uc000\u2a7e\u0338ilde;\u6275ump\u0144\u0bf2\u0bfdownHump;\uc000\u224e\u0338qual;\uc000\u224f\u0338e\u0100fs\u0c0a\u0c27tTriangle\u0180;BE\u0c1a\u0c1b\u0c21\u62eaar;\uc000\u29cf\u0338qual;\u62ecs\u0300;EGLST\u0c35\u0c36\u0c3c\u0c44\u0c4b\u0c58\u626equal;\u6270reater;\u6278ess;\uc000\u226a\u0338lantEqual;\uc000\u2a7d\u0338ilde;\u6274ested\u0100GL\u0c68\u0c79reaterGreater;\uc000\u2aa2\u0338essLess;\uc000\u2aa1\u0338recedes\u0180;ES\u0c92\u0c93\u0c9b\u6280qual;\uc000\u2aaf\u0338lantEqual;\u62e0\u0100ei\u0cab\u0cb9verseElement;\u620cghtTriangle\u0180;BE\u0ccb\u0ccc\u0cd2\u62ebar;\uc000\u29d0\u0338qual;\u62ed\u0100qu\u0cdd\u0d0cuareSu\u0100bp\u0ce8\u0cf9set\u0100;E\u0cf0\u0cf3\uc000\u228f\u0338qual;\u62e2erset\u0100;E\u0d03\u0d06\uc000\u2290\u0338qual;\u62e3\u0180bcp\u0d13\u0d24\u0d4eset\u0100;E\u0d1b\u0d1e\uc000\u2282\u20d2qual;\u6288ceeds\u0200;EST\u0d32\u0d33\u0d3b\u0d46\u6281qual;\uc000\u2ab0\u0338lantEqual;\u62e1ilde;\uc000\u227f\u0338erset\u0100;E\u0d58\u0d5b\uc000\u2283\u20d2qual;\u6289ilde\u0200;EFT\u0d6e\u0d6f\u0d75\u0d7f\u6241qual;\u6244ullEqual;\u6247ilde;\u6249erticalBar;\u6224cr;\uc000\ud835\udca9ilde\u803b\xd1\u40d1;\u439d\u0700Eacdfgmoprstuv\u0dbd\u0dc2\u0dc9\u0dd5\u0ddb\u0de0\u0de7\u0dfc\u0e02\u0e20\u0e22\u0e32\u0e3f\u0e44lig;\u4152cute\u803b\xd3\u40d3\u0100iy\u0dce\u0dd3rc\u803b\xd4\u40d4;\u441eblac;\u4150r;\uc000\ud835\udd12rave\u803b\xd2\u40d2\u0180aei\u0dee\u0df2\u0df6cr;\u414cga;\u43a9cron;\u439fpf;\uc000\ud835\udd46enCurly\u0100DQ\u0e0e\u0e1aoubleQuote;\u601cuote;\u6018;\u6a54\u0100cl\u0e27\u0e2cr;\uc000\ud835\udcaaash\u803b\xd8\u40d8i\u016c\u0e37\u0e3cde\u803b\xd5\u40d5es;\u6a37ml\u803b\xd6\u40d6er\u0100BP\u0e4b\u0e60\u0100ar\u0e50\u0e53r;\u603eac\u0100ek\u0e5a\u0e5c;\u63deet;\u63b4arenthesis;\u63dc\u0480acfhilors\u0e7f\u0e87\u0e8a\u0e8f\u0e92\u0e94\u0e9d\u0eb0\u0efcrtialD;\u6202y;\u441fr;\uc000\ud835\udd13i;\u43a6;\u43a0usMinus;\u40b1\u0100ip\u0ea2\u0eadncareplan\xe5\u069df;\u6119\u0200;eio\u0eb9\u0eba\u0ee0\u0ee4\u6abbcedes\u0200;EST\u0ec8\u0ec9\u0ecf\u0eda\u627aqual;\u6aaflantEqual;\u627cilde;\u627eme;\u6033\u0100dp\u0ee9\u0eeeuct;\u620fortion\u0100;a\u0225\u0ef9l;\u621d\u0100ci\u0f01\u0f06r;\uc000\ud835\udcab;\u43a8\u0200Ufos\u0f11\u0f16\u0f1b\u0f1fOT\u803b\"\u4022r;\uc000\ud835\udd14pf;\u611acr;\uc000\ud835\udcac\u0600BEacefhiorsu\u0f3e\u0f43\u0f47\u0f60\u0f73\u0fa7\u0faa\u0fad\u1096\u10a9\u10b4\u10bearr;\u6910G\u803b\xae\u40ae\u0180cnr\u0f4e\u0f53\u0f56ute;\u4154g;\u67ebr\u0100;t\u0f5c\u0f5d\u61a0l;\u6916\u0180aey\u0f67\u0f6c\u0f71ron;\u4158dil;\u4156;\u4420\u0100;v\u0f78\u0f79\u611cerse\u0100EU\u0f82\u0f99\u0100lq\u0f87\u0f8eement;\u620builibrium;\u61cbpEquilibrium;\u696fr\xbb\u0f79o;\u43a1ght\u0400ACDFTUVa\u0fc1\u0feb\u0ff3\u1022\u1028\u105b\u1087\u03d8\u0100nr\u0fc6\u0fd2gleBracket;\u67e9row\u0180;BL\u0fdc\u0fdd\u0fe1\u6192ar;\u61e5eftArrow;\u61c4eiling;\u6309o\u01f5\u0ff9\0\u1005bleBracket;\u67e7n\u01d4\u100a\0\u1014eeVector;\u695dector\u0100;B\u101d\u101e\u61c2ar;\u6955loor;\u630b\u0100er\u102d\u1043e\u0180;AV\u1035\u1036\u103c\u62a2rrow;\u61a6ector;\u695biangle\u0180;BE\u1050\u1051\u1055\u62b3ar;\u69d0qual;\u62b5p\u0180DTV\u1063\u106e\u1078ownVector;\u694feeVector;\u695cector\u0100;B\u1082\u1083\u61bear;\u6954ector\u0100;B\u1091\u1092\u61c0ar;\u6953\u0100pu\u109b\u109ef;\u611dndImplies;\u6970ightarrow;\u61db\u0100ch\u10b9\u10bcr;\u611b;\u61b1leDelayed;\u69f4\u0680HOacfhimoqstu\u10e4\u10f1\u10f7\u10fd\u1119\u111e\u1151\u1156\u1161\u1167\u11b5\u11bb\u11bf\u0100Cc\u10e9\u10eeHcy;\u4429y;\u4428FTcy;\u442ccute;\u415a\u0280;aeiy\u1108\u1109\u110e\u1113\u1117\u6abcron;\u4160dil;\u415erc;\u415c;\u4421r;\uc000\ud835\udd16ort\u0200DLRU\u112a\u1134\u113e\u1149ownArrow\xbb\u041eeftArrow\xbb\u089aightArrow\xbb\u0fddpArrow;\u6191gma;\u43a3allCircle;\u6218pf;\uc000\ud835\udd4a\u0272\u116d\0\0\u1170t;\u621aare\u0200;ISU\u117b\u117c\u1189\u11af\u65a1ntersection;\u6293u\u0100bp\u118f\u119eset\u0100;E\u1197\u1198\u628fqual;\u6291erset\u0100;E\u11a8\u11a9\u6290qual;\u6292nion;\u6294cr;\uc000\ud835\udcaear;\u62c6\u0200bcmp\u11c8\u11db\u1209\u120b\u0100;s\u11cd\u11ce\u62d0et\u0100;E\u11cd\u11d5qual;\u6286\u0100ch\u11e0\u1205eeds\u0200;EST\u11ed\u11ee\u11f4\u11ff\u627bqual;\u6ab0lantEqual;\u627dilde;\u627fTh\xe1\u0f8c;\u6211\u0180;es\u1212\u1213\u1223\u62d1rset\u0100;E\u121c\u121d\u6283qual;\u6287et\xbb\u1213\u0580HRSacfhiors\u123e\u1244\u1249\u1255\u125e\u1271\u1276\u129f\u12c2\u12c8\u12d1ORN\u803b\xde\u40deADE;\u6122\u0100Hc\u124e\u1252cy;\u440by;\u4426\u0100bu\u125a\u125c;\u4009;\u43a4\u0180aey\u1265\u126a\u126fron;\u4164dil;\u4162;\u4422r;\uc000\ud835\udd17\u0100ei\u127b\u1289\u01f2\u1280\0\u1287efore;\u6234a;\u4398\u0100cn\u128e\u1298kSpace;\uc000\u205f\u200aSpace;\u6009lde\u0200;EFT\u12ab\u12ac\u12b2\u12bc\u623cqual;\u6243ullEqual;\u6245ilde;\u6248pf;\uc000\ud835\udd4bipleDot;\u60db\u0100ct\u12d6\u12dbr;\uc000\ud835\udcafrok;\u4166\u0ae1\u12f7\u130e\u131a\u1326\0\u132c\u1331\0\0\0\0\0\u1338\u133d\u1377\u1385\0\u13ff\u1404\u140a\u1410\u0100cr\u12fb\u1301ute\u803b\xda\u40dar\u0100;o\u1307\u1308\u619fcir;\u6949r\u01e3\u1313\0\u1316y;\u440eve;\u416c\u0100iy\u131e\u1323rc\u803b\xdb\u40db;\u4423blac;\u4170r;\uc000\ud835\udd18rave\u803b\xd9\u40d9acr;\u416a\u0100di\u1341\u1369er\u0100BP\u1348\u135d\u0100ar\u134d\u1350r;\u405fac\u0100ek\u1357\u1359;\u63dfet;\u63b5arenthesis;\u63ddon\u0100;P\u1370\u1371\u62c3lus;\u628e\u0100gp\u137b\u137fon;\u4172f;\uc000\ud835\udd4c\u0400ADETadps\u1395\u13ae\u13b8\u13c4\u03e8\u13d2\u13d7\u13f3rrow\u0180;BD\u1150\u13a0\u13a4ar;\u6912ownArrow;\u61c5ownArrow;\u6195quilibrium;\u696eee\u0100;A\u13cb\u13cc\u62a5rrow;\u61a5own\xe1\u03f3er\u0100LR\u13de\u13e8eftArrow;\u6196ightArrow;\u6197i\u0100;l\u13f9\u13fa\u43d2on;\u43a5ing;\u416ecr;\uc000\ud835\udcb0ilde;\u4168ml\u803b\xdc\u40dc\u0480Dbcdefosv\u1427\u142c\u1430\u1433\u143e\u1485\u148a\u1490\u1496ash;\u62abar;\u6aeby;\u4412ash\u0100;l\u143b\u143c\u62a9;\u6ae6\u0100er\u1443\u1445;\u62c1\u0180bty\u144c\u1450\u147aar;\u6016\u0100;i\u144f\u1455cal\u0200BLST\u1461\u1465\u146a\u1474ar;\u6223ine;\u407ceparator;\u6758ilde;\u6240ThinSpace;\u600ar;\uc000\ud835\udd19pf;\uc000\ud835\udd4dcr;\uc000\ud835\udcb1dash;\u62aa\u0280cefos\u14a7\u14ac\u14b1\u14b6\u14bcirc;\u4174dge;\u62c0r;\uc000\ud835\udd1apf;\uc000\ud835\udd4ecr;\uc000\ud835\udcb2\u0200fios\u14cb\u14d0\u14d2\u14d8r;\uc000\ud835\udd1b;\u439epf;\uc000\ud835\udd4fcr;\uc000\ud835\udcb3\u0480AIUacfosu\u14f1\u14f5\u14f9\u14fd\u1504\u150f\u1514\u151a\u1520cy;\u442fcy;\u4407cy;\u442ecute\u803b\xdd\u40dd\u0100iy\u1509\u150drc;\u4176;\u442br;\uc000\ud835\udd1cpf;\uc000\ud835\udd50cr;\uc000\ud835\udcb4ml;\u4178\u0400Hacdefos\u1535\u1539\u153f\u154b\u154f\u155d\u1560\u1564cy;\u4416cute;\u4179\u0100ay\u1544\u1549ron;\u417d;\u4417ot;\u417b\u01f2\u1554\0\u155boWidt\xe8\u0ad9a;\u4396r;\u6128pf;\u6124cr;\uc000\ud835\udcb5\u0be1\u1583\u158a\u1590\0\u15b0\u15b6\u15bf\0\0\0\0\u15c6\u15db\u15eb\u165f\u166d\0\u1695\u169b\u16b2\u16b9\0\u16becute\u803b\xe1\u40e1reve;\u4103\u0300;Ediuy\u159c\u159d\u15a1\u15a3\u15a8\u15ad\u623e;\uc000\u223e\u0333;\u623frc\u803b\xe2\u40e2te\u80bb\xb4\u0306;\u4430lig\u803b\xe6\u40e6\u0100;r\xb2\u15ba;\uc000\ud835\udd1erave\u803b\xe0\u40e0\u0100ep\u15ca\u15d6\u0100fp\u15cf\u15d4sym;\u6135\xe8\u15d3ha;\u43b1\u0100ap\u15dfc\u0100cl\u15e4\u15e7r;\u4101g;\u6a3f\u0264\u15f0\0\0\u160a\u0280;adsv\u15fa\u15fb\u15ff\u1601\u1607\u6227nd;\u6a55;\u6a5clope;\u6a58;\u6a5a\u0380;elmrsz\u1618\u1619\u161b\u161e\u163f\u164f\u1659\u6220;\u69a4e\xbb\u1619sd\u0100;a\u1625\u1626\u6221\u0461\u1630\u1632\u1634\u1636\u1638\u163a\u163c\u163e;\u69a8;\u69a9;\u69aa;\u69ab;\u69ac;\u69ad;\u69ae;\u69aft\u0100;v\u1645\u1646\u621fb\u0100;d\u164c\u164d\u62be;\u699d\u0100pt\u1654\u1657h;\u6222\xbb\xb9arr;\u637c\u0100gp\u1663\u1667on;\u4105f;\uc000\ud835\udd52\u0380;Eaeiop\u12c1\u167b\u167d\u1682\u1684\u1687\u168a;\u6a70cir;\u6a6f;\u624ad;\u624bs;\u4027rox\u0100;e\u12c1\u1692\xf1\u1683ing\u803b\xe5\u40e5\u0180cty\u16a1\u16a6\u16a8r;\uc000\ud835\udcb6;\u402amp\u0100;e\u12c1\u16af\xf1\u0288ilde\u803b\xe3\u40e3ml\u803b\xe4\u40e4\u0100ci\u16c2\u16c8onin\xf4\u0272nt;\u6a11\u0800Nabcdefiklnoprsu\u16ed\u16f1\u1730\u173c\u1743\u1748\u1778\u177d\u17e0\u17e6\u1839\u1850\u170d\u193d\u1948\u1970ot;\u6aed\u0100cr\u16f6\u171ek\u0200ceps\u1700\u1705\u170d\u1713ong;\u624cpsilon;\u43f6rime;\u6035im\u0100;e\u171a\u171b\u623dq;\u62cd\u0176\u1722\u1726ee;\u62bded\u0100;g\u172c\u172d\u6305e\xbb\u172drk\u0100;t\u135c\u1737brk;\u63b6\u0100oy\u1701\u1741;\u4431quo;\u601e\u0280cmprt\u1753\u175b\u1761\u1764\u1768aus\u0100;e\u010a\u0109ptyv;\u69b0s\xe9\u170cno\xf5\u0113\u0180ahw\u176f\u1771\u1773;\u43b2;\u6136een;\u626cr;\uc000\ud835\udd1fg\u0380costuvw\u178d\u179d\u17b3\u17c1\u17d5\u17db\u17de\u0180aiu\u1794\u1796\u179a\xf0\u0760rc;\u65efp\xbb\u1371\u0180dpt\u17a4\u17a8\u17adot;\u6a00lus;\u6a01imes;\u6a02\u0271\u17b9\0\0\u17becup;\u6a06ar;\u6605riangle\u0100du\u17cd\u17d2own;\u65bdp;\u65b3plus;\u6a04e\xe5\u1444\xe5\u14adarow;\u690d\u0180ako\u17ed\u1826\u1835\u0100cn\u17f2\u1823k\u0180lst\u17fa\u05ab\u1802ozenge;\u69ebriangle\u0200;dlr\u1812\u1813\u1818\u181d\u65b4own;\u65beeft;\u65c2ight;\u65b8k;\u6423\u01b1\u182b\0\u1833\u01b2\u182f\0\u1831;\u6592;\u65914;\u6593ck;\u6588\u0100eo\u183e\u184d\u0100;q\u1843\u1846\uc000=\u20e5uiv;\uc000\u2261\u20e5t;\u6310\u0200ptwx\u1859\u185e\u1867\u186cf;\uc000\ud835\udd53\u0100;t\u13cb\u1863om\xbb\u13cctie;\u62c8\u0600DHUVbdhmptuv\u1885\u1896\u18aa\u18bb\u18d7\u18db\u18ec\u18ff\u1905\u190a\u1910\u1921\u0200LRlr\u188e\u1890\u1892\u1894;\u6557;\u6554;\u6556;\u6553\u0280;DUdu\u18a1\u18a2\u18a4\u18a6\u18a8\u6550;\u6566;\u6569;\u6564;\u6567\u0200LRlr\u18b3\u18b5\u18b7\u18b9;\u655d;\u655a;\u655c;\u6559\u0380;HLRhlr\u18ca\u18cb\u18cd\u18cf\u18d1\u18d3\u18d5\u6551;\u656c;\u6563;\u6560;\u656b;\u6562;\u655fox;\u69c9\u0200LRlr\u18e4\u18e6\u18e8\u18ea;\u6555;\u6552;\u6510;\u650c\u0280;DUdu\u06bd\u18f7\u18f9\u18fb\u18fd;\u6565;\u6568;\u652c;\u6534inus;\u629flus;\u629eimes;\u62a0\u0200LRlr\u1919\u191b\u191d\u191f;\u655b;\u6558;\u6518;\u6514\u0380;HLRhlr\u1930\u1931\u1933\u1935\u1937\u1939\u193b\u6502;\u656a;\u6561;\u655e;\u653c;\u6524;\u651c\u0100ev\u0123\u1942bar\u803b\xa6\u40a6\u0200ceio\u1951\u1956\u195a\u1960r;\uc000\ud835\udcb7mi;\u604fm\u0100;e\u171a\u171cl\u0180;bh\u1968\u1969\u196b\u405c;\u69c5sub;\u67c8\u016c\u1974\u197el\u0100;e\u1979\u197a\u6022t\xbb\u197ap\u0180;Ee\u012f\u1985\u1987;\u6aae\u0100;q\u06dc\u06db\u0ce1\u19a7\0\u19e8\u1a11\u1a15\u1a32\0\u1a37\u1a50\0\0\u1ab4\0\0\u1ac1\0\0\u1b21\u1b2e\u1b4d\u1b52\0\u1bfd\0\u1c0c\u0180cpr\u19ad\u19b2\u19ddute;\u4107\u0300;abcds\u19bf\u19c0\u19c4\u19ca\u19d5\u19d9\u6229nd;\u6a44rcup;\u6a49\u0100au\u19cf\u19d2p;\u6a4bp;\u6a47ot;\u6a40;\uc000\u2229\ufe00\u0100eo\u19e2\u19e5t;\u6041\xee\u0693\u0200aeiu\u19f0\u19fb\u1a01\u1a05\u01f0\u19f5\0\u19f8s;\u6a4don;\u410ddil\u803b\xe7\u40e7rc;\u4109ps\u0100;s\u1a0c\u1a0d\u6a4cm;\u6a50ot;\u410b\u0180dmn\u1a1b\u1a20\u1a26il\u80bb\xb8\u01adptyv;\u69b2t\u8100\xa2;e\u1a2d\u1a2e\u40a2r\xe4\u01b2r;\uc000\ud835\udd20\u0180cei\u1a3d\u1a40\u1a4dy;\u4447ck\u0100;m\u1a47\u1a48\u6713ark\xbb\u1a48;\u43c7r\u0380;Ecefms\u1a5f\u1a60\u1a62\u1a6b\u1aa4\u1aaa\u1aae\u65cb;\u69c3\u0180;el\u1a69\u1a6a\u1a6d\u42c6q;\u6257e\u0261\u1a74\0\0\u1a88rrow\u0100lr\u1a7c\u1a81eft;\u61baight;\u61bb\u0280RSacd\u1a92\u1a94\u1a96\u1a9a\u1a9f\xbb\u0f47;\u64c8st;\u629birc;\u629aash;\u629dnint;\u6a10id;\u6aefcir;\u69c2ubs\u0100;u\u1abb\u1abc\u6663it\xbb\u1abc\u02ec\u1ac7\u1ad4\u1afa\0\u1b0aon\u0100;e\u1acd\u1ace\u403a\u0100;q\xc7\xc6\u026d\u1ad9\0\0\u1ae2a\u0100;t\u1ade\u1adf\u402c;\u4040\u0180;fl\u1ae8\u1ae9\u1aeb\u6201\xee\u1160e\u0100mx\u1af1\u1af6ent\xbb\u1ae9e\xf3\u024d\u01e7\u1afe\0\u1b07\u0100;d\u12bb\u1b02ot;\u6a6dn\xf4\u0246\u0180fry\u1b10\u1b14\u1b17;\uc000\ud835\udd54o\xe4\u0254\u8100\xa9;s\u0155\u1b1dr;\u6117\u0100ao\u1b25\u1b29rr;\u61b5ss;\u6717\u0100cu\u1b32\u1b37r;\uc000\ud835\udcb8\u0100bp\u1b3c\u1b44\u0100;e\u1b41\u1b42\u6acf;\u6ad1\u0100;e\u1b49\u1b4a\u6ad0;\u6ad2dot;\u62ef\u0380delprvw\u1b60\u1b6c\u1b77\u1b82\u1bac\u1bd4\u1bf9arr\u0100lr\u1b68\u1b6a;\u6938;\u6935\u0270\u1b72\0\0\u1b75r;\u62dec;\u62dfarr\u0100;p\u1b7f\u1b80\u61b6;\u693d\u0300;bcdos\u1b8f\u1b90\u1b96\u1ba1\u1ba5\u1ba8\u622arcap;\u6a48\u0100au\u1b9b\u1b9ep;\u6a46p;\u6a4aot;\u628dr;\u6a45;\uc000\u222a\ufe00\u0200alrv\u1bb5\u1bbf\u1bde\u1be3rr\u0100;m\u1bbc\u1bbd\u61b7;\u693cy\u0180evw\u1bc7\u1bd4\u1bd8q\u0270\u1bce\0\0\u1bd2re\xe3\u1b73u\xe3\u1b75ee;\u62ceedge;\u62cfen\u803b\xa4\u40a4earrow\u0100lr\u1bee\u1bf3eft\xbb\u1b80ight\xbb\u1bbde\xe4\u1bdd\u0100ci\u1c01\u1c07onin\xf4\u01f7nt;\u6231lcty;\u632d\u0980AHabcdefhijlorstuwz\u1c38\u1c3b\u1c3f\u1c5d\u1c69\u1c75\u1c8a\u1c9e\u1cac\u1cb7\u1cfb\u1cff\u1d0d\u1d7b\u1d91\u1dab\u1dbb\u1dc6\u1dcdr\xf2\u0381ar;\u6965\u0200glrs\u1c48\u1c4d\u1c52\u1c54ger;\u6020eth;\u6138\xf2\u1133h\u0100;v\u1c5a\u1c5b\u6010\xbb\u090a\u016b\u1c61\u1c67arow;\u690fa\xe3\u0315\u0100ay\u1c6e\u1c73ron;\u410f;\u4434\u0180;ao\u0332\u1c7c\u1c84\u0100gr\u02bf\u1c81r;\u61catseq;\u6a77\u0180glm\u1c91\u1c94\u1c98\u803b\xb0\u40b0ta;\u43b4ptyv;\u69b1\u0100ir\u1ca3\u1ca8sht;\u697f;\uc000\ud835\udd21ar\u0100lr\u1cb3\u1cb5\xbb\u08dc\xbb\u101e\u0280aegsv\u1cc2\u0378\u1cd6\u1cdc\u1ce0m\u0180;os\u0326\u1cca\u1cd4nd\u0100;s\u0326\u1cd1uit;\u6666amma;\u43ddin;\u62f2\u0180;io\u1ce7\u1ce8\u1cf8\u40f7de\u8100\xf7;o\u1ce7\u1cf0ntimes;\u62c7n\xf8\u1cf7cy;\u4452c\u026f\u1d06\0\0\u1d0arn;\u631eop;\u630d\u0280lptuw\u1d18\u1d1d\u1d22\u1d49\u1d55lar;\u4024f;\uc000\ud835\udd55\u0280;emps\u030b\u1d2d\u1d37\u1d3d\u1d42q\u0100;d\u0352\u1d33ot;\u6251inus;\u6238lus;\u6214quare;\u62a1blebarwedg\xe5\xfan\u0180adh\u112e\u1d5d\u1d67ownarrow\xf3\u1c83arpoon\u0100lr\u1d72\u1d76ef\xf4\u1cb4igh\xf4\u1cb6\u0162\u1d7f\u1d85karo\xf7\u0f42\u026f\u1d8a\0\0\u1d8ern;\u631fop;\u630c\u0180cot\u1d98\u1da3\u1da6\u0100ry\u1d9d\u1da1;\uc000\ud835\udcb9;\u4455l;\u69f6rok;\u4111\u0100dr\u1db0\u1db4ot;\u62f1i\u0100;f\u1dba\u1816\u65bf\u0100ah\u1dc0\u1dc3r\xf2\u0429a\xf2\u0fa6angle;\u69a6\u0100ci\u1dd2\u1dd5y;\u445fgrarr;\u67ff\u0900Dacdefglmnopqrstux\u1e01\u1e09\u1e19\u1e38\u0578\u1e3c\u1e49\u1e61\u1e7e\u1ea5\u1eaf\u1ebd\u1ee1\u1f2a\u1f37\u1f44\u1f4e\u1f5a\u0100Do\u1e06\u1d34o\xf4\u1c89\u0100cs\u1e0e\u1e14ute\u803b\xe9\u40e9ter;\u6a6e\u0200aioy\u1e22\u1e27\u1e31\u1e36ron;\u411br\u0100;c\u1e2d\u1e2e\u6256\u803b\xea\u40ealon;\u6255;\u444dot;\u4117\u0100Dr\u1e41\u1e45ot;\u6252;\uc000\ud835\udd22\u0180;rs\u1e50\u1e51\u1e57\u6a9aave\u803b\xe8\u40e8\u0100;d\u1e5c\u1e5d\u6a96ot;\u6a98\u0200;ils\u1e6a\u1e6b\u1e72\u1e74\u6a99nters;\u63e7;\u6113\u0100;d\u1e79\u1e7a\u6a95ot;\u6a97\u0180aps\u1e85\u1e89\u1e97cr;\u4113ty\u0180;sv\u1e92\u1e93\u1e95\u6205et\xbb\u1e93p\u01001;\u1e9d\u1ea4\u0133\u1ea1\u1ea3;\u6004;\u6005\u6003\u0100gs\u1eaa\u1eac;\u414bp;\u6002\u0100gp\u1eb4\u1eb8on;\u4119f;\uc000\ud835\udd56\u0180als\u1ec4\u1ece\u1ed2r\u0100;s\u1eca\u1ecb\u62d5l;\u69e3us;\u6a71i\u0180;lv\u1eda\u1edb\u1edf\u43b5on\xbb\u1edb;\u43f5\u0200csuv\u1eea\u1ef3\u1f0b\u1f23\u0100io\u1eef\u1e31rc\xbb\u1e2e\u0269\u1ef9\0\0\u1efb\xed\u0548ant\u0100gl\u1f02\u1f06tr\xbb\u1e5dess\xbb\u1e7a\u0180aei\u1f12\u1f16\u1f1als;\u403dst;\u625fv\u0100;D\u0235\u1f20D;\u6a78parsl;\u69e5\u0100Da\u1f2f\u1f33ot;\u6253rr;\u6971\u0180cdi\u1f3e\u1f41\u1ef8r;\u612fo\xf4\u0352\u0100ah\u1f49\u1f4b;\u43b7\u803b\xf0\u40f0\u0100mr\u1f53\u1f57l\u803b\xeb\u40ebo;\u60ac\u0180cip\u1f61\u1f64\u1f67l;\u4021s\xf4\u056e\u0100eo\u1f6c\u1f74ctatio\xee\u0559nential\xe5\u0579\u09e1\u1f92\0\u1f9e\0\u1fa1\u1fa7\0\0\u1fc6\u1fcc\0\u1fd3\0\u1fe6\u1fea\u2000\0\u2008\u205allingdotse\xf1\u1e44y;\u4444male;\u6640\u0180ilr\u1fad\u1fb3\u1fc1lig;\u8000\ufb03\u0269\u1fb9\0\0\u1fbdg;\u8000\ufb00ig;\u8000\ufb04;\uc000\ud835\udd23lig;\u8000\ufb01lig;\uc000fj\u0180alt\u1fd9\u1fdc\u1fe1t;\u666dig;\u8000\ufb02ns;\u65b1of;\u4192\u01f0\u1fee\0\u1ff3f;\uc000\ud835\udd57\u0100ak\u05bf\u1ff7\u0100;v\u1ffc\u1ffd\u62d4;\u6ad9artint;\u6a0d\u0100ao\u200c\u2055\u0100cs\u2011\u2052\u03b1\u201a\u2030\u2038\u2045\u2048\0\u2050\u03b2\u2022\u2025\u2027\u202a\u202c\0\u202e\u803b\xbd\u40bd;\u6153\u803b\xbc\u40bc;\u6155;\u6159;\u615b\u01b3\u2034\0\u2036;\u6154;\u6156\u02b4\u203e\u2041\0\0\u2043\u803b\xbe\u40be;\u6157;\u615c5;\u6158\u01b6\u204c\0\u204e;\u615a;\u615d8;\u615el;\u6044wn;\u6322cr;\uc000\ud835\udcbb\u0880Eabcdefgijlnorstv\u2082\u2089\u209f\u20a5\u20b0\u20b4\u20f0\u20f5\u20fa\u20ff\u2103\u2112\u2138\u0317\u213e\u2152\u219e\u0100;l\u064d\u2087;\u6a8c\u0180cmp\u2090\u2095\u209dute;\u41f5ma\u0100;d\u209c\u1cda\u43b3;\u6a86reve;\u411f\u0100iy\u20aa\u20aerc;\u411d;\u4433ot;\u4121\u0200;lqs\u063e\u0642\u20bd\u20c9\u0180;qs\u063e\u064c\u20c4lan\xf4\u0665\u0200;cdl\u0665\u20d2\u20d5\u20e5c;\u6aa9ot\u0100;o\u20dc\u20dd\u6a80\u0100;l\u20e2\u20e3\u6a82;\u6a84\u0100;e\u20ea\u20ed\uc000\u22db\ufe00s;\u6a94r;\uc000\ud835\udd24\u0100;g\u0673\u061bmel;\u6137cy;\u4453\u0200;Eaj\u065a\u210c\u210e\u2110;\u6a92;\u6aa5;\u6aa4\u0200Eaes\u211b\u211d\u2129\u2134;\u6269p\u0100;p\u2123\u2124\u6a8arox\xbb\u2124\u0100;q\u212e\u212f\u6a88\u0100;q\u212e\u211bim;\u62e7pf;\uc000\ud835\udd58\u0100ci\u2143\u2146r;\u610am\u0180;el\u066b\u214e\u2150;\u6a8e;\u6a90\u8300>;cdlqr\u05ee\u2160\u216a\u216e\u2173\u2179\u0100ci\u2165\u2167;\u6aa7r;\u6a7aot;\u62d7Par;\u6995uest;\u6a7c\u0280adels\u2184\u216a\u2190\u0656\u219b\u01f0\u2189\0\u218epro\xf8\u209er;\u6978q\u0100lq\u063f\u2196les\xf3\u2088i\xed\u066b\u0100en\u21a3\u21adrtneqq;\uc000\u2269\ufe00\xc5\u21aa\u0500Aabcefkosy\u21c4\u21c7\u21f1\u21f5\u21fa\u2218\u221d\u222f\u2268\u227dr\xf2\u03a0\u0200ilmr\u21d0\u21d4\u21d7\u21dbrs\xf0\u1484f\xbb\u2024il\xf4\u06a9\u0100dr\u21e0\u21e4cy;\u444a\u0180;cw\u08f4\u21eb\u21efir;\u6948;\u61adar;\u610firc;\u4125\u0180alr\u2201\u220e\u2213rts\u0100;u\u2209\u220a\u6665it\xbb\u220alip;\u6026con;\u62b9r;\uc000\ud835\udd25s\u0100ew\u2223\u2229arow;\u6925arow;\u6926\u0280amopr\u223a\u223e\u2243\u225e\u2263rr;\u61fftht;\u623bk\u0100lr\u2249\u2253eftarrow;\u61a9ightarrow;\u61aaf;\uc000\ud835\udd59bar;\u6015\u0180clt\u226f\u2274\u2278r;\uc000\ud835\udcbdas\xe8\u21f4rok;\u4127\u0100bp\u2282\u2287ull;\u6043hen\xbb\u1c5b\u0ae1\u22a3\0\u22aa\0\u22b8\u22c5\u22ce\0\u22d5\u22f3\0\0\u22f8\u2322\u2367\u2362\u237f\0\u2386\u23aa\u23b4cute\u803b\xed\u40ed\u0180;iy\u0771\u22b0\u22b5rc\u803b\xee\u40ee;\u4438\u0100cx\u22bc\u22bfy;\u4435cl\u803b\xa1\u40a1\u0100fr\u039f\u22c9;\uc000\ud835\udd26rave\u803b\xec\u40ec\u0200;ino\u073e\u22dd\u22e9\u22ee\u0100in\u22e2\u22e6nt;\u6a0ct;\u622dfin;\u69dcta;\u6129lig;\u4133\u0180aop\u22fe\u231a\u231d\u0180cgt\u2305\u2308\u2317r;\u412b\u0180elp\u071f\u230f\u2313in\xe5\u078ear\xf4\u0720h;\u4131f;\u62b7ed;\u41b5\u0280;cfot\u04f4\u232c\u2331\u233d\u2341are;\u6105in\u0100;t\u2338\u2339\u621eie;\u69dddo\xf4\u2319\u0280;celp\u0757\u234c\u2350\u235b\u2361al;\u62ba\u0100gr\u2355\u2359er\xf3\u1563\xe3\u234darhk;\u6a17rod;\u6a3c\u0200cgpt\u236f\u2372\u2376\u237by;\u4451on;\u412ff;\uc000\ud835\udd5aa;\u43b9uest\u803b\xbf\u40bf\u0100ci\u238a\u238fr;\uc000\ud835\udcben\u0280;Edsv\u04f4\u239b\u239d\u23a1\u04f3;\u62f9ot;\u62f5\u0100;v\u23a6\u23a7\u62f4;\u62f3\u0100;i\u0777\u23aelde;\u4129\u01eb\u23b8\0\u23bccy;\u4456l\u803b\xef\u40ef\u0300cfmosu\u23cc\u23d7\u23dc\u23e1\u23e7\u23f5\u0100iy\u23d1\u23d5rc;\u4135;\u4439r;\uc000\ud835\udd27ath;\u4237pf;\uc000\ud835\udd5b\u01e3\u23ec\0\u23f1r;\uc000\ud835\udcbfrcy;\u4458kcy;\u4454\u0400acfghjos\u240b\u2416\u2422\u2427\u242d\u2431\u2435\u243bppa\u0100;v\u2413\u2414\u43ba;\u43f0\u0100ey\u241b\u2420dil;\u4137;\u443ar;\uc000\ud835\udd28reen;\u4138cy;\u4445cy;\u445cpf;\uc000\ud835\udd5ccr;\uc000\ud835\udcc0\u0b80ABEHabcdefghjlmnoprstuv\u2470\u2481\u2486\u248d\u2491\u250e\u253d\u255a\u2580\u264e\u265e\u2665\u2679\u267d\u269a\u26b2\u26d8\u275d\u2768\u278b\u27c0\u2801\u2812\u0180art\u2477\u247a\u247cr\xf2\u09c6\xf2\u0395ail;\u691barr;\u690e\u0100;g\u0994\u248b;\u6a8bar;\u6962\u0963\u24a5\0\u24aa\0\u24b1\0\0\0\0\0\u24b5\u24ba\0\u24c6\u24c8\u24cd\0\u24f9ute;\u413amptyv;\u69b4ra\xee\u084cbda;\u43bbg\u0180;dl\u088e\u24c1\u24c3;\u6991\xe5\u088e;\u6a85uo\u803b\xab\u40abr\u0400;bfhlpst\u0899\u24de\u24e6\u24e9\u24eb\u24ee\u24f1\u24f5\u0100;f\u089d\u24e3s;\u691fs;\u691d\xeb\u2252p;\u61abl;\u6939im;\u6973l;\u61a2\u0180;ae\u24ff\u2500\u2504\u6aabil;\u6919\u0100;s\u2509\u250a\u6aad;\uc000\u2aad\ufe00\u0180abr\u2515\u2519\u251drr;\u690crk;\u6772\u0100ak\u2522\u252cc\u0100ek\u2528\u252a;\u407b;\u405b\u0100es\u2531\u2533;\u698bl\u0100du\u2539\u253b;\u698f;\u698d\u0200aeuy\u2546\u254b\u2556\u2558ron;\u413e\u0100di\u2550\u2554il;\u413c\xec\u08b0\xe2\u2529;\u443b\u0200cqrs\u2563\u2566\u256d\u257da;\u6936uo\u0100;r\u0e19\u1746\u0100du\u2572\u2577har;\u6967shar;\u694bh;\u61b2\u0280;fgqs\u258b\u258c\u0989\u25f3\u25ff\u6264t\u0280ahlrt\u2598\u25a4\u25b7\u25c2\u25e8rrow\u0100;t\u0899\u25a1a\xe9\u24f6arpoon\u0100du\u25af\u25b4own\xbb\u045ap\xbb\u0966eftarrows;\u61c7ight\u0180ahs\u25cd\u25d6\u25derrow\u0100;s\u08f4\u08a7arpoon\xf3\u0f98quigarro\xf7\u21f0hreetimes;\u62cb\u0180;qs\u258b\u0993\u25falan\xf4\u09ac\u0280;cdgs\u09ac\u260a\u260d\u261d\u2628c;\u6aa8ot\u0100;o\u2614\u2615\u6a7f\u0100;r\u261a\u261b\u6a81;\u6a83\u0100;e\u2622\u2625\uc000\u22da\ufe00s;\u6a93\u0280adegs\u2633\u2639\u263d\u2649\u264bppro\xf8\u24c6ot;\u62d6q\u0100gq\u2643\u2645\xf4\u0989gt\xf2\u248c\xf4\u099bi\xed\u09b2\u0180ilr\u2655\u08e1\u265asht;\u697c;\uc000\ud835\udd29\u0100;E\u099c\u2663;\u6a91\u0161\u2669\u2676r\u0100du\u25b2\u266e\u0100;l\u0965\u2673;\u696alk;\u6584cy;\u4459\u0280;acht\u0a48\u2688\u268b\u2691\u2696r\xf2\u25c1orne\xf2\u1d08ard;\u696bri;\u65fa\u0100io\u269f\u26a4dot;\u4140ust\u0100;a\u26ac\u26ad\u63b0che\xbb\u26ad\u0200Eaes\u26bb\u26bd\u26c9\u26d4;\u6268p\u0100;p\u26c3\u26c4\u6a89rox\xbb\u26c4\u0100;q\u26ce\u26cf\u6a87\u0100;q\u26ce\u26bbim;\u62e6\u0400abnoptwz\u26e9\u26f4\u26f7\u271a\u272f\u2741\u2747\u2750\u0100nr\u26ee\u26f1g;\u67ecr;\u61fdr\xeb\u08c1g\u0180lmr\u26ff\u270d\u2714eft\u0100ar\u09e6\u2707ight\xe1\u09f2apsto;\u67fcight\xe1\u09fdparrow\u0100lr\u2725\u2729ef\xf4\u24edight;\u61ac\u0180afl\u2736\u2739\u273dr;\u6985;\uc000\ud835\udd5dus;\u6a2dimes;\u6a34\u0161\u274b\u274fst;\u6217\xe1\u134e\u0180;ef\u2757\u2758\u1800\u65cange\xbb\u2758ar\u0100;l\u2764\u2765\u4028t;\u6993\u0280achmt\u2773\u2776\u277c\u2785\u2787r\xf2\u08a8orne\xf2\u1d8car\u0100;d\u0f98\u2783;\u696d;\u600eri;\u62bf\u0300achiqt\u2798\u279d\u0a40\u27a2\u27ae\u27bbquo;\u6039r;\uc000\ud835\udcc1m\u0180;eg\u09b2\u27aa\u27ac;\u6a8d;\u6a8f\u0100bu\u252a\u27b3o\u0100;r\u0e1f\u27b9;\u601arok;\u4142\u8400<;cdhilqr\u082b\u27d2\u2639\u27dc\u27e0\u27e5\u27ea\u27f0\u0100ci\u27d7\u27d9;\u6aa6r;\u6a79re\xe5\u25f2mes;\u62c9arr;\u6976uest;\u6a7b\u0100Pi\u27f5\u27f9ar;\u6996\u0180;ef\u2800\u092d\u181b\u65c3r\u0100du\u2807\u280dshar;\u694ahar;\u6966\u0100en\u2817\u2821rtneqq;\uc000\u2268\ufe00\xc5\u281e\u0700Dacdefhilnopsu\u2840\u2845\u2882\u288e\u2893\u28a0\u28a5\u28a8\u28da\u28e2\u28e4\u0a83\u28f3\u2902Dot;\u623a\u0200clpr\u284e\u2852\u2863\u287dr\u803b\xaf\u40af\u0100et\u2857\u2859;\u6642\u0100;e\u285e\u285f\u6720se\xbb\u285f\u0100;s\u103b\u2868to\u0200;dlu\u103b\u2873\u2877\u287bow\xee\u048cef\xf4\u090f\xf0\u13d1ker;\u65ae\u0100oy\u2887\u288cmma;\u6a29;\u443cash;\u6014asuredangle\xbb\u1626r;\uc000\ud835\udd2ao;\u6127\u0180cdn\u28af\u28b4\u28c9ro\u803b\xb5\u40b5\u0200;acd\u1464\u28bd\u28c0\u28c4s\xf4\u16a7ir;\u6af0ot\u80bb\xb7\u01b5us\u0180;bd\u28d2\u1903\u28d3\u6212\u0100;u\u1d3c\u28d8;\u6a2a\u0163\u28de\u28e1p;\u6adb\xf2\u2212\xf0\u0a81\u0100dp\u28e9\u28eeels;\u62a7f;\uc000\ud835\udd5e\u0100ct\u28f8\u28fdr;\uc000\ud835\udcc2pos\xbb\u159d\u0180;lm\u2909\u290a\u290d\u43bctimap;\u62b8\u0c00GLRVabcdefghijlmoprstuvw\u2942\u2953\u297e\u2989\u2998\u29da\u29e9\u2a15\u2a1a\u2a58\u2a5d\u2a83\u2a95\u2aa4\u2aa8\u2b04\u2b07\u2b44\u2b7f\u2bae\u2c34\u2c67\u2c7c\u2ce9\u0100gt\u2947\u294b;\uc000\u22d9\u0338\u0100;v\u2950\u0bcf\uc000\u226b\u20d2\u0180elt\u295a\u2972\u2976ft\u0100ar\u2961\u2967rrow;\u61cdightarrow;\u61ce;\uc000\u22d8\u0338\u0100;v\u297b\u0c47\uc000\u226a\u20d2ightarrow;\u61cf\u0100Dd\u298e\u2993ash;\u62afash;\u62ae\u0280bcnpt\u29a3\u29a7\u29ac\u29b1\u29ccla\xbb\u02deute;\u4144g;\uc000\u2220\u20d2\u0280;Eiop\u0d84\u29bc\u29c0\u29c5\u29c8;\uc000\u2a70\u0338d;\uc000\u224b\u0338s;\u4149ro\xf8\u0d84ur\u0100;a\u29d3\u29d4\u666el\u0100;s\u29d3\u0b38\u01f3\u29df\0\u29e3p\u80bb\xa0\u0b37mp\u0100;e\u0bf9\u0c00\u0280aeouy\u29f4\u29fe\u2a03\u2a10\u2a13\u01f0\u29f9\0\u29fb;\u6a43on;\u4148dil;\u4146ng\u0100;d\u0d7e\u2a0aot;\uc000\u2a6d\u0338p;\u6a42;\u443dash;\u6013\u0380;Aadqsx\u0b92\u2a29\u2a2d\u2a3b\u2a41\u2a45\u2a50rr;\u61d7r\u0100hr\u2a33\u2a36k;\u6924\u0100;o\u13f2\u13f0ot;\uc000\u2250\u0338ui\xf6\u0b63\u0100ei\u2a4a\u2a4ear;\u6928\xed\u0b98ist\u0100;s\u0ba0\u0b9fr;\uc000\ud835\udd2b\u0200Eest\u0bc5\u2a66\u2a79\u2a7c\u0180;qs\u0bbc\u2a6d\u0be1\u0180;qs\u0bbc\u0bc5\u2a74lan\xf4\u0be2i\xed\u0bea\u0100;r\u0bb6\u2a81\xbb\u0bb7\u0180Aap\u2a8a\u2a8d\u2a91r\xf2\u2971rr;\u61aear;\u6af2\u0180;sv\u0f8d\u2a9c\u0f8c\u0100;d\u2aa1\u2aa2\u62fc;\u62facy;\u445a\u0380AEadest\u2ab7\u2aba\u2abe\u2ac2\u2ac5\u2af6\u2af9r\xf2\u2966;\uc000\u2266\u0338rr;\u619ar;\u6025\u0200;fqs\u0c3b\u2ace\u2ae3\u2aeft\u0100ar\u2ad4\u2ad9rro\xf7\u2ac1ightarro\xf7\u2a90\u0180;qs\u0c3b\u2aba\u2aealan\xf4\u0c55\u0100;s\u0c55\u2af4\xbb\u0c36i\xed\u0c5d\u0100;r\u0c35\u2afei\u0100;e\u0c1a\u0c25i\xe4\u0d90\u0100pt\u2b0c\u2b11f;\uc000\ud835\udd5f\u8180\xac;in\u2b19\u2b1a\u2b36\u40acn\u0200;Edv\u0b89\u2b24\u2b28\u2b2e;\uc000\u22f9\u0338ot;\uc000\u22f5\u0338\u01e1\u0b89\u2b33\u2b35;\u62f7;\u62f6i\u0100;v\u0cb8\u2b3c\u01e1\u0cb8\u2b41\u2b43;\u62fe;\u62fd\u0180aor\u2b4b\u2b63\u2b69r\u0200;ast\u0b7b\u2b55\u2b5a\u2b5flle\xec\u0b7bl;\uc000\u2afd\u20e5;\uc000\u2202\u0338lint;\u6a14\u0180;ce\u0c92\u2b70\u2b73u\xe5\u0ca5\u0100;c\u0c98\u2b78\u0100;e\u0c92\u2b7d\xf1\u0c98\u0200Aait\u2b88\u2b8b\u2b9d\u2ba7r\xf2\u2988rr\u0180;cw\u2b94\u2b95\u2b99\u619b;\uc000\u2933\u0338;\uc000\u219d\u0338ghtarrow\xbb\u2b95ri\u0100;e\u0ccb\u0cd6\u0380chimpqu\u2bbd\u2bcd\u2bd9\u2b04\u0b78\u2be4\u2bef\u0200;cer\u0d32\u2bc6\u0d37\u2bc9u\xe5\u0d45;\uc000\ud835\udcc3ort\u026d\u2b05\0\0\u2bd6ar\xe1\u2b56m\u0100;e\u0d6e\u2bdf\u0100;q\u0d74\u0d73su\u0100bp\u2beb\u2bed\xe5\u0cf8\xe5\u0d0b\u0180bcp\u2bf6\u2c11\u2c19\u0200;Ees\u2bff\u2c00\u0d22\u2c04\u6284;\uc000\u2ac5\u0338et\u0100;e\u0d1b\u2c0bq\u0100;q\u0d23\u2c00c\u0100;e\u0d32\u2c17\xf1\u0d38\u0200;Ees\u2c22\u2c23\u0d5f\u2c27\u6285;\uc000\u2ac6\u0338et\u0100;e\u0d58\u2c2eq\u0100;q\u0d60\u2c23\u0200gilr\u2c3d\u2c3f\u2c45\u2c47\xec\u0bd7lde\u803b\xf1\u40f1\xe7\u0c43iangle\u0100lr\u2c52\u2c5ceft\u0100;e\u0c1a\u2c5a\xf1\u0c26ight\u0100;e\u0ccb\u2c65\xf1\u0cd7\u0100;m\u2c6c\u2c6d\u43bd\u0180;es\u2c74\u2c75\u2c79\u4023ro;\u6116p;\u6007\u0480DHadgilrs\u2c8f\u2c94\u2c99\u2c9e\u2ca3\u2cb0\u2cb6\u2cd3\u2ce3ash;\u62adarr;\u6904p;\uc000\u224d\u20d2ash;\u62ac\u0100et\u2ca8\u2cac;\uc000\u2265\u20d2;\uc000>\u20d2nfin;\u69de\u0180Aet\u2cbd\u2cc1\u2cc5rr;\u6902;\uc000\u2264\u20d2\u0100;r\u2cca\u2ccd\uc000<\u20d2ie;\uc000\u22b4\u20d2\u0100At\u2cd8\u2cdcrr;\u6903rie;\uc000\u22b5\u20d2im;\uc000\u223c\u20d2\u0180Aan\u2cf0\u2cf4\u2d02rr;\u61d6r\u0100hr\u2cfa\u2cfdk;\u6923\u0100;o\u13e7\u13e5ear;\u6927\u1253\u1a95\0\0\0\0\0\0\0\0\0\0\0\0\0\u2d2d\0\u2d38\u2d48\u2d60\u2d65\u2d72\u2d84\u1b07\0\0\u2d8d\u2dab\0\u2dc8\u2dce\0\u2ddc\u2e19\u2e2b\u2e3e\u2e43\u0100cs\u2d31\u1a97ute\u803b\xf3\u40f3\u0100iy\u2d3c\u2d45r\u0100;c\u1a9e\u2d42\u803b\xf4\u40f4;\u443e\u0280abios\u1aa0\u2d52\u2d57\u01c8\u2d5alac;\u4151v;\u6a38old;\u69bclig;\u4153\u0100cr\u2d69\u2d6dir;\u69bf;\uc000\ud835\udd2c\u036f\u2d79\0\0\u2d7c\0\u2d82n;\u42dbave\u803b\xf2\u40f2;\u69c1\u0100bm\u2d88\u0df4ar;\u69b5\u0200acit\u2d95\u2d98\u2da5\u2da8r\xf2\u1a80\u0100ir\u2d9d\u2da0r;\u69beoss;\u69bbn\xe5\u0e52;\u69c0\u0180aei\u2db1\u2db5\u2db9cr;\u414dga;\u43c9\u0180cdn\u2dc0\u2dc5\u01cdron;\u43bf;\u69b6pf;\uc000\ud835\udd60\u0180ael\u2dd4\u2dd7\u01d2r;\u69b7rp;\u69b9\u0380;adiosv\u2dea\u2deb\u2dee\u2e08\u2e0d\u2e10\u2e16\u6228r\xf2\u1a86\u0200;efm\u2df7\u2df8\u2e02\u2e05\u6a5dr\u0100;o\u2dfe\u2dff\u6134f\xbb\u2dff\u803b\xaa\u40aa\u803b\xba\u40bagof;\u62b6r;\u6a56lope;\u6a57;\u6a5b\u0180clo\u2e1f\u2e21\u2e27\xf2\u2e01ash\u803b\xf8\u40f8l;\u6298i\u016c\u2e2f\u2e34de\u803b\xf5\u40f5es\u0100;a\u01db\u2e3as;\u6a36ml\u803b\xf6\u40f6bar;\u633d\u0ae1\u2e5e\0\u2e7d\0\u2e80\u2e9d\0\u2ea2\u2eb9\0\0\u2ecb\u0e9c\0\u2f13\0\0\u2f2b\u2fbc\0\u2fc8r\u0200;ast\u0403\u2e67\u2e72\u0e85\u8100\xb6;l\u2e6d\u2e6e\u40b6le\xec\u0403\u0269\u2e78\0\0\u2e7bm;\u6af3;\u6afdy;\u443fr\u0280cimpt\u2e8b\u2e8f\u2e93\u1865\u2e97nt;\u4025od;\u402eil;\u6030enk;\u6031r;\uc000\ud835\udd2d\u0180imo\u2ea8\u2eb0\u2eb4\u0100;v\u2ead\u2eae\u43c6;\u43d5ma\xf4\u0a76ne;\u660e\u0180;tv\u2ebf\u2ec0\u2ec8\u43c0chfork\xbb\u1ffd;\u43d6\u0100au\u2ecf\u2edfn\u0100ck\u2ed5\u2eddk\u0100;h\u21f4\u2edb;\u610e\xf6\u21f4s\u0480;abcdemst\u2ef3\u2ef4\u1908\u2ef9\u2efd\u2f04\u2f06\u2f0a\u2f0e\u402bcir;\u6a23ir;\u6a22\u0100ou\u1d40\u2f02;\u6a25;\u6a72n\u80bb\xb1\u0e9dim;\u6a26wo;\u6a27\u0180ipu\u2f19\u2f20\u2f25ntint;\u6a15f;\uc000\ud835\udd61nd\u803b\xa3\u40a3\u0500;Eaceinosu\u0ec8\u2f3f\u2f41\u2f44\u2f47\u2f81\u2f89\u2f92\u2f7e\u2fb6;\u6ab3p;\u6ab7u\xe5\u0ed9\u0100;c\u0ece\u2f4c\u0300;acens\u0ec8\u2f59\u2f5f\u2f66\u2f68\u2f7eppro\xf8\u2f43urlye\xf1\u0ed9\xf1\u0ece\u0180aes\u2f6f\u2f76\u2f7approx;\u6ab9qq;\u6ab5im;\u62e8i\xed\u0edfme\u0100;s\u2f88\u0eae\u6032\u0180Eas\u2f78\u2f90\u2f7a\xf0\u2f75\u0180dfp\u0eec\u2f99\u2faf\u0180als\u2fa0\u2fa5\u2faalar;\u632eine;\u6312urf;\u6313\u0100;t\u0efb\u2fb4\xef\u0efbrel;\u62b0\u0100ci\u2fc0\u2fc5r;\uc000\ud835\udcc5;\u43c8ncsp;\u6008\u0300fiopsu\u2fda\u22e2\u2fdf\u2fe5\u2feb\u2ff1r;\uc000\ud835\udd2epf;\uc000\ud835\udd62rime;\u6057cr;\uc000\ud835\udcc6\u0180aeo\u2ff8\u3009\u3013t\u0100ei\u2ffe\u3005rnion\xf3\u06b0nt;\u6a16st\u0100;e\u3010\u3011\u403f\xf1\u1f19\xf4\u0f14\u0a80ABHabcdefhilmnoprstux\u3040\u3051\u3055\u3059\u30e0\u310e\u312b\u3147\u3162\u3172\u318e\u3206\u3215\u3224\u3229\u3258\u326e\u3272\u3290\u32b0\u32b7\u0180art\u3047\u304a\u304cr\xf2\u10b3\xf2\u03ddail;\u691car\xf2\u1c65ar;\u6964\u0380cdenqrt\u3068\u3075\u3078\u307f\u308f\u3094\u30cc\u0100eu\u306d\u3071;\uc000\u223d\u0331te;\u4155i\xe3\u116emptyv;\u69b3g\u0200;del\u0fd1\u3089\u308b\u308d;\u6992;\u69a5\xe5\u0fd1uo\u803b\xbb\u40bbr\u0580;abcfhlpstw\u0fdc\u30ac\u30af\u30b7\u30b9\u30bc\u30be\u30c0\u30c3\u30c7\u30cap;\u6975\u0100;f\u0fe0\u30b4s;\u6920;\u6933s;\u691e\xeb\u225d\xf0\u272el;\u6945im;\u6974l;\u61a3;\u619d\u0100ai\u30d1\u30d5il;\u691ao\u0100;n\u30db\u30dc\u6236al\xf3\u0f1e\u0180abr\u30e7\u30ea\u30eer\xf2\u17e5rk;\u6773\u0100ak\u30f3\u30fdc\u0100ek\u30f9\u30fb;\u407d;\u405d\u0100es\u3102\u3104;\u698cl\u0100du\u310a\u310c;\u698e;\u6990\u0200aeuy\u3117\u311c\u3127\u3129ron;\u4159\u0100di\u3121\u3125il;\u4157\xec\u0ff2\xe2\u30fa;\u4440\u0200clqs\u3134\u3137\u313d\u3144a;\u6937dhar;\u6969uo\u0100;r\u020e\u020dh;\u61b3\u0180acg\u314e\u315f\u0f44l\u0200;ips\u0f78\u3158\u315b\u109cn\xe5\u10bbar\xf4\u0fa9t;\u65ad\u0180ilr\u3169\u1023\u316esht;\u697d;\uc000\ud835\udd2f\u0100ao\u3177\u3186r\u0100du\u317d\u317f\xbb\u047b\u0100;l\u1091\u3184;\u696c\u0100;v\u318b\u318c\u43c1;\u43f1\u0180gns\u3195\u31f9\u31fcht\u0300ahlrst\u31a4\u31b0\u31c2\u31d8\u31e4\u31eerrow\u0100;t\u0fdc\u31ada\xe9\u30c8arpoon\u0100du\u31bb\u31bfow\xee\u317ep\xbb\u1092eft\u0100ah\u31ca\u31d0rrow\xf3\u0feaarpoon\xf3\u0551ightarrows;\u61c9quigarro\xf7\u30cbhreetimes;\u62ccg;\u42daingdotse\xf1\u1f32\u0180ahm\u320d\u3210\u3213r\xf2\u0feaa\xf2\u0551;\u600foust\u0100;a\u321e\u321f\u63b1che\xbb\u321fmid;\u6aee\u0200abpt\u3232\u323d\u3240\u3252\u0100nr\u3237\u323ag;\u67edr;\u61fer\xeb\u1003\u0180afl\u3247\u324a\u324er;\u6986;\uc000\ud835\udd63us;\u6a2eimes;\u6a35\u0100ap\u325d\u3267r\u0100;g\u3263\u3264\u4029t;\u6994olint;\u6a12ar\xf2\u31e3\u0200achq\u327b\u3280\u10bc\u3285quo;\u603ar;\uc000\ud835\udcc7\u0100bu\u30fb\u328ao\u0100;r\u0214\u0213\u0180hir\u3297\u329b\u32a0re\xe5\u31f8mes;\u62cai\u0200;efl\u32aa\u1059\u1821\u32ab\u65b9tri;\u69celuhar;\u6968;\u611e\u0d61\u32d5\u32db\u32df\u332c\u3338\u3371\0\u337a\u33a4\0\0\u33ec\u33f0\0\u3428\u3448\u345a\u34ad\u34b1\u34ca\u34f1\0\u3616\0\0\u3633cute;\u415bqu\xef\u27ba\u0500;Eaceinpsy\u11ed\u32f3\u32f5\u32ff\u3302\u330b\u330f\u331f\u3326\u3329;\u6ab4\u01f0\u32fa\0\u32fc;\u6ab8on;\u4161u\xe5\u11fe\u0100;d\u11f3\u3307il;\u415frc;\u415d\u0180Eas\u3316\u3318\u331b;\u6ab6p;\u6abaim;\u62e9olint;\u6a13i\xed\u1204;\u4441ot\u0180;be\u3334\u1d47\u3335\u62c5;\u6a66\u0380Aacmstx\u3346\u334a\u3357\u335b\u335e\u3363\u336drr;\u61d8r\u0100hr\u3350\u3352\xeb\u2228\u0100;o\u0a36\u0a34t\u803b\xa7\u40a7i;\u403bwar;\u6929m\u0100in\u3369\xf0nu\xf3\xf1t;\u6736r\u0100;o\u3376\u2055\uc000\ud835\udd30\u0200acoy\u3382\u3386\u3391\u33a0rp;\u666f\u0100hy\u338b\u338fcy;\u4449;\u4448rt\u026d\u3399\0\0\u339ci\xe4\u1464ara\xec\u2e6f\u803b\xad\u40ad\u0100gm\u33a8\u33b4ma\u0180;fv\u33b1\u33b2\u33b2\u43c3;\u43c2\u0400;deglnpr\u12ab\u33c5\u33c9\u33ce\u33d6\u33de\u33e1\u33e6ot;\u6a6a\u0100;q\u12b1\u12b0\u0100;E\u33d3\u33d4\u6a9e;\u6aa0\u0100;E\u33db\u33dc\u6a9d;\u6a9fe;\u6246lus;\u6a24arr;\u6972ar\xf2\u113d\u0200aeit\u33f8\u3408\u340f\u3417\u0100ls\u33fd\u3404lsetm\xe9\u336ahp;\u6a33parsl;\u69e4\u0100dl\u1463\u3414e;\u6323\u0100;e\u341c\u341d\u6aaa\u0100;s\u3422\u3423\u6aac;\uc000\u2aac\ufe00\u0180flp\u342e\u3433\u3442tcy;\u444c\u0100;b\u3438\u3439\u402f\u0100;a\u343e\u343f\u69c4r;\u633ff;\uc000\ud835\udd64a\u0100dr\u344d\u0402es\u0100;u\u3454\u3455\u6660it\xbb\u3455\u0180csu\u3460\u3479\u349f\u0100au\u3465\u346fp\u0100;s\u1188\u346b;\uc000\u2293\ufe00p\u0100;s\u11b4\u3475;\uc000\u2294\ufe00u\u0100bp\u347f\u348f\u0180;es\u1197\u119c\u3486et\u0100;e\u1197\u348d\xf1\u119d\u0180;es\u11a8\u11ad\u3496et\u0100;e\u11a8\u349d\xf1\u11ae\u0180;af\u117b\u34a6\u05b0r\u0165\u34ab\u05b1\xbb\u117car\xf2\u1148\u0200cemt\u34b9\u34be\u34c2\u34c5r;\uc000\ud835\udcc8tm\xee\xf1i\xec\u3415ar\xe6\u11be\u0100ar\u34ce\u34d5r\u0100;f\u34d4\u17bf\u6606\u0100an\u34da\u34edight\u0100ep\u34e3\u34eapsilo\xee\u1ee0h\xe9\u2eafs\xbb\u2852\u0280bcmnp\u34fb\u355e\u1209\u358b\u358e\u0480;Edemnprs\u350e\u350f\u3511\u3515\u351e\u3523\u352c\u3531\u3536\u6282;\u6ac5ot;\u6abd\u0100;d\u11da\u351aot;\u6ac3ult;\u6ac1\u0100Ee\u3528\u352a;\u6acb;\u628alus;\u6abfarr;\u6979\u0180eiu\u353d\u3552\u3555t\u0180;en\u350e\u3545\u354bq\u0100;q\u11da\u350feq\u0100;q\u352b\u3528m;\u6ac7\u0100bp\u355a\u355c;\u6ad5;\u6ad3c\u0300;acens\u11ed\u356c\u3572\u3579\u357b\u3326ppro\xf8\u32faurlye\xf1\u11fe\xf1\u11f3\u0180aes\u3582\u3588\u331bppro\xf8\u331aq\xf1\u3317g;\u666a\u0680123;Edehlmnps\u35a9\u35ac\u35af\u121c\u35b2\u35b4\u35c0\u35c9\u35d5\u35da\u35df\u35e8\u35ed\u803b\xb9\u40b9\u803b\xb2\u40b2\u803b\xb3\u40b3;\u6ac6\u0100os\u35b9\u35bct;\u6abeub;\u6ad8\u0100;d\u1222\u35c5ot;\u6ac4s\u0100ou\u35cf\u35d2l;\u67c9b;\u6ad7arr;\u697bult;\u6ac2\u0100Ee\u35e4\u35e6;\u6acc;\u628blus;\u6ac0\u0180eiu\u35f4\u3609\u360ct\u0180;en\u121c\u35fc\u3602q\u0100;q\u1222\u35b2eq\u0100;q\u35e7\u35e4m;\u6ac8\u0100bp\u3611\u3613;\u6ad4;\u6ad6\u0180Aan\u361c\u3620\u362drr;\u61d9r\u0100hr\u3626\u3628\xeb\u222e\u0100;o\u0a2b\u0a29war;\u692alig\u803b\xdf\u40df\u0be1\u3651\u365d\u3660\u12ce\u3673\u3679\0\u367e\u36c2\0\0\0\0\0\u36db\u3703\0\u3709\u376c\0\0\0\u3787\u0272\u3656\0\0\u365bget;\u6316;\u43c4r\xeb\u0e5f\u0180aey\u3666\u366b\u3670ron;\u4165dil;\u4163;\u4442lrec;\u6315r;\uc000\ud835\udd31\u0200eiko\u3686\u369d\u36b5\u36bc\u01f2\u368b\0\u3691e\u01004f\u1284\u1281a\u0180;sv\u3698\u3699\u369b\u43b8ym;\u43d1\u0100cn\u36a2\u36b2k\u0100as\u36a8\u36aeppro\xf8\u12c1im\xbb\u12acs\xf0\u129e\u0100as\u36ba\u36ae\xf0\u12c1rn\u803b\xfe\u40fe\u01ec\u031f\u36c6\u22e7es\u8180\xd7;bd\u36cf\u36d0\u36d8\u40d7\u0100;a\u190f\u36d5r;\u6a31;\u6a30\u0180eps\u36e1\u36e3\u3700\xe1\u2a4d\u0200;bcf\u0486\u36ec\u36f0\u36f4ot;\u6336ir;\u6af1\u0100;o\u36f9\u36fc\uc000\ud835\udd65rk;\u6ada\xe1\u3362rime;\u6034\u0180aip\u370f\u3712\u3764d\xe5\u1248\u0380adempst\u3721\u374d\u3740\u3751\u3757\u375c\u375fngle\u0280;dlqr\u3730\u3731\u3736\u3740\u3742\u65b5own\xbb\u1dbbeft\u0100;e\u2800\u373e\xf1\u092e;\u625cight\u0100;e\u32aa\u374b\xf1\u105aot;\u65ecinus;\u6a3alus;\u6a39b;\u69cdime;\u6a3bezium;\u63e2\u0180cht\u3772\u377d\u3781\u0100ry\u3777\u377b;\uc000\ud835\udcc9;\u4446cy;\u445brok;\u4167\u0100io\u378b\u378ex\xf4\u1777head\u0100lr\u3797\u37a0eftarro\xf7\u084fightarrow\xbb\u0f5d\u0900AHabcdfghlmoprstuw\u37d0\u37d3\u37d7\u37e4\u37f0\u37fc\u380e\u381c\u3823\u3834\u3851\u385d\u386b\u38a9\u38cc\u38d2\u38ea\u38f6r\xf2\u03edar;\u6963\u0100cr\u37dc\u37e2ute\u803b\xfa\u40fa\xf2\u1150r\u01e3\u37ea\0\u37edy;\u445eve;\u416d\u0100iy\u37f5\u37farc\u803b\xfb\u40fb;\u4443\u0180abh\u3803\u3806\u380br\xf2\u13adlac;\u4171a\xf2\u13c3\u0100ir\u3813\u3818sht;\u697e;\uc000\ud835\udd32rave\u803b\xf9\u40f9\u0161\u3827\u3831r\u0100lr\u382c\u382e\xbb\u0957\xbb\u1083lk;\u6580\u0100ct\u3839\u384d\u026f\u383f\0\0\u384arn\u0100;e\u3845\u3846\u631cr\xbb\u3846op;\u630fri;\u65f8\u0100al\u3856\u385acr;\u416b\u80bb\xa8\u0349\u0100gp\u3862\u3866on;\u4173f;\uc000\ud835\udd66\u0300adhlsu\u114b\u3878\u387d\u1372\u3891\u38a0own\xe1\u13b3arpoon\u0100lr\u3888\u388cef\xf4\u382digh\xf4\u382fi\u0180;hl\u3899\u389a\u389c\u43c5\xbb\u13faon\xbb\u389aparrows;\u61c8\u0180cit\u38b0\u38c4\u38c8\u026f\u38b6\0\0\u38c1rn\u0100;e\u38bc\u38bd\u631dr\xbb\u38bdop;\u630eng;\u416fri;\u65f9cr;\uc000\ud835\udcca\u0180dir\u38d9\u38dd\u38e2ot;\u62f0lde;\u4169i\u0100;f\u3730\u38e8\xbb\u1813\u0100am\u38ef\u38f2r\xf2\u38a8l\u803b\xfc\u40fcangle;\u69a7\u0780ABDacdeflnoprsz\u391c\u391f\u3929\u392d\u39b5\u39b8\u39bd\u39df\u39e4\u39e8\u39f3\u39f9\u39fd\u3a01\u3a20r\xf2\u03f7ar\u0100;v\u3926\u3927\u6ae8;\u6ae9as\xe8\u03e1\u0100nr\u3932\u3937grt;\u699c\u0380eknprst\u34e3\u3946\u394b\u3952\u395d\u3964\u3996app\xe1\u2415othin\xe7\u1e96\u0180hir\u34eb\u2ec8\u3959op\xf4\u2fb5\u0100;h\u13b7\u3962\xef\u318d\u0100iu\u3969\u396dgm\xe1\u33b3\u0100bp\u3972\u3984setneq\u0100;q\u397d\u3980\uc000\u228a\ufe00;\uc000\u2acb\ufe00setneq\u0100;q\u398f\u3992\uc000\u228b\ufe00;\uc000\u2acc\ufe00\u0100hr\u399b\u399fet\xe1\u369ciangle\u0100lr\u39aa\u39afeft\xbb\u0925ight\xbb\u1051y;\u4432ash\xbb\u1036\u0180elr\u39c4\u39d2\u39d7\u0180;be\u2dea\u39cb\u39cfar;\u62bbq;\u625alip;\u62ee\u0100bt\u39dc\u1468a\xf2\u1469r;\uc000\ud835\udd33tr\xe9\u39aesu\u0100bp\u39ef\u39f1\xbb\u0d1c\xbb\u0d59pf;\uc000\ud835\udd67ro\xf0\u0efbtr\xe9\u39b4\u0100cu\u3a06\u3a0br;\uc000\ud835\udccb\u0100bp\u3a10\u3a18n\u0100Ee\u3980\u3a16\xbb\u397en\u0100Ee\u3992\u3a1e\xbb\u3990igzag;\u699a\u0380cefoprs\u3a36\u3a3b\u3a56\u3a5b\u3a54\u3a61\u3a6airc;\u4175\u0100di\u3a40\u3a51\u0100bg\u3a45\u3a49ar;\u6a5fe\u0100;q\u15fa\u3a4f;\u6259erp;\u6118r;\uc000\ud835\udd34pf;\uc000\ud835\udd68\u0100;e\u1479\u3a66at\xe8\u1479cr;\uc000\ud835\udccc\u0ae3\u178e\u3a87\0\u3a8b\0\u3a90\u3a9b\0\0\u3a9d\u3aa8\u3aab\u3aaf\0\0\u3ac3\u3ace\0\u3ad8\u17dc\u17dftr\xe9\u17d1r;\uc000\ud835\udd35\u0100Aa\u3a94\u3a97r\xf2\u03c3r\xf2\u09f6;\u43be\u0100Aa\u3aa1\u3aa4r\xf2\u03b8r\xf2\u09eba\xf0\u2713is;\u62fb\u0180dpt\u17a4\u3ab5\u3abe\u0100fl\u3aba\u17a9;\uc000\ud835\udd69im\xe5\u17b2\u0100Aa\u3ac7\u3acar\xf2\u03cer\xf2\u0a01\u0100cq\u3ad2\u17b8r;\uc000\ud835\udccd\u0100pt\u17d6\u3adcr\xe9\u17d4\u0400acefiosu\u3af0\u3afd\u3b08\u3b0c\u3b11\u3b15\u3b1b\u3b21c\u0100uy\u3af6\u3afbte\u803b\xfd\u40fd;\u444f\u0100iy\u3b02\u3b06rc;\u4177;\u444bn\u803b\xa5\u40a5r;\uc000\ud835\udd36cy;\u4457pf;\uc000\ud835\udd6acr;\uc000\ud835\udcce\u0100cm\u3b26\u3b29y;\u444el\u803b\xff\u40ff\u0500acdefhiosw\u3b42\u3b48\u3b54\u3b58\u3b64\u3b69\u3b6d\u3b74\u3b7a\u3b80cute;\u417a\u0100ay\u3b4d\u3b52ron;\u417e;\u4437ot;\u417c\u0100et\u3b5d\u3b61tr\xe6\u155fa;\u43b6r;\uc000\ud835\udd37cy;\u4436grarr;\u61ddpf;\uc000\ud835\udd6bcr;\uc000\ud835\udccf\u0100jn\u3b85\u3b87;\u600dj;\u600c"
26
- .split("")
27
- .map((c) => c.charCodeAt(0)));
28
-
29
- // Generated using scripts/write-decode-map.ts
30
- const xmlDecodeTree = /* #__PURE__ */ new Uint16Array(
31
- // prettier-ignore
32
- /* #__PURE__ */ "\u0200aglq\t\x15\x18\x1b\u026d\x0f\0\0\x12p;\u4026os;\u4027t;\u403et;\u403cuot;\u4022"
33
- .split("")
34
- .map((c) => c.charCodeAt(0)));
35
-
36
22
  // Adapted from https://github.com/mathiasbynens/he/blob/36afe179392226cf1b6ccdb16ebbb7a5a844d93a/src/he.js#L106-L134
37
23
  var _a;
38
24
  const decodeMap = new Map([
@@ -71,7 +57,7 @@ const decodeMap = new Map([
71
57
  */
72
58
  const fromCodePoint =
73
59
  // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, n/no-unsupported-features/es-builtins
74
- (_a = String.fromCodePoint) !== null && _a !== void 0 ? _a : function (codePoint) {
60
+ (_a = String.fromCodePoint) !== null && _a !== void 0 ? _a : ((codePoint) => {
75
61
  let output = "";
76
62
  if (codePoint > 65535) {
77
63
  codePoint -= 65536;
@@ -80,7 +66,7 @@ const fromCodePoint =
80
66
  }
81
67
  output += String.fromCharCode(codePoint);
82
68
  return output;
83
- };
69
+ });
84
70
  /**
85
71
  * Replace the given code point with a replacement character if it is a
86
72
  * surrogate or is outside the valid range. Otherwise return the code
@@ -95,6 +81,58 @@ function replaceCodePoint(codePoint) {
95
81
  return (_a = decodeMap.get(codePoint)) !== null && _a !== void 0 ? _a : codePoint;
96
82
  }
97
83
 
84
+ /*
85
+ * Shared base64 decode helper for generated decode data.
86
+ * Assumes global atob is available.
87
+ */
88
+ function decodeBase64(input) {
89
+ const binary =
90
+ // eslint-disable-next-line n/no-unsupported-features/node-builtins
91
+ typeof atob === "function"
92
+ ? // Browser (and Node >=16)
93
+ // eslint-disable-next-line n/no-unsupported-features/node-builtins
94
+ atob(input)
95
+ : // Older Node versions (<16)
96
+ // eslint-disable-next-line n/no-unsupported-features/node-builtins
97
+ typeof Buffer.from === "function"
98
+ ? // eslint-disable-next-line n/no-unsupported-features/node-builtins
99
+ Buffer.from(input, "base64").toString("binary")
100
+ : // eslint-disable-next-line unicorn/no-new-buffer, n/no-deprecated-api
101
+ new Buffer(input, "base64").toString("binary");
102
+ const evenLength = binary.length & -2; // Round down to even length
103
+ const out = new Uint16Array(evenLength / 2);
104
+ for (let index = 0, outIndex = 0; index < evenLength; index += 2) {
105
+ const lo = binary.charCodeAt(index);
106
+ const hi = binary.charCodeAt(index + 1);
107
+ out[outIndex++] = lo | (hi << 8);
108
+ }
109
+ return out;
110
+ }
111
+
112
+ // Generated using scripts/write-decode-map.ts
113
+ const htmlDecodeTree = /* #__PURE__ */ decodeBase64("QR08ALkAAgH6AYsDNQR2BO0EPgXZBQEGLAbdBxMISQrvCmQLfQurDKQNLw4fD4YPpA+6D/IPAAAAAAAAAAAAAAAAKhBMEY8TmxUWF2EYLBkxGuAa3RsJHDscWR8YIC8jSCSIJcMl6ie3Ku8rEC0CLjoupS7kLgAIRU1hYmNmZ2xtbm9wcnN0dVQAWgBeAGUAaQBzAHcAfgCBAIQAhwCSAJoAoACsALMAbABpAGcAO4DGAMZAUAA7gCYAJkBjAHUAdABlADuAwQDBQHIiZXZlAAJhAAFpeW0AcgByAGMAO4DCAMJAEGRyAADgNdgE3XIAYQB2AGUAO4DAAMBA8CFoYZFj4SFjcgBhZAAAoFMqAAFncIsAjgBvAG4ABGFmAADgNdg43fAlbHlGdW5jdGlvbgCgYSBpAG4AZwA7gMUAxUAAAWNzpACoAHIAAOA12Jzc6SFnbgCgVCJpAGwAZABlADuAwwDDQG0AbAA7gMQAxEAABGFjZWZvcnN1xQDYANoA7QDxAPYA+QD8AAABY3LJAM8AayNzbGFzaAAAoBYidgHTANUAAKDnKmUAZAAAoAYjeQARZIABY3J0AOAA5QDrAGEidXNlAACgNSLuI291bGxpcwCgLCFhAJJjcgAA4DXYBd1wAGYAAOA12Dnd5SF2ZdhiYwDyAOoAbSJwZXEAAKBOIgAHSE9hY2RlZmhpbG9yc3UXARoBHwE6AVIBVQFiAWQBZgGCAakB6QHtAfIBYwB5ACdkUABZADuAqQCpQIABY3B5ACUBKAE1AfUhdGUGYWmg0iJ0KGFsRGlmZmVyZW50aWFsRAAAoEUhbCJleXMAAKAtIQACYWVpb0EBRAFKAU0B8iFvbgxhZABpAGwAO4DHAMdAcgBjAAhhbiJpbnQAAKAwIm8AdAAKYQABZG5ZAV0BaSJsbGEAuGB0I2VyRG90ALdg8gA5AWkAp2NyImNsZQAAAkRNUFRwAXQBeQF9AW8AdAAAoJkiaSJudXMAAKCWIuwhdXMAoJUiaSJtZXMAAKCXIm8AAAFjc4cBlAFrKndpc2VDb250b3VySW50ZWdyYWwAAKAyImUjQ3VybHkAAAFEUZwBpAFvJXVibGVRdW90ZQAAoB0gdSJvdGUAAKAZIAACbG5wdbABtgHNAdgBbwBuAGWgNyIAoHQqgAFnaXQAvAHBAcUB8iJ1ZW50AKBhIm4AdAAAoC8i7yV1ckludGVncmFsAKAuIgABZnLRAdMBAKACIe8iZHVjdACgECJuLnRlckNsb2Nrd2lzZUNvbnRvdXJJbnRlZ3JhbAAAoDMi7yFzcwCgLypjAHIAAOA12J7ccABDoNMiYQBwAACgTSKABURKU1phY2VmaW9zAAsCEgIVAhgCGwIsAjQCOQI9AnMCfwNvoEUh9CJyYWhkAKARKWMAeQACZGMAeQAFZGMAeQAPZIABZ3JzACECJQIoAuchZXIAoCEgcgAAoKEhaAB2AACg5CoAAWF5MAIzAvIhb24OYRRkbAB0oAciYQCUY3IAAOA12AfdAAFhZkECawIAAWNtRQJnAvIjaXRpY2FsAAJBREdUUAJUAl8CYwJjInV0ZQC0YG8AdAFZAloC2WJiJGxlQWN1dGUA3WJyImF2ZQBgYGkibGRlANxi7yFuZACgxCJmJWVyZW50aWFsRAAAoEYhcAR9AgAAAAAAAIECjgIAABoDZgAA4DXYO91EoagAhQKJAm8AdAAAoNwgcSJ1YWwAAKBQIuIhbGUAA0NETFJVVpkCqAK1Au8C/wIRA28AbgB0AG8AdQByAEkAbgB0AGUAZwByAGEA7ADEAW8AdAKvAgAAAACwAqhgbiNBcnJvdwAAoNMhAAFlb7kC0AJmAHQAgAFBUlQAwQLGAs0CciJyb3cAAKDQIekkZ2h0QXJyb3cAoNQhZQDlACsCbgBnAAABTFLWAugC5SFmdAABQVLcAuECciJyb3cAAKD4J+kkZ2h0QXJyb3cAoPon6SRnaHRBcnJvdwCg+SdpImdodAAAAUFU9gL7AnIicm93AACg0iFlAGUAAKCoInAAQQIGAwAAAAALA3Iicm93AACg0SFvJHduQXJyb3cAAKDVIWUlcnRpY2FsQmFyAACgJSJuAAADQUJMUlRhJAM2AzoDWgNxA3oDciJyb3cAAKGTIUJVLAMwA2EAcgAAoBMpcCNBcnJvdwAAoPUhciJldmUAEWPlIWZ00gJDAwAASwMAAFIDaSVnaHRWZWN0b3IAAKBQKWUkZVZlY3RvcgAAoF4p5SJjdG9yQqC9IWEAcgAAoFYpaSJnaHQA1AFiAwAAaQNlJGVWZWN0b3IAAKBfKeUiY3RvckKgwSFhAHIAAKBXKWUAZQBBoKQiciJyb3cAAKCnIXIAcgBvAPcAtAIAAWN0gwOHA3IA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YwAAoN8i4SFycnCgtiEAoD0pgKIqImJjZG9zACsVMBU6FT4VQRVyImNhcAAAoEgqAAFhdTQVNxVwAACgRipwAACgSipvAHQAAKCNInIAAKBFKgDgKiIA/gACYWxydksVURVuFXMVcgByAG2gtyEAoDwpeQCAAWV2dwBYFWUVaRVxAHACXxUAAAAAYxVyAGUA4wAXFXUA4wAZFWUAZQAAoM4iZSJkZ2UAAKDPImUAbgA7gKQApEBlI2Fycm93AAABbHJ7FX8V5SFmdACgtiFpImdodAAAoLchZQDkAG0VAAFjaYsVkRVvAG4AaQBuAPQAkwFuAHQAAKAxImwiY3R5AACgLSOACUFIYWJjZGVmaGlqbG9yc3R1d3oAuBW7Fb8V1RXgFegV+RUKFhUWHxZUFlcWZRbFFtsW7xb7FgUXChdyAPIAtAJhAHIAAKBlKQACZ2xyc8YVyhXOFdAV5yFlcgCgICDlIXRoAKA4IfIA9QxoAHagECAAoKMiawHZFd4VYSJyb3cAAKAPKWEA4wBfAgABYXnkFecV8iFvbg9hNGQAoUYhYW/tFfQVAAFnciEC8RVyAACgyiF0InNlcQAAoHcqgAFnbG0A/xUCFgUWO4CwALBAdABhALRjcCJ0eXYAAKCxKQABaXIOFhIW8yFodACgfykA4DXYId1hAHIAAAFschsWHRYAoMMhAKDCIYACYWVnc3YAKBauAjYWOhY+Fm0AAKHEIm9zLhY0Fm4AZABzoMQi9SFpdACgZiZhIm1tYQDdY2kAbgAAoPIiAKH3AGlvQxZRFmQAZQAAgfcAO29KFksW90BuI3RpbWVzAACgxyJuAPgAUBZjAHkAUmRjAG8CXhYAAAAAYhZyAG4AAKAeI28AcAAAoA0jgAJscHR1dwBuFnEWdRaSFp4W7CFhciRgZgAA4DXYVd0AotkCZW1wc30WhBaJFo0WcQBkoFAibwB0AACgUSJpIm51cwAAoDgi7CF1cwCgFCLxInVhcmUAoKEiYgBsAGUAYgBhAHIAdwBlAGQAZwDlANcAbgCAAWFkaAClFqoWtBZyAHIAbwD3APUMbwB3AG4AYQByAHIAbwB3APMA8xVhI3Jwb29uAAABbHK8FsAWZQBmAPQAHBZpAGcAaAD0AB4WYgHJFs8WawBhAHIAbwD3AJILbwLUFgAAAADYFnIAbgAAoB8jbwBwAACgDCOAAWNvdADhFukW7BYAAXJ55RboFgDgNdi53FVkbAAAoPYp8iFvaxFhAAFkcvMW9xZvAHQAAKDxImkA5qC/JVsSAAFhaP8WAhdyAPIANQNhAPIA1wvhIm5nbGUAoKYpAAFjaQ4XEBd5AF9k5yJyYXJyAKD/JwAJRGFjZGVmZ2xtbm9wcXJzdHV4MRc4F0YXWxcyBF4XaRd5F40XrBe0F78X2RcVGCEYLRg1GEAYAAFEbzUXgRZvAPQA+BUAAWNzPBdCF3UAdABlADuA6QDpQPQhZXIAoG4qAAJhaW95TRdQF1YXWhfyIW9uG2FyAGOgViI7gOoA6kDsIW9uAKBVIk1kbwB0ABdhAAFEcmIXZhdvAHQAAKBSIgDgNdgi3XKhmipuF3QXYQB2AGUAO4DoAOhAZKCWKm8AdAAAoJgqgKGZKmlscwCAF4UXhxfuInRlcnMAoOcjAKATIWSglSpvAHQAAKCXKoABYXBzAJMXlheiF2MAcgATYXQAeQBzogUinxcAAAAAoRdlAHQAAKAFInAAMaADIDMBqRerFwCgBCAAoAUgAAFnc7AXsRdLYXAAAKACIAABZ3C4F7sXbwBuABlhZgAA4DXYVt2AAWFscwDFF8sXzxdyAHOg1SJsAACg4yl1AHMAAKBxKmkAAKG1A2x21RfYF28AbgC1Y/VjAAJjc3V24BfoF/0XEBgAAWlv5BdWF3IAYwAAoFYiaQLuFwAAAADwF+0ADQThIW50AAFnbPUX+Rd0AHIAAKCWKuUhc3MAoJUqgAFhZWkAAxgGGAoYbABzAD1gcwB0AACgXyJ2AESgYSJEAACgeCrwImFyc2wAoOUpAAFEYRkYHRhvAHQAAKBTInIAcgAAoHEpgAFjZGkAJxgqGO0XcgAAoC8hbwD0AIwCAAFhaDEYMhi3YzuA8ADwQAABbXI5GD0YbAA7gOsA60BvAACgrCCAAWNpcABGGEgYSxhsACFgcwD0ACwEAAFlb08YVxhjAHQAYQB0AGkAbwDuABoEbgBlAG4AdABpAGEAbADlADME4Ql1GAAAgRgAAIMYiBgAAAAAoRilGAAAqhgAALsYvhjRGAAA1xgnGWwAbABpAG4AZwBkAG8AdABzAGUA8QBlF3kARGRtImFsZQAAoEAmgAFpbHIAjRiRGJ0Y7CFpZwCgA/tpApcYAAAAAJoYZwAAoAD7aQBnAACgBPsA4DXYI93sIWlnAKAB++whaWcA4GYAagCAAWFsdACvGLIYthh0AACgbSZpAGcAAKAC+24AcwAAoLElbwBmAJJh8AHCGAAAxhhmAADgNdhX3QABYWvJGMwYbADsAGsEdqDUIgCg2SphI3J0aW50AACgDSoAAWFv2hgiGQABY3PeGB8ZsQPnGP0YBRkSGRUZAAAdGbID7xjyGPQY9xj5GAAA+xg7gL0AvUAAoFMhO4C8ALxAAKBVIQCgWSEAoFshswEBGQAAAxkAoFQhAKBWIbQCCxkOGQAAAAAQGTuAvgC+QACgVyEAoFwhNQAAoFghtgEZGQAAGxkAoFohAKBdITgAAKBeIWwAAKBEIHcAbgAAoCIjYwByAADgNdi73IAIRWFiY2RlZmdpamxub3JzdHYARhlKGVoZXhlmGWkZkhmWGZkZnRmgGa0ZxhnLGc8Z4BkjGmygZyIAoIwqgAFjbXAAUBlTGVgZ9SF0ZfVhbQBhAOSgswM6FgCghipyImV2ZQAfYQABaXliGWUZcgBjAB1hM2RvAHQAIWGAoWUibHFzAMYEcBl6GfGhZSLOBAAAdhlsAGEAbgD0AN8EgKF+KmNkbACBGYQZjBljAACgqSpvAHQAb6CAKmyggioAoIQqZeDbIgD+cwAAoJQqcgAA4DXYJN3noGsirATtIWVsAKA3IWMAeQBTZIChdyJFYWoApxmpGasZAKCSKgCgpSoAoKQqAAJFYWVztBm2Gb0ZwhkAoGkicABwoIoq8iFveACgiipxoIgq8aCIKrUZaQBtAACg5yJwAGYAAOA12FjdYQB2AOUAYwIAAWNp0xnWGXIAAKAKIW0AAKFzImVs3BneGQCgjioAoJAqAIM+ADtjZGxxco0E6xn0GfgZ/BkBGgABY2nvGfEZAKCnKnIAAKB6Km8AdAAAoNci0CFhcgCglSl1ImVzdAAAoHwqgAJhZGVscwAKGvQZFhrVBCAa8AEPGgAAFBpwAHIAbwD4AFkZcgAAoHgpcQAAAWxxxAQbGmwAZQBzAPMASRlpAO0A5AQAAWVuJxouGnIjdG5lcXEAAOBpIgD+xQAsGgAFQWFiY2Vma29zeUAaQxpmGmoabRqDGocalhrCGtMacgDyAMwCAAJpbG1yShpOGlAaVBpyAHMA8ABxD2YAvWBpAGwA9AASBQABZHJYGlsaYwB5AEpkAKGUIWN3YBpkGmkAcgAAoEgpAKCtIWEAcgAAoA8h6SFyYyVhgAFhbHIAcxp7Gn8a8iF0c3WgZSZpAHQAAKBlJuwhaXAAoCYg4yFvbgCguSJyAADgNdgl3XMAAAFld4wakRphInJvdwAAoCUpYSJyb3cAAKAmKYACYW1vcHIAnxqjGqcauhq+GnIAcgAAoP8h9CFodACgOyJrAAABbHKsGrMaZSRmdGFycm93AACgqSHpJGdodGFycm93AKCqIWYAAOA12Fnd4iFhcgCgFSCAAWNsdADIGswa0BpyAADgNdi93GEAcwDoAGka8iFvaydhAAFicNca2xr1IWxsAKBDIOghZW4AoBAg4Qr2GgAA/RoAAAgbExsaGwAAIRs7GwAAAAA+G2IbmRuVG6sbAACyG80b0htjAHUAdABlADuA7QDtQAChYyBpeQEbBhtyAGMAO4DuAO5AOGQAAWN4CxsNG3kANWRjAGwAO4ChAKFAAAFmcssCFhsA4DXYJt1yAGEAdgBlADuA7ADsQIChSCFpbm8AJxsyGzYbAAFpbisbLxtuAHQAAKAMKnQAAKAtIuYhaW4AoNwpdABhAACgKSHsIWlnM2GAAWFvcABDG1sbXhuAAWNndABJG0sbWRtyACthgAFlbHAAcQVRG1UbaQBuAOUAyAVhAHIA9AByBWgAMWFmAACgtyJlAGQAtWEAoggiY2ZvdGkbbRt1G3kb4SFyZQCgBSFpAG4AdKAeImkAZQAAoN0pZABvAPQAWxsAoisiY2VscIEbhRuPG5QbYQBsAACguiIAAWdyiRuNG2UAcgDzACMQ4wCCG2EicmhrAACgFyryIW9kAKA8KgACY2dwdJ8boRukG6gbeQBRZG8AbgAvYWYAAOA12FrdYQC5Y3UAZQBzAHQAO4C/AL9AAAFjabUbuRtyAADgNdi+3G4AAKIIIkVkc3bCG8QbyBvQAwCg+SJvAHQAAKD1Inag9CIAoPMiaaBiIOwhZGUpYesB1hsAANkbYwB5AFZkbAA7gO8A70AAA2NmbW9zdeYb7hvyG/Ub+hsFHAABaXnqG+0bcgBjADVhOWRyAADgNdgn3eEhdGg3YnAAZgAA4DXYW93jAf8bAAADHHIAAOA12L/c8iFjeVhk6yFjeVRkAARhY2ZnaGpvcxUcGhwiHCYcKhwtHDAcNRzwIXBhdqC6A/BjAAFleR4cIRzkIWls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ZmdobG1vcHJzdHV3CiwNLBEsHSwnLDEsQCxLLFIsYix6LIQsjyzLLOgs7Sz/LAotcgDyAAkDYQByAACgYykAAWNyFSwbLHUAdABlADuA+gD6QPIACQ1yAOMBIywAACUseQBeZHYAZQBtYQABaXkrLDAscgBjADuA+wD7QENkgAFhYmgANyw6LD0scgDyANEO7CFhY3FhYQDyAOAOAAFpckQsSCzzIWh0AKB+KQDgNdgy3XIAYQB2AGUAO4D5APlAYQFWLF8scgAAAWxyWixcLACgvyEAoL4hbABrAACggCUAAWN0Zix2LG8CbCwAAAAAcyxyAG4AZaAcI3IAAKAcI28AcAAAoA8jcgBpAACg+CUAAWFsfiyBLGMAcgBrYTuAqACoQAABZ3CILIssbwBuAHNhZgAA4DXYZt0AA2FkaGxzdZksniynLLgsuyzFLHIAcgBvAPcACQ1vAHcAbgBhAHIAcgBvAPcA2A5hI3Jwb29uAAABbHKvLLMsZQBmAPQAWyxpAGcAaAD0AF0sdQDzAKYOaQAAocUDaGzBLMIs0mNvAG4AxWPwI2Fycm93cwCgyCGAAWNpdADRLOEs5CxvAtcsAAAAAN4scgBuAGWgHSNyAACgHSNvAHAAAKAOI24AZwBvYXIAaQAAoPklYwByAADgNdjK3IABZGlyAPMs9yz6LG8AdAAAoPAi7CFkZWlhaQBmoLUlAKC0JQABYW0DLQYtcgDyAMosbAA7gPwA/EDhIm5nbGUAoKcpgAdBQkRhY2RlZmxub3Byc3oAJy0qLTAtNC2bLZ0toS2/LcMtxy3TLdgt3C3gLfwtcgDyABADYQByAHag6CoAoOkqYQBzAOgA/gIAAW5yOC08LechcnQAoJwpgANla25wcnN0AJkpSC1NLVQtXi1iLYItYQBwAHAA4QAaHG8AdABoAGkAbgDnAKEXgAFoaXIAoSmzJFotbwBwAPQAdCVooJUh7wD4JgABaXVmLWotZwBtAOEAuygAAWJwbi14LXMjZXRuZXEAceCKIgD+AODLKgD+cyNldG5lcQBx4IsiAP4A4MwqAP4AAWhyhi2KLWUAdADhABIraSNhbmdsZQAAAWxyki2WLeUhZnQAoLIiaSJnaHQAAKCzInkAMmThIXNoAKCiIoABZWxyAKcttC24LWKiKCKuLQAAAACyLWEAcgAAoLsicQAAoFoi7CFpcACg7iIAAWJ0vC1eD2EA8gBfD3IAAOA12DPddAByAOkAlS1zAHUAAAFicM0t0C0A4IIi0iAA4IMi0iBwAGYAAOA12GfdcgBvAPAAWQt0AHIA6QCaLQABY3XkLegtcgAA4DXYy9wAAWJw7C30LW4AAAFFZXUt8S0A4IoiAP5uAAABRWV/LfktAOCLIgD+6SJnemFnAKCaKYADY2Vmb3BycwANLhAuJS4pLiMuLi40LukhcmN1YQABZGkULiEuAAFiZxguHC5hAHIAAKBfKmUAcaAnIgCgWSLlIXJwAKAYIXIAAOA12DTdcABmAADgNdho3WWgQCJhAHQA6ABqD2MAcgAA4DXYzNzjCuQRUC4AAFQuAABYLmIuAAAAAGMubS5wLnQuAAAAAIguki4AAJouJxIqEnQAcgDpAB0ScgAA4DXYNd0AAUFhWy5eLnIA8gDnAnIA8gCTB75jAAFBYWYuaS5yAPIA4AJyAPIAjAdhAPAAeh5pAHMAAKD7IoABZHB0APgReS6DLgABZmx9LoAuAOA12GnddQDzAP8RaQBtAOUABBIAAUFhiy6OLnIA8gDuAnIA8gCaBwABY3GVLgoScgAA4DXYzdwAAXB0nS6hLmwAdQDzACUScgDpACASAARhY2VmaW9zdbEuvC7ELsguzC7PLtQu2S5jAAABdXm2LrsudABlADuA/QD9QE9kAAFpecAuwy5yAGMAd2FLZG4AO4ClAKVAcgAA4DXYNt1jAHkAV2RwAGYAAOA12GrdYwByAADgNdjO3AABY23dLt8ueQBOZGwAO4D/AP9AAAVhY2RlZmhpb3N38y73Lv8uAi8MLxAvEy8YLx0vIi9jInV0ZQB6YQABYXn7Lv4u8iFvbn5hN2RvAHQAfGEAAWV0Bi8KL3QAcgDmAB8QYQC2Y3IAAOA12DfdYwB5ADZk5yJyYXJyAKDdIXAAZgAA4DXYa91jAHIAAOA12M/cAAFqbiYvKC8AoA0gagAAoAwg");
114
+
115
+ // Generated using scripts/write-decode-map.ts
116
+ const xmlDecodeTree = /* #__PURE__ */ decodeBase64("AAJhZ2xxBwARABMAFQBtAg0AAAAAAA8AcAAmYG8AcwAnYHQAPmB0ADxg9SFvdCJg");
117
+
118
+ /**
119
+ * Bit flags & masks for the binary trie encoding used for entity decoding.
120
+ *
121
+ * Bit layout (16 bits total):
122
+ * 15..14 VALUE_LENGTH (+1 encoding; 0 => no value)
123
+ * 13 FLAG13. If valueLength>0: semicolon required flag (implicit ';').
124
+ * If valueLength==0: compact run flag.
125
+ * 12..7 BRANCH_LENGTH Branch length (0 => single branch in 6..0 if jumpOffset==char) OR run length (when compact run)
126
+ * 6..0 JUMP_TABLE Jump offset (jump table) OR single-branch char code OR first run char
127
+ */
128
+ var BinTrieFlags;
129
+ (function (BinTrieFlags) {
130
+ BinTrieFlags[BinTrieFlags["VALUE_LENGTH"] = 49152] = "VALUE_LENGTH";
131
+ BinTrieFlags[BinTrieFlags["FLAG13"] = 8192] = "FLAG13";
132
+ BinTrieFlags[BinTrieFlags["BRANCH_LENGTH"] = 8064] = "BRANCH_LENGTH";
133
+ BinTrieFlags[BinTrieFlags["JUMP_TABLE"] = 127] = "JUMP_TABLE";
134
+ })(BinTrieFlags || (BinTrieFlags = {}));
135
+
98
136
  var CharCodes$1;
99
137
  (function (CharCodes) {
100
138
  CharCodes[CharCodes["NUM"] = 35] = "NUM";
@@ -112,12 +150,6 @@ var CharCodes$1;
112
150
  })(CharCodes$1 || (CharCodes$1 = {}));
113
151
  /** Bit that needs to be set to convert an upper case ASCII character to lower case */
114
152
  const TO_LOWER_BIT = 32;
115
- var BinTrieFlags;
116
- (function (BinTrieFlags) {
117
- BinTrieFlags[BinTrieFlags["VALUE_LENGTH"] = 49152] = "VALUE_LENGTH";
118
- BinTrieFlags[BinTrieFlags["BRANCH_LENGTH"] = 16256] = "BRANCH_LENGTH";
119
- BinTrieFlags[BinTrieFlags["JUMP_TABLE"] = 127] = "JUMP_TABLE";
120
- })(BinTrieFlags || (BinTrieFlags = {}));
121
153
  function isNumber$1(code) {
122
154
  return code >= CharCodes$1.ZERO && code <= CharCodes$1.NINE;
123
155
  }
@@ -162,6 +194,7 @@ var DecodingMode;
162
194
  class EntityDecoder {
163
195
  constructor(
164
196
  /** The tree used to decode entities. */
197
+ // biome-ignore lint/correctness/noUnusedPrivateClassMembers: False positive
165
198
  decodeTree,
166
199
  /**
167
200
  * The function that is called when a codepoint is decoded.
@@ -195,6 +228,8 @@ class EntityDecoder {
195
228
  this.excess = 1;
196
229
  /** The mode in which the decoder is operating. */
197
230
  this.decodeMode = DecodingMode.Strict;
231
+ /** The number of characters that have been consumed in the current run. */
232
+ this.runConsumed = 0;
198
233
  }
199
234
  /** Resets the instance to make it reusable. */
200
235
  startEntity(decodeMode) {
@@ -204,6 +239,7 @@ class EntityDecoder {
204
239
  this.treeIndex = 0;
205
240
  this.excess = 1;
206
241
  this.consumed = 1;
242
+ this.runConsumed = 0;
207
243
  }
208
244
  /**
209
245
  * Write an entity to the decoder. This can be called multiple times with partial entities.
@@ -262,15 +298,6 @@ class EntityDecoder {
262
298
  this.state = EntityDecoderState.NumericDecimal;
263
299
  return this.stateNumericDecimal(input, offset);
264
300
  }
265
- addToNumericResult(input, start, end, base) {
266
- if (start !== end) {
267
- const digitCount = end - start;
268
- this.result =
269
- this.result * Math.pow(base, digitCount) +
270
- Number.parseInt(input.substr(start, digitCount), base);
271
- this.consumed += digitCount;
272
- }
273
- }
274
301
  /**
275
302
  * Parses a hexadecimal numeric entity.
276
303
  *
@@ -281,19 +308,22 @@ class EntityDecoder {
281
308
  * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
282
309
  */
283
310
  stateNumericHex(input, offset) {
284
- const startIndex = offset;
285
311
  while (offset < input.length) {
286
312
  const char = input.charCodeAt(offset);
287
313
  if (isNumber$1(char) || isHexadecimalCharacter(char)) {
288
- offset += 1;
314
+ // Convert hex digit to value (0-15); 'a'/'A' -> 10.
315
+ const digit = char <= CharCodes$1.NINE
316
+ ? char - CharCodes$1.ZERO
317
+ : (char | TO_LOWER_BIT) - CharCodes$1.LOWER_A + 10;
318
+ this.result = this.result * 16 + digit;
319
+ this.consumed++;
320
+ offset++;
289
321
  }
290
322
  else {
291
- this.addToNumericResult(input, startIndex, offset, 16);
292
323
  return this.emitNumericEntity(char, 3);
293
324
  }
294
325
  }
295
- this.addToNumericResult(input, startIndex, offset, 16);
296
- return -1;
326
+ return -1; // Incomplete entity
297
327
  }
298
328
  /**
299
329
  * Parses a decimal numeric entity.
@@ -305,19 +335,18 @@ class EntityDecoder {
305
335
  * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
306
336
  */
307
337
  stateNumericDecimal(input, offset) {
308
- const startIndex = offset;
309
338
  while (offset < input.length) {
310
339
  const char = input.charCodeAt(offset);
311
340
  if (isNumber$1(char)) {
312
- offset += 1;
341
+ this.result = this.result * 10 + (char - CharCodes$1.ZERO);
342
+ this.consumed++;
343
+ offset++;
313
344
  }
314
345
  else {
315
- this.addToNumericResult(input, startIndex, offset, 10);
316
346
  return this.emitNumericEntity(char, 2);
317
347
  }
318
348
  }
319
- this.addToNumericResult(input, startIndex, offset, 10);
320
- return -1;
349
+ return -1; // Incomplete entity
321
350
  }
322
351
  /**
323
352
  * Validate and emit a numeric entity.
@@ -367,10 +396,64 @@ class EntityDecoder {
367
396
  stateNamedEntity(input, offset) {
368
397
  const { decodeTree } = this;
369
398
  let current = decodeTree[this.treeIndex];
370
- // The mask is the number of bytes of the value, including the current byte.
399
+ // The length is the number of bytes of the value, including the current byte.
371
400
  let valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;
372
- for (; offset < input.length; offset++, this.excess++) {
401
+ while (offset < input.length) {
402
+ // Handle compact runs (possibly inline): valueLength == 0 and SEMI_REQUIRED bit set.
403
+ if (valueLength === 0 && (current & BinTrieFlags.FLAG13) !== 0) {
404
+ const runLength = (current & BinTrieFlags.BRANCH_LENGTH) >> 7; /* 2..63 */
405
+ // If we are starting a run, check the first char.
406
+ if (this.runConsumed === 0) {
407
+ const firstChar = current & BinTrieFlags.JUMP_TABLE;
408
+ if (input.charCodeAt(offset) !== firstChar) {
409
+ return this.result === 0
410
+ ? 0
411
+ : this.emitNotTerminatedNamedEntity();
412
+ }
413
+ offset++;
414
+ this.excess++;
415
+ this.runConsumed++;
416
+ }
417
+ // Check remaining characters in the run.
418
+ while (this.runConsumed < runLength) {
419
+ if (offset >= input.length) {
420
+ return -1;
421
+ }
422
+ const charIndexInPacked = this.runConsumed - 1;
423
+ const packedWord = decodeTree[this.treeIndex + 1 + (charIndexInPacked >> 1)];
424
+ const expectedChar = charIndexInPacked % 2 === 0
425
+ ? packedWord & 0xff
426
+ : (packedWord >> 8) & 0xff;
427
+ if (input.charCodeAt(offset) !== expectedChar) {
428
+ this.runConsumed = 0;
429
+ return this.result === 0
430
+ ? 0
431
+ : this.emitNotTerminatedNamedEntity();
432
+ }
433
+ offset++;
434
+ this.excess++;
435
+ this.runConsumed++;
436
+ }
437
+ this.runConsumed = 0;
438
+ this.treeIndex += 1 + (runLength >> 1);
439
+ current = decodeTree[this.treeIndex];
440
+ valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;
441
+ }
442
+ if (offset >= input.length)
443
+ break;
373
444
  const char = input.charCodeAt(offset);
445
+ /*
446
+ * Implicit semicolon handling for nodes that require a semicolon but
447
+ * don't have an explicit ';' branch stored in the trie. If we have
448
+ * a value on the current node, it requires a semicolon, and the
449
+ * current input character is a semicolon, emit the entity using the
450
+ * current node (without descending further).
451
+ */
452
+ if (char === CharCodes$1.SEMI &&
453
+ valueLength !== 0 &&
454
+ (current & BinTrieFlags.FLAG13) !== 0) {
455
+ return this.emitNamedEntityData(this.treeIndex, valueLength, this.consumed + this.excess);
456
+ }
374
457
  this.treeIndex = determineBranch(decodeTree, current, this.treeIndex + Math.max(1, valueLength), char);
375
458
  if (this.treeIndex < 0) {
376
459
  return this.result === 0 ||
@@ -392,12 +475,16 @@ class EntityDecoder {
392
475
  return this.emitNamedEntityData(this.treeIndex, valueLength, this.consumed + this.excess);
393
476
  }
394
477
  // If we encounter a non-terminated (legacy) entity while parsing strictly, then ignore it.
395
- if (this.decodeMode !== DecodingMode.Strict) {
478
+ if (this.decodeMode !== DecodingMode.Strict &&
479
+ (current & BinTrieFlags.FLAG13) === 0) {
396
480
  this.result = this.treeIndex;
397
481
  this.consumed += this.excess;
398
482
  this.excess = 0;
399
483
  }
400
484
  }
485
+ // Increment offset & excess for next iteration
486
+ offset++;
487
+ this.excess++;
401
488
  }
402
489
  return -1;
403
490
  }
@@ -426,7 +513,8 @@ class EntityDecoder {
426
513
  emitNamedEntityData(result, valueLength, consumed) {
427
514
  const { decodeTree } = this;
428
515
  this.emitCodePoint(valueLength === 1
429
- ? decodeTree[result] & ~BinTrieFlags.VALUE_LENGTH
516
+ ? decodeTree[result] &
517
+ ~(BinTrieFlags.VALUE_LENGTH | BinTrieFlags.FLAG13)
430
518
  : decodeTree[result + 1], consumed);
431
519
  if (valueLength === 3) {
432
520
  // For multi-byte values, we need to emit the second byte.
@@ -494,21 +582,27 @@ function determineBranch(decodeTree, current, nodeIndex, char) {
494
582
  ? -1
495
583
  : decodeTree[nodeIndex + value] - 1;
496
584
  }
497
- // Case 3: Multiple branches encoded in dictionary
498
- // Binary search for the character.
499
- let lo = nodeIndex;
500
- let hi = lo + branchCount - 1;
585
+ // Case 3: Multiple branches encoded in packed dictionary (two keys per uint16)
586
+ const packedKeySlots = (branchCount + 1) >> 1;
587
+ /*
588
+ * Treat packed keys as a virtual sorted array of length `branchCount`.
589
+ * Key(i) = low byte for even i, high byte for odd i in slot i>>1.
590
+ */
591
+ let lo = 0;
592
+ let hi = branchCount - 1;
501
593
  while (lo <= hi) {
502
594
  const mid = (lo + hi) >>> 1;
503
- const midValue = decodeTree[mid];
504
- if (midValue < char) {
595
+ const slot = mid >> 1;
596
+ const packed = decodeTree[nodeIndex + slot];
597
+ const midKey = (packed >> ((mid & 1) * 8)) & 0xff;
598
+ if (midKey < char) {
505
599
  lo = mid + 1;
506
600
  }
507
- else if (midValue > char) {
601
+ else if (midKey > char) {
508
602
  hi = mid - 1;
509
603
  }
510
604
  else {
511
- return decodeTree[mid + branchCount];
605
+ return decodeTree[nodeIndex + packedKeySlots + mid];
512
606
  }
513
607
  }
514
608
  return -1;
@@ -1090,15 +1184,22 @@ class Tokenizer {
1090
1184
  : DecodingMode.Attribute);
1091
1185
  }
1092
1186
  stateInEntity() {
1093
- const length = this.entityDecoder.write(this.buffer, this.index - this.offset);
1187
+ const indexInBuffer = this.index - this.offset;
1188
+ const length = this.entityDecoder.write(this.buffer, indexInBuffer);
1094
1189
  // If `length` is positive, we are done with the entity.
1095
1190
  if (length >= 0) {
1096
1191
  this.state = this.baseState;
1097
1192
  if (length === 0) {
1098
- this.index = this.entityStart;
1193
+ this.index -= 1;
1099
1194
  }
1100
1195
  }
1101
1196
  else {
1197
+ if (indexInBuffer < this.buffer.length &&
1198
+ this.buffer.charCodeAt(indexInBuffer) === CharCodes.Amp) {
1199
+ this.state = this.baseState;
1200
+ this.index -= 1;
1201
+ return;
1202
+ }
1102
1203
  // Mark buffer as consumed.
1103
1204
  this.index = this.offset + this.buffer.length - 1;
1104
1205
  }
@@ -5673,7 +5774,7 @@ function encode(decoded) {
5673
5774
  return writer.flush();
5674
5775
  }
5675
5776
 
5676
- let BitSet$1 = class BitSet {
5777
+ class BitSet {
5677
5778
  constructor(arg) {
5678
5779
  this.bits = arg instanceof BitSet ? arg.bits.slice() : [];
5679
5780
  }
@@ -5685,9 +5786,9 @@ let BitSet$1 = class BitSet {
5685
5786
  has(n) {
5686
5787
  return !!(this.bits[n >> 5] & (1 << (n & 31)));
5687
5788
  }
5688
- };
5789
+ }
5689
5790
 
5690
- let Chunk$1 = class Chunk {
5791
+ class Chunk {
5691
5792
  constructor(start, end, content) {
5692
5793
  this.start = start;
5693
5794
  this.end = end;
@@ -5864,9 +5965,9 @@ let Chunk$1 = class Chunk {
5864
5965
  if (this.outro.length) return true;
5865
5966
  }
5866
5967
  }
5867
- };
5968
+ }
5868
5969
 
5869
- function getBtoa$1() {
5970
+ function getBtoa() {
5870
5971
  if (typeof globalThis !== 'undefined' && typeof globalThis.btoa === 'function') {
5871
5972
  return (str) => globalThis.btoa(unescape(encodeURIComponent(str)));
5872
5973
  } else if (typeof Buffer === 'function') {
@@ -5878,9 +5979,9 @@ function getBtoa$1() {
5878
5979
  }
5879
5980
  }
5880
5981
 
5881
- const btoa$1 = /*#__PURE__*/ getBtoa$1();
5982
+ const btoa = /*#__PURE__*/ getBtoa();
5882
5983
 
5883
- let SourceMap$1 = class SourceMap {
5984
+ class SourceMap {
5884
5985
  constructor(properties) {
5885
5986
  this.version = 3;
5886
5987
  this.file = properties.file;
@@ -5901,11 +6002,11 @@ let SourceMap$1 = class SourceMap {
5901
6002
  }
5902
6003
 
5903
6004
  toUrl() {
5904
- return 'data:application/json;charset=utf-8;base64,' + btoa$1(this.toString());
6005
+ return 'data:application/json;charset=utf-8;base64,' + btoa(this.toString());
5905
6006
  }
5906
- };
6007
+ }
5907
6008
 
5908
- function guessIndent$1(code) {
6009
+ function guessIndent(code) {
5909
6010
  const lines = code.split('\n');
5910
6011
 
5911
6012
  const tabbed = lines.filter((line) => /^\t+/.test(line));
@@ -5931,7 +6032,7 @@ function guessIndent$1(code) {
5931
6032
  return new Array(min + 1).join(' ');
5932
6033
  }
5933
6034
 
5934
- function getRelativePath$1(from, to) {
6035
+ function getRelativePath(from, to) {
5935
6036
  const fromParts = from.split(/[/\\]/);
5936
6037
  const toParts = to.split(/[/\\]/);
5937
6038
 
@@ -5950,13 +6051,13 @@ function getRelativePath$1(from, to) {
5950
6051
  return fromParts.concat(toParts).join('/');
5951
6052
  }
5952
6053
 
5953
- const toString$1 = Object.prototype.toString;
6054
+ const toString = Object.prototype.toString;
5954
6055
 
5955
- function isObject$1(thing) {
5956
- return toString$1.call(thing) === '[object Object]';
6056
+ function isObject(thing) {
6057
+ return toString.call(thing) === '[object Object]';
5957
6058
  }
5958
6059
 
5959
- function getLocator$1(source) {
6060
+ function getLocator(source) {
5960
6061
  const originalLines = source.split('\n');
5961
6062
  const lineOffsets = [];
5962
6063
 
@@ -5982,9 +6083,9 @@ function getLocator$1(source) {
5982
6083
  };
5983
6084
  }
5984
6085
 
5985
- const wordRegex$1 = /\w/;
6086
+ const wordRegex = /\w/;
5986
6087
 
5987
- let Mappings$1 = class Mappings {
6088
+ class Mappings {
5988
6089
  constructor(hires) {
5989
6090
  this.hires = hires;
5990
6091
  this.generatedCodeLine = 0;
@@ -6052,7 +6153,7 @@ let Mappings$1 = class Mappings {
6052
6153
 
6053
6154
  if (this.hires === 'boundary') {
6054
6155
  // in hires "boundary", group segments per word boundary than per char
6055
- if (wordRegex$1.test(original[originalCharIndex])) {
6156
+ if (wordRegex.test(original[originalCharIndex])) {
6056
6157
  // for first char in the boundary found, start the boundary by pushing a segment
6057
6158
  if (!charInHiresBoundary) {
6058
6159
  this.rawSegments.push(segment);
@@ -6094,19 +6195,19 @@ let Mappings$1 = class Mappings {
6094
6195
 
6095
6196
  this.generatedCodeColumn += lines[lines.length - 1].length;
6096
6197
  }
6097
- };
6198
+ }
6098
6199
 
6099
- const n$1 = '\n';
6200
+ const n = '\n';
6100
6201
 
6101
- const warned$1 = {
6202
+ const warned = {
6102
6203
  insertLeft: false,
6103
6204
  insertRight: false,
6104
6205
  storeName: false,
6105
6206
  };
6106
6207
 
6107
- let MagicString$1 = class MagicString {
6208
+ class MagicString {
6108
6209
  constructor(string, options = {}) {
6109
- const chunk = new Chunk$1(0, string.length, string);
6210
+ const chunk = new Chunk(0, string.length, string);
6110
6211
 
6111
6212
  Object.defineProperties(this, {
6112
6213
  original: { writable: true, value: string },
@@ -6119,7 +6220,7 @@ let MagicString$1 = class MagicString {
6119
6220
  byEnd: { writable: true, value: {} },
6120
6221
  filename: { writable: true, value: options.filename },
6121
6222
  indentExclusionRanges: { writable: true, value: options.indentExclusionRanges },
6122
- sourcemapLocations: { writable: true, value: new BitSet$1() },
6223
+ sourcemapLocations: { writable: true, value: new BitSet() },
6123
6224
  storedNames: { writable: true, value: {} },
6124
6225
  indentStr: { writable: true, value: undefined },
6125
6226
  ignoreList: { writable: true, value: options.ignoreList },
@@ -6204,7 +6305,7 @@ let MagicString$1 = class MagicString {
6204
6305
  cloned.indentExclusionRanges = this.indentExclusionRanges.slice();
6205
6306
  }
6206
6307
 
6207
- cloned.sourcemapLocations = new BitSet$1(this.sourcemapLocations);
6308
+ cloned.sourcemapLocations = new BitSet(this.sourcemapLocations);
6208
6309
 
6209
6310
  cloned.intro = this.intro;
6210
6311
  cloned.outro = this.outro;
@@ -6217,9 +6318,9 @@ let MagicString$1 = class MagicString {
6217
6318
 
6218
6319
  const sourceIndex = 0;
6219
6320
  const names = Object.keys(this.storedNames);
6220
- const mappings = new Mappings$1(options.hires);
6321
+ const mappings = new Mappings(options.hires);
6221
6322
 
6222
- const locate = getLocator$1(this.original);
6323
+ const locate = getLocator(this.original);
6223
6324
 
6224
6325
  if (this.intro) {
6225
6326
  mappings.advance(this.intro);
@@ -6251,7 +6352,7 @@ let MagicString$1 = class MagicString {
6251
6352
  return {
6252
6353
  file: options.file ? options.file.split(/[/\\]/).pop() : undefined,
6253
6354
  sources: [
6254
- options.source ? getRelativePath$1(options.file || '', options.source) : options.file || '',
6355
+ options.source ? getRelativePath(options.file || '', options.source) : options.file || '',
6255
6356
  ],
6256
6357
  sourcesContent: options.includeContent ? [this.original] : undefined,
6257
6358
  names,
@@ -6261,12 +6362,12 @@ let MagicString$1 = class MagicString {
6261
6362
  }
6262
6363
 
6263
6364
  generateMap(options) {
6264
- return new SourceMap$1(this.generateDecodedMap(options));
6365
+ return new SourceMap(this.generateDecodedMap(options));
6265
6366
  }
6266
6367
 
6267
6368
  _ensureindentStr() {
6268
6369
  if (this.indentStr === undefined) {
6269
- this.indentStr = guessIndent$1(this.original);
6370
+ this.indentStr = guessIndent(this.original);
6270
6371
  }
6271
6372
  }
6272
6373
 
@@ -6283,7 +6384,7 @@ let MagicString$1 = class MagicString {
6283
6384
  indent(indentStr, options) {
6284
6385
  const pattern = /^[^\r\n]/gm;
6285
6386
 
6286
- if (isObject$1(indentStr)) {
6387
+ if (isObject(indentStr)) {
6287
6388
  options = indentStr;
6288
6389
  indentStr = undefined;
6289
6390
  }
@@ -6375,22 +6476,22 @@ let MagicString$1 = class MagicString {
6375
6476
  }
6376
6477
 
6377
6478
  insertLeft(index, content) {
6378
- if (!warned$1.insertLeft) {
6479
+ if (!warned.insertLeft) {
6379
6480
  console.warn(
6380
6481
  'magicString.insertLeft(...) is deprecated. Use magicString.appendLeft(...) instead',
6381
6482
  );
6382
- warned$1.insertLeft = true;
6483
+ warned.insertLeft = true;
6383
6484
  }
6384
6485
 
6385
6486
  return this.appendLeft(index, content);
6386
6487
  }
6387
6488
 
6388
6489
  insertRight(index, content) {
6389
- if (!warned$1.insertRight) {
6490
+ if (!warned.insertRight) {
6390
6491
  console.warn(
6391
6492
  'magicString.insertRight(...) is deprecated. Use magicString.prependRight(...) instead',
6392
6493
  );
6393
- warned$1.insertRight = true;
6494
+ warned.insertRight = true;
6394
6495
  }
6395
6496
 
6396
6497
  return this.prependRight(index, content);
@@ -6463,11 +6564,11 @@ let MagicString$1 = class MagicString {
6463
6564
  this._split(end);
6464
6565
 
6465
6566
  if (options === true) {
6466
- if (!warned$1.storeName) {
6567
+ if (!warned.storeName) {
6467
6568
  console.warn(
6468
6569
  'The final argument to magicString.overwrite(...) should be an options object. See https://github.com/rich-harris/magic-string',
6469
6570
  );
6470
- warned$1.storeName = true;
6571
+ warned.storeName = true;
6471
6572
  }
6472
6573
 
6473
6574
  options = { storeName: true };
@@ -6500,7 +6601,7 @@ let MagicString$1 = class MagicString {
6500
6601
  first.edit(content, storeName, !overwrite);
6501
6602
  } else {
6502
6603
  // must be inserting at the end
6503
- const newChunk = new Chunk$1(start, end, '').edit(content, storeName);
6604
+ const newChunk = new Chunk(start, end, '').edit(content, storeName);
6504
6605
 
6505
6606
  // TODO last chunk in the array may not be the last chunk, if it's moved...
6506
6607
  last.next = newChunk;
@@ -6619,30 +6720,30 @@ let MagicString$1 = class MagicString {
6619
6720
  }
6620
6721
 
6621
6722
  lastLine() {
6622
- let lineIndex = this.outro.lastIndexOf(n$1);
6723
+ let lineIndex = this.outro.lastIndexOf(n);
6623
6724
  if (lineIndex !== -1) return this.outro.substr(lineIndex + 1);
6624
6725
  let lineStr = this.outro;
6625
6726
  let chunk = this.lastChunk;
6626
6727
  do {
6627
6728
  if (chunk.outro.length > 0) {
6628
- lineIndex = chunk.outro.lastIndexOf(n$1);
6729
+ lineIndex = chunk.outro.lastIndexOf(n);
6629
6730
  if (lineIndex !== -1) return chunk.outro.substr(lineIndex + 1) + lineStr;
6630
6731
  lineStr = chunk.outro + lineStr;
6631
6732
  }
6632
6733
 
6633
6734
  if (chunk.content.length > 0) {
6634
- lineIndex = chunk.content.lastIndexOf(n$1);
6735
+ lineIndex = chunk.content.lastIndexOf(n);
6635
6736
  if (lineIndex !== -1) return chunk.content.substr(lineIndex + 1) + lineStr;
6636
6737
  lineStr = chunk.content + lineStr;
6637
6738
  }
6638
6739
 
6639
6740
  if (chunk.intro.length > 0) {
6640
- lineIndex = chunk.intro.lastIndexOf(n$1);
6741
+ lineIndex = chunk.intro.lastIndexOf(n);
6641
6742
  if (lineIndex !== -1) return chunk.intro.substr(lineIndex + 1) + lineStr;
6642
6743
  lineStr = chunk.intro + lineStr;
6643
6744
  }
6644
6745
  } while ((chunk = chunk.previous));
6645
- lineIndex = this.intro.lastIndexOf(n$1);
6746
+ lineIndex = this.intro.lastIndexOf(n);
6646
6747
  if (lineIndex !== -1) return this.intro.substr(lineIndex + 1) + lineStr;
6647
6748
  return this.intro + lineStr;
6648
6749
  }
@@ -6732,7 +6833,7 @@ let MagicString$1 = class MagicString {
6732
6833
  _splitChunk(chunk, index) {
6733
6834
  if (chunk.edited && chunk.content.length) {
6734
6835
  // zero-length edited chunks are a special case (overlapping replacements)
6735
- const loc = getLocator$1(this.original)(index);
6836
+ const loc = getLocator(this.original)(index);
6736
6837
  throw new Error(
6737
6838
  `Cannot split a chunk that has already been edited (${loc.line}:${loc.column} – "${chunk.original}")`,
6738
6839
  );
@@ -6964,7 +7065,7 @@ let MagicString$1 = class MagicString {
6964
7065
 
6965
7066
  return this._replaceRegexp(searchValue, replacement);
6966
7067
  }
6967
- };
7068
+ }
6968
7069
 
6969
7070
  const HASH_CHARACTER_LENGTH = 16;
6970
7071
  function hashM2c2kitAssets(rootDir, cwd = "") {
@@ -6973,7 +7074,7 @@ function hashM2c2kitAssets(rootDir, cwd = "") {
6973
7074
  name: "hash-m2c2kit-assets",
6974
7075
  renderChunk: {
6975
7076
  handler(code) {
6976
- const magicString = new MagicString$1(code);
7077
+ const magicString = new MagicString(code);
6977
7078
  magicString.replace(
6978
7079
  new RegExp("__NO_M2C2KIT_MANIFEST_JSON_URL__", "g"),
6979
7080
  "manifest.json"
@@ -7178,7 +7279,7 @@ function restoreImportMeta(pattern = "import_meta = {};", replacement = "import_
7178
7279
  name: "restore-import-meta",
7179
7280
  renderChunk: {
7180
7281
  handler(code) {
7181
- const magicString = new MagicString$1(code);
7282
+ const magicString = new MagicString(code);
7182
7283
  magicString.replace(new RegExp(pattern, "g"), replacement);
7183
7284
  return {
7184
7285
  code: magicString.toString(),
@@ -7331,11 +7432,14 @@ function requireNodeModulesPaths () {
7331
7432
  var path = path$3;
7332
7433
  var parse = path.parse || requirePathParse(); // eslint-disable-line global-require
7333
7434
 
7435
+ var driveLetterRegex = /^([A-Za-z]:)/;
7436
+ var uncPathRegex = /^\\\\/;
7437
+
7334
7438
  var getNodeModulesDirs = function getNodeModulesDirs(absoluteStart, modules) {
7335
7439
  var prefix = '/';
7336
- if ((/^([A-Za-z]:)/).test(absoluteStart)) {
7440
+ if (driveLetterRegex.test(absoluteStart)) {
7337
7441
  prefix = '';
7338
- } else if ((/^\\\\/).test(absoluteStart)) {
7442
+ } else if (uncPathRegex.test(absoluteStart)) {
7339
7443
  prefix = '\\\\';
7340
7444
  }
7341
7445
 
@@ -7545,7 +7649,7 @@ var http2$1 = ">= 8.8";
7545
7649
  var https$1 = true;
7546
7650
  var inspector$1 = ">= 8";
7547
7651
  var _linklist$1 = "< 8";
7548
- var module$1 = true;
7652
+ var module$2 = true;
7549
7653
  var net$1 = true;
7550
7654
  var os$1 = true;
7551
7655
  var path$2 = true;
@@ -7730,7 +7834,7 @@ var require$$1$1 = {
7730
7834
  ">= 19"
7731
7835
  ],
7732
7836
  _linklist: _linklist$1,
7733
- module: module$1,
7837
+ module: module$2,
7734
7838
  "node:module": [
7735
7839
  ">= 14.18 && < 15",
7736
7840
  ">= 16"
@@ -8051,6 +8155,10 @@ function requireAsync$6 () {
8051
8155
 
8052
8156
  var realpathFS = process.platform !== 'win32' && fs.realpath && typeof fs.realpath.native === 'function' ? fs.realpath.native : fs.realpath;
8053
8157
 
8158
+ var relativePathRegex = /^(?:\.\.?(?:\/|$)|\/|([A-Za-z]:)?[/\\])/;
8159
+ var windowsDriveRegex = /^\w:[/\\]*$/;
8160
+ var nodeModulesRegex = /[/\\]node_modules[/\\]*$/;
8161
+
8054
8162
  var homedir = getHomedir();
8055
8163
  var defaultPaths = function () {
8056
8164
  return [
@@ -8167,10 +8275,10 @@ function requireAsync$6 () {
8167
8275
 
8168
8276
  var res;
8169
8277
  function init(basedir) {
8170
- if ((/^(?:\.\.?(?:\/|$)|\/|([A-Za-z]:)?[/\\])/).test(x)) {
8278
+ if (relativePathRegex.test(x)) {
8171
8279
  res = path.resolve(basedir, x);
8172
8280
  if (x === '.' || x === '..' || x.slice(-1) === '/') res += '/';
8173
- if ((/\/$/).test(x) && res === basedir) {
8281
+ if (x.slice(-1) === '/' && res === basedir) {
8174
8282
  loadAsDirectory(res, opts.package, onfile);
8175
8283
  } else loadAsFile(res, opts.package, onfile);
8176
8284
  } else if (includeCoreModules && isCore(x)) {
@@ -8258,10 +8366,10 @@ function requireAsync$6 () {
8258
8366
 
8259
8367
  function loadpkg(dir, cb) {
8260
8368
  if (dir === '' || dir === '/') return cb(null);
8261
- if (process.platform === 'win32' && (/^\w:[/\\]*$/).test(dir)) {
8369
+ if (process.platform === 'win32' && windowsDriveRegex.test(dir)) {
8262
8370
  return cb(null);
8263
8371
  }
8264
- if ((/[/\\]node_modules[/\\]*$/).test(dir)) return cb(null);
8372
+ if (nodeModulesRegex.test(dir)) return cb(null);
8265
8373
 
8266
8374
  maybeRealpath(realpath, dir, opts, function (unwrapErr, pkgdir) {
8267
8375
  if (unwrapErr) return loadpkg(path.dirname(dir), cb);
@@ -8405,7 +8513,7 @@ var http2 = ">= 8.8";
8405
8513
  var https = true;
8406
8514
  var inspector = ">= 8";
8407
8515
  var _linklist = "< 8";
8408
- var module = true;
8516
+ var module$1 = true;
8409
8517
  var net = true;
8410
8518
  var os = true;
8411
8519
  var path$1 = true;
@@ -8590,7 +8698,7 @@ var require$$1 = {
8590
8698
  ">= 19"
8591
8699
  ],
8592
8700
  _linklist: _linklist,
8593
- module: module,
8701
+ module: module$1,
8594
8702
  "node:module": [
8595
8703
  ">= 14.18 && < 15",
8596
8704
  ">= 16"
@@ -8654,7 +8762,10 @@ var require$$1 = {
8654
8762
  ">= 21.7"
8655
8763
  ],
8656
8764
  smalloc: smalloc,
8657
- "node:sqlite": ">= 23.4",
8765
+ "node:sqlite": [
8766
+ ">= 22.13 && < 23",
8767
+ ">= 23.4"
8768
+ ],
8658
8769
  _stream_duplex: _stream_duplex,
8659
8770
  "node:_stream_duplex": [
8660
8771
  ">= 14.18 && < 15",
@@ -8865,6 +8976,10 @@ function requireSync$6 () {
8865
8976
 
8866
8977
  var realpathFS = process.platform !== 'win32' && fs.realpathSync && typeof fs.realpathSync.native === 'function' ? fs.realpathSync.native : fs.realpathSync;
8867
8978
 
8979
+ var relativePathRegex = /^(?:\.\.?(?:\/|$)|\/|([A-Za-z]:)?[/\\])/;
8980
+ var windowsDriveRegex = /^\w:[/\\]*$/;
8981
+ var nodeModulesRegex = /[/\\]node_modules[/\\]*$/;
8982
+
8868
8983
  var homedir = getHomedir();
8869
8984
  var defaultPaths = function () {
8870
8985
  return [
@@ -8953,7 +9068,7 @@ function requireSync$6 () {
8953
9068
  // ensure that `basedir` is an absolute path at this point, resolving against the process' current working directory
8954
9069
  var absoluteStart = maybeRealpathSync(realpathSync, path.resolve(basedir), opts);
8955
9070
 
8956
- if ((/^(?:\.\.?(?:\/|$)|\/|([A-Za-z]:)?[/\\])/).test(x)) {
9071
+ if (relativePathRegex.test(x)) {
8957
9072
  var res = path.resolve(absoluteStart, x);
8958
9073
  if (x === '.' || x === '..' || x.slice(-1) === '/') res += '/';
8959
9074
  var m = loadAsFileSync(res) || loadAsDirectorySync(res);
@@ -8994,10 +9109,10 @@ function requireSync$6 () {
8994
9109
 
8995
9110
  function loadpkg(dir) {
8996
9111
  if (dir === '' || dir === '/') return;
8997
- if (process.platform === 'win32' && (/^\w:[/\\]*$/).test(dir)) {
9112
+ if (process.platform === 'win32' && windowsDriveRegex.test(dir)) {
8998
9113
  return;
8999
9114
  }
9000
- if ((/[/\\]node_modules[/\\]*$/).test(dir)) return;
9115
+ if (nodeModulesRegex.test(dir)) return;
9001
9116
 
9002
9117
  var pkgfile = path.join(maybeRealpathSync(realpathSync, dir, opts), 'package.json');
9003
9118
 
@@ -11584,9 +11699,9 @@ var hasRequiredUtils$4;
11584
11699
  function requireUtils$4 () {
11585
11700
  if (hasRequiredUtils$4) return utils$3;
11586
11701
  hasRequiredUtils$4 = 1;
11587
- (function (exports) {
11702
+ (function (exports$1) {
11588
11703
 
11589
- exports.isInteger = num => {
11704
+ exports$1.isInteger = num => {
11590
11705
  if (typeof num === 'number') {
11591
11706
  return Number.isInteger(num);
11592
11707
  }
@@ -11600,15 +11715,15 @@ function requireUtils$4 () {
11600
11715
  * Find a node of the given type
11601
11716
  */
11602
11717
 
11603
- exports.find = (node, type) => node.nodes.find(node => node.type === type);
11718
+ exports$1.find = (node, type) => node.nodes.find(node => node.type === type);
11604
11719
 
11605
11720
  /**
11606
11721
  * Find a node of the given type
11607
11722
  */
11608
11723
 
11609
- exports.exceedsLimit = (min, max, step = 1, limit) => {
11724
+ exports$1.exceedsLimit = (min, max, step = 1, limit) => {
11610
11725
  if (limit === false) return false;
11611
- if (!exports.isInteger(min) || !exports.isInteger(max)) return false;
11726
+ if (!exports$1.isInteger(min) || !exports$1.isInteger(max)) return false;
11612
11727
  return ((Number(max) - Number(min)) / Number(step)) >= limit;
11613
11728
  };
11614
11729
 
@@ -11616,7 +11731,7 @@ function requireUtils$4 () {
11616
11731
  * Escape the given node with '\\' before node.value
11617
11732
  */
11618
11733
 
11619
- exports.escapeNode = (block, n = 0, type) => {
11734
+ exports$1.escapeNode = (block, n = 0, type) => {
11620
11735
  const node = block.nodes[n];
11621
11736
  if (!node) return;
11622
11737
 
@@ -11632,7 +11747,7 @@ function requireUtils$4 () {
11632
11747
  * Returns true if the given brace node should be enclosed in literal braces
11633
11748
  */
11634
11749
 
11635
- exports.encloseBrace = node => {
11750
+ exports$1.encloseBrace = node => {
11636
11751
  if (node.type !== 'brace') return false;
11637
11752
  if ((node.commas >> 0 + node.ranges >> 0) === 0) {
11638
11753
  node.invalid = true;
@@ -11645,7 +11760,7 @@ function requireUtils$4 () {
11645
11760
  * Returns true if a brace node is invalid.
11646
11761
  */
11647
11762
 
11648
- exports.isInvalidBrace = block => {
11763
+ exports$1.isInvalidBrace = block => {
11649
11764
  if (block.type !== 'brace') return false;
11650
11765
  if (block.invalid === true || block.dollar) return true;
11651
11766
  if ((block.commas >> 0 + block.ranges >> 0) === 0) {
@@ -11663,7 +11778,7 @@ function requireUtils$4 () {
11663
11778
  * Returns true if a node is an open or close node
11664
11779
  */
11665
11780
 
11666
- exports.isOpenOrClose = node => {
11781
+ exports$1.isOpenOrClose = node => {
11667
11782
  if (node.type === 'open' || node.type === 'close') {
11668
11783
  return true;
11669
11784
  }
@@ -11674,7 +11789,7 @@ function requireUtils$4 () {
11674
11789
  * Reduce an array of text nodes.
11675
11790
  */
11676
11791
 
11677
- exports.reduce = nodes => nodes.reduce((acc, node) => {
11792
+ exports$1.reduce = nodes => nodes.reduce((acc, node) => {
11678
11793
  if (node.type === 'text') acc.push(node.value);
11679
11794
  if (node.type === 'range') node.type = 'text';
11680
11795
  return acc;
@@ -11684,7 +11799,7 @@ function requireUtils$4 () {
11684
11799
  * Flatten an array
11685
11800
  */
11686
11801
 
11687
- exports.flatten = (...args) => {
11802
+ exports$1.flatten = (...args) => {
11688
11803
  const result = [];
11689
11804
 
11690
11805
  const flat = arr => {
@@ -13292,7 +13407,7 @@ var hasRequiredUtils$3;
13292
13407
  function requireUtils$3 () {
13293
13408
  if (hasRequiredUtils$3) return utils$2;
13294
13409
  hasRequiredUtils$3 = 1;
13295
- (function (exports) {
13410
+ (function (exports$1) {
13296
13411
 
13297
13412
  const path = path$3;
13298
13413
  const win32 = process.platform === 'win32';
@@ -13303,19 +13418,19 @@ function requireUtils$3 () {
13303
13418
  REGEX_SPECIAL_CHARS_GLOBAL
13304
13419
  } = requireConstants$3();
13305
13420
 
13306
- exports.isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val);
13307
- exports.hasRegexChars = str => REGEX_SPECIAL_CHARS.test(str);
13308
- exports.isRegexChar = str => str.length === 1 && exports.hasRegexChars(str);
13309
- exports.escapeRegex = str => str.replace(REGEX_SPECIAL_CHARS_GLOBAL, '\\$1');
13310
- exports.toPosixSlashes = str => str.replace(REGEX_BACKSLASH, '/');
13421
+ exports$1.isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val);
13422
+ exports$1.hasRegexChars = str => REGEX_SPECIAL_CHARS.test(str);
13423
+ exports$1.isRegexChar = str => str.length === 1 && exports$1.hasRegexChars(str);
13424
+ exports$1.escapeRegex = str => str.replace(REGEX_SPECIAL_CHARS_GLOBAL, '\\$1');
13425
+ exports$1.toPosixSlashes = str => str.replace(REGEX_BACKSLASH, '/');
13311
13426
 
13312
- exports.removeBackslashes = str => {
13427
+ exports$1.removeBackslashes = str => {
13313
13428
  return str.replace(REGEX_REMOVE_BACKSLASH, match => {
13314
13429
  return match === '\\' ? '' : match;
13315
13430
  });
13316
13431
  };
13317
13432
 
13318
- exports.supportsLookbehinds = () => {
13433
+ exports$1.supportsLookbehinds = () => {
13319
13434
  const segs = process.version.slice(1).split('.').map(Number);
13320
13435
  if (segs.length === 3 && segs[0] >= 9 || (segs[0] === 8 && segs[1] >= 10)) {
13321
13436
  return true;
@@ -13323,21 +13438,21 @@ function requireUtils$3 () {
13323
13438
  return false;
13324
13439
  };
13325
13440
 
13326
- exports.isWindows = options => {
13441
+ exports$1.isWindows = options => {
13327
13442
  if (options && typeof options.windows === 'boolean') {
13328
13443
  return options.windows;
13329
13444
  }
13330
13445
  return win32 === true || path.sep === '\\';
13331
13446
  };
13332
13447
 
13333
- exports.escapeLast = (input, char, lastIdx) => {
13448
+ exports$1.escapeLast = (input, char, lastIdx) => {
13334
13449
  const idx = input.lastIndexOf(char, lastIdx);
13335
13450
  if (idx === -1) return input;
13336
- if (input[idx - 1] === '\\') return exports.escapeLast(input, char, idx - 1);
13451
+ if (input[idx - 1] === '\\') return exports$1.escapeLast(input, char, idx - 1);
13337
13452
  return `${input.slice(0, idx)}\\${input.slice(idx)}`;
13338
13453
  };
13339
13454
 
13340
- exports.removePrefix = (input, state = {}) => {
13455
+ exports$1.removePrefix = (input, state = {}) => {
13341
13456
  let output = input;
13342
13457
  if (output.startsWith('./')) {
13343
13458
  output = output.slice(2);
@@ -13346,7 +13461,7 @@ function requireUtils$3 () {
13346
13461
  return output;
13347
13462
  };
13348
13463
 
13349
- exports.wrapOutput = (input, state = {}, options = {}) => {
13464
+ exports$1.wrapOutput = (input, state = {}, options = {}) => {
13350
13465
  const prepend = options.contains ? '' : '^';
13351
13466
  const append = options.contains ? '' : '$';
13352
13467
 
@@ -16203,11 +16318,11 @@ var hasRequiredFs$2;
16203
16318
  function requireFs$2 () {
16204
16319
  if (hasRequiredFs$2) return fs$2;
16205
16320
  hasRequiredFs$2 = 1;
16206
- (function (exports) {
16207
- Object.defineProperty(exports, "__esModule", { value: true });
16208
- exports.createFileSystemAdapter = exports.FILE_SYSTEM_ADAPTER = void 0;
16321
+ (function (exports$1) {
16322
+ Object.defineProperty(exports$1, "__esModule", { value: true });
16323
+ exports$1.createFileSystemAdapter = exports$1.FILE_SYSTEM_ADAPTER = void 0;
16209
16324
  const fs = require$$0;
16210
- exports.FILE_SYSTEM_ADAPTER = {
16325
+ exports$1.FILE_SYSTEM_ADAPTER = {
16211
16326
  lstat: fs.lstat,
16212
16327
  stat: fs.stat,
16213
16328
  lstatSync: fs.lstatSync,
@@ -16215,11 +16330,11 @@ function requireFs$2 () {
16215
16330
  };
16216
16331
  function createFileSystemAdapter(fsMethods) {
16217
16332
  if (fsMethods === undefined) {
16218
- return exports.FILE_SYSTEM_ADAPTER;
16333
+ return exports$1.FILE_SYSTEM_ADAPTER;
16219
16334
  }
16220
- return Object.assign(Object.assign({}, exports.FILE_SYSTEM_ADAPTER), fsMethods);
16335
+ return Object.assign(Object.assign({}, exports$1.FILE_SYSTEM_ADAPTER), fsMethods);
16221
16336
  }
16222
- exports.createFileSystemAdapter = createFileSystemAdapter;
16337
+ exports$1.createFileSystemAdapter = createFileSystemAdapter;
16223
16338
  } (fs$2));
16224
16339
  return fs$2;
16225
16340
  }
@@ -16633,11 +16748,11 @@ var hasRequiredFs;
16633
16748
  function requireFs () {
16634
16749
  if (hasRequiredFs) return fs;
16635
16750
  hasRequiredFs = 1;
16636
- (function (exports) {
16637
- Object.defineProperty(exports, "__esModule", { value: true });
16638
- exports.createFileSystemAdapter = exports.FILE_SYSTEM_ADAPTER = void 0;
16751
+ (function (exports$1) {
16752
+ Object.defineProperty(exports$1, "__esModule", { value: true });
16753
+ exports$1.createFileSystemAdapter = exports$1.FILE_SYSTEM_ADAPTER = void 0;
16639
16754
  const fs = require$$0;
16640
- exports.FILE_SYSTEM_ADAPTER = {
16755
+ exports$1.FILE_SYSTEM_ADAPTER = {
16641
16756
  lstat: fs.lstat,
16642
16757
  stat: fs.stat,
16643
16758
  lstatSync: fs.lstatSync,
@@ -16647,11 +16762,11 @@ function requireFs () {
16647
16762
  };
16648
16763
  function createFileSystemAdapter(fsMethods) {
16649
16764
  if (fsMethods === undefined) {
16650
- return exports.FILE_SYSTEM_ADAPTER;
16765
+ return exports$1.FILE_SYSTEM_ADAPTER;
16651
16766
  }
16652
- return Object.assign(Object.assign({}, exports.FILE_SYSTEM_ADAPTER), fsMethods);
16767
+ return Object.assign(Object.assign({}, exports$1.FILE_SYSTEM_ADAPTER), fsMethods);
16653
16768
  }
16654
- exports.createFileSystemAdapter = createFileSystemAdapter;
16769
+ exports$1.createFileSystemAdapter = createFileSystemAdapter;
16655
16770
  } (fs));
16656
16771
  return fs;
16657
16772
  }
@@ -18155,9 +18270,9 @@ var hasRequiredSettings;
18155
18270
  function requireSettings () {
18156
18271
  if (hasRequiredSettings) return settings;
18157
18272
  hasRequiredSettings = 1;
18158
- (function (exports) {
18159
- Object.defineProperty(exports, "__esModule", { value: true });
18160
- exports.DEFAULT_FILE_SYSTEM_ADAPTER = void 0;
18273
+ (function (exports$1) {
18274
+ Object.defineProperty(exports$1, "__esModule", { value: true });
18275
+ exports$1.DEFAULT_FILE_SYSTEM_ADAPTER = void 0;
18161
18276
  const fs = require$$0;
18162
18277
  const os = os$2;
18163
18278
  /**
@@ -18165,7 +18280,7 @@ function requireSettings () {
18165
18280
  * https://github.com/nodejs/node/blob/7faeddf23a98c53896f8b574a6e66589e8fb1eb8/lib/os.js#L106-L107
18166
18281
  */
18167
18282
  const CPU_COUNT = Math.max(os.cpus().length, 1);
18168
- exports.DEFAULT_FILE_SYSTEM_ADAPTER = {
18283
+ exports$1.DEFAULT_FILE_SYSTEM_ADAPTER = {
18169
18284
  lstat: fs.lstat,
18170
18285
  lstatSync: fs.lstatSync,
18171
18286
  stat: fs.stat,
@@ -18210,10 +18325,10 @@ function requireSettings () {
18210
18325
  return option === undefined ? value : option;
18211
18326
  }
18212
18327
  _getFileSystemMethods(methods = {}) {
18213
- return Object.assign(Object.assign({}, exports.DEFAULT_FILE_SYSTEM_ADAPTER), methods);
18328
+ return Object.assign(Object.assign({}, exports$1.DEFAULT_FILE_SYSTEM_ADAPTER), methods);
18214
18329
  }
18215
18330
  }
18216
- exports.default = Settings;
18331
+ exports$1.default = Settings;
18217
18332
  } (settings));
18218
18333
  return settings;
18219
18334
  }
@@ -20080,7 +20195,7 @@ var hasRequiredRe;
20080
20195
  function requireRe () {
20081
20196
  if (hasRequiredRe) return re.exports;
20082
20197
  hasRequiredRe = 1;
20083
- (function (module, exports) {
20198
+ (function (module, exports$1) {
20084
20199
 
20085
20200
  const {
20086
20201
  MAX_SAFE_COMPONENT_LENGTH,
@@ -20088,14 +20203,14 @@ function requireRe () {
20088
20203
  MAX_LENGTH,
20089
20204
  } = requireConstants$1();
20090
20205
  const debug = requireDebug();
20091
- exports = module.exports = {};
20206
+ exports$1 = module.exports = {};
20092
20207
 
20093
20208
  // The actual regexps go on exports.re
20094
- const re = exports.re = [];
20095
- const safeRe = exports.safeRe = [];
20096
- const src = exports.src = [];
20097
- const safeSrc = exports.safeSrc = [];
20098
- const t = exports.t = {};
20209
+ const re = exports$1.re = [];
20210
+ const safeRe = exports$1.safeRe = [];
20211
+ const src = exports$1.src = [];
20212
+ const safeSrc = exports$1.safeSrc = [];
20213
+ const t = exports$1.t = {};
20099
20214
  let R = 0;
20100
20215
 
20101
20216
  const LETTERDASHNUMBER = '[a-zA-Z0-9-]';
@@ -20259,7 +20374,7 @@ function requireRe () {
20259
20374
  createToken('LONETILDE', '(?:~>?)');
20260
20375
 
20261
20376
  createToken('TILDETRIM', `(\\s*)${src[t.LONETILDE]}\\s+`, true);
20262
- exports.tildeTrimReplace = '$1~';
20377
+ exports$1.tildeTrimReplace = '$1~';
20263
20378
 
20264
20379
  createToken('TILDE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`);
20265
20380
  createToken('TILDELOOSE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`);
@@ -20269,7 +20384,7 @@ function requireRe () {
20269
20384
  createToken('LONECARET', '(?:\\^)');
20270
20385
 
20271
20386
  createToken('CARETTRIM', `(\\s*)${src[t.LONECARET]}\\s+`, true);
20272
- exports.caretTrimReplace = '$1^';
20387
+ exports$1.caretTrimReplace = '$1^';
20273
20388
 
20274
20389
  createToken('CARET', `^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`);
20275
20390
  createToken('CARETLOOSE', `^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`);
@@ -20282,7 +20397,7 @@ function requireRe () {
20282
20397
  // it modifies, so that `> 1.2.3` ==> `>1.2.3`
20283
20398
  createToken('COMPARATORTRIM', `(\\s*)${src[t.GTLT]
20284
20399
  }\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`, true);
20285
- exports.comparatorTrimReplace = '$1$2$3';
20400
+ exports$1.comparatorTrimReplace = '$1$2$3';
20286
20401
 
20287
20402
  // Something like `1.2.3 - 1.2.4`
20288
20403
  // Note that these all use the loose form, because they'll be
@@ -20341,6 +20456,10 @@ function requireIdentifiers () {
20341
20456
 
20342
20457
  const numeric = /^[0-9]+$/;
20343
20458
  const compareIdentifiers = (a, b) => {
20459
+ if (typeof a === 'number' && typeof b === 'number') {
20460
+ return a === b ? 0 : a < b ? -1 : 1
20461
+ }
20462
+
20344
20463
  const anum = numeric.test(a);
20345
20464
  const bnum = numeric.test(b);
20346
20465
 
@@ -20483,11 +20602,25 @@ function requireSemver$1 () {
20483
20602
  other = new SemVer(other, this.options);
20484
20603
  }
20485
20604
 
20486
- return (
20487
- compareIdentifiers(this.major, other.major) ||
20488
- compareIdentifiers(this.minor, other.minor) ||
20489
- compareIdentifiers(this.patch, other.patch)
20490
- )
20605
+ if (this.major < other.major) {
20606
+ return -1
20607
+ }
20608
+ if (this.major > other.major) {
20609
+ return 1
20610
+ }
20611
+ if (this.minor < other.minor) {
20612
+ return -1
20613
+ }
20614
+ if (this.minor > other.minor) {
20615
+ return 1
20616
+ }
20617
+ if (this.patch < other.patch) {
20618
+ return -1
20619
+ }
20620
+ if (this.patch > other.patch) {
20621
+ return 1
20622
+ }
20623
+ return 0
20491
20624
  }
20492
20625
 
20493
20626
  comparePre (other) {
@@ -21508,6 +21641,7 @@ function requireRange () {
21508
21641
  // already replaced the hyphen ranges
21509
21642
  // turn into a set of JUST comparators.
21510
21643
  const parseComparator = (comp, options) => {
21644
+ comp = comp.replace(re[t.BUILD], '');
21511
21645
  debug('comp', comp, options);
21512
21646
  comp = replaceCarets(comp, options);
21513
21647
  debug('caret', comp);
@@ -23053,7 +23187,7 @@ function addModuleMetadata() {
23053
23187
  transform: {
23054
23188
  async handler(code) {
23055
23189
  const pkg = JSON.parse(await readFile("./package.json", "utf8"));
23056
- const magicString = new MagicString$1(code);
23190
+ const magicString = new MagicString(code);
23057
23191
  magicString.replace(
23058
23192
  new RegExp(
23059
23193
  "moduleMetadata:\\s*Constants.MODULE_METADATA_PLACEHOLDER",
@@ -23070,1280 +23204,6 @@ function addModuleMetadata() {
23070
23204
  };
23071
23205
  }
23072
23206
 
23073
- class BitSet {
23074
- constructor(arg) {
23075
- this.bits = arg instanceof BitSet ? arg.bits.slice() : [];
23076
- }
23077
-
23078
- add(n) {
23079
- this.bits[n >> 5] |= 1 << (n & 31);
23080
- }
23081
-
23082
- has(n) {
23083
- return !!(this.bits[n >> 5] & (1 << (n & 31)));
23084
- }
23085
- }
23086
-
23087
- class Chunk {
23088
- constructor(start, end, content) {
23089
- this.start = start;
23090
- this.end = end;
23091
- this.original = content;
23092
-
23093
- this.intro = '';
23094
- this.outro = '';
23095
-
23096
- this.content = content;
23097
- this.storeName = false;
23098
- this.edited = false;
23099
-
23100
- {
23101
- this.previous = null;
23102
- this.next = null;
23103
- }
23104
- }
23105
-
23106
- appendLeft(content) {
23107
- this.outro += content;
23108
- }
23109
-
23110
- appendRight(content) {
23111
- this.intro = this.intro + content;
23112
- }
23113
-
23114
- clone() {
23115
- const chunk = new Chunk(this.start, this.end, this.original);
23116
-
23117
- chunk.intro = this.intro;
23118
- chunk.outro = this.outro;
23119
- chunk.content = this.content;
23120
- chunk.storeName = this.storeName;
23121
- chunk.edited = this.edited;
23122
-
23123
- return chunk;
23124
- }
23125
-
23126
- contains(index) {
23127
- return this.start < index && index < this.end;
23128
- }
23129
-
23130
- eachNext(fn) {
23131
- let chunk = this;
23132
- while (chunk) {
23133
- fn(chunk);
23134
- chunk = chunk.next;
23135
- }
23136
- }
23137
-
23138
- eachPrevious(fn) {
23139
- let chunk = this;
23140
- while (chunk) {
23141
- fn(chunk);
23142
- chunk = chunk.previous;
23143
- }
23144
- }
23145
-
23146
- edit(content, storeName, contentOnly) {
23147
- this.content = content;
23148
- if (!contentOnly) {
23149
- this.intro = '';
23150
- this.outro = '';
23151
- }
23152
- this.storeName = storeName;
23153
-
23154
- this.edited = true;
23155
-
23156
- return this;
23157
- }
23158
-
23159
- prependLeft(content) {
23160
- this.outro = content + this.outro;
23161
- }
23162
-
23163
- prependRight(content) {
23164
- this.intro = content + this.intro;
23165
- }
23166
-
23167
- reset() {
23168
- this.intro = '';
23169
- this.outro = '';
23170
- if (this.edited) {
23171
- this.content = this.original;
23172
- this.storeName = false;
23173
- this.edited = false;
23174
- }
23175
- }
23176
-
23177
- split(index) {
23178
- const sliceIndex = index - this.start;
23179
-
23180
- const originalBefore = this.original.slice(0, sliceIndex);
23181
- const originalAfter = this.original.slice(sliceIndex);
23182
-
23183
- this.original = originalBefore;
23184
-
23185
- const newChunk = new Chunk(index, this.end, originalAfter);
23186
- newChunk.outro = this.outro;
23187
- this.outro = '';
23188
-
23189
- this.end = index;
23190
-
23191
- if (this.edited) {
23192
- // after split we should save the edit content record into the correct chunk
23193
- // to make sure sourcemap correct
23194
- // For example:
23195
- // ' test'.trim()
23196
- // split -> ' ' + 'test'
23197
- // ✔️ edit -> '' + 'test'
23198
- // ✖️ edit -> 'test' + ''
23199
- // TODO is this block necessary?...
23200
- newChunk.edit('', false);
23201
- this.content = '';
23202
- } else {
23203
- this.content = originalBefore;
23204
- }
23205
-
23206
- newChunk.next = this.next;
23207
- if (newChunk.next) newChunk.next.previous = newChunk;
23208
- newChunk.previous = this;
23209
- this.next = newChunk;
23210
-
23211
- return newChunk;
23212
- }
23213
-
23214
- toString() {
23215
- return this.intro + this.content + this.outro;
23216
- }
23217
-
23218
- trimEnd(rx) {
23219
- this.outro = this.outro.replace(rx, '');
23220
- if (this.outro.length) return true;
23221
-
23222
- const trimmed = this.content.replace(rx, '');
23223
-
23224
- if (trimmed.length) {
23225
- if (trimmed !== this.content) {
23226
- this.split(this.start + trimmed.length).edit('', undefined, true);
23227
- if (this.edited) {
23228
- // save the change, if it has been edited
23229
- this.edit(trimmed, this.storeName, true);
23230
- }
23231
- }
23232
- return true;
23233
- } else {
23234
- this.edit('', undefined, true);
23235
-
23236
- this.intro = this.intro.replace(rx, '');
23237
- if (this.intro.length) return true;
23238
- }
23239
- }
23240
-
23241
- trimStart(rx) {
23242
- this.intro = this.intro.replace(rx, '');
23243
- if (this.intro.length) return true;
23244
-
23245
- const trimmed = this.content.replace(rx, '');
23246
-
23247
- if (trimmed.length) {
23248
- if (trimmed !== this.content) {
23249
- const newChunk = this.split(this.end - trimmed.length);
23250
- if (this.edited) {
23251
- // save the change, if it has been edited
23252
- newChunk.edit(trimmed, this.storeName, true);
23253
- }
23254
- this.edit('', undefined, true);
23255
- }
23256
- return true;
23257
- } else {
23258
- this.edit('', undefined, true);
23259
-
23260
- this.outro = this.outro.replace(rx, '');
23261
- if (this.outro.length) return true;
23262
- }
23263
- }
23264
- }
23265
-
23266
- function getBtoa() {
23267
- if (typeof globalThis !== 'undefined' && typeof globalThis.btoa === 'function') {
23268
- return (str) => globalThis.btoa(unescape(encodeURIComponent(str)));
23269
- } else if (typeof Buffer === 'function') {
23270
- return (str) => Buffer.from(str, 'utf-8').toString('base64');
23271
- } else {
23272
- return () => {
23273
- throw new Error('Unsupported environment: `window.btoa` or `Buffer` should be supported.');
23274
- };
23275
- }
23276
- }
23277
-
23278
- const btoa = /*#__PURE__*/ getBtoa();
23279
-
23280
- class SourceMap {
23281
- constructor(properties) {
23282
- this.version = 3;
23283
- this.file = properties.file;
23284
- this.sources = properties.sources;
23285
- this.sourcesContent = properties.sourcesContent;
23286
- this.names = properties.names;
23287
- this.mappings = encode(properties.mappings);
23288
- if (typeof properties.x_google_ignoreList !== 'undefined') {
23289
- this.x_google_ignoreList = properties.x_google_ignoreList;
23290
- }
23291
- if (typeof properties.debugId !== 'undefined') {
23292
- this.debugId = properties.debugId;
23293
- }
23294
- }
23295
-
23296
- toString() {
23297
- return JSON.stringify(this);
23298
- }
23299
-
23300
- toUrl() {
23301
- return 'data:application/json;charset=utf-8;base64,' + btoa(this.toString());
23302
- }
23303
- }
23304
-
23305
- function guessIndent(code) {
23306
- const lines = code.split('\n');
23307
-
23308
- const tabbed = lines.filter((line) => /^\t+/.test(line));
23309
- const spaced = lines.filter((line) => /^ {2,}/.test(line));
23310
-
23311
- if (tabbed.length === 0 && spaced.length === 0) {
23312
- return null;
23313
- }
23314
-
23315
- // More lines tabbed than spaced? Assume tabs, and
23316
- // default to tabs in the case of a tie (or nothing
23317
- // to go on)
23318
- if (tabbed.length >= spaced.length) {
23319
- return '\t';
23320
- }
23321
-
23322
- // Otherwise, we need to guess the multiple
23323
- const min = spaced.reduce((previous, current) => {
23324
- const numSpaces = /^ +/.exec(current)[0].length;
23325
- return Math.min(numSpaces, previous);
23326
- }, Infinity);
23327
-
23328
- return new Array(min + 1).join(' ');
23329
- }
23330
-
23331
- function getRelativePath(from, to) {
23332
- const fromParts = from.split(/[/\\]/);
23333
- const toParts = to.split(/[/\\]/);
23334
-
23335
- fromParts.pop(); // get dirname
23336
-
23337
- while (fromParts[0] === toParts[0]) {
23338
- fromParts.shift();
23339
- toParts.shift();
23340
- }
23341
-
23342
- if (fromParts.length) {
23343
- let i = fromParts.length;
23344
- while (i--) fromParts[i] = '..';
23345
- }
23346
-
23347
- return fromParts.concat(toParts).join('/');
23348
- }
23349
-
23350
- const toString = Object.prototype.toString;
23351
-
23352
- function isObject(thing) {
23353
- return toString.call(thing) === '[object Object]';
23354
- }
23355
-
23356
- function getLocator(source) {
23357
- const originalLines = source.split('\n');
23358
- const lineOffsets = [];
23359
-
23360
- for (let i = 0, pos = 0; i < originalLines.length; i++) {
23361
- lineOffsets.push(pos);
23362
- pos += originalLines[i].length + 1;
23363
- }
23364
-
23365
- return function locate(index) {
23366
- let i = 0;
23367
- let j = lineOffsets.length;
23368
- while (i < j) {
23369
- const m = (i + j) >> 1;
23370
- if (index < lineOffsets[m]) {
23371
- j = m;
23372
- } else {
23373
- i = m + 1;
23374
- }
23375
- }
23376
- const line = i - 1;
23377
- const column = index - lineOffsets[line];
23378
- return { line, column };
23379
- };
23380
- }
23381
-
23382
- const wordRegex = /\w/;
23383
-
23384
- class Mappings {
23385
- constructor(hires) {
23386
- this.hires = hires;
23387
- this.generatedCodeLine = 0;
23388
- this.generatedCodeColumn = 0;
23389
- this.raw = [];
23390
- this.rawSegments = this.raw[this.generatedCodeLine] = [];
23391
- this.pending = null;
23392
- }
23393
-
23394
- addEdit(sourceIndex, content, loc, nameIndex) {
23395
- if (content.length) {
23396
- const contentLengthMinusOne = content.length - 1;
23397
- let contentLineEnd = content.indexOf('\n', 0);
23398
- let previousContentLineEnd = -1;
23399
- // Loop through each line in the content and add a segment, but stop if the last line is empty,
23400
- // else code afterwards would fill one line too many
23401
- while (contentLineEnd >= 0 && contentLengthMinusOne > contentLineEnd) {
23402
- const segment = [this.generatedCodeColumn, sourceIndex, loc.line, loc.column];
23403
- if (nameIndex >= 0) {
23404
- segment.push(nameIndex);
23405
- }
23406
- this.rawSegments.push(segment);
23407
-
23408
- this.generatedCodeLine += 1;
23409
- this.raw[this.generatedCodeLine] = this.rawSegments = [];
23410
- this.generatedCodeColumn = 0;
23411
-
23412
- previousContentLineEnd = contentLineEnd;
23413
- contentLineEnd = content.indexOf('\n', contentLineEnd + 1);
23414
- }
23415
-
23416
- const segment = [this.generatedCodeColumn, sourceIndex, loc.line, loc.column];
23417
- if (nameIndex >= 0) {
23418
- segment.push(nameIndex);
23419
- }
23420
- this.rawSegments.push(segment);
23421
-
23422
- this.advance(content.slice(previousContentLineEnd + 1));
23423
- } else if (this.pending) {
23424
- this.rawSegments.push(this.pending);
23425
- this.advance(content);
23426
- }
23427
-
23428
- this.pending = null;
23429
- }
23430
-
23431
- addUneditedChunk(sourceIndex, chunk, original, loc, sourcemapLocations) {
23432
- let originalCharIndex = chunk.start;
23433
- let first = true;
23434
- // when iterating each char, check if it's in a word boundary
23435
- let charInHiresBoundary = false;
23436
-
23437
- while (originalCharIndex < chunk.end) {
23438
- if (original[originalCharIndex] === '\n') {
23439
- loc.line += 1;
23440
- loc.column = 0;
23441
- this.generatedCodeLine += 1;
23442
- this.raw[this.generatedCodeLine] = this.rawSegments = [];
23443
- this.generatedCodeColumn = 0;
23444
- first = true;
23445
- charInHiresBoundary = false;
23446
- } else {
23447
- if (this.hires || first || sourcemapLocations.has(originalCharIndex)) {
23448
- const segment = [this.generatedCodeColumn, sourceIndex, loc.line, loc.column];
23449
-
23450
- if (this.hires === 'boundary') {
23451
- // in hires "boundary", group segments per word boundary than per char
23452
- if (wordRegex.test(original[originalCharIndex])) {
23453
- // for first char in the boundary found, start the boundary by pushing a segment
23454
- if (!charInHiresBoundary) {
23455
- this.rawSegments.push(segment);
23456
- charInHiresBoundary = true;
23457
- }
23458
- } else {
23459
- // for non-word char, end the boundary by pushing a segment
23460
- this.rawSegments.push(segment);
23461
- charInHiresBoundary = false;
23462
- }
23463
- } else {
23464
- this.rawSegments.push(segment);
23465
- }
23466
- }
23467
-
23468
- loc.column += 1;
23469
- this.generatedCodeColumn += 1;
23470
- first = false;
23471
- }
23472
-
23473
- originalCharIndex += 1;
23474
- }
23475
-
23476
- this.pending = null;
23477
- }
23478
-
23479
- advance(str) {
23480
- if (!str) return;
23481
-
23482
- const lines = str.split('\n');
23483
-
23484
- if (lines.length > 1) {
23485
- for (let i = 0; i < lines.length - 1; i++) {
23486
- this.generatedCodeLine++;
23487
- this.raw[this.generatedCodeLine] = this.rawSegments = [];
23488
- }
23489
- this.generatedCodeColumn = 0;
23490
- }
23491
-
23492
- this.generatedCodeColumn += lines[lines.length - 1].length;
23493
- }
23494
- }
23495
-
23496
- const n = '\n';
23497
-
23498
- const warned = {
23499
- insertLeft: false,
23500
- insertRight: false,
23501
- storeName: false,
23502
- };
23503
-
23504
- class MagicString {
23505
- constructor(string, options = {}) {
23506
- const chunk = new Chunk(0, string.length, string);
23507
-
23508
- Object.defineProperties(this, {
23509
- original: { writable: true, value: string },
23510
- outro: { writable: true, value: '' },
23511
- intro: { writable: true, value: '' },
23512
- firstChunk: { writable: true, value: chunk },
23513
- lastChunk: { writable: true, value: chunk },
23514
- lastSearchedChunk: { writable: true, value: chunk },
23515
- byStart: { writable: true, value: {} },
23516
- byEnd: { writable: true, value: {} },
23517
- filename: { writable: true, value: options.filename },
23518
- indentExclusionRanges: { writable: true, value: options.indentExclusionRanges },
23519
- sourcemapLocations: { writable: true, value: new BitSet() },
23520
- storedNames: { writable: true, value: {} },
23521
- indentStr: { writable: true, value: undefined },
23522
- ignoreList: { writable: true, value: options.ignoreList },
23523
- offset: { writable: true, value: options.offset || 0 },
23524
- });
23525
-
23526
- this.byStart[0] = chunk;
23527
- this.byEnd[string.length] = chunk;
23528
- }
23529
-
23530
- addSourcemapLocation(char) {
23531
- this.sourcemapLocations.add(char);
23532
- }
23533
-
23534
- append(content) {
23535
- if (typeof content !== 'string') throw new TypeError('outro content must be a string');
23536
-
23537
- this.outro += content;
23538
- return this;
23539
- }
23540
-
23541
- appendLeft(index, content) {
23542
- index = index + this.offset;
23543
-
23544
- if (typeof content !== 'string') throw new TypeError('inserted content must be a string');
23545
-
23546
- this._split(index);
23547
-
23548
- const chunk = this.byEnd[index];
23549
-
23550
- if (chunk) {
23551
- chunk.appendLeft(content);
23552
- } else {
23553
- this.intro += content;
23554
- }
23555
- return this;
23556
- }
23557
-
23558
- appendRight(index, content) {
23559
- index = index + this.offset;
23560
-
23561
- if (typeof content !== 'string') throw new TypeError('inserted content must be a string');
23562
-
23563
- this._split(index);
23564
-
23565
- const chunk = this.byStart[index];
23566
-
23567
- if (chunk) {
23568
- chunk.appendRight(content);
23569
- } else {
23570
- this.outro += content;
23571
- }
23572
- return this;
23573
- }
23574
-
23575
- clone() {
23576
- const cloned = new MagicString(this.original, { filename: this.filename, offset: this.offset });
23577
-
23578
- let originalChunk = this.firstChunk;
23579
- let clonedChunk = (cloned.firstChunk = cloned.lastSearchedChunk = originalChunk.clone());
23580
-
23581
- while (originalChunk) {
23582
- cloned.byStart[clonedChunk.start] = clonedChunk;
23583
- cloned.byEnd[clonedChunk.end] = clonedChunk;
23584
-
23585
- const nextOriginalChunk = originalChunk.next;
23586
- const nextClonedChunk = nextOriginalChunk && nextOriginalChunk.clone();
23587
-
23588
- if (nextClonedChunk) {
23589
- clonedChunk.next = nextClonedChunk;
23590
- nextClonedChunk.previous = clonedChunk;
23591
-
23592
- clonedChunk = nextClonedChunk;
23593
- }
23594
-
23595
- originalChunk = nextOriginalChunk;
23596
- }
23597
-
23598
- cloned.lastChunk = clonedChunk;
23599
-
23600
- if (this.indentExclusionRanges) {
23601
- cloned.indentExclusionRanges = this.indentExclusionRanges.slice();
23602
- }
23603
-
23604
- cloned.sourcemapLocations = new BitSet(this.sourcemapLocations);
23605
-
23606
- cloned.intro = this.intro;
23607
- cloned.outro = this.outro;
23608
-
23609
- return cloned;
23610
- }
23611
-
23612
- generateDecodedMap(options) {
23613
- options = options || {};
23614
-
23615
- const sourceIndex = 0;
23616
- const names = Object.keys(this.storedNames);
23617
- const mappings = new Mappings(options.hires);
23618
-
23619
- const locate = getLocator(this.original);
23620
-
23621
- if (this.intro) {
23622
- mappings.advance(this.intro);
23623
- }
23624
-
23625
- this.firstChunk.eachNext((chunk) => {
23626
- const loc = locate(chunk.start);
23627
-
23628
- if (chunk.intro.length) mappings.advance(chunk.intro);
23629
-
23630
- if (chunk.edited) {
23631
- mappings.addEdit(
23632
- sourceIndex,
23633
- chunk.content,
23634
- loc,
23635
- chunk.storeName ? names.indexOf(chunk.original) : -1,
23636
- );
23637
- } else {
23638
- mappings.addUneditedChunk(sourceIndex, chunk, this.original, loc, this.sourcemapLocations);
23639
- }
23640
-
23641
- if (chunk.outro.length) mappings.advance(chunk.outro);
23642
- });
23643
-
23644
- return {
23645
- file: options.file ? options.file.split(/[/\\]/).pop() : undefined,
23646
- sources: [
23647
- options.source ? getRelativePath(options.file || '', options.source) : options.file || '',
23648
- ],
23649
- sourcesContent: options.includeContent ? [this.original] : undefined,
23650
- names,
23651
- mappings: mappings.raw,
23652
- x_google_ignoreList: this.ignoreList ? [sourceIndex] : undefined,
23653
- };
23654
- }
23655
-
23656
- generateMap(options) {
23657
- return new SourceMap(this.generateDecodedMap(options));
23658
- }
23659
-
23660
- _ensureindentStr() {
23661
- if (this.indentStr === undefined) {
23662
- this.indentStr = guessIndent(this.original);
23663
- }
23664
- }
23665
-
23666
- _getRawIndentString() {
23667
- this._ensureindentStr();
23668
- return this.indentStr;
23669
- }
23670
-
23671
- getIndentString() {
23672
- this._ensureindentStr();
23673
- return this.indentStr === null ? '\t' : this.indentStr;
23674
- }
23675
-
23676
- indent(indentStr, options) {
23677
- const pattern = /^[^\r\n]/gm;
23678
-
23679
- if (isObject(indentStr)) {
23680
- options = indentStr;
23681
- indentStr = undefined;
23682
- }
23683
-
23684
- if (indentStr === undefined) {
23685
- this._ensureindentStr();
23686
- indentStr = this.indentStr || '\t';
23687
- }
23688
-
23689
- if (indentStr === '') return this; // noop
23690
-
23691
- options = options || {};
23692
-
23693
- // Process exclusion ranges
23694
- const isExcluded = {};
23695
-
23696
- if (options.exclude) {
23697
- const exclusions =
23698
- typeof options.exclude[0] === 'number' ? [options.exclude] : options.exclude;
23699
- exclusions.forEach((exclusion) => {
23700
- for (let i = exclusion[0]; i < exclusion[1]; i += 1) {
23701
- isExcluded[i] = true;
23702
- }
23703
- });
23704
- }
23705
-
23706
- let shouldIndentNextCharacter = options.indentStart !== false;
23707
- const replacer = (match) => {
23708
- if (shouldIndentNextCharacter) return `${indentStr}${match}`;
23709
- shouldIndentNextCharacter = true;
23710
- return match;
23711
- };
23712
-
23713
- this.intro = this.intro.replace(pattern, replacer);
23714
-
23715
- let charIndex = 0;
23716
- let chunk = this.firstChunk;
23717
-
23718
- while (chunk) {
23719
- const end = chunk.end;
23720
-
23721
- if (chunk.edited) {
23722
- if (!isExcluded[charIndex]) {
23723
- chunk.content = chunk.content.replace(pattern, replacer);
23724
-
23725
- if (chunk.content.length) {
23726
- shouldIndentNextCharacter = chunk.content[chunk.content.length - 1] === '\n';
23727
- }
23728
- }
23729
- } else {
23730
- charIndex = chunk.start;
23731
-
23732
- while (charIndex < end) {
23733
- if (!isExcluded[charIndex]) {
23734
- const char = this.original[charIndex];
23735
-
23736
- if (char === '\n') {
23737
- shouldIndentNextCharacter = true;
23738
- } else if (char !== '\r' && shouldIndentNextCharacter) {
23739
- shouldIndentNextCharacter = false;
23740
-
23741
- if (charIndex === chunk.start) {
23742
- chunk.prependRight(indentStr);
23743
- } else {
23744
- this._splitChunk(chunk, charIndex);
23745
- chunk = chunk.next;
23746
- chunk.prependRight(indentStr);
23747
- }
23748
- }
23749
- }
23750
-
23751
- charIndex += 1;
23752
- }
23753
- }
23754
-
23755
- charIndex = chunk.end;
23756
- chunk = chunk.next;
23757
- }
23758
-
23759
- this.outro = this.outro.replace(pattern, replacer);
23760
-
23761
- return this;
23762
- }
23763
-
23764
- insert() {
23765
- throw new Error(
23766
- 'magicString.insert(...) is deprecated. Use prependRight(...) or appendLeft(...)',
23767
- );
23768
- }
23769
-
23770
- insertLeft(index, content) {
23771
- if (!warned.insertLeft) {
23772
- console.warn(
23773
- 'magicString.insertLeft(...) is deprecated. Use magicString.appendLeft(...) instead',
23774
- );
23775
- warned.insertLeft = true;
23776
- }
23777
-
23778
- return this.appendLeft(index, content);
23779
- }
23780
-
23781
- insertRight(index, content) {
23782
- if (!warned.insertRight) {
23783
- console.warn(
23784
- 'magicString.insertRight(...) is deprecated. Use magicString.prependRight(...) instead',
23785
- );
23786
- warned.insertRight = true;
23787
- }
23788
-
23789
- return this.prependRight(index, content);
23790
- }
23791
-
23792
- move(start, end, index) {
23793
- start = start + this.offset;
23794
- end = end + this.offset;
23795
- index = index + this.offset;
23796
-
23797
- if (index >= start && index <= end) throw new Error('Cannot move a selection inside itself');
23798
-
23799
- this._split(start);
23800
- this._split(end);
23801
- this._split(index);
23802
-
23803
- const first = this.byStart[start];
23804
- const last = this.byEnd[end];
23805
-
23806
- const oldLeft = first.previous;
23807
- const oldRight = last.next;
23808
-
23809
- const newRight = this.byStart[index];
23810
- if (!newRight && last === this.lastChunk) return this;
23811
- const newLeft = newRight ? newRight.previous : this.lastChunk;
23812
-
23813
- if (oldLeft) oldLeft.next = oldRight;
23814
- if (oldRight) oldRight.previous = oldLeft;
23815
-
23816
- if (newLeft) newLeft.next = first;
23817
- if (newRight) newRight.previous = last;
23818
-
23819
- if (!first.previous) this.firstChunk = last.next;
23820
- if (!last.next) {
23821
- this.lastChunk = first.previous;
23822
- this.lastChunk.next = null;
23823
- }
23824
-
23825
- first.previous = newLeft;
23826
- last.next = newRight || null;
23827
-
23828
- if (!newLeft) this.firstChunk = first;
23829
- if (!newRight) this.lastChunk = last;
23830
- return this;
23831
- }
23832
-
23833
- overwrite(start, end, content, options) {
23834
- options = options || {};
23835
- return this.update(start, end, content, { ...options, overwrite: !options.contentOnly });
23836
- }
23837
-
23838
- update(start, end, content, options) {
23839
- start = start + this.offset;
23840
- end = end + this.offset;
23841
-
23842
- if (typeof content !== 'string') throw new TypeError('replacement content must be a string');
23843
-
23844
- if (this.original.length !== 0) {
23845
- while (start < 0) start += this.original.length;
23846
- while (end < 0) end += this.original.length;
23847
- }
23848
-
23849
- if (end > this.original.length) throw new Error('end is out of bounds');
23850
- if (start === end)
23851
- throw new Error(
23852
- 'Cannot overwrite a zero-length range – use appendLeft or prependRight instead',
23853
- );
23854
-
23855
- this._split(start);
23856
- this._split(end);
23857
-
23858
- if (options === true) {
23859
- if (!warned.storeName) {
23860
- console.warn(
23861
- 'The final argument to magicString.overwrite(...) should be an options object. See https://github.com/rich-harris/magic-string',
23862
- );
23863
- warned.storeName = true;
23864
- }
23865
-
23866
- options = { storeName: true };
23867
- }
23868
- const storeName = options !== undefined ? options.storeName : false;
23869
- const overwrite = options !== undefined ? options.overwrite : false;
23870
-
23871
- if (storeName) {
23872
- const original = this.original.slice(start, end);
23873
- Object.defineProperty(this.storedNames, original, {
23874
- writable: true,
23875
- value: true,
23876
- enumerable: true,
23877
- });
23878
- }
23879
-
23880
- const first = this.byStart[start];
23881
- const last = this.byEnd[end];
23882
-
23883
- if (first) {
23884
- let chunk = first;
23885
- while (chunk !== last) {
23886
- if (chunk.next !== this.byStart[chunk.end]) {
23887
- throw new Error('Cannot overwrite across a split point');
23888
- }
23889
- chunk = chunk.next;
23890
- chunk.edit('', false);
23891
- }
23892
-
23893
- first.edit(content, storeName, !overwrite);
23894
- } else {
23895
- // must be inserting at the end
23896
- const newChunk = new Chunk(start, end, '').edit(content, storeName);
23897
-
23898
- // TODO last chunk in the array may not be the last chunk, if it's moved...
23899
- last.next = newChunk;
23900
- newChunk.previous = last;
23901
- }
23902
- return this;
23903
- }
23904
-
23905
- prepend(content) {
23906
- if (typeof content !== 'string') throw new TypeError('outro content must be a string');
23907
-
23908
- this.intro = content + this.intro;
23909
- return this;
23910
- }
23911
-
23912
- prependLeft(index, content) {
23913
- index = index + this.offset;
23914
-
23915
- if (typeof content !== 'string') throw new TypeError('inserted content must be a string');
23916
-
23917
- this._split(index);
23918
-
23919
- const chunk = this.byEnd[index];
23920
-
23921
- if (chunk) {
23922
- chunk.prependLeft(content);
23923
- } else {
23924
- this.intro = content + this.intro;
23925
- }
23926
- return this;
23927
- }
23928
-
23929
- prependRight(index, content) {
23930
- index = index + this.offset;
23931
-
23932
- if (typeof content !== 'string') throw new TypeError('inserted content must be a string');
23933
-
23934
- this._split(index);
23935
-
23936
- const chunk = this.byStart[index];
23937
-
23938
- if (chunk) {
23939
- chunk.prependRight(content);
23940
- } else {
23941
- this.outro = content + this.outro;
23942
- }
23943
- return this;
23944
- }
23945
-
23946
- remove(start, end) {
23947
- start = start + this.offset;
23948
- end = end + this.offset;
23949
-
23950
- if (this.original.length !== 0) {
23951
- while (start < 0) start += this.original.length;
23952
- while (end < 0) end += this.original.length;
23953
- }
23954
-
23955
- if (start === end) return this;
23956
-
23957
- if (start < 0 || end > this.original.length) throw new Error('Character is out of bounds');
23958
- if (start > end) throw new Error('end must be greater than start');
23959
-
23960
- this._split(start);
23961
- this._split(end);
23962
-
23963
- let chunk = this.byStart[start];
23964
-
23965
- while (chunk) {
23966
- chunk.intro = '';
23967
- chunk.outro = '';
23968
- chunk.edit('');
23969
-
23970
- chunk = end > chunk.end ? this.byStart[chunk.end] : null;
23971
- }
23972
- return this;
23973
- }
23974
-
23975
- reset(start, end) {
23976
- start = start + this.offset;
23977
- end = end + this.offset;
23978
-
23979
- if (this.original.length !== 0) {
23980
- while (start < 0) start += this.original.length;
23981
- while (end < 0) end += this.original.length;
23982
- }
23983
-
23984
- if (start === end) return this;
23985
-
23986
- if (start < 0 || end > this.original.length) throw new Error('Character is out of bounds');
23987
- if (start > end) throw new Error('end must be greater than start');
23988
-
23989
- this._split(start);
23990
- this._split(end);
23991
-
23992
- let chunk = this.byStart[start];
23993
-
23994
- while (chunk) {
23995
- chunk.reset();
23996
-
23997
- chunk = end > chunk.end ? this.byStart[chunk.end] : null;
23998
- }
23999
- return this;
24000
- }
24001
-
24002
- lastChar() {
24003
- if (this.outro.length) return this.outro[this.outro.length - 1];
24004
- let chunk = this.lastChunk;
24005
- do {
24006
- if (chunk.outro.length) return chunk.outro[chunk.outro.length - 1];
24007
- if (chunk.content.length) return chunk.content[chunk.content.length - 1];
24008
- if (chunk.intro.length) return chunk.intro[chunk.intro.length - 1];
24009
- } while ((chunk = chunk.previous));
24010
- if (this.intro.length) return this.intro[this.intro.length - 1];
24011
- return '';
24012
- }
24013
-
24014
- lastLine() {
24015
- let lineIndex = this.outro.lastIndexOf(n);
24016
- if (lineIndex !== -1) return this.outro.substr(lineIndex + 1);
24017
- let lineStr = this.outro;
24018
- let chunk = this.lastChunk;
24019
- do {
24020
- if (chunk.outro.length > 0) {
24021
- lineIndex = chunk.outro.lastIndexOf(n);
24022
- if (lineIndex !== -1) return chunk.outro.substr(lineIndex + 1) + lineStr;
24023
- lineStr = chunk.outro + lineStr;
24024
- }
24025
-
24026
- if (chunk.content.length > 0) {
24027
- lineIndex = chunk.content.lastIndexOf(n);
24028
- if (lineIndex !== -1) return chunk.content.substr(lineIndex + 1) + lineStr;
24029
- lineStr = chunk.content + lineStr;
24030
- }
24031
-
24032
- if (chunk.intro.length > 0) {
24033
- lineIndex = chunk.intro.lastIndexOf(n);
24034
- if (lineIndex !== -1) return chunk.intro.substr(lineIndex + 1) + lineStr;
24035
- lineStr = chunk.intro + lineStr;
24036
- }
24037
- } while ((chunk = chunk.previous));
24038
- lineIndex = this.intro.lastIndexOf(n);
24039
- if (lineIndex !== -1) return this.intro.substr(lineIndex + 1) + lineStr;
24040
- return this.intro + lineStr;
24041
- }
24042
-
24043
- slice(start = 0, end = this.original.length - this.offset) {
24044
- start = start + this.offset;
24045
- end = end + this.offset;
24046
-
24047
- if (this.original.length !== 0) {
24048
- while (start < 0) start += this.original.length;
24049
- while (end < 0) end += this.original.length;
24050
- }
24051
-
24052
- let result = '';
24053
-
24054
- // find start chunk
24055
- let chunk = this.firstChunk;
24056
- while (chunk && (chunk.start > start || chunk.end <= start)) {
24057
- // found end chunk before start
24058
- if (chunk.start < end && chunk.end >= end) {
24059
- return result;
24060
- }
24061
-
24062
- chunk = chunk.next;
24063
- }
24064
-
24065
- if (chunk && chunk.edited && chunk.start !== start)
24066
- throw new Error(`Cannot use replaced character ${start} as slice start anchor.`);
24067
-
24068
- const startChunk = chunk;
24069
- while (chunk) {
24070
- if (chunk.intro && (startChunk !== chunk || chunk.start === start)) {
24071
- result += chunk.intro;
24072
- }
24073
-
24074
- const containsEnd = chunk.start < end && chunk.end >= end;
24075
- if (containsEnd && chunk.edited && chunk.end !== end)
24076
- throw new Error(`Cannot use replaced character ${end} as slice end anchor.`);
24077
-
24078
- const sliceStart = startChunk === chunk ? start - chunk.start : 0;
24079
- const sliceEnd = containsEnd ? chunk.content.length + end - chunk.end : chunk.content.length;
24080
-
24081
- result += chunk.content.slice(sliceStart, sliceEnd);
24082
-
24083
- if (chunk.outro && (!containsEnd || chunk.end === end)) {
24084
- result += chunk.outro;
24085
- }
24086
-
24087
- if (containsEnd) {
24088
- break;
24089
- }
24090
-
24091
- chunk = chunk.next;
24092
- }
24093
-
24094
- return result;
24095
- }
24096
-
24097
- // TODO deprecate this? not really very useful
24098
- snip(start, end) {
24099
- const clone = this.clone();
24100
- clone.remove(0, start);
24101
- clone.remove(end, clone.original.length);
24102
-
24103
- return clone;
24104
- }
24105
-
24106
- _split(index) {
24107
- if (this.byStart[index] || this.byEnd[index]) return;
24108
-
24109
- let chunk = this.lastSearchedChunk;
24110
- const searchForward = index > chunk.end;
24111
-
24112
- while (chunk) {
24113
- if (chunk.contains(index)) return this._splitChunk(chunk, index);
24114
-
24115
- chunk = searchForward ? this.byStart[chunk.end] : this.byEnd[chunk.start];
24116
- }
24117
- }
24118
-
24119
- _splitChunk(chunk, index) {
24120
- if (chunk.edited && chunk.content.length) {
24121
- // zero-length edited chunks are a special case (overlapping replacements)
24122
- const loc = getLocator(this.original)(index);
24123
- throw new Error(
24124
- `Cannot split a chunk that has already been edited (${loc.line}:${loc.column} – "${chunk.original}")`,
24125
- );
24126
- }
24127
-
24128
- const newChunk = chunk.split(index);
24129
-
24130
- this.byEnd[index] = chunk;
24131
- this.byStart[index] = newChunk;
24132
- this.byEnd[newChunk.end] = newChunk;
24133
-
24134
- if (chunk === this.lastChunk) this.lastChunk = newChunk;
24135
-
24136
- this.lastSearchedChunk = chunk;
24137
- return true;
24138
- }
24139
-
24140
- toString() {
24141
- let str = this.intro;
24142
-
24143
- let chunk = this.firstChunk;
24144
- while (chunk) {
24145
- str += chunk.toString();
24146
- chunk = chunk.next;
24147
- }
24148
-
24149
- return str + this.outro;
24150
- }
24151
-
24152
- isEmpty() {
24153
- let chunk = this.firstChunk;
24154
- do {
24155
- if (
24156
- (chunk.intro.length && chunk.intro.trim()) ||
24157
- (chunk.content.length && chunk.content.trim()) ||
24158
- (chunk.outro.length && chunk.outro.trim())
24159
- )
24160
- return false;
24161
- } while ((chunk = chunk.next));
24162
- return true;
24163
- }
24164
-
24165
- length() {
24166
- let chunk = this.firstChunk;
24167
- let length = 0;
24168
- do {
24169
- length += chunk.intro.length + chunk.content.length + chunk.outro.length;
24170
- } while ((chunk = chunk.next));
24171
- return length;
24172
- }
24173
-
24174
- trimLines() {
24175
- return this.trim('[\\r\\n]');
24176
- }
24177
-
24178
- trim(charType) {
24179
- return this.trimStart(charType).trimEnd(charType);
24180
- }
24181
-
24182
- trimEndAborted(charType) {
24183
- const rx = new RegExp((charType || '\\s') + '+$');
24184
-
24185
- this.outro = this.outro.replace(rx, '');
24186
- if (this.outro.length) return true;
24187
-
24188
- let chunk = this.lastChunk;
24189
-
24190
- do {
24191
- const end = chunk.end;
24192
- const aborted = chunk.trimEnd(rx);
24193
-
24194
- // if chunk was trimmed, we have a new lastChunk
24195
- if (chunk.end !== end) {
24196
- if (this.lastChunk === chunk) {
24197
- this.lastChunk = chunk.next;
24198
- }
24199
-
24200
- this.byEnd[chunk.end] = chunk;
24201
- this.byStart[chunk.next.start] = chunk.next;
24202
- this.byEnd[chunk.next.end] = chunk.next;
24203
- }
24204
-
24205
- if (aborted) return true;
24206
- chunk = chunk.previous;
24207
- } while (chunk);
24208
-
24209
- return false;
24210
- }
24211
-
24212
- trimEnd(charType) {
24213
- this.trimEndAborted(charType);
24214
- return this;
24215
- }
24216
- trimStartAborted(charType) {
24217
- const rx = new RegExp('^' + (charType || '\\s') + '+');
24218
-
24219
- this.intro = this.intro.replace(rx, '');
24220
- if (this.intro.length) return true;
24221
-
24222
- let chunk = this.firstChunk;
24223
-
24224
- do {
24225
- const end = chunk.end;
24226
- const aborted = chunk.trimStart(rx);
24227
-
24228
- if (chunk.end !== end) {
24229
- // special case...
24230
- if (chunk === this.lastChunk) this.lastChunk = chunk.next;
24231
-
24232
- this.byEnd[chunk.end] = chunk;
24233
- this.byStart[chunk.next.start] = chunk.next;
24234
- this.byEnd[chunk.next.end] = chunk.next;
24235
- }
24236
-
24237
- if (aborted) return true;
24238
- chunk = chunk.next;
24239
- } while (chunk);
24240
-
24241
- return false;
24242
- }
24243
-
24244
- trimStart(charType) {
24245
- this.trimStartAborted(charType);
24246
- return this;
24247
- }
24248
-
24249
- hasChanged() {
24250
- return this.original !== this.toString();
24251
- }
24252
-
24253
- _replaceRegexp(searchValue, replacement) {
24254
- function getReplacement(match, str) {
24255
- if (typeof replacement === 'string') {
24256
- return replacement.replace(/\$(\$|&|\d+)/g, (_, i) => {
24257
- // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace#specifying_a_string_as_a_parameter
24258
- if (i === '$') return '$';
24259
- if (i === '&') return match[0];
24260
- const num = +i;
24261
- if (num < match.length) return match[+i];
24262
- return `$${i}`;
24263
- });
24264
- } else {
24265
- return replacement(...match, match.index, str, match.groups);
24266
- }
24267
- }
24268
- function matchAll(re, str) {
24269
- let match;
24270
- const matches = [];
24271
- while ((match = re.exec(str))) {
24272
- matches.push(match);
24273
- }
24274
- return matches;
24275
- }
24276
- if (searchValue.global) {
24277
- const matches = matchAll(searchValue, this.original);
24278
- matches.forEach((match) => {
24279
- if (match.index != null) {
24280
- const replacement = getReplacement(match, this.original);
24281
- if (replacement !== match[0]) {
24282
- this.overwrite(match.index, match.index + match[0].length, replacement);
24283
- }
24284
- }
24285
- });
24286
- } else {
24287
- const match = this.original.match(searchValue);
24288
- if (match && match.index != null) {
24289
- const replacement = getReplacement(match, this.original);
24290
- if (replacement !== match[0]) {
24291
- this.overwrite(match.index, match.index + match[0].length, replacement);
24292
- }
24293
- }
24294
- }
24295
- return this;
24296
- }
24297
-
24298
- _replaceString(string, replacement) {
24299
- const { original } = this;
24300
- const index = original.indexOf(string);
24301
-
24302
- if (index !== -1) {
24303
- this.overwrite(index, index + string.length, replacement);
24304
- }
24305
-
24306
- return this;
24307
- }
24308
-
24309
- replace(searchValue, replacement) {
24310
- if (typeof searchValue === 'string') {
24311
- return this._replaceString(searchValue, replacement);
24312
- }
24313
-
24314
- return this._replaceRegexp(searchValue, replacement);
24315
- }
24316
-
24317
- _replaceAllString(string, replacement) {
24318
- const { original } = this;
24319
- const stringLength = string.length;
24320
- for (
24321
- let index = original.indexOf(string);
24322
- index !== -1;
24323
- index = original.indexOf(string, index + stringLength)
24324
- ) {
24325
- const previous = original.slice(index, index + stringLength);
24326
- if (previous !== replacement) this.overwrite(index, index + stringLength, replacement);
24327
- }
24328
-
24329
- return this;
24330
- }
24331
-
24332
- replaceAll(searchValue, replacement) {
24333
- if (typeof searchValue === 'string') {
24334
- return this._replaceAllString(searchValue, replacement);
24335
- }
24336
-
24337
- if (!searchValue.global) {
24338
- throw new TypeError(
24339
- 'MagicString.prototype.replaceAll called with a non-global RegExp argument',
24340
- );
24341
- }
24342
-
24343
- return this._replaceRegexp(searchValue, replacement);
24344
- }
24345
- }
24346
-
24347
23207
  var utils = {};
24348
23208
 
24349
23209
  var constants;
@@ -24538,7 +23398,7 @@ var hasRequiredUtils;
24538
23398
  function requireUtils () {
24539
23399
  if (hasRequiredUtils) return utils;
24540
23400
  hasRequiredUtils = 1;
24541
- (function (exports) {
23401
+ (function (exports$1) {
24542
23402
 
24543
23403
  const path = path$3;
24544
23404
  const win32 = process.platform === 'win32';
@@ -24549,19 +23409,19 @@ function requireUtils () {
24549
23409
  REGEX_SPECIAL_CHARS_GLOBAL
24550
23410
  } = requireConstants();
24551
23411
 
24552
- exports.isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val);
24553
- exports.hasRegexChars = str => REGEX_SPECIAL_CHARS.test(str);
24554
- exports.isRegexChar = str => str.length === 1 && exports.hasRegexChars(str);
24555
- exports.escapeRegex = str => str.replace(REGEX_SPECIAL_CHARS_GLOBAL, '\\$1');
24556
- exports.toPosixSlashes = str => str.replace(REGEX_BACKSLASH, '/');
23412
+ exports$1.isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val);
23413
+ exports$1.hasRegexChars = str => REGEX_SPECIAL_CHARS.test(str);
23414
+ exports$1.isRegexChar = str => str.length === 1 && exports$1.hasRegexChars(str);
23415
+ exports$1.escapeRegex = str => str.replace(REGEX_SPECIAL_CHARS_GLOBAL, '\\$1');
23416
+ exports$1.toPosixSlashes = str => str.replace(REGEX_BACKSLASH, '/');
24557
23417
 
24558
- exports.removeBackslashes = str => {
23418
+ exports$1.removeBackslashes = str => {
24559
23419
  return str.replace(REGEX_REMOVE_BACKSLASH, match => {
24560
23420
  return match === '\\' ? '' : match;
24561
23421
  });
24562
23422
  };
24563
23423
 
24564
- exports.supportsLookbehinds = () => {
23424
+ exports$1.supportsLookbehinds = () => {
24565
23425
  const segs = process.version.slice(1).split('.').map(Number);
24566
23426
  if (segs.length === 3 && segs[0] >= 9 || (segs[0] === 8 && segs[1] >= 10)) {
24567
23427
  return true;
@@ -24569,21 +23429,21 @@ function requireUtils () {
24569
23429
  return false;
24570
23430
  };
24571
23431
 
24572
- exports.isWindows = options => {
23432
+ exports$1.isWindows = options => {
24573
23433
  if (options && typeof options.windows === 'boolean') {
24574
23434
  return options.windows;
24575
23435
  }
24576
23436
  return win32 === true || path.sep === '\\';
24577
23437
  };
24578
23438
 
24579
- exports.escapeLast = (input, char, lastIdx) => {
23439
+ exports$1.escapeLast = (input, char, lastIdx) => {
24580
23440
  const idx = input.lastIndexOf(char, lastIdx);
24581
23441
  if (idx === -1) return input;
24582
- if (input[idx - 1] === '\\') return exports.escapeLast(input, char, idx - 1);
23442
+ if (input[idx - 1] === '\\') return exports$1.escapeLast(input, char, idx - 1);
24583
23443
  return `${input.slice(0, idx)}\\${input.slice(idx)}`;
24584
23444
  };
24585
23445
 
24586
- exports.removePrefix = (input, state = {}) => {
23446
+ exports$1.removePrefix = (input, state = {}) => {
24587
23447
  let output = input;
24588
23448
  if (output.startsWith('./')) {
24589
23449
  output = output.slice(2);
@@ -24592,7 +23452,7 @@ function requireUtils () {
24592
23452
  return output;
24593
23453
  };
24594
23454
 
24595
- exports.wrapOutput = (input, state = {}, options = {}) => {
23455
+ exports$1.wrapOutput = (input, state = {}, options = {}) => {
24596
23456
  const prepend = options.contains ? '' : '^';
24597
23457
  const append = options.contains ? '' : '$';
24598
23458
 
@@ -26593,7 +25453,7 @@ function replace(options) {
26593
25453
  if ( options === void 0 ) options = {};
26594
25454
 
26595
25455
  var filter = createFilter(options.include, options.exclude);
26596
- var delimiters = options.delimiters; if ( delimiters === void 0 ) delimiters = ['\\b', '\\b(?!\\.)'];
25456
+ var delimiters = options.delimiters; if ( delimiters === void 0 ) delimiters = ['(?<![_$a-zA-Z0-9\\xA0-\\uFFFF])', '(?![_$a-zA-Z0-9\\xA0-\\uFFFF])(?!\\.)'];
26597
25457
  var preventAssignment = options.preventAssignment;
26598
25458
  var objectGuards = options.objectGuards;
26599
25459
  var replacements = getReplacements(options);