@rohal12/twee-ts 1.11.0 → 1.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -6,6 +6,11 @@ import { randomUUID } from "crypto";
6
6
  function generateIFID() {
7
7
  return randomUUID().toUpperCase();
8
8
  }
9
+ function createIFID(value) {
10
+ const err = validateIFID(value);
11
+ if (err) throw new Error(`Invalid IFID: ${err}`);
12
+ return value.toUpperCase();
13
+ }
9
14
  function validateIFID(ifid) {
10
15
  let uuid = ifid;
11
16
  switch (ifid.length) {
@@ -69,6 +74,10 @@ function tiddlerEscape(s) {
69
74
  if (s.length === 0) return s;
70
75
  return s.replace(/\\/g, "\\s").replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/\t/g, "\\t").replace(/\n/g, "\\n");
71
76
  }
77
+ function tiddlerUnescape(s) {
78
+ if (s.length === 0) return s;
79
+ return s.replace(/\\n/g, "\n").replace(/\\t/g, " ").replace(/\\s/g, "\\");
80
+ }
72
81
  function tweeEscape(s) {
73
82
  if (s.length === 0) return s;
74
83
  return s.replace(/[\\[\]{}]/g, (ch) => "\\" + ch);
@@ -483,6 +492,25 @@ function getStoryStats(story, wordCountMethod = "tweego") {
483
492
  }
484
493
  return { passages: story.passages.length, storyPassages, words };
485
494
  }
495
+ var StoryBuilder = class {
496
+ /** The mutable story, accessible during construction for loader functions. */
497
+ story;
498
+ constructor() {
499
+ this.story = createStory();
500
+ }
501
+ /** Add a passage, handling special passages (StoryData, StoryTitle, etc.). */
502
+ add(passage, diagnostics) {
503
+ storyAdd(this.story, passage, diagnostics);
504
+ }
505
+ /** Check if a passage name exists. */
506
+ has(name) {
507
+ return storyHas(this.story, name);
508
+ }
509
+ /** Finalize and return the story as read-only. */
510
+ build() {
511
+ return this.story;
512
+ }
513
+ };
486
514
 
487
515
  // src/filesystem.ts
488
516
  import { readdirSync, statSync, watch as fsWatch } from "fs";
@@ -546,6 +574,8 @@ var KNOWN_EXTENSIONS = /* @__PURE__ */ new Set([
546
574
  "twee",
547
575
  "tw2",
548
576
  "twee2",
577
+ "htm",
578
+ "html",
549
579
  "css",
550
580
  "js",
551
581
  "otf",
@@ -904,6 +934,17 @@ function readFormatSource(format) {
904
934
  import { basename } from "path";
905
935
  import { statSync as statSync3 } from "fs";
906
936
 
937
+ // src/types.ts
938
+ var ItemType = {
939
+ Error: 0,
940
+ EOF: 1,
941
+ Header: 2,
942
+ Name: 3,
943
+ Tags: 4,
944
+ Metadata: 5,
945
+ Content: 6
946
+ };
947
+
907
948
  // src/lexer.ts
908
949
  var EOF = -1;
909
950
  var HEADER_DELIM = "::";
@@ -936,10 +977,16 @@ var LexerContext = class {
936
977
  throw new Error("backup would leave pos < start");
937
978
  }
938
979
  }
980
+ // Line-counting invariant: next() increments this.line for each newline during
981
+ // character-by-character scanning. However, Content items are produced by jumping
982
+ // this.pos directly (e.g. via indexOf) without calling next(), so those newlines
983
+ // haven't been counted yet. emit() re-counts newlines in [start, pos) for Content
984
+ // items to compensate. This is safe because this.start is reset to this.pos after
985
+ // every emit(), so no range is ever counted twice.
939
986
  emit(type) {
940
987
  const val = this.input.slice(this.start, this.pos);
941
988
  this.items.push({ type, line: this.line, pos: this.start, val });
942
- if (type === 6 /* Content */) {
989
+ if (type === ItemType.Content) {
943
990
  for (let i = this.start; i < this.pos; i++) {
944
991
  if (this.input.charCodeAt(i) === 10) this.line++;
945
992
  }
@@ -960,7 +1007,7 @@ var LexerContext = class {
960
1007
  }
961
1008
  errorf(message) {
962
1009
  this.items.push({
963
- type: 0 /* Error */,
1010
+ type: ItemType.Error,
964
1011
  line: this.line,
965
1012
  pos: this.start,
966
1013
  val: message
@@ -1002,7 +1049,7 @@ function lexProlog(ctx) {
1002
1049
  ctx.ignore();
1003
1050
  return lexHeaderDelim;
1004
1051
  }
1005
- ctx.emit(1 /* EOF */);
1052
+ ctx.emit(ItemType.EOF);
1006
1053
  return null;
1007
1054
  }
1008
1055
  function lexContent(ctx) {
@@ -1012,19 +1059,19 @@ function lexContent(ctx) {
1012
1059
  const i = ctx.input.indexOf(NEWLINE_HEADER_DELIM, ctx.pos);
1013
1060
  if (i > -1) {
1014
1061
  ctx.pos = i + 1;
1015
- ctx.emit(6 /* Content */);
1062
+ ctx.emit(ItemType.Content);
1016
1063
  return lexHeaderDelim;
1017
1064
  }
1018
1065
  ctx.pos = ctx.input.length;
1019
1066
  if (ctx.pos > ctx.start) {
1020
- ctx.emit(6 /* Content */);
1067
+ ctx.emit(ItemType.Content);
1021
1068
  }
1022
- ctx.emit(1 /* EOF */);
1069
+ ctx.emit(ItemType.EOF);
1023
1070
  return null;
1024
1071
  }
1025
1072
  function lexHeaderDelim(ctx) {
1026
1073
  ctx.pos += HEADER_DELIM.length;
1027
- ctx.emit(2 /* Header */);
1074
+ ctx.emit(ItemType.Header);
1028
1075
  return lexName;
1029
1076
  }
1030
1077
  function lexName(ctx) {
@@ -1053,7 +1100,7 @@ function lexName(ctx) {
1053
1100
  break outer;
1054
1101
  }
1055
1102
  }
1056
- ctx.emit(3 /* Name */);
1103
+ ctx.emit(ItemType.Name);
1057
1104
  switch (r) {
1058
1105
  case 91:
1059
1106
  return lexTags;
@@ -1070,7 +1117,7 @@ function lexName(ctx) {
1070
1117
  ctx.ignore();
1071
1118
  return lexContent;
1072
1119
  }
1073
- ctx.emit(1 /* EOF */);
1120
+ ctx.emit(ItemType.EOF);
1074
1121
  return null;
1075
1122
  }
1076
1123
  function lexNextOptionalBlock(ctx) {
@@ -1093,7 +1140,7 @@ function lexNextOptionalBlock(ctx) {
1093
1140
  ctx.ignore();
1094
1141
  return lexContent;
1095
1142
  case EOF:
1096
- ctx.emit(1 /* EOF */);
1143
+ ctx.emit(ItemType.EOF);
1097
1144
  return null;
1098
1145
  }
1099
1146
  return ctx.errorf(`illegal character '${String.fromCharCode(r)}' amid the optional blocks`);
@@ -1113,7 +1160,7 @@ function lexTags(ctx) {
1113
1160
  if (r === 10) ctx.backup();
1114
1161
  return ctx.errorf("unterminated tag block");
1115
1162
  case 93:
1116
- if (ctx.pos > ctx.start) ctx.emit(4 /* Tags */);
1163
+ if (ctx.pos > ctx.start) ctx.emit(ItemType.Tags);
1117
1164
  return lexNextOptionalBlock;
1118
1165
  case 91:
1119
1166
  return ctx.errorf(`unexpected left square bracket '['`);
@@ -1146,7 +1193,7 @@ function lexMetadata(ctx) {
1146
1193
  case 125:
1147
1194
  depth--;
1148
1195
  if (depth === 0) {
1149
- if (ctx.pos > ctx.start) ctx.emit(5 /* Metadata */);
1196
+ if (ctx.pos > ctx.start) ctx.emit(ItemType.Metadata);
1150
1197
  return lexNextOptionalBlock;
1151
1198
  }
1152
1199
  break;
@@ -1176,7 +1223,7 @@ var TweeLexer = class {
1176
1223
  nextItem() {
1177
1224
  const result = this.gen.next();
1178
1225
  if (result.done) {
1179
- return { item: { type: 1 /* EOF */, line: 0, pos: 0, val: "" }, done: true };
1226
+ return { item: { type: ItemType.EOF, line: 0, pos: 0, val: "" }, done: true };
1180
1227
  }
1181
1228
  return { item: result.value, done: false };
1182
1229
  }
@@ -1213,10 +1260,10 @@ function parseTwee(source, options = {}) {
1213
1260
  const passages = [];
1214
1261
  let current = null;
1215
1262
  let pCount = 0;
1216
- let lastType = 1 /* EOF */;
1263
+ let lastType = ItemType.EOF;
1217
1264
  for (const item of tweeLexer(source)) {
1218
1265
  switch (item.type) {
1219
- case 0 /* Error */:
1266
+ case ItemType.Error:
1220
1267
  diagnostics.push({
1221
1268
  level: "error",
1222
1269
  message: `line ${item.line}: Malformed twee source; ${item.val}.`,
@@ -1224,19 +1271,19 @@ function parseTwee(source, options = {}) {
1224
1271
  line: item.line
1225
1272
  });
1226
1273
  return { passages, diagnostics };
1227
- case 1 /* EOF */:
1274
+ case ItemType.EOF:
1228
1275
  if (pCount > 0 && current) {
1229
1276
  passages.push(current);
1230
1277
  }
1231
1278
  return { passages, diagnostics };
1232
- case 2 /* Header */:
1279
+ case ItemType.Header:
1233
1280
  pCount++;
1234
1281
  if (pCount > 1 && current) {
1235
1282
  passages.push(current);
1236
1283
  }
1237
1284
  current = { name: "", tags: [], text: "", source: { file: filename, line: item.line } };
1238
1285
  break;
1239
- case 3 /* Name */: {
1286
+ case ItemType.Name: {
1240
1287
  if (!current) break;
1241
1288
  const name = tweeUnescape(item.val).trim();
1242
1289
  if (name.length === 0) {
@@ -1251,9 +1298,9 @@ function parseTwee(source, options = {}) {
1251
1298
  current.name = name;
1252
1299
  break;
1253
1300
  }
1254
- case 4 /* Tags */: {
1301
+ case ItemType.Tags: {
1255
1302
  if (!current) break;
1256
- if (lastType !== 3 /* Name */) {
1303
+ if (lastType !== ItemType.Name) {
1257
1304
  diagnostics.push({
1258
1305
  level: "error",
1259
1306
  message: `line ${item.line}: Malformed twee source; optional tags block must immediately follow the passage name.`,
@@ -1266,9 +1313,9 @@ function parseTwee(source, options = {}) {
1266
1313
  current.tags = tweeUnescape(inner).split(/\s+/).filter(Boolean);
1267
1314
  break;
1268
1315
  }
1269
- case 5 /* Metadata */: {
1316
+ case ItemType.Metadata: {
1270
1317
  if (!current) break;
1271
- if (lastType !== 3 /* Name */ && lastType !== 4 /* Tags */) {
1318
+ if (lastType !== ItemType.Name && lastType !== ItemType.Tags) {
1272
1319
  diagnostics.push({
1273
1320
  level: "error",
1274
1321
  message: `line ${item.line}: Malformed twee source; optional metadata block must immediately follow the passage name or tags block.`,
@@ -1300,7 +1347,7 @@ function parseTwee(source, options = {}) {
1300
1347
  }
1301
1348
  break;
1302
1349
  }
1303
- case 6 /* Content */: {
1350
+ case ItemType.Content: {
1304
1351
  if (!current) break;
1305
1352
  if (trim) {
1306
1353
  current.text = item.val.trim();
@@ -1328,6 +1375,2808 @@ function parseTwee(source, options = {}) {
1328
1375
  return { passages, diagnostics };
1329
1376
  }
1330
1377
 
1378
+ // node_modules/.pnpm/entities@7.0.1/node_modules/entities/dist/esm/decode-codepoint.js
1379
+ var _a;
1380
+ var decodeMap = /* @__PURE__ */ new Map([
1381
+ [0, 65533],
1382
+ // C1 Unicode control character reference replacements
1383
+ [128, 8364],
1384
+ [130, 8218],
1385
+ [131, 402],
1386
+ [132, 8222],
1387
+ [133, 8230],
1388
+ [134, 8224],
1389
+ [135, 8225],
1390
+ [136, 710],
1391
+ [137, 8240],
1392
+ [138, 352],
1393
+ [139, 8249],
1394
+ [140, 338],
1395
+ [142, 381],
1396
+ [145, 8216],
1397
+ [146, 8217],
1398
+ [147, 8220],
1399
+ [148, 8221],
1400
+ [149, 8226],
1401
+ [150, 8211],
1402
+ [151, 8212],
1403
+ [152, 732],
1404
+ [153, 8482],
1405
+ [154, 353],
1406
+ [155, 8250],
1407
+ [156, 339],
1408
+ [158, 382],
1409
+ [159, 376]
1410
+ ]);
1411
+ var fromCodePoint = (
1412
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, n/no-unsupported-features/es-builtins
1413
+ (_a = String.fromCodePoint) !== null && _a !== void 0 ? _a : ((codePoint) => {
1414
+ let output = "";
1415
+ if (codePoint > 65535) {
1416
+ codePoint -= 65536;
1417
+ output += String.fromCharCode(codePoint >>> 10 & 1023 | 55296);
1418
+ codePoint = 56320 | codePoint & 1023;
1419
+ }
1420
+ output += String.fromCharCode(codePoint);
1421
+ return output;
1422
+ })
1423
+ );
1424
+ function replaceCodePoint(codePoint) {
1425
+ var _a3;
1426
+ if (codePoint >= 55296 && codePoint <= 57343 || codePoint > 1114111) {
1427
+ return 65533;
1428
+ }
1429
+ return (_a3 = decodeMap.get(codePoint)) !== null && _a3 !== void 0 ? _a3 : codePoint;
1430
+ }
1431
+
1432
+ // node_modules/.pnpm/entities@7.0.1/node_modules/entities/dist/esm/internal/decode-shared.js
1433
+ function decodeBase64(input) {
1434
+ const binary = (
1435
+ // eslint-disable-next-line n/no-unsupported-features/node-builtins
1436
+ typeof atob === "function" ? (
1437
+ // Browser (and Node >=16)
1438
+ // eslint-disable-next-line n/no-unsupported-features/node-builtins
1439
+ atob(input)
1440
+ ) : (
1441
+ // Older Node versions (<16)
1442
+ // eslint-disable-next-line n/no-unsupported-features/node-builtins
1443
+ typeof Buffer.from === "function" ? (
1444
+ // eslint-disable-next-line n/no-unsupported-features/node-builtins
1445
+ Buffer.from(input, "base64").toString("binary")
1446
+ ) : (
1447
+ // eslint-disable-next-line unicorn/no-new-buffer, n/no-deprecated-api
1448
+ new Buffer(input, "base64").toString("binary")
1449
+ )
1450
+ )
1451
+ );
1452
+ const evenLength = binary.length & ~1;
1453
+ const out = new Uint16Array(evenLength / 2);
1454
+ for (let index = 0, outIndex = 0; index < evenLength; index += 2) {
1455
+ const lo = binary.charCodeAt(index);
1456
+ const hi = binary.charCodeAt(index + 1);
1457
+ out[outIndex++] = lo | hi << 8;
1458
+ }
1459
+ return out;
1460
+ }
1461
+
1462
+ // node_modules/.pnpm/entities@7.0.1/node_modules/entities/dist/esm/generated/decode-data-html.js
1463
+ var 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");
1464
+
1465
+ // node_modules/.pnpm/entities@7.0.1/node_modules/entities/dist/esm/generated/decode-data-xml.js
1466
+ var xmlDecodeTree = /* @__PURE__ */ decodeBase64("AAJhZ2xxBwARABMAFQBtAg0AAAAAAA8AcAAmYG8AcwAnYHQAPmB0ADxg9SFvdCJg");
1467
+
1468
+ // node_modules/.pnpm/entities@7.0.1/node_modules/entities/dist/esm/internal/bin-trie-flags.js
1469
+ var BinTrieFlags;
1470
+ (function(BinTrieFlags3) {
1471
+ BinTrieFlags3[BinTrieFlags3["VALUE_LENGTH"] = 49152] = "VALUE_LENGTH";
1472
+ BinTrieFlags3[BinTrieFlags3["FLAG13"] = 8192] = "FLAG13";
1473
+ BinTrieFlags3[BinTrieFlags3["BRANCH_LENGTH"] = 8064] = "BRANCH_LENGTH";
1474
+ BinTrieFlags3[BinTrieFlags3["JUMP_TABLE"] = 127] = "JUMP_TABLE";
1475
+ })(BinTrieFlags || (BinTrieFlags = {}));
1476
+
1477
+ // node_modules/.pnpm/entities@7.0.1/node_modules/entities/dist/esm/decode.js
1478
+ var CharCodes;
1479
+ (function(CharCodes4) {
1480
+ CharCodes4[CharCodes4["NUM"] = 35] = "NUM";
1481
+ CharCodes4[CharCodes4["SEMI"] = 59] = "SEMI";
1482
+ CharCodes4[CharCodes4["EQUALS"] = 61] = "EQUALS";
1483
+ CharCodes4[CharCodes4["ZERO"] = 48] = "ZERO";
1484
+ CharCodes4[CharCodes4["NINE"] = 57] = "NINE";
1485
+ CharCodes4[CharCodes4["LOWER_A"] = 97] = "LOWER_A";
1486
+ CharCodes4[CharCodes4["LOWER_F"] = 102] = "LOWER_F";
1487
+ CharCodes4[CharCodes4["LOWER_X"] = 120] = "LOWER_X";
1488
+ CharCodes4[CharCodes4["LOWER_Z"] = 122] = "LOWER_Z";
1489
+ CharCodes4[CharCodes4["UPPER_A"] = 65] = "UPPER_A";
1490
+ CharCodes4[CharCodes4["UPPER_F"] = 70] = "UPPER_F";
1491
+ CharCodes4[CharCodes4["UPPER_Z"] = 90] = "UPPER_Z";
1492
+ })(CharCodes || (CharCodes = {}));
1493
+ var TO_LOWER_BIT = 32;
1494
+ function isNumber(code) {
1495
+ return code >= CharCodes.ZERO && code <= CharCodes.NINE;
1496
+ }
1497
+ function isHexadecimalCharacter(code) {
1498
+ return code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_F || code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_F;
1499
+ }
1500
+ function isAsciiAlphaNumeric(code) {
1501
+ return code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_Z || code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_Z || isNumber(code);
1502
+ }
1503
+ function isEntityInAttributeInvalidEnd(code) {
1504
+ return code === CharCodes.EQUALS || isAsciiAlphaNumeric(code);
1505
+ }
1506
+ var EntityDecoderState;
1507
+ (function(EntityDecoderState3) {
1508
+ EntityDecoderState3[EntityDecoderState3["EntityStart"] = 0] = "EntityStart";
1509
+ EntityDecoderState3[EntityDecoderState3["NumericStart"] = 1] = "NumericStart";
1510
+ EntityDecoderState3[EntityDecoderState3["NumericDecimal"] = 2] = "NumericDecimal";
1511
+ EntityDecoderState3[EntityDecoderState3["NumericHex"] = 3] = "NumericHex";
1512
+ EntityDecoderState3[EntityDecoderState3["NamedEntity"] = 4] = "NamedEntity";
1513
+ })(EntityDecoderState || (EntityDecoderState = {}));
1514
+ var DecodingMode;
1515
+ (function(DecodingMode3) {
1516
+ DecodingMode3[DecodingMode3["Legacy"] = 0] = "Legacy";
1517
+ DecodingMode3[DecodingMode3["Strict"] = 1] = "Strict";
1518
+ DecodingMode3[DecodingMode3["Attribute"] = 2] = "Attribute";
1519
+ })(DecodingMode || (DecodingMode = {}));
1520
+ var EntityDecoder = class {
1521
+ constructor(decodeTree, emitCodePoint, errors) {
1522
+ this.decodeTree = decodeTree;
1523
+ this.emitCodePoint = emitCodePoint;
1524
+ this.errors = errors;
1525
+ this.state = EntityDecoderState.EntityStart;
1526
+ this.consumed = 1;
1527
+ this.result = 0;
1528
+ this.treeIndex = 0;
1529
+ this.excess = 1;
1530
+ this.decodeMode = DecodingMode.Strict;
1531
+ this.runConsumed = 0;
1532
+ }
1533
+ /** Resets the instance to make it reusable. */
1534
+ startEntity(decodeMode) {
1535
+ this.decodeMode = decodeMode;
1536
+ this.state = EntityDecoderState.EntityStart;
1537
+ this.result = 0;
1538
+ this.treeIndex = 0;
1539
+ this.excess = 1;
1540
+ this.consumed = 1;
1541
+ this.runConsumed = 0;
1542
+ }
1543
+ /**
1544
+ * Write an entity to the decoder. This can be called multiple times with partial entities.
1545
+ * If the entity is incomplete, the decoder will return -1.
1546
+ *
1547
+ * Mirrors the implementation of `getDecoder`, but with the ability to stop decoding if the
1548
+ * entity is incomplete, and resume when the next string is written.
1549
+ *
1550
+ * @param input The string containing the entity (or a continuation of the entity).
1551
+ * @param offset The offset at which the entity begins. Should be 0 if this is not the first call.
1552
+ * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
1553
+ */
1554
+ write(input, offset) {
1555
+ switch (this.state) {
1556
+ case EntityDecoderState.EntityStart: {
1557
+ if (input.charCodeAt(offset) === CharCodes.NUM) {
1558
+ this.state = EntityDecoderState.NumericStart;
1559
+ this.consumed += 1;
1560
+ return this.stateNumericStart(input, offset + 1);
1561
+ }
1562
+ this.state = EntityDecoderState.NamedEntity;
1563
+ return this.stateNamedEntity(input, offset);
1564
+ }
1565
+ case EntityDecoderState.NumericStart: {
1566
+ return this.stateNumericStart(input, offset);
1567
+ }
1568
+ case EntityDecoderState.NumericDecimal: {
1569
+ return this.stateNumericDecimal(input, offset);
1570
+ }
1571
+ case EntityDecoderState.NumericHex: {
1572
+ return this.stateNumericHex(input, offset);
1573
+ }
1574
+ case EntityDecoderState.NamedEntity: {
1575
+ return this.stateNamedEntity(input, offset);
1576
+ }
1577
+ }
1578
+ }
1579
+ /**
1580
+ * Switches between the numeric decimal and hexadecimal states.
1581
+ *
1582
+ * Equivalent to the `Numeric character reference state` in the HTML spec.
1583
+ *
1584
+ * @param input The string containing the entity (or a continuation of the entity).
1585
+ * @param offset The current offset.
1586
+ * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
1587
+ */
1588
+ stateNumericStart(input, offset) {
1589
+ if (offset >= input.length) {
1590
+ return -1;
1591
+ }
1592
+ if ((input.charCodeAt(offset) | TO_LOWER_BIT) === CharCodes.LOWER_X) {
1593
+ this.state = EntityDecoderState.NumericHex;
1594
+ this.consumed += 1;
1595
+ return this.stateNumericHex(input, offset + 1);
1596
+ }
1597
+ this.state = EntityDecoderState.NumericDecimal;
1598
+ return this.stateNumericDecimal(input, offset);
1599
+ }
1600
+ /**
1601
+ * Parses a hexadecimal numeric entity.
1602
+ *
1603
+ * Equivalent to the `Hexademical character reference state` in the HTML spec.
1604
+ *
1605
+ * @param input The string containing the entity (or a continuation of the entity).
1606
+ * @param offset The current offset.
1607
+ * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
1608
+ */
1609
+ stateNumericHex(input, offset) {
1610
+ while (offset < input.length) {
1611
+ const char = input.charCodeAt(offset);
1612
+ if (isNumber(char) || isHexadecimalCharacter(char)) {
1613
+ const digit = char <= CharCodes.NINE ? char - CharCodes.ZERO : (char | TO_LOWER_BIT) - CharCodes.LOWER_A + 10;
1614
+ this.result = this.result * 16 + digit;
1615
+ this.consumed++;
1616
+ offset++;
1617
+ } else {
1618
+ return this.emitNumericEntity(char, 3);
1619
+ }
1620
+ }
1621
+ return -1;
1622
+ }
1623
+ /**
1624
+ * Parses a decimal numeric entity.
1625
+ *
1626
+ * Equivalent to the `Decimal character reference state` in the HTML spec.
1627
+ *
1628
+ * @param input The string containing the entity (or a continuation of the entity).
1629
+ * @param offset The current offset.
1630
+ * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
1631
+ */
1632
+ stateNumericDecimal(input, offset) {
1633
+ while (offset < input.length) {
1634
+ const char = input.charCodeAt(offset);
1635
+ if (isNumber(char)) {
1636
+ this.result = this.result * 10 + (char - CharCodes.ZERO);
1637
+ this.consumed++;
1638
+ offset++;
1639
+ } else {
1640
+ return this.emitNumericEntity(char, 2);
1641
+ }
1642
+ }
1643
+ return -1;
1644
+ }
1645
+ /**
1646
+ * Validate and emit a numeric entity.
1647
+ *
1648
+ * Implements the logic from the `Hexademical character reference start
1649
+ * state` and `Numeric character reference end state` in the HTML spec.
1650
+ *
1651
+ * @param lastCp The last code point of the entity. Used to see if the
1652
+ * entity was terminated with a semicolon.
1653
+ * @param expectedLength The minimum number of characters that should be
1654
+ * consumed. Used to validate that at least one digit
1655
+ * was consumed.
1656
+ * @returns The number of characters that were consumed.
1657
+ */
1658
+ emitNumericEntity(lastCp, expectedLength) {
1659
+ var _a3;
1660
+ if (this.consumed <= expectedLength) {
1661
+ (_a3 = this.errors) === null || _a3 === void 0 ? void 0 : _a3.absenceOfDigitsInNumericCharacterReference(this.consumed);
1662
+ return 0;
1663
+ }
1664
+ if (lastCp === CharCodes.SEMI) {
1665
+ this.consumed += 1;
1666
+ } else if (this.decodeMode === DecodingMode.Strict) {
1667
+ return 0;
1668
+ }
1669
+ this.emitCodePoint(replaceCodePoint(this.result), this.consumed);
1670
+ if (this.errors) {
1671
+ if (lastCp !== CharCodes.SEMI) {
1672
+ this.errors.missingSemicolonAfterCharacterReference();
1673
+ }
1674
+ this.errors.validateNumericCharacterReference(this.result);
1675
+ }
1676
+ return this.consumed;
1677
+ }
1678
+ /**
1679
+ * Parses a named entity.
1680
+ *
1681
+ * Equivalent to the `Named character reference state` in the HTML spec.
1682
+ *
1683
+ * @param input The string containing the entity (or a continuation of the entity).
1684
+ * @param offset The current offset.
1685
+ * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
1686
+ */
1687
+ stateNamedEntity(input, offset) {
1688
+ const { decodeTree } = this;
1689
+ let current = decodeTree[this.treeIndex];
1690
+ let valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;
1691
+ while (offset < input.length) {
1692
+ if (valueLength === 0 && (current & BinTrieFlags.FLAG13) !== 0) {
1693
+ const runLength = (current & BinTrieFlags.BRANCH_LENGTH) >> 7;
1694
+ if (this.runConsumed === 0) {
1695
+ const firstChar = current & BinTrieFlags.JUMP_TABLE;
1696
+ if (input.charCodeAt(offset) !== firstChar) {
1697
+ return this.result === 0 ? 0 : this.emitNotTerminatedNamedEntity();
1698
+ }
1699
+ offset++;
1700
+ this.excess++;
1701
+ this.runConsumed++;
1702
+ }
1703
+ while (this.runConsumed < runLength) {
1704
+ if (offset >= input.length) {
1705
+ return -1;
1706
+ }
1707
+ const charIndexInPacked = this.runConsumed - 1;
1708
+ const packedWord = decodeTree[this.treeIndex + 1 + (charIndexInPacked >> 1)];
1709
+ const expectedChar = charIndexInPacked % 2 === 0 ? packedWord & 255 : packedWord >> 8 & 255;
1710
+ if (input.charCodeAt(offset) !== expectedChar) {
1711
+ this.runConsumed = 0;
1712
+ return this.result === 0 ? 0 : this.emitNotTerminatedNamedEntity();
1713
+ }
1714
+ offset++;
1715
+ this.excess++;
1716
+ this.runConsumed++;
1717
+ }
1718
+ this.runConsumed = 0;
1719
+ this.treeIndex += 1 + (runLength >> 1);
1720
+ current = decodeTree[this.treeIndex];
1721
+ valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;
1722
+ }
1723
+ if (offset >= input.length)
1724
+ break;
1725
+ const char = input.charCodeAt(offset);
1726
+ if (char === CharCodes.SEMI && valueLength !== 0 && (current & BinTrieFlags.FLAG13) !== 0) {
1727
+ return this.emitNamedEntityData(this.treeIndex, valueLength, this.consumed + this.excess);
1728
+ }
1729
+ this.treeIndex = determineBranch(decodeTree, current, this.treeIndex + Math.max(1, valueLength), char);
1730
+ if (this.treeIndex < 0) {
1731
+ return this.result === 0 || // If we are parsing an attribute
1732
+ this.decodeMode === DecodingMode.Attribute && // We shouldn't have consumed any characters after the entity,
1733
+ (valueLength === 0 || // And there should be no invalid characters.
1734
+ isEntityInAttributeInvalidEnd(char)) ? 0 : this.emitNotTerminatedNamedEntity();
1735
+ }
1736
+ current = decodeTree[this.treeIndex];
1737
+ valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;
1738
+ if (valueLength !== 0) {
1739
+ if (char === CharCodes.SEMI) {
1740
+ return this.emitNamedEntityData(this.treeIndex, valueLength, this.consumed + this.excess);
1741
+ }
1742
+ if (this.decodeMode !== DecodingMode.Strict && (current & BinTrieFlags.FLAG13) === 0) {
1743
+ this.result = this.treeIndex;
1744
+ this.consumed += this.excess;
1745
+ this.excess = 0;
1746
+ }
1747
+ }
1748
+ offset++;
1749
+ this.excess++;
1750
+ }
1751
+ return -1;
1752
+ }
1753
+ /**
1754
+ * Emit a named entity that was not terminated with a semicolon.
1755
+ *
1756
+ * @returns The number of characters consumed.
1757
+ */
1758
+ emitNotTerminatedNamedEntity() {
1759
+ var _a3;
1760
+ const { result, decodeTree } = this;
1761
+ const valueLength = (decodeTree[result] & BinTrieFlags.VALUE_LENGTH) >> 14;
1762
+ this.emitNamedEntityData(result, valueLength, this.consumed);
1763
+ (_a3 = this.errors) === null || _a3 === void 0 ? void 0 : _a3.missingSemicolonAfterCharacterReference();
1764
+ return this.consumed;
1765
+ }
1766
+ /**
1767
+ * Emit a named entity.
1768
+ *
1769
+ * @param result The index of the entity in the decode tree.
1770
+ * @param valueLength The number of bytes in the entity.
1771
+ * @param consumed The number of characters consumed.
1772
+ *
1773
+ * @returns The number of characters consumed.
1774
+ */
1775
+ emitNamedEntityData(result, valueLength, consumed) {
1776
+ const { decodeTree } = this;
1777
+ this.emitCodePoint(valueLength === 1 ? decodeTree[result] & ~(BinTrieFlags.VALUE_LENGTH | BinTrieFlags.FLAG13) : decodeTree[result + 1], consumed);
1778
+ if (valueLength === 3) {
1779
+ this.emitCodePoint(decodeTree[result + 2], consumed);
1780
+ }
1781
+ return consumed;
1782
+ }
1783
+ /**
1784
+ * Signal to the parser that the end of the input was reached.
1785
+ *
1786
+ * Remaining data will be emitted and relevant errors will be produced.
1787
+ *
1788
+ * @returns The number of characters consumed.
1789
+ */
1790
+ end() {
1791
+ var _a3;
1792
+ switch (this.state) {
1793
+ case EntityDecoderState.NamedEntity: {
1794
+ return this.result !== 0 && (this.decodeMode !== DecodingMode.Attribute || this.result === this.treeIndex) ? this.emitNotTerminatedNamedEntity() : 0;
1795
+ }
1796
+ // Otherwise, emit a numeric entity if we have one.
1797
+ case EntityDecoderState.NumericDecimal: {
1798
+ return this.emitNumericEntity(0, 2);
1799
+ }
1800
+ case EntityDecoderState.NumericHex: {
1801
+ return this.emitNumericEntity(0, 3);
1802
+ }
1803
+ case EntityDecoderState.NumericStart: {
1804
+ (_a3 = this.errors) === null || _a3 === void 0 ? void 0 : _a3.absenceOfDigitsInNumericCharacterReference(this.consumed);
1805
+ return 0;
1806
+ }
1807
+ case EntityDecoderState.EntityStart: {
1808
+ return 0;
1809
+ }
1810
+ }
1811
+ }
1812
+ };
1813
+ function determineBranch(decodeTree, current, nodeIndex, char) {
1814
+ const branchCount = (current & BinTrieFlags.BRANCH_LENGTH) >> 7;
1815
+ const jumpOffset = current & BinTrieFlags.JUMP_TABLE;
1816
+ if (branchCount === 0) {
1817
+ return jumpOffset !== 0 && char === jumpOffset ? nodeIndex : -1;
1818
+ }
1819
+ if (jumpOffset) {
1820
+ const value = char - jumpOffset;
1821
+ return value < 0 || value >= branchCount ? -1 : decodeTree[nodeIndex + value] - 1;
1822
+ }
1823
+ const packedKeySlots = branchCount + 1 >> 1;
1824
+ let lo = 0;
1825
+ let hi = branchCount - 1;
1826
+ while (lo <= hi) {
1827
+ const mid = lo + hi >>> 1;
1828
+ const slot = mid >> 1;
1829
+ const packed = decodeTree[nodeIndex + slot];
1830
+ const midKey = packed >> (mid & 1) * 8 & 255;
1831
+ if (midKey < char) {
1832
+ lo = mid + 1;
1833
+ } else if (midKey > char) {
1834
+ hi = mid - 1;
1835
+ } else {
1836
+ return decodeTree[nodeIndex + packedKeySlots + mid];
1837
+ }
1838
+ }
1839
+ return -1;
1840
+ }
1841
+
1842
+ // node_modules/.pnpm/htmlparser2@10.1.0/node_modules/htmlparser2/dist/esm/Tokenizer.js
1843
+ var CharCodes2;
1844
+ (function(CharCodes4) {
1845
+ CharCodes4[CharCodes4["Tab"] = 9] = "Tab";
1846
+ CharCodes4[CharCodes4["NewLine"] = 10] = "NewLine";
1847
+ CharCodes4[CharCodes4["FormFeed"] = 12] = "FormFeed";
1848
+ CharCodes4[CharCodes4["CarriageReturn"] = 13] = "CarriageReturn";
1849
+ CharCodes4[CharCodes4["Space"] = 32] = "Space";
1850
+ CharCodes4[CharCodes4["ExclamationMark"] = 33] = "ExclamationMark";
1851
+ CharCodes4[CharCodes4["Number"] = 35] = "Number";
1852
+ CharCodes4[CharCodes4["Amp"] = 38] = "Amp";
1853
+ CharCodes4[CharCodes4["SingleQuote"] = 39] = "SingleQuote";
1854
+ CharCodes4[CharCodes4["DoubleQuote"] = 34] = "DoubleQuote";
1855
+ CharCodes4[CharCodes4["Dash"] = 45] = "Dash";
1856
+ CharCodes4[CharCodes4["Slash"] = 47] = "Slash";
1857
+ CharCodes4[CharCodes4["Zero"] = 48] = "Zero";
1858
+ CharCodes4[CharCodes4["Nine"] = 57] = "Nine";
1859
+ CharCodes4[CharCodes4["Semi"] = 59] = "Semi";
1860
+ CharCodes4[CharCodes4["Lt"] = 60] = "Lt";
1861
+ CharCodes4[CharCodes4["Eq"] = 61] = "Eq";
1862
+ CharCodes4[CharCodes4["Gt"] = 62] = "Gt";
1863
+ CharCodes4[CharCodes4["Questionmark"] = 63] = "Questionmark";
1864
+ CharCodes4[CharCodes4["UpperA"] = 65] = "UpperA";
1865
+ CharCodes4[CharCodes4["LowerA"] = 97] = "LowerA";
1866
+ CharCodes4[CharCodes4["UpperF"] = 70] = "UpperF";
1867
+ CharCodes4[CharCodes4["LowerF"] = 102] = "LowerF";
1868
+ CharCodes4[CharCodes4["UpperZ"] = 90] = "UpperZ";
1869
+ CharCodes4[CharCodes4["LowerZ"] = 122] = "LowerZ";
1870
+ CharCodes4[CharCodes4["LowerX"] = 120] = "LowerX";
1871
+ CharCodes4[CharCodes4["OpeningSquareBracket"] = 91] = "OpeningSquareBracket";
1872
+ })(CharCodes2 || (CharCodes2 = {}));
1873
+ var State;
1874
+ (function(State2) {
1875
+ State2[State2["Text"] = 1] = "Text";
1876
+ State2[State2["BeforeTagName"] = 2] = "BeforeTagName";
1877
+ State2[State2["InTagName"] = 3] = "InTagName";
1878
+ State2[State2["InSelfClosingTag"] = 4] = "InSelfClosingTag";
1879
+ State2[State2["BeforeClosingTagName"] = 5] = "BeforeClosingTagName";
1880
+ State2[State2["InClosingTagName"] = 6] = "InClosingTagName";
1881
+ State2[State2["AfterClosingTagName"] = 7] = "AfterClosingTagName";
1882
+ State2[State2["BeforeAttributeName"] = 8] = "BeforeAttributeName";
1883
+ State2[State2["InAttributeName"] = 9] = "InAttributeName";
1884
+ State2[State2["AfterAttributeName"] = 10] = "AfterAttributeName";
1885
+ State2[State2["BeforeAttributeValue"] = 11] = "BeforeAttributeValue";
1886
+ State2[State2["InAttributeValueDq"] = 12] = "InAttributeValueDq";
1887
+ State2[State2["InAttributeValueSq"] = 13] = "InAttributeValueSq";
1888
+ State2[State2["InAttributeValueNq"] = 14] = "InAttributeValueNq";
1889
+ State2[State2["BeforeDeclaration"] = 15] = "BeforeDeclaration";
1890
+ State2[State2["InDeclaration"] = 16] = "InDeclaration";
1891
+ State2[State2["InProcessingInstruction"] = 17] = "InProcessingInstruction";
1892
+ State2[State2["BeforeComment"] = 18] = "BeforeComment";
1893
+ State2[State2["CDATASequence"] = 19] = "CDATASequence";
1894
+ State2[State2["InSpecialComment"] = 20] = "InSpecialComment";
1895
+ State2[State2["InCommentLike"] = 21] = "InCommentLike";
1896
+ State2[State2["BeforeSpecialS"] = 22] = "BeforeSpecialS";
1897
+ State2[State2["BeforeSpecialT"] = 23] = "BeforeSpecialT";
1898
+ State2[State2["SpecialStartSequence"] = 24] = "SpecialStartSequence";
1899
+ State2[State2["InSpecialTag"] = 25] = "InSpecialTag";
1900
+ State2[State2["InEntity"] = 26] = "InEntity";
1901
+ })(State || (State = {}));
1902
+ function isWhitespace(c) {
1903
+ return c === CharCodes2.Space || c === CharCodes2.NewLine || c === CharCodes2.Tab || c === CharCodes2.FormFeed || c === CharCodes2.CarriageReturn;
1904
+ }
1905
+ function isEndOfTagSection(c) {
1906
+ return c === CharCodes2.Slash || c === CharCodes2.Gt || isWhitespace(c);
1907
+ }
1908
+ function isASCIIAlpha(c) {
1909
+ return c >= CharCodes2.LowerA && c <= CharCodes2.LowerZ || c >= CharCodes2.UpperA && c <= CharCodes2.UpperZ;
1910
+ }
1911
+ var QuoteType;
1912
+ (function(QuoteType2) {
1913
+ QuoteType2[QuoteType2["NoValue"] = 0] = "NoValue";
1914
+ QuoteType2[QuoteType2["Unquoted"] = 1] = "Unquoted";
1915
+ QuoteType2[QuoteType2["Single"] = 2] = "Single";
1916
+ QuoteType2[QuoteType2["Double"] = 3] = "Double";
1917
+ })(QuoteType || (QuoteType = {}));
1918
+ var Sequences = {
1919
+ Cdata: new Uint8Array([67, 68, 65, 84, 65, 91]),
1920
+ // CDATA[
1921
+ CdataEnd: new Uint8Array([93, 93, 62]),
1922
+ // ]]>
1923
+ CommentEnd: new Uint8Array([45, 45, 62]),
1924
+ // `-->`
1925
+ ScriptEnd: new Uint8Array([60, 47, 115, 99, 114, 105, 112, 116]),
1926
+ // `</script`
1927
+ StyleEnd: new Uint8Array([60, 47, 115, 116, 121, 108, 101]),
1928
+ // `</style`
1929
+ TitleEnd: new Uint8Array([60, 47, 116, 105, 116, 108, 101]),
1930
+ // `</title`
1931
+ TextareaEnd: new Uint8Array([
1932
+ 60,
1933
+ 47,
1934
+ 116,
1935
+ 101,
1936
+ 120,
1937
+ 116,
1938
+ 97,
1939
+ 114,
1940
+ 101,
1941
+ 97
1942
+ ]),
1943
+ // `</textarea`
1944
+ XmpEnd: new Uint8Array([60, 47, 120, 109, 112])
1945
+ // `</xmp`
1946
+ };
1947
+ var Tokenizer = class {
1948
+ constructor({ xmlMode = false, decodeEntities = true }, cbs) {
1949
+ this.cbs = cbs;
1950
+ this.state = State.Text;
1951
+ this.buffer = "";
1952
+ this.sectionStart = 0;
1953
+ this.index = 0;
1954
+ this.entityStart = 0;
1955
+ this.baseState = State.Text;
1956
+ this.isSpecial = false;
1957
+ this.running = true;
1958
+ this.offset = 0;
1959
+ this.currentSequence = void 0;
1960
+ this.sequenceIndex = 0;
1961
+ this.xmlMode = xmlMode;
1962
+ this.decodeEntities = decodeEntities;
1963
+ this.entityDecoder = new EntityDecoder(xmlMode ? xmlDecodeTree : htmlDecodeTree, (cp, consumed) => this.emitCodePoint(cp, consumed));
1964
+ }
1965
+ reset() {
1966
+ this.state = State.Text;
1967
+ this.buffer = "";
1968
+ this.sectionStart = 0;
1969
+ this.index = 0;
1970
+ this.baseState = State.Text;
1971
+ this.currentSequence = void 0;
1972
+ this.running = true;
1973
+ this.offset = 0;
1974
+ }
1975
+ write(chunk) {
1976
+ this.offset += this.buffer.length;
1977
+ this.buffer = chunk;
1978
+ this.parse();
1979
+ }
1980
+ end() {
1981
+ if (this.running)
1982
+ this.finish();
1983
+ }
1984
+ pause() {
1985
+ this.running = false;
1986
+ }
1987
+ resume() {
1988
+ this.running = true;
1989
+ if (this.index < this.buffer.length + this.offset) {
1990
+ this.parse();
1991
+ }
1992
+ }
1993
+ stateText(c) {
1994
+ if (c === CharCodes2.Lt || !this.decodeEntities && this.fastForwardTo(CharCodes2.Lt)) {
1995
+ if (this.index > this.sectionStart) {
1996
+ this.cbs.ontext(this.sectionStart, this.index);
1997
+ }
1998
+ this.state = State.BeforeTagName;
1999
+ this.sectionStart = this.index;
2000
+ } else if (this.decodeEntities && c === CharCodes2.Amp) {
2001
+ this.startEntity();
2002
+ }
2003
+ }
2004
+ stateSpecialStartSequence(c) {
2005
+ const isEnd = this.sequenceIndex === this.currentSequence.length;
2006
+ const isMatch = isEnd ? (
2007
+ // If we are at the end of the sequence, make sure the tag name has ended
2008
+ isEndOfTagSection(c)
2009
+ ) : (
2010
+ // Otherwise, do a case-insensitive comparison
2011
+ (c | 32) === this.currentSequence[this.sequenceIndex]
2012
+ );
2013
+ if (!isMatch) {
2014
+ this.isSpecial = false;
2015
+ } else if (!isEnd) {
2016
+ this.sequenceIndex++;
2017
+ return;
2018
+ }
2019
+ this.sequenceIndex = 0;
2020
+ this.state = State.InTagName;
2021
+ this.stateInTagName(c);
2022
+ }
2023
+ /** Look for an end tag. For <title> tags, also decode entities. */
2024
+ stateInSpecialTag(c) {
2025
+ if (this.sequenceIndex === this.currentSequence.length) {
2026
+ if (c === CharCodes2.Gt || isWhitespace(c)) {
2027
+ const endOfText = this.index - this.currentSequence.length;
2028
+ if (this.sectionStart < endOfText) {
2029
+ const actualIndex = this.index;
2030
+ this.index = endOfText;
2031
+ this.cbs.ontext(this.sectionStart, endOfText);
2032
+ this.index = actualIndex;
2033
+ }
2034
+ this.isSpecial = false;
2035
+ this.sectionStart = endOfText + 2;
2036
+ this.stateInClosingTagName(c);
2037
+ return;
2038
+ }
2039
+ this.sequenceIndex = 0;
2040
+ }
2041
+ if ((c | 32) === this.currentSequence[this.sequenceIndex]) {
2042
+ this.sequenceIndex += 1;
2043
+ } else if (this.sequenceIndex === 0) {
2044
+ if (this.currentSequence === Sequences.TitleEnd) {
2045
+ if (this.decodeEntities && c === CharCodes2.Amp) {
2046
+ this.startEntity();
2047
+ }
2048
+ } else if (this.fastForwardTo(CharCodes2.Lt)) {
2049
+ this.sequenceIndex = 1;
2050
+ }
2051
+ } else {
2052
+ this.sequenceIndex = Number(c === CharCodes2.Lt);
2053
+ }
2054
+ }
2055
+ stateCDATASequence(c) {
2056
+ if (c === Sequences.Cdata[this.sequenceIndex]) {
2057
+ if (++this.sequenceIndex === Sequences.Cdata.length) {
2058
+ this.state = State.InCommentLike;
2059
+ this.currentSequence = Sequences.CdataEnd;
2060
+ this.sequenceIndex = 0;
2061
+ this.sectionStart = this.index + 1;
2062
+ }
2063
+ } else {
2064
+ this.sequenceIndex = 0;
2065
+ this.state = State.InDeclaration;
2066
+ this.stateInDeclaration(c);
2067
+ }
2068
+ }
2069
+ /**
2070
+ * When we wait for one specific character, we can speed things up
2071
+ * by skipping through the buffer until we find it.
2072
+ *
2073
+ * @returns Whether the character was found.
2074
+ */
2075
+ fastForwardTo(c) {
2076
+ while (++this.index < this.buffer.length + this.offset) {
2077
+ if (this.buffer.charCodeAt(this.index - this.offset) === c) {
2078
+ return true;
2079
+ }
2080
+ }
2081
+ this.index = this.buffer.length + this.offset - 1;
2082
+ return false;
2083
+ }
2084
+ /**
2085
+ * Comments and CDATA end with `-->` and `]]>`.
2086
+ *
2087
+ * Their common qualities are:
2088
+ * - Their end sequences have a distinct character they start with.
2089
+ * - That character is then repeated, so we have to check multiple repeats.
2090
+ * - All characters but the start character of the sequence can be skipped.
2091
+ */
2092
+ stateInCommentLike(c) {
2093
+ if (c === this.currentSequence[this.sequenceIndex]) {
2094
+ if (++this.sequenceIndex === this.currentSequence.length) {
2095
+ if (this.currentSequence === Sequences.CdataEnd) {
2096
+ this.cbs.oncdata(this.sectionStart, this.index, 2);
2097
+ } else {
2098
+ this.cbs.oncomment(this.sectionStart, this.index, 2);
2099
+ }
2100
+ this.sequenceIndex = 0;
2101
+ this.sectionStart = this.index + 1;
2102
+ this.state = State.Text;
2103
+ }
2104
+ } else if (this.sequenceIndex === 0) {
2105
+ if (this.fastForwardTo(this.currentSequence[0])) {
2106
+ this.sequenceIndex = 1;
2107
+ }
2108
+ } else if (c !== this.currentSequence[this.sequenceIndex - 1]) {
2109
+ this.sequenceIndex = 0;
2110
+ }
2111
+ }
2112
+ /**
2113
+ * HTML only allows ASCII alpha characters (a-z and A-Z) at the beginning of a tag name.
2114
+ *
2115
+ * XML allows a lot more characters here (@see https://www.w3.org/TR/REC-xml/#NT-NameStartChar).
2116
+ * We allow anything that wouldn't end the tag.
2117
+ */
2118
+ isTagStartChar(c) {
2119
+ return this.xmlMode ? !isEndOfTagSection(c) : isASCIIAlpha(c);
2120
+ }
2121
+ startSpecial(sequence, offset) {
2122
+ this.isSpecial = true;
2123
+ this.currentSequence = sequence;
2124
+ this.sequenceIndex = offset;
2125
+ this.state = State.SpecialStartSequence;
2126
+ }
2127
+ stateBeforeTagName(c) {
2128
+ if (c === CharCodes2.ExclamationMark) {
2129
+ this.state = State.BeforeDeclaration;
2130
+ this.sectionStart = this.index + 1;
2131
+ } else if (c === CharCodes2.Questionmark) {
2132
+ this.state = State.InProcessingInstruction;
2133
+ this.sectionStart = this.index + 1;
2134
+ } else if (this.isTagStartChar(c)) {
2135
+ const lower = c | 32;
2136
+ this.sectionStart = this.index;
2137
+ if (this.xmlMode) {
2138
+ this.state = State.InTagName;
2139
+ } else if (lower === Sequences.ScriptEnd[2]) {
2140
+ this.state = State.BeforeSpecialS;
2141
+ } else if (lower === Sequences.TitleEnd[2] || lower === Sequences.XmpEnd[2]) {
2142
+ this.state = State.BeforeSpecialT;
2143
+ } else {
2144
+ this.state = State.InTagName;
2145
+ }
2146
+ } else if (c === CharCodes2.Slash) {
2147
+ this.state = State.BeforeClosingTagName;
2148
+ } else {
2149
+ this.state = State.Text;
2150
+ this.stateText(c);
2151
+ }
2152
+ }
2153
+ stateInTagName(c) {
2154
+ if (isEndOfTagSection(c)) {
2155
+ this.cbs.onopentagname(this.sectionStart, this.index);
2156
+ this.sectionStart = -1;
2157
+ this.state = State.BeforeAttributeName;
2158
+ this.stateBeforeAttributeName(c);
2159
+ }
2160
+ }
2161
+ stateBeforeClosingTagName(c) {
2162
+ if (isWhitespace(c)) {
2163
+ } else if (c === CharCodes2.Gt) {
2164
+ this.state = State.Text;
2165
+ } else {
2166
+ this.state = this.isTagStartChar(c) ? State.InClosingTagName : State.InSpecialComment;
2167
+ this.sectionStart = this.index;
2168
+ }
2169
+ }
2170
+ stateInClosingTagName(c) {
2171
+ if (c === CharCodes2.Gt || isWhitespace(c)) {
2172
+ this.cbs.onclosetag(this.sectionStart, this.index);
2173
+ this.sectionStart = -1;
2174
+ this.state = State.AfterClosingTagName;
2175
+ this.stateAfterClosingTagName(c);
2176
+ }
2177
+ }
2178
+ stateAfterClosingTagName(c) {
2179
+ if (c === CharCodes2.Gt || this.fastForwardTo(CharCodes2.Gt)) {
2180
+ this.state = State.Text;
2181
+ this.sectionStart = this.index + 1;
2182
+ }
2183
+ }
2184
+ stateBeforeAttributeName(c) {
2185
+ if (c === CharCodes2.Gt) {
2186
+ this.cbs.onopentagend(this.index);
2187
+ if (this.isSpecial) {
2188
+ this.state = State.InSpecialTag;
2189
+ this.sequenceIndex = 0;
2190
+ } else {
2191
+ this.state = State.Text;
2192
+ }
2193
+ this.sectionStart = this.index + 1;
2194
+ } else if (c === CharCodes2.Slash) {
2195
+ this.state = State.InSelfClosingTag;
2196
+ } else if (!isWhitespace(c)) {
2197
+ this.state = State.InAttributeName;
2198
+ this.sectionStart = this.index;
2199
+ }
2200
+ }
2201
+ stateInSelfClosingTag(c) {
2202
+ if (c === CharCodes2.Gt) {
2203
+ this.cbs.onselfclosingtag(this.index);
2204
+ this.state = State.Text;
2205
+ this.sectionStart = this.index + 1;
2206
+ this.isSpecial = false;
2207
+ } else if (!isWhitespace(c)) {
2208
+ this.state = State.BeforeAttributeName;
2209
+ this.stateBeforeAttributeName(c);
2210
+ }
2211
+ }
2212
+ stateInAttributeName(c) {
2213
+ if (c === CharCodes2.Eq || isEndOfTagSection(c)) {
2214
+ this.cbs.onattribname(this.sectionStart, this.index);
2215
+ this.sectionStart = this.index;
2216
+ this.state = State.AfterAttributeName;
2217
+ this.stateAfterAttributeName(c);
2218
+ }
2219
+ }
2220
+ stateAfterAttributeName(c) {
2221
+ if (c === CharCodes2.Eq) {
2222
+ this.state = State.BeforeAttributeValue;
2223
+ } else if (c === CharCodes2.Slash || c === CharCodes2.Gt) {
2224
+ this.cbs.onattribend(QuoteType.NoValue, this.sectionStart);
2225
+ this.sectionStart = -1;
2226
+ this.state = State.BeforeAttributeName;
2227
+ this.stateBeforeAttributeName(c);
2228
+ } else if (!isWhitespace(c)) {
2229
+ this.cbs.onattribend(QuoteType.NoValue, this.sectionStart);
2230
+ this.state = State.InAttributeName;
2231
+ this.sectionStart = this.index;
2232
+ }
2233
+ }
2234
+ stateBeforeAttributeValue(c) {
2235
+ if (c === CharCodes2.DoubleQuote) {
2236
+ this.state = State.InAttributeValueDq;
2237
+ this.sectionStart = this.index + 1;
2238
+ } else if (c === CharCodes2.SingleQuote) {
2239
+ this.state = State.InAttributeValueSq;
2240
+ this.sectionStart = this.index + 1;
2241
+ } else if (!isWhitespace(c)) {
2242
+ this.sectionStart = this.index;
2243
+ this.state = State.InAttributeValueNq;
2244
+ this.stateInAttributeValueNoQuotes(c);
2245
+ }
2246
+ }
2247
+ handleInAttributeValue(c, quote2) {
2248
+ if (c === quote2 || !this.decodeEntities && this.fastForwardTo(quote2)) {
2249
+ this.cbs.onattribdata(this.sectionStart, this.index);
2250
+ this.sectionStart = -1;
2251
+ this.cbs.onattribend(quote2 === CharCodes2.DoubleQuote ? QuoteType.Double : QuoteType.Single, this.index + 1);
2252
+ this.state = State.BeforeAttributeName;
2253
+ } else if (this.decodeEntities && c === CharCodes2.Amp) {
2254
+ this.startEntity();
2255
+ }
2256
+ }
2257
+ stateInAttributeValueDoubleQuotes(c) {
2258
+ this.handleInAttributeValue(c, CharCodes2.DoubleQuote);
2259
+ }
2260
+ stateInAttributeValueSingleQuotes(c) {
2261
+ this.handleInAttributeValue(c, CharCodes2.SingleQuote);
2262
+ }
2263
+ stateInAttributeValueNoQuotes(c) {
2264
+ if (isWhitespace(c) || c === CharCodes2.Gt) {
2265
+ this.cbs.onattribdata(this.sectionStart, this.index);
2266
+ this.sectionStart = -1;
2267
+ this.cbs.onattribend(QuoteType.Unquoted, this.index);
2268
+ this.state = State.BeforeAttributeName;
2269
+ this.stateBeforeAttributeName(c);
2270
+ } else if (this.decodeEntities && c === CharCodes2.Amp) {
2271
+ this.startEntity();
2272
+ }
2273
+ }
2274
+ stateBeforeDeclaration(c) {
2275
+ if (c === CharCodes2.OpeningSquareBracket) {
2276
+ this.state = State.CDATASequence;
2277
+ this.sequenceIndex = 0;
2278
+ } else {
2279
+ this.state = c === CharCodes2.Dash ? State.BeforeComment : State.InDeclaration;
2280
+ }
2281
+ }
2282
+ stateInDeclaration(c) {
2283
+ if (c === CharCodes2.Gt || this.fastForwardTo(CharCodes2.Gt)) {
2284
+ this.cbs.ondeclaration(this.sectionStart, this.index);
2285
+ this.state = State.Text;
2286
+ this.sectionStart = this.index + 1;
2287
+ }
2288
+ }
2289
+ stateInProcessingInstruction(c) {
2290
+ if (c === CharCodes2.Gt || this.fastForwardTo(CharCodes2.Gt)) {
2291
+ this.cbs.onprocessinginstruction(this.sectionStart, this.index);
2292
+ this.state = State.Text;
2293
+ this.sectionStart = this.index + 1;
2294
+ }
2295
+ }
2296
+ stateBeforeComment(c) {
2297
+ if (c === CharCodes2.Dash) {
2298
+ this.state = State.InCommentLike;
2299
+ this.currentSequence = Sequences.CommentEnd;
2300
+ this.sequenceIndex = 2;
2301
+ this.sectionStart = this.index + 1;
2302
+ } else {
2303
+ this.state = State.InDeclaration;
2304
+ }
2305
+ }
2306
+ stateInSpecialComment(c) {
2307
+ if (c === CharCodes2.Gt || this.fastForwardTo(CharCodes2.Gt)) {
2308
+ this.cbs.oncomment(this.sectionStart, this.index, 0);
2309
+ this.state = State.Text;
2310
+ this.sectionStart = this.index + 1;
2311
+ }
2312
+ }
2313
+ stateBeforeSpecialS(c) {
2314
+ const lower = c | 32;
2315
+ if (lower === Sequences.ScriptEnd[3]) {
2316
+ this.startSpecial(Sequences.ScriptEnd, 4);
2317
+ } else if (lower === Sequences.StyleEnd[3]) {
2318
+ this.startSpecial(Sequences.StyleEnd, 4);
2319
+ } else {
2320
+ this.state = State.InTagName;
2321
+ this.stateInTagName(c);
2322
+ }
2323
+ }
2324
+ stateBeforeSpecialT(c) {
2325
+ const lower = c | 32;
2326
+ switch (lower) {
2327
+ case Sequences.TitleEnd[3]: {
2328
+ this.startSpecial(Sequences.TitleEnd, 4);
2329
+ break;
2330
+ }
2331
+ case Sequences.TextareaEnd[3]: {
2332
+ this.startSpecial(Sequences.TextareaEnd, 4);
2333
+ break;
2334
+ }
2335
+ case Sequences.XmpEnd[3]: {
2336
+ this.startSpecial(Sequences.XmpEnd, 4);
2337
+ break;
2338
+ }
2339
+ default: {
2340
+ this.state = State.InTagName;
2341
+ this.stateInTagName(c);
2342
+ }
2343
+ }
2344
+ }
2345
+ startEntity() {
2346
+ this.baseState = this.state;
2347
+ this.state = State.InEntity;
2348
+ this.entityStart = this.index;
2349
+ this.entityDecoder.startEntity(this.xmlMode ? DecodingMode.Strict : this.baseState === State.Text || this.baseState === State.InSpecialTag ? DecodingMode.Legacy : DecodingMode.Attribute);
2350
+ }
2351
+ stateInEntity() {
2352
+ const indexInBuffer = this.index - this.offset;
2353
+ const length = this.entityDecoder.write(this.buffer, indexInBuffer);
2354
+ if (length >= 0) {
2355
+ this.state = this.baseState;
2356
+ if (length === 0) {
2357
+ this.index -= 1;
2358
+ }
2359
+ } else {
2360
+ if (indexInBuffer < this.buffer.length && this.buffer.charCodeAt(indexInBuffer) === CharCodes2.Amp) {
2361
+ this.state = this.baseState;
2362
+ this.index -= 1;
2363
+ return;
2364
+ }
2365
+ this.index = this.offset + this.buffer.length - 1;
2366
+ }
2367
+ }
2368
+ /**
2369
+ * Remove data that has already been consumed from the buffer.
2370
+ */
2371
+ cleanup() {
2372
+ if (this.running && this.sectionStart !== this.index) {
2373
+ if (this.state === State.Text || this.state === State.InSpecialTag && this.sequenceIndex === 0) {
2374
+ this.cbs.ontext(this.sectionStart, this.index);
2375
+ this.sectionStart = this.index;
2376
+ } else if (this.state === State.InAttributeValueDq || this.state === State.InAttributeValueSq || this.state === State.InAttributeValueNq) {
2377
+ this.cbs.onattribdata(this.sectionStart, this.index);
2378
+ this.sectionStart = this.index;
2379
+ }
2380
+ }
2381
+ }
2382
+ shouldContinue() {
2383
+ return this.index < this.buffer.length + this.offset && this.running;
2384
+ }
2385
+ /**
2386
+ * Iterates through the buffer, calling the function corresponding to the current state.
2387
+ *
2388
+ * States that are more likely to be hit are higher up, as a performance improvement.
2389
+ */
2390
+ parse() {
2391
+ while (this.shouldContinue()) {
2392
+ const c = this.buffer.charCodeAt(this.index - this.offset);
2393
+ switch (this.state) {
2394
+ case State.Text: {
2395
+ this.stateText(c);
2396
+ break;
2397
+ }
2398
+ case State.SpecialStartSequence: {
2399
+ this.stateSpecialStartSequence(c);
2400
+ break;
2401
+ }
2402
+ case State.InSpecialTag: {
2403
+ this.stateInSpecialTag(c);
2404
+ break;
2405
+ }
2406
+ case State.CDATASequence: {
2407
+ this.stateCDATASequence(c);
2408
+ break;
2409
+ }
2410
+ case State.InAttributeValueDq: {
2411
+ this.stateInAttributeValueDoubleQuotes(c);
2412
+ break;
2413
+ }
2414
+ case State.InAttributeName: {
2415
+ this.stateInAttributeName(c);
2416
+ break;
2417
+ }
2418
+ case State.InCommentLike: {
2419
+ this.stateInCommentLike(c);
2420
+ break;
2421
+ }
2422
+ case State.InSpecialComment: {
2423
+ this.stateInSpecialComment(c);
2424
+ break;
2425
+ }
2426
+ case State.BeforeAttributeName: {
2427
+ this.stateBeforeAttributeName(c);
2428
+ break;
2429
+ }
2430
+ case State.InTagName: {
2431
+ this.stateInTagName(c);
2432
+ break;
2433
+ }
2434
+ case State.InClosingTagName: {
2435
+ this.stateInClosingTagName(c);
2436
+ break;
2437
+ }
2438
+ case State.BeforeTagName: {
2439
+ this.stateBeforeTagName(c);
2440
+ break;
2441
+ }
2442
+ case State.AfterAttributeName: {
2443
+ this.stateAfterAttributeName(c);
2444
+ break;
2445
+ }
2446
+ case State.InAttributeValueSq: {
2447
+ this.stateInAttributeValueSingleQuotes(c);
2448
+ break;
2449
+ }
2450
+ case State.BeforeAttributeValue: {
2451
+ this.stateBeforeAttributeValue(c);
2452
+ break;
2453
+ }
2454
+ case State.BeforeClosingTagName: {
2455
+ this.stateBeforeClosingTagName(c);
2456
+ break;
2457
+ }
2458
+ case State.AfterClosingTagName: {
2459
+ this.stateAfterClosingTagName(c);
2460
+ break;
2461
+ }
2462
+ case State.BeforeSpecialS: {
2463
+ this.stateBeforeSpecialS(c);
2464
+ break;
2465
+ }
2466
+ case State.BeforeSpecialT: {
2467
+ this.stateBeforeSpecialT(c);
2468
+ break;
2469
+ }
2470
+ case State.InAttributeValueNq: {
2471
+ this.stateInAttributeValueNoQuotes(c);
2472
+ break;
2473
+ }
2474
+ case State.InSelfClosingTag: {
2475
+ this.stateInSelfClosingTag(c);
2476
+ break;
2477
+ }
2478
+ case State.InDeclaration: {
2479
+ this.stateInDeclaration(c);
2480
+ break;
2481
+ }
2482
+ case State.BeforeDeclaration: {
2483
+ this.stateBeforeDeclaration(c);
2484
+ break;
2485
+ }
2486
+ case State.BeforeComment: {
2487
+ this.stateBeforeComment(c);
2488
+ break;
2489
+ }
2490
+ case State.InProcessingInstruction: {
2491
+ this.stateInProcessingInstruction(c);
2492
+ break;
2493
+ }
2494
+ case State.InEntity: {
2495
+ this.stateInEntity();
2496
+ break;
2497
+ }
2498
+ }
2499
+ this.index++;
2500
+ }
2501
+ this.cleanup();
2502
+ }
2503
+ finish() {
2504
+ if (this.state === State.InEntity) {
2505
+ this.entityDecoder.end();
2506
+ this.state = this.baseState;
2507
+ }
2508
+ this.handleTrailingData();
2509
+ this.cbs.onend();
2510
+ }
2511
+ /** Handle any trailing data. */
2512
+ handleTrailingData() {
2513
+ const endIndex = this.buffer.length + this.offset;
2514
+ if (this.sectionStart >= endIndex) {
2515
+ return;
2516
+ }
2517
+ if (this.state === State.InCommentLike) {
2518
+ if (this.currentSequence === Sequences.CdataEnd) {
2519
+ this.cbs.oncdata(this.sectionStart, endIndex, 0);
2520
+ } else {
2521
+ this.cbs.oncomment(this.sectionStart, endIndex, 0);
2522
+ }
2523
+ } else if (this.state === State.InTagName || this.state === State.BeforeAttributeName || this.state === State.BeforeAttributeValue || this.state === State.AfterAttributeName || this.state === State.InAttributeName || this.state === State.InAttributeValueSq || this.state === State.InAttributeValueDq || this.state === State.InAttributeValueNq || this.state === State.InClosingTagName) {
2524
+ } else {
2525
+ this.cbs.ontext(this.sectionStart, endIndex);
2526
+ }
2527
+ }
2528
+ emitCodePoint(cp, consumed) {
2529
+ if (this.baseState !== State.Text && this.baseState !== State.InSpecialTag) {
2530
+ if (this.sectionStart < this.entityStart) {
2531
+ this.cbs.onattribdata(this.sectionStart, this.entityStart);
2532
+ }
2533
+ this.sectionStart = this.entityStart + consumed;
2534
+ this.index = this.sectionStart - 1;
2535
+ this.cbs.onattribentity(cp);
2536
+ } else {
2537
+ if (this.sectionStart < this.entityStart) {
2538
+ this.cbs.ontext(this.sectionStart, this.entityStart);
2539
+ }
2540
+ this.sectionStart = this.entityStart + consumed;
2541
+ this.index = this.sectionStart - 1;
2542
+ this.cbs.ontextentity(cp, this.sectionStart);
2543
+ }
2544
+ }
2545
+ };
2546
+
2547
+ // node_modules/.pnpm/htmlparser2@10.1.0/node_modules/htmlparser2/dist/esm/Parser.js
2548
+ var formTags = /* @__PURE__ */ new Set([
2549
+ "input",
2550
+ "option",
2551
+ "optgroup",
2552
+ "select",
2553
+ "button",
2554
+ "datalist",
2555
+ "textarea"
2556
+ ]);
2557
+ var pTag = /* @__PURE__ */ new Set(["p"]);
2558
+ var tableSectionTags = /* @__PURE__ */ new Set(["thead", "tbody"]);
2559
+ var ddtTags = /* @__PURE__ */ new Set(["dd", "dt"]);
2560
+ var rtpTags = /* @__PURE__ */ new Set(["rt", "rp"]);
2561
+ var openImpliesClose = /* @__PURE__ */ new Map([
2562
+ ["tr", /* @__PURE__ */ new Set(["tr", "th", "td"])],
2563
+ ["th", /* @__PURE__ */ new Set(["th"])],
2564
+ ["td", /* @__PURE__ */ new Set(["thead", "th", "td"])],
2565
+ ["body", /* @__PURE__ */ new Set(["head", "link", "script"])],
2566
+ ["li", /* @__PURE__ */ new Set(["li"])],
2567
+ ["p", pTag],
2568
+ ["h1", pTag],
2569
+ ["h2", pTag],
2570
+ ["h3", pTag],
2571
+ ["h4", pTag],
2572
+ ["h5", pTag],
2573
+ ["h6", pTag],
2574
+ ["select", formTags],
2575
+ ["input", formTags],
2576
+ ["output", formTags],
2577
+ ["button", formTags],
2578
+ ["datalist", formTags],
2579
+ ["textarea", formTags],
2580
+ ["option", /* @__PURE__ */ new Set(["option"])],
2581
+ ["optgroup", /* @__PURE__ */ new Set(["optgroup", "option"])],
2582
+ ["dd", ddtTags],
2583
+ ["dt", ddtTags],
2584
+ ["address", pTag],
2585
+ ["article", pTag],
2586
+ ["aside", pTag],
2587
+ ["blockquote", pTag],
2588
+ ["details", pTag],
2589
+ ["div", pTag],
2590
+ ["dl", pTag],
2591
+ ["fieldset", pTag],
2592
+ ["figcaption", pTag],
2593
+ ["figure", pTag],
2594
+ ["footer", pTag],
2595
+ ["form", pTag],
2596
+ ["header", pTag],
2597
+ ["hr", pTag],
2598
+ ["main", pTag],
2599
+ ["nav", pTag],
2600
+ ["ol", pTag],
2601
+ ["pre", pTag],
2602
+ ["section", pTag],
2603
+ ["table", pTag],
2604
+ ["ul", pTag],
2605
+ ["rt", rtpTags],
2606
+ ["rp", rtpTags],
2607
+ ["tbody", tableSectionTags],
2608
+ ["tfoot", tableSectionTags]
2609
+ ]);
2610
+ var voidElements = /* @__PURE__ */ new Set([
2611
+ "area",
2612
+ "base",
2613
+ "basefont",
2614
+ "br",
2615
+ "col",
2616
+ "command",
2617
+ "embed",
2618
+ "frame",
2619
+ "hr",
2620
+ "img",
2621
+ "input",
2622
+ "isindex",
2623
+ "keygen",
2624
+ "link",
2625
+ "meta",
2626
+ "param",
2627
+ "source",
2628
+ "track",
2629
+ "wbr"
2630
+ ]);
2631
+ var foreignContextElements = /* @__PURE__ */ new Set(["math", "svg"]);
2632
+ var htmlIntegrationElements = /* @__PURE__ */ new Set([
2633
+ "mi",
2634
+ "mo",
2635
+ "mn",
2636
+ "ms",
2637
+ "mtext",
2638
+ "annotation-xml",
2639
+ "foreignobject",
2640
+ "desc",
2641
+ "title"
2642
+ ]);
2643
+ var reNameEnd = /\s|\//;
2644
+ var Parser = class {
2645
+ constructor(cbs, options = {}) {
2646
+ var _a3, _b, _c, _d, _e, _f;
2647
+ this.options = options;
2648
+ this.startIndex = 0;
2649
+ this.endIndex = 0;
2650
+ this.openTagStart = 0;
2651
+ this.tagname = "";
2652
+ this.attribname = "";
2653
+ this.attribvalue = "";
2654
+ this.attribs = null;
2655
+ this.stack = [];
2656
+ this.buffers = [];
2657
+ this.bufferOffset = 0;
2658
+ this.writeIndex = 0;
2659
+ this.ended = false;
2660
+ this.cbs = cbs !== null && cbs !== void 0 ? cbs : {};
2661
+ this.htmlMode = !this.options.xmlMode;
2662
+ this.lowerCaseTagNames = (_a3 = options.lowerCaseTags) !== null && _a3 !== void 0 ? _a3 : this.htmlMode;
2663
+ this.lowerCaseAttributeNames = (_b = options.lowerCaseAttributeNames) !== null && _b !== void 0 ? _b : this.htmlMode;
2664
+ this.recognizeSelfClosing = (_c = options.recognizeSelfClosing) !== null && _c !== void 0 ? _c : !this.htmlMode;
2665
+ this.tokenizer = new ((_d = options.Tokenizer) !== null && _d !== void 0 ? _d : Tokenizer)(this.options, this);
2666
+ this.foreignContext = [!this.htmlMode];
2667
+ (_f = (_e = this.cbs).onparserinit) === null || _f === void 0 ? void 0 : _f.call(_e, this);
2668
+ }
2669
+ // Tokenizer event handlers
2670
+ /** @internal */
2671
+ ontext(start, endIndex) {
2672
+ var _a3, _b;
2673
+ const data = this.getSlice(start, endIndex);
2674
+ this.endIndex = endIndex - 1;
2675
+ (_b = (_a3 = this.cbs).ontext) === null || _b === void 0 ? void 0 : _b.call(_a3, data);
2676
+ this.startIndex = endIndex;
2677
+ }
2678
+ /** @internal */
2679
+ ontextentity(cp, endIndex) {
2680
+ var _a3, _b;
2681
+ this.endIndex = endIndex - 1;
2682
+ (_b = (_a3 = this.cbs).ontext) === null || _b === void 0 ? void 0 : _b.call(_a3, fromCodePoint(cp));
2683
+ this.startIndex = endIndex;
2684
+ }
2685
+ /**
2686
+ * Checks if the current tag is a void element. Override this if you want
2687
+ * to specify your own additional void elements.
2688
+ */
2689
+ isVoidElement(name) {
2690
+ return this.htmlMode && voidElements.has(name);
2691
+ }
2692
+ /** @internal */
2693
+ onopentagname(start, endIndex) {
2694
+ this.endIndex = endIndex;
2695
+ let name = this.getSlice(start, endIndex);
2696
+ if (this.lowerCaseTagNames) {
2697
+ name = name.toLowerCase();
2698
+ }
2699
+ this.emitOpenTag(name);
2700
+ }
2701
+ emitOpenTag(name) {
2702
+ var _a3, _b, _c, _d;
2703
+ this.openTagStart = this.startIndex;
2704
+ this.tagname = name;
2705
+ const impliesClose = this.htmlMode && openImpliesClose.get(name);
2706
+ if (impliesClose) {
2707
+ while (this.stack.length > 0 && impliesClose.has(this.stack[0])) {
2708
+ const element = this.stack.shift();
2709
+ (_b = (_a3 = this.cbs).onclosetag) === null || _b === void 0 ? void 0 : _b.call(_a3, element, true);
2710
+ }
2711
+ }
2712
+ if (!this.isVoidElement(name)) {
2713
+ this.stack.unshift(name);
2714
+ if (this.htmlMode) {
2715
+ if (foreignContextElements.has(name)) {
2716
+ this.foreignContext.unshift(true);
2717
+ } else if (htmlIntegrationElements.has(name)) {
2718
+ this.foreignContext.unshift(false);
2719
+ }
2720
+ }
2721
+ }
2722
+ (_d = (_c = this.cbs).onopentagname) === null || _d === void 0 ? void 0 : _d.call(_c, name);
2723
+ if (this.cbs.onopentag)
2724
+ this.attribs = {};
2725
+ }
2726
+ endOpenTag(isImplied) {
2727
+ var _a3, _b;
2728
+ this.startIndex = this.openTagStart;
2729
+ if (this.attribs) {
2730
+ (_b = (_a3 = this.cbs).onopentag) === null || _b === void 0 ? void 0 : _b.call(_a3, this.tagname, this.attribs, isImplied);
2731
+ this.attribs = null;
2732
+ }
2733
+ if (this.cbs.onclosetag && this.isVoidElement(this.tagname)) {
2734
+ this.cbs.onclosetag(this.tagname, true);
2735
+ }
2736
+ this.tagname = "";
2737
+ }
2738
+ /** @internal */
2739
+ onopentagend(endIndex) {
2740
+ this.endIndex = endIndex;
2741
+ this.endOpenTag(false);
2742
+ this.startIndex = endIndex + 1;
2743
+ }
2744
+ /** @internal */
2745
+ onclosetag(start, endIndex) {
2746
+ var _a3, _b, _c, _d, _e, _f, _g, _h;
2747
+ this.endIndex = endIndex;
2748
+ let name = this.getSlice(start, endIndex);
2749
+ if (this.lowerCaseTagNames) {
2750
+ name = name.toLowerCase();
2751
+ }
2752
+ if (this.htmlMode && (foreignContextElements.has(name) || htmlIntegrationElements.has(name))) {
2753
+ this.foreignContext.shift();
2754
+ }
2755
+ if (!this.isVoidElement(name)) {
2756
+ const pos = this.stack.indexOf(name);
2757
+ if (pos !== -1) {
2758
+ for (let index = 0; index <= pos; index++) {
2759
+ const element = this.stack.shift();
2760
+ (_b = (_a3 = this.cbs).onclosetag) === null || _b === void 0 ? void 0 : _b.call(_a3, element, index !== pos);
2761
+ }
2762
+ } else if (this.htmlMode && name === "p") {
2763
+ this.emitOpenTag("p");
2764
+ this.closeCurrentTag(true);
2765
+ }
2766
+ } else if (this.htmlMode && name === "br") {
2767
+ (_d = (_c = this.cbs).onopentagname) === null || _d === void 0 ? void 0 : _d.call(_c, "br");
2768
+ (_f = (_e = this.cbs).onopentag) === null || _f === void 0 ? void 0 : _f.call(_e, "br", {}, true);
2769
+ (_h = (_g = this.cbs).onclosetag) === null || _h === void 0 ? void 0 : _h.call(_g, "br", false);
2770
+ }
2771
+ this.startIndex = endIndex + 1;
2772
+ }
2773
+ /** @internal */
2774
+ onselfclosingtag(endIndex) {
2775
+ this.endIndex = endIndex;
2776
+ if (this.recognizeSelfClosing || this.foreignContext[0]) {
2777
+ this.closeCurrentTag(false);
2778
+ this.startIndex = endIndex + 1;
2779
+ } else {
2780
+ this.onopentagend(endIndex);
2781
+ }
2782
+ }
2783
+ closeCurrentTag(isOpenImplied) {
2784
+ var _a3, _b;
2785
+ const name = this.tagname;
2786
+ this.endOpenTag(isOpenImplied);
2787
+ if (this.stack[0] === name) {
2788
+ (_b = (_a3 = this.cbs).onclosetag) === null || _b === void 0 ? void 0 : _b.call(_a3, name, !isOpenImplied);
2789
+ this.stack.shift();
2790
+ }
2791
+ }
2792
+ /** @internal */
2793
+ onattribname(start, endIndex) {
2794
+ this.startIndex = start;
2795
+ const name = this.getSlice(start, endIndex);
2796
+ this.attribname = this.lowerCaseAttributeNames ? name.toLowerCase() : name;
2797
+ }
2798
+ /** @internal */
2799
+ onattribdata(start, endIndex) {
2800
+ this.attribvalue += this.getSlice(start, endIndex);
2801
+ }
2802
+ /** @internal */
2803
+ onattribentity(cp) {
2804
+ this.attribvalue += fromCodePoint(cp);
2805
+ }
2806
+ /** @internal */
2807
+ onattribend(quote2, endIndex) {
2808
+ var _a3, _b;
2809
+ this.endIndex = endIndex;
2810
+ (_b = (_a3 = this.cbs).onattribute) === null || _b === void 0 ? void 0 : _b.call(_a3, this.attribname, this.attribvalue, quote2 === QuoteType.Double ? '"' : quote2 === QuoteType.Single ? "'" : quote2 === QuoteType.NoValue ? void 0 : null);
2811
+ if (this.attribs && !Object.prototype.hasOwnProperty.call(this.attribs, this.attribname)) {
2812
+ this.attribs[this.attribname] = this.attribvalue;
2813
+ }
2814
+ this.attribvalue = "";
2815
+ }
2816
+ getInstructionName(value) {
2817
+ const index = value.search(reNameEnd);
2818
+ let name = index < 0 ? value : value.substr(0, index);
2819
+ if (this.lowerCaseTagNames) {
2820
+ name = name.toLowerCase();
2821
+ }
2822
+ return name;
2823
+ }
2824
+ /** @internal */
2825
+ ondeclaration(start, endIndex) {
2826
+ this.endIndex = endIndex;
2827
+ const value = this.getSlice(start, endIndex);
2828
+ if (this.cbs.onprocessinginstruction) {
2829
+ const name = this.getInstructionName(value);
2830
+ this.cbs.onprocessinginstruction(`!${name}`, `!${value}`);
2831
+ }
2832
+ this.startIndex = endIndex + 1;
2833
+ }
2834
+ /** @internal */
2835
+ onprocessinginstruction(start, endIndex) {
2836
+ this.endIndex = endIndex;
2837
+ const value = this.getSlice(start, endIndex);
2838
+ if (this.cbs.onprocessinginstruction) {
2839
+ const name = this.getInstructionName(value);
2840
+ this.cbs.onprocessinginstruction(`?${name}`, `?${value}`);
2841
+ }
2842
+ this.startIndex = endIndex + 1;
2843
+ }
2844
+ /** @internal */
2845
+ oncomment(start, endIndex, offset) {
2846
+ var _a3, _b, _c, _d;
2847
+ this.endIndex = endIndex;
2848
+ (_b = (_a3 = this.cbs).oncomment) === null || _b === void 0 ? void 0 : _b.call(_a3, this.getSlice(start, endIndex - offset));
2849
+ (_d = (_c = this.cbs).oncommentend) === null || _d === void 0 ? void 0 : _d.call(_c);
2850
+ this.startIndex = endIndex + 1;
2851
+ }
2852
+ /** @internal */
2853
+ oncdata(start, endIndex, offset) {
2854
+ var _a3, _b, _c, _d, _e, _f, _g, _h, _j, _k;
2855
+ this.endIndex = endIndex;
2856
+ const value = this.getSlice(start, endIndex - offset);
2857
+ if (!this.htmlMode || this.options.recognizeCDATA) {
2858
+ (_b = (_a3 = this.cbs).oncdatastart) === null || _b === void 0 ? void 0 : _b.call(_a3);
2859
+ (_d = (_c = this.cbs).ontext) === null || _d === void 0 ? void 0 : _d.call(_c, value);
2860
+ (_f = (_e = this.cbs).oncdataend) === null || _f === void 0 ? void 0 : _f.call(_e);
2861
+ } else {
2862
+ (_h = (_g = this.cbs).oncomment) === null || _h === void 0 ? void 0 : _h.call(_g, `[CDATA[${value}]]`);
2863
+ (_k = (_j = this.cbs).oncommentend) === null || _k === void 0 ? void 0 : _k.call(_j);
2864
+ }
2865
+ this.startIndex = endIndex + 1;
2866
+ }
2867
+ /** @internal */
2868
+ onend() {
2869
+ var _a3, _b;
2870
+ if (this.cbs.onclosetag) {
2871
+ this.endIndex = this.startIndex;
2872
+ for (let index = 0; index < this.stack.length; index++) {
2873
+ this.cbs.onclosetag(this.stack[index], true);
2874
+ }
2875
+ }
2876
+ (_b = (_a3 = this.cbs).onend) === null || _b === void 0 ? void 0 : _b.call(_a3);
2877
+ }
2878
+ /**
2879
+ * Resets the parser to a blank state, ready to parse a new HTML document
2880
+ */
2881
+ reset() {
2882
+ var _a3, _b, _c, _d;
2883
+ (_b = (_a3 = this.cbs).onreset) === null || _b === void 0 ? void 0 : _b.call(_a3);
2884
+ this.tokenizer.reset();
2885
+ this.tagname = "";
2886
+ this.attribname = "";
2887
+ this.attribs = null;
2888
+ this.stack.length = 0;
2889
+ this.startIndex = 0;
2890
+ this.endIndex = 0;
2891
+ (_d = (_c = this.cbs).onparserinit) === null || _d === void 0 ? void 0 : _d.call(_c, this);
2892
+ this.buffers.length = 0;
2893
+ this.foreignContext.length = 0;
2894
+ this.foreignContext.unshift(!this.htmlMode);
2895
+ this.bufferOffset = 0;
2896
+ this.writeIndex = 0;
2897
+ this.ended = false;
2898
+ }
2899
+ /**
2900
+ * Resets the parser, then parses a complete document and
2901
+ * pushes it to the handler.
2902
+ *
2903
+ * @param data Document to parse.
2904
+ */
2905
+ parseComplete(data) {
2906
+ this.reset();
2907
+ this.end(data);
2908
+ }
2909
+ getSlice(start, end) {
2910
+ while (start - this.bufferOffset >= this.buffers[0].length) {
2911
+ this.shiftBuffer();
2912
+ }
2913
+ let slice = this.buffers[0].slice(start - this.bufferOffset, end - this.bufferOffset);
2914
+ while (end - this.bufferOffset > this.buffers[0].length) {
2915
+ this.shiftBuffer();
2916
+ slice += this.buffers[0].slice(0, end - this.bufferOffset);
2917
+ }
2918
+ return slice;
2919
+ }
2920
+ shiftBuffer() {
2921
+ this.bufferOffset += this.buffers[0].length;
2922
+ this.writeIndex--;
2923
+ this.buffers.shift();
2924
+ }
2925
+ /**
2926
+ * Parses a chunk of data and calls the corresponding callbacks.
2927
+ *
2928
+ * @param chunk Chunk to parse.
2929
+ */
2930
+ write(chunk) {
2931
+ var _a3, _b;
2932
+ if (this.ended) {
2933
+ (_b = (_a3 = this.cbs).onerror) === null || _b === void 0 ? void 0 : _b.call(_a3, new Error(".write() after done!"));
2934
+ return;
2935
+ }
2936
+ this.buffers.push(chunk);
2937
+ if (this.tokenizer.running) {
2938
+ this.tokenizer.write(chunk);
2939
+ this.writeIndex++;
2940
+ }
2941
+ }
2942
+ /**
2943
+ * Parses the end of the buffer and clears the stack, calls onend.
2944
+ *
2945
+ * @param chunk Optional final chunk to parse.
2946
+ */
2947
+ end(chunk) {
2948
+ var _a3, _b;
2949
+ if (this.ended) {
2950
+ (_b = (_a3 = this.cbs).onerror) === null || _b === void 0 ? void 0 : _b.call(_a3, new Error(".end() after done!"));
2951
+ return;
2952
+ }
2953
+ if (chunk)
2954
+ this.write(chunk);
2955
+ this.ended = true;
2956
+ this.tokenizer.end();
2957
+ }
2958
+ /**
2959
+ * Pauses parsing. The parser won't emit events until `resume` is called.
2960
+ */
2961
+ pause() {
2962
+ this.tokenizer.pause();
2963
+ }
2964
+ /**
2965
+ * Resumes parsing after `pause` was called.
2966
+ */
2967
+ resume() {
2968
+ this.tokenizer.resume();
2969
+ while (this.tokenizer.running && this.writeIndex < this.buffers.length) {
2970
+ this.tokenizer.write(this.buffers[this.writeIndex++]);
2971
+ }
2972
+ if (this.ended)
2973
+ this.tokenizer.end();
2974
+ }
2975
+ /**
2976
+ * Alias of `write`, for backwards compatibility.
2977
+ *
2978
+ * @param chunk Chunk to parse.
2979
+ * @deprecated
2980
+ */
2981
+ parseChunk(chunk) {
2982
+ this.write(chunk);
2983
+ }
2984
+ /**
2985
+ * Alias of `end`, for backwards compatibility.
2986
+ *
2987
+ * @param chunk Optional final chunk to parse.
2988
+ * @deprecated
2989
+ */
2990
+ done(chunk) {
2991
+ this.end(chunk);
2992
+ }
2993
+ };
2994
+
2995
+ // node_modules/.pnpm/domelementtype@2.3.0/node_modules/domelementtype/lib/esm/index.js
2996
+ var ElementType;
2997
+ (function(ElementType2) {
2998
+ ElementType2["Root"] = "root";
2999
+ ElementType2["Text"] = "text";
3000
+ ElementType2["Directive"] = "directive";
3001
+ ElementType2["Comment"] = "comment";
3002
+ ElementType2["Script"] = "script";
3003
+ ElementType2["Style"] = "style";
3004
+ ElementType2["Tag"] = "tag";
3005
+ ElementType2["CDATA"] = "cdata";
3006
+ ElementType2["Doctype"] = "doctype";
3007
+ })(ElementType || (ElementType = {}));
3008
+ function isTag(elem) {
3009
+ return elem.type === ElementType.Tag || elem.type === ElementType.Script || elem.type === ElementType.Style;
3010
+ }
3011
+ var Root = ElementType.Root;
3012
+ var Text = ElementType.Text;
3013
+ var Directive = ElementType.Directive;
3014
+ var Comment = ElementType.Comment;
3015
+ var Script = ElementType.Script;
3016
+ var Style = ElementType.Style;
3017
+ var Tag = ElementType.Tag;
3018
+ var CDATA = ElementType.CDATA;
3019
+ var Doctype = ElementType.Doctype;
3020
+
3021
+ // node_modules/.pnpm/domhandler@5.0.3/node_modules/domhandler/lib/esm/node.js
3022
+ var Node = class {
3023
+ constructor() {
3024
+ this.parent = null;
3025
+ this.prev = null;
3026
+ this.next = null;
3027
+ this.startIndex = null;
3028
+ this.endIndex = null;
3029
+ }
3030
+ // Read-write aliases for properties
3031
+ /**
3032
+ * Same as {@link parent}.
3033
+ * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.
3034
+ */
3035
+ get parentNode() {
3036
+ return this.parent;
3037
+ }
3038
+ set parentNode(parent) {
3039
+ this.parent = parent;
3040
+ }
3041
+ /**
3042
+ * Same as {@link prev}.
3043
+ * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.
3044
+ */
3045
+ get previousSibling() {
3046
+ return this.prev;
3047
+ }
3048
+ set previousSibling(prev) {
3049
+ this.prev = prev;
3050
+ }
3051
+ /**
3052
+ * Same as {@link next}.
3053
+ * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.
3054
+ */
3055
+ get nextSibling() {
3056
+ return this.next;
3057
+ }
3058
+ set nextSibling(next) {
3059
+ this.next = next;
3060
+ }
3061
+ /**
3062
+ * Clone this node, and optionally its children.
3063
+ *
3064
+ * @param recursive Clone child nodes as well.
3065
+ * @returns A clone of the node.
3066
+ */
3067
+ cloneNode(recursive = false) {
3068
+ return cloneNode(this, recursive);
3069
+ }
3070
+ };
3071
+ var DataNode = class extends Node {
3072
+ /**
3073
+ * @param data The content of the data node
3074
+ */
3075
+ constructor(data) {
3076
+ super();
3077
+ this.data = data;
3078
+ }
3079
+ /**
3080
+ * Same as {@link data}.
3081
+ * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.
3082
+ */
3083
+ get nodeValue() {
3084
+ return this.data;
3085
+ }
3086
+ set nodeValue(data) {
3087
+ this.data = data;
3088
+ }
3089
+ };
3090
+ var Text2 = class extends DataNode {
3091
+ constructor() {
3092
+ super(...arguments);
3093
+ this.type = ElementType.Text;
3094
+ }
3095
+ get nodeType() {
3096
+ return 3;
3097
+ }
3098
+ };
3099
+ var Comment2 = class extends DataNode {
3100
+ constructor() {
3101
+ super(...arguments);
3102
+ this.type = ElementType.Comment;
3103
+ }
3104
+ get nodeType() {
3105
+ return 8;
3106
+ }
3107
+ };
3108
+ var ProcessingInstruction = class extends DataNode {
3109
+ constructor(name, data) {
3110
+ super(data);
3111
+ this.name = name;
3112
+ this.type = ElementType.Directive;
3113
+ }
3114
+ get nodeType() {
3115
+ return 1;
3116
+ }
3117
+ };
3118
+ var NodeWithChildren = class extends Node {
3119
+ /**
3120
+ * @param children Children of the node. Only certain node types can have children.
3121
+ */
3122
+ constructor(children) {
3123
+ super();
3124
+ this.children = children;
3125
+ }
3126
+ // Aliases
3127
+ /** First child of the node. */
3128
+ get firstChild() {
3129
+ var _a3;
3130
+ return (_a3 = this.children[0]) !== null && _a3 !== void 0 ? _a3 : null;
3131
+ }
3132
+ /** Last child of the node. */
3133
+ get lastChild() {
3134
+ return this.children.length > 0 ? this.children[this.children.length - 1] : null;
3135
+ }
3136
+ /**
3137
+ * Same as {@link children}.
3138
+ * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.
3139
+ */
3140
+ get childNodes() {
3141
+ return this.children;
3142
+ }
3143
+ set childNodes(children) {
3144
+ this.children = children;
3145
+ }
3146
+ };
3147
+ var CDATA2 = class extends NodeWithChildren {
3148
+ constructor() {
3149
+ super(...arguments);
3150
+ this.type = ElementType.CDATA;
3151
+ }
3152
+ get nodeType() {
3153
+ return 4;
3154
+ }
3155
+ };
3156
+ var Document = class extends NodeWithChildren {
3157
+ constructor() {
3158
+ super(...arguments);
3159
+ this.type = ElementType.Root;
3160
+ }
3161
+ get nodeType() {
3162
+ return 9;
3163
+ }
3164
+ };
3165
+ var Element = class extends NodeWithChildren {
3166
+ /**
3167
+ * @param name Name of the tag, eg. `div`, `span`.
3168
+ * @param attribs Object mapping attribute names to attribute values.
3169
+ * @param children Children of the node.
3170
+ */
3171
+ constructor(name, attribs, children = [], type = name === "script" ? ElementType.Script : name === "style" ? ElementType.Style : ElementType.Tag) {
3172
+ super(children);
3173
+ this.name = name;
3174
+ this.attribs = attribs;
3175
+ this.type = type;
3176
+ }
3177
+ get nodeType() {
3178
+ return 1;
3179
+ }
3180
+ // DOM Level 1 aliases
3181
+ /**
3182
+ * Same as {@link name}.
3183
+ * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.
3184
+ */
3185
+ get tagName() {
3186
+ return this.name;
3187
+ }
3188
+ set tagName(name) {
3189
+ this.name = name;
3190
+ }
3191
+ get attributes() {
3192
+ return Object.keys(this.attribs).map((name) => {
3193
+ var _a3, _b;
3194
+ return {
3195
+ name,
3196
+ value: this.attribs[name],
3197
+ namespace: (_a3 = this["x-attribsNamespace"]) === null || _a3 === void 0 ? void 0 : _a3[name],
3198
+ prefix: (_b = this["x-attribsPrefix"]) === null || _b === void 0 ? void 0 : _b[name]
3199
+ };
3200
+ });
3201
+ }
3202
+ };
3203
+ function isTag2(node) {
3204
+ return isTag(node);
3205
+ }
3206
+ function isCDATA(node) {
3207
+ return node.type === ElementType.CDATA;
3208
+ }
3209
+ function isText(node) {
3210
+ return node.type === ElementType.Text;
3211
+ }
3212
+ function isComment(node) {
3213
+ return node.type === ElementType.Comment;
3214
+ }
3215
+ function isDirective(node) {
3216
+ return node.type === ElementType.Directive;
3217
+ }
3218
+ function isDocument(node) {
3219
+ return node.type === ElementType.Root;
3220
+ }
3221
+ function cloneNode(node, recursive = false) {
3222
+ let result;
3223
+ if (isText(node)) {
3224
+ result = new Text2(node.data);
3225
+ } else if (isComment(node)) {
3226
+ result = new Comment2(node.data);
3227
+ } else if (isTag2(node)) {
3228
+ const children = recursive ? cloneChildren(node.children) : [];
3229
+ const clone = new Element(node.name, { ...node.attribs }, children);
3230
+ children.forEach((child) => child.parent = clone);
3231
+ if (node.namespace != null) {
3232
+ clone.namespace = node.namespace;
3233
+ }
3234
+ if (node["x-attribsNamespace"]) {
3235
+ clone["x-attribsNamespace"] = { ...node["x-attribsNamespace"] };
3236
+ }
3237
+ if (node["x-attribsPrefix"]) {
3238
+ clone["x-attribsPrefix"] = { ...node["x-attribsPrefix"] };
3239
+ }
3240
+ result = clone;
3241
+ } else if (isCDATA(node)) {
3242
+ const children = recursive ? cloneChildren(node.children) : [];
3243
+ const clone = new CDATA2(children);
3244
+ children.forEach((child) => child.parent = clone);
3245
+ result = clone;
3246
+ } else if (isDocument(node)) {
3247
+ const children = recursive ? cloneChildren(node.children) : [];
3248
+ const clone = new Document(children);
3249
+ children.forEach((child) => child.parent = clone);
3250
+ if (node["x-mode"]) {
3251
+ clone["x-mode"] = node["x-mode"];
3252
+ }
3253
+ result = clone;
3254
+ } else if (isDirective(node)) {
3255
+ const instruction = new ProcessingInstruction(node.name, node.data);
3256
+ if (node["x-name"] != null) {
3257
+ instruction["x-name"] = node["x-name"];
3258
+ instruction["x-publicId"] = node["x-publicId"];
3259
+ instruction["x-systemId"] = node["x-systemId"];
3260
+ }
3261
+ result = instruction;
3262
+ } else {
3263
+ throw new Error(`Not implemented yet: ${node.type}`);
3264
+ }
3265
+ result.startIndex = node.startIndex;
3266
+ result.endIndex = node.endIndex;
3267
+ if (node.sourceCodeLocation != null) {
3268
+ result.sourceCodeLocation = node.sourceCodeLocation;
3269
+ }
3270
+ return result;
3271
+ }
3272
+ function cloneChildren(childs) {
3273
+ const children = childs.map((child) => cloneNode(child, true));
3274
+ for (let i = 1; i < children.length; i++) {
3275
+ children[i].prev = children[i - 1];
3276
+ children[i - 1].next = children[i];
3277
+ }
3278
+ return children;
3279
+ }
3280
+
3281
+ // node_modules/.pnpm/domhandler@5.0.3/node_modules/domhandler/lib/esm/index.js
3282
+ var defaultOpts = {
3283
+ withStartIndices: false,
3284
+ withEndIndices: false,
3285
+ xmlMode: false
3286
+ };
3287
+ var DomHandler = class {
3288
+ /**
3289
+ * @param callback Called once parsing has completed.
3290
+ * @param options Settings for the handler.
3291
+ * @param elementCB Callback whenever a tag is closed.
3292
+ */
3293
+ constructor(callback, options, elementCB) {
3294
+ this.dom = [];
3295
+ this.root = new Document(this.dom);
3296
+ this.done = false;
3297
+ this.tagStack = [this.root];
3298
+ this.lastNode = null;
3299
+ this.parser = null;
3300
+ if (typeof options === "function") {
3301
+ elementCB = options;
3302
+ options = defaultOpts;
3303
+ }
3304
+ if (typeof callback === "object") {
3305
+ options = callback;
3306
+ callback = void 0;
3307
+ }
3308
+ this.callback = callback !== null && callback !== void 0 ? callback : null;
3309
+ this.options = options !== null && options !== void 0 ? options : defaultOpts;
3310
+ this.elementCB = elementCB !== null && elementCB !== void 0 ? elementCB : null;
3311
+ }
3312
+ onparserinit(parser) {
3313
+ this.parser = parser;
3314
+ }
3315
+ // Resets the handler back to starting state
3316
+ onreset() {
3317
+ this.dom = [];
3318
+ this.root = new Document(this.dom);
3319
+ this.done = false;
3320
+ this.tagStack = [this.root];
3321
+ this.lastNode = null;
3322
+ this.parser = null;
3323
+ }
3324
+ // Signals the handler that parsing is done
3325
+ onend() {
3326
+ if (this.done)
3327
+ return;
3328
+ this.done = true;
3329
+ this.parser = null;
3330
+ this.handleCallback(null);
3331
+ }
3332
+ onerror(error) {
3333
+ this.handleCallback(error);
3334
+ }
3335
+ onclosetag() {
3336
+ this.lastNode = null;
3337
+ const elem = this.tagStack.pop();
3338
+ if (this.options.withEndIndices) {
3339
+ elem.endIndex = this.parser.endIndex;
3340
+ }
3341
+ if (this.elementCB)
3342
+ this.elementCB(elem);
3343
+ }
3344
+ onopentag(name, attribs) {
3345
+ const type = this.options.xmlMode ? ElementType.Tag : void 0;
3346
+ const element = new Element(name, attribs, void 0, type);
3347
+ this.addNode(element);
3348
+ this.tagStack.push(element);
3349
+ }
3350
+ ontext(data) {
3351
+ const { lastNode } = this;
3352
+ if (lastNode && lastNode.type === ElementType.Text) {
3353
+ lastNode.data += data;
3354
+ if (this.options.withEndIndices) {
3355
+ lastNode.endIndex = this.parser.endIndex;
3356
+ }
3357
+ } else {
3358
+ const node = new Text2(data);
3359
+ this.addNode(node);
3360
+ this.lastNode = node;
3361
+ }
3362
+ }
3363
+ oncomment(data) {
3364
+ if (this.lastNode && this.lastNode.type === ElementType.Comment) {
3365
+ this.lastNode.data += data;
3366
+ return;
3367
+ }
3368
+ const node = new Comment2(data);
3369
+ this.addNode(node);
3370
+ this.lastNode = node;
3371
+ }
3372
+ oncommentend() {
3373
+ this.lastNode = null;
3374
+ }
3375
+ oncdatastart() {
3376
+ const text = new Text2("");
3377
+ const node = new CDATA2([text]);
3378
+ this.addNode(node);
3379
+ text.parent = node;
3380
+ this.lastNode = text;
3381
+ }
3382
+ oncdataend() {
3383
+ this.lastNode = null;
3384
+ }
3385
+ onprocessinginstruction(name, data) {
3386
+ const node = new ProcessingInstruction(name, data);
3387
+ this.addNode(node);
3388
+ }
3389
+ handleCallback(error) {
3390
+ if (typeof this.callback === "function") {
3391
+ this.callback(error, this.dom);
3392
+ } else if (error) {
3393
+ throw error;
3394
+ }
3395
+ }
3396
+ addNode(node) {
3397
+ const parent = this.tagStack[this.tagStack.length - 1];
3398
+ const previousSibling = parent.children[parent.children.length - 1];
3399
+ if (this.options.withStartIndices) {
3400
+ node.startIndex = this.parser.startIndex;
3401
+ }
3402
+ if (this.options.withEndIndices) {
3403
+ node.endIndex = this.parser.endIndex;
3404
+ }
3405
+ parent.children.push(node);
3406
+ if (previousSibling) {
3407
+ node.prev = previousSibling;
3408
+ previousSibling.next = node;
3409
+ }
3410
+ node.parent = parent;
3411
+ this.lastNode = null;
3412
+ }
3413
+ };
3414
+
3415
+ // node_modules/.pnpm/entities@4.5.0/node_modules/entities/lib/esm/generated/decode-data-html.js
3416
+ var decode_data_html_default = new Uint16Array(
3417
+ // prettier-ignore
3418
+ '\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\u{1D504}rave\u803B\xC0\u40C0pha;\u4391acr;\u4100d;\u6A53\u0100gp\x9D\xA1on;\u4104f;\uC000\u{1D538}plyFunction;\u6061ing\u803B\xC5\u40C5\u0100cs\xBE\xC3r;\uC000\u{1D49C}ign;\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\u{1D505}pf;\uC000\u{1D539}eve;\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\u{1D49E}p\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\u{1D507}\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\u{1D53B}\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\u{1D49F}rok;\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\u{1D508}rave\u803B\xC8\u40C8ement;\u6208\u0100ap\u04FA\u04FEcr;\u4112ty\u0253\u0506\0\0\u0512mallSquare;\u65FBerySmallSquare;\u65AB\u0100gp\u0526\u052Aon;\u4118f;\uC000\u{1D53C}silon;\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\u{1D509}lled\u0253\u0597\0\0\u05A3mallSquare;\u65FCerySmallSquare;\u65AA\u0370\u05BA\0\u05BF\0\0\u05C4f;\uC000\u{1D53D}All;\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\u{1D50A};\u62D9pf;\uC000\u{1D53E}eater\u0300EFGLST\u0635\u0644\u064E\u0656\u065B\u0666qual\u0100;L\u063E\u063F\u6265ess;\u62DBullEqual;\u6267reater;\u6AA2ess;\u6277lantEqual;\u6A7Eilde;\u6273cr;\uC000\u{1D4A2};\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\u{1D540}a;\u4399cr;\u6110ilde;\u4128\u01EB\u079A\0\u079Ecy;\u4406l\u803B\xCF\u40CF\u0280cfosu\u07AC\u07B7\u07BC\u07C2\u07D0\u0100iy\u07B1\u07B5rc;\u4134;\u4419r;\uC000\u{1D50D}pf;\uC000\u{1D541}\u01E3\u07C7\0\u07CCr;\uC000\u{1D4A5}rcy;\u4408kcy;\u4404\u0380HJacfos\u07E4\u07E8\u07EC\u07F1\u07FD\u0802\u0808cy;\u4425cy;\u440Cppa;\u439A\u0100ey\u07F6\u07FBdil;\u4136;\u441Ar;\uC000\u{1D50E}pf;\uC000\u{1D542}cr;\uC000\u{1D4A6}\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\u{1D50F}\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\u{1D543}er\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\u{1D510}nusPlus;\u6213pf;\uC000\u{1D544}c\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\u{1D511}\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\u{1D4A9}ilde\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\u{1D512}rave\u803B\xD2\u40D2\u0180aei\u0DEE\u0DF2\u0DF6cr;\u414Cga;\u43A9cron;\u439Fpf;\uC000\u{1D546}enCurly\u0100DQ\u0E0E\u0E1AoubleQuote;\u601Cuote;\u6018;\u6A54\u0100cl\u0E27\u0E2Cr;\uC000\u{1D4AA}ash\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\u{1D513}i;\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\u{1D4AB};\u43A8\u0200Ufos\u0F11\u0F16\u0F1B\u0F1FOT\u803B"\u4022r;\uC000\u{1D514}pf;\u611Acr;\uC000\u{1D4AC}\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\u{1D516}ort\u0200DLRU\u112A\u1134\u113E\u1149ownArrow\xBB\u041EeftArrow\xBB\u089AightArrow\xBB\u0FDDpArrow;\u6191gma;\u43A3allCircle;\u6218pf;\uC000\u{1D54A}\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\u{1D4AE}ar;\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\u{1D517}\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\u{1D54B}ipleDot;\u60DB\u0100ct\u12D6\u12DBr;\uC000\u{1D4AF}rok;\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\u{1D518}rave\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\u{1D54C}\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\u{1D4B0}ilde;\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\u{1D519}pf;\uC000\u{1D54D}cr;\uC000\u{1D4B1}dash;\u62AA\u0280cefos\u14A7\u14AC\u14B1\u14B6\u14BCirc;\u4174dge;\u62C0r;\uC000\u{1D51A}pf;\uC000\u{1D54E}cr;\uC000\u{1D4B2}\u0200fios\u14CB\u14D0\u14D2\u14D8r;\uC000\u{1D51B};\u439Epf;\uC000\u{1D54F}cr;\uC000\u{1D4B3}\u0480AIUacfosu\u14F1\u14F5\u14F9\u14FD\u1504\u150F\u1514\u151A\u1520cy;\u442Fcy;\u4407cy;\u442Ecute\u803B\xDD\u40DD\u0100iy\u1509\u150Drc;\u4176;\u442Br;\uC000\u{1D51C}pf;\uC000\u{1D550}cr;\uC000\u{1D4B4}ml;\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\u{1D4B5}\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\u{1D51E}rave\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\u{1D552}\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\u{1D4B6};\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\u{1D51F}g\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\u{1D553}\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\u{1D4B7}mi;\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\u{1D520}\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\u{1D554}o\xE4\u0254\u8100\xA9;s\u0155\u1B1Dr;\u6117\u0100ao\u1B25\u1B29rr;\u61B5ss;\u6717\u0100cu\u1B32\u1B37r;\uC000\u{1D4B8}\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\u{1D521}ar\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\u{1D555}\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\u{1D4B9};\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\u{1D522}\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\u{1D556}\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\u{1D523}lig;\u8000\uFB01lig;\uC000fj\u0180alt\u1FD9\u1FDC\u1FE1t;\u666Dig;\u8000\uFB02ns;\u65B1of;\u4192\u01F0\u1FEE\0\u1FF3f;\uC000\u{1D557}\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\u{1D4BB}\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\u{1D524}\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\u{1D558}\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\u{1D525}s\u0100ew\u2223\u2229arow;\u6925arow;\u6926\u0280amopr\u223A\u223E\u2243\u225E\u2263rr;\u61FFtht;\u623Bk\u0100lr\u2249\u2253eftarrow;\u61A9ightarrow;\u61AAf;\uC000\u{1D559}bar;\u6015\u0180clt\u226F\u2274\u2278r;\uC000\u{1D4BD}as\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\u{1D526}rave\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\u{1D55A}a;\u43B9uest\u803B\xBF\u40BF\u0100ci\u238A\u238Fr;\uC000\u{1D4BE}n\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\u{1D527}ath;\u4237pf;\uC000\u{1D55B}\u01E3\u23EC\0\u23F1r;\uC000\u{1D4BF}rcy;\u4458kcy;\u4454\u0400acfghjos\u240B\u2416\u2422\u2427\u242D\u2431\u2435\u243Bppa\u0100;v\u2413\u2414\u43BA;\u43F0\u0100ey\u241B\u2420dil;\u4137;\u443Ar;\uC000\u{1D528}reen;\u4138cy;\u4445cy;\u445Cpf;\uC000\u{1D55C}cr;\uC000\u{1D4C0}\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\u{1D529}\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\u{1D55D}us;\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\u{1D4C1}m\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\u{1D52A}o;\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\u{1D55E}\u0100ct\u28F8\u28FDr;\uC000\u{1D4C2}pos\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\u{1D52B}\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\u{1D55F}\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\u{1D4C3}ort\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\u{1D52C}\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\u{1D560}\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\u{1D52D}\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\u{1D561}nd\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\u{1D4C5};\u43C8ncsp;\u6008\u0300fiopsu\u2FDA\u22E2\u2FDF\u2FE5\u2FEB\u2FF1r;\uC000\u{1D52E}pf;\uC000\u{1D562}rime;\u6057cr;\uC000\u{1D4C6}\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\u{1D52F}\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\u{1D563}us;\u6A2Eimes;\u6A35\u0100ap\u325D\u3267r\u0100;g\u3263\u3264\u4029t;\u6994olint;\u6A12ar\xF2\u31E3\u0200achq\u327B\u3280\u10BC\u3285quo;\u603Ar;\uC000\u{1D4C7}\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\u{1D530}\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\u{1D564}a\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\u{1D4C8}tm\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\u{1D531}\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\u{1D565}rk;\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\u{1D4C9};\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\u{1D532}rave\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\u{1D566}\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\u{1D4CA}\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\u{1D533}tr\xE9\u39AEsu\u0100bp\u39EF\u39F1\xBB\u0D1C\xBB\u0D59pf;\uC000\u{1D567}ro\xF0\u0EFBtr\xE9\u39B4\u0100cu\u3A06\u3A0Br;\uC000\u{1D4CB}\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\u{1D534}pf;\uC000\u{1D568}\u0100;e\u1479\u3A66at\xE8\u1479cr;\uC000\u{1D4CC}\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\u{1D535}\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\u{1D569}im\xE5\u17B2\u0100Aa\u3AC7\u3ACAr\xF2\u03CEr\xF2\u0A01\u0100cq\u3AD2\u17B8r;\uC000\u{1D4CD}\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\u{1D536}cy;\u4457pf;\uC000\u{1D56A}cr;\uC000\u{1D4CE}\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\u{1D537}cy;\u4436grarr;\u61DDpf;\uC000\u{1D56B}cr;\uC000\u{1D4CF}\u0100jn\u3B85\u3B87;\u600Dj;\u600C'.split("").map((c) => c.charCodeAt(0))
3419
+ );
3420
+
3421
+ // node_modules/.pnpm/entities@4.5.0/node_modules/entities/lib/esm/generated/decode-data-xml.js
3422
+ var decode_data_xml_default = new Uint16Array(
3423
+ // prettier-ignore
3424
+ "\u0200aglq \x1B\u026D\0\0p;\u4026os;\u4027t;\u403Et;\u403Cuot;\u4022".split("").map((c) => c.charCodeAt(0))
3425
+ );
3426
+
3427
+ // node_modules/.pnpm/entities@4.5.0/node_modules/entities/lib/esm/decode_codepoint.js
3428
+ var _a2;
3429
+ var decodeMap2 = /* @__PURE__ */ new Map([
3430
+ [0, 65533],
3431
+ // C1 Unicode control character reference replacements
3432
+ [128, 8364],
3433
+ [130, 8218],
3434
+ [131, 402],
3435
+ [132, 8222],
3436
+ [133, 8230],
3437
+ [134, 8224],
3438
+ [135, 8225],
3439
+ [136, 710],
3440
+ [137, 8240],
3441
+ [138, 352],
3442
+ [139, 8249],
3443
+ [140, 338],
3444
+ [142, 381],
3445
+ [145, 8216],
3446
+ [146, 8217],
3447
+ [147, 8220],
3448
+ [148, 8221],
3449
+ [149, 8226],
3450
+ [150, 8211],
3451
+ [151, 8212],
3452
+ [152, 732],
3453
+ [153, 8482],
3454
+ [154, 353],
3455
+ [155, 8250],
3456
+ [156, 339],
3457
+ [158, 382],
3458
+ [159, 376]
3459
+ ]);
3460
+ var fromCodePoint2 = (
3461
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, node/no-unsupported-features/es-builtins
3462
+ (_a2 = String.fromCodePoint) !== null && _a2 !== void 0 ? _a2 : function(codePoint) {
3463
+ let output = "";
3464
+ if (codePoint > 65535) {
3465
+ codePoint -= 65536;
3466
+ output += String.fromCharCode(codePoint >>> 10 & 1023 | 55296);
3467
+ codePoint = 56320 | codePoint & 1023;
3468
+ }
3469
+ output += String.fromCharCode(codePoint);
3470
+ return output;
3471
+ }
3472
+ );
3473
+ function replaceCodePoint2(codePoint) {
3474
+ var _a3;
3475
+ if (codePoint >= 55296 && codePoint <= 57343 || codePoint > 1114111) {
3476
+ return 65533;
3477
+ }
3478
+ return (_a3 = decodeMap2.get(codePoint)) !== null && _a3 !== void 0 ? _a3 : codePoint;
3479
+ }
3480
+
3481
+ // node_modules/.pnpm/entities@4.5.0/node_modules/entities/lib/esm/decode.js
3482
+ var CharCodes3;
3483
+ (function(CharCodes4) {
3484
+ CharCodes4[CharCodes4["NUM"] = 35] = "NUM";
3485
+ CharCodes4[CharCodes4["SEMI"] = 59] = "SEMI";
3486
+ CharCodes4[CharCodes4["EQUALS"] = 61] = "EQUALS";
3487
+ CharCodes4[CharCodes4["ZERO"] = 48] = "ZERO";
3488
+ CharCodes4[CharCodes4["NINE"] = 57] = "NINE";
3489
+ CharCodes4[CharCodes4["LOWER_A"] = 97] = "LOWER_A";
3490
+ CharCodes4[CharCodes4["LOWER_F"] = 102] = "LOWER_F";
3491
+ CharCodes4[CharCodes4["LOWER_X"] = 120] = "LOWER_X";
3492
+ CharCodes4[CharCodes4["LOWER_Z"] = 122] = "LOWER_Z";
3493
+ CharCodes4[CharCodes4["UPPER_A"] = 65] = "UPPER_A";
3494
+ CharCodes4[CharCodes4["UPPER_F"] = 70] = "UPPER_F";
3495
+ CharCodes4[CharCodes4["UPPER_Z"] = 90] = "UPPER_Z";
3496
+ })(CharCodes3 || (CharCodes3 = {}));
3497
+ var TO_LOWER_BIT2 = 32;
3498
+ var BinTrieFlags2;
3499
+ (function(BinTrieFlags3) {
3500
+ BinTrieFlags3[BinTrieFlags3["VALUE_LENGTH"] = 49152] = "VALUE_LENGTH";
3501
+ BinTrieFlags3[BinTrieFlags3["BRANCH_LENGTH"] = 16256] = "BRANCH_LENGTH";
3502
+ BinTrieFlags3[BinTrieFlags3["JUMP_TABLE"] = 127] = "JUMP_TABLE";
3503
+ })(BinTrieFlags2 || (BinTrieFlags2 = {}));
3504
+ function isNumber2(code) {
3505
+ return code >= CharCodes3.ZERO && code <= CharCodes3.NINE;
3506
+ }
3507
+ function isHexadecimalCharacter2(code) {
3508
+ return code >= CharCodes3.UPPER_A && code <= CharCodes3.UPPER_F || code >= CharCodes3.LOWER_A && code <= CharCodes3.LOWER_F;
3509
+ }
3510
+ function isAsciiAlphaNumeric2(code) {
3511
+ return code >= CharCodes3.UPPER_A && code <= CharCodes3.UPPER_Z || code >= CharCodes3.LOWER_A && code <= CharCodes3.LOWER_Z || isNumber2(code);
3512
+ }
3513
+ function isEntityInAttributeInvalidEnd2(code) {
3514
+ return code === CharCodes3.EQUALS || isAsciiAlphaNumeric2(code);
3515
+ }
3516
+ var EntityDecoderState2;
3517
+ (function(EntityDecoderState3) {
3518
+ EntityDecoderState3[EntityDecoderState3["EntityStart"] = 0] = "EntityStart";
3519
+ EntityDecoderState3[EntityDecoderState3["NumericStart"] = 1] = "NumericStart";
3520
+ EntityDecoderState3[EntityDecoderState3["NumericDecimal"] = 2] = "NumericDecimal";
3521
+ EntityDecoderState3[EntityDecoderState3["NumericHex"] = 3] = "NumericHex";
3522
+ EntityDecoderState3[EntityDecoderState3["NamedEntity"] = 4] = "NamedEntity";
3523
+ })(EntityDecoderState2 || (EntityDecoderState2 = {}));
3524
+ var DecodingMode2;
3525
+ (function(DecodingMode3) {
3526
+ DecodingMode3[DecodingMode3["Legacy"] = 0] = "Legacy";
3527
+ DecodingMode3[DecodingMode3["Strict"] = 1] = "Strict";
3528
+ DecodingMode3[DecodingMode3["Attribute"] = 2] = "Attribute";
3529
+ })(DecodingMode2 || (DecodingMode2 = {}));
3530
+ var EntityDecoder2 = class {
3531
+ constructor(decodeTree, emitCodePoint, errors) {
3532
+ this.decodeTree = decodeTree;
3533
+ this.emitCodePoint = emitCodePoint;
3534
+ this.errors = errors;
3535
+ this.state = EntityDecoderState2.EntityStart;
3536
+ this.consumed = 1;
3537
+ this.result = 0;
3538
+ this.treeIndex = 0;
3539
+ this.excess = 1;
3540
+ this.decodeMode = DecodingMode2.Strict;
3541
+ }
3542
+ /** Resets the instance to make it reusable. */
3543
+ startEntity(decodeMode) {
3544
+ this.decodeMode = decodeMode;
3545
+ this.state = EntityDecoderState2.EntityStart;
3546
+ this.result = 0;
3547
+ this.treeIndex = 0;
3548
+ this.excess = 1;
3549
+ this.consumed = 1;
3550
+ }
3551
+ /**
3552
+ * Write an entity to the decoder. This can be called multiple times with partial entities.
3553
+ * If the entity is incomplete, the decoder will return -1.
3554
+ *
3555
+ * Mirrors the implementation of `getDecoder`, but with the ability to stop decoding if the
3556
+ * entity is incomplete, and resume when the next string is written.
3557
+ *
3558
+ * @param string The string containing the entity (or a continuation of the entity).
3559
+ * @param offset The offset at which the entity begins. Should be 0 if this is not the first call.
3560
+ * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
3561
+ */
3562
+ write(str, offset) {
3563
+ switch (this.state) {
3564
+ case EntityDecoderState2.EntityStart: {
3565
+ if (str.charCodeAt(offset) === CharCodes3.NUM) {
3566
+ this.state = EntityDecoderState2.NumericStart;
3567
+ this.consumed += 1;
3568
+ return this.stateNumericStart(str, offset + 1);
3569
+ }
3570
+ this.state = EntityDecoderState2.NamedEntity;
3571
+ return this.stateNamedEntity(str, offset);
3572
+ }
3573
+ case EntityDecoderState2.NumericStart: {
3574
+ return this.stateNumericStart(str, offset);
3575
+ }
3576
+ case EntityDecoderState2.NumericDecimal: {
3577
+ return this.stateNumericDecimal(str, offset);
3578
+ }
3579
+ case EntityDecoderState2.NumericHex: {
3580
+ return this.stateNumericHex(str, offset);
3581
+ }
3582
+ case EntityDecoderState2.NamedEntity: {
3583
+ return this.stateNamedEntity(str, offset);
3584
+ }
3585
+ }
3586
+ }
3587
+ /**
3588
+ * Switches between the numeric decimal and hexadecimal states.
3589
+ *
3590
+ * Equivalent to the `Numeric character reference state` in the HTML spec.
3591
+ *
3592
+ * @param str The string containing the entity (or a continuation of the entity).
3593
+ * @param offset The current offset.
3594
+ * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
3595
+ */
3596
+ stateNumericStart(str, offset) {
3597
+ if (offset >= str.length) {
3598
+ return -1;
3599
+ }
3600
+ if ((str.charCodeAt(offset) | TO_LOWER_BIT2) === CharCodes3.LOWER_X) {
3601
+ this.state = EntityDecoderState2.NumericHex;
3602
+ this.consumed += 1;
3603
+ return this.stateNumericHex(str, offset + 1);
3604
+ }
3605
+ this.state = EntityDecoderState2.NumericDecimal;
3606
+ return this.stateNumericDecimal(str, offset);
3607
+ }
3608
+ addToNumericResult(str, start, end, base) {
3609
+ if (start !== end) {
3610
+ const digitCount = end - start;
3611
+ this.result = this.result * Math.pow(base, digitCount) + parseInt(str.substr(start, digitCount), base);
3612
+ this.consumed += digitCount;
3613
+ }
3614
+ }
3615
+ /**
3616
+ * Parses a hexadecimal numeric entity.
3617
+ *
3618
+ * Equivalent to the `Hexademical character reference state` in the HTML spec.
3619
+ *
3620
+ * @param str The string containing the entity (or a continuation of the entity).
3621
+ * @param offset The current offset.
3622
+ * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
3623
+ */
3624
+ stateNumericHex(str, offset) {
3625
+ const startIdx = offset;
3626
+ while (offset < str.length) {
3627
+ const char = str.charCodeAt(offset);
3628
+ if (isNumber2(char) || isHexadecimalCharacter2(char)) {
3629
+ offset += 1;
3630
+ } else {
3631
+ this.addToNumericResult(str, startIdx, offset, 16);
3632
+ return this.emitNumericEntity(char, 3);
3633
+ }
3634
+ }
3635
+ this.addToNumericResult(str, startIdx, offset, 16);
3636
+ return -1;
3637
+ }
3638
+ /**
3639
+ * Parses a decimal numeric entity.
3640
+ *
3641
+ * Equivalent to the `Decimal character reference state` in the HTML spec.
3642
+ *
3643
+ * @param str The string containing the entity (or a continuation of the entity).
3644
+ * @param offset The current offset.
3645
+ * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
3646
+ */
3647
+ stateNumericDecimal(str, offset) {
3648
+ const startIdx = offset;
3649
+ while (offset < str.length) {
3650
+ const char = str.charCodeAt(offset);
3651
+ if (isNumber2(char)) {
3652
+ offset += 1;
3653
+ } else {
3654
+ this.addToNumericResult(str, startIdx, offset, 10);
3655
+ return this.emitNumericEntity(char, 2);
3656
+ }
3657
+ }
3658
+ this.addToNumericResult(str, startIdx, offset, 10);
3659
+ return -1;
3660
+ }
3661
+ /**
3662
+ * Validate and emit a numeric entity.
3663
+ *
3664
+ * Implements the logic from the `Hexademical character reference start
3665
+ * state` and `Numeric character reference end state` in the HTML spec.
3666
+ *
3667
+ * @param lastCp The last code point of the entity. Used to see if the
3668
+ * entity was terminated with a semicolon.
3669
+ * @param expectedLength The minimum number of characters that should be
3670
+ * consumed. Used to validate that at least one digit
3671
+ * was consumed.
3672
+ * @returns The number of characters that were consumed.
3673
+ */
3674
+ emitNumericEntity(lastCp, expectedLength) {
3675
+ var _a3;
3676
+ if (this.consumed <= expectedLength) {
3677
+ (_a3 = this.errors) === null || _a3 === void 0 ? void 0 : _a3.absenceOfDigitsInNumericCharacterReference(this.consumed);
3678
+ return 0;
3679
+ }
3680
+ if (lastCp === CharCodes3.SEMI) {
3681
+ this.consumed += 1;
3682
+ } else if (this.decodeMode === DecodingMode2.Strict) {
3683
+ return 0;
3684
+ }
3685
+ this.emitCodePoint(replaceCodePoint2(this.result), this.consumed);
3686
+ if (this.errors) {
3687
+ if (lastCp !== CharCodes3.SEMI) {
3688
+ this.errors.missingSemicolonAfterCharacterReference();
3689
+ }
3690
+ this.errors.validateNumericCharacterReference(this.result);
3691
+ }
3692
+ return this.consumed;
3693
+ }
3694
+ /**
3695
+ * Parses a named entity.
3696
+ *
3697
+ * Equivalent to the `Named character reference state` in the HTML spec.
3698
+ *
3699
+ * @param str The string containing the entity (or a continuation of the entity).
3700
+ * @param offset The current offset.
3701
+ * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
3702
+ */
3703
+ stateNamedEntity(str, offset) {
3704
+ const { decodeTree } = this;
3705
+ let current = decodeTree[this.treeIndex];
3706
+ let valueLength = (current & BinTrieFlags2.VALUE_LENGTH) >> 14;
3707
+ for (; offset < str.length; offset++, this.excess++) {
3708
+ const char = str.charCodeAt(offset);
3709
+ this.treeIndex = determineBranch2(decodeTree, current, this.treeIndex + Math.max(1, valueLength), char);
3710
+ if (this.treeIndex < 0) {
3711
+ return this.result === 0 || // If we are parsing an attribute
3712
+ this.decodeMode === DecodingMode2.Attribute && // We shouldn't have consumed any characters after the entity,
3713
+ (valueLength === 0 || // And there should be no invalid characters.
3714
+ isEntityInAttributeInvalidEnd2(char)) ? 0 : this.emitNotTerminatedNamedEntity();
3715
+ }
3716
+ current = decodeTree[this.treeIndex];
3717
+ valueLength = (current & BinTrieFlags2.VALUE_LENGTH) >> 14;
3718
+ if (valueLength !== 0) {
3719
+ if (char === CharCodes3.SEMI) {
3720
+ return this.emitNamedEntityData(this.treeIndex, valueLength, this.consumed + this.excess);
3721
+ }
3722
+ if (this.decodeMode !== DecodingMode2.Strict) {
3723
+ this.result = this.treeIndex;
3724
+ this.consumed += this.excess;
3725
+ this.excess = 0;
3726
+ }
3727
+ }
3728
+ }
3729
+ return -1;
3730
+ }
3731
+ /**
3732
+ * Emit a named entity that was not terminated with a semicolon.
3733
+ *
3734
+ * @returns The number of characters consumed.
3735
+ */
3736
+ emitNotTerminatedNamedEntity() {
3737
+ var _a3;
3738
+ const { result, decodeTree } = this;
3739
+ const valueLength = (decodeTree[result] & BinTrieFlags2.VALUE_LENGTH) >> 14;
3740
+ this.emitNamedEntityData(result, valueLength, this.consumed);
3741
+ (_a3 = this.errors) === null || _a3 === void 0 ? void 0 : _a3.missingSemicolonAfterCharacterReference();
3742
+ return this.consumed;
3743
+ }
3744
+ /**
3745
+ * Emit a named entity.
3746
+ *
3747
+ * @param result The index of the entity in the decode tree.
3748
+ * @param valueLength The number of bytes in the entity.
3749
+ * @param consumed The number of characters consumed.
3750
+ *
3751
+ * @returns The number of characters consumed.
3752
+ */
3753
+ emitNamedEntityData(result, valueLength, consumed) {
3754
+ const { decodeTree } = this;
3755
+ this.emitCodePoint(valueLength === 1 ? decodeTree[result] & ~BinTrieFlags2.VALUE_LENGTH : decodeTree[result + 1], consumed);
3756
+ if (valueLength === 3) {
3757
+ this.emitCodePoint(decodeTree[result + 2], consumed);
3758
+ }
3759
+ return consumed;
3760
+ }
3761
+ /**
3762
+ * Signal to the parser that the end of the input was reached.
3763
+ *
3764
+ * Remaining data will be emitted and relevant errors will be produced.
3765
+ *
3766
+ * @returns The number of characters consumed.
3767
+ */
3768
+ end() {
3769
+ var _a3;
3770
+ switch (this.state) {
3771
+ case EntityDecoderState2.NamedEntity: {
3772
+ return this.result !== 0 && (this.decodeMode !== DecodingMode2.Attribute || this.result === this.treeIndex) ? this.emitNotTerminatedNamedEntity() : 0;
3773
+ }
3774
+ // Otherwise, emit a numeric entity if we have one.
3775
+ case EntityDecoderState2.NumericDecimal: {
3776
+ return this.emitNumericEntity(0, 2);
3777
+ }
3778
+ case EntityDecoderState2.NumericHex: {
3779
+ return this.emitNumericEntity(0, 3);
3780
+ }
3781
+ case EntityDecoderState2.NumericStart: {
3782
+ (_a3 = this.errors) === null || _a3 === void 0 ? void 0 : _a3.absenceOfDigitsInNumericCharacterReference(this.consumed);
3783
+ return 0;
3784
+ }
3785
+ case EntityDecoderState2.EntityStart: {
3786
+ return 0;
3787
+ }
3788
+ }
3789
+ }
3790
+ };
3791
+ function getDecoder(decodeTree) {
3792
+ let ret = "";
3793
+ const decoder = new EntityDecoder2(decodeTree, (str) => ret += fromCodePoint2(str));
3794
+ return function decodeWithTrie(str, decodeMode) {
3795
+ let lastIndex = 0;
3796
+ let offset = 0;
3797
+ while ((offset = str.indexOf("&", offset)) >= 0) {
3798
+ ret += str.slice(lastIndex, offset);
3799
+ decoder.startEntity(decodeMode);
3800
+ const len = decoder.write(
3801
+ str,
3802
+ // Skip the "&"
3803
+ offset + 1
3804
+ );
3805
+ if (len < 0) {
3806
+ lastIndex = offset + decoder.end();
3807
+ break;
3808
+ }
3809
+ lastIndex = offset + len;
3810
+ offset = len === 0 ? lastIndex + 1 : lastIndex;
3811
+ }
3812
+ const result = ret + str.slice(lastIndex);
3813
+ ret = "";
3814
+ return result;
3815
+ };
3816
+ }
3817
+ function determineBranch2(decodeTree, current, nodeIdx, char) {
3818
+ const branchCount = (current & BinTrieFlags2.BRANCH_LENGTH) >> 7;
3819
+ const jumpOffset = current & BinTrieFlags2.JUMP_TABLE;
3820
+ if (branchCount === 0) {
3821
+ return jumpOffset !== 0 && char === jumpOffset ? nodeIdx : -1;
3822
+ }
3823
+ if (jumpOffset) {
3824
+ const value = char - jumpOffset;
3825
+ return value < 0 || value >= branchCount ? -1 : decodeTree[nodeIdx + value] - 1;
3826
+ }
3827
+ let lo = nodeIdx;
3828
+ let hi = lo + branchCount - 1;
3829
+ while (lo <= hi) {
3830
+ const mid = lo + hi >>> 1;
3831
+ const midVal = decodeTree[mid];
3832
+ if (midVal < char) {
3833
+ lo = mid + 1;
3834
+ } else if (midVal > char) {
3835
+ hi = mid - 1;
3836
+ } else {
3837
+ return decodeTree[mid + branchCount];
3838
+ }
3839
+ }
3840
+ return -1;
3841
+ }
3842
+ var htmlDecoder = getDecoder(decode_data_html_default);
3843
+ var xmlDecoder = getDecoder(decode_data_xml_default);
3844
+
3845
+ // node_modules/.pnpm/entities@4.5.0/node_modules/entities/lib/esm/generated/encode-html.js
3846
+ function restoreDiff(arr) {
3847
+ for (let i = 1; i < arr.length; i++) {
3848
+ arr[i][0] += arr[i - 1][0] + 1;
3849
+ }
3850
+ return arr;
3851
+ }
3852
+ var encode_html_default = new Map(/* @__PURE__ */ restoreDiff([[9, "&Tab;"], [0, "&NewLine;"], [22, "&excl;"], [0, "&quot;"], [0, "&num;"], [0, "&dollar;"], [0, "&percnt;"], [0, "&amp;"], [0, "&apos;"], [0, "&lpar;"], [0, "&rpar;"], [0, "&ast;"], [0, "&plus;"], [0, "&comma;"], [1, "&period;"], [0, "&sol;"], [10, "&colon;"], [0, "&semi;"], [0, { v: "&lt;", n: 8402, o: "&nvlt;" }], [0, { v: "&equals;", n: 8421, o: "&bne;" }], [0, { v: "&gt;", n: 8402, o: "&nvgt;" }], [0, "&quest;"], [0, "&commat;"], [26, "&lbrack;"], [0, "&bsol;"], [0, "&rbrack;"], [0, "&Hat;"], [0, "&lowbar;"], [0, "&DiacriticalGrave;"], [5, { n: 106, o: "&fjlig;" }], [20, "&lbrace;"], [0, "&verbar;"], [0, "&rbrace;"], [34, "&nbsp;"], [0, "&iexcl;"], [0, "&cent;"], [0, "&pound;"], [0, "&curren;"], [0, "&yen;"], [0, "&brvbar;"], [0, "&sect;"], [0, "&die;"], [0, "&copy;"], [0, "&ordf;"], [0, "&laquo;"], [0, "&not;"], [0, "&shy;"], [0, "&circledR;"], [0, "&macr;"], [0, "&deg;"], [0, "&PlusMinus;"], [0, "&sup2;"], [0, "&sup3;"], [0, "&acute;"], [0, "&micro;"], [0, "&para;"], [0, "&centerdot;"], [0, "&cedil;"], [0, "&sup1;"], [0, "&ordm;"], [0, "&raquo;"], [0, "&frac14;"], [0, "&frac12;"], [0, "&frac34;"], [0, "&iquest;"], [0, "&Agrave;"], [0, "&Aacute;"], [0, "&Acirc;"], [0, "&Atilde;"], [0, "&Auml;"], [0, "&angst;"], [0, "&AElig;"], [0, "&Ccedil;"], [0, "&Egrave;"], [0, "&Eacute;"], [0, "&Ecirc;"], [0, "&Euml;"], [0, "&Igrave;"], [0, "&Iacute;"], [0, "&Icirc;"], [0, "&Iuml;"], [0, "&ETH;"], [0, "&Ntilde;"], [0, "&Ograve;"], [0, "&Oacute;"], [0, "&Ocirc;"], [0, "&Otilde;"], [0, "&Ouml;"], [0, "&times;"], [0, "&Oslash;"], [0, "&Ugrave;"], [0, "&Uacute;"], [0, "&Ucirc;"], [0, "&Uuml;"], [0, "&Yacute;"], [0, "&THORN;"], [0, "&szlig;"], [0, "&agrave;"], [0, "&aacute;"], [0, "&acirc;"], [0, "&atilde;"], [0, "&auml;"], [0, "&aring;"], [0, "&aelig;"], [0, "&ccedil;"], [0, "&egrave;"], [0, "&eacute;"], [0, "&ecirc;"], [0, "&euml;"], [0, "&igrave;"], [0, "&iacute;"], [0, "&icirc;"], [0, "&iuml;"], [0, "&eth;"], [0, "&ntilde;"], [0, "&ograve;"], [0, "&oacute;"], [0, "&ocirc;"], [0, "&otilde;"], [0, "&ouml;"], [0, "&div;"], [0, "&oslash;"], [0, "&ugrave;"], [0, "&uacute;"], [0, "&ucirc;"], [0, "&uuml;"], [0, "&yacute;"], [0, "&thorn;"], [0, "&yuml;"], [0, "&Amacr;"], [0, "&amacr;"], [0, "&Abreve;"], [0, "&abreve;"], [0, "&Aogon;"], [0, "&aogon;"], [0, "&Cacute;"], [0, "&cacute;"], [0, "&Ccirc;"], [0, "&ccirc;"], [0, "&Cdot;"], [0, "&cdot;"], [0, "&Ccaron;"], [0, "&ccaron;"], [0, "&Dcaron;"], [0, "&dcaron;"], [0, "&Dstrok;"], [0, "&dstrok;"], [0, "&Emacr;"], [0, "&emacr;"], [2, "&Edot;"], [0, "&edot;"], [0, "&Eogon;"], [0, "&eogon;"], [0, "&Ecaron;"], [0, "&ecaron;"], [0, "&Gcirc;"], [0, "&gcirc;"], [0, "&Gbreve;"], [0, "&gbreve;"], [0, "&Gdot;"], [0, "&gdot;"], [0, "&Gcedil;"], [1, "&Hcirc;"], [0, "&hcirc;"], [0, "&Hstrok;"], [0, "&hstrok;"], [0, "&Itilde;"], [0, "&itilde;"], [0, "&Imacr;"], [0, "&imacr;"], [2, "&Iogon;"], [0, "&iogon;"], [0, "&Idot;"], [0, "&imath;"], [0, "&IJlig;"], [0, "&ijlig;"], [0, "&Jcirc;"], [0, "&jcirc;"], [0, "&Kcedil;"], [0, "&kcedil;"], [0, "&kgreen;"], [0, "&Lacute;"], [0, "&lacute;"], [0, "&Lcedil;"], [0, "&lcedil;"], [0, "&Lcaron;"], [0, "&lcaron;"], [0, "&Lmidot;"], [0, "&lmidot;"], [0, "&Lstrok;"], [0, "&lstrok;"], [0, "&Nacute;"], [0, "&nacute;"], [0, "&Ncedil;"], [0, "&ncedil;"], [0, "&Ncaron;"], [0, "&ncaron;"], [0, "&napos;"], [0, "&ENG;"], [0, "&eng;"], [0, "&Omacr;"], [0, "&omacr;"], [2, "&Odblac;"], [0, "&odblac;"], [0, "&OElig;"], [0, "&oelig;"], [0, "&Racute;"], [0, "&racute;"], [0, "&Rcedil;"], [0, "&rcedil;"], [0, "&Rcaron;"], [0, "&rcaron;"], [0, "&Sacute;"], [0, "&sacute;"], [0, "&Scirc;"], [0, "&scirc;"], [0, "&Scedil;"], [0, "&scedil;"], [0, "&Scaron;"], [0, "&scaron;"], [0, "&Tcedil;"], [0, "&tcedil;"], [0, "&Tcaron;"], [0, "&tcaron;"], [0, "&Tstrok;"], [0, "&tstrok;"], [0, "&Utilde;"], [0, "&utilde;"], [0, "&Umacr;"], [0, "&umacr;"], [0, "&Ubreve;"], [0, "&ubreve;"], [0, "&Uring;"], [0, "&uring;"], [0, "&Udblac;"], [0, "&udblac;"], [0, "&Uogon;"], [0, "&uogon;"], [0, "&Wcirc;"], [0, "&wcirc;"], [0, "&Ycirc;"], [0, "&ycirc;"], [0, "&Yuml;"], [0, "&Zacute;"], [0, "&zacute;"], [0, "&Zdot;"], [0, "&zdot;"], [0, "&Zcaron;"], [0, "&zcaron;"], [19, "&fnof;"], [34, "&imped;"], [63, "&gacute;"], [65, "&jmath;"], [142, "&circ;"], [0, "&caron;"], [16, "&breve;"], [0, "&DiacriticalDot;"], [0, "&ring;"], [0, "&ogon;"], [0, "&DiacriticalTilde;"], [0, "&dblac;"], [51, "&DownBreve;"], [127, "&Alpha;"], [0, "&Beta;"], [0, "&Gamma;"], [0, "&Delta;"], [0, "&Epsilon;"], [0, "&Zeta;"], [0, "&Eta;"], [0, "&Theta;"], [0, "&Iota;"], [0, "&Kappa;"], [0, "&Lambda;"], [0, "&Mu;"], [0, "&Nu;"], [0, "&Xi;"], [0, "&Omicron;"], [0, "&Pi;"], [0, "&Rho;"], [1, "&Sigma;"], [0, "&Tau;"], [0, "&Upsilon;"], [0, "&Phi;"], [0, "&Chi;"], [0, "&Psi;"], [0, "&ohm;"], [7, "&alpha;"], [0, "&beta;"], [0, "&gamma;"], [0, "&delta;"], [0, "&epsi;"], [0, "&zeta;"], [0, "&eta;"], [0, "&theta;"], [0, "&iota;"], [0, "&kappa;"], [0, "&lambda;"], [0, "&mu;"], [0, "&nu;"], [0, "&xi;"], [0, "&omicron;"], [0, "&pi;"], [0, "&rho;"], [0, "&sigmaf;"], [0, "&sigma;"], [0, "&tau;"], [0, "&upsi;"], [0, "&phi;"], [0, "&chi;"], [0, "&psi;"], [0, "&omega;"], [7, "&thetasym;"], [0, "&Upsi;"], [2, "&phiv;"], [0, "&piv;"], [5, "&Gammad;"], [0, "&digamma;"], [18, "&kappav;"], [0, "&rhov;"], [3, "&epsiv;"], [0, "&backepsilon;"], [10, "&IOcy;"], [0, "&DJcy;"], [0, "&GJcy;"], [0, "&Jukcy;"], [0, "&DScy;"], [0, "&Iukcy;"], [0, "&YIcy;"], [0, "&Jsercy;"], [0, "&LJcy;"], [0, "&NJcy;"], [0, "&TSHcy;"], [0, "&KJcy;"], [1, "&Ubrcy;"], [0, "&DZcy;"], [0, "&Acy;"], [0, "&Bcy;"], [0, "&Vcy;"], [0, "&Gcy;"], [0, "&Dcy;"], [0, "&IEcy;"], [0, "&ZHcy;"], [0, "&Zcy;"], [0, "&Icy;"], [0, "&Jcy;"], [0, "&Kcy;"], [0, "&Lcy;"], [0, "&Mcy;"], [0, "&Ncy;"], [0, "&Ocy;"], [0, "&Pcy;"], [0, "&Rcy;"], [0, "&Scy;"], [0, "&Tcy;"], [0, "&Ucy;"], [0, "&Fcy;"], [0, "&KHcy;"], [0, "&TScy;"], [0, "&CHcy;"], [0, "&SHcy;"], [0, "&SHCHcy;"], [0, "&HARDcy;"], [0, "&Ycy;"], [0, "&SOFTcy;"], [0, "&Ecy;"], [0, "&YUcy;"], [0, "&YAcy;"], [0, "&acy;"], [0, "&bcy;"], [0, "&vcy;"], [0, "&gcy;"], [0, "&dcy;"], [0, "&iecy;"], [0, "&zhcy;"], [0, "&zcy;"], [0, "&icy;"], [0, "&jcy;"], [0, "&kcy;"], [0, "&lcy;"], [0, "&mcy;"], [0, "&ncy;"], [0, "&ocy;"], [0, "&pcy;"], [0, "&rcy;"], [0, "&scy;"], [0, "&tcy;"], [0, "&ucy;"], [0, "&fcy;"], [0, "&khcy;"], [0, "&tscy;"], [0, "&chcy;"], [0, "&shcy;"], [0, "&shchcy;"], [0, "&hardcy;"], [0, "&ycy;"], [0, "&softcy;"], [0, "&ecy;"], [0, "&yucy;"], [0, "&yacy;"], [1, "&iocy;"], [0, "&djcy;"], [0, "&gjcy;"], [0, "&jukcy;"], [0, "&dscy;"], [0, "&iukcy;"], [0, "&yicy;"], [0, "&jsercy;"], [0, "&ljcy;"], [0, "&njcy;"], [0, "&tshcy;"], [0, "&kjcy;"], [1, "&ubrcy;"], [0, "&dzcy;"], [7074, "&ensp;"], [0, "&emsp;"], [0, "&emsp13;"], [0, "&emsp14;"], [1, "&numsp;"], [0, "&puncsp;"], [0, "&ThinSpace;"], [0, "&hairsp;"], [0, "&NegativeMediumSpace;"], [0, "&zwnj;"], [0, "&zwj;"], [0, "&lrm;"], [0, "&rlm;"], [0, "&dash;"], [2, "&ndash;"], [0, "&mdash;"], [0, "&horbar;"], [0, "&Verbar;"], [1, "&lsquo;"], [0, "&CloseCurlyQuote;"], [0, "&lsquor;"], [1, "&ldquo;"], [0, "&CloseCurlyDoubleQuote;"], [0, "&bdquo;"], [1, "&dagger;"], [0, "&Dagger;"], [0, "&bull;"], [2, "&nldr;"], [0, "&hellip;"], [9, "&permil;"], [0, "&pertenk;"], [0, "&prime;"], [0, "&Prime;"], [0, "&tprime;"], [0, "&backprime;"], [3, "&lsaquo;"], [0, "&rsaquo;"], [3, "&oline;"], [2, "&caret;"], [1, "&hybull;"], [0, "&frasl;"], [10, "&bsemi;"], [7, "&qprime;"], [7, { v: "&MediumSpace;", n: 8202, o: "&ThickSpace;" }], [0, "&NoBreak;"], [0, "&af;"], [0, "&InvisibleTimes;"], [0, "&ic;"], [72, "&euro;"], [46, "&tdot;"], [0, "&DotDot;"], [37, "&complexes;"], [2, "&incare;"], [4, "&gscr;"], [0, "&hamilt;"], [0, "&Hfr;"], [0, "&Hopf;"], [0, "&planckh;"], [0, "&hbar;"], [0, "&imagline;"], [0, "&Ifr;"], [0, "&lagran;"], [0, "&ell;"], [1, "&naturals;"], [0, "&numero;"], [0, "&copysr;"], [0, "&weierp;"], [0, "&Popf;"], [0, "&Qopf;"], [0, "&realine;"], [0, "&real;"], [0, "&reals;"], [0, "&rx;"], [3, "&trade;"], [1, "&integers;"], [2, "&mho;"], [0, "&zeetrf;"], [0, "&iiota;"], [2, "&bernou;"], [0, "&Cayleys;"], [1, "&escr;"], [0, "&Escr;"], [0, "&Fouriertrf;"], [1, "&Mellintrf;"], [0, "&order;"], [0, "&alefsym;"], [0, "&beth;"], [0, "&gimel;"], [0, "&daleth;"], [12, "&CapitalDifferentialD;"], [0, "&dd;"], [0, "&ee;"], [0, "&ii;"], [10, "&frac13;"], [0, "&frac23;"], [0, "&frac15;"], [0, "&frac25;"], [0, "&frac35;"], [0, "&frac45;"], [0, "&frac16;"], [0, "&frac56;"], [0, "&frac18;"], [0, "&frac38;"], [0, "&frac58;"], [0, "&frac78;"], [49, "&larr;"], [0, "&ShortUpArrow;"], [0, "&rarr;"], [0, "&darr;"], [0, "&harr;"], [0, "&updownarrow;"], [0, "&nwarr;"], [0, "&nearr;"], [0, "&LowerRightArrow;"], [0, "&LowerLeftArrow;"], [0, "&nlarr;"], [0, "&nrarr;"], [1, { v: "&rarrw;", n: 824, o: "&nrarrw;" }], [0, "&Larr;"], [0, "&Uarr;"], [0, "&Rarr;"], [0, "&Darr;"], [0, "&larrtl;"], [0, "&rarrtl;"], [0, "&LeftTeeArrow;"], [0, "&mapstoup;"], [0, "&map;"], [0, "&DownTeeArrow;"], [1, "&hookleftarrow;"], [0, "&hookrightarrow;"], [0, "&larrlp;"], [0, "&looparrowright;"], [0, "&harrw;"], [0, "&nharr;"], [1, "&lsh;"], [0, "&rsh;"], [0, "&ldsh;"], [0, "&rdsh;"], [1, "&crarr;"], [0, "&cularr;"], [0, "&curarr;"], [2, "&circlearrowleft;"], [0, "&circlearrowright;"], [0, "&leftharpoonup;"], [0, "&DownLeftVector;"], [0, "&RightUpVector;"], [0, "&LeftUpVector;"], [0, "&rharu;"], [0, "&DownRightVector;"], [0, "&dharr;"], [0, "&dharl;"], [0, "&RightArrowLeftArrow;"], [0, "&udarr;"], [0, "&LeftArrowRightArrow;"], [0, "&leftleftarrows;"], [0, "&upuparrows;"], [0, "&rightrightarrows;"], [0, "&ddarr;"], [0, "&leftrightharpoons;"], [0, "&Equilibrium;"], [0, "&nlArr;"], [0, "&nhArr;"], [0, "&nrArr;"], [0, "&DoubleLeftArrow;"], [0, "&DoubleUpArrow;"], [0, "&DoubleRightArrow;"], [0, "&dArr;"], [0, "&DoubleLeftRightArrow;"], [0, "&DoubleUpDownArrow;"], [0, "&nwArr;"], [0, "&neArr;"], [0, "&seArr;"], [0, "&swArr;"], [0, "&lAarr;"], [0, "&rAarr;"], [1, "&zigrarr;"], [6, "&larrb;"], [0, "&rarrb;"], [15, "&DownArrowUpArrow;"], [7, "&loarr;"], [0, "&roarr;"], [0, "&hoarr;"], [0, "&forall;"], [0, "&comp;"], [0, { v: "&part;", n: 824, o: "&npart;" }], [0, "&exist;"], [0, "&nexist;"], [0, "&empty;"], [1, "&Del;"], [0, "&Element;"], [0, "&NotElement;"], [1, "&ni;"], [0, "&notni;"], [2, "&prod;"], [0, "&coprod;"], [0, "&sum;"], [0, "&minus;"], [0, "&MinusPlus;"], [0, "&dotplus;"], [1, "&Backslash;"], [0, "&lowast;"], [0, "&compfn;"], [1, "&radic;"], [2, "&prop;"], [0, "&infin;"], [0, "&angrt;"], [0, { v: "&ang;", n: 8402, o: "&nang;" }], [0, "&angmsd;"], [0, "&angsph;"], [0, "&mid;"], [0, "&nmid;"], [0, "&DoubleVerticalBar;"], [0, "&NotDoubleVerticalBar;"], [0, "&and;"], [0, "&or;"], [0, { v: "&cap;", n: 65024, o: "&caps;" }], [0, { v: "&cup;", n: 65024, o: "&cups;" }], [0, "&int;"], [0, "&Int;"], [0, "&iiint;"], [0, "&conint;"], [0, "&Conint;"], [0, "&Cconint;"], [0, "&cwint;"], [0, "&ClockwiseContourIntegral;"], [0, "&awconint;"], [0, "&there4;"], [0, "&becaus;"], [0, "&ratio;"], [0, "&Colon;"], [0, "&dotminus;"], [1, "&mDDot;"], [0, "&homtht;"], [0, { v: "&sim;", n: 8402, o: "&nvsim;" }], [0, { v: "&backsim;", n: 817, o: "&race;" }], [0, { v: "&ac;", n: 819, o: "&acE;" }], [0, "&acd;"], [0, "&VerticalTilde;"], [0, "&NotTilde;"], [0, { v: "&eqsim;", n: 824, o: "&nesim;" }], [0, "&sime;"], [0, "&NotTildeEqual;"], [0, "&cong;"], [0, "&simne;"], [0, "&ncong;"], [0, "&ap;"], [0, "&nap;"], [0, "&ape;"], [0, { v: "&apid;", n: 824, o: "&napid;" }], [0, "&backcong;"], [0, { v: "&asympeq;", n: 8402, o: "&nvap;" }], [0, { v: "&bump;", n: 824, o: "&nbump;" }], [0, { v: "&bumpe;", n: 824, o: "&nbumpe;" }], [0, { v: "&doteq;", n: 824, o: "&nedot;" }], [0, "&doteqdot;"], [0, "&efDot;"], [0, "&erDot;"], [0, "&Assign;"], [0, "&ecolon;"], [0, "&ecir;"], [0, "&circeq;"], [1, "&wedgeq;"], [0, "&veeeq;"], [1, "&triangleq;"], [2, "&equest;"], [0, "&ne;"], [0, { v: "&Congruent;", n: 8421, o: "&bnequiv;" }], [0, "&nequiv;"], [1, { v: "&le;", n: 8402, o: "&nvle;" }], [0, { v: "&ge;", n: 8402, o: "&nvge;" }], [0, { v: "&lE;", n: 824, o: "&nlE;" }], [0, { v: "&gE;", n: 824, o: "&ngE;" }], [0, { v: "&lnE;", n: 65024, o: "&lvertneqq;" }], [0, { v: "&gnE;", n: 65024, o: "&gvertneqq;" }], [0, { v: "&ll;", n: new Map(/* @__PURE__ */ restoreDiff([[824, "&nLtv;"], [7577, "&nLt;"]])) }], [0, { v: "&gg;", n: new Map(/* @__PURE__ */ restoreDiff([[824, "&nGtv;"], [7577, "&nGt;"]])) }], [0, "&between;"], [0, "&NotCupCap;"], [0, "&nless;"], [0, "&ngt;"], [0, "&nle;"], [0, "&nge;"], [0, "&lesssim;"], [0, "&GreaterTilde;"], [0, "&nlsim;"], [0, "&ngsim;"], [0, "&LessGreater;"], [0, "&gl;"], [0, "&NotLessGreater;"], [0, "&NotGreaterLess;"], [0, "&pr;"], [0, "&sc;"], [0, "&prcue;"], [0, "&sccue;"], [0, "&PrecedesTilde;"], [0, { v: "&scsim;", n: 824, o: "&NotSucceedsTilde;" }], [0, "&NotPrecedes;"], [0, "&NotSucceeds;"], [0, { v: "&sub;", n: 8402, o: "&NotSubset;" }], [0, { v: "&sup;", n: 8402, o: "&NotSuperset;" }], [0, "&nsub;"], [0, "&nsup;"], [0, "&sube;"], [0, "&supe;"], [0, "&NotSubsetEqual;"], [0, "&NotSupersetEqual;"], [0, { v: "&subne;", n: 65024, o: "&varsubsetneq;" }], [0, { v: "&supne;", n: 65024, o: "&varsupsetneq;" }], [1, "&cupdot;"], [0, "&UnionPlus;"], [0, { v: "&sqsub;", n: 824, o: "&NotSquareSubset;" }], [0, { v: "&sqsup;", n: 824, o: "&NotSquareSuperset;" }], [0, "&sqsube;"], [0, "&sqsupe;"], [0, { v: "&sqcap;", n: 65024, o: "&sqcaps;" }], [0, { v: "&sqcup;", n: 65024, o: "&sqcups;" }], [0, "&CirclePlus;"], [0, "&CircleMinus;"], [0, "&CircleTimes;"], [0, "&osol;"], [0, "&CircleDot;"], [0, "&circledcirc;"], [0, "&circledast;"], [1, "&circleddash;"], [0, "&boxplus;"], [0, "&boxminus;"], [0, "&boxtimes;"], [0, "&dotsquare;"], [0, "&RightTee;"], [0, "&dashv;"], [0, "&DownTee;"], [0, "&bot;"], [1, "&models;"], [0, "&DoubleRightTee;"], [0, "&Vdash;"], [0, "&Vvdash;"], [0, "&VDash;"], [0, "&nvdash;"], [0, "&nvDash;"], [0, "&nVdash;"], [0, "&nVDash;"], [0, "&prurel;"], [1, "&LeftTriangle;"], [0, "&RightTriangle;"], [0, { v: "&LeftTriangleEqual;", n: 8402, o: "&nvltrie;" }], [0, { v: "&RightTriangleEqual;", n: 8402, o: "&nvrtrie;" }], [0, "&origof;"], [0, "&imof;"], [0, "&multimap;"], [0, "&hercon;"], [0, "&intcal;"], [0, "&veebar;"], [1, "&barvee;"], [0, "&angrtvb;"], [0, "&lrtri;"], [0, "&bigwedge;"], [0, "&bigvee;"], [0, "&bigcap;"], [0, "&bigcup;"], [0, "&diam;"], [0, "&sdot;"], [0, "&sstarf;"], [0, "&divideontimes;"], [0, "&bowtie;"], [0, "&ltimes;"], [0, "&rtimes;"], [0, "&leftthreetimes;"], [0, "&rightthreetimes;"], [0, "&backsimeq;"], [0, "&curlyvee;"], [0, "&curlywedge;"], [0, "&Sub;"], [0, "&Sup;"], [0, "&Cap;"], [0, "&Cup;"], [0, "&fork;"], [0, "&epar;"], [0, "&lessdot;"], [0, "&gtdot;"], [0, { v: "&Ll;", n: 824, o: "&nLl;" }], [0, { v: "&Gg;", n: 824, o: "&nGg;" }], [0, { v: "&leg;", n: 65024, o: "&lesg;" }], [0, { v: "&gel;", n: 65024, o: "&gesl;" }], [2, "&cuepr;"], [0, "&cuesc;"], [0, "&NotPrecedesSlantEqual;"], [0, "&NotSucceedsSlantEqual;"], [0, "&NotSquareSubsetEqual;"], [0, "&NotSquareSupersetEqual;"], [2, "&lnsim;"], [0, "&gnsim;"], [0, "&precnsim;"], [0, "&scnsim;"], [0, "&nltri;"], [0, "&NotRightTriangle;"], [0, "&nltrie;"], [0, "&NotRightTriangleEqual;"], [0, "&vellip;"], [0, "&ctdot;"], [0, "&utdot;"], [0, "&dtdot;"], [0, "&disin;"], [0, "&isinsv;"], [0, "&isins;"], [0, { v: "&isindot;", n: 824, o: "&notindot;" }], [0, "&notinvc;"], [0, "&notinvb;"], [1, { v: "&isinE;", n: 824, o: "&notinE;" }], [0, "&nisd;"], [0, "&xnis;"], [0, "&nis;"], [0, "&notnivc;"], [0, "&notnivb;"], [6, "&barwed;"], [0, "&Barwed;"], [1, "&lceil;"], [0, "&rceil;"], [0, "&LeftFloor;"], [0, "&rfloor;"], [0, "&drcrop;"], [0, "&dlcrop;"], [0, "&urcrop;"], [0, "&ulcrop;"], [0, "&bnot;"], [1, "&profline;"], [0, "&profsurf;"], [1, "&telrec;"], [0, "&target;"], [5, "&ulcorn;"], [0, "&urcorn;"], [0, "&dlcorn;"], [0, "&drcorn;"], [2, "&frown;"], [0, "&smile;"], [9, "&cylcty;"], [0, "&profalar;"], [7, "&topbot;"], [6, "&ovbar;"], [1, "&solbar;"], [60, "&angzarr;"], [51, "&lmoustache;"], [0, "&rmoustache;"], [2, "&OverBracket;"], [0, "&bbrk;"], [0, "&bbrktbrk;"], [37, "&OverParenthesis;"], [0, "&UnderParenthesis;"], [0, "&OverBrace;"], [0, "&UnderBrace;"], [2, "&trpezium;"], [4, "&elinters;"], [59, "&blank;"], [164, "&circledS;"], [55, "&boxh;"], [1, "&boxv;"], [9, "&boxdr;"], [3, "&boxdl;"], [3, "&boxur;"], [3, "&boxul;"], [3, "&boxvr;"], [7, "&boxvl;"], [7, "&boxhd;"], [7, "&boxhu;"], [7, "&boxvh;"], [19, "&boxH;"], [0, "&boxV;"], [0, "&boxdR;"], [0, "&boxDr;"], [0, "&boxDR;"], [0, "&boxdL;"], [0, "&boxDl;"], [0, "&boxDL;"], [0, "&boxuR;"], [0, "&boxUr;"], [0, "&boxUR;"], [0, "&boxuL;"], [0, "&boxUl;"], [0, "&boxUL;"], [0, "&boxvR;"], [0, "&boxVr;"], [0, "&boxVR;"], [0, "&boxvL;"], [0, "&boxVl;"], [0, "&boxVL;"], [0, "&boxHd;"], [0, "&boxhD;"], [0, "&boxHD;"], [0, "&boxHu;"], [0, "&boxhU;"], [0, "&boxHU;"], [0, "&boxvH;"], [0, "&boxVh;"], [0, "&boxVH;"], [19, "&uhblk;"], [3, "&lhblk;"], [3, "&block;"], [8, "&blk14;"], [0, "&blk12;"], [0, "&blk34;"], [13, "&square;"], [8, "&blacksquare;"], [0, "&EmptyVerySmallSquare;"], [1, "&rect;"], [0, "&marker;"], [2, "&fltns;"], [1, "&bigtriangleup;"], [0, "&blacktriangle;"], [0, "&triangle;"], [2, "&blacktriangleright;"], [0, "&rtri;"], [3, "&bigtriangledown;"], [0, "&blacktriangledown;"], [0, "&dtri;"], [2, "&blacktriangleleft;"], [0, "&ltri;"], [6, "&loz;"], [0, "&cir;"], [32, "&tridot;"], [2, "&bigcirc;"], [8, "&ultri;"], [0, "&urtri;"], [0, "&lltri;"], [0, "&EmptySmallSquare;"], [0, "&FilledSmallSquare;"], [8, "&bigstar;"], [0, "&star;"], [7, "&phone;"], [49, "&female;"], [1, "&male;"], [29, "&spades;"], [2, "&clubs;"], [1, "&hearts;"], [0, "&diamondsuit;"], [3, "&sung;"], [2, "&flat;"], [0, "&natural;"], [0, "&sharp;"], [163, "&check;"], [3, "&cross;"], [8, "&malt;"], [21, "&sext;"], [33, "&VerticalSeparator;"], [25, "&lbbrk;"], [0, "&rbbrk;"], [84, "&bsolhsub;"], [0, "&suphsol;"], [28, "&LeftDoubleBracket;"], [0, "&RightDoubleBracket;"], [0, "&lang;"], [0, "&rang;"], [0, "&Lang;"], [0, "&Rang;"], [0, "&loang;"], [0, "&roang;"], [7, "&longleftarrow;"], [0, "&longrightarrow;"], [0, "&longleftrightarrow;"], [0, "&DoubleLongLeftArrow;"], [0, "&DoubleLongRightArrow;"], [0, "&DoubleLongLeftRightArrow;"], [1, "&longmapsto;"], [2, "&dzigrarr;"], [258, "&nvlArr;"], [0, "&nvrArr;"], [0, "&nvHarr;"], [0, "&Map;"], [6, "&lbarr;"], [0, "&bkarow;"], [0, "&lBarr;"], [0, "&dbkarow;"], [0, "&drbkarow;"], [0, "&DDotrahd;"], [0, "&UpArrowBar;"], [0, "&DownArrowBar;"], [2, "&Rarrtl;"], [2, "&latail;"], [0, "&ratail;"], [0, "&lAtail;"], [0, "&rAtail;"], [0, "&larrfs;"], [0, "&rarrfs;"], [0, "&larrbfs;"], [0, "&rarrbfs;"], [2, "&nwarhk;"], [0, "&nearhk;"], [0, "&hksearow;"], [0, "&hkswarow;"], [0, "&nwnear;"], [0, "&nesear;"], [0, "&seswar;"], [0, "&swnwar;"], [8, { v: "&rarrc;", n: 824, o: "&nrarrc;" }], [1, "&cudarrr;"], [0, "&ldca;"], [0, "&rdca;"], [0, "&cudarrl;"], [0, "&larrpl;"], [2, "&curarrm;"], [0, "&cularrp;"], [7, "&rarrpl;"], [2, "&harrcir;"], [0, "&Uarrocir;"], [0, "&lurdshar;"], [0, "&ldrushar;"], [2, "&LeftRightVector;"], [0, "&RightUpDownVector;"], [0, "&DownLeftRightVector;"], [0, "&LeftUpDownVector;"], [0, "&LeftVectorBar;"], [0, "&RightVectorBar;"], [0, "&RightUpVectorBar;"], [0, "&RightDownVectorBar;"], [0, "&DownLeftVectorBar;"], [0, "&DownRightVectorBar;"], [0, "&LeftUpVectorBar;"], [0, "&LeftDownVectorBar;"], [0, "&LeftTeeVector;"], [0, "&RightTeeVector;"], [0, "&RightUpTeeVector;"], [0, "&RightDownTeeVector;"], [0, "&DownLeftTeeVector;"], [0, "&DownRightTeeVector;"], [0, "&LeftUpTeeVector;"], [0, "&LeftDownTeeVector;"], [0, "&lHar;"], [0, "&uHar;"], [0, "&rHar;"], [0, "&dHar;"], [0, "&luruhar;"], [0, "&ldrdhar;"], [0, "&ruluhar;"], [0, "&rdldhar;"], [0, "&lharul;"], [0, "&llhard;"], [0, "&rharul;"], [0, "&lrhard;"], [0, "&udhar;"], [0, "&duhar;"], [0, "&RoundImplies;"], [0, "&erarr;"], [0, "&simrarr;"], [0, "&larrsim;"], [0, "&rarrsim;"], [0, "&rarrap;"], [0, "&ltlarr;"], [1, "&gtrarr;"], [0, "&subrarr;"], [1, "&suplarr;"], [0, "&lfisht;"], [0, "&rfisht;"], [0, "&ufisht;"], [0, "&dfisht;"], [5, "&lopar;"], [0, "&ropar;"], [4, "&lbrke;"], [0, "&rbrke;"], [0, "&lbrkslu;"], [0, "&rbrksld;"], [0, "&lbrksld;"], [0, "&rbrkslu;"], [0, "&langd;"], [0, "&rangd;"], [0, "&lparlt;"], [0, "&rpargt;"], [0, "&gtlPar;"], [0, "&ltrPar;"], [3, "&vzigzag;"], [1, "&vangrt;"], [0, "&angrtvbd;"], [6, "&ange;"], [0, "&range;"], [0, "&dwangle;"], [0, "&uwangle;"], [0, "&angmsdaa;"], [0, "&angmsdab;"], [0, "&angmsdac;"], [0, "&angmsdad;"], [0, "&angmsdae;"], [0, "&angmsdaf;"], [0, "&angmsdag;"], [0, "&angmsdah;"], [0, "&bemptyv;"], [0, "&demptyv;"], [0, "&cemptyv;"], [0, "&raemptyv;"], [0, "&laemptyv;"], [0, "&ohbar;"], [0, "&omid;"], [0, "&opar;"], [1, "&operp;"], [1, "&olcross;"], [0, "&odsold;"], [1, "&olcir;"], [0, "&ofcir;"], [0, "&olt;"], [0, "&ogt;"], [0, "&cirscir;"], [0, "&cirE;"], [0, "&solb;"], [0, "&bsolb;"], [3, "&boxbox;"], [3, "&trisb;"], [0, "&rtriltri;"], [0, { v: "&LeftTriangleBar;", n: 824, o: "&NotLeftTriangleBar;" }], [0, { v: "&RightTriangleBar;", n: 824, o: "&NotRightTriangleBar;" }], [11, "&iinfin;"], [0, "&infintie;"], [0, "&nvinfin;"], [4, "&eparsl;"], [0, "&smeparsl;"], [0, "&eqvparsl;"], [5, "&blacklozenge;"], [8, "&RuleDelayed;"], [1, "&dsol;"], [9, "&bigodot;"], [0, "&bigoplus;"], [0, "&bigotimes;"], [1, "&biguplus;"], [1, "&bigsqcup;"], [5, "&iiiint;"], [0, "&fpartint;"], [2, "&cirfnint;"], [0, "&awint;"], [0, "&rppolint;"], [0, "&scpolint;"], [0, "&npolint;"], [0, "&pointint;"], [0, "&quatint;"], [0, "&intlarhk;"], [10, "&pluscir;"], [0, "&plusacir;"], [0, "&simplus;"], [0, "&plusdu;"], [0, "&plussim;"], [0, "&plustwo;"], [1, "&mcomma;"], [0, "&minusdu;"], [2, "&loplus;"], [0, "&roplus;"], [0, "&Cross;"], [0, "&timesd;"], [0, "&timesbar;"], [1, "&smashp;"], [0, "&lotimes;"], [0, "&rotimes;"], [0, "&otimesas;"], [0, "&Otimes;"], [0, "&odiv;"], [0, "&triplus;"], [0, "&triminus;"], [0, "&tritime;"], [0, "&intprod;"], [2, "&amalg;"], [0, "&capdot;"], [1, "&ncup;"], [0, "&ncap;"], [0, "&capand;"], [0, "&cupor;"], [0, "&cupcap;"], [0, "&capcup;"], [0, "&cupbrcap;"], [0, "&capbrcup;"], [0, "&cupcup;"], [0, "&capcap;"], [0, "&ccups;"], [0, "&ccaps;"], [2, "&ccupssm;"], [2, "&And;"], [0, "&Or;"], [0, "&andand;"], [0, "&oror;"], [0, "&orslope;"], [0, "&andslope;"], [1, "&andv;"], [0, "&orv;"], [0, "&andd;"], [0, "&ord;"], [1, "&wedbar;"], [6, "&sdote;"], [3, "&simdot;"], [2, { v: "&congdot;", n: 824, o: "&ncongdot;" }], [0, "&easter;"], [0, "&apacir;"], [0, { v: "&apE;", n: 824, o: "&napE;" }], [0, "&eplus;"], [0, "&pluse;"], [0, "&Esim;"], [0, "&Colone;"], [0, "&Equal;"], [1, "&ddotseq;"], [0, "&equivDD;"], [0, "&ltcir;"], [0, "&gtcir;"], [0, "&ltquest;"], [0, "&gtquest;"], [0, { v: "&leqslant;", n: 824, o: "&nleqslant;" }], [0, { v: "&geqslant;", n: 824, o: "&ngeqslant;" }], [0, "&lesdot;"], [0, "&gesdot;"], [0, "&lesdoto;"], [0, "&gesdoto;"], [0, "&lesdotor;"], [0, "&gesdotol;"], [0, "&lap;"], [0, "&gap;"], [0, "&lne;"], [0, "&gne;"], [0, "&lnap;"], [0, "&gnap;"], [0, "&lEg;"], [0, "&gEl;"], [0, "&lsime;"], [0, "&gsime;"], [0, "&lsimg;"], [0, "&gsiml;"], [0, "&lgE;"], [0, "&glE;"], [0, "&lesges;"], [0, "&gesles;"], [0, "&els;"], [0, "&egs;"], [0, "&elsdot;"], [0, "&egsdot;"], [0, "&el;"], [0, "&eg;"], [2, "&siml;"], [0, "&simg;"], [0, "&simlE;"], [0, "&simgE;"], [0, { v: "&LessLess;", n: 824, o: "&NotNestedLessLess;" }], [0, { v: "&GreaterGreater;", n: 824, o: "&NotNestedGreaterGreater;" }], [1, "&glj;"], [0, "&gla;"], [0, "&ltcc;"], [0, "&gtcc;"], [0, "&lescc;"], [0, "&gescc;"], [0, "&smt;"], [0, "&lat;"], [0, { v: "&smte;", n: 65024, o: "&smtes;" }], [0, { v: "&late;", n: 65024, o: "&lates;" }], [0, "&bumpE;"], [0, { v: "&PrecedesEqual;", n: 824, o: "&NotPrecedesEqual;" }], [0, { v: "&sce;", n: 824, o: "&NotSucceedsEqual;" }], [2, "&prE;"], [0, "&scE;"], [0, "&precneqq;"], [0, "&scnE;"], [0, "&prap;"], [0, "&scap;"], [0, "&precnapprox;"], [0, "&scnap;"], [0, "&Pr;"], [0, "&Sc;"], [0, "&subdot;"], [0, "&supdot;"], [0, "&subplus;"], [0, "&supplus;"], [0, "&submult;"], [0, "&supmult;"], [0, "&subedot;"], [0, "&supedot;"], [0, { v: "&subE;", n: 824, o: "&nsubE;" }], [0, { v: "&supE;", n: 824, o: "&nsupE;" }], [0, "&subsim;"], [0, "&supsim;"], [2, { v: "&subnE;", n: 65024, o: "&varsubsetneqq;" }], [0, { v: "&supnE;", n: 65024, o: "&varsupsetneqq;" }], [2, "&csub;"], [0, "&csup;"], [0, "&csube;"], [0, "&csupe;"], [0, "&subsup;"], [0, "&supsub;"], [0, "&subsub;"], [0, "&supsup;"], [0, "&suphsub;"], [0, "&supdsub;"], [0, "&forkv;"], [0, "&topfork;"], [0, "&mlcp;"], [8, "&Dashv;"], [1, "&Vdashl;"], [0, "&Barv;"], [0, "&vBar;"], [0, "&vBarv;"], [1, "&Vbar;"], [0, "&Not;"], [0, "&bNot;"], [0, "&rnmid;"], [0, "&cirmid;"], [0, "&midcir;"], [0, "&topcir;"], [0, "&nhpar;"], [0, "&parsim;"], [9, { v: "&parsl;", n: 8421, o: "&nparsl;" }], [44343, { n: new Map(/* @__PURE__ */ restoreDiff([[56476, "&Ascr;"], [1, "&Cscr;"], [0, "&Dscr;"], [2, "&Gscr;"], [2, "&Jscr;"], [0, "&Kscr;"], [2, "&Nscr;"], [0, "&Oscr;"], [0, "&Pscr;"], [0, "&Qscr;"], [1, "&Sscr;"], [0, "&Tscr;"], [0, "&Uscr;"], [0, "&Vscr;"], [0, "&Wscr;"], [0, "&Xscr;"], [0, "&Yscr;"], [0, "&Zscr;"], [0, "&ascr;"], [0, "&bscr;"], [0, "&cscr;"], [0, "&dscr;"], [1, "&fscr;"], [1, "&hscr;"], [0, "&iscr;"], [0, "&jscr;"], [0, "&kscr;"], [0, "&lscr;"], [0, "&mscr;"], [0, "&nscr;"], [1, "&pscr;"], [0, "&qscr;"], [0, "&rscr;"], [0, "&sscr;"], [0, "&tscr;"], [0, "&uscr;"], [0, "&vscr;"], [0, "&wscr;"], [0, "&xscr;"], [0, "&yscr;"], [0, "&zscr;"], [52, "&Afr;"], [0, "&Bfr;"], [1, "&Dfr;"], [0, "&Efr;"], [0, "&Ffr;"], [0, "&Gfr;"], [2, "&Jfr;"], [0, "&Kfr;"], [0, "&Lfr;"], [0, "&Mfr;"], [0, "&Nfr;"], [0, "&Ofr;"], [0, "&Pfr;"], [0, "&Qfr;"], [1, "&Sfr;"], [0, "&Tfr;"], [0, "&Ufr;"], [0, "&Vfr;"], [0, "&Wfr;"], [0, "&Xfr;"], [0, "&Yfr;"], [1, "&afr;"], [0, "&bfr;"], [0, "&cfr;"], [0, "&dfr;"], [0, "&efr;"], [0, "&ffr;"], [0, "&gfr;"], [0, "&hfr;"], [0, "&ifr;"], [0, "&jfr;"], [0, "&kfr;"], [0, "&lfr;"], [0, "&mfr;"], [0, "&nfr;"], [0, "&ofr;"], [0, "&pfr;"], [0, "&qfr;"], [0, "&rfr;"], [0, "&sfr;"], [0, "&tfr;"], [0, "&ufr;"], [0, "&vfr;"], [0, "&wfr;"], [0, "&xfr;"], [0, "&yfr;"], [0, "&zfr;"], [0, "&Aopf;"], [0, "&Bopf;"], [1, "&Dopf;"], [0, "&Eopf;"], [0, "&Fopf;"], [0, "&Gopf;"], [1, "&Iopf;"], [0, "&Jopf;"], [0, "&Kopf;"], [0, "&Lopf;"], [0, "&Mopf;"], [1, "&Oopf;"], [3, "&Sopf;"], [0, "&Topf;"], [0, "&Uopf;"], [0, "&Vopf;"], [0, "&Wopf;"], [0, "&Xopf;"], [0, "&Yopf;"], [1, "&aopf;"], [0, "&bopf;"], [0, "&copf;"], [0, "&dopf;"], [0, "&eopf;"], [0, "&fopf;"], [0, "&gopf;"], [0, "&hopf;"], [0, "&iopf;"], [0, "&jopf;"], [0, "&kopf;"], [0, "&lopf;"], [0, "&mopf;"], [0, "&nopf;"], [0, "&oopf;"], [0, "&popf;"], [0, "&qopf;"], [0, "&ropf;"], [0, "&sopf;"], [0, "&topf;"], [0, "&uopf;"], [0, "&vopf;"], [0, "&wopf;"], [0, "&xopf;"], [0, "&yopf;"], [0, "&zopf;"]])) }], [8906, "&fflig;"], [0, "&filig;"], [0, "&fllig;"], [0, "&ffilig;"], [0, "&ffllig;"]]));
3853
+
3854
+ // node_modules/.pnpm/entities@4.5.0/node_modules/entities/lib/esm/escape.js
3855
+ var xmlCodeMap = /* @__PURE__ */ new Map([
3856
+ [34, "&quot;"],
3857
+ [38, "&amp;"],
3858
+ [39, "&apos;"],
3859
+ [60, "&lt;"],
3860
+ [62, "&gt;"]
3861
+ ]);
3862
+ var getCodePoint = (
3863
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
3864
+ String.prototype.codePointAt != null ? (str, index) => str.codePointAt(index) : (
3865
+ // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae
3866
+ (c, index) => (c.charCodeAt(index) & 64512) === 55296 ? (c.charCodeAt(index) - 55296) * 1024 + c.charCodeAt(index + 1) - 56320 + 65536 : c.charCodeAt(index)
3867
+ )
3868
+ );
3869
+ function getEscaper(regex, map) {
3870
+ return function escape2(data) {
3871
+ let match;
3872
+ let lastIdx = 0;
3873
+ let result = "";
3874
+ while (match = regex.exec(data)) {
3875
+ if (lastIdx !== match.index) {
3876
+ result += data.substring(lastIdx, match.index);
3877
+ }
3878
+ result += map.get(match[0].charCodeAt(0));
3879
+ lastIdx = match.index + 1;
3880
+ }
3881
+ return result + data.substring(lastIdx);
3882
+ };
3883
+ }
3884
+ var escapeUTF8 = getEscaper(/[&<>'"]/g, xmlCodeMap);
3885
+ var escapeAttribute = getEscaper(/["&\u00A0]/g, /* @__PURE__ */ new Map([
3886
+ [34, "&quot;"],
3887
+ [38, "&amp;"],
3888
+ [160, "&nbsp;"]
3889
+ ]));
3890
+ var escapeText = getEscaper(/[&<>\u00A0]/g, /* @__PURE__ */ new Map([
3891
+ [38, "&amp;"],
3892
+ [60, "&lt;"],
3893
+ [62, "&gt;"],
3894
+ [160, "&nbsp;"]
3895
+ ]));
3896
+
3897
+ // node_modules/.pnpm/entities@4.5.0/node_modules/entities/lib/esm/index.js
3898
+ var EntityLevel;
3899
+ (function(EntityLevel2) {
3900
+ EntityLevel2[EntityLevel2["XML"] = 0] = "XML";
3901
+ EntityLevel2[EntityLevel2["HTML"] = 1] = "HTML";
3902
+ })(EntityLevel || (EntityLevel = {}));
3903
+ var EncodingMode;
3904
+ (function(EncodingMode2) {
3905
+ EncodingMode2[EncodingMode2["UTF8"] = 0] = "UTF8";
3906
+ EncodingMode2[EncodingMode2["ASCII"] = 1] = "ASCII";
3907
+ EncodingMode2[EncodingMode2["Extensive"] = 2] = "Extensive";
3908
+ EncodingMode2[EncodingMode2["Attribute"] = 3] = "Attribute";
3909
+ EncodingMode2[EncodingMode2["Text"] = 4] = "Text";
3910
+ })(EncodingMode || (EncodingMode = {}));
3911
+
3912
+ // node_modules/.pnpm/dom-serializer@2.0.0/node_modules/dom-serializer/lib/esm/foreignNames.js
3913
+ var elementNames = new Map([
3914
+ "altGlyph",
3915
+ "altGlyphDef",
3916
+ "altGlyphItem",
3917
+ "animateColor",
3918
+ "animateMotion",
3919
+ "animateTransform",
3920
+ "clipPath",
3921
+ "feBlend",
3922
+ "feColorMatrix",
3923
+ "feComponentTransfer",
3924
+ "feComposite",
3925
+ "feConvolveMatrix",
3926
+ "feDiffuseLighting",
3927
+ "feDisplacementMap",
3928
+ "feDistantLight",
3929
+ "feDropShadow",
3930
+ "feFlood",
3931
+ "feFuncA",
3932
+ "feFuncB",
3933
+ "feFuncG",
3934
+ "feFuncR",
3935
+ "feGaussianBlur",
3936
+ "feImage",
3937
+ "feMerge",
3938
+ "feMergeNode",
3939
+ "feMorphology",
3940
+ "feOffset",
3941
+ "fePointLight",
3942
+ "feSpecularLighting",
3943
+ "feSpotLight",
3944
+ "feTile",
3945
+ "feTurbulence",
3946
+ "foreignObject",
3947
+ "glyphRef",
3948
+ "linearGradient",
3949
+ "radialGradient",
3950
+ "textPath"
3951
+ ].map((val) => [val.toLowerCase(), val]));
3952
+ var attributeNames = new Map([
3953
+ "definitionURL",
3954
+ "attributeName",
3955
+ "attributeType",
3956
+ "baseFrequency",
3957
+ "baseProfile",
3958
+ "calcMode",
3959
+ "clipPathUnits",
3960
+ "diffuseConstant",
3961
+ "edgeMode",
3962
+ "filterUnits",
3963
+ "glyphRef",
3964
+ "gradientTransform",
3965
+ "gradientUnits",
3966
+ "kernelMatrix",
3967
+ "kernelUnitLength",
3968
+ "keyPoints",
3969
+ "keySplines",
3970
+ "keyTimes",
3971
+ "lengthAdjust",
3972
+ "limitingConeAngle",
3973
+ "markerHeight",
3974
+ "markerUnits",
3975
+ "markerWidth",
3976
+ "maskContentUnits",
3977
+ "maskUnits",
3978
+ "numOctaves",
3979
+ "pathLength",
3980
+ "patternContentUnits",
3981
+ "patternTransform",
3982
+ "patternUnits",
3983
+ "pointsAtX",
3984
+ "pointsAtY",
3985
+ "pointsAtZ",
3986
+ "preserveAlpha",
3987
+ "preserveAspectRatio",
3988
+ "primitiveUnits",
3989
+ "refX",
3990
+ "refY",
3991
+ "repeatCount",
3992
+ "repeatDur",
3993
+ "requiredExtensions",
3994
+ "requiredFeatures",
3995
+ "specularConstant",
3996
+ "specularExponent",
3997
+ "spreadMethod",
3998
+ "startOffset",
3999
+ "stdDeviation",
4000
+ "stitchTiles",
4001
+ "surfaceScale",
4002
+ "systemLanguage",
4003
+ "tableValues",
4004
+ "targetX",
4005
+ "targetY",
4006
+ "textLength",
4007
+ "viewBox",
4008
+ "viewTarget",
4009
+ "xChannelSelector",
4010
+ "yChannelSelector",
4011
+ "zoomAndPan"
4012
+ ].map((val) => [val.toLowerCase(), val]));
4013
+
4014
+ // node_modules/.pnpm/domutils@3.2.2/node_modules/domutils/lib/esm/helpers.js
4015
+ var DocumentPosition;
4016
+ (function(DocumentPosition2) {
4017
+ DocumentPosition2[DocumentPosition2["DISCONNECTED"] = 1] = "DISCONNECTED";
4018
+ DocumentPosition2[DocumentPosition2["PRECEDING"] = 2] = "PRECEDING";
4019
+ DocumentPosition2[DocumentPosition2["FOLLOWING"] = 4] = "FOLLOWING";
4020
+ DocumentPosition2[DocumentPosition2["CONTAINS"] = 8] = "CONTAINS";
4021
+ DocumentPosition2[DocumentPosition2["CONTAINED_BY"] = 16] = "CONTAINED_BY";
4022
+ })(DocumentPosition || (DocumentPosition = {}));
4023
+
4024
+ // node_modules/.pnpm/htmlparser2@10.1.0/node_modules/htmlparser2/dist/esm/index.js
4025
+ function parseDocument(data, options) {
4026
+ const handler = new DomHandler(void 0, options);
4027
+ new Parser(handler, options).end(data);
4028
+ return handler.root;
4029
+ }
4030
+
4031
+ // src/html-parser.ts
4032
+ function decompileHTML(html) {
4033
+ const diagnostics = [];
4034
+ const story = createStory();
4035
+ const doc = parseDocument(html);
4036
+ const twine2Data = findElement(doc, "tw-storydata");
4037
+ if (twine2Data) {
4038
+ decompileTwine2(twine2Data, story, diagnostics);
4039
+ return { story, diagnostics };
4040
+ }
4041
+ const twine1Data = findElementByIdPattern(doc, /^store(?:-a|A)rea$/);
4042
+ if (twine1Data) {
4043
+ decompileTwine1(twine1Data, story, diagnostics);
4044
+ return { story, diagnostics };
4045
+ }
4046
+ diagnostics.push({ level: "error", message: "Malformed HTML source; story data not found." });
4047
+ return { story, diagnostics };
4048
+ }
4049
+ function decompileTwine2(storyData, story, diagnostics) {
4050
+ let startnode = 0;
4051
+ const attrs = storyData.attribs ?? {};
4052
+ if (attrs["name"]) story.name = attrs["name"];
4053
+ if (attrs["startnode"]) {
4054
+ const parsed = parseInt(attrs["startnode"], 10);
4055
+ if (Number.isNaN(parsed)) {
4056
+ diagnostics.push({
4057
+ level: "warning",
4058
+ message: `Cannot parse "tw-storydata" content attribute "startnode" as an integer; value "${attrs["startnode"]}".`
4059
+ });
4060
+ } else {
4061
+ startnode = parsed;
4062
+ }
4063
+ }
4064
+ if (attrs["ifid"]) story.ifid = attrs["ifid"].toUpperCase();
4065
+ if (attrs["zoom"]) {
4066
+ const parsed = parseFloat(attrs["zoom"]);
4067
+ if (Number.isNaN(parsed)) {
4068
+ diagnostics.push({
4069
+ level: "warning",
4070
+ message: `Cannot parse "tw-storydata" content attribute "zoom" as a float; value "${attrs["zoom"]}".`
4071
+ });
4072
+ } else {
4073
+ story.twine2.zoom = parsed;
4074
+ }
4075
+ }
4076
+ if (attrs["format"]) story.twine2.format = attrs["format"];
4077
+ if (attrs["format-version"]) story.twine2.formatVersion = attrs["format-version"];
4078
+ if (attrs["options"]) {
4079
+ for (const opt of attrs["options"].split(/\s+/).filter((s) => s.length > 0)) {
4080
+ story.twine2.options.set(opt, true);
4081
+ }
4082
+ }
4083
+ for (const node of storyData.children ?? []) {
4084
+ if (node.type !== "tag" && node.type !== "style" && node.type !== "script") continue;
4085
+ switch (node.name) {
4086
+ case "style":
4087
+ case "script": {
4088
+ const text = getTextContent(node).trim();
4089
+ if (text.length === 0) continue;
4090
+ const name = node.name === "style" ? "Story Stylesheet" : "Story JavaScript";
4091
+ const tags = node.name === "style" ? ["stylesheet"] : ["script"];
4092
+ storyAdd(story, { name, tags, text }, diagnostics);
4093
+ break;
4094
+ }
4095
+ case "tw-tag": {
4096
+ const tagAttrs = node.attribs ?? {};
4097
+ const tagName = tagAttrs["name"] ?? "";
4098
+ const tagColor = tagAttrs["color"] ?? "";
4099
+ if (tagName) story.twine2.tagColors.set(tagName, tagColor);
4100
+ break;
4101
+ }
4102
+ case "tw-passagedata": {
4103
+ let pid = 0;
4104
+ const pAttrs = node.attribs ?? {};
4105
+ const name = pAttrs["name"] ?? "";
4106
+ const tags = pAttrs["tags"] ? pAttrs["tags"].split(/\s+/).filter((s) => s.length > 0) : [];
4107
+ const metadata = {};
4108
+ if (pAttrs["pid"]) {
4109
+ const parsed = parseInt(pAttrs["pid"], 10);
4110
+ if (Number.isNaN(parsed)) {
4111
+ diagnostics.push({
4112
+ level: "warning",
4113
+ message: `Cannot parse "tw-passagedata" content attribute "pid" as an integer; value "${pAttrs["pid"]}".`
4114
+ });
4115
+ } else {
4116
+ pid = parsed;
4117
+ }
4118
+ }
4119
+ if (pAttrs["position"]) metadata.position = pAttrs["position"];
4120
+ if (pAttrs["size"]) metadata.size = pAttrs["size"];
4121
+ if (pid === startnode && pid !== 0) {
4122
+ story.twine2.start = name;
4123
+ }
4124
+ const text = getTextContent(node).trim();
4125
+ const passage = { name, tags, text };
4126
+ if (metadata.position || metadata.size) {
4127
+ passage.metadata = metadata;
4128
+ }
4129
+ storyAdd(story, passage, diagnostics);
4130
+ break;
4131
+ }
4132
+ }
4133
+ }
4134
+ storyPrepend(story, { name: "StoryData", tags: [], text: marshalStoryData(story) }, diagnostics);
4135
+ }
4136
+ function decompileTwine1(storeArea, story, diagnostics) {
4137
+ for (const node of storeArea.children ?? []) {
4138
+ if (node.type !== "tag" || node.name !== "div") continue;
4139
+ const nodeAttrs = node.attribs ?? {};
4140
+ if (!("tiddler" in nodeAttrs)) continue;
4141
+ const name = nodeAttrs["tiddler"] ?? "";
4142
+ const tags = nodeAttrs["tags"] ? nodeAttrs["tags"].split(/\s+/).filter((s) => s.length > 0) : [];
4143
+ const metadata = {};
4144
+ if (nodeAttrs["twine-position"]) metadata.position = nodeAttrs["twine-position"];
4145
+ const rawContent = getTextContent(node);
4146
+ const text = tiddlerUnescape(rawContent).trim();
4147
+ const passage = { name, tags, text };
4148
+ if (metadata.position) {
4149
+ passage.metadata = metadata;
4150
+ }
4151
+ storyAdd(story, passage, diagnostics);
4152
+ }
4153
+ }
4154
+ function findElement(node, tagName) {
4155
+ if (node.type === "tag" && node.name === tagName) return node;
4156
+ for (const child of node.children ?? []) {
4157
+ const found = findElement(child, tagName);
4158
+ if (found) return found;
4159
+ }
4160
+ return void 0;
4161
+ }
4162
+ function findElementByIdPattern(node, idPattern) {
4163
+ if (node.type === "tag" && node.attribs?.["id"] && idPattern.test(node.attribs["id"])) return node;
4164
+ for (const child of node.children ?? []) {
4165
+ const found = findElementByIdPattern(child, idPattern);
4166
+ if (found) return found;
4167
+ }
4168
+ return void 0;
4169
+ }
4170
+ function getTextContent(el) {
4171
+ let text = "";
4172
+ for (const child of el.children ?? []) {
4173
+ if (child.type === "text" && child.data) {
4174
+ text += child.data;
4175
+ }
4176
+ }
4177
+ return text;
4178
+ }
4179
+
1331
4180
  // src/loader.ts
1332
4181
  function loadSources(story, filenames, opts, diagnostics, processedFiles) {
1333
4182
  for (const filename of filenames) {
@@ -1346,6 +4195,10 @@ function loadSources(story, filenames, opts, diagnostics, processedFiles) {
1346
4195
  case "twee2":
1347
4196
  loadTwee(story, filename, { ...opts, twee2Compat: true }, diagnostics);
1348
4197
  break;
4198
+ case "htm":
4199
+ case "html":
4200
+ loadHTML(story, filename, diagnostics);
4201
+ break;
1349
4202
  case "css":
1350
4203
  loadTagged(story, "stylesheet", filename, diagnostics);
1351
4204
  break;
@@ -1468,6 +4321,11 @@ function parseFontFile(filename) {
1468
4321
  diagnostics: []
1469
4322
  };
1470
4323
  }
4324
+ function parseHTMLFile(filename) {
4325
+ const source = readUTF8(filename);
4326
+ const result = decompileHTML(source);
4327
+ return { passages: result.story.passages, diagnostics: [...result.diagnostics] };
4328
+ }
1471
4329
  function parseFile(filename, opts) {
1472
4330
  const ext = normalizedFileExt(filename);
1473
4331
  switch (ext) {
@@ -1477,6 +4335,9 @@ function parseFile(filename, opts) {
1477
4335
  case "tw2":
1478
4336
  case "twee2":
1479
4337
  return parseTweeFile(filename, { ...opts, twee2Compat: true });
4338
+ case "htm":
4339
+ case "html":
4340
+ return parseHTMLFile(filename);
1480
4341
  case "css":
1481
4342
  return parseTaggedFile("stylesheet", filename);
1482
4343
  case "js":
@@ -1516,6 +4377,13 @@ function parseFile(filename, opts) {
1516
4377
  return void 0;
1517
4378
  }
1518
4379
  }
4380
+ function loadHTML(story, filename, diagnostics) {
4381
+ const result = parseHTMLFile(filename);
4382
+ diagnostics.push(...result.diagnostics);
4383
+ for (const p of result.passages) {
4384
+ storyAdd(story, p, diagnostics);
4385
+ }
4386
+ }
1519
4387
  function loadTwee(story, filename, opts, diagnostics) {
1520
4388
  const result = parseTweeFile(filename, opts);
1521
4389
  diagnostics.push(...result.diagnostics);
@@ -1609,21 +4477,20 @@ var VERSION = "1.2.0";
1609
4477
 
1610
4478
  // src/output-twine2.ts
1611
4479
  var CREATOR_NAME = "Twee-ts";
1612
- function toTwine2Archive(story, startName, diagnostics, options) {
1613
- return getTwine2DataChunk(story, startName, diagnostics, options) + "\n";
4480
+ function toTwine2Archive(story, startName, options) {
4481
+ return getTwine2DataChunk(story, startName, options) + "\n";
1614
4482
  }
1615
- function toTwine2HTML(story, format, startName, diagnostics, options) {
4483
+ function toTwine2HTML(story, format, startName, options) {
1616
4484
  let template = readFormatSource(format);
1617
4485
  if (template.includes("{{STORY_NAME}}")) {
1618
4486
  template = template.replaceAll("{{STORY_NAME}}", htmlEscape(story.name));
1619
4487
  }
1620
4488
  if (template.includes("{{STORY_DATA}}")) {
1621
- template = template.replace("{{STORY_DATA}}", getTwine2DataChunk(story, startName, diagnostics, options));
4489
+ template = template.replace("{{STORY_DATA}}", getTwine2DataChunk(story, startName, options));
1622
4490
  }
1623
4491
  return template;
1624
4492
  }
1625
- function getTwine2DataChunk(story, startName, diagnostics, options) {
1626
- ensureIFID(story, diagnostics);
4493
+ function getTwine2DataChunk(story, startName, options) {
1627
4494
  const parts = [];
1628
4495
  let startID = "";
1629
4496
  let pid = 0;
@@ -1692,23 +4559,6 @@ function getTwine2DataChunk(story, startName, diagnostics, options) {
1692
4559
  const wrapper = `<!-- UUID://${htmlCommentSanitize(story.ifid)}// --><tw-storydata name="${attrEscape(story.name)}" startnode="${attrEscape(startID)}" creator="${attrEscape(CREATOR_NAME)}" creator-version="${attrEscape(VERSION)}" ifid="${attrEscape(story.ifid)}" zoom="${attrEscape(zoom)}" format="${attrEscape(story.twine2.format)}" format-version="${attrEscape(story.twine2.formatVersion)}" options="${attrEscape(optionsStr)}" tags="${attrEscape(story.twine2.tags)}" hidden>`;
1693
4560
  return wrapper + parts.join("") + "</tw-storydata>";
1694
4561
  }
1695
- function ensureIFID(story, diagnostics) {
1696
- if (story.ifid !== "") return;
1697
- if (story.legacyIFID !== "") {
1698
- story.ifid = story.legacyIFID;
1699
- diagnostics.push({
1700
- level: "warning",
1701
- message: 'Story IFID not found; reusing "ifid" entry from the "StorySettings" special passage.'
1702
- });
1703
- } else {
1704
- const ifid = generateIFID();
1705
- story.ifid = ifid;
1706
- diagnostics.push({
1707
- level: "error",
1708
- message: `Story IFID not found. Add an IFID to your story: {"ifid":"${ifid}"}`
1709
- });
1710
- }
1711
- }
1712
4562
 
1713
4563
  // src/output-twine1.ts
1714
4564
  import { readFileSync as readFileSync2 } from "fs";
@@ -1719,7 +4569,7 @@ function toTwine1Archive(story, _startName) {
1719
4569
  return `<div id="storeArea" data-size="${count}">${data}</div>
1720
4570
  `;
1721
4571
  }
1722
- function toTwine1HTML(story, format, startName, _diagnostics) {
4572
+ function toTwine1HTML(story, format, startName) {
1723
4573
  const formatDir = dirname(format.filename);
1724
4574
  const parentDir = dirname(formatDir);
1725
4575
  let template = readFormatSource(format);
@@ -2276,6 +5126,7 @@ async function buildOutput(options, cache, changedFiles) {
2276
5126
  if (testMode) {
2277
5127
  story.twine2.options.set("debug", true);
2278
5128
  }
5129
+ ensureIFID(story, diagnostics);
2279
5130
  let output;
2280
5131
  switch (outputMode) {
2281
5132
  case "twee3":
@@ -2283,7 +5134,7 @@ async function buildOutput(options, cache, changedFiles) {
2283
5134
  output = toTwee(story, outputMode);
2284
5135
  break;
2285
5136
  case "twine2-archive":
2286
- output = toTwine2Archive(story, startName, diagnostics, { sourceInfo });
5137
+ output = toTwine2Archive(story, startName, { sourceInfo });
2287
5138
  break;
2288
5139
  case "twine1-archive":
2289
5140
  output = toTwine1Archive(story, startName);
@@ -2302,7 +5153,7 @@ async function buildOutput(options, cache, changedFiles) {
2302
5153
  throw new TweeTsError("No story format available for HTML output.", diagnostics);
2303
5154
  }
2304
5155
  if (format.isTwine2) {
2305
- output = toTwine2HTML(story, format, startName, diagnostics, { sourceInfo });
5156
+ output = toTwine2HTML(story, format, startName, { sourceInfo });
2306
5157
  } else {
2307
5158
  if (story.name === "" && !storyHas(story, "StoryTitle")) {
2308
5159
  diagnostics.push({
@@ -2310,7 +5161,7 @@ async function buildOutput(options, cache, changedFiles) {
2310
5161
  message: 'Special passage "StoryTitle" not found.'
2311
5162
  });
2312
5163
  }
2313
- output = toTwine1HTML(story, format, startName, diagnostics);
5164
+ output = toTwine1HTML(story, format, startName);
2314
5165
  }
2315
5166
  const modulePaths = options.modules ? getFilenames(options.modules) : [];
2316
5167
  output = modifyHead(output, modulePaths, options.headFile, diagnostics);
@@ -2327,6 +5178,23 @@ async function buildOutput(options, cache, changedFiles) {
2327
5178
  };
2328
5179
  return { output, story, format, diagnostics, stats };
2329
5180
  }
5181
+ function ensureIFID(story, diagnostics) {
5182
+ if (story.ifid !== "") return;
5183
+ if (story.legacyIFID !== "") {
5184
+ story.ifid = story.legacyIFID;
5185
+ diagnostics.push({
5186
+ level: "warning",
5187
+ message: 'Story IFID not found; reusing "ifid" entry from the "StorySettings" special passage.'
5188
+ });
5189
+ } else {
5190
+ const ifid = generateIFID();
5191
+ story.ifid = ifid;
5192
+ diagnostics.push({
5193
+ level: "error",
5194
+ message: `Story IFID not found. Add an IFID to your story: {"ifid":"${ifid}"}`
5195
+ });
5196
+ }
5197
+ }
2330
5198
  function storyToJSON(story) {
2331
5199
  const scripts = [];
2332
5200
  const stylesheets = [];
@@ -2647,6 +5515,8 @@ function scaffoldConfig() {
2647
5515
  }
2648
5516
  export {
2649
5517
  CONFIG_FILENAME,
5518
+ ItemType,
5519
+ StoryBuilder,
2650
5520
  TweeLexer,
2651
5521
  TweeTsError,
2652
5522
  applyTagAliases,
@@ -2654,6 +5524,8 @@ export {
2654
5524
  compile,
2655
5525
  compileIncremental,
2656
5526
  compileToFile,
5527
+ createIFID,
5528
+ decompileHTML,
2657
5529
  discoverCachedFormats,
2658
5530
  discoverFormats,
2659
5531
  fetchAndCacheFormat,