purifai 2.0.2 → 3.0.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/README.md +204 -368
- package/benchmark/results/v3.json +2767 -0
- package/dist/index.cjs +14 -406
- package/dist/index.d.cts +2 -191
- package/dist/index.d.ts +2 -191
- package/dist/index.js +14 -374
- package/dist/src/api.d.ts +7 -0
- package/dist/src/config.d.ts +18 -0
- package/dist/src/contracts.d.ts +40 -0
- package/dist/src/entities.d.ts +15 -0
- package/dist/src/formatter.d.ts +36 -0
- package/dist/src/generated/entities.d.ts +3 -0
- package/dist/src/policy.d.ts +15 -0
- package/dist/src/scanner.d.ts +71 -0
- package/dist/src/session.d.ts +27 -0
- package/docs/benchmarks/v3.md +92 -0
- package/docs/migration-v3.md +95 -0
- package/package.json +42 -38
package/dist/index.cjs
CHANGED
|
@@ -1,406 +1,14 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
};
|
|
10
|
-
var __copyProps = (to, from, except, desc) => {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
-
}
|
|
16
|
-
return to;
|
|
17
|
-
};
|
|
18
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
-
|
|
20
|
-
// index.ts
|
|
21
|
-
var index_exports = {};
|
|
22
|
-
__export(index_exports, {
|
|
23
|
-
Purifai: () => Purifai,
|
|
24
|
-
analyze: () => analyze,
|
|
25
|
-
default: () => index_default,
|
|
26
|
-
escape: () => escape,
|
|
27
|
-
escapeAttribute: () => escapeAttribute,
|
|
28
|
-
escapeUrl: () => escapeUrl,
|
|
29
|
-
isDangerous: () => isDangerous,
|
|
30
|
-
sanitize: () => sanitize,
|
|
31
|
-
sanitizeBatch: () => sanitizeBatch
|
|
32
|
-
});
|
|
33
|
-
module.exports = __toCommonJS(index_exports);
|
|
34
|
-
var DANGEROUS_TAGS_WITH_CONTENT = /<(script|style|iframe|frame|object|embed|applet|meta|link|form|svg|math|base)(?:\s[^>]*)?>[\s\S]*?<\/\1>|<(script|style|iframe|frame|object|embed|applet|meta|link|form|svg|math|base)(?:\s[^>]*)?\/?>|<\/(script|style|iframe|frame|object|embed|applet|meta|link|form|svg|math|base)>/gi;
|
|
35
|
-
var EVENT_HANDLERS_ENHANCED = /\s*o\s*n\s*[a-z]+\s*=\s*["']?[^"'>]+["']?/gi;
|
|
36
|
-
var DANGEROUS_PROTOCOLS_ENHANCED = /(?:href|src|action|formaction|data|background|poster|code|cite|longdesc|usemap|itemtype|ping|manifest|archive|classid|codebase|datasrc|dynsrc|lowsrc|srcset)\s*=\s*["']?\s*(?:j\s*a\s*v\s*a\s*s\s*c\s*r\s*i\s*p\s*t\s*:|javascript\s*:|vbscript\s*:|data:text\/html|data:image\/svg\+xml(?:[^"'>]*script)?|filesystem:|chrome-extension:|blob:|about:|res:|ie:|ms-its:|mk:|mhtml:|file:|jar:|hcp:|ms-help:|disk:|vnd\.ms-|shell:|lynxcgi:|lynxexec:|news:|nntp:|telnet:|gopher:|wais:|prospero:|webcal:|ldap:|ldaps:|ftp:|ftps:|sftp:|ssh:|ircs?:|mailto:|xmpp:|sms:|smsto:|mms:|mmsto:|tel:|fax:|modem:|payto:|bitcoin:|ethereum:|magnet:)[^"'\s>]*/gi;
|
|
37
|
-
var DANGEROUS_ATTRIBUTES = /(?:expression|@import|javascript:|vbscript:|livescript:|mocha:|behavior:|constructor)\s*\(/gi;
|
|
38
|
-
var TEMPLATE_INJECTION = /\{\{[\s\S]*?\}\}|<%[\s\S]*?%>|<\?[\s\S]*?\?>|\${[\s\S]*?}|#\{[\s\S]*?}/g;
|
|
39
|
-
var DANGEROUS_FUNCTIONS = /\b(?:alert|eval|expression|Function|constructor|prototype|__proto__|document\.write|document\.writeln|window\.location|document\.location|setTimeout|setInterval|setImmediate|execScript|msSetImmediate|range\.createContextualFragment|range\.insertNode|insertAdjacentHTML|outerHTML)\s*\(/gi;
|
|
40
|
-
var NULL_CONTROL_CHARS = /[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x9F]/g;
|
|
41
|
-
var POLYGLOT_JAVASCRIPT = /j\s*a\s*v\s*a\s*s\s*c\s*r\s*i\s*p\s*t\s*:/gi;
|
|
42
|
-
var POLYGLOT_EVENTS = /o\s*n\s*[a-z]+\s*(?:=|alert)/gi;
|
|
43
|
-
var ENCODED_TAGS = /\\x3c|\\x3e|%3c|%3e/gi;
|
|
44
|
-
var SUSPICIOUS_PATTERNS = /<|>|javascript:|vbscript:|\bon[a-z]+\s*=|@import|\{\{|<%|<\?|\${|#\{/i;
|
|
45
|
-
var DANGEROUS_PROTOCOL_TOKEN = /(?:j\s*a\s*v\s*a\s*s\s*c\s*r\s*i\s*p\s*t|v\s*b\s*s\s*c\s*r\s*i\s*p\s*t|l\s*i\s*v\s*e\s*s\s*c\s*r\s*i\s*p\s*t|m\s*o\s*c\s*h\s*a)\s*:|data\s*:\s*text\/html/i;
|
|
46
|
-
var HAS_TEXT_CONTENT = /[a-z0-9]/i;
|
|
47
|
-
var HTML_TAG = /<\/?[a-zA-Z][^>]*>/g;
|
|
48
|
-
function escapeAngleBrackets(str) {
|
|
49
|
-
return str.replace(/</g, "<").replace(/>/g, ">");
|
|
50
|
-
}
|
|
51
|
-
function stateless(pattern) {
|
|
52
|
-
return new RegExp(pattern.source, pattern.flags.replace(/[gy]/g, ""));
|
|
53
|
-
}
|
|
54
|
-
var DETECT_DANGEROUS_TAGS = stateless(DANGEROUS_TAGS_WITH_CONTENT);
|
|
55
|
-
var DETECT_EVENT_HANDLERS = stateless(EVENT_HANDLERS_ENHANCED);
|
|
56
|
-
var DETECT_DANGEROUS_PROTOCOLS = stateless(DANGEROUS_PROTOCOLS_ENHANCED);
|
|
57
|
-
var DETECT_DANGEROUS_ATTRIBUTES = stateless(DANGEROUS_ATTRIBUTES);
|
|
58
|
-
var DETECT_TEMPLATE_INJECTION = stateless(TEMPLATE_INJECTION);
|
|
59
|
-
var DETECT_POLYGLOT_JAVASCRIPT = stateless(POLYGLOT_JAVASCRIPT);
|
|
60
|
-
var DETECT_POLYGLOT_EVENTS = stateless(POLYGLOT_EVENTS);
|
|
61
|
-
var DEFAULT_OPTIONS = {
|
|
62
|
-
maxLength: 1e6,
|
|
63
|
-
// 1MB
|
|
64
|
-
allowedProtocols: ["http", "https", "mailto"],
|
|
65
|
-
aggressiveMode: true
|
|
66
|
-
};
|
|
67
|
-
var VERSION = "2.0.2";
|
|
68
|
-
var MAX_FILTER_PASSES = 5;
|
|
69
|
-
function decodeEncodingBypasses(str) {
|
|
70
|
-
let result = str;
|
|
71
|
-
try {
|
|
72
|
-
result = decodeURIComponent(result);
|
|
73
|
-
} catch {
|
|
74
|
-
}
|
|
75
|
-
try {
|
|
76
|
-
result = result.replace(/\\u([0-9a-fA-F]{4})/g, (_, hex) => {
|
|
77
|
-
return String.fromCharCode(parseInt(hex, 16));
|
|
78
|
-
});
|
|
79
|
-
result = result.replace(/\\x([0-9a-fA-F]{2})/g, (_, hex) => {
|
|
80
|
-
return String.fromCharCode(parseInt(hex, 16));
|
|
81
|
-
});
|
|
82
|
-
result = result.replace(/&#(\d+);/g, (_, num) => {
|
|
83
|
-
return String.fromCharCode(parseInt(num, 10));
|
|
84
|
-
});
|
|
85
|
-
result = result.replace(/&#x([0-9a-fA-F]+);/g, (_, hex) => {
|
|
86
|
-
return String.fromCharCode(parseInt(hex, 16));
|
|
87
|
-
});
|
|
88
|
-
} catch {
|
|
89
|
-
}
|
|
90
|
-
return result;
|
|
91
|
-
}
|
|
92
|
-
function removeDangerousTagsWithContent(str) {
|
|
93
|
-
return str.replace(DANGEROUS_TAGS_WITH_CONTENT, "");
|
|
94
|
-
}
|
|
95
|
-
function handlePolyglotAttacks(str) {
|
|
96
|
-
let result = str;
|
|
97
|
-
try {
|
|
98
|
-
result = result.replace(POLYGLOT_JAVASCRIPT, "");
|
|
99
|
-
result = result.replace(POLYGLOT_EVENTS, "");
|
|
100
|
-
result = result.replace(ENCODED_TAGS, "");
|
|
101
|
-
result = result.replace(/javascript\s*:\s*\/\*[\s\S]*?\*\//gi, "");
|
|
102
|
-
result = result.replace(/javascript\s*:\s*\/\*[^*]*\*\/[^>]*/gi, "");
|
|
103
|
-
result = result.replace(/<form[^>]*>[\s\S]*?<\/form>/gi, "");
|
|
104
|
-
result = result.replace(/<math[^>]*>[\s\S]*?<\/math>/gi, "");
|
|
105
|
-
result = result.replace(/%0[AD]/gi, "");
|
|
106
|
-
if (/svg|sVg|\x3c|\\\w{3}/i.test(result)) {
|
|
107
|
-
result = result.replace(/svg[^>]*>/gi, "");
|
|
108
|
-
result = result.replace(/sVg[^>]*>/gi, "");
|
|
109
|
-
result = result.replace(/\\x\w{2}/gi, "");
|
|
110
|
-
result = result.replace(/<\/[^>]*>/gi, "");
|
|
111
|
-
result = result.replace(/<[^>]*>/gi, "");
|
|
112
|
-
}
|
|
113
|
-
} catch {
|
|
114
|
-
result = result.replace(/<[^>]*>/g, "").replace(/[<>]/g, "");
|
|
115
|
-
}
|
|
116
|
-
return result;
|
|
117
|
-
}
|
|
118
|
-
function assessThreatLevel(input) {
|
|
119
|
-
if (!input) return "none";
|
|
120
|
-
if (/<script/i.test(input) || /javascript\s*:/i.test(input) || /\bon[a-z]+\s*=/i.test(input)) {
|
|
121
|
-
return "critical";
|
|
122
|
-
}
|
|
123
|
-
if (/<(iframe|object|embed|form|svg|math)/i.test(input) || /eval\s*\(/i.test(input)) {
|
|
124
|
-
return "high";
|
|
125
|
-
}
|
|
126
|
-
if (/<(style|link|meta)/i.test(input) || /expression\s*\(/i.test(input)) {
|
|
127
|
-
return "medium";
|
|
128
|
-
}
|
|
129
|
-
if (/<[^>]*>/i.test(input)) {
|
|
130
|
-
return "low";
|
|
131
|
-
}
|
|
132
|
-
return "none";
|
|
133
|
-
}
|
|
134
|
-
function isDangerous(input) {
|
|
135
|
-
if (!input) return false;
|
|
136
|
-
try {
|
|
137
|
-
return DETECT_DANGEROUS_TAGS.test(input) || DETECT_EVENT_HANDLERS.test(input) || DETECT_DANGEROUS_PROTOCOLS.test(input) || DETECT_DANGEROUS_ATTRIBUTES.test(input) || DETECT_TEMPLATE_INJECTION.test(input) || DETECT_POLYGLOT_JAVASCRIPT.test(input) || DETECT_POLYGLOT_EVENTS.test(input) || DANGEROUS_PROTOCOL_TOKEN.test(input);
|
|
138
|
-
} catch {
|
|
139
|
-
return true;
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
function sanitize(input, options) {
|
|
143
|
-
const config = { ...DEFAULT_OPTIONS, ...options };
|
|
144
|
-
if (input === null || input === void 0) return "";
|
|
145
|
-
let str;
|
|
146
|
-
try {
|
|
147
|
-
if (typeof input === "string") {
|
|
148
|
-
str = input;
|
|
149
|
-
} else if (typeof input === "object") {
|
|
150
|
-
str = JSON.stringify(input);
|
|
151
|
-
} else {
|
|
152
|
-
str = String(input);
|
|
153
|
-
}
|
|
154
|
-
} catch {
|
|
155
|
-
return "";
|
|
156
|
-
}
|
|
157
|
-
if (str.length > config.maxLength) {
|
|
158
|
-
str = str.substring(0, config.maxLength);
|
|
159
|
-
}
|
|
160
|
-
if (!str.trim()) return "";
|
|
161
|
-
let result = str.replace(NULL_CONTROL_CHARS, "");
|
|
162
|
-
try {
|
|
163
|
-
result = decodeEncodingBypasses(result);
|
|
164
|
-
const dangerous = isDangerous(str) || isDangerous(result);
|
|
165
|
-
if (!dangerous) {
|
|
166
|
-
const benign = removeDangerousTagsWithContent(result).replace(HTML_TAG, "").replace(DANGEROUS_ATTRIBUTES, "").replace(TEMPLATE_INJECTION, "").replace(DANGEROUS_FUNCTIONS, "");
|
|
167
|
-
return escapeAngleBrackets(benign).replace(/\s+/g, " ").trim();
|
|
168
|
-
}
|
|
169
|
-
result = removeDangerousTagsWithContent(result);
|
|
170
|
-
result = handlePolyglotAttacks(result);
|
|
171
|
-
let previous;
|
|
172
|
-
let passes = 0;
|
|
173
|
-
do {
|
|
174
|
-
previous = result;
|
|
175
|
-
result = result.replace(DANGEROUS_TAGS_WITH_CONTENT, "").replace(EVENT_HANDLERS_ENHANCED, "").replace(DANGEROUS_PROTOCOLS_ENHANCED, (match) => {
|
|
176
|
-
const safeProtocols = config.allowedProtocols.join("|");
|
|
177
|
-
return match.match(new RegExp(`^(?:href|src)\\s*=\\s*["']?\\s*(?:${safeProtocols}):\\/\\/`, "i")) ? match : "";
|
|
178
|
-
}).replace(DANGEROUS_ATTRIBUTES, "").replace(TEMPLATE_INJECTION, "").replace(DANGEROUS_FUNCTIONS, "");
|
|
179
|
-
passes++;
|
|
180
|
-
} while (result !== previous && passes < MAX_FILTER_PASSES);
|
|
181
|
-
if (config.aggressiveMode && SUSPICIOUS_PATTERNS.test(result)) {
|
|
182
|
-
const tempCheck = result.replace(/<[^>]*>/g, "");
|
|
183
|
-
if (SUSPICIOUS_PATTERNS.test(tempCheck)) {
|
|
184
|
-
result = result.replace(/<[^>]*>/g, "").replace(/[<>]/g, "").replace(/javascript|vbscript/gi, "").replace(/\bon[a-z]+\s*=/gi, "").replace(/svg|SVG|sVg/gi, "").replace(/script|SCRIPT/gi, "").replace(/alert|eval/gi, "").replace(/\\x\w{2}/gi, "").replace(/[(){}[\]]/g, "");
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
result = result.replace(/\s+/g, " ").trim();
|
|
188
|
-
if (config.aggressiveMode && !HAS_TEXT_CONTENT.test(result)) {
|
|
189
|
-
return "";
|
|
190
|
-
}
|
|
191
|
-
return escapeAngleBrackets(result);
|
|
192
|
-
} catch {
|
|
193
|
-
return str.replace(NULL_CONTROL_CHARS, "").replace(/<[^>]*>/g, "").replace(/[<>]/g, "").replace(/javascript|vbscript|eval|alert/gi, "").replace(/\bon[a-z]+\s*=/gi, "").replace(/\s+/g, " ").trim();
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
function analyze(input, options) {
|
|
197
|
-
const startTime = performance.now();
|
|
198
|
-
const originalStr = String(input ?? "");
|
|
199
|
-
const sanitized = sanitize(input, options);
|
|
200
|
-
const processingTime = performance.now() - startTime;
|
|
201
|
-
const hadThreats = sanitized !== originalStr;
|
|
202
|
-
const threatLevel = assessThreatLevel(originalStr);
|
|
203
|
-
return {
|
|
204
|
-
content: sanitized,
|
|
205
|
-
hadThreats,
|
|
206
|
-
processingTime,
|
|
207
|
-
threatLevel
|
|
208
|
-
};
|
|
209
|
-
}
|
|
210
|
-
function sanitizeBatch(inputs, options) {
|
|
211
|
-
return inputs.map((input) => {
|
|
212
|
-
try {
|
|
213
|
-
return sanitize(input, options);
|
|
214
|
-
} catch {
|
|
215
|
-
return "";
|
|
216
|
-
}
|
|
217
|
-
});
|
|
218
|
-
}
|
|
219
|
-
function escape(input) {
|
|
220
|
-
if (input === null || input === void 0) return "";
|
|
221
|
-
const str = typeof input === "string" ? input : String(input);
|
|
222
|
-
return str.replace(NULL_CONTROL_CHARS, "").replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """).replace(/'/g, "'");
|
|
223
|
-
}
|
|
224
|
-
function escapeAttribute(input) {
|
|
225
|
-
if (input === null || input === void 0) return "";
|
|
226
|
-
const str = (typeof input === "string" ? input : String(input)).replace(NULL_CONTROL_CHARS, "");
|
|
227
|
-
let out = "";
|
|
228
|
-
for (const char of str) {
|
|
229
|
-
const code = char.codePointAt(0);
|
|
230
|
-
if (/[a-zA-Z0-9]/.test(char)) {
|
|
231
|
-
out += char;
|
|
232
|
-
} else if (code < 256) {
|
|
233
|
-
out += `&#x${code.toString(16).padStart(2, "0")};`;
|
|
234
|
-
} else {
|
|
235
|
-
out += `&#x${code.toString(16)};`;
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
return out;
|
|
239
|
-
}
|
|
240
|
-
function escapeUrl(input, options) {
|
|
241
|
-
if (input === null || input === void 0) return "";
|
|
242
|
-
const config = { ...DEFAULT_OPTIONS, ...options };
|
|
243
|
-
const str = (typeof input === "string" ? input : String(input)).trim();
|
|
244
|
-
if (!str) return "";
|
|
245
|
-
const normalized = str.replace(/[\x00-\x20\x7F-\x9F]/g, "");
|
|
246
|
-
const colon = normalized.indexOf(":");
|
|
247
|
-
if (colon !== -1) {
|
|
248
|
-
const beforeColon = normalized.slice(0, colon);
|
|
249
|
-
if (!/[/?#]/.test(beforeColon)) {
|
|
250
|
-
const protocol = beforeColon.toLowerCase();
|
|
251
|
-
if (!config.allowedProtocols.map((p) => p.toLowerCase()).includes(protocol)) {
|
|
252
|
-
return "";
|
|
253
|
-
}
|
|
254
|
-
}
|
|
255
|
-
}
|
|
256
|
-
return escapeAttribute(normalized);
|
|
257
|
-
}
|
|
258
|
-
function getVersion() {
|
|
259
|
-
return VERSION;
|
|
260
|
-
}
|
|
261
|
-
function getStats() {
|
|
262
|
-
return {
|
|
263
|
-
version: getVersion(),
|
|
264
|
-
securityLevel: "100% XSS Protection",
|
|
265
|
-
performance: "Optimized for high-throughput"
|
|
266
|
-
};
|
|
267
|
-
}
|
|
268
|
-
var Purifai = class {
|
|
269
|
-
/**
|
|
270
|
-
* Sanitize input with maximum security protection
|
|
271
|
-
*
|
|
272
|
-
* @param input - Content to sanitize (string, object, or any type)
|
|
273
|
-
* @param options - Optional configuration
|
|
274
|
-
* @returns Sanitized string safe for HTML output
|
|
275
|
-
*
|
|
276
|
-
* @example
|
|
277
|
-
* ```typescript
|
|
278
|
-
* import { Purifai } from 'purifai';
|
|
279
|
-
*
|
|
280
|
-
* const clean = Purifai.sanitize('<script>alert("xss")</script>Hello World');
|
|
281
|
-
* console.log(clean); // "Hello World"
|
|
282
|
-
* ```
|
|
283
|
-
*/
|
|
284
|
-
static sanitize(input, options) {
|
|
285
|
-
return sanitize(input, options);
|
|
286
|
-
}
|
|
287
|
-
/**
|
|
288
|
-
* Sanitize input and return detailed analysis
|
|
289
|
-
*
|
|
290
|
-
* @param input - Content to sanitize
|
|
291
|
-
* @param options - Optional configuration
|
|
292
|
-
* @returns Detailed sanitization result with threat analysis
|
|
293
|
-
*
|
|
294
|
-
* @example
|
|
295
|
-
* ```typescript
|
|
296
|
-
* const result = Purifai.analyze('<script>alert("xss")</script>Hello');
|
|
297
|
-
* console.log(result.content); // "Hello"
|
|
298
|
-
* console.log(result.hadThreats); // true
|
|
299
|
-
* console.log(result.threatLevel); // "critical"
|
|
300
|
-
* ```
|
|
301
|
-
*/
|
|
302
|
-
static analyze(input, options) {
|
|
303
|
-
return analyze(input, options);
|
|
304
|
-
}
|
|
305
|
-
/**
|
|
306
|
-
* Check if input contains dangerous patterns
|
|
307
|
-
*
|
|
308
|
-
* @param input - Content to check
|
|
309
|
-
* @returns true if dangerous content detected
|
|
310
|
-
*
|
|
311
|
-
* @example
|
|
312
|
-
* ```typescript
|
|
313
|
-
* const isDangerous = Purifai.isDangerous('<script>alert("xss")</script>');
|
|
314
|
-
* console.log(isDangerous); // true
|
|
315
|
-
* ```
|
|
316
|
-
*/
|
|
317
|
-
static isDangerous(input) {
|
|
318
|
-
return isDangerous(input);
|
|
319
|
-
}
|
|
320
|
-
/**
|
|
321
|
-
* Batch sanitize multiple inputs for optimal performance
|
|
322
|
-
*
|
|
323
|
-
* @param inputs - Array of inputs to sanitize
|
|
324
|
-
* @param options - Optional configuration
|
|
325
|
-
* @returns Array of sanitized strings
|
|
326
|
-
*
|
|
327
|
-
* @example
|
|
328
|
-
* ```typescript
|
|
329
|
-
* const cleaned = Purifai.sanitizeBatch([
|
|
330
|
-
* '<script>alert("xss")</script>Hello',
|
|
331
|
-
* '<img src=x onerror=alert(1)>World'
|
|
332
|
-
* ]);
|
|
333
|
-
* console.log(cleaned); // ["Hello", "World"]
|
|
334
|
-
* ```
|
|
335
|
-
*/
|
|
336
|
-
static sanitizeBatch(inputs, options) {
|
|
337
|
-
return sanitizeBatch(inputs, options);
|
|
338
|
-
}
|
|
339
|
-
/**
|
|
340
|
-
* Escape text for an HTML body context (lossless — nothing is removed)
|
|
341
|
-
*
|
|
342
|
-
* @example
|
|
343
|
-
* ```typescript
|
|
344
|
-
* Purifai.escape('if (a<b && c>d)'); // "if (a<b && c>d)"
|
|
345
|
-
* ```
|
|
346
|
-
*/
|
|
347
|
-
static escape(input) {
|
|
348
|
-
return escape(input);
|
|
349
|
-
}
|
|
350
|
-
/**
|
|
351
|
-
* Escape text for an HTML attribute value, safe even when unquoted
|
|
352
|
-
*
|
|
353
|
-
* @example
|
|
354
|
-
* ```typescript
|
|
355
|
-
* `<div title="${Purifai.escapeAttribute(userInput)}">`
|
|
356
|
-
* ```
|
|
357
|
-
*/
|
|
358
|
-
static escapeAttribute(input) {
|
|
359
|
-
return escapeAttribute(input);
|
|
360
|
-
}
|
|
361
|
-
/**
|
|
362
|
-
* Escape a URL, returning '' if its protocol is not allowed
|
|
363
|
-
*
|
|
364
|
-
* @example
|
|
365
|
-
* ```typescript
|
|
366
|
-
* Purifai.escapeUrl('javascript:alert(1)'); // ""
|
|
367
|
-
* Purifai.escapeUrl('https://example.com'); // escaped, safe for href
|
|
368
|
-
* ```
|
|
369
|
-
*/
|
|
370
|
-
static escapeUrl(input, options) {
|
|
371
|
-
return escapeUrl(input, options);
|
|
372
|
-
}
|
|
373
|
-
/**
|
|
374
|
-
* Get version information
|
|
375
|
-
*/
|
|
376
|
-
static getVersion() {
|
|
377
|
-
return getVersion();
|
|
378
|
-
}
|
|
379
|
-
/**
|
|
380
|
-
* Get performance and security statistics
|
|
381
|
-
*/
|
|
382
|
-
static getStats() {
|
|
383
|
-
return getStats();
|
|
384
|
-
}
|
|
385
|
-
};
|
|
386
|
-
var index_default = Purifai;
|
|
387
|
-
// Annotate the CommonJS export names for ESM import in node:
|
|
388
|
-
0 && (module.exports = {
|
|
389
|
-
Purifai,
|
|
390
|
-
analyze,
|
|
391
|
-
escape,
|
|
392
|
-
escapeAttribute,
|
|
393
|
-
escapeUrl,
|
|
394
|
-
isDangerous,
|
|
395
|
-
sanitize,
|
|
396
|
-
sanitizeBatch
|
|
397
|
-
});
|
|
398
|
-
/**
|
|
399
|
-
* 🛡️ PURIFAI - Ultra-Secure HTML Sanitizer
|
|
400
|
-
*
|
|
401
|
-
* Advanced XSS protection with polyglot attack resistance.
|
|
402
|
-
* Blocks sophisticated obfuscation techniques that bypass other sanitizers.
|
|
403
|
-
*
|
|
404
|
-
* @version 2.0.2
|
|
405
|
-
* @license MIT
|
|
406
|
-
*/
|
|
1
|
+
"use strict";var C=Object.defineProperty;var oe=Object.getOwnPropertyDescriptor;var ae=Object.getOwnPropertyNames;var ue=Object.prototype.hasOwnProperty;var ce=(n,e)=>{for(var t in e)C(n,t,{get:e[t],enumerable:!0})},de=(n,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of ae(e))!ue.call(n,i)&&i!==t&&C(n,i,{get:()=>e[i],enumerable:!(r=oe(e,i))||r.enumerable});return n};var pe=n=>de(C({},"__esModule",{value:!0}),n);var qe={};ce(qe,{PurifaiLimitError:()=>v,convert:()=>ie,createTextTransform:()=>le,escapeHtmlText:()=>se,toText:()=>ne});module.exports=pe(qe);var w=Object.freeze({input:1e6,output:25e4,depth:64,token:65536}),I=new Set(["layout","links","images","baseUrl","limits"]),he=new Set([...I,"overflow"]),fe=new Set(["input","output","depth","token"]);function V(n,e){if(n===null||typeof n!="object"||Array.isArray(n))throw new TypeError(`${e} must be an object`);return n}function H(n,e,t){for(let r of Reflect.ownKeys(n))if(typeof r!="string"||!e.has(r))throw new TypeError(`${t} contains unknown key ${String(r)}`)}function E(n,e,t,r){if(n===void 0)return e;if(typeof n!="string"||!t.includes(n))throw new TypeError(`${r} must be one of ${t.join(", ")}`);return n}function R(n,e,t){if(n===void 0)return e;if(!Number.isSafeInteger(n)||n<0)throw new TypeError(`${t} must be a non-negative safe integer`);return n}function ge(n){if(n===void 0)return w;let e=V(n,"options.limits");return H(e,fe,"options.limits"),Object.freeze({input:R(e.input,w.input,"options.limits.input"),output:R(e.output,w.output,"options.limits.output"),depth:R(e.depth,w.depth,"options.limits.depth"),token:R(e.token,w.token,"options.limits.token")})}function me(n){if(n===void 0)return null;if(typeof n!="string"&&!(n instanceof URL))throw new TypeError("options.baseUrl must be a string or URL");let e;try{e=new URL(n instanceof URL?n.href:n)}catch{throw new TypeError("options.baseUrl must be a valid HTTP(S) URL")}if(e.protocol!=="http:"&&e.protocol!=="https:"||e.username!==""||e.password!=="")throw new TypeError("options.baseUrl must be an HTTP(S) URL without credentials");return e}function M(n,e){let t=n===void 0?Object.create(null):V(n,"options");return H(t,e?he:I,"options"),Object.freeze({layout:E(t.layout,"readable",["readable","compact"],"options.layout"),links:E(t.links,"label",["label","label-and-url","drop"],"options.links"),images:E(t.images,"alt",["alt","drop"],"options.images"),baseUrl:me(t.baseUrl),limits:ge(t.limits),overflow:e?E(t.overflow,"throw",["throw","truncate"],"options.overflow"):"throw"})}function O(n){return M(n,!1)}function F(n){return M(n,!0)}function G(n,e){if(/[\u0000-\u001F\u007F]/.test(n))return null;let t=n.replace(/^ +/,"");if(t.startsWith("//")||t.startsWith("\\"))return null;let r=n.indexOf(":");if(r>=0&&/[\t\n\f\r ]/.test(n.slice(0,r)))return null;let i=/^[A-Za-z][A-Za-z0-9+.-]*:/.test(n);if(!i&&e===null)return null;let l;try{l=i?new URL(n):new URL(n,e??void 0)}catch{return null}return l.protocol!=="http:"&&l.protocol!=="https:"&&l.protocol!=="mailto:"||l.username!==""||l.password!==""?null:l.href}var v=class extends RangeError{constructor(e,t,r){super(`Purifai ${e} limit ${t} exceeded at ${r}`),this.name="PurifaiLimitError",this.kind=e,this.limit=t,this.observed=r}};var N=Object.create(null);function f(n,e){for(let t of e)N[t]=Object.freeze({name:t,kind:n})}f("void",["base","br","col","embed","hr","img","input","link","meta","param","source","track","wbr"]);f("inline",["a","abbr","b","bdi","bdo","button","cite","code","data","del","dfn","em","html","body","i","ins","kbd","label","legend","mark","object","option","q","rp","rt","ruby","s","samp","select","slot","small","span","strong","sub","sup","time","u","var","audio","canvas","video"]);f("block",["address","article","aside","blockquote","details","dialog","div","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","main","nav","p","section","summary","dd","dt","legend"]);f("list",["dl","li","menu","ol","ul"]);f("table",["caption","colgroup","table","tbody","td","tfoot","th","thead","tr"]);f("pre",["pre"]);f("raw-preserve",["plaintext","textarea","xmp"]);f("raw-drop",["iframe","noembed","noframes","noscript","script","style","title"]);f("ordinary-drop",["applet","frameset","template"]);f("head",["head"]);f("foreign-drop",["math","svg"]);function m(n){return N[n]??null}function B(n){let e=N[n]?.kind;return e==="block"||e==="list"||e==="table"||e==="pre"||e==="raw-preserve"}function j(n){return n===" "||n===`
|
|
2
|
+
`||n==="\f"||n==="\r"||n===" "}function _(n,e){let t=Math.min(e,n.length);return t>0&&t<n.length&&n.charCodeAt(t-1)>=55296&&n.charCodeAt(t-1)<=56319&&(t-=1),[n.slice(0,t),n.slice(t)]}function z(n){if(n===void 0||!/^\d+$/.test(n))return null;let e=Number(n);return Number.isSafeInteger(e)?e:null}var L=class{constructor(e,t){this.frames=[];this.lists=[];this.tables=[];this.preInitialLineFeeds=[];this.pendingWhitespace=!1;this.pendingBreaks=0;this.pendingTab=!1;this.pendingListPrefix=null;this.quoteDepth=0;this.suppressedLinkDepth=0;this.hasOutput=!1;this.atLineStart=!0;this.trailingNewlines=0;this.serial=0;this.config=e,this.writeOutput=t}text(e,t){if(this.suppressedLinkDepth>0)return;if(t==="pre"&&this.config.layout==="readable"){for(let i of e){let l=this.preInitialLineFeeds.length-1;l>=0&&this.preInitialLineFeeds[l]&&(this.preInitialLineFeeds[l]=!1,i===`
|
|
3
|
+
`)||this.emitPre(i)}return}let r=0;for(;r<e.length;){if(j(e[r]??"")){this.hasOutput&&(this.pendingWhitespace=!0),r+=1;continue}let i=r;for(;r<e.length&&!j(e[r]??"");)r+=1;this.emitNormal(e.slice(i,r))}}start(e,t){let r=m(e),i=e==="a"&&this.config.links==="drop",l=this.suppressedLinkDepth>0||i;if(r?.kind!=="void"&&this.frames.push({tag:e,serial:this.serial,pendingWhitespace:this.pendingWhitespace,pendingBreaks:this.pendingBreaks,pendingTab:this.pendingTab,pendingListPrefix:this.pendingListPrefix,suppressed:l,linkHref:e==="a"&&this.config.links==="label-and-url"?t.href??null:null}),i&&(this.suppressedLinkDepth+=1),!l){if(e==="img"){this.image(t.alt);return}if(e==="br")this.boundary(1);else if(e==="hr")this.boundary(2);else if(e==="blockquote")this.boundary(2),this.quoteDepth+=1;else if(e==="ol"||e==="ul"||e==="menu"||e==="dl"){this.boundary(this.lists.length>0?1:2);let o=z(t.start);this.lists.push({kind:e==="ol"?"ordered":e==="dl"?"description":"unordered",next:o??1,indent:this.lists.length})}else if(e==="li")this.boundary(1),this.pendingListPrefix=this.listPrefix(t.value);else if(e==="dt"||e==="dd")this.boundary(1);else if(e==="table")this.boundary(2),this.tables.push({cells:0});else if(e==="tr"){this.boundary(1);let o=this.tables[this.tables.length-1];o!==void 0&&(o.cells=0)}else if(e==="td"||e==="th"){let o=this.tables[this.tables.length-1];o!==void 0&&(o.cells>0&&(this.pendingTab=!0),o.cells+=1)}else e==="pre"?(this.boundary(2),this.preInitialLineFeeds.push(!0)):B(e)&&m(e)?.kind!=="table"&&this.boundary(2)}}end(e){let t=this.frames.pop();if(t?.suppressed){e==="a"&&this.config.links==="drop"&&(this.suppressedLinkDepth=Math.max(0,this.suppressedLinkDepth-1)),this.pendingWhitespace=t.pendingWhitespace,this.pendingBreaks=t.pendingBreaks,this.pendingTab=t.pendingTab,this.pendingListPrefix=t.pendingListPrefix;return}if(e==="blockquote"?this.quoteDepth=Math.max(0,this.quoteDepth-1):e==="ol"||e==="ul"||e==="menu"||e==="dl"?this.lists.pop():e==="li"?this.pendingListPrefix=null:e==="table"?this.tables.pop():e==="pre"&&this.preInitialLineFeeds.pop(),e==="a"&&t?.linkHref!==null&&t?.linkHref!==void 0){let r=G(t.linkHref,this.config.baseUrl);r!==null&&this.appendUrl(r)}if(t!==void 0&&t.tag===e&&t.serial===this.serial){this.pendingWhitespace=t.pendingWhitespace,this.pendingBreaks=t.pendingBreaks,this.pendingTab=t.pendingTab,this.pendingListPrefix=t.pendingListPrefix;return}if(e==="li"||e==="dt"||e==="dd"||e==="tr")this.boundary(1);else{if(e==="td"||e==="th"||e==="caption"||e==="thead"||e==="tbody"||e==="tfoot")return;B(e)&&this.boundary(2)}}finish(){this.pendingWhitespace=!1,this.pendingBreaks=0,this.pendingTab=!1,this.pendingListPrefix=null}listPrefix(e){let t=this.lists[this.lists.length-1];if(t===void 0||t.kind==="description")return null;let r=" ".repeat(t.indent);if(t.kind==="unordered")return`${r}- `;let i=z(e);i!==null&&(t.next=i);let l=t.next;return t.next<Number.MAX_SAFE_INTEGER&&(t.next+=1),`${r}${l}. `}image(e){this.hasOutput&&(this.pendingWhitespace=!0),this.config.images==="alt"&&e!==void 0&&/[^\t\n\f\r ]/.test(e)&&this.text(e,"normal"),this.hasOutput&&(this.pendingWhitespace=!0)}appendUrl(e){this.hasOutput&&(this.pendingWhitespace=!0);for(let t of`[${e}]`)this.emitNormal(t)}boundary(e){if(this.hasOutput){if(this.pendingTab=!1,this.config.layout==="compact"){this.pendingWhitespace=!0;return}this.pendingWhitespace=!1,this.pendingBreaks=Math.max(this.pendingBreaks,e)}}takeSeparator(){if(!this.hasOutput)return"";let e="";return this.config.layout==="compact"?(this.pendingWhitespace||this.pendingBreaks>0||this.pendingTab)&&(e=" "):this.pendingTab?e=" ":this.pendingBreaks>0?e=`
|
|
4
|
+
`.repeat(Math.max(0,this.pendingBreaks-this.trailingNewlines)):this.pendingWhitespace&&(e=" "),this.pendingWhitespace=!1,this.pendingBreaks=0,this.pendingTab=!1,e}takePrefixes(e){let t="";return this.config.layout==="readable"&&e&&this.quoteDepth>0&&(t+="> ".repeat(this.quoteDepth)),this.pendingListPrefix!==null&&(t+=this.config.layout==="compact"?this.pendingListPrefix.replace(/^ +/,""):this.pendingListPrefix,this.pendingListPrefix=null),t}emitNormal(e){let t=this.takeSeparator(),r=!this.hasOutput||this.atLineStart||t.includes(`
|
|
5
|
+
`),i=(e.codePointAt(0)??0)>65535?2:1;this.write(t+this.takePrefixes(r)+e.slice(0,i)),e.length>i&&this.write(e.slice(i),!0)}emitPre(e){let t=this.takeSeparator(),r=!this.hasOutput||this.atLineStart||t.includes(`
|
|
6
|
+
`),i=e===`
|
|
7
|
+
`?"":this.takePrefixes(r);this.write(t+i+e)}write(e,t=!1){if(e.length===0)return;this.writeOutput(e,t),this.serial+=1,this.hasOutput=!0,this.atLineStart=e.endsWith(`
|
|
8
|
+
`);let r=0;for(let i=e.length-1;i>=0&&e[i]===`
|
|
9
|
+
`;i-=1)r+=1;this.trailingNewlines=r}};var Y=Object.freeze({AElig:"\xC6","AElig;":"\xC6",AMP:"&","AMP;":"&",Aacute:"\xC1","Aacute;":"\xC1","Abreve;":"\u0102",Acirc:"\xC2","Acirc;":"\xC2","Acy;":"\u0410","Afr;":"\u{1D504}",Agrave:"\xC0","Agrave;":"\xC0","Alpha;":"\u0391","Amacr;":"\u0100","And;":"\u2A53","Aogon;":"\u0104","Aopf;":"\u{1D538}","ApplyFunction;":"\u2061",Aring:"\xC5","Aring;":"\xC5","Ascr;":"\u{1D49C}","Assign;":"\u2254",Atilde:"\xC3","Atilde;":"\xC3",Auml:"\xC4","Auml;":"\xC4","Backslash;":"\u2216","Barv;":"\u2AE7","Barwed;":"\u2306","Bcy;":"\u0411","Because;":"\u2235","Bernoullis;":"\u212C","Beta;":"\u0392","Bfr;":"\u{1D505}","Bopf;":"\u{1D539}","Breve;":"\u02D8","Bscr;":"\u212C","Bumpeq;":"\u224E","CHcy;":"\u0427",COPY:"\xA9","COPY;":"\xA9","Cacute;":"\u0106","Cap;":"\u22D2","CapitalDifferentialD;":"\u2145","Cayleys;":"\u212D","Ccaron;":"\u010C",Ccedil:"\xC7","Ccedil;":"\xC7","Ccirc;":"\u0108","Cconint;":"\u2230","Cdot;":"\u010A","Cedilla;":"\xB8","CenterDot;":"\xB7","Cfr;":"\u212D","Chi;":"\u03A7","CircleDot;":"\u2299","CircleMinus;":"\u2296","CirclePlus;":"\u2295","CircleTimes;":"\u2297","ClockwiseContourIntegral;":"\u2232","CloseCurlyDoubleQuote;":"\u201D","CloseCurlyQuote;":"\u2019","Colon;":"\u2237","Colone;":"\u2A74","Congruent;":"\u2261","Conint;":"\u222F","ContourIntegral;":"\u222E","Copf;":"\u2102","Coproduct;":"\u2210","CounterClockwiseContourIntegral;":"\u2233","Cross;":"\u2A2F","Cscr;":"\u{1D49E}","Cup;":"\u22D3","CupCap;":"\u224D","DD;":"\u2145","DDotrahd;":"\u2911","DJcy;":"\u0402","DScy;":"\u0405","DZcy;":"\u040F","Dagger;":"\u2021","Darr;":"\u21A1","Dashv;":"\u2AE4","Dcaron;":"\u010E","Dcy;":"\u0414","Del;":"\u2207","Delta;":"\u0394","Dfr;":"\u{1D507}","DiacriticalAcute;":"\xB4","DiacriticalDot;":"\u02D9","DiacriticalDoubleAcute;":"\u02DD","DiacriticalGrave;":"`","DiacriticalTilde;":"\u02DC","Diamond;":"\u22C4","DifferentialD;":"\u2146","Dopf;":"\u{1D53B}","Dot;":"\xA8","DotDot;":"\u20DC","DotEqual;":"\u2250","DoubleContourIntegral;":"\u222F","DoubleDot;":"\xA8","DoubleDownArrow;":"\u21D3","DoubleLeftArrow;":"\u21D0","DoubleLeftRightArrow;":"\u21D4","DoubleLeftTee;":"\u2AE4","DoubleLongLeftArrow;":"\u27F8","DoubleLongLeftRightArrow;":"\u27FA","DoubleLongRightArrow;":"\u27F9","DoubleRightArrow;":"\u21D2","DoubleRightTee;":"\u22A8","DoubleUpArrow;":"\u21D1","DoubleUpDownArrow;":"\u21D5","DoubleVerticalBar;":"\u2225","DownArrow;":"\u2193","DownArrowBar;":"\u2913","DownArrowUpArrow;":"\u21F5","DownBreve;":"\u0311","DownLeftRightVector;":"\u2950","DownLeftTeeVector;":"\u295E","DownLeftVector;":"\u21BD","DownLeftVectorBar;":"\u2956","DownRightTeeVector;":"\u295F","DownRightVector;":"\u21C1","DownRightVectorBar;":"\u2957","DownTee;":"\u22A4","DownTeeArrow;":"\u21A7","Downarrow;":"\u21D3","Dscr;":"\u{1D49F}","Dstrok;":"\u0110","ENG;":"\u014A",ETH:"\xD0","ETH;":"\xD0",Eacute:"\xC9","Eacute;":"\xC9","Ecaron;":"\u011A",Ecirc:"\xCA","Ecirc;":"\xCA","Ecy;":"\u042D","Edot;":"\u0116","Efr;":"\u{1D508}",Egrave:"\xC8","Egrave;":"\xC8","Element;":"\u2208","Emacr;":"\u0112","EmptySmallSquare;":"\u25FB","EmptyVerySmallSquare;":"\u25AB","Eogon;":"\u0118","Eopf;":"\u{1D53C}","Epsilon;":"\u0395","Equal;":"\u2A75","EqualTilde;":"\u2242","Equilibrium;":"\u21CC","Escr;":"\u2130","Esim;":"\u2A73","Eta;":"\u0397",Euml:"\xCB","Euml;":"\xCB","Exists;":"\u2203","ExponentialE;":"\u2147","Fcy;":"\u0424","Ffr;":"\u{1D509}","FilledSmallSquare;":"\u25FC","FilledVerySmallSquare;":"\u25AA","Fopf;":"\u{1D53D}","ForAll;":"\u2200","Fouriertrf;":"\u2131","Fscr;":"\u2131","GJcy;":"\u0403",GT:">","GT;":">","Gamma;":"\u0393","Gammad;":"\u03DC","Gbreve;":"\u011E","Gcedil;":"\u0122","Gcirc;":"\u011C","Gcy;":"\u0413","Gdot;":"\u0120","Gfr;":"\u{1D50A}","Gg;":"\u22D9","Gopf;":"\u{1D53E}","GreaterEqual;":"\u2265","GreaterEqualLess;":"\u22DB","GreaterFullEqual;":"\u2267","GreaterGreater;":"\u2AA2","GreaterLess;":"\u2277","GreaterSlantEqual;":"\u2A7E","GreaterTilde;":"\u2273","Gscr;":"\u{1D4A2}","Gt;":"\u226B","HARDcy;":"\u042A","Hacek;":"\u02C7","Hat;":"^","Hcirc;":"\u0124","Hfr;":"\u210C","HilbertSpace;":"\u210B","Hopf;":"\u210D","HorizontalLine;":"\u2500","Hscr;":"\u210B","Hstrok;":"\u0126","HumpDownHump;":"\u224E","HumpEqual;":"\u224F","IEcy;":"\u0415","IJlig;":"\u0132","IOcy;":"\u0401",Iacute:"\xCD","Iacute;":"\xCD",Icirc:"\xCE","Icirc;":"\xCE","Icy;":"\u0418","Idot;":"\u0130","Ifr;":"\u2111",Igrave:"\xCC","Igrave;":"\xCC","Im;":"\u2111","Imacr;":"\u012A","ImaginaryI;":"\u2148","Implies;":"\u21D2","Int;":"\u222C","Integral;":"\u222B","Intersection;":"\u22C2","InvisibleComma;":"\u2063","InvisibleTimes;":"\u2062","Iogon;":"\u012E","Iopf;":"\u{1D540}","Iota;":"\u0399","Iscr;":"\u2110","Itilde;":"\u0128","Iukcy;":"\u0406",Iuml:"\xCF","Iuml;":"\xCF","Jcirc;":"\u0134","Jcy;":"\u0419","Jfr;":"\u{1D50D}","Jopf;":"\u{1D541}","Jscr;":"\u{1D4A5}","Jsercy;":"\u0408","Jukcy;":"\u0404","KHcy;":"\u0425","KJcy;":"\u040C","Kappa;":"\u039A","Kcedil;":"\u0136","Kcy;":"\u041A","Kfr;":"\u{1D50E}","Kopf;":"\u{1D542}","Kscr;":"\u{1D4A6}","LJcy;":"\u0409",LT:"<","LT;":"<","Lacute;":"\u0139","Lambda;":"\u039B","Lang;":"\u27EA","Laplacetrf;":"\u2112","Larr;":"\u219E","Lcaron;":"\u013D","Lcedil;":"\u013B","Lcy;":"\u041B","LeftAngleBracket;":"\u27E8","LeftArrow;":"\u2190","LeftArrowBar;":"\u21E4","LeftArrowRightArrow;":"\u21C6","LeftCeiling;":"\u2308","LeftDoubleBracket;":"\u27E6","LeftDownTeeVector;":"\u2961","LeftDownVector;":"\u21C3","LeftDownVectorBar;":"\u2959","LeftFloor;":"\u230A","LeftRightArrow;":"\u2194","LeftRightVector;":"\u294E","LeftTee;":"\u22A3","LeftTeeArrow;":"\u21A4","LeftTeeVector;":"\u295A","LeftTriangle;":"\u22B2","LeftTriangleBar;":"\u29CF","LeftTriangleEqual;":"\u22B4","LeftUpDownVector;":"\u2951","LeftUpTeeVector;":"\u2960","LeftUpVector;":"\u21BF","LeftUpVectorBar;":"\u2958","LeftVector;":"\u21BC","LeftVectorBar;":"\u2952","Leftarrow;":"\u21D0","Leftrightarrow;":"\u21D4","LessEqualGreater;":"\u22DA","LessFullEqual;":"\u2266","LessGreater;":"\u2276","LessLess;":"\u2AA1","LessSlantEqual;":"\u2A7D","LessTilde;":"\u2272","Lfr;":"\u{1D50F}","Ll;":"\u22D8","Lleftarrow;":"\u21DA","Lmidot;":"\u013F","LongLeftArrow;":"\u27F5","LongLeftRightArrow;":"\u27F7","LongRightArrow;":"\u27F6","Longleftarrow;":"\u27F8","Longleftrightarrow;":"\u27FA","Longrightarrow;":"\u27F9","Lopf;":"\u{1D543}","LowerLeftArrow;":"\u2199","LowerRightArrow;":"\u2198","Lscr;":"\u2112","Lsh;":"\u21B0","Lstrok;":"\u0141","Lt;":"\u226A","Map;":"\u2905","Mcy;":"\u041C","MediumSpace;":"\u205F","Mellintrf;":"\u2133","Mfr;":"\u{1D510}","MinusPlus;":"\u2213","Mopf;":"\u{1D544}","Mscr;":"\u2133","Mu;":"\u039C","NJcy;":"\u040A","Nacute;":"\u0143","Ncaron;":"\u0147","Ncedil;":"\u0145","Ncy;":"\u041D","NegativeMediumSpace;":"\u200B","NegativeThickSpace;":"\u200B","NegativeThinSpace;":"\u200B","NegativeVeryThinSpace;":"\u200B","NestedGreaterGreater;":"\u226B","NestedLessLess;":"\u226A","NewLine;":`
|
|
10
|
+
`,"Nfr;":"\u{1D511}","NoBreak;":"\u2060","NonBreakingSpace;":"\xA0","Nopf;":"\u2115","Not;":"\u2AEC","NotCongruent;":"\u2262","NotCupCap;":"\u226D","NotDoubleVerticalBar;":"\u2226","NotElement;":"\u2209","NotEqual;":"\u2260","NotEqualTilde;":"\u2242\u0338","NotExists;":"\u2204","NotGreater;":"\u226F","NotGreaterEqual;":"\u2271","NotGreaterFullEqual;":"\u2267\u0338","NotGreaterGreater;":"\u226B\u0338","NotGreaterLess;":"\u2279","NotGreaterSlantEqual;":"\u2A7E\u0338","NotGreaterTilde;":"\u2275","NotHumpDownHump;":"\u224E\u0338","NotHumpEqual;":"\u224F\u0338","NotLeftTriangle;":"\u22EA","NotLeftTriangleBar;":"\u29CF\u0338","NotLeftTriangleEqual;":"\u22EC","NotLess;":"\u226E","NotLessEqual;":"\u2270","NotLessGreater;":"\u2278","NotLessLess;":"\u226A\u0338","NotLessSlantEqual;":"\u2A7D\u0338","NotLessTilde;":"\u2274","NotNestedGreaterGreater;":"\u2AA2\u0338","NotNestedLessLess;":"\u2AA1\u0338","NotPrecedes;":"\u2280","NotPrecedesEqual;":"\u2AAF\u0338","NotPrecedesSlantEqual;":"\u22E0","NotReverseElement;":"\u220C","NotRightTriangle;":"\u22EB","NotRightTriangleBar;":"\u29D0\u0338","NotRightTriangleEqual;":"\u22ED","NotSquareSubset;":"\u228F\u0338","NotSquareSubsetEqual;":"\u22E2","NotSquareSuperset;":"\u2290\u0338","NotSquareSupersetEqual;":"\u22E3","NotSubset;":"\u2282\u20D2","NotSubsetEqual;":"\u2288","NotSucceeds;":"\u2281","NotSucceedsEqual;":"\u2AB0\u0338","NotSucceedsSlantEqual;":"\u22E1","NotSucceedsTilde;":"\u227F\u0338","NotSuperset;":"\u2283\u20D2","NotSupersetEqual;":"\u2289","NotTilde;":"\u2241","NotTildeEqual;":"\u2244","NotTildeFullEqual;":"\u2247","NotTildeTilde;":"\u2249","NotVerticalBar;":"\u2224","Nscr;":"\u{1D4A9}",Ntilde:"\xD1","Ntilde;":"\xD1","Nu;":"\u039D","OElig;":"\u0152",Oacute:"\xD3","Oacute;":"\xD3",Ocirc:"\xD4","Ocirc;":"\xD4","Ocy;":"\u041E","Odblac;":"\u0150","Ofr;":"\u{1D512}",Ograve:"\xD2","Ograve;":"\xD2","Omacr;":"\u014C","Omega;":"\u03A9","Omicron;":"\u039F","Oopf;":"\u{1D546}","OpenCurlyDoubleQuote;":"\u201C","OpenCurlyQuote;":"\u2018","Or;":"\u2A54","Oscr;":"\u{1D4AA}",Oslash:"\xD8","Oslash;":"\xD8",Otilde:"\xD5","Otilde;":"\xD5","Otimes;":"\u2A37",Ouml:"\xD6","Ouml;":"\xD6","OverBar;":"\u203E","OverBrace;":"\u23DE","OverBracket;":"\u23B4","OverParenthesis;":"\u23DC","PartialD;":"\u2202","Pcy;":"\u041F","Pfr;":"\u{1D513}","Phi;":"\u03A6","Pi;":"\u03A0","PlusMinus;":"\xB1","Poincareplane;":"\u210C","Popf;":"\u2119","Pr;":"\u2ABB","Precedes;":"\u227A","PrecedesEqual;":"\u2AAF","PrecedesSlantEqual;":"\u227C","PrecedesTilde;":"\u227E","Prime;":"\u2033","Product;":"\u220F","Proportion;":"\u2237","Proportional;":"\u221D","Pscr;":"\u{1D4AB}","Psi;":"\u03A8",QUOT:'"',"QUOT;":'"',"Qfr;":"\u{1D514}","Qopf;":"\u211A","Qscr;":"\u{1D4AC}","RBarr;":"\u2910",REG:"\xAE","REG;":"\xAE","Racute;":"\u0154","Rang;":"\u27EB","Rarr;":"\u21A0","Rarrtl;":"\u2916","Rcaron;":"\u0158","Rcedil;":"\u0156","Rcy;":"\u0420","Re;":"\u211C","ReverseElement;":"\u220B","ReverseEquilibrium;":"\u21CB","ReverseUpEquilibrium;":"\u296F","Rfr;":"\u211C","Rho;":"\u03A1","RightAngleBracket;":"\u27E9","RightArrow;":"\u2192","RightArrowBar;":"\u21E5","RightArrowLeftArrow;":"\u21C4","RightCeiling;":"\u2309","RightDoubleBracket;":"\u27E7","RightDownTeeVector;":"\u295D","RightDownVector;":"\u21C2","RightDownVectorBar;":"\u2955","RightFloor;":"\u230B","RightTee;":"\u22A2","RightTeeArrow;":"\u21A6","RightTeeVector;":"\u295B","RightTriangle;":"\u22B3","RightTriangleBar;":"\u29D0","RightTriangleEqual;":"\u22B5","RightUpDownVector;":"\u294F","RightUpTeeVector;":"\u295C","RightUpVector;":"\u21BE","RightUpVectorBar;":"\u2954","RightVector;":"\u21C0","RightVectorBar;":"\u2953","Rightarrow;":"\u21D2","Ropf;":"\u211D","RoundImplies;":"\u2970","Rrightarrow;":"\u21DB","Rscr;":"\u211B","Rsh;":"\u21B1","RuleDelayed;":"\u29F4","SHCHcy;":"\u0429","SHcy;":"\u0428","SOFTcy;":"\u042C","Sacute;":"\u015A","Sc;":"\u2ABC","Scaron;":"\u0160","Scedil;":"\u015E","Scirc;":"\u015C","Scy;":"\u0421","Sfr;":"\u{1D516}","ShortDownArrow;":"\u2193","ShortLeftArrow;":"\u2190","ShortRightArrow;":"\u2192","ShortUpArrow;":"\u2191","Sigma;":"\u03A3","SmallCircle;":"\u2218","Sopf;":"\u{1D54A}","Sqrt;":"\u221A","Square;":"\u25A1","SquareIntersection;":"\u2293","SquareSubset;":"\u228F","SquareSubsetEqual;":"\u2291","SquareSuperset;":"\u2290","SquareSupersetEqual;":"\u2292","SquareUnion;":"\u2294","Sscr;":"\u{1D4AE}","Star;":"\u22C6","Sub;":"\u22D0","Subset;":"\u22D0","SubsetEqual;":"\u2286","Succeeds;":"\u227B","SucceedsEqual;":"\u2AB0","SucceedsSlantEqual;":"\u227D","SucceedsTilde;":"\u227F","SuchThat;":"\u220B","Sum;":"\u2211","Sup;":"\u22D1","Superset;":"\u2283","SupersetEqual;":"\u2287","Supset;":"\u22D1",THORN:"\xDE","THORN;":"\xDE","TRADE;":"\u2122","TSHcy;":"\u040B","TScy;":"\u0426","Tab;":" ","Tau;":"\u03A4","Tcaron;":"\u0164","Tcedil;":"\u0162","Tcy;":"\u0422","Tfr;":"\u{1D517}","Therefore;":"\u2234","Theta;":"\u0398","ThickSpace;":"\u205F\u200A","ThinSpace;":"\u2009","Tilde;":"\u223C","TildeEqual;":"\u2243","TildeFullEqual;":"\u2245","TildeTilde;":"\u2248","Topf;":"\u{1D54B}","TripleDot;":"\u20DB","Tscr;":"\u{1D4AF}","Tstrok;":"\u0166",Uacute:"\xDA","Uacute;":"\xDA","Uarr;":"\u219F","Uarrocir;":"\u2949","Ubrcy;":"\u040E","Ubreve;":"\u016C",Ucirc:"\xDB","Ucirc;":"\xDB","Ucy;":"\u0423","Udblac;":"\u0170","Ufr;":"\u{1D518}",Ugrave:"\xD9","Ugrave;":"\xD9","Umacr;":"\u016A","UnderBar;":"_","UnderBrace;":"\u23DF","UnderBracket;":"\u23B5","UnderParenthesis;":"\u23DD","Union;":"\u22C3","UnionPlus;":"\u228E","Uogon;":"\u0172","Uopf;":"\u{1D54C}","UpArrow;":"\u2191","UpArrowBar;":"\u2912","UpArrowDownArrow;":"\u21C5","UpDownArrow;":"\u2195","UpEquilibrium;":"\u296E","UpTee;":"\u22A5","UpTeeArrow;":"\u21A5","Uparrow;":"\u21D1","Updownarrow;":"\u21D5","UpperLeftArrow;":"\u2196","UpperRightArrow;":"\u2197","Upsi;":"\u03D2","Upsilon;":"\u03A5","Uring;":"\u016E","Uscr;":"\u{1D4B0}","Utilde;":"\u0168",Uuml:"\xDC","Uuml;":"\xDC","VDash;":"\u22AB","Vbar;":"\u2AEB","Vcy;":"\u0412","Vdash;":"\u22A9","Vdashl;":"\u2AE6","Vee;":"\u22C1","Verbar;":"\u2016","Vert;":"\u2016","VerticalBar;":"\u2223","VerticalLine;":"|","VerticalSeparator;":"\u2758","VerticalTilde;":"\u2240","VeryThinSpace;":"\u200A","Vfr;":"\u{1D519}","Vopf;":"\u{1D54D}","Vscr;":"\u{1D4B1}","Vvdash;":"\u22AA","Wcirc;":"\u0174","Wedge;":"\u22C0","Wfr;":"\u{1D51A}","Wopf;":"\u{1D54E}","Wscr;":"\u{1D4B2}","Xfr;":"\u{1D51B}","Xi;":"\u039E","Xopf;":"\u{1D54F}","Xscr;":"\u{1D4B3}","YAcy;":"\u042F","YIcy;":"\u0407","YUcy;":"\u042E",Yacute:"\xDD","Yacute;":"\xDD","Ycirc;":"\u0176","Ycy;":"\u042B","Yfr;":"\u{1D51C}","Yopf;":"\u{1D550}","Yscr;":"\u{1D4B4}","Yuml;":"\u0178","ZHcy;":"\u0416","Zacute;":"\u0179","Zcaron;":"\u017D","Zcy;":"\u0417","Zdot;":"\u017B","ZeroWidthSpace;":"\u200B","Zeta;":"\u0396","Zfr;":"\u2128","Zopf;":"\u2124","Zscr;":"\u{1D4B5}",aacute:"\xE1","aacute;":"\xE1","abreve;":"\u0103","ac;":"\u223E","acE;":"\u223E\u0333","acd;":"\u223F",acirc:"\xE2","acirc;":"\xE2",acute:"\xB4","acute;":"\xB4","acy;":"\u0430",aelig:"\xE6","aelig;":"\xE6","af;":"\u2061","afr;":"\u{1D51E}",agrave:"\xE0","agrave;":"\xE0","alefsym;":"\u2135","aleph;":"\u2135","alpha;":"\u03B1","amacr;":"\u0101","amalg;":"\u2A3F",amp:"&","amp;":"&","and;":"\u2227","andand;":"\u2A55","andd;":"\u2A5C","andslope;":"\u2A58","andv;":"\u2A5A","ang;":"\u2220","ange;":"\u29A4","angle;":"\u2220","angmsd;":"\u2221","angmsdaa;":"\u29A8","angmsdab;":"\u29A9","angmsdac;":"\u29AA","angmsdad;":"\u29AB","angmsdae;":"\u29AC","angmsdaf;":"\u29AD","angmsdag;":"\u29AE","angmsdah;":"\u29AF","angrt;":"\u221F","angrtvb;":"\u22BE","angrtvbd;":"\u299D","angsph;":"\u2222","angst;":"\xC5","angzarr;":"\u237C","aogon;":"\u0105","aopf;":"\u{1D552}","ap;":"\u2248","apE;":"\u2A70","apacir;":"\u2A6F","ape;":"\u224A","apid;":"\u224B","apos;":"'","approx;":"\u2248","approxeq;":"\u224A",aring:"\xE5","aring;":"\xE5","ascr;":"\u{1D4B6}","ast;":"*","asymp;":"\u2248","asympeq;":"\u224D",atilde:"\xE3","atilde;":"\xE3",auml:"\xE4","auml;":"\xE4","awconint;":"\u2233","awint;":"\u2A11","bNot;":"\u2AED","backcong;":"\u224C","backepsilon;":"\u03F6","backprime;":"\u2035","backsim;":"\u223D","backsimeq;":"\u22CD","barvee;":"\u22BD","barwed;":"\u2305","barwedge;":"\u2305","bbrk;":"\u23B5","bbrktbrk;":"\u23B6","bcong;":"\u224C","bcy;":"\u0431","bdquo;":"\u201E","becaus;":"\u2235","because;":"\u2235","bemptyv;":"\u29B0","bepsi;":"\u03F6","bernou;":"\u212C","beta;":"\u03B2","beth;":"\u2136","between;":"\u226C","bfr;":"\u{1D51F}","bigcap;":"\u22C2","bigcirc;":"\u25EF","bigcup;":"\u22C3","bigodot;":"\u2A00","bigoplus;":"\u2A01","bigotimes;":"\u2A02","bigsqcup;":"\u2A06","bigstar;":"\u2605","bigtriangledown;":"\u25BD","bigtriangleup;":"\u25B3","biguplus;":"\u2A04","bigvee;":"\u22C1","bigwedge;":"\u22C0","bkarow;":"\u290D","blacklozenge;":"\u29EB","blacksquare;":"\u25AA","blacktriangle;":"\u25B4","blacktriangledown;":"\u25BE","blacktriangleleft;":"\u25C2","blacktriangleright;":"\u25B8","blank;":"\u2423","blk12;":"\u2592","blk14;":"\u2591","blk34;":"\u2593","block;":"\u2588","bne;":"=\u20E5","bnequiv;":"\u2261\u20E5","bnot;":"\u2310","bopf;":"\u{1D553}","bot;":"\u22A5","bottom;":"\u22A5","bowtie;":"\u22C8","boxDL;":"\u2557","boxDR;":"\u2554","boxDl;":"\u2556","boxDr;":"\u2553","boxH;":"\u2550","boxHD;":"\u2566","boxHU;":"\u2569","boxHd;":"\u2564","boxHu;":"\u2567","boxUL;":"\u255D","boxUR;":"\u255A","boxUl;":"\u255C","boxUr;":"\u2559","boxV;":"\u2551","boxVH;":"\u256C","boxVL;":"\u2563","boxVR;":"\u2560","boxVh;":"\u256B","boxVl;":"\u2562","boxVr;":"\u255F","boxbox;":"\u29C9","boxdL;":"\u2555","boxdR;":"\u2552","boxdl;":"\u2510","boxdr;":"\u250C","boxh;":"\u2500","boxhD;":"\u2565","boxhU;":"\u2568","boxhd;":"\u252C","boxhu;":"\u2534","boxminus;":"\u229F","boxplus;":"\u229E","boxtimes;":"\u22A0","boxuL;":"\u255B","boxuR;":"\u2558","boxul;":"\u2518","boxur;":"\u2514","boxv;":"\u2502","boxvH;":"\u256A","boxvL;":"\u2561","boxvR;":"\u255E","boxvh;":"\u253C","boxvl;":"\u2524","boxvr;":"\u251C","bprime;":"\u2035","breve;":"\u02D8",brvbar:"\xA6","brvbar;":"\xA6","bscr;":"\u{1D4B7}","bsemi;":"\u204F","bsim;":"\u223D","bsime;":"\u22CD","bsol;":"\\","bsolb;":"\u29C5","bsolhsub;":"\u27C8","bull;":"\u2022","bullet;":"\u2022","bump;":"\u224E","bumpE;":"\u2AAE","bumpe;":"\u224F","bumpeq;":"\u224F","cacute;":"\u0107","cap;":"\u2229","capand;":"\u2A44","capbrcup;":"\u2A49","capcap;":"\u2A4B","capcup;":"\u2A47","capdot;":"\u2A40","caps;":"\u2229\uFE00","caret;":"\u2041","caron;":"\u02C7","ccaps;":"\u2A4D","ccaron;":"\u010D",ccedil:"\xE7","ccedil;":"\xE7","ccirc;":"\u0109","ccups;":"\u2A4C","ccupssm;":"\u2A50","cdot;":"\u010B",cedil:"\xB8","cedil;":"\xB8","cemptyv;":"\u29B2",cent:"\xA2","cent;":"\xA2","centerdot;":"\xB7","cfr;":"\u{1D520}","chcy;":"\u0447","check;":"\u2713","checkmark;":"\u2713","chi;":"\u03C7","cir;":"\u25CB","cirE;":"\u29C3","circ;":"\u02C6","circeq;":"\u2257","circlearrowleft;":"\u21BA","circlearrowright;":"\u21BB","circledR;":"\xAE","circledS;":"\u24C8","circledast;":"\u229B","circledcirc;":"\u229A","circleddash;":"\u229D","cire;":"\u2257","cirfnint;":"\u2A10","cirmid;":"\u2AEF","cirscir;":"\u29C2","clubs;":"\u2663","clubsuit;":"\u2663","colon;":":","colone;":"\u2254","coloneq;":"\u2254","comma;":",","commat;":"@","comp;":"\u2201","compfn;":"\u2218","complement;":"\u2201","complexes;":"\u2102","cong;":"\u2245","congdot;":"\u2A6D","conint;":"\u222E","copf;":"\u{1D554}","coprod;":"\u2210",copy:"\xA9","copy;":"\xA9","copysr;":"\u2117","crarr;":"\u21B5","cross;":"\u2717","cscr;":"\u{1D4B8}","csub;":"\u2ACF","csube;":"\u2AD1","csup;":"\u2AD0","csupe;":"\u2AD2","ctdot;":"\u22EF","cudarrl;":"\u2938","cudarrr;":"\u2935","cuepr;":"\u22DE","cuesc;":"\u22DF","cularr;":"\u21B6","cularrp;":"\u293D","cup;":"\u222A","cupbrcap;":"\u2A48","cupcap;":"\u2A46","cupcup;":"\u2A4A","cupdot;":"\u228D","cupor;":"\u2A45","cups;":"\u222A\uFE00","curarr;":"\u21B7","curarrm;":"\u293C","curlyeqprec;":"\u22DE","curlyeqsucc;":"\u22DF","curlyvee;":"\u22CE","curlywedge;":"\u22CF",curren:"\xA4","curren;":"\xA4","curvearrowleft;":"\u21B6","curvearrowright;":"\u21B7","cuvee;":"\u22CE","cuwed;":"\u22CF","cwconint;":"\u2232","cwint;":"\u2231","cylcty;":"\u232D","dArr;":"\u21D3","dHar;":"\u2965","dagger;":"\u2020","daleth;":"\u2138","darr;":"\u2193","dash;":"\u2010","dashv;":"\u22A3","dbkarow;":"\u290F","dblac;":"\u02DD","dcaron;":"\u010F","dcy;":"\u0434","dd;":"\u2146","ddagger;":"\u2021","ddarr;":"\u21CA","ddotseq;":"\u2A77",deg:"\xB0","deg;":"\xB0","delta;":"\u03B4","demptyv;":"\u29B1","dfisht;":"\u297F","dfr;":"\u{1D521}","dharl;":"\u21C3","dharr;":"\u21C2","diam;":"\u22C4","diamond;":"\u22C4","diamondsuit;":"\u2666","diams;":"\u2666","die;":"\xA8","digamma;":"\u03DD","disin;":"\u22F2","div;":"\xF7",divide:"\xF7","divide;":"\xF7","divideontimes;":"\u22C7","divonx;":"\u22C7","djcy;":"\u0452","dlcorn;":"\u231E","dlcrop;":"\u230D","dollar;":"$","dopf;":"\u{1D555}","dot;":"\u02D9","doteq;":"\u2250","doteqdot;":"\u2251","dotminus;":"\u2238","dotplus;":"\u2214","dotsquare;":"\u22A1","doublebarwedge;":"\u2306","downarrow;":"\u2193","downdownarrows;":"\u21CA","downharpoonleft;":"\u21C3","downharpoonright;":"\u21C2","drbkarow;":"\u2910","drcorn;":"\u231F","drcrop;":"\u230C","dscr;":"\u{1D4B9}","dscy;":"\u0455","dsol;":"\u29F6","dstrok;":"\u0111","dtdot;":"\u22F1","dtri;":"\u25BF","dtrif;":"\u25BE","duarr;":"\u21F5","duhar;":"\u296F","dwangle;":"\u29A6","dzcy;":"\u045F","dzigrarr;":"\u27FF","eDDot;":"\u2A77","eDot;":"\u2251",eacute:"\xE9","eacute;":"\xE9","easter;":"\u2A6E","ecaron;":"\u011B","ecir;":"\u2256",ecirc:"\xEA","ecirc;":"\xEA","ecolon;":"\u2255","ecy;":"\u044D","edot;":"\u0117","ee;":"\u2147","efDot;":"\u2252","efr;":"\u{1D522}","eg;":"\u2A9A",egrave:"\xE8","egrave;":"\xE8","egs;":"\u2A96","egsdot;":"\u2A98","el;":"\u2A99","elinters;":"\u23E7","ell;":"\u2113","els;":"\u2A95","elsdot;":"\u2A97","emacr;":"\u0113","empty;":"\u2205","emptyset;":"\u2205","emptyv;":"\u2205","emsp13;":"\u2004","emsp14;":"\u2005","emsp;":"\u2003","eng;":"\u014B","ensp;":"\u2002","eogon;":"\u0119","eopf;":"\u{1D556}","epar;":"\u22D5","eparsl;":"\u29E3","eplus;":"\u2A71","epsi;":"\u03B5","epsilon;":"\u03B5","epsiv;":"\u03F5","eqcirc;":"\u2256","eqcolon;":"\u2255","eqsim;":"\u2242","eqslantgtr;":"\u2A96","eqslantless;":"\u2A95","equals;":"=","equest;":"\u225F","equiv;":"\u2261","equivDD;":"\u2A78","eqvparsl;":"\u29E5","erDot;":"\u2253","erarr;":"\u2971","escr;":"\u212F","esdot;":"\u2250","esim;":"\u2242","eta;":"\u03B7",eth:"\xF0","eth;":"\xF0",euml:"\xEB","euml;":"\xEB","euro;":"\u20AC","excl;":"!","exist;":"\u2203","expectation;":"\u2130","exponentiale;":"\u2147","fallingdotseq;":"\u2252","fcy;":"\u0444","female;":"\u2640","ffilig;":"\uFB03","fflig;":"\uFB00","ffllig;":"\uFB04","ffr;":"\u{1D523}","filig;":"\uFB01","fjlig;":"fj","flat;":"\u266D","fllig;":"\uFB02","fltns;":"\u25B1","fnof;":"\u0192","fopf;":"\u{1D557}","forall;":"\u2200","fork;":"\u22D4","forkv;":"\u2AD9","fpartint;":"\u2A0D",frac12:"\xBD","frac12;":"\xBD","frac13;":"\u2153",frac14:"\xBC","frac14;":"\xBC","frac15;":"\u2155","frac16;":"\u2159","frac18;":"\u215B","frac23;":"\u2154","frac25;":"\u2156",frac34:"\xBE","frac34;":"\xBE","frac35;":"\u2157","frac38;":"\u215C","frac45;":"\u2158","frac56;":"\u215A","frac58;":"\u215D","frac78;":"\u215E","frasl;":"\u2044","frown;":"\u2322","fscr;":"\u{1D4BB}","gE;":"\u2267","gEl;":"\u2A8C","gacute;":"\u01F5","gamma;":"\u03B3","gammad;":"\u03DD","gap;":"\u2A86","gbreve;":"\u011F","gcirc;":"\u011D","gcy;":"\u0433","gdot;":"\u0121","ge;":"\u2265","gel;":"\u22DB","geq;":"\u2265","geqq;":"\u2267","geqslant;":"\u2A7E","ges;":"\u2A7E","gescc;":"\u2AA9","gesdot;":"\u2A80","gesdoto;":"\u2A82","gesdotol;":"\u2A84","gesl;":"\u22DB\uFE00","gesles;":"\u2A94","gfr;":"\u{1D524}","gg;":"\u226B","ggg;":"\u22D9","gimel;":"\u2137","gjcy;":"\u0453","gl;":"\u2277","glE;":"\u2A92","gla;":"\u2AA5","glj;":"\u2AA4","gnE;":"\u2269","gnap;":"\u2A8A","gnapprox;":"\u2A8A","gne;":"\u2A88","gneq;":"\u2A88","gneqq;":"\u2269","gnsim;":"\u22E7","gopf;":"\u{1D558}","grave;":"`","gscr;":"\u210A","gsim;":"\u2273","gsime;":"\u2A8E","gsiml;":"\u2A90",gt:">","gt;":">","gtcc;":"\u2AA7","gtcir;":"\u2A7A","gtdot;":"\u22D7","gtlPar;":"\u2995","gtquest;":"\u2A7C","gtrapprox;":"\u2A86","gtrarr;":"\u2978","gtrdot;":"\u22D7","gtreqless;":"\u22DB","gtreqqless;":"\u2A8C","gtrless;":"\u2277","gtrsim;":"\u2273","gvertneqq;":"\u2269\uFE00","gvnE;":"\u2269\uFE00","hArr;":"\u21D4","hairsp;":"\u200A","half;":"\xBD","hamilt;":"\u210B","hardcy;":"\u044A","harr;":"\u2194","harrcir;":"\u2948","harrw;":"\u21AD","hbar;":"\u210F","hcirc;":"\u0125","hearts;":"\u2665","heartsuit;":"\u2665","hellip;":"\u2026","hercon;":"\u22B9","hfr;":"\u{1D525}","hksearow;":"\u2925","hkswarow;":"\u2926","hoarr;":"\u21FF","homtht;":"\u223B","hookleftarrow;":"\u21A9","hookrightarrow;":"\u21AA","hopf;":"\u{1D559}","horbar;":"\u2015","hscr;":"\u{1D4BD}","hslash;":"\u210F","hstrok;":"\u0127","hybull;":"\u2043","hyphen;":"\u2010",iacute:"\xED","iacute;":"\xED","ic;":"\u2063",icirc:"\xEE","icirc;":"\xEE","icy;":"\u0438","iecy;":"\u0435",iexcl:"\xA1","iexcl;":"\xA1","iff;":"\u21D4","ifr;":"\u{1D526}",igrave:"\xEC","igrave;":"\xEC","ii;":"\u2148","iiiint;":"\u2A0C","iiint;":"\u222D","iinfin;":"\u29DC","iiota;":"\u2129","ijlig;":"\u0133","imacr;":"\u012B","image;":"\u2111","imagline;":"\u2110","imagpart;":"\u2111","imath;":"\u0131","imof;":"\u22B7","imped;":"\u01B5","in;":"\u2208","incare;":"\u2105","infin;":"\u221E","infintie;":"\u29DD","inodot;":"\u0131","int;":"\u222B","intcal;":"\u22BA","integers;":"\u2124","intercal;":"\u22BA","intlarhk;":"\u2A17","intprod;":"\u2A3C","iocy;":"\u0451","iogon;":"\u012F","iopf;":"\u{1D55A}","iota;":"\u03B9","iprod;":"\u2A3C",iquest:"\xBF","iquest;":"\xBF","iscr;":"\u{1D4BE}","isin;":"\u2208","isinE;":"\u22F9","isindot;":"\u22F5","isins;":"\u22F4","isinsv;":"\u22F3","isinv;":"\u2208","it;":"\u2062","itilde;":"\u0129","iukcy;":"\u0456",iuml:"\xEF","iuml;":"\xEF","jcirc;":"\u0135","jcy;":"\u0439","jfr;":"\u{1D527}","jmath;":"\u0237","jopf;":"\u{1D55B}","jscr;":"\u{1D4BF}","jsercy;":"\u0458","jukcy;":"\u0454","kappa;":"\u03BA","kappav;":"\u03F0","kcedil;":"\u0137","kcy;":"\u043A","kfr;":"\u{1D528}","kgreen;":"\u0138","khcy;":"\u0445","kjcy;":"\u045C","kopf;":"\u{1D55C}","kscr;":"\u{1D4C0}","lAarr;":"\u21DA","lArr;":"\u21D0","lAtail;":"\u291B","lBarr;":"\u290E","lE;":"\u2266","lEg;":"\u2A8B","lHar;":"\u2962","lacute;":"\u013A","laemptyv;":"\u29B4","lagran;":"\u2112","lambda;":"\u03BB","lang;":"\u27E8","langd;":"\u2991","langle;":"\u27E8","lap;":"\u2A85",laquo:"\xAB","laquo;":"\xAB","larr;":"\u2190","larrb;":"\u21E4","larrbfs;":"\u291F","larrfs;":"\u291D","larrhk;":"\u21A9","larrlp;":"\u21AB","larrpl;":"\u2939","larrsim;":"\u2973","larrtl;":"\u21A2","lat;":"\u2AAB","latail;":"\u2919","late;":"\u2AAD","lates;":"\u2AAD\uFE00","lbarr;":"\u290C","lbbrk;":"\u2772","lbrace;":"{","lbrack;":"[","lbrke;":"\u298B","lbrksld;":"\u298F","lbrkslu;":"\u298D","lcaron;":"\u013E","lcedil;":"\u013C","lceil;":"\u2308","lcub;":"{","lcy;":"\u043B","ldca;":"\u2936","ldquo;":"\u201C","ldquor;":"\u201E","ldrdhar;":"\u2967","ldrushar;":"\u294B","ldsh;":"\u21B2","le;":"\u2264","leftarrow;":"\u2190","leftarrowtail;":"\u21A2","leftharpoondown;":"\u21BD","leftharpoonup;":"\u21BC","leftleftarrows;":"\u21C7","leftrightarrow;":"\u2194","leftrightarrows;":"\u21C6","leftrightharpoons;":"\u21CB","leftrightsquigarrow;":"\u21AD","leftthreetimes;":"\u22CB","leg;":"\u22DA","leq;":"\u2264","leqq;":"\u2266","leqslant;":"\u2A7D","les;":"\u2A7D","lescc;":"\u2AA8","lesdot;":"\u2A7F","lesdoto;":"\u2A81","lesdotor;":"\u2A83","lesg;":"\u22DA\uFE00","lesges;":"\u2A93","lessapprox;":"\u2A85","lessdot;":"\u22D6","lesseqgtr;":"\u22DA","lesseqqgtr;":"\u2A8B","lessgtr;":"\u2276","lesssim;":"\u2272","lfisht;":"\u297C","lfloor;":"\u230A","lfr;":"\u{1D529}","lg;":"\u2276","lgE;":"\u2A91","lhard;":"\u21BD","lharu;":"\u21BC","lharul;":"\u296A","lhblk;":"\u2584","ljcy;":"\u0459","ll;":"\u226A","llarr;":"\u21C7","llcorner;":"\u231E","llhard;":"\u296B","lltri;":"\u25FA","lmidot;":"\u0140","lmoust;":"\u23B0","lmoustache;":"\u23B0","lnE;":"\u2268","lnap;":"\u2A89","lnapprox;":"\u2A89","lne;":"\u2A87","lneq;":"\u2A87","lneqq;":"\u2268","lnsim;":"\u22E6","loang;":"\u27EC","loarr;":"\u21FD","lobrk;":"\u27E6","longleftarrow;":"\u27F5","longleftrightarrow;":"\u27F7","longmapsto;":"\u27FC","longrightarrow;":"\u27F6","looparrowleft;":"\u21AB","looparrowright;":"\u21AC","lopar;":"\u2985","lopf;":"\u{1D55D}","loplus;":"\u2A2D","lotimes;":"\u2A34","lowast;":"\u2217","lowbar;":"_","loz;":"\u25CA","lozenge;":"\u25CA","lozf;":"\u29EB","lpar;":"(","lparlt;":"\u2993","lrarr;":"\u21C6","lrcorner;":"\u231F","lrhar;":"\u21CB","lrhard;":"\u296D","lrm;":"\u200E","lrtri;":"\u22BF","lsaquo;":"\u2039","lscr;":"\u{1D4C1}","lsh;":"\u21B0","lsim;":"\u2272","lsime;":"\u2A8D","lsimg;":"\u2A8F","lsqb;":"[","lsquo;":"\u2018","lsquor;":"\u201A","lstrok;":"\u0142",lt:"<","lt;":"<","ltcc;":"\u2AA6","ltcir;":"\u2A79","ltdot;":"\u22D6","lthree;":"\u22CB","ltimes;":"\u22C9","ltlarr;":"\u2976","ltquest;":"\u2A7B","ltrPar;":"\u2996","ltri;":"\u25C3","ltrie;":"\u22B4","ltrif;":"\u25C2","lurdshar;":"\u294A","luruhar;":"\u2966","lvertneqq;":"\u2268\uFE00","lvnE;":"\u2268\uFE00","mDDot;":"\u223A",macr:"\xAF","macr;":"\xAF","male;":"\u2642","malt;":"\u2720","maltese;":"\u2720","map;":"\u21A6","mapsto;":"\u21A6","mapstodown;":"\u21A7","mapstoleft;":"\u21A4","mapstoup;":"\u21A5","marker;":"\u25AE","mcomma;":"\u2A29","mcy;":"\u043C","mdash;":"\u2014","measuredangle;":"\u2221","mfr;":"\u{1D52A}","mho;":"\u2127",micro:"\xB5","micro;":"\xB5","mid;":"\u2223","midast;":"*","midcir;":"\u2AF0",middot:"\xB7","middot;":"\xB7","minus;":"\u2212","minusb;":"\u229F","minusd;":"\u2238","minusdu;":"\u2A2A","mlcp;":"\u2ADB","mldr;":"\u2026","mnplus;":"\u2213","models;":"\u22A7","mopf;":"\u{1D55E}","mp;":"\u2213","mscr;":"\u{1D4C2}","mstpos;":"\u223E","mu;":"\u03BC","multimap;":"\u22B8","mumap;":"\u22B8","nGg;":"\u22D9\u0338","nGt;":"\u226B\u20D2","nGtv;":"\u226B\u0338","nLeftarrow;":"\u21CD","nLeftrightarrow;":"\u21CE","nLl;":"\u22D8\u0338","nLt;":"\u226A\u20D2","nLtv;":"\u226A\u0338","nRightarrow;":"\u21CF","nVDash;":"\u22AF","nVdash;":"\u22AE","nabla;":"\u2207","nacute;":"\u0144","nang;":"\u2220\u20D2","nap;":"\u2249","napE;":"\u2A70\u0338","napid;":"\u224B\u0338","napos;":"\u0149","napprox;":"\u2249","natur;":"\u266E","natural;":"\u266E","naturals;":"\u2115",nbsp:"\xA0","nbsp;":"\xA0","nbump;":"\u224E\u0338","nbumpe;":"\u224F\u0338","ncap;":"\u2A43","ncaron;":"\u0148","ncedil;":"\u0146","ncong;":"\u2247","ncongdot;":"\u2A6D\u0338","ncup;":"\u2A42","ncy;":"\u043D","ndash;":"\u2013","ne;":"\u2260","neArr;":"\u21D7","nearhk;":"\u2924","nearr;":"\u2197","nearrow;":"\u2197","nedot;":"\u2250\u0338","nequiv;":"\u2262","nesear;":"\u2928","nesim;":"\u2242\u0338","nexist;":"\u2204","nexists;":"\u2204","nfr;":"\u{1D52B}","ngE;":"\u2267\u0338","nge;":"\u2271","ngeq;":"\u2271","ngeqq;":"\u2267\u0338","ngeqslant;":"\u2A7E\u0338","nges;":"\u2A7E\u0338","ngsim;":"\u2275","ngt;":"\u226F","ngtr;":"\u226F","nhArr;":"\u21CE","nharr;":"\u21AE","nhpar;":"\u2AF2","ni;":"\u220B","nis;":"\u22FC","nisd;":"\u22FA","niv;":"\u220B","njcy;":"\u045A","nlArr;":"\u21CD","nlE;":"\u2266\u0338","nlarr;":"\u219A","nldr;":"\u2025","nle;":"\u2270","nleftarrow;":"\u219A","nleftrightarrow;":"\u21AE","nleq;":"\u2270","nleqq;":"\u2266\u0338","nleqslant;":"\u2A7D\u0338","nles;":"\u2A7D\u0338","nless;":"\u226E","nlsim;":"\u2274","nlt;":"\u226E","nltri;":"\u22EA","nltrie;":"\u22EC","nmid;":"\u2224","nopf;":"\u{1D55F}",not:"\xAC","not;":"\xAC","notin;":"\u2209","notinE;":"\u22F9\u0338","notindot;":"\u22F5\u0338","notinva;":"\u2209","notinvb;":"\u22F7","notinvc;":"\u22F6","notni;":"\u220C","notniva;":"\u220C","notnivb;":"\u22FE","notnivc;":"\u22FD","npar;":"\u2226","nparallel;":"\u2226","nparsl;":"\u2AFD\u20E5","npart;":"\u2202\u0338","npolint;":"\u2A14","npr;":"\u2280","nprcue;":"\u22E0","npre;":"\u2AAF\u0338","nprec;":"\u2280","npreceq;":"\u2AAF\u0338","nrArr;":"\u21CF","nrarr;":"\u219B","nrarrc;":"\u2933\u0338","nrarrw;":"\u219D\u0338","nrightarrow;":"\u219B","nrtri;":"\u22EB","nrtrie;":"\u22ED","nsc;":"\u2281","nsccue;":"\u22E1","nsce;":"\u2AB0\u0338","nscr;":"\u{1D4C3}","nshortmid;":"\u2224","nshortparallel;":"\u2226","nsim;":"\u2241","nsime;":"\u2244","nsimeq;":"\u2244","nsmid;":"\u2224","nspar;":"\u2226","nsqsube;":"\u22E2","nsqsupe;":"\u22E3","nsub;":"\u2284","nsubE;":"\u2AC5\u0338","nsube;":"\u2288","nsubset;":"\u2282\u20D2","nsubseteq;":"\u2288","nsubseteqq;":"\u2AC5\u0338","nsucc;":"\u2281","nsucceq;":"\u2AB0\u0338","nsup;":"\u2285","nsupE;":"\u2AC6\u0338","nsupe;":"\u2289","nsupset;":"\u2283\u20D2","nsupseteq;":"\u2289","nsupseteqq;":"\u2AC6\u0338","ntgl;":"\u2279",ntilde:"\xF1","ntilde;":"\xF1","ntlg;":"\u2278","ntriangleleft;":"\u22EA","ntrianglelefteq;":"\u22EC","ntriangleright;":"\u22EB","ntrianglerighteq;":"\u22ED","nu;":"\u03BD","num;":"#","numero;":"\u2116","numsp;":"\u2007","nvDash;":"\u22AD","nvHarr;":"\u2904","nvap;":"\u224D\u20D2","nvdash;":"\u22AC","nvge;":"\u2265\u20D2","nvgt;":">\u20D2","nvinfin;":"\u29DE","nvlArr;":"\u2902","nvle;":"\u2264\u20D2","nvlt;":"<\u20D2","nvltrie;":"\u22B4\u20D2","nvrArr;":"\u2903","nvrtrie;":"\u22B5\u20D2","nvsim;":"\u223C\u20D2","nwArr;":"\u21D6","nwarhk;":"\u2923","nwarr;":"\u2196","nwarrow;":"\u2196","nwnear;":"\u2927","oS;":"\u24C8",oacute:"\xF3","oacute;":"\xF3","oast;":"\u229B","ocir;":"\u229A",ocirc:"\xF4","ocirc;":"\xF4","ocy;":"\u043E","odash;":"\u229D","odblac;":"\u0151","odiv;":"\u2A38","odot;":"\u2299","odsold;":"\u29BC","oelig;":"\u0153","ofcir;":"\u29BF","ofr;":"\u{1D52C}","ogon;":"\u02DB",ograve:"\xF2","ograve;":"\xF2","ogt;":"\u29C1","ohbar;":"\u29B5","ohm;":"\u03A9","oint;":"\u222E","olarr;":"\u21BA","olcir;":"\u29BE","olcross;":"\u29BB","oline;":"\u203E","olt;":"\u29C0","omacr;":"\u014D","omega;":"\u03C9","omicron;":"\u03BF","omid;":"\u29B6","ominus;":"\u2296","oopf;":"\u{1D560}","opar;":"\u29B7","operp;":"\u29B9","oplus;":"\u2295","or;":"\u2228","orarr;":"\u21BB","ord;":"\u2A5D","order;":"\u2134","orderof;":"\u2134",ordf:"\xAA","ordf;":"\xAA",ordm:"\xBA","ordm;":"\xBA","origof;":"\u22B6","oror;":"\u2A56","orslope;":"\u2A57","orv;":"\u2A5B","oscr;":"\u2134",oslash:"\xF8","oslash;":"\xF8","osol;":"\u2298",otilde:"\xF5","otilde;":"\xF5","otimes;":"\u2297","otimesas;":"\u2A36",ouml:"\xF6","ouml;":"\xF6","ovbar;":"\u233D","par;":"\u2225",para:"\xB6","para;":"\xB6","parallel;":"\u2225","parsim;":"\u2AF3","parsl;":"\u2AFD","part;":"\u2202","pcy;":"\u043F","percnt;":"%","period;":".","permil;":"\u2030","perp;":"\u22A5","pertenk;":"\u2031","pfr;":"\u{1D52D}","phi;":"\u03C6","phiv;":"\u03D5","phmmat;":"\u2133","phone;":"\u260E","pi;":"\u03C0","pitchfork;":"\u22D4","piv;":"\u03D6","planck;":"\u210F","planckh;":"\u210E","plankv;":"\u210F","plus;":"+","plusacir;":"\u2A23","plusb;":"\u229E","pluscir;":"\u2A22","plusdo;":"\u2214","plusdu;":"\u2A25","pluse;":"\u2A72",plusmn:"\xB1","plusmn;":"\xB1","plussim;":"\u2A26","plustwo;":"\u2A27","pm;":"\xB1","pointint;":"\u2A15","popf;":"\u{1D561}",pound:"\xA3","pound;":"\xA3","pr;":"\u227A","prE;":"\u2AB3","prap;":"\u2AB7","prcue;":"\u227C","pre;":"\u2AAF","prec;":"\u227A","precapprox;":"\u2AB7","preccurlyeq;":"\u227C","preceq;":"\u2AAF","precnapprox;":"\u2AB9","precneqq;":"\u2AB5","precnsim;":"\u22E8","precsim;":"\u227E","prime;":"\u2032","primes;":"\u2119","prnE;":"\u2AB5","prnap;":"\u2AB9","prnsim;":"\u22E8","prod;":"\u220F","profalar;":"\u232E","profline;":"\u2312","profsurf;":"\u2313","prop;":"\u221D","propto;":"\u221D","prsim;":"\u227E","prurel;":"\u22B0","pscr;":"\u{1D4C5}","psi;":"\u03C8","puncsp;":"\u2008","qfr;":"\u{1D52E}","qint;":"\u2A0C","qopf;":"\u{1D562}","qprime;":"\u2057","qscr;":"\u{1D4C6}","quaternions;":"\u210D","quatint;":"\u2A16","quest;":"?","questeq;":"\u225F",quot:'"',"quot;":'"',"rAarr;":"\u21DB","rArr;":"\u21D2","rAtail;":"\u291C","rBarr;":"\u290F","rHar;":"\u2964","race;":"\u223D\u0331","racute;":"\u0155","radic;":"\u221A","raemptyv;":"\u29B3","rang;":"\u27E9","rangd;":"\u2992","range;":"\u29A5","rangle;":"\u27E9",raquo:"\xBB","raquo;":"\xBB","rarr;":"\u2192","rarrap;":"\u2975","rarrb;":"\u21E5","rarrbfs;":"\u2920","rarrc;":"\u2933","rarrfs;":"\u291E","rarrhk;":"\u21AA","rarrlp;":"\u21AC","rarrpl;":"\u2945","rarrsim;":"\u2974","rarrtl;":"\u21A3","rarrw;":"\u219D","ratail;":"\u291A","ratio;":"\u2236","rationals;":"\u211A","rbarr;":"\u290D","rbbrk;":"\u2773","rbrace;":"}","rbrack;":"]","rbrke;":"\u298C","rbrksld;":"\u298E","rbrkslu;":"\u2990","rcaron;":"\u0159","rcedil;":"\u0157","rceil;":"\u2309","rcub;":"}","rcy;":"\u0440","rdca;":"\u2937","rdldhar;":"\u2969","rdquo;":"\u201D","rdquor;":"\u201D","rdsh;":"\u21B3","real;":"\u211C","realine;":"\u211B","realpart;":"\u211C","reals;":"\u211D","rect;":"\u25AD",reg:"\xAE","reg;":"\xAE","rfisht;":"\u297D","rfloor;":"\u230B","rfr;":"\u{1D52F}","rhard;":"\u21C1","rharu;":"\u21C0","rharul;":"\u296C","rho;":"\u03C1","rhov;":"\u03F1","rightarrow;":"\u2192","rightarrowtail;":"\u21A3","rightharpoondown;":"\u21C1","rightharpoonup;":"\u21C0","rightleftarrows;":"\u21C4","rightleftharpoons;":"\u21CC","rightrightarrows;":"\u21C9","rightsquigarrow;":"\u219D","rightthreetimes;":"\u22CC","ring;":"\u02DA","risingdotseq;":"\u2253","rlarr;":"\u21C4","rlhar;":"\u21CC","rlm;":"\u200F","rmoust;":"\u23B1","rmoustache;":"\u23B1","rnmid;":"\u2AEE","roang;":"\u27ED","roarr;":"\u21FE","robrk;":"\u27E7","ropar;":"\u2986","ropf;":"\u{1D563}","roplus;":"\u2A2E","rotimes;":"\u2A35","rpar;":")","rpargt;":"\u2994","rppolint;":"\u2A12","rrarr;":"\u21C9","rsaquo;":"\u203A","rscr;":"\u{1D4C7}","rsh;":"\u21B1","rsqb;":"]","rsquo;":"\u2019","rsquor;":"\u2019","rthree;":"\u22CC","rtimes;":"\u22CA","rtri;":"\u25B9","rtrie;":"\u22B5","rtrif;":"\u25B8","rtriltri;":"\u29CE","ruluhar;":"\u2968","rx;":"\u211E","sacute;":"\u015B","sbquo;":"\u201A","sc;":"\u227B","scE;":"\u2AB4","scap;":"\u2AB8","scaron;":"\u0161","sccue;":"\u227D","sce;":"\u2AB0","scedil;":"\u015F","scirc;":"\u015D","scnE;":"\u2AB6","scnap;":"\u2ABA","scnsim;":"\u22E9","scpolint;":"\u2A13","scsim;":"\u227F","scy;":"\u0441","sdot;":"\u22C5","sdotb;":"\u22A1","sdote;":"\u2A66","seArr;":"\u21D8","searhk;":"\u2925","searr;":"\u2198","searrow;":"\u2198",sect:"\xA7","sect;":"\xA7","semi;":";","seswar;":"\u2929","setminus;":"\u2216","setmn;":"\u2216","sext;":"\u2736","sfr;":"\u{1D530}","sfrown;":"\u2322","sharp;":"\u266F","shchcy;":"\u0449","shcy;":"\u0448","shortmid;":"\u2223","shortparallel;":"\u2225",shy:"\xAD","shy;":"\xAD","sigma;":"\u03C3","sigmaf;":"\u03C2","sigmav;":"\u03C2","sim;":"\u223C","simdot;":"\u2A6A","sime;":"\u2243","simeq;":"\u2243","simg;":"\u2A9E","simgE;":"\u2AA0","siml;":"\u2A9D","simlE;":"\u2A9F","simne;":"\u2246","simplus;":"\u2A24","simrarr;":"\u2972","slarr;":"\u2190","smallsetminus;":"\u2216","smashp;":"\u2A33","smeparsl;":"\u29E4","smid;":"\u2223","smile;":"\u2323","smt;":"\u2AAA","smte;":"\u2AAC","smtes;":"\u2AAC\uFE00","softcy;":"\u044C","sol;":"/","solb;":"\u29C4","solbar;":"\u233F","sopf;":"\u{1D564}","spades;":"\u2660","spadesuit;":"\u2660","spar;":"\u2225","sqcap;":"\u2293","sqcaps;":"\u2293\uFE00","sqcup;":"\u2294","sqcups;":"\u2294\uFE00","sqsub;":"\u228F","sqsube;":"\u2291","sqsubset;":"\u228F","sqsubseteq;":"\u2291","sqsup;":"\u2290","sqsupe;":"\u2292","sqsupset;":"\u2290","sqsupseteq;":"\u2292","squ;":"\u25A1","square;":"\u25A1","squarf;":"\u25AA","squf;":"\u25AA","srarr;":"\u2192","sscr;":"\u{1D4C8}","ssetmn;":"\u2216","ssmile;":"\u2323","sstarf;":"\u22C6","star;":"\u2606","starf;":"\u2605","straightepsilon;":"\u03F5","straightphi;":"\u03D5","strns;":"\xAF","sub;":"\u2282","subE;":"\u2AC5","subdot;":"\u2ABD","sube;":"\u2286","subedot;":"\u2AC3","submult;":"\u2AC1","subnE;":"\u2ACB","subne;":"\u228A","subplus;":"\u2ABF","subrarr;":"\u2979","subset;":"\u2282","subseteq;":"\u2286","subseteqq;":"\u2AC5","subsetneq;":"\u228A","subsetneqq;":"\u2ACB","subsim;":"\u2AC7","subsub;":"\u2AD5","subsup;":"\u2AD3","succ;":"\u227B","succapprox;":"\u2AB8","succcurlyeq;":"\u227D","succeq;":"\u2AB0","succnapprox;":"\u2ABA","succneqq;":"\u2AB6","succnsim;":"\u22E9","succsim;":"\u227F","sum;":"\u2211","sung;":"\u266A",sup1:"\xB9","sup1;":"\xB9",sup2:"\xB2","sup2;":"\xB2",sup3:"\xB3","sup3;":"\xB3","sup;":"\u2283","supE;":"\u2AC6","supdot;":"\u2ABE","supdsub;":"\u2AD8","supe;":"\u2287","supedot;":"\u2AC4","suphsol;":"\u27C9","suphsub;":"\u2AD7","suplarr;":"\u297B","supmult;":"\u2AC2","supnE;":"\u2ACC","supne;":"\u228B","supplus;":"\u2AC0","supset;":"\u2283","supseteq;":"\u2287","supseteqq;":"\u2AC6","supsetneq;":"\u228B","supsetneqq;":"\u2ACC","supsim;":"\u2AC8","supsub;":"\u2AD4","supsup;":"\u2AD6","swArr;":"\u21D9","swarhk;":"\u2926","swarr;":"\u2199","swarrow;":"\u2199","swnwar;":"\u292A",szlig:"\xDF","szlig;":"\xDF","target;":"\u2316","tau;":"\u03C4","tbrk;":"\u23B4","tcaron;":"\u0165","tcedil;":"\u0163","tcy;":"\u0442","tdot;":"\u20DB","telrec;":"\u2315","tfr;":"\u{1D531}","there4;":"\u2234","therefore;":"\u2234","theta;":"\u03B8","thetasym;":"\u03D1","thetav;":"\u03D1","thickapprox;":"\u2248","thicksim;":"\u223C","thinsp;":"\u2009","thkap;":"\u2248","thksim;":"\u223C",thorn:"\xFE","thorn;":"\xFE","tilde;":"\u02DC",times:"\xD7","times;":"\xD7","timesb;":"\u22A0","timesbar;":"\u2A31","timesd;":"\u2A30","tint;":"\u222D","toea;":"\u2928","top;":"\u22A4","topbot;":"\u2336","topcir;":"\u2AF1","topf;":"\u{1D565}","topfork;":"\u2ADA","tosa;":"\u2929","tprime;":"\u2034","trade;":"\u2122","triangle;":"\u25B5","triangledown;":"\u25BF","triangleleft;":"\u25C3","trianglelefteq;":"\u22B4","triangleq;":"\u225C","triangleright;":"\u25B9","trianglerighteq;":"\u22B5","tridot;":"\u25EC","trie;":"\u225C","triminus;":"\u2A3A","triplus;":"\u2A39","trisb;":"\u29CD","tritime;":"\u2A3B","trpezium;":"\u23E2","tscr;":"\u{1D4C9}","tscy;":"\u0446","tshcy;":"\u045B","tstrok;":"\u0167","twixt;":"\u226C","twoheadleftarrow;":"\u219E","twoheadrightarrow;":"\u21A0","uArr;":"\u21D1","uHar;":"\u2963",uacute:"\xFA","uacute;":"\xFA","uarr;":"\u2191","ubrcy;":"\u045E","ubreve;":"\u016D",ucirc:"\xFB","ucirc;":"\xFB","ucy;":"\u0443","udarr;":"\u21C5","udblac;":"\u0171","udhar;":"\u296E","ufisht;":"\u297E","ufr;":"\u{1D532}",ugrave:"\xF9","ugrave;":"\xF9","uharl;":"\u21BF","uharr;":"\u21BE","uhblk;":"\u2580","ulcorn;":"\u231C","ulcorner;":"\u231C","ulcrop;":"\u230F","ultri;":"\u25F8","umacr;":"\u016B",uml:"\xA8","uml;":"\xA8","uogon;":"\u0173","uopf;":"\u{1D566}","uparrow;":"\u2191","updownarrow;":"\u2195","upharpoonleft;":"\u21BF","upharpoonright;":"\u21BE","uplus;":"\u228E","upsi;":"\u03C5","upsih;":"\u03D2","upsilon;":"\u03C5","upuparrows;":"\u21C8","urcorn;":"\u231D","urcorner;":"\u231D","urcrop;":"\u230E","uring;":"\u016F","urtri;":"\u25F9","uscr;":"\u{1D4CA}","utdot;":"\u22F0","utilde;":"\u0169","utri;":"\u25B5","utrif;":"\u25B4","uuarr;":"\u21C8",uuml:"\xFC","uuml;":"\xFC","uwangle;":"\u29A7","vArr;":"\u21D5","vBar;":"\u2AE8","vBarv;":"\u2AE9","vDash;":"\u22A8","vangrt;":"\u299C","varepsilon;":"\u03F5","varkappa;":"\u03F0","varnothing;":"\u2205","varphi;":"\u03D5","varpi;":"\u03D6","varpropto;":"\u221D","varr;":"\u2195","varrho;":"\u03F1","varsigma;":"\u03C2","varsubsetneq;":"\u228A\uFE00","varsubsetneqq;":"\u2ACB\uFE00","varsupsetneq;":"\u228B\uFE00","varsupsetneqq;":"\u2ACC\uFE00","vartheta;":"\u03D1","vartriangleleft;":"\u22B2","vartriangleright;":"\u22B3","vcy;":"\u0432","vdash;":"\u22A2","vee;":"\u2228","veebar;":"\u22BB","veeeq;":"\u225A","vellip;":"\u22EE","verbar;":"|","vert;":"|","vfr;":"\u{1D533}","vltri;":"\u22B2","vnsub;":"\u2282\u20D2","vnsup;":"\u2283\u20D2","vopf;":"\u{1D567}","vprop;":"\u221D","vrtri;":"\u22B3","vscr;":"\u{1D4CB}","vsubnE;":"\u2ACB\uFE00","vsubne;":"\u228A\uFE00","vsupnE;":"\u2ACC\uFE00","vsupne;":"\u228B\uFE00","vzigzag;":"\u299A","wcirc;":"\u0175","wedbar;":"\u2A5F","wedge;":"\u2227","wedgeq;":"\u2259","weierp;":"\u2118","wfr;":"\u{1D534}","wopf;":"\u{1D568}","wp;":"\u2118","wr;":"\u2240","wreath;":"\u2240","wscr;":"\u{1D4CC}","xcap;":"\u22C2","xcirc;":"\u25EF","xcup;":"\u22C3","xdtri;":"\u25BD","xfr;":"\u{1D535}","xhArr;":"\u27FA","xharr;":"\u27F7","xi;":"\u03BE","xlArr;":"\u27F8","xlarr;":"\u27F5","xmap;":"\u27FC","xnis;":"\u22FB","xodot;":"\u2A00","xopf;":"\u{1D569}","xoplus;":"\u2A01","xotime;":"\u2A02","xrArr;":"\u27F9","xrarr;":"\u27F6","xscr;":"\u{1D4CD}","xsqcup;":"\u2A06","xuplus;":"\u2A04","xutri;":"\u25B3","xvee;":"\u22C1","xwedge;":"\u22C0",yacute:"\xFD","yacute;":"\xFD","yacy;":"\u044F","ycirc;":"\u0177","ycy;":"\u044B",yen:"\xA5","yen;":"\xA5","yfr;":"\u{1D536}","yicy;":"\u0457","yopf;":"\u{1D56A}","yscr;":"\u{1D4CE}","yucy;":"\u044E",yuml:"\xFF","yuml;":"\xFF","zacute;":"\u017A","zcaron;":"\u017E","zcy;":"\u0437","zdot;":"\u017C","zeetrf;":"\u2128","zeta;":"\u03B6","zfr;":"\u{1D537}","zhcy;":"\u0436","zigrarr;":"\u21DD","zopf;":"\u{1D56B}","zscr;":"\u{1D4CF}","zwj;":"\u200D","zwnj;":"\u200C"}),W=Object.freeze({A:null,AE:null,AEl:null,AEli:null,AElig:"\xC6",AM:null,AMP:"&",Aa:null,Aac:null,Aacu:null,Aacut:null,Aacute:"\xC1",Ac:null,Aci:null,Acir:null,Acirc:"\xC2",Ag:null,Agr:null,Agra:null,Agrav:null,Agrave:"\xC0",Ar:null,Ari:null,Arin:null,Aring:"\xC5",At:null,Ati:null,Atil:null,Atild:null,Atilde:"\xC3",Au:null,Aum:null,Auml:"\xC4",C:null,CO:null,COP:null,COPY:"\xA9",Cc:null,Cce:null,Cced:null,Ccedi:null,Ccedil:"\xC7",E:null,ET:null,ETH:"\xD0",Ea:null,Eac:null,Eacu:null,Eacut:null,Eacute:"\xC9",Ec:null,Eci:null,Ecir:null,Ecirc:"\xCA",Eg:null,Egr:null,Egra:null,Egrav:null,Egrave:"\xC8",Eu:null,Eum:null,Euml:"\xCB",G:null,GT:">",I:null,Ia:null,Iac:null,Iacu:null,Iacut:null,Iacute:"\xCD",Ic:null,Ici:null,Icir:null,Icirc:"\xCE",Ig:null,Igr:null,Igra:null,Igrav:null,Igrave:"\xCC",Iu:null,Ium:null,Iuml:"\xCF",L:null,LT:"<",N:null,Nt:null,Nti:null,Ntil:null,Ntild:null,Ntilde:"\xD1",O:null,Oa:null,Oac:null,Oacu:null,Oacut:null,Oacute:"\xD3",Oc:null,Oci:null,Ocir:null,Ocirc:"\xD4",Og:null,Ogr:null,Ogra:null,Ograv:null,Ograve:"\xD2",Os:null,Osl:null,Osla:null,Oslas:null,Oslash:"\xD8",Ot:null,Oti:null,Otil:null,Otild:null,Otilde:"\xD5",Ou:null,Oum:null,Ouml:"\xD6",Q:null,QU:null,QUO:null,QUOT:'"',R:null,RE:null,REG:"\xAE",T:null,TH:null,THO:null,THOR:null,THORN:"\xDE",U:null,Ua:null,Uac:null,Uacu:null,Uacut:null,Uacute:"\xDA",Uc:null,Uci:null,Ucir:null,Ucirc:"\xDB",Ug:null,Ugr:null,Ugra:null,Ugrav:null,Ugrave:"\xD9",Uu:null,Uum:null,Uuml:"\xDC",Y:null,Ya:null,Yac:null,Yacu:null,Yacut:null,Yacute:"\xDD",a:null,aa:null,aac:null,aacu:null,aacut:null,aacute:"\xE1",ac:null,aci:null,acir:null,acirc:"\xE2",acu:null,acut:null,acute:"\xB4",ae:null,ael:null,aeli:null,aelig:"\xE6",ag:null,agr:null,agra:null,agrav:null,agrave:"\xE0",am:null,amp:"&",ar:null,ari:null,arin:null,aring:"\xE5",at:null,ati:null,atil:null,atild:null,atilde:"\xE3",au:null,aum:null,auml:"\xE4",b:null,br:null,brv:null,brvb:null,brvba:null,brvbar:"\xA6",c:null,cc:null,cce:null,cced:null,ccedi:null,ccedil:"\xE7",ce:null,ced:null,cedi:null,cedil:"\xB8",cen:null,cent:"\xA2",co:null,cop:null,copy:"\xA9",cu:null,cur:null,curr:null,curre:null,curren:"\xA4",d:null,de:null,deg:"\xB0",di:null,div:null,divi:null,divid:null,divide:"\xF7",e:null,ea:null,eac:null,eacu:null,eacut:null,eacute:"\xE9",ec:null,eci:null,ecir:null,ecirc:"\xEA",eg:null,egr:null,egra:null,egrav:null,egrave:"\xE8",et:null,eth:"\xF0",eu:null,eum:null,euml:"\xEB",f:null,fr:null,fra:null,frac:null,frac1:null,frac12:"\xBD",frac14:"\xBC",frac3:null,frac34:"\xBE",g:null,gt:">",i:null,ia:null,iac:null,iacu:null,iacut:null,iacute:"\xED",ic:null,ici:null,icir:null,icirc:"\xEE",ie:null,iex:null,iexc:null,iexcl:"\xA1",ig:null,igr:null,igra:null,igrav:null,igrave:"\xEC",iq:null,iqu:null,ique:null,iques:null,iquest:"\xBF",iu:null,ium:null,iuml:"\xEF",l:null,la:null,laq:null,laqu:null,laquo:"\xAB",lt:"<",m:null,ma:null,mac:null,macr:"\xAF",mi:null,mic:null,micr:null,micro:"\xB5",mid:null,midd:null,middo:null,middot:"\xB7",n:null,nb:null,nbs:null,nbsp:"\xA0",no:null,not:"\xAC",nt:null,nti:null,ntil:null,ntild:null,ntilde:"\xF1",o:null,oa:null,oac:null,oacu:null,oacut:null,oacute:"\xF3",oc:null,oci:null,ocir:null,ocirc:"\xF4",og:null,ogr:null,ogra:null,ograv:null,ograve:"\xF2",or:null,ord:null,ordf:"\xAA",ordm:"\xBA",os:null,osl:null,osla:null,oslas:null,oslash:"\xF8",ot:null,oti:null,otil:null,otild:null,otilde:"\xF5",ou:null,oum:null,ouml:"\xF6",p:null,pa:null,par:null,para:"\xB6",pl:null,plu:null,plus:null,plusm:null,plusmn:"\xB1",po:null,pou:null,poun:null,pound:"\xA3",q:null,qu:null,quo:null,quot:'"',r:null,ra:null,raq:null,raqu:null,raquo:"\xBB",re:null,reg:"\xAE",s:null,se:null,sec:null,sect:"\xA7",sh:null,shy:"\xAD",su:null,sup:null,sup1:"\xB9",sup2:"\xB2",sup3:"\xB3",sz:null,szl:null,szli:null,szlig:"\xDF",t:null,th:null,tho:null,thor:null,thorn:"\xFE",ti:null,tim:null,time:null,times:"\xD7",u:null,ua:null,uac:null,uacu:null,uacut:null,uacute:"\xFA",uc:null,uci:null,ucir:null,ucirc:"\xFB",ug:null,ugr:null,ugra:null,ugrav:null,ugrave:"\xF9",um:null,uml:"\xA8",uu:null,uum:null,uuml:"\xFC",y:null,ya:null,yac:null,yacu:null,yacut:null,yacute:"\xFD",ye:null,yen:"\xA5",yu:null,yum:null,yuml:"\xFF"}),g=32;var be=Object.freeze({128:8364,130:8218,131:402,132:8222,133:8230,134:8224,135:8225,136:710,137:8240,138:352,139:8249,140:338,142:381,145:8216,146:8217,147:8220,148:8221,149:8226,150:8211,151:8212,152:732,153:8482,154:353,155:8250,156:339,158:382,159:376}),K=[],y=Object.freeze({kind:"need-more"});function xe(n){if(n==="=")return!0;let e=n.charCodeAt(0);return e>=48&&e<=57||e>=65&&e<=90||e>=97&&e<=122}function ve(n){let e=n.charCodeAt(0);return e>=48&&e<=57||e>=65&&e<=90||e>=97&&e<=122}function Te(n){return n===0||n>1114111||n>=55296&&n<=57343?"\uFFFD":String.fromCodePoint(be[n]??n)}function ye(n,e,t){let r=e+2,i=10;if(r===n.length)return t?T(r-e):y;let l=n[r];if((l==="x"||l==="X")&&(i=16,r+=1,r===n.length))return t?T(r-e):y;let o=r,u=0;for(;r<n.length;){let s=n.charCodeAt(r),c=-1;if(s>=48&&s<=57?c=s-48:i===16&&s>=65&&s<=70?c=s-65+10:i===16&&s>=97&&s<=102&&(c=s-97+10),c<0)break;u<=1114112&&(u=u*i+c),r+=1}if(r===o)return T(Math.min(n.length,r+1)-e);if(r===n.length&&!t)return y;let a=Math.min(n.length,r+1)-e;return n[r]===";"&&(r+=1),{kind:"match",consumed:r-e,examined:a,value:Te(u)}}function T(n=1){if(n<=g+2){let e=K[n];if(e!==void 0)return e;let t=Object.freeze({kind:"literal",consumed:1,examined:n,value:"&"});return K[n]=t,t}return{kind:"literal",consumed:1,examined:n,value:"&"}}function A(n,e,t,r){if(n[e]!=="&")return T();let i=e+1;if(i===n.length)return r?T(i-e):y;if(n[i]==="#")return ye(n,e,r);let l=null,o=-1,u=0,a=!1,s=i;for(;i<n.length&&u<g;){let d=n[i];if(d===void 0||!ve(d)&&d!==";")break;if(i+=1,u+=1,d===";"){a=!0;break}}if(a){let d=Y[n.slice(s,i)];d!==void 0&&(l=d,o=i)}if(l===null){let d="";for(let h=s;h<i;h+=1){let q=n[h];if(q===void 0||q===";")break;d+=q;let x=W[d];if(x===void 0)break;x!==null&&(l=x,o=h+1)}}if(i===n.length&&!r&&!a&&u<g)return y;let c=i<n.length&&!a&&u<g?i+1-e:i-e;if(l===null||o<0)return T(c);if(!(n[o-1]===";")&&t==="attribute"){if(o===n.length&&!r)return y;let d=n[o];if(d!==void 0&&xe(d))return T(c)}return{kind:"match",consumed:o-e,examined:c,value:l}}var $="<!--",X=/["'>]/g,we=32;function Z(n){let e=n.charCodeAt(0);return e>=65&&e<=90||e>=97&&e<=122}function ee(n){let e=n.charCodeAt(0);return e>=48&&e<=57||e>=65&&e<=90||e>=97&&e<=122}function J(n){if(n.length<2)return!1;let e=n[n.length-1]??"";if(n[1]!=="#")return e===";"||!ee(e)||n.length-1>=g;if(n.length===2)return!1;let t=n[2]==="x"||n[2]==="X";if(t&&n.length===3)return!1;if(e===";")return!0;let r=e.charCodeAt(0);return!(r>=48&&r<=57||t&&r>=65&&r<=70||t&&r>=97&&r<=102)}function b(n){return n===" "||n===`
|
|
11
|
+
`||n==="\f"||n==="\r"||n===" "}function U(n){let e="";for(let t=0;t<n.length;t+=1){let r=n.charCodeAt(t);e+=r>=65&&r<=90?String.fromCharCode(r+32):n[t]}return e}function ke(n){let e="",t=0;for(;t<n.length;){if(n[t]!=="&"){e+=n[t],t+=1;continue}let r=A(n,t,"attribute",!0);r.kind==="match"?(e+=r.value,t+=r.consumed):(e+="&",t+=1)}return e}function Q(n){let e=n.length-1,t=1,r=!1;n[t]==="/"&&(r=!0,t+=1);let i=t;for(;t<e;){let u=n[t];if(u===void 0||b(u)||u==="/"||u===">")break;t+=1}if(t===i)return null;let l=U(n.slice(i,t)),o={};if(r)return{end:r,name:l,attributes:o};for(;t<e;){for(;t<e&&b(n[t]??"");)t+=1;if(t>=e||n[t]==="/")break;let u=t;for(;t<e;){let c=n[t];if(c===void 0||b(c)||c==="="||c==="/"||c===">")break;t+=1}if(t===u){t+=1;continue}let a=U(n.slice(u,t));for(;t<e&&b(n[t]??"");)t+=1;let s="";if(n[t]==="="){for(t+=1;t<e&&b(n[t]??"");)t+=1;let c=n[t];if(c==='"'||c==="'"){t+=1;let p=t,d=n.indexOf(c,t);t=d<0||d>=e?e:d,s=n.slice(p,t),n[t]===c&&(t+=1)}else{let p=t;for(;t<e&&!b(n[t]??"")&&n[t]!==">";)t+=1;s=n.slice(p,t)}}(a==="href"||a==="alt"||a==="start"||a==="value")&&o[a]===void 0&&(o[a]=ke(s))}return{end:r,name:l,attributes:o}}var S=class{constructor(e){this.frames=[];this.topByName=Object.create(null);this.referenceCache=new Map;this.state="data";this.token="";this.quote=null;this.commentTail="";this.referenceBuffer=null;this.pendingCarriageReturn=!1;this.preDepth=0;this.raw=null;this.ordinaryDrop=null;this.specialReference=null;this.inHead=!1;this.finished=!1;this.host=e}write(e){if(this.finished)throw new TypeError("HTML scanner is already finished");let t=0;for(;t<e.length;){if(this.pendingCarriageReturn&&(this.pendingCarriageReturn=!1,this.consume(`
|
|
12
|
+
`),e[t]===`
|
|
13
|
+
`)){t+=1;continue}if(this.state==="comment"){t=this.consumeCommentSpan(e,t);continue}if(this.state==="declaration"){let l=e.indexOf(">",t);if(l<0)return;this.state="data",t=l+1;continue}if(this.raw!==null&&!this.raw.preserve&&this.raw.candidate===null){t=this.consumeDroppedRawSpan(e,t);continue}if(this.ordinaryDrop!==null&&this.ordinaryDrop.token===null){let l=e.indexOf("<",t);if(l<0)return;t=l}if(this.raw===null&&this.ordinaryDrop===null&&this.state==="data"&&this.referenceBuffer!==null){t=this.consumeReferenceSpan(e,t);continue}if(this.raw===null&&this.ordinaryDrop===null&&this.state==="data"&&this.referenceBuffer===null&&!this.inHead){let l=this.consumeDataSpan(e,t);if(l>t){t=l;continue}}if(this.raw===null&&this.ordinaryDrop===null&&this.state==="tag"){t=this.consumeTagSpan(e,t);continue}let r=e.codePointAt(t);if(r===void 0)break;let i=String.fromCodePoint(r);t+=i.length,i==="\r"?this.pendingCarriageReturn=!0:this.consume(i==="\0"?"\uFFFD":i)}}finish(){if(this.finished)throw new TypeError("HTML scanner is already finished");if(this.finished=!0,this.pendingCarriageReturn&&(this.pendingCarriageReturn=!1,this.consume(`
|
|
14
|
+
`)),this.finishSpecialState(),this.state==="data")this.resolveReference(!0);else if(this.state==="tag-open"||this.state==="end-tag-open"||this.state==="tag"){let e=this.token;this.releaseTokenBuffer(),this.emitText(e)}else this.state==="comment"?(this.host.releaseToken(this.commentTail.length),this.commentTail=""):this.state==="markup-probe"&&this.releaseTokenBuffer();this.state="data",this.closeFramesTo(0)}consume(e){if(this.raw!==null){this.consumeRaw(e);return}if(this.ordinaryDrop!==null){this.consumeOrdinaryDrop(e);return}switch(this.state){case"data":this.consumeData(e);break;case"tag-open":this.consumeTagOpen(e);break;case"end-tag-open":this.consumeEndTagOpen(e);break;case"tag":this.consumeTag(e);break;case"markup-probe":this.consumeMarkupProbe(e);break;case"comment":this.consumeComment(e);break;case"declaration":e===">"&&(this.state="data");break}}consumeData(e){if(this.inHead){if(b(e))return;e!=="<"&&this.exitHead()}if(this.referenceBuffer!==null){this.retainReference(this.referenceBuffer+e),J(this.referenceBuffer)&&this.resolveReference(!1);return}e==="&"?this.retainReference("&"):e==="<"?this.startToken("<","tag-open"):this.emitText(e)}consumeTagOpen(e){e==="!"?(this.appendToken(e),this.state="markup-probe"):e==="/"?(this.appendToken(e),this.state="end-tag-open"):Z(e)?(this.appendToken(e),this.state="tag"):(this.releaseTokenBuffer(),this.state="data",this.emitText("<"),this.consumeData(e))}consumeEndTagOpen(e){Z(e)?(this.appendToken(e),this.state="tag"):(this.releaseTokenBuffer(),this.state="data",this.emitText("</"),this.consumeData(e))}consumeTag(e){if(this.appendToken(e),this.quote!==null){e===this.quote&&(this.quote=null);return}e==='"'||e==="'"?this.quote=e:e===">"&&this.emitToken()}consumeMarkupProbe(e){if(this.appendToken(e),$.startsWith(this.token)){this.token===$&&(this.releaseTokenBuffer(),this.state="comment");return}let t=e===">";this.releaseTokenBuffer(),this.state=t?"data":"declaration"}consumeComment(e){if(this.host.retainToken(e.length),this.commentTail+=e,this.commentTail.endsWith("-->"))this.host.releaseToken(this.commentTail.length),this.commentTail="",this.state="data";else if(this.commentTail.length>2){let t=this.commentTail.length-2;this.host.releaseToken(t),this.commentTail=this.commentTail.slice(-2)}}consumeCommentSpan(e,t){let r=this.commentTail,i=r+e.slice(t),l=i.indexOf("-->"),o=Math.min(3,i.length);if(o>r.length&&this.host.retainToken(o-r.length),this.host.releaseToken(o),this.commentTail="",l<0){let u=i.slice(-2);return u.length>0&&this.host.retainToken(u.length),this.commentTail=u,e.length}return this.state="data",t+Math.max(0,l+3-r.length)}consumeDataSpan(e,t){let i=t,l="";for(;i<e.length;){let o=i;for(;i<e.length;){let s=e.charCodeAt(i);if(s===0||s===13||s===38||s===60)break;i+=1}if(i>o){let s=e.slice(o,i);l.length>0&&l.length+s.length>65536&&(this.emitText(l),l=""),s.length>=65536?this.emitText(s):l+=s}if(i>=e.length||e.charCodeAt(i)!==38)break;if(e[i+1]==="#"){let s=i,c=0;for(;e[s]==="&"&&e[s+1]==="#";){let p=s+2,d=!1;if((e[p]==="x"||e[p]==="X")&&(d=!0,p+=1),p>=e.length)break;let h=e.charCodeAt(p);if(h>=48&&h<=57||d&&h>=65&&h<=70||d&&h>=97&&h<=102)break;c=Math.max(c,p+1-s);let x=e[p];if(s=x==="&"||x==="<"?p:p+1,x!=="&")break}if(s>i){this.host.probeToken(c),l+=e.slice(i,s),i=s;continue}}let a=this.decodeReference(e,i,"data",!1);if(a.kind==="need-more")return l.length>0&&this.emitText(l),this.retainReference(e.slice(i)),e.length;if(this.host.probeToken(a.examined),a.kind==="match")l+=a.value,i+=a.consumed;else{let s=i+a.examined,c=e[s-1];(c==="&"||c==="<")&&(s-=1),l+=e.slice(i,s),i=s}l.length>=65536&&(this.emitText(l),l="")}return l.length>0&&this.emitText(l),i}consumeDroppedRawSpan(e,t){let r=this.raw;if(r===null||r.preserve||r.candidate!==null)return t;let i=e.indexOf("<",t);if(i<0)return e.length;let l=r.closing,o=0;for(;o<l.length&&i+o<e.length;){let a=e.charCodeAt(i+o);if((a>=65&&a<=90?a+32:a)!==l.charCodeAt(o))break;o+=1}if(o<l.length&&i+o<e.length){let a=o+1;return this.host.probeToken(a),i+1}let u=Math.min(e.length,i+l.length);for(let a=i;a<u;a+=1)this.consumeRaw(e[a]??"");return u}consumeReferenceSpan(e,t){let r=this.referenceBuffer;if(r===null)return t;let i=t;if(r==="&"&&e[i]==="#")i+=1;else if(r==="&#")i+=1;else{let l=r[1]==="#",o=l&&(r[2]==="x"||r[2]==="X"),u=l?Number.MAX_SAFE_INTEGER:g-(r.length-1);for(;i<e.length&&u>0;){let a=e[i]??"",s=a.charCodeAt(0),c=l?s>=48&&s<=57||o&&s>=65&&s<=70||o&&s>=97&&s<=102:ee(a);if(i+=1,u-=1,!c||a===";")break}}return i===t&&(i+=1),this.retainReference(r+e.slice(t,i)),J(this.referenceBuffer??"")&&this.resolveReference(!1),i}consumeTagSpan(e,t){let r=t;for(;r<e.length&&this.state==="tag";){if(this.quote!==null){let u=e.indexOf(this.quote,r);if(u<0)return this.appendTokenValue(e.slice(r)),e.length;this.appendTokenValue(e.slice(r,u+1)),this.quote=null,r=u+1;continue}X.lastIndex=r;let l=X.exec(e)?.index??e.length;if(l>r&&this.appendTokenValue(e.slice(r,l)),l>=e.length)return l;let o=e[l]??"";this.appendTokenValue(o),r=l+1,o===">"?this.emitToken():this.quote=o}return r}startToken(e,t){this.host.retainToken(e.length),this.token=e,this.state=t}appendToken(e){this.host.retainToken(e.length),this.token+=e}appendTokenValue(e){this.host.retainToken(e.length),this.token+=e}releaseTokenBuffer(){this.host.releaseToken(this.token.length),this.token="",this.quote=null}retainReference(e){let t=this.referenceBuffer?.length??0;this.host.retainToken(e.length-t),this.referenceBuffer=e}resolveReference(e){let t=this.referenceBuffer;if(t===null)return;let r=this.decodeReference(t,0,"data",e);if(r.kind==="need-more")return;this.host.releaseToken(t.length),this.referenceBuffer=null,r.kind==="match"?this.emitText(r.value):this.emitText("&");let i=t.slice(r.consumed);this.consumeResolvedRemainder(i),e&&this.referenceBuffer!==null&&this.resolveReference(!0)}consumeResolvedRemainder(e){let t=0;for(;t<e.length;){if(this.state!=="data"||this.referenceBuffer!==null){for(let o of e.slice(t))this.consume(o);return}let r=e.indexOf("&",t),i=e.indexOf("<",t),l=e.length;if(r>=0&&(l=Math.min(l,r)),i>=0&&(l=Math.min(l,i)),l>t&&this.emitText(e.slice(t,l)),l>=e.length)return;this.consumeData(e[l]??""),t=l+1}}emitToken(){let e=Q(this.token);this.releaseTokenBuffer(),this.state="data",e!==null&&this.emitParsedTag(e)}emitParsedTag(e){let t=m(e.name);this.inHead&&this.handleHeadTag(e,t)||t!==null&&(e.end?this.closeTag(t):this.openTag(t,e.attributes))}openTag(e,t){if(e.kind==="raw-drop"){this.host.pushDepth(),this.host.dropped(e.name),this.raw={tag:e.name,closing:`</${e.name}`,preserve:!1,decode:!1,plaintext:!1,candidate:null};return}if(e.kind==="ordinary-drop"||e.kind==="foreign-drop"){this.host.pushDepth(),this.host.dropped(e.name),this.ordinaryDrop={tag:e.name,depth:1,token:null,quote:null};return}if(e.kind==="raw-preserve"){this.openVisibleTag(e,t),this.raw={tag:e.name,closing:`</${e.name}`,preserve:!0,decode:e.name==="textarea",plaintext:e.name==="plaintext",candidate:null};return}if(e.kind==="head"){this.openVisibleTag(e,t),this.inHead=!0;return}this.openVisibleTag(e,t)}openVisibleTag(e,t){if(e.kind==="void"){this.host.start(e.name,t);return}this.host.pushDepth();let r=e.name==="a"?t.href?.length??0:0;r>0&&this.host.retainToken(r);let i=this.topByName[e.name]??-1;this.frames.push({tag:e.name,previousSame:i,retainedToken:r}),this.topByName[e.name]=this.frames.length-1,e.name==="pre"&&(this.preDepth+=1),this.host.start(e.name,t)}closeTag(e){if(e.kind==="void")return;let t=this.topByName[e.name];t!==void 0&&this.closeFramesTo(t)}closeFramesTo(e){let t=this.frames.length-e;if(!(t<=0)){for(;this.frames.length>e;){let r=this.frames.pop();if(r===void 0)break;r.previousSame<0?delete this.topByName[r.tag]:this.topByName[r.tag]=r.previousSame,this.host.end(r.tag),r.retainedToken>0&&this.host.releaseToken(r.retainedToken),r.tag==="pre"&&(this.preDepth=Math.max(0,this.preDepth-1))}this.host.popDepth(t)}}emitText(e){this.host.text(e,this.preDepth>0?"pre":"normal")}handleHeadTag(e,t){if(e.end&&e.name==="head"){let i=m("head");return i!==null&&this.closeTag(i),this.inHead=!1,!0}return!e.end&&e.name==="body"?(this.exitHead(),t!==null&&this.openTag(t,e.attributes),!0):e.name==="html"||e.name==="head"||e.name==="base"||e.name==="link"||e.name==="meta"||e.name==="title"||e.name==="script"||e.name==="style"||e.name==="noscript"||e.name==="noembed"?(t===null||(e.end?this.closeTag(t):e.name!=="head"&&this.openTag(t,e.attributes)),!0):(e.end||(this.exitHead(),t!==null&&this.openTag(t,e.attributes)),!0)}exitHead(){if(!this.inHead)return;let e=m("head");e!==null&&this.closeTag(e),this.inHead=!1}consumeRaw(e){let t=this.raw;if(t!==null){if(t.plaintext){this.host.text(e,"pre");return}if(this.specialReference!==null){this.retainSpecialReference(this.specialReference+e),this.resolveSpecialReference(!1);return}if(t.candidate!==null){this.consumeRawCandidate(e);return}e==="<"?(this.host.retainToken(1),t.candidate="<"):t.preserve&&t.decode&&e==="&"?this.retainSpecialReference("&"):t.preserve&&this.host.text(e,"pre")}}consumeRawCandidate(e){let t=this.raw;if(t===null||t.candidate===null)return;this.host.retainToken(e.length),t.candidate+=e;let r=U(t.candidate),i=t.closing;if(!i.startsWith(r)){if(r.startsWith(i)){let l=r.slice(i.length);if(l===">"){this.closeRawState();return}let o=l[0];if(o==="/"||o!==void 0&&b(o)){e===">"&&this.closeRawState();return}}this.failRawCandidate()}}failRawCandidate(){let e=this.raw;if(e===null||e.candidate===null)return;let t=e.candidate;this.host.releaseToken(t.length),e.candidate=null,e.preserve&&this.host.text("<","pre");for(let r of t.slice(1))this.consume(r)}closeRawState(){let e=this.raw;if(!(e===null||e.candidate===null))if(this.host.releaseToken(e.candidate.length),e.candidate=null,this.raw=null,e.preserve){let t=m(e.tag);t!==null&&this.closeTag(t)}else this.host.popDepth(1)}retainSpecialReference(e){let t=this.specialReference?.length??0;this.host.retainToken(e.length-t),this.specialReference=e}resolveSpecialReference(e){let t=this.specialReference;if(t===null)return;let r=this.decodeReference(t,0,"data",e);if(r.kind!=="need-more"){this.host.releaseToken(t.length),this.specialReference=null,r.kind==="match"?this.host.text(r.value,"pre"):this.host.text("&","pre");for(let i of t.slice(r.consumed))this.consume(i);e&&this.specialReference!==null&&this.resolveSpecialReference(!0)}}consumeOrdinaryDrop(e){let t=this.ordinaryDrop;if(t===null)return;if(t.token===null){e==="<"&&(this.host.retainToken(1),t.token="<");return}if(this.host.retainToken(e.length),t.token+=e,t.quote!==null){e===t.quote&&(t.quote=null);return}if(e==='"'||e==="'"){t.quote=e;return}if(e!==">")return;let r=t.token,i=Q(r);this.host.releaseToken(r.length),t.token=null,t.quote=null,i?.name===t.tag&&(i.end?(t.depth-=1,this.host.popDepth(1),t.depth===0&&(this.ordinaryDrop=null)):(this.host.pushDepth(),t.depth+=1))}finishSpecialState(){if(this.raw!==null){let e=this.raw;if(this.specialReference!==null&&this.resolveSpecialReference(!0),e.candidate!==null){let t=e.candidate;this.host.releaseToken(t.length),e.candidate=null,e.preserve&&this.emitRawLiteral(t,e.decode)}this.raw=null,e.preserve||this.host.popDepth(1)}if(this.ordinaryDrop!==null){let e=this.ordinaryDrop;e.token!==null&&this.host.releaseToken(e.token.length),this.host.popDepth(e.depth),this.ordinaryDrop=null}}emitRawLiteral(e,t){if(!t){this.host.text(e,"pre");return}let r=0;for(;r<e.length;){if(e[r]!=="&"){this.host.text(e[r]??"","pre"),r+=1;continue}let i=this.decodeReference(e,r,"data",!0);i.kind==="match"?(this.host.text(i.value,"pre"),r+=i.consumed):(this.host.text("&","pre"),r+=1)}}decodeReference(e,t,r,i){if(e[t+1]==="#")return A(e,t,r,i);let l=Math.min(e.length,t+g+2),o=`${r==="data"?"d":"a"}${i?"1":"0"}${e.slice(t,l)}`,u=this.referenceCache.get(o);if(u!==void 0)return u;let a=A(e,t,r,i);if(this.referenceCache.size>=we){let s=this.referenceCache.keys().next().value;s!==void 0&&this.referenceCache.delete(s)}return this.referenceCache.set(o,a),a}};var te=4096,P=Symbol("stop conversion"),k=class{constructor(e,t){this.droppedContainers=Object.create(null);this.consumedInput=0;this.outputLength=0;this.retainedToken=0;this.depth=0;this.outputBuffer="";this.stoppedBy=null;this.finished=!1;this.config=e,this.emit=t,this.formatter=new L(e,(i,l)=>this.appendOutput(i,l));let r={retainToken:i=>this.retainToken(i),releaseToken:i=>{this.retainedToken=Math.max(0,this.retainedToken-i)},probeToken:i=>this.probeToken(i),pushDepth:()=>this.pushDepth(),popDepth:i=>{this.depth=Math.max(0,this.depth-i)},text:(i,l)=>this.formatter.text(i,l),start:(i,l)=>this.formatter.start(i,l),end:i=>this.formatter.end(i),dropped:i=>this.recordDropped(i)};this.scanner=new S(r)}write(e){if(typeof e!="string")throw new TypeError("HTML input must be a string");if(this.finished)throw new TypeError("Conversion session is already finished");if(this.stoppedBy===null)try{let t=this.config.limits.input-this.consumedInput;if(e.length<=t){this.consumedInput+=e.length,this.scanner.write(e);return}let r=Math.max(0,t);r>0&&r<e.length&&e.charCodeAt(r-1)>=55296&&e.charCodeAt(r-1)<=56319&&e.charCodeAt(r)>=56320&&e.charCodeAt(r)<=57343&&(r-=1),r>0&&(this.consumedInput+=r,this.scanner.write(e.slice(0,r))),this.exceed("input")}catch(t){if(t!==P)throw t}}finish(){if(this.finished)throw new TypeError("Conversion session is already finished");if(this.finished=!0,this.stoppedBy===null)try{this.scanner.finish(),this.formatter.finish()}catch(t){if(t!==P)throw t}this.flushAll();let e=Object.freeze(Object.assign(Object.create(null),this.droppedContainers));return Object.freeze({truncatedBy:this.stoppedBy,scanComplete:this.stoppedBy===null,consumedInputCodeUnits:this.consumedInput,outputCodeUnits:this.outputLength,droppedContainers:e})}appendOutput(e,t){let r=this.config.limits.output-this.outputLength;if(e.length>r){t||this.exceed("output");let i=Math.max(0,r);i>0&&i<e.length&&e.charCodeAt(i-1)>=55296&&e.charCodeAt(i-1)<=56319&&e.charCodeAt(i)>=56320&&e.charCodeAt(i)<=57343&&(i-=1),i>0&&(this.outputBuffer+=e.slice(0,i),this.outputLength+=i,this.flushFullChunks()),this.exceed("output")}this.outputBuffer+=e,this.outputLength+=e.length,this.flushFullChunks()}retainToken(e){this.retainedToken+e>this.config.limits.token&&this.exceed("token"),this.retainedToken+=e}probeToken(e){this.retainedToken+e>this.config.limits.token&&this.exceed("token")}pushDepth(){this.depth+1>this.config.limits.depth&&this.exceed("depth"),this.depth+=1}recordDropped(e){this.droppedContainers[e]=(this.droppedContainers[e]??0)+1}exceed(e){throw this.config.overflow==="throw"?new v(e,this.config.limits[e],this.config.limits[e]+1):(this.stoppedBy=e,P)}flushFullChunks(){for(;this.outputBuffer.length>=te;){let[e,t]=_(this.outputBuffer,te);if(e.length===0)return;this.outputBuffer=t,this.emit(e)}}flushAll(){this.outputBuffer.length!==0&&(this.emit(this.outputBuffer),this.outputBuffer="")}};function D(n,e){if(typeof n!="string")throw new TypeError(`${e} must be a string`)}function re(n,e){let t=[],r=new k(e,l=>t.push(l));r.write(n);let i=r.finish();return Object.freeze({text:t.join(""),...i})}function ne(n,e){return D(n,"HTML input"),re(n,O(e)).text}function ie(n,e){return D(n,"HTML input"),re(n,F(e))}function le(n){let e=O(n),t,r,i=new Promise((a,s)=>{t=a,r=s}),l=null,o=new k(e,a=>{if(l===null)throw new TypeError("Stream controller is unavailable");l.enqueue(a)}),u=new TransformStream({transform(a,s){l=s;try{D(a,"Stream chunk"),o.write(a)}catch(c){throw r(c),c}finally{l=null}},flush(a){l=a;try{let s=o.finish();t(s)}catch(s){throw r(s),s}finally{l=null}}});return Object.defineProperty(u,"result",{configurable:!1,enumerable:!1,value:i,writable:!1}),u}function se(n){return D(n,"Text input"),n.replace(/[&<>"']/g,e=>{switch(e){case"&":return"&";case"<":return"<";case">":return">";case'"':return""";default:return"'"}})}0&&(module.exports={PurifaiLimitError,convert,createTextTransform,escapeHtmlText,toText});
|