{
  "version": 3,
  "sources": ["../../../../src/workers/email/send_email.worker.ts", "../../../../../../node_modules/.pnpm/kleur@4.1.5/node_modules/kleur/colors.mjs", "../../../../../../node_modules/.pnpm/postal-mime@2.4.3_patch_hash=44bc62560d3d339b5c0836c18991f42b3b998db144f5ee7101d6758bbe74d3f2/node_modules/postal-mime/src/decode-strings.js", "../../../../../../node_modules/.pnpm/postal-mime@2.4.3_patch_hash=44bc62560d3d339b5c0836c18991f42b3b998db144f5ee7101d6758bbe74d3f2/node_modules/postal-mime/src/pass-through-decoder.js", "../../../../../../node_modules/.pnpm/postal-mime@2.4.3_patch_hash=44bc62560d3d339b5c0836c18991f42b3b998db144f5ee7101d6758bbe74d3f2/node_modules/postal-mime/src/base64-decoder.js", "../../../../../../node_modules/.pnpm/postal-mime@2.4.3_patch_hash=44bc62560d3d339b5c0836c18991f42b3b998db144f5ee7101d6758bbe74d3f2/node_modules/postal-mime/src/qp-decoder.js", "../../../../../../node_modules/.pnpm/postal-mime@2.4.3_patch_hash=44bc62560d3d339b5c0836c18991f42b3b998db144f5ee7101d6758bbe74d3f2/node_modules/postal-mime/src/mime-node.js", "../../../../../../node_modules/.pnpm/postal-mime@2.4.3_patch_hash=44bc62560d3d339b5c0836c18991f42b3b998db144f5ee7101d6758bbe74d3f2/node_modules/postal-mime/src/html-entities.js", "../../../../../../node_modules/.pnpm/postal-mime@2.4.3_patch_hash=44bc62560d3d339b5c0836c18991f42b3b998db144f5ee7101d6758bbe74d3f2/node_modules/postal-mime/src/text-format.js", "../../../../../../node_modules/.pnpm/postal-mime@2.4.3_patch_hash=44bc62560d3d339b5c0836c18991f42b3b998db144f5ee7101d6758bbe74d3f2/node_modules/postal-mime/src/address-parser.js", "../../../../../../node_modules/.pnpm/postal-mime@2.4.3_patch_hash=44bc62560d3d339b5c0836c18991f42b3b998db144f5ee7101d6758bbe74d3f2/node_modules/postal-mime/src/base64-encoder.js", "../../../../../../node_modules/.pnpm/postal-mime@2.4.3_patch_hash=44bc62560d3d339b5c0836c18991f42b3b998db144f5ee7101d6758bbe74d3f2/node_modules/postal-mime/src/postal-mime.js", "../../../../src/workers/email/constants.ts"],
  "sourcesContent": ["import { WorkerEntrypoint } from \"cloudflare:workers\";\nimport { blue } from \"kleur/colors\";\nimport PostalMime from \"postal-mime\";\nimport { RAW_EMAIL } from \"./constants\";\nimport { type MiniflareEmailMessage as EmailMessage } from \"./email.worker\";\nimport type { EmailAddress, MessageBuilder } from \"./types\";\nimport type { Email } from \"postal-mime\";\n\n/**\n * Build a Message-ID in the shape the production `send_email` binding returns:\n * `<{36 alphanumeric chars}@{sender domain}>`, brackets included. The body is\n * random \u2014 production synthesizes its own id rather than echoing any header\n * present in the submitted email.\n */\nfunction synthesizeMessageId(senderEmail: string): string {\n\tconst alphabet =\n\t\t\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\";\n\tconst bytes = crypto.getRandomValues(new Uint8Array(36));\n\tconst id = Array.from(bytes, (b) => alphabet[b % alphabet.length]).join(\"\");\n\tconst domain = senderEmail.slice(senderEmail.lastIndexOf(\"@\") + 1);\n\treturn `<${id}@${domain}>`;\n}\n\n/**\n * Extracts the bare email address from a string (which may be in\n * `\"Name\" <address>` or plain address format) or EmailAddress object.\n */\nfunction extractEmailAddress(addr: string | EmailAddress): string {\n\tif (typeof addr !== \"string\") {\n\t\treturn addr.email;\n\t}\n\t// Match \"Name\" <address> or Name <address> or just address\n\tconst match = addr.match(/<([^>]+)>$/);\n\treturn match ? match[1].trim() : addr.trim();\n}\n\n/**\n * Formats an email address for display\n */\nfunction formatEmailAddress(addr: string | EmailAddress): string {\n\tif (typeof addr === \"string\") {\n\t\treturn addr;\n\t}\n\treturn `\"${addr.name}\" <${addr.email}>`;\n}\n\n/**\n * Formats a MessageBuilder for logging\n */\nfunction formatMessageBuilder(builder: MessageBuilder): string {\n\tconst lines: string[] = [];\n\n\tlines.push(\"From: \" + formatEmailAddress(builder.from));\n\n\tconst toArray = Array.isArray(builder.to) ? builder.to : [builder.to];\n\tlines.push(\"To: \" + toArray.map(formatEmailAddress).join(\", \"));\n\n\tif (builder.cc) {\n\t\tconst ccArray = Array.isArray(builder.cc) ? builder.cc : [builder.cc];\n\t\tlines.push(\"Cc: \" + ccArray.map(formatEmailAddress).join(\", \"));\n\t}\n\n\tif (builder.bcc) {\n\t\tconst bccArray = Array.isArray(builder.bcc) ? builder.bcc : [builder.bcc];\n\t\tlines.push(\"Bcc: \" + bccArray.map(formatEmailAddress).join(\", \"));\n\t}\n\n\tlines.push(\"Subject: \" + builder.subject);\n\n\treturn lines.join(\"\\n\");\n}\n\n/**\n * Appends path segments to a base path using the separator already implied by\n * the base path string. This trims trailing `/` and `\\` from the base before\n * joining, but does not otherwise normalize the full path.\n */\nfunction joinPath(base: string, ...segments: string[]): string {\n\tconst separator = base.includes(\"\\\\\") ? \"\\\\\" : \"/\";\n\treturn [base.replace(/[\\\\/]+$/, \"\"), ...segments].join(separator);\n}\n\ninterface SendEmailEnv {\n\tMINIFLARE_EMAIL_DISK: Fetcher;\n\temail_directory: string;\n\tdestination_address: string | undefined;\n\tallowed_destination_addresses: string[] | undefined;\n\tallowed_sender_addresses: string[] | undefined;\n}\n\nexport class SendEmailBinding extends WorkerEntrypoint<SendEmailEnv> {\n\t/**\n\t * Logs a message via the runtime console.\n\t */\n\tprivate log(message: string): void {\n\t\tconsole.log(message);\n\t}\n\t/**\n\t * Stores content to a temporary file via the disk service.\n\t */\n\tprivate async storeTempFile(\n\t\tcontent: string | ArrayBuffer | ArrayBufferView,\n\t\textension: string,\n\t\tprefix: string\n\t): Promise<string> {\n\t\tlet body: string | Uint8Array;\n\t\tif (typeof content === \"string\") {\n\t\t\tbody = content;\n\t\t} else if (content instanceof ArrayBuffer) {\n\t\t\tbody = new Uint8Array(content);\n\t\t} else {\n\t\t\t// ArrayBufferView\n\t\t\tbody = new Uint8Array(\n\t\t\t\tcontent.buffer,\n\t\t\t\tcontent.byteOffset,\n\t\t\t\tcontent.byteLength\n\t\t\t);\n\t\t}\n\n\t\tconst fileName = `${crypto.randomUUID()}.${extension}`;\n\t\tconst url = new URL(`${prefix}/${fileName}`, \"http://placeholder/\");\n\t\tawait this.env.MINIFLARE_EMAIL_DISK.fetch(url, {\n\t\t\tmethod: \"PUT\",\n\t\t\tbody,\n\t\t});\n\n\t\treturn joinPath(this.env.email_directory, prefix, fileName);\n\t}\n\n\tprivate checkDestinationAllowed(to: string) {\n\t\tif (\n\t\t\tthis.env.destination_address !== undefined &&\n\t\t\tto !== this.env.destination_address\n\t\t) {\n\t\t\tthrow new Error(`email to ${to} not allowed`);\n\t\t}\n\n\t\tif (\n\t\t\tthis.env.allowed_destination_addresses !== undefined &&\n\t\t\t!this.env.allowed_destination_addresses.includes(to)\n\t\t) {\n\t\t\tthrow new Error(`email to ${to} not allowed`);\n\t\t}\n\t}\n\tprivate checkSenderAllowed(from: string) {\n\t\tif (\n\t\t\tthis.env.allowed_sender_addresses !== undefined &&\n\t\t\t!this.env.allowed_sender_addresses.includes(from)\n\t\t) {\n\t\t\tthrow new Error(`email from ${from} not allowed`);\n\t\t}\n\t}\n\n\t/**\n\t * Type guard to check if argument is an EmailMessage (has RAW_EMAIL symbol)\n\t */\n\tprivate isEmailMessage(\n\t\targ: EmailMessage | MessageBuilder\n\t): arg is EmailMessage {\n\t\treturn RAW_EMAIL in arg;\n\t}\n\n\t/**\n\t * Validates recipients against binding configuration\n\t */\n\tprivate validateRecipients(recipients: string | string[]): void {\n\t\tconst recipientArray = Array.isArray(recipients)\n\t\t\t? recipients\n\t\t\t: [recipients];\n\t\tfor (const recipient of recipientArray) {\n\t\t\tthis.checkDestinationAllowed(recipient);\n\t\t}\n\t}\n\n\t/**\n\t * Validates MessageBuilder against binding configuration\n\t */\n\tprivate validateMessageBuilder(builder: MessageBuilder): void {\n\t\t// Check sender is allowed\n\t\tconst fromEmail = extractEmailAddress(builder.from);\n\t\tthis.checkSenderAllowed(fromEmail);\n\n\t\t// Check \"to\" recipients are allowed (same as EmailMessage - only validate \"to\")\n\t\t// Extract email addresses from potential EmailAddress objects\n\t\tconst toArray = Array.isArray(builder.to) ? builder.to : [builder.to];\n\t\tconst toEmails = toArray.map((addr) => extractEmailAddress(addr));\n\t\tthis.validateRecipients(toEmails);\n\t}\n\n\tasync send(\n\t\temailMessageOrBuilder: EmailMessage | MessageBuilder\n\t): Promise<EmailSendResult> {\n\t\t// Check if this is an EmailMessage (has RAW_EMAIL symbol) or MessageBuilder\n\t\tif (this.isEmailMessage(emailMessageOrBuilder)) {\n\t\t\t// Original EmailMessage API - validate and parse MIME\n\t\t\tconst emailMessage = emailMessageOrBuilder;\n\t\t\tthis.checkSenderAllowed(emailMessage.from);\n\t\t\tthis.validateRecipients(emailMessage.to);\n\n\t\t\tconst rawEmail: ReadableStream<Uint8Array> = emailMessage[RAW_EMAIL];\n\t\t\tconst rawEmailBuffer = new Uint8Array(\n\t\t\t\tawait new Response(rawEmail).arrayBuffer()\n\t\t\t);\n\n\t\t\tlet parsedEmail: Email;\n\n\t\t\ttry {\n\t\t\t\tparsedEmail = await PostalMime.parse(rawEmailBuffer);\n\t\t\t} catch (e) {\n\t\t\t\tconst error = e as Error;\n\t\t\t\tthrow new Error(`could not parse email: ${error.message}`);\n\t\t\t}\n\n\t\t\tif (parsedEmail.messageId === undefined) {\n\t\t\t\tthrow new Error(\"invalid message-id\");\n\t\t\t}\n\n\t\t\tlet emailHeaders: Headers;\n\t\t\ttry {\n\t\t\t\temailHeaders = new Headers(\n\t\t\t\t\tparsedEmail.headers.map((header) => [header.key, header.value])\n\t\t\t\t);\n\t\t\t} catch (e) {\n\t\t\t\tconst error = e as Error;\n\t\t\t\tthrow new Error(`could not parse email: ${error.message}`);\n\t\t\t}\n\n\t\t\tif (emailMessage.from !== parsedEmail.from.address) {\n\t\t\t\tthrow new Error(\"From: header does not match mail from\");\n\t\t\t}\n\n\t\t\tif (emailHeaders.get(\"received\") !== null) {\n\t\t\t\tthrow new Error(\"invalid headers set\");\n\t\t\t}\n\n\t\t\tconst file = await this.storeTempFile(rawEmailBuffer, \"eml\", \"email\");\n\n\t\t\tthis.log(\n\t\t\t\t`${blue(\"send_email binding called with the following message:\")}\\n  ${file}`\n\t\t\t);\n\n\t\t\treturn { messageId: synthesizeMessageId(emailMessage.from) };\n\t\t} else {\n\t\t\t// New MessageBuilder API - just validate and log\n\t\t\tconst builder = emailMessageOrBuilder;\n\n\t\t\t// Validate the message builder\n\t\t\tthis.validateMessageBuilder(builder);\n\n\t\t\t// Store text, HTML content, and attachments to files for easy viewing\n\t\t\tconst files: string[] = [];\n\n\t\t\tif (builder.text) {\n\t\t\t\tconst filePath = await this.storeTempFile(\n\t\t\t\t\tbuilder.text,\n\t\t\t\t\t\"txt\",\n\t\t\t\t\t\"email-text\"\n\t\t\t\t);\n\t\t\t\tfiles.push(`Text: ${filePath}`);\n\t\t\t}\n\n\t\t\tif (builder.html) {\n\t\t\t\tconst filePath = await this.storeTempFile(\n\t\t\t\t\tbuilder.html,\n\t\t\t\t\t\"html\",\n\t\t\t\t\t\"email-html\"\n\t\t\t\t);\n\t\t\t\tfiles.push(`HTML: ${filePath}`);\n\t\t\t}\n\n\t\t\t// Store attachments\n\t\t\tif (builder.attachments) {\n\t\t\t\tfor (const attachment of builder.attachments) {\n\t\t\t\t\t// Extract file extension from filename or use generic extension\n\t\t\t\t\tconst extMatch = attachment.filename.match(/\\.([^.]+)$/);\n\t\t\t\t\tconst extension = extMatch ? extMatch[1] : \"bin\";\n\n\t\t\t\t\tconst filePath = await this.storeTempFile(\n\t\t\t\t\t\tattachment.content,\n\t\t\t\t\t\textension,\n\t\t\t\t\t\t\"email-attachment\"\n\t\t\t\t\t);\n\t\t\t\t\tfiles.push(\n\t\t\t\t\t\t`Attachment (${attachment.disposition}): ${attachment.filename} -> ${filePath}`\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Format and log the message details with file paths\n\t\t\tconst formatted = formatMessageBuilder(builder);\n\t\t\tconst fileInfo = files.length > 0 ? `\\n\\n${files.join(\"\\n\")}` : \"\";\n\t\t\tthis.log(\n\t\t\t\t`${blue(\"send_email binding called with MessageBuilder:\")}\\n${formatted}${fileInfo}`\n\t\t\t);\n\n\t\t\treturn {\n\t\t\t\tmessageId: synthesizeMessageId(extractEmailAddress(builder.from)),\n\t\t\t};\n\t\t}\n\t}\n}\n", "let FORCE_COLOR, NODE_DISABLE_COLORS, NO_COLOR, TERM, isTTY=true;\nif (typeof process !== 'undefined') {\n\t({ FORCE_COLOR, NODE_DISABLE_COLORS, NO_COLOR, TERM } = process.env || {});\n\tisTTY = process.stdout && process.stdout.isTTY;\n}\n\nexport const $ = {\n\tenabled: !NODE_DISABLE_COLORS && NO_COLOR == null && TERM !== 'dumb' && (\n\t\tFORCE_COLOR != null && FORCE_COLOR !== '0' || isTTY\n\t)\n}\n\nfunction init(x, y) {\n\tlet rgx = new RegExp(`\\\\x1b\\\\[${y}m`, 'g');\n\tlet open = `\\x1b[${x}m`, close = `\\x1b[${y}m`;\n\n\treturn function (txt) {\n\t\tif (!$.enabled || txt == null) return txt;\n\t\treturn open + (!!~(''+txt).indexOf(close) ? txt.replace(rgx, close + open) : txt) + close;\n\t};\n}\n\n// modifiers\nexport const reset = init(0, 0);\nexport const bold = init(1, 22);\nexport const dim = init(2, 22);\nexport const italic = init(3, 23);\nexport const underline = init(4, 24);\nexport const inverse = init(7, 27);\nexport const hidden = init(8, 28);\nexport const strikethrough = init(9, 29);\n\n// colors\nexport const black = init(30, 39);\nexport const red = init(31, 39);\nexport const green = init(32, 39);\nexport const yellow = init(33, 39);\nexport const blue = init(34, 39);\nexport const magenta = init(35, 39);\nexport const cyan = init(36, 39);\nexport const white = init(37, 39);\nexport const gray = init(90, 39);\nexport const grey = init(90, 39);\n\n// background colors\nexport const bgBlack = init(40, 49);\nexport const bgRed = init(41, 49);\nexport const bgGreen = init(42, 49);\nexport const bgYellow = init(43, 49);\nexport const bgBlue = init(44, 49);\nexport const bgMagenta = init(45, 49);\nexport const bgCyan = init(46, 49);\nexport const bgWhite = init(47, 49);\n", "export const textEncoder = new TextEncoder();\n\nconst base64Chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\n// Use a lookup table to find the index.\nconst base64Lookup = new Uint8Array(256);\nfor (var i = 0; i < base64Chars.length; i++) {\n    base64Lookup[base64Chars.charCodeAt(i)] = i;\n}\n\nexport function decodeBase64(base64) {\n    let bufferLength = Math.ceil(base64.length / 4) * 3;\n    const len = base64.length;\n\n    let p = 0;\n\n    if (base64.length % 4 === 3) {\n        bufferLength--;\n    } else if (base64.length % 4 === 2) {\n        bufferLength -= 2;\n    } else if (base64[base64.length - 1] === '=') {\n        bufferLength--;\n        if (base64[base64.length - 2] === '=') {\n            bufferLength--;\n        }\n    }\n\n    const arrayBuffer = new ArrayBuffer(bufferLength);\n    const bytes = new Uint8Array(arrayBuffer);\n\n    for (let i = 0; i < len; i += 4) {\n        let encoded1 = base64Lookup[base64.charCodeAt(i)];\n        let encoded2 = base64Lookup[base64.charCodeAt(i + 1)];\n        let encoded3 = base64Lookup[base64.charCodeAt(i + 2)];\n        let encoded4 = base64Lookup[base64.charCodeAt(i + 3)];\n\n        bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\n        bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n        bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n    }\n\n    return arrayBuffer;\n}\n\nexport function getDecoder(charset) {\n    charset = charset || 'utf8';\n    return new TextDecoder(charset);\n}\n\n/**\n * Converts a Blob into an ArrayBuffer\n * @param {Blob} blob Blob to convert\n * @returns {ArrayBuffer} Converted value\n */\nexport async function blobToArrayBuffer(blob) {\n    if ('arrayBuffer' in blob) {\n        return await blob.arrayBuffer();\n    }\n\n    const fr = new FileReader();\n\n    return new Promise((resolve, reject) => {\n        fr.onload = function (e) {\n            resolve(e.target.result);\n        };\n\n        fr.onerror = function (e) {\n            reject(fr.error);\n        };\n\n        fr.readAsArrayBuffer(blob);\n    });\n}\n\nexport function getHex(c) {\n    if ((c >= 0x30 /* 0 */ && c <= 0x39) /* 9 */ || (c >= 0x61 /* a */ && c <= 0x66) /* f */ || (c >= 0x41 /* A */ && c <= 0x46) /* F */) {\n        return String.fromCharCode(c);\n    }\n    return false;\n}\n\n/**\n * Decode a complete mime word encoded string\n *\n * @param {String} str Mime word encoded string\n * @return {String} Decoded unicode string\n */\nexport function decodeWord(charset, encoding, str) {\n    // RFC2231 added language tag to the encoding\n    // see: https://tools.ietf.org/html/rfc2231#section-5\n    // this implementation silently ignores this tag\n    let splitPos = charset.indexOf('*');\n    if (splitPos >= 0) {\n        charset = charset.substr(0, splitPos);\n    }\n\n    encoding = encoding.toUpperCase();\n\n    let byteStr;\n\n    if (encoding === 'Q') {\n        str = str\n            // remove spaces between = and hex char, this might indicate invalidly applied line splitting\n            .replace(/=\\s+([0-9a-fA-F])/g, '=$1')\n            // convert all underscores to spaces\n            .replace(/[_\\s]/g, ' ');\n\n        let buf = textEncoder.encode(str);\n        let encodedBytes = [];\n        for (let i = 0, len = buf.length; i < len; i++) {\n            let c = buf[i];\n            if (i <= len - 2 && c === 0x3d /* = */) {\n                let c1 = getHex(buf[i + 1]);\n                let c2 = getHex(buf[i + 2]);\n                if (c1 && c2) {\n                    let c = parseInt(c1 + c2, 16);\n                    encodedBytes.push(c);\n                    i += 2;\n                    continue;\n                }\n            }\n            encodedBytes.push(c);\n        }\n        byteStr = new ArrayBuffer(encodedBytes.length);\n        let dataView = new DataView(byteStr);\n        for (let i = 0, len = encodedBytes.length; i < len; i++) {\n            dataView.setUint8(i, encodedBytes[i]);\n        }\n    } else if (encoding === 'B') {\n        byteStr = decodeBase64(str.replace(/[^a-zA-Z0-9\\+\\/=]+/g, ''));\n    } else {\n        // keep as is, convert ArrayBuffer to unicode string, assume utf8\n        byteStr = textEncoder.encode(str);\n    }\n\n    return getDecoder(charset).decode(byteStr);\n}\n\nexport function decodeWords(str) {\n    let joinString = true;\n    let done = false;\n\n    while (!done) {\n        let result = (str || '')\n            .toString()\n            // find base64 words that can be joined\n            .replace(/(=\\?([^?]+)\\?[Bb]\\?([^?]*)\\?=)\\s*(?==\\?([^?]+)\\?[Bb]\\?[^?]*\\?=)/g, (match, left, chLeft, encodedLeftStr, chRight) => {\n                if (!joinString) {\n                    return match;\n                }\n                // only mark b64 chunks to be joined if charsets match and left side does not end with =\n                if (chLeft === chRight && encodedLeftStr.length % 4 === 0 && !/=$/.test(encodedLeftStr)) {\n                    // set a joiner marker\n                    return left + '__\\x00JOIN\\x00__';\n                }\n\n                return match;\n            })\n            // find QP words that can be joined\n            .replace(/(=\\?([^?]+)\\?[Qq]\\?[^?]*\\?=)\\s*(?==\\?([^?]+)\\?[Qq]\\?[^?]*\\?=)/g, (match, left, chLeft, chRight) => {\n                if (!joinString) {\n                    return match;\n                }\n                // only mark QP chunks to be joined if charsets match\n                if (chLeft === chRight) {\n                    // set a joiner marker\n                    return left + '__\\x00JOIN\\x00__';\n                }\n                return match;\n            })\n            // join base64 encoded words\n            .replace(/(\\?=)?__\\x00JOIN\\x00__(=\\?([^?]+)\\?[QqBb]\\?)?/g, '')\n            // remove spaces between mime encoded words\n            .replace(/(=\\?[^?]+\\?[QqBb]\\?[^?]*\\?=)\\s+(?==\\?[^?]+\\?[QqBb]\\?[^?]*\\?=)/g, '$1')\n            // decode words\n            .replace(/=\\?([\\w_\\-*]+)\\?([QqBb])\\?([^?]*)\\?=/g, (m, charset, encoding, text) => decodeWord(charset, encoding, text));\n\n        if (joinString && result.indexOf('\\ufffd') >= 0) {\n            // text contains \\ufffd (EF BF BD), so unicode conversion failed, retry without joining strings\n            joinString = false;\n        } else {\n            return result;\n        }\n    }\n}\n\nexport function decodeURIComponentWithCharset(encodedStr, charset) {\n    charset = charset || 'utf-8';\n\n    let encodedBytes = [];\n    for (let i = 0; i < encodedStr.length; i++) {\n        let c = encodedStr.charAt(i);\n        if (c === '%' && /^[a-f0-9]{2}/i.test(encodedStr.substr(i + 1, 2))) {\n            // encoded sequence\n            let byte = encodedStr.substr(i + 1, 2);\n            i += 2;\n            encodedBytes.push(parseInt(byte, 16));\n        } else if (c.charCodeAt(0) > 126) {\n            c = textEncoder.encode(c);\n            for (let j = 0; j < c.length; j++) {\n                encodedBytes.push(c[j]);\n            }\n        } else {\n            // \"normal\" char\n            encodedBytes.push(c.charCodeAt(0));\n        }\n    }\n\n    const byteStr = new ArrayBuffer(encodedBytes.length);\n    const dataView = new DataView(byteStr);\n    for (let i = 0, len = encodedBytes.length; i < len; i++) {\n        dataView.setUint8(i, encodedBytes[i]);\n    }\n\n    return getDecoder(charset).decode(byteStr);\n}\n\nexport function decodeParameterValueContinuations(header) {\n    // handle parameter value continuations\n    // https://tools.ietf.org/html/rfc2231#section-3\n\n    // preprocess values\n    let paramKeys = new Map();\n\n    Object.keys(header.params).forEach(key => {\n        let match = key.match(/\\*((\\d+)\\*?)?$/);\n        if (!match) {\n            // nothing to do here, does not seem like a continuation param\n            return;\n        }\n\n        let actualKey = key.substr(0, match.index).toLowerCase();\n        let nr = Number(match[2]) || 0;\n\n        let paramVal;\n        if (!paramKeys.has(actualKey)) {\n            paramVal = {\n                charset: false,\n                values: []\n            };\n            paramKeys.set(actualKey, paramVal);\n        } else {\n            paramVal = paramKeys.get(actualKey);\n        }\n\n        let value = header.params[key];\n        if (nr === 0 && match[0].charAt(match[0].length - 1) === '*' && (match = value.match(/^([^']*)'[^']*'(.*)$/))) {\n            paramVal.charset = match[1] || 'utf-8';\n            value = match[2];\n        }\n\n        paramVal.values.push({ nr, value });\n\n        // remove the old reference\n        delete header.params[key];\n    });\n\n    paramKeys.forEach((paramVal, key) => {\n        header.params[key] = decodeURIComponentWithCharset(\n            paramVal.values\n                .sort((a, b) => a.nr - b.nr)\n                .map(a => a.value)\n                .join(''),\n            paramVal.charset\n        );\n    });\n}\n", "import { blobToArrayBuffer } from './decode-strings.js';\n\nexport default class PassThroughDecoder {\n    constructor() {\n        this.chunks = [];\n    }\n\n    update(line) {\n        this.chunks.push(line);\n        this.chunks.push('\\n');\n    }\n\n    finalize() {\n        // convert an array of arraybuffers into a blob and then back into a single arraybuffer\n        return blobToArrayBuffer(new Blob(this.chunks, { type: 'application/octet-stream' }));\n    }\n}\n", "import { decodeBase64, blobToArrayBuffer } from './decode-strings.js';\n\nexport default class Base64Decoder {\n    constructor(opts) {\n        opts = opts || {};\n\n        this.decoder = opts.decoder || new TextDecoder();\n\n        this.maxChunkSize = 100 * 1024;\n\n        this.chunks = [];\n\n        this.remainder = '';\n    }\n\n    update(buffer) {\n        let str = this.decoder.decode(buffer);\n\n        if (/[^a-zA-Z0-9+\\/]/.test(str)) {\n            str = str.replace(/[^a-zA-Z0-9+\\/]+/g, '');\n        }\n\n        this.remainder += str;\n\n        if (this.remainder.length >= this.maxChunkSize) {\n            let allowedBytes = Math.floor(this.remainder.length / 4) * 4;\n            let base64Str;\n\n            if (allowedBytes === this.remainder.length) {\n                base64Str = this.remainder;\n                this.remainder = '';\n            } else {\n                base64Str = this.remainder.substr(0, allowedBytes);\n                this.remainder = this.remainder.substr(allowedBytes);\n            }\n\n            if (base64Str.length) {\n                this.chunks.push(decodeBase64(base64Str));\n            }\n        }\n    }\n\n    finalize() {\n        if (this.remainder && !/^=+$/.test(this.remainder)) {\n            this.chunks.push(decodeBase64(this.remainder));\n        }\n\n        return blobToArrayBuffer(new Blob(this.chunks, { type: 'application/octet-stream' }));\n    }\n}\n", "import { blobToArrayBuffer } from './decode-strings.js';\n\nexport default class QPDecoder {\n    constructor(opts) {\n        opts = opts || {};\n\n        this.decoder = opts.decoder || new TextDecoder();\n\n        this.maxChunkSize = 100 * 1024;\n\n        this.remainder = '';\n\n        this.chunks = [];\n    }\n\n    decodeQPBytes(encodedBytes) {\n        let buf = new ArrayBuffer(encodedBytes.length);\n        let dataView = new DataView(buf);\n        for (let i = 0, len = encodedBytes.length; i < len; i++) {\n            dataView.setUint8(i, parseInt(encodedBytes[i], 16));\n        }\n        return buf;\n    }\n\n    decodeChunks(str) {\n        // unwrap newlines\n        str = str.replace(/=\\r?\\n/g, '');\n\n        let list = str.split(/(?==)/);\n        let encodedBytes = [];\n        for (let part of list) {\n            if (part.charAt(0) !== '=') {\n                if (encodedBytes.length) {\n                    this.chunks.push(this.decodeQPBytes(encodedBytes));\n                    encodedBytes = [];\n                }\n                this.chunks.push(part);\n                continue;\n            }\n\n            if (part.length === 3) {\n                encodedBytes.push(part.substr(1));\n                continue;\n            }\n\n            if (part.length > 3) {\n                encodedBytes.push(part.substr(1, 2));\n                this.chunks.push(this.decodeQPBytes(encodedBytes));\n                encodedBytes = [];\n\n                part = part.substr(3);\n                this.chunks.push(part);\n            }\n        }\n        if (encodedBytes.length) {\n            this.chunks.push(this.decodeQPBytes(encodedBytes));\n            encodedBytes = [];\n        }\n    }\n\n    update(buffer) {\n        // expect full lines, so add line terminator as well\n        let str = this.decoder.decode(buffer) + '\\n';\n\n        str = this.remainder + str;\n\n        if (str.length < this.maxChunkSize) {\n            this.remainder = str;\n            return;\n        }\n\n        this.remainder = '';\n\n        let partialEnding = str.match(/=[a-fA-F0-9]?$/);\n        if (partialEnding) {\n            if (partialEnding.index === 0) {\n                this.remainder = str;\n                return;\n            }\n            this.remainder = str.substr(partialEnding.index);\n            str = str.substr(0, partialEnding.index);\n        }\n\n        this.decodeChunks(str);\n    }\n\n    finalize() {\n        if (this.remainder.length) {\n            this.decodeChunks(this.remainder);\n            this.remainder = '';\n        }\n\n        // convert an array of arraybuffers into a blob and then back into a single arraybuffer\n        return blobToArrayBuffer(new Blob(this.chunks, { type: 'application/octet-stream' }));\n    }\n}\n", "import { getDecoder, decodeParameterValueContinuations, textEncoder } from './decode-strings.js';\nimport PassThroughDecoder from './pass-through-decoder.js';\nimport Base64Decoder from './base64-decoder.js';\nimport QPDecoder from './qp-decoder.js';\n\nexport default class MimeNode {\n    constructor(opts) {\n        opts = opts || {};\n\n        this.postalMime = opts.postalMime;\n\n        this.root = !!opts.parentNode;\n        this.childNodes = [];\n        if (opts.parentNode) {\n            opts.parentNode.childNodes.push(this);\n        }\n\n        this.state = 'header';\n\n        this.headerLines = [];\n\n        this.contentType = {\n            value: 'text/plain',\n            default: true\n        };\n\n        this.contentTransferEncoding = {\n            value: '8bit'\n        };\n\n        this.contentDisposition = {\n            value: ''\n        };\n\n        this.headers = [];\n\n        this.contentDecoder = false;\n    }\n\n    setupContentDecoder(transferEncoding) {\n        if (/base64/i.test(transferEncoding)) {\n            this.contentDecoder = new Base64Decoder();\n        } else if (/quoted-printable/i.test(transferEncoding)) {\n            this.contentDecoder = new QPDecoder({ decoder: getDecoder(this.contentType.parsed.params.charset) });\n        } else {\n            this.contentDecoder = new PassThroughDecoder();\n        }\n    }\n\n    async finalize() {\n        if (this.state === 'finished') {\n            return;\n        }\n\n        if (this.state === 'header') {\n            this.processHeaders();\n        }\n\n        // remove self from boundary listing\n        let boundaries = this.postalMime.boundaries;\n        for (let i = boundaries.length - 1; i >= 0; i--) {\n            let boundary = boundaries[i];\n            if (boundary.node === this) {\n                boundaries.splice(i, 1);\n                break;\n            }\n        }\n\n        await this.finalizeChildNodes();\n\n        this.content = this.contentDecoder ? await this.contentDecoder.finalize() : null;\n\n        this.state = 'finished';\n    }\n\n    async finalizeChildNodes() {\n        for (let childNode of this.childNodes) {\n            await childNode.finalize();\n        }\n    }\n\n    parseStructuredHeader(str) {\n        let response = {\n            value: false,\n            params: {}\n        };\n\n        let key = false;\n        let value = '';\n        let stage = 'value';\n\n        let quote = false;\n        let escaped = false;\n        let chr;\n\n        for (let i = 0, len = str.length; i < len; i++) {\n            chr = str.charAt(i);\n            switch (stage) {\n                case 'key':\n                    if (chr === '=') {\n                        key = value.trim().toLowerCase();\n                        stage = 'value';\n                        value = '';\n                        break;\n                    }\n                    value += chr;\n                    break;\n                case 'value':\n                    if (escaped) {\n                        value += chr;\n                    } else if (chr === '\\\\') {\n                        escaped = true;\n                        continue;\n                    } else if (quote && chr === quote) {\n                        quote = false;\n                    } else if (!quote && chr === '\"') {\n                        quote = chr;\n                    } else if (!quote && chr === ';') {\n                        if (key === false) {\n                            response.value = value.trim();\n                        } else {\n                            response.params[key] = value.trim();\n                        }\n                        stage = 'key';\n                        value = '';\n                    } else {\n                        value += chr;\n                    }\n                    escaped = false;\n                    break;\n            }\n        }\n\n        // finalize remainder\n        value = value.trim();\n        if (stage === 'value') {\n            if (key === false) {\n                // default value\n                response.value = value;\n            } else {\n                // subkey value\n                response.params[key] = value;\n            }\n        } else if (value) {\n            // treat as key without value, see emptykey:\n            // Header-Key: somevalue; key=value; emptykey\n            response.params[value.toLowerCase()] = '';\n        }\n\n        if (response.value) {\n            response.value = response.value.toLowerCase();\n        }\n\n        // convert Parameter Value Continuations into single strings\n        decodeParameterValueContinuations(response);\n\n        return response;\n    }\n\n    decodeFlowedText(str, delSp) {\n        return (\n            str\n                .split(/\\r?\\n/)\n                // remove soft linebreaks\n                // soft linebreaks are added after space symbols\n                .reduce((previousValue, currentValue) => {\n                    if (/ $/.test(previousValue) && !/(^|\\n)-- $/.test(previousValue)) {\n                        if (delSp) {\n                            // delsp adds space to text to be able to fold it\n                            // these spaces can be removed once the text is unfolded\n                            return previousValue.slice(0, -1) + currentValue;\n                        } else {\n                            return previousValue + currentValue;\n                        }\n                    } else {\n                        return previousValue + '\\n' + currentValue;\n                    }\n                })\n                // remove whitespace stuffing\n                // http://tools.ietf.org/html/rfc3676#section-4.4\n                .replace(/^ /gm, '')\n        );\n    }\n\n    getTextContent() {\n        if (!this.content) {\n            return '';\n        }\n\n        let str = getDecoder(this.contentType.parsed.params.charset).decode(this.content);\n\n        if (/^flowed$/i.test(this.contentType.parsed.params.format)) {\n            str = this.decodeFlowedText(str, /^yes$/i.test(this.contentType.parsed.params.delsp));\n        }\n\n        return str;\n    }\n\n    processHeaders() {\n        for (let i = this.headerLines.length - 1; i >= 0; i--) {\n            let line = this.headerLines[i];\n            if (i && /^\\s/.test(line)) {\n                this.headerLines[i - 1] += '\\n' + line;\n                this.headerLines.splice(i, 1);\n            } else {\n                // remove folding and extra WS\n                line = line.replace(/\\s+/g, ' ');\n                let sep = line.indexOf(':');\n                let key = sep < 0 ? line.trim() : line.substr(0, sep).trim();\n                let value = sep < 0 ? '' : line.substr(sep + 1).trim();\n                this.headers.push({ key: key.toLowerCase(), originalKey: key, value });\n\n                switch (key.toLowerCase()) {\n                    case 'content-type':\n                        if (this.contentType.default) {\n                            this.contentType = { value, parsed: {} };\n                        }\n                        break;\n                    case 'content-transfer-encoding':\n                        this.contentTransferEncoding = { value, parsed: {} };\n                        break;\n                    case 'content-disposition':\n                        this.contentDisposition = { value, parsed: {} };\n                        break;\n                    case 'content-id':\n                        this.contentId = value;\n                        break;\n                    case 'content-description':\n                        this.contentDescription = value;\n                        break;\n                }\n            }\n        }\n\n        this.contentType.parsed = this.parseStructuredHeader(this.contentType.value);\n        this.contentType.multipart = /^multipart\\//i.test(this.contentType.parsed.value)\n            ? this.contentType.parsed.value.substr(this.contentType.parsed.value.indexOf('/') + 1)\n            : false;\n\n        if (this.contentType.multipart && this.contentType.parsed.params.boundary) {\n            // add self to boundary terminator listing\n            this.postalMime.boundaries.push({\n                value: textEncoder.encode(this.contentType.parsed.params.boundary),\n                node: this\n            });\n        }\n\n        this.contentDisposition.parsed = this.parseStructuredHeader(this.contentDisposition.value);\n\n        this.contentTransferEncoding.encoding = this.contentTransferEncoding.value\n            .toLowerCase()\n            .split(/[^\\w-]/)\n            .shift();\n\n        this.setupContentDecoder(this.contentTransferEncoding.encoding);\n    }\n\n    feed(line) {\n        switch (this.state) {\n            case 'header':\n                if (!line.length) {\n                    this.state = 'body';\n                    return this.processHeaders();\n                }\n                this.headerLines.push(getDecoder().decode(line));\n                break;\n            case 'body': {\n                // add line to body\n                this.contentDecoder.update(line);\n            }\n        }\n    }\n}\n", "// Entity map from https://html.spec.whatwg.org/multipage/named-characters.html#named-character-references\nexport const htmlEntities = {\n    '&AElig': '\\u00C6',\n    '&AElig;': '\\u00C6',\n    '&AMP': '\\u0026',\n    '&AMP;': '\\u0026',\n    '&Aacute': '\\u00C1',\n    '&Aacute;': '\\u00C1',\n    '&Abreve;': '\\u0102',\n    '&Acirc': '\\u00C2',\n    '&Acirc;': '\\u00C2',\n    '&Acy;': '\\u0410',\n    '&Afr;': '\\uD835\\uDD04',\n    '&Agrave': '\\u00C0',\n    '&Agrave;': '\\u00C0',\n    '&Alpha;': '\\u0391',\n    '&Amacr;': '\\u0100',\n    '&And;': '\\u2A53',\n    '&Aogon;': '\\u0104',\n    '&Aopf;': '\\uD835\\uDD38',\n    '&ApplyFunction;': '\\u2061',\n    '&Aring': '\\u00C5',\n    '&Aring;': '\\u00C5',\n    '&Ascr;': '\\uD835\\uDC9C',\n    '&Assign;': '\\u2254',\n    '&Atilde': '\\u00C3',\n    '&Atilde;': '\\u00C3',\n    '&Auml': '\\u00C4',\n    '&Auml;': '\\u00C4',\n    '&Backslash;': '\\u2216',\n    '&Barv;': '\\u2AE7',\n    '&Barwed;': '\\u2306',\n    '&Bcy;': '\\u0411',\n    '&Because;': '\\u2235',\n    '&Bernoullis;': '\\u212C',\n    '&Beta;': '\\u0392',\n    '&Bfr;': '\\uD835\\uDD05',\n    '&Bopf;': '\\uD835\\uDD39',\n    '&Breve;': '\\u02D8',\n    '&Bscr;': '\\u212C',\n    '&Bumpeq;': '\\u224E',\n    '&CHcy;': '\\u0427',\n    '&COPY': '\\u00A9',\n    '&COPY;': '\\u00A9',\n    '&Cacute;': '\\u0106',\n    '&Cap;': '\\u22D2',\n    '&CapitalDifferentialD;': '\\u2145',\n    '&Cayleys;': '\\u212D',\n    '&Ccaron;': '\\u010C',\n    '&Ccedil': '\\u00C7',\n    '&Ccedil;': '\\u00C7',\n    '&Ccirc;': '\\u0108',\n    '&Cconint;': '\\u2230',\n    '&Cdot;': '\\u010A',\n    '&Cedilla;': '\\u00B8',\n    '&CenterDot;': '\\u00B7',\n    '&Cfr;': '\\u212D',\n    '&Chi;': '\\u03A7',\n    '&CircleDot;': '\\u2299',\n    '&CircleMinus;': '\\u2296',\n    '&CirclePlus;': '\\u2295',\n    '&CircleTimes;': '\\u2297',\n    '&ClockwiseContourIntegral;': '\\u2232',\n    '&CloseCurlyDoubleQuote;': '\\u201D',\n    '&CloseCurlyQuote;': '\\u2019',\n    '&Colon;': '\\u2237',\n    '&Colone;': '\\u2A74',\n    '&Congruent;': '\\u2261',\n    '&Conint;': '\\u222F',\n    '&ContourIntegral;': '\\u222E',\n    '&Copf;': '\\u2102',\n    '&Coproduct;': '\\u2210',\n    '&CounterClockwiseContourIntegral;': '\\u2233',\n    '&Cross;': '\\u2A2F',\n    '&Cscr;': '\\uD835\\uDC9E',\n    '&Cup;': '\\u22D3',\n    '&CupCap;': '\\u224D',\n    '&DD;': '\\u2145',\n    '&DDotrahd;': '\\u2911',\n    '&DJcy;': '\\u0402',\n    '&DScy;': '\\u0405',\n    '&DZcy;': '\\u040F',\n    '&Dagger;': '\\u2021',\n    '&Darr;': '\\u21A1',\n    '&Dashv;': '\\u2AE4',\n    '&Dcaron;': '\\u010E',\n    '&Dcy;': '\\u0414',\n    '&Del;': '\\u2207',\n    '&Delta;': '\\u0394',\n    '&Dfr;': '\\uD835\\uDD07',\n    '&DiacriticalAcute;': '\\u00B4',\n    '&DiacriticalDot;': '\\u02D9',\n    '&DiacriticalDoubleAcute;': '\\u02DD',\n    '&DiacriticalGrave;': '\\u0060',\n    '&DiacriticalTilde;': '\\u02DC',\n    '&Diamond;': '\\u22C4',\n    '&DifferentialD;': '\\u2146',\n    '&Dopf;': '\\uD835\\uDD3B',\n    '&Dot;': '\\u00A8',\n    '&DotDot;': '\\u20DC',\n    '&DotEqual;': '\\u2250',\n    '&DoubleContourIntegral;': '\\u222F',\n    '&DoubleDot;': '\\u00A8',\n    '&DoubleDownArrow;': '\\u21D3',\n    '&DoubleLeftArrow;': '\\u21D0',\n    '&DoubleLeftRightArrow;': '\\u21D4',\n    '&DoubleLeftTee;': '\\u2AE4',\n    '&DoubleLongLeftArrow;': '\\u27F8',\n    '&DoubleLongLeftRightArrow;': '\\u27FA',\n    '&DoubleLongRightArrow;': '\\u27F9',\n    '&DoubleRightArrow;': '\\u21D2',\n    '&DoubleRightTee;': '\\u22A8',\n    '&DoubleUpArrow;': '\\u21D1',\n    '&DoubleUpDownArrow;': '\\u21D5',\n    '&DoubleVerticalBar;': '\\u2225',\n    '&DownArrow;': '\\u2193',\n    '&DownArrowBar;': '\\u2913',\n    '&DownArrowUpArrow;': '\\u21F5',\n    '&DownBreve;': '\\u0311',\n    '&DownLeftRightVector;': '\\u2950',\n    '&DownLeftTeeVector;': '\\u295E',\n    '&DownLeftVector;': '\\u21BD',\n    '&DownLeftVectorBar;': '\\u2956',\n    '&DownRightTeeVector;': '\\u295F',\n    '&DownRightVector;': '\\u21C1',\n    '&DownRightVectorBar;': '\\u2957',\n    '&DownTee;': '\\u22A4',\n    '&DownTeeArrow;': '\\u21A7',\n    '&Downarrow;': '\\u21D3',\n    '&Dscr;': '\\uD835\\uDC9F',\n    '&Dstrok;': '\\u0110',\n    '&ENG;': '\\u014A',\n    '&ETH': '\\u00D0',\n    '&ETH;': '\\u00D0',\n    '&Eacute': '\\u00C9',\n    '&Eacute;': '\\u00C9',\n    '&Ecaron;': '\\u011A',\n    '&Ecirc': '\\u00CA',\n    '&Ecirc;': '\\u00CA',\n    '&Ecy;': '\\u042D',\n    '&Edot;': '\\u0116',\n    '&Efr;': '\\uD835\\uDD08',\n    '&Egrave': '\\u00C8',\n    '&Egrave;': '\\u00C8',\n    '&Element;': '\\u2208',\n    '&Emacr;': '\\u0112',\n    '&EmptySmallSquare;': '\\u25FB',\n    '&EmptyVerySmallSquare;': '\\u25AB',\n    '&Eogon;': '\\u0118',\n    '&Eopf;': '\\uD835\\uDD3C',\n    '&Epsilon;': '\\u0395',\n    '&Equal;': '\\u2A75',\n    '&EqualTilde;': '\\u2242',\n    '&Equilibrium;': '\\u21CC',\n    '&Escr;': '\\u2130',\n    '&Esim;': '\\u2A73',\n    '&Eta;': '\\u0397',\n    '&Euml': '\\u00CB',\n    '&Euml;': '\\u00CB',\n    '&Exists;': '\\u2203',\n    '&ExponentialE;': '\\u2147',\n    '&Fcy;': '\\u0424',\n    '&Ffr;': '\\uD835\\uDD09',\n    '&FilledSmallSquare;': '\\u25FC',\n    '&FilledVerySmallSquare;': '\\u25AA',\n    '&Fopf;': '\\uD835\\uDD3D',\n    '&ForAll;': '\\u2200',\n    '&Fouriertrf;': '\\u2131',\n    '&Fscr;': '\\u2131',\n    '&GJcy;': '\\u0403',\n    '&GT': '\\u003E',\n    '&GT;': '\\u003E',\n    '&Gamma;': '\\u0393',\n    '&Gammad;': '\\u03DC',\n    '&Gbreve;': '\\u011E',\n    '&Gcedil;': '\\u0122',\n    '&Gcirc;': '\\u011C',\n    '&Gcy;': '\\u0413',\n    '&Gdot;': '\\u0120',\n    '&Gfr;': '\\uD835\\uDD0A',\n    '&Gg;': '\\u22D9',\n    '&Gopf;': '\\uD835\\uDD3E',\n    '&GreaterEqual;': '\\u2265',\n    '&GreaterEqualLess;': '\\u22DB',\n    '&GreaterFullEqual;': '\\u2267',\n    '&GreaterGreater;': '\\u2AA2',\n    '&GreaterLess;': '\\u2277',\n    '&GreaterSlantEqual;': '\\u2A7E',\n    '&GreaterTilde;': '\\u2273',\n    '&Gscr;': '\\uD835\\uDCA2',\n    '&Gt;': '\\u226B',\n    '&HARDcy;': '\\u042A',\n    '&Hacek;': '\\u02C7',\n    '&Hat;': '\\u005E',\n    '&Hcirc;': '\\u0124',\n    '&Hfr;': '\\u210C',\n    '&HilbertSpace;': '\\u210B',\n    '&Hopf;': '\\u210D',\n    '&HorizontalLine;': '\\u2500',\n    '&Hscr;': '\\u210B',\n    '&Hstrok;': '\\u0126',\n    '&HumpDownHump;': '\\u224E',\n    '&HumpEqual;': '\\u224F',\n    '&IEcy;': '\\u0415',\n    '&IJlig;': '\\u0132',\n    '&IOcy;': '\\u0401',\n    '&Iacute': '\\u00CD',\n    '&Iacute;': '\\u00CD',\n    '&Icirc': '\\u00CE',\n    '&Icirc;': '\\u00CE',\n    '&Icy;': '\\u0418',\n    '&Idot;': '\\u0130',\n    '&Ifr;': '\\u2111',\n    '&Igrave': '\\u00CC',\n    '&Igrave;': '\\u00CC',\n    '&Im;': '\\u2111',\n    '&Imacr;': '\\u012A',\n    '&ImaginaryI;': '\\u2148',\n    '&Implies;': '\\u21D2',\n    '&Int;': '\\u222C',\n    '&Integral;': '\\u222B',\n    '&Intersection;': '\\u22C2',\n    '&InvisibleComma;': '\\u2063',\n    '&InvisibleTimes;': '\\u2062',\n    '&Iogon;': '\\u012E',\n    '&Iopf;': '\\uD835\\uDD40',\n    '&Iota;': '\\u0399',\n    '&Iscr;': '\\u2110',\n    '&Itilde;': '\\u0128',\n    '&Iukcy;': '\\u0406',\n    '&Iuml': '\\u00CF',\n    '&Iuml;': '\\u00CF',\n    '&Jcirc;': '\\u0134',\n    '&Jcy;': '\\u0419',\n    '&Jfr;': '\\uD835\\uDD0D',\n    '&Jopf;': '\\uD835\\uDD41',\n    '&Jscr;': '\\uD835\\uDCA5',\n    '&Jsercy;': '\\u0408',\n    '&Jukcy;': '\\u0404',\n    '&KHcy;': '\\u0425',\n    '&KJcy;': '\\u040C',\n    '&Kappa;': '\\u039A',\n    '&Kcedil;': '\\u0136',\n    '&Kcy;': '\\u041A',\n    '&Kfr;': '\\uD835\\uDD0E',\n    '&Kopf;': '\\uD835\\uDD42',\n    '&Kscr;': '\\uD835\\uDCA6',\n    '&LJcy;': '\\u0409',\n    '&LT': '\\u003C',\n    '&LT;': '\\u003C',\n    '&Lacute;': '\\u0139',\n    '&Lambda;': '\\u039B',\n    '&Lang;': '\\u27EA',\n    '&Laplacetrf;': '\\u2112',\n    '&Larr;': '\\u219E',\n    '&Lcaron;': '\\u013D',\n    '&Lcedil;': '\\u013B',\n    '&Lcy;': '\\u041B',\n    '&LeftAngleBracket;': '\\u27E8',\n    '&LeftArrow;': '\\u2190',\n    '&LeftArrowBar;': '\\u21E4',\n    '&LeftArrowRightArrow;': '\\u21C6',\n    '&LeftCeiling;': '\\u2308',\n    '&LeftDoubleBracket;': '\\u27E6',\n    '&LeftDownTeeVector;': '\\u2961',\n    '&LeftDownVector;': '\\u21C3',\n    '&LeftDownVectorBar;': '\\u2959',\n    '&LeftFloor;': '\\u230A',\n    '&LeftRightArrow;': '\\u2194',\n    '&LeftRightVector;': '\\u294E',\n    '&LeftTee;': '\\u22A3',\n    '&LeftTeeArrow;': '\\u21A4',\n    '&LeftTeeVector;': '\\u295A',\n    '&LeftTriangle;': '\\u22B2',\n    '&LeftTriangleBar;': '\\u29CF',\n    '&LeftTriangleEqual;': '\\u22B4',\n    '&LeftUpDownVector;': '\\u2951',\n    '&LeftUpTeeVector;': '\\u2960',\n    '&LeftUpVector;': '\\u21BF',\n    '&LeftUpVectorBar;': '\\u2958',\n    '&LeftVector;': '\\u21BC',\n    '&LeftVectorBar;': '\\u2952',\n    '&Leftarrow;': '\\u21D0',\n    '&Leftrightarrow;': '\\u21D4',\n    '&LessEqualGreater;': '\\u22DA',\n    '&LessFullEqual;': '\\u2266',\n    '&LessGreater;': '\\u2276',\n    '&LessLess;': '\\u2AA1',\n    '&LessSlantEqual;': '\\u2A7D',\n    '&LessTilde;': '\\u2272',\n    '&Lfr;': '\\uD835\\uDD0F',\n    '&Ll;': '\\u22D8',\n    '&Lleftarrow;': '\\u21DA',\n    '&Lmidot;': '\\u013F',\n    '&LongLeftArrow;': '\\u27F5',\n    '&LongLeftRightArrow;': '\\u27F7',\n    '&LongRightArrow;': '\\u27F6',\n    '&Longleftarrow;': '\\u27F8',\n    '&Longleftrightarrow;': '\\u27FA',\n    '&Longrightarrow;': '\\u27F9',\n    '&Lopf;': '\\uD835\\uDD43',\n    '&LowerLeftArrow;': '\\u2199',\n    '&LowerRightArrow;': '\\u2198',\n    '&Lscr;': '\\u2112',\n    '&Lsh;': '\\u21B0',\n    '&Lstrok;': '\\u0141',\n    '&Lt;': '\\u226A',\n    '&Map;': '\\u2905',\n    '&Mcy;': '\\u041C',\n    '&MediumSpace;': '\\u205F',\n    '&Mellintrf;': '\\u2133',\n    '&Mfr;': '\\uD835\\uDD10',\n    '&MinusPlus;': '\\u2213',\n    '&Mopf;': '\\uD835\\uDD44',\n    '&Mscr;': '\\u2133',\n    '&Mu;': '\\u039C',\n    '&NJcy;': '\\u040A',\n    '&Nacute;': '\\u0143',\n    '&Ncaron;': '\\u0147',\n    '&Ncedil;': '\\u0145',\n    '&Ncy;': '\\u041D',\n    '&NegativeMediumSpace;': '\\u200B',\n    '&NegativeThickSpace;': '\\u200B',\n    '&NegativeThinSpace;': '\\u200B',\n    '&NegativeVeryThinSpace;': '\\u200B',\n    '&NestedGreaterGreater;': '\\u226B',\n    '&NestedLessLess;': '\\u226A',\n    '&NewLine;': '\\u000A',\n    '&Nfr;': '\\uD835\\uDD11',\n    '&NoBreak;': '\\u2060',\n    '&NonBreakingSpace;': '\\u00A0',\n    '&Nopf;': '\\u2115',\n    '&Not;': '\\u2AEC',\n    '&NotCongruent;': '\\u2262',\n    '&NotCupCap;': '\\u226D',\n    '&NotDoubleVerticalBar;': '\\u2226',\n    '&NotElement;': '\\u2209',\n    '&NotEqual;': '\\u2260',\n    '&NotEqualTilde;': '\\u2242\\u0338',\n    '&NotExists;': '\\u2204',\n    '&NotGreater;': '\\u226F',\n    '&NotGreaterEqual;': '\\u2271',\n    '&NotGreaterFullEqual;': '\\u2267\\u0338',\n    '&NotGreaterGreater;': '\\u226B\\u0338',\n    '&NotGreaterLess;': '\\u2279',\n    '&NotGreaterSlantEqual;': '\\u2A7E\\u0338',\n    '&NotGreaterTilde;': '\\u2275',\n    '&NotHumpDownHump;': '\\u224E\\u0338',\n    '&NotHumpEqual;': '\\u224F\\u0338',\n    '&NotLeftTriangle;': '\\u22EA',\n    '&NotLeftTriangleBar;': '\\u29CF\\u0338',\n    '&NotLeftTriangleEqual;': '\\u22EC',\n    '&NotLess;': '\\u226E',\n    '&NotLessEqual;': '\\u2270',\n    '&NotLessGreater;': '\\u2278',\n    '&NotLessLess;': '\\u226A\\u0338',\n    '&NotLessSlantEqual;': '\\u2A7D\\u0338',\n    '&NotLessTilde;': '\\u2274',\n    '&NotNestedGreaterGreater;': '\\u2AA2\\u0338',\n    '&NotNestedLessLess;': '\\u2AA1\\u0338',\n    '&NotPrecedes;': '\\u2280',\n    '&NotPrecedesEqual;': '\\u2AAF\\u0338',\n    '&NotPrecedesSlantEqual;': '\\u22E0',\n    '&NotReverseElement;': '\\u220C',\n    '&NotRightTriangle;': '\\u22EB',\n    '&NotRightTriangleBar;': '\\u29D0\\u0338',\n    '&NotRightTriangleEqual;': '\\u22ED',\n    '&NotSquareSubset;': '\\u228F\\u0338',\n    '&NotSquareSubsetEqual;': '\\u22E2',\n    '&NotSquareSuperset;': '\\u2290\\u0338',\n    '&NotSquareSupersetEqual;': '\\u22E3',\n    '&NotSubset;': '\\u2282\\u20D2',\n    '&NotSubsetEqual;': '\\u2288',\n    '&NotSucceeds;': '\\u2281',\n    '&NotSucceedsEqual;': '\\u2AB0\\u0338',\n    '&NotSucceedsSlantEqual;': '\\u22E1',\n    '&NotSucceedsTilde;': '\\u227F\\u0338',\n    '&NotSuperset;': '\\u2283\\u20D2',\n    '&NotSupersetEqual;': '\\u2289',\n    '&NotTilde;': '\\u2241',\n    '&NotTildeEqual;': '\\u2244',\n    '&NotTildeFullEqual;': '\\u2247',\n    '&NotTildeTilde;': '\\u2249',\n    '&NotVerticalBar;': '\\u2224',\n    '&Nscr;': '\\uD835\\uDCA9',\n    '&Ntilde': '\\u00D1',\n    '&Ntilde;': '\\u00D1',\n    '&Nu;': '\\u039D',\n    '&OElig;': '\\u0152',\n    '&Oacute': '\\u00D3',\n    '&Oacute;': '\\u00D3',\n    '&Ocirc': '\\u00D4',\n    '&Ocirc;': '\\u00D4',\n    '&Ocy;': '\\u041E',\n    '&Odblac;': '\\u0150',\n    '&Ofr;': '\\uD835\\uDD12',\n    '&Ograve': '\\u00D2',\n    '&Ograve;': '\\u00D2',\n    '&Omacr;': '\\u014C',\n    '&Omega;': '\\u03A9',\n    '&Omicron;': '\\u039F',\n    '&Oopf;': '\\uD835\\uDD46',\n    '&OpenCurlyDoubleQuote;': '\\u201C',\n    '&OpenCurlyQuote;': '\\u2018',\n    '&Or;': '\\u2A54',\n    '&Oscr;': '\\uD835\\uDCAA',\n    '&Oslash': '\\u00D8',\n    '&Oslash;': '\\u00D8',\n    '&Otilde': '\\u00D5',\n    '&Otilde;': '\\u00D5',\n    '&Otimes;': '\\u2A37',\n    '&Ouml': '\\u00D6',\n    '&Ouml;': '\\u00D6',\n    '&OverBar;': '\\u203E',\n    '&OverBrace;': '\\u23DE',\n    '&OverBracket;': '\\u23B4',\n    '&OverParenthesis;': '\\u23DC',\n    '&PartialD;': '\\u2202',\n    '&Pcy;': '\\u041F',\n    '&Pfr;': '\\uD835\\uDD13',\n    '&Phi;': '\\u03A6',\n    '&Pi;': '\\u03A0',\n    '&PlusMinus;': '\\u00B1',\n    '&Poincareplane;': '\\u210C',\n    '&Popf;': '\\u2119',\n    '&Pr;': '\\u2ABB',\n    '&Precedes;': '\\u227A',\n    '&PrecedesEqual;': '\\u2AAF',\n    '&PrecedesSlantEqual;': '\\u227C',\n    '&PrecedesTilde;': '\\u227E',\n    '&Prime;': '\\u2033',\n    '&Product;': '\\u220F',\n    '&Proportion;': '\\u2237',\n    '&Proportional;': '\\u221D',\n    '&Pscr;': '\\uD835\\uDCAB',\n    '&Psi;': '\\u03A8',\n    '&QUOT': '\\u0022',\n    '&QUOT;': '\\u0022',\n    '&Qfr;': '\\uD835\\uDD14',\n    '&Qopf;': '\\u211A',\n    '&Qscr;': '\\uD835\\uDCAC',\n    '&RBarr;': '\\u2910',\n    '&REG': '\\u00AE',\n    '&REG;': '\\u00AE',\n    '&Racute;': '\\u0154',\n    '&Rang;': '\\u27EB',\n    '&Rarr;': '\\u21A0',\n    '&Rarrtl;': '\\u2916',\n    '&Rcaron;': '\\u0158',\n    '&Rcedil;': '\\u0156',\n    '&Rcy;': '\\u0420',\n    '&Re;': '\\u211C',\n    '&ReverseElement;': '\\u220B',\n    '&ReverseEquilibrium;': '\\u21CB',\n    '&ReverseUpEquilibrium;': '\\u296F',\n    '&Rfr;': '\\u211C',\n    '&Rho;': '\\u03A1',\n    '&RightAngleBracket;': '\\u27E9',\n    '&RightArrow;': '\\u2192',\n    '&RightArrowBar;': '\\u21E5',\n    '&RightArrowLeftArrow;': '\\u21C4',\n    '&RightCeiling;': '\\u2309',\n    '&RightDoubleBracket;': '\\u27E7',\n    '&RightDownTeeVector;': '\\u295D',\n    '&RightDownVector;': '\\u21C2',\n    '&RightDownVectorBar;': '\\u2955',\n    '&RightFloor;': '\\u230B',\n    '&RightTee;': '\\u22A2',\n    '&RightTeeArrow;': '\\u21A6',\n    '&RightTeeVector;': '\\u295B',\n    '&RightTriangle;': '\\u22B3',\n    '&RightTriangleBar;': '\\u29D0',\n    '&RightTriangleEqual;': '\\u22B5',\n    '&RightUpDownVector;': '\\u294F',\n    '&RightUpTeeVector;': '\\u295C',\n    '&RightUpVector;': '\\u21BE',\n    '&RightUpVectorBar;': '\\u2954',\n    '&RightVector;': '\\u21C0',\n    '&RightVectorBar;': '\\u2953',\n    '&Rightarrow;': '\\u21D2',\n    '&Ropf;': '\\u211D',\n    '&RoundImplies;': '\\u2970',\n    '&Rrightarrow;': '\\u21DB',\n    '&Rscr;': '\\u211B',\n    '&Rsh;': '\\u21B1',\n    '&RuleDelayed;': '\\u29F4',\n    '&SHCHcy;': '\\u0429',\n    '&SHcy;': '\\u0428',\n    '&SOFTcy;': '\\u042C',\n    '&Sacute;': '\\u015A',\n    '&Sc;': '\\u2ABC',\n    '&Scaron;': '\\u0160',\n    '&Scedil;': '\\u015E',\n    '&Scirc;': '\\u015C',\n    '&Scy;': '\\u0421',\n    '&Sfr;': '\\uD835\\uDD16',\n    '&ShortDownArrow;': '\\u2193',\n    '&ShortLeftArrow;': '\\u2190',\n    '&ShortRightArrow;': '\\u2192',\n    '&ShortUpArrow;': '\\u2191',\n    '&Sigma;': '\\u03A3',\n    '&SmallCircle;': '\\u2218',\n    '&Sopf;': '\\uD835\\uDD4A',\n    '&Sqrt;': '\\u221A',\n    '&Square;': '\\u25A1',\n    '&SquareIntersection;': '\\u2293',\n    '&SquareSubset;': '\\u228F',\n    '&SquareSubsetEqual;': '\\u2291',\n    '&SquareSuperset;': '\\u2290',\n    '&SquareSupersetEqual;': '\\u2292',\n    '&SquareUnion;': '\\u2294',\n    '&Sscr;': '\\uD835\\uDCAE',\n    '&Star;': '\\u22C6',\n    '&Sub;': '\\u22D0',\n    '&Subset;': '\\u22D0',\n    '&SubsetEqual;': '\\u2286',\n    '&Succeeds;': '\\u227B',\n    '&SucceedsEqual;': '\\u2AB0',\n    '&SucceedsSlantEqual;': '\\u227D',\n    '&SucceedsTilde;': '\\u227F',\n    '&SuchThat;': '\\u220B',\n    '&Sum;': '\\u2211',\n    '&Sup;': '\\u22D1',\n    '&Superset;': '\\u2283',\n    '&SupersetEqual;': '\\u2287',\n    '&Supset;': '\\u22D1',\n    '&THORN': '\\u00DE',\n    '&THORN;': '\\u00DE',\n    '&TRADE;': '\\u2122',\n    '&TSHcy;': '\\u040B',\n    '&TScy;': '\\u0426',\n    '&Tab;': '\\u0009',\n    '&Tau;': '\\u03A4',\n    '&Tcaron;': '\\u0164',\n    '&Tcedil;': '\\u0162',\n    '&Tcy;': '\\u0422',\n    '&Tfr;': '\\uD835\\uDD17',\n    '&Therefore;': '\\u2234',\n    '&Theta;': '\\u0398',\n    '&ThickSpace;': '\\u205F\\u200A',\n    '&ThinSpace;': '\\u2009',\n    '&Tilde;': '\\u223C',\n    '&TildeEqual;': '\\u2243',\n    '&TildeFullEqual;': '\\u2245',\n    '&TildeTilde;': '\\u2248',\n    '&Topf;': '\\uD835\\uDD4B',\n    '&TripleDot;': '\\u20DB',\n    '&Tscr;': '\\uD835\\uDCAF',\n    '&Tstrok;': '\\u0166',\n    '&Uacute': '\\u00DA',\n    '&Uacute;': '\\u00DA',\n    '&Uarr;': '\\u219F',\n    '&Uarrocir;': '\\u2949',\n    '&Ubrcy;': '\\u040E',\n    '&Ubreve;': '\\u016C',\n    '&Ucirc': '\\u00DB',\n    '&Ucirc;': '\\u00DB',\n    '&Ucy;': '\\u0423',\n    '&Udblac;': '\\u0170',\n    '&Ufr;': '\\uD835\\uDD18',\n    '&Ugrave': '\\u00D9',\n    '&Ugrave;': '\\u00D9',\n    '&Umacr;': '\\u016A',\n    '&UnderBar;': '\\u005F',\n    '&UnderBrace;': '\\u23DF',\n    '&UnderBracket;': '\\u23B5',\n    '&UnderParenthesis;': '\\u23DD',\n    '&Union;': '\\u22C3',\n    '&UnionPlus;': '\\u228E',\n    '&Uogon;': '\\u0172',\n    '&Uopf;': '\\uD835\\uDD4C',\n    '&UpArrow;': '\\u2191',\n    '&UpArrowBar;': '\\u2912',\n    '&UpArrowDownArrow;': '\\u21C5',\n    '&UpDownArrow;': '\\u2195',\n    '&UpEquilibrium;': '\\u296E',\n    '&UpTee;': '\\u22A5',\n    '&UpTeeArrow;': '\\u21A5',\n    '&Uparrow;': '\\u21D1',\n    '&Updownarrow;': '\\u21D5',\n    '&UpperLeftArrow;': '\\u2196',\n    '&UpperRightArrow;': '\\u2197',\n    '&Upsi;': '\\u03D2',\n    '&Upsilon;': '\\u03A5',\n    '&Uring;': '\\u016E',\n    '&Uscr;': '\\uD835\\uDCB0',\n    '&Utilde;': '\\u0168',\n    '&Uuml': '\\u00DC',\n    '&Uuml;': '\\u00DC',\n    '&VDash;': '\\u22AB',\n    '&Vbar;': '\\u2AEB',\n    '&Vcy;': '\\u0412',\n    '&Vdash;': '\\u22A9',\n    '&Vdashl;': '\\u2AE6',\n    '&Vee;': '\\u22C1',\n    '&Verbar;': '\\u2016',\n    '&Vert;': '\\u2016',\n    '&VerticalBar;': '\\u2223',\n    '&VerticalLine;': '\\u007C',\n    '&VerticalSeparator;': '\\u2758',\n    '&VerticalTilde;': '\\u2240',\n    '&VeryThinSpace;': '\\u200A',\n    '&Vfr;': '\\uD835\\uDD19',\n    '&Vopf;': '\\uD835\\uDD4D',\n    '&Vscr;': '\\uD835\\uDCB1',\n    '&Vvdash;': '\\u22AA',\n    '&Wcirc;': '\\u0174',\n    '&Wedge;': '\\u22C0',\n    '&Wfr;': '\\uD835\\uDD1A',\n    '&Wopf;': '\\uD835\\uDD4E',\n    '&Wscr;': '\\uD835\\uDCB2',\n    '&Xfr;': '\\uD835\\uDD1B',\n    '&Xi;': '\\u039E',\n    '&Xopf;': '\\uD835\\uDD4F',\n    '&Xscr;': '\\uD835\\uDCB3',\n    '&YAcy;': '\\u042F',\n    '&YIcy;': '\\u0407',\n    '&YUcy;': '\\u042E',\n    '&Yacute': '\\u00DD',\n    '&Yacute;': '\\u00DD',\n    '&Ycirc;': '\\u0176',\n    '&Ycy;': '\\u042B',\n    '&Yfr;': '\\uD835\\uDD1C',\n    '&Yopf;': '\\uD835\\uDD50',\n    '&Yscr;': '\\uD835\\uDCB4',\n    '&Yuml;': '\\u0178',\n    '&ZHcy;': '\\u0416',\n    '&Zacute;': '\\u0179',\n    '&Zcaron;': '\\u017D',\n    '&Zcy;': '\\u0417',\n    '&Zdot;': '\\u017B',\n    '&ZeroWidthSpace;': '\\u200B',\n    '&Zeta;': '\\u0396',\n    '&Zfr;': '\\u2128',\n    '&Zopf;': '\\u2124',\n    '&Zscr;': '\\uD835\\uDCB5',\n    '&aacute': '\\u00E1',\n    '&aacute;': '\\u00E1',\n    '&abreve;': '\\u0103',\n    '&ac;': '\\u223E',\n    '&acE;': '\\u223E\\u0333',\n    '&acd;': '\\u223F',\n    '&acirc': '\\u00E2',\n    '&acirc;': '\\u00E2',\n    '&acute': '\\u00B4',\n    '&acute;': '\\u00B4',\n    '&acy;': '\\u0430',\n    '&aelig': '\\u00E6',\n    '&aelig;': '\\u00E6',\n    '&af;': '\\u2061',\n    '&afr;': '\\uD835\\uDD1E',\n    '&agrave': '\\u00E0',\n    '&agrave;': '\\u00E0',\n    '&alefsym;': '\\u2135',\n    '&aleph;': '\\u2135',\n    '&alpha;': '\\u03B1',\n    '&amacr;': '\\u0101',\n    '&amalg;': '\\u2A3F',\n    '&amp': '\\u0026',\n    '&amp;': '\\u0026',\n    '&and;': '\\u2227',\n    '&andand;': '\\u2A55',\n    '&andd;': '\\u2A5C',\n    '&andslope;': '\\u2A58',\n    '&andv;': '\\u2A5A',\n    '&ang;': '\\u2220',\n    '&ange;': '\\u29A4',\n    '&angle;': '\\u2220',\n    '&angmsd;': '\\u2221',\n    '&angmsdaa;': '\\u29A8',\n    '&angmsdab;': '\\u29A9',\n    '&angmsdac;': '\\u29AA',\n    '&angmsdad;': '\\u29AB',\n    '&angmsdae;': '\\u29AC',\n    '&angmsdaf;': '\\u29AD',\n    '&angmsdag;': '\\u29AE',\n    '&angmsdah;': '\\u29AF',\n    '&angrt;': '\\u221F',\n    '&angrtvb;': '\\u22BE',\n    '&angrtvbd;': '\\u299D',\n    '&angsph;': '\\u2222',\n    '&angst;': '\\u00C5',\n    '&angzarr;': '\\u237C',\n    '&aogon;': '\\u0105',\n    '&aopf;': '\\uD835\\uDD52',\n    '&ap;': '\\u2248',\n    '&apE;': '\\u2A70',\n    '&apacir;': '\\u2A6F',\n    '&ape;': '\\u224A',\n    '&apid;': '\\u224B',\n    '&apos;': '\\u0027',\n    '&approx;': '\\u2248',\n    '&approxeq;': '\\u224A',\n    '&aring': '\\u00E5',\n    '&aring;': '\\u00E5',\n    '&ascr;': '\\uD835\\uDCB6',\n    '&ast;': '\\u002A',\n    '&asymp;': '\\u2248',\n    '&asympeq;': '\\u224D',\n    '&atilde': '\\u00E3',\n    '&atilde;': '\\u00E3',\n    '&auml': '\\u00E4',\n    '&auml;': '\\u00E4',\n    '&awconint;': '\\u2233',\n    '&awint;': '\\u2A11',\n    '&bNot;': '\\u2AED',\n    '&backcong;': '\\u224C',\n    '&backepsilon;': '\\u03F6',\n    '&backprime;': '\\u2035',\n    '&backsim;': '\\u223D',\n    '&backsimeq;': '\\u22CD',\n    '&barvee;': '\\u22BD',\n    '&barwed;': '\\u2305',\n    '&barwedge;': '\\u2305',\n    '&bbrk;': '\\u23B5',\n    '&bbrktbrk;': '\\u23B6',\n    '&bcong;': '\\u224C',\n    '&bcy;': '\\u0431',\n    '&bdquo;': '\\u201E',\n    '&becaus;': '\\u2235',\n    '&because;': '\\u2235',\n    '&bemptyv;': '\\u29B0',\n    '&bepsi;': '\\u03F6',\n    '&bernou;': '\\u212C',\n    '&beta;': '\\u03B2',\n    '&beth;': '\\u2136',\n    '&between;': '\\u226C',\n    '&bfr;': '\\uD835\\uDD1F',\n    '&bigcap;': '\\u22C2',\n    '&bigcirc;': '\\u25EF',\n    '&bigcup;': '\\u22C3',\n    '&bigodot;': '\\u2A00',\n    '&bigoplus;': '\\u2A01',\n    '&bigotimes;': '\\u2A02',\n    '&bigsqcup;': '\\u2A06',\n    '&bigstar;': '\\u2605',\n    '&bigtriangledown;': '\\u25BD',\n    '&bigtriangleup;': '\\u25B3',\n    '&biguplus;': '\\u2A04',\n    '&bigvee;': '\\u22C1',\n    '&bigwedge;': '\\u22C0',\n    '&bkarow;': '\\u290D',\n    '&blacklozenge;': '\\u29EB',\n    '&blacksquare;': '\\u25AA',\n    '&blacktriangle;': '\\u25B4',\n    '&blacktriangledown;': '\\u25BE',\n    '&blacktriangleleft;': '\\u25C2',\n    '&blacktriangleright;': '\\u25B8',\n    '&blank;': '\\u2423',\n    '&blk12;': '\\u2592',\n    '&blk14;': '\\u2591',\n    '&blk34;': '\\u2593',\n    '&block;': '\\u2588',\n    '&bne;': '\\u003D\\u20E5',\n    '&bnequiv;': '\\u2261\\u20E5',\n    '&bnot;': '\\u2310',\n    '&bopf;': '\\uD835\\uDD53',\n    '&bot;': '\\u22A5',\n    '&bottom;': '\\u22A5',\n    '&bowtie;': '\\u22C8',\n    '&boxDL;': '\\u2557',\n    '&boxDR;': '\\u2554',\n    '&boxDl;': '\\u2556',\n    '&boxDr;': '\\u2553',\n    '&boxH;': '\\u2550',\n    '&boxHD;': '\\u2566',\n    '&boxHU;': '\\u2569',\n    '&boxHd;': '\\u2564',\n    '&boxHu;': '\\u2567',\n    '&boxUL;': '\\u255D',\n    '&boxUR;': '\\u255A',\n    '&boxUl;': '\\u255C',\n    '&boxUr;': '\\u2559',\n    '&boxV;': '\\u2551',\n    '&boxVH;': '\\u256C',\n    '&boxVL;': '\\u2563',\n    '&boxVR;': '\\u2560',\n    '&boxVh;': '\\u256B',\n    '&boxVl;': '\\u2562',\n    '&boxVr;': '\\u255F',\n    '&boxbox;': '\\u29C9',\n    '&boxdL;': '\\u2555',\n    '&boxdR;': '\\u2552',\n    '&boxdl;': '\\u2510',\n    '&boxdr;': '\\u250C',\n    '&boxh;': '\\u2500',\n    '&boxhD;': '\\u2565',\n    '&boxhU;': '\\u2568',\n    '&boxhd;': '\\u252C',\n    '&boxhu;': '\\u2534',\n    '&boxminus;': '\\u229F',\n    '&boxplus;': '\\u229E',\n    '&boxtimes;': '\\u22A0',\n    '&boxuL;': '\\u255B',\n    '&boxuR;': '\\u2558',\n    '&boxul;': '\\u2518',\n    '&boxur;': '\\u2514',\n    '&boxv;': '\\u2502',\n    '&boxvH;': '\\u256A',\n    '&boxvL;': '\\u2561',\n    '&boxvR;': '\\u255E',\n    '&boxvh;': '\\u253C',\n    '&boxvl;': '\\u2524',\n    '&boxvr;': '\\u251C',\n    '&bprime;': '\\u2035',\n    '&breve;': '\\u02D8',\n    '&brvbar': '\\u00A6',\n    '&brvbar;': '\\u00A6',\n    '&bscr;': '\\uD835\\uDCB7',\n    '&bsemi;': '\\u204F',\n    '&bsim;': '\\u223D',\n    '&bsime;': '\\u22CD',\n    '&bsol;': '\\u005C',\n    '&bsolb;': '\\u29C5',\n    '&bsolhsub;': '\\u27C8',\n    '&bull;': '\\u2022',\n    '&bullet;': '\\u2022',\n    '&bump;': '\\u224E',\n    '&bumpE;': '\\u2AAE',\n    '&bumpe;': '\\u224F',\n    '&bumpeq;': '\\u224F',\n    '&cacute;': '\\u0107',\n    '&cap;': '\\u2229',\n    '&capand;': '\\u2A44',\n    '&capbrcup;': '\\u2A49',\n    '&capcap;': '\\u2A4B',\n    '&capcup;': '\\u2A47',\n    '&capdot;': '\\u2A40',\n    '&caps;': '\\u2229\\uFE00',\n    '&caret;': '\\u2041',\n    '&caron;': '\\u02C7',\n    '&ccaps;': '\\u2A4D',\n    '&ccaron;': '\\u010D',\n    '&ccedil': '\\u00E7',\n    '&ccedil;': '\\u00E7',\n    '&ccirc;': '\\u0109',\n    '&ccups;': '\\u2A4C',\n    '&ccupssm;': '\\u2A50',\n    '&cdot;': '\\u010B',\n    '&cedil': '\\u00B8',\n    '&cedil;': '\\u00B8',\n    '&cemptyv;': '\\u29B2',\n    '&cent': '\\u00A2',\n    '&cent;': '\\u00A2',\n    '&centerdot;': '\\u00B7',\n    '&cfr;': '\\uD835\\uDD20',\n    '&chcy;': '\\u0447',\n    '&check;': '\\u2713',\n    '&checkmark;': '\\u2713',\n    '&chi;': '\\u03C7',\n    '&cir;': '\\u25CB',\n    '&cirE;': '\\u29C3',\n    '&circ;': '\\u02C6',\n    '&circeq;': '\\u2257',\n    '&circlearrowleft;': '\\u21BA',\n    '&circlearrowright;': '\\u21BB',\n    '&circledR;': '\\u00AE',\n    '&circledS;': '\\u24C8',\n    '&circledast;': '\\u229B',\n    '&circledcirc;': '\\u229A',\n    '&circleddash;': '\\u229D',\n    '&cire;': '\\u2257',\n    '&cirfnint;': '\\u2A10',\n    '&cirmid;': '\\u2AEF',\n    '&cirscir;': '\\u29C2',\n    '&clubs;': '\\u2663',\n    '&clubsuit;': '\\u2663',\n    '&colon;': '\\u003A',\n    '&colone;': '\\u2254',\n    '&coloneq;': '\\u2254',\n    '&comma;': '\\u002C',\n    '&commat;': '\\u0040',\n    '&comp;': '\\u2201',\n    '&compfn;': '\\u2218',\n    '&complement;': '\\u2201',\n    '&complexes;': '\\u2102',\n    '&cong;': '\\u2245',\n    '&congdot;': '\\u2A6D',\n    '&conint;': '\\u222E',\n    '&copf;': '\\uD835\\uDD54',\n    '&coprod;': '\\u2210',\n    '&copy': '\\u00A9',\n    '&copy;': '\\u00A9',\n    '&copysr;': '\\u2117',\n    '&crarr;': '\\u21B5',\n    '&cross;': '\\u2717',\n    '&cscr;': '\\uD835\\uDCB8',\n    '&csub;': '\\u2ACF',\n    '&csube;': '\\u2AD1',\n    '&csup;': '\\u2AD0',\n    '&csupe;': '\\u2AD2',\n    '&ctdot;': '\\u22EF',\n    '&cudarrl;': '\\u2938',\n    '&cudarrr;': '\\u2935',\n    '&cuepr;': '\\u22DE',\n    '&cuesc;': '\\u22DF',\n    '&cularr;': '\\u21B6',\n    '&cularrp;': '\\u293D',\n    '&cup;': '\\u222A',\n    '&cupbrcap;': '\\u2A48',\n    '&cupcap;': '\\u2A46',\n    '&cupcup;': '\\u2A4A',\n    '&cupdot;': '\\u228D',\n    '&cupor;': '\\u2A45',\n    '&cups;': '\\u222A\\uFE00',\n    '&curarr;': '\\u21B7',\n    '&curarrm;': '\\u293C',\n    '&curlyeqprec;': '\\u22DE',\n    '&curlyeqsucc;': '\\u22DF',\n    '&curlyvee;': '\\u22CE',\n    '&curlywedge;': '\\u22CF',\n    '&curren': '\\u00A4',\n    '&curren;': '\\u00A4',\n    '&curvearrowleft;': '\\u21B6',\n    '&curvearrowright;': '\\u21B7',\n    '&cuvee;': '\\u22CE',\n    '&cuwed;': '\\u22CF',\n    '&cwconint;': '\\u2232',\n    '&cwint;': '\\u2231',\n    '&cylcty;': '\\u232D',\n    '&dArr;': '\\u21D3',\n    '&dHar;': '\\u2965',\n    '&dagger;': '\\u2020',\n    '&daleth;': '\\u2138',\n    '&darr;': '\\u2193',\n    '&dash;': '\\u2010',\n    '&dashv;': '\\u22A3',\n    '&dbkarow;': '\\u290F',\n    '&dblac;': '\\u02DD',\n    '&dcaron;': '\\u010F',\n    '&dcy;': '\\u0434',\n    '&dd;': '\\u2146',\n    '&ddagger;': '\\u2021',\n    '&ddarr;': '\\u21CA',\n    '&ddotseq;': '\\u2A77',\n    '&deg': '\\u00B0',\n    '&deg;': '\\u00B0',\n    '&delta;': '\\u03B4',\n    '&demptyv;': '\\u29B1',\n    '&dfisht;': '\\u297F',\n    '&dfr;': '\\uD835\\uDD21',\n    '&dharl;': '\\u21C3',\n    '&dharr;': '\\u21C2',\n    '&diam;': '\\u22C4',\n    '&diamond;': '\\u22C4',\n    '&diamondsuit;': '\\u2666',\n    '&diams;': '\\u2666',\n    '&die;': '\\u00A8',\n    '&digamma;': '\\u03DD',\n    '&disin;': '\\u22F2',\n    '&div;': '\\u00F7',\n    '&divide': '\\u00F7',\n    '&divide;': '\\u00F7',\n    '&divideontimes;': '\\u22C7',\n    '&divonx;': '\\u22C7',\n    '&djcy;': '\\u0452',\n    '&dlcorn;': '\\u231E',\n    '&dlcrop;': '\\u230D',\n    '&dollar;': '\\u0024',\n    '&dopf;': '\\uD835\\uDD55',\n    '&dot;': '\\u02D9',\n    '&doteq;': '\\u2250',\n    '&doteqdot;': '\\u2251',\n    '&dotminus;': '\\u2238',\n    '&dotplus;': '\\u2214',\n    '&dotsquare;': '\\u22A1',\n    '&doublebarwedge;': '\\u2306',\n    '&downarrow;': '\\u2193',\n    '&downdownarrows;': '\\u21CA',\n    '&downharpoonleft;': '\\u21C3',\n    '&downharpoonright;': '\\u21C2',\n    '&drbkarow;': '\\u2910',\n    '&drcorn;': '\\u231F',\n    '&drcrop;': '\\u230C',\n    '&dscr;': '\\uD835\\uDCB9',\n    '&dscy;': '\\u0455',\n    '&dsol;': '\\u29F6',\n    '&dstrok;': '\\u0111',\n    '&dtdot;': '\\u22F1',\n    '&dtri;': '\\u25BF',\n    '&dtrif;': '\\u25BE',\n    '&duarr;': '\\u21F5',\n    '&duhar;': '\\u296F',\n    '&dwangle;': '\\u29A6',\n    '&dzcy;': '\\u045F',\n    '&dzigrarr;': '\\u27FF',\n    '&eDDot;': '\\u2A77',\n    '&eDot;': '\\u2251',\n    '&eacute': '\\u00E9',\n    '&eacute;': '\\u00E9',\n    '&easter;': '\\u2A6E',\n    '&ecaron;': '\\u011B',\n    '&ecir;': '\\u2256',\n    '&ecirc': '\\u00EA',\n    '&ecirc;': '\\u00EA',\n    '&ecolon;': '\\u2255',\n    '&ecy;': '\\u044D',\n    '&edot;': '\\u0117',\n    '&ee;': '\\u2147',\n    '&efDot;': '\\u2252',\n    '&efr;': '\\uD835\\uDD22',\n    '&eg;': '\\u2A9A',\n    '&egrave': '\\u00E8',\n    '&egrave;': '\\u00E8',\n    '&egs;': '\\u2A96',\n    '&egsdot;': '\\u2A98',\n    '&el;': '\\u2A99',\n    '&elinters;': '\\u23E7',\n    '&ell;': '\\u2113',\n    '&els;': '\\u2A95',\n    '&elsdot;': '\\u2A97',\n    '&emacr;': '\\u0113',\n    '&empty;': '\\u2205',\n    '&emptyset;': '\\u2205',\n    '&emptyv;': '\\u2205',\n    '&emsp13;': '\\u2004',\n    '&emsp14;': '\\u2005',\n    '&emsp;': '\\u2003',\n    '&eng;': '\\u014B',\n    '&ensp;': '\\u2002',\n    '&eogon;': '\\u0119',\n    '&eopf;': '\\uD835\\uDD56',\n    '&epar;': '\\u22D5',\n    '&eparsl;': '\\u29E3',\n    '&eplus;': '\\u2A71',\n    '&epsi;': '\\u03B5',\n    '&epsilon;': '\\u03B5',\n    '&epsiv;': '\\u03F5',\n    '&eqcirc;': '\\u2256',\n    '&eqcolon;': '\\u2255',\n    '&eqsim;': '\\u2242',\n    '&eqslantgtr;': '\\u2A96',\n    '&eqslantless;': '\\u2A95',\n    '&equals;': '\\u003D',\n    '&equest;': '\\u225F',\n    '&equiv;': '\\u2261',\n    '&equivDD;': '\\u2A78',\n    '&eqvparsl;': '\\u29E5',\n    '&erDot;': '\\u2253',\n    '&erarr;': '\\u2971',\n    '&escr;': '\\u212F',\n    '&esdot;': '\\u2250',\n    '&esim;': '\\u2242',\n    '&eta;': '\\u03B7',\n    '&eth': '\\u00F0',\n    '&eth;': '\\u00F0',\n    '&euml': '\\u00EB',\n    '&euml;': '\\u00EB',\n    '&euro;': '\\u20AC',\n    '&excl;': '\\u0021',\n    '&exist;': '\\u2203',\n    '&expectation;': '\\u2130',\n    '&exponentiale;': '\\u2147',\n    '&fallingdotseq;': '\\u2252',\n    '&fcy;': '\\u0444',\n    '&female;': '\\u2640',\n    '&ffilig;': '\\uFB03',\n    '&fflig;': '\\uFB00',\n    '&ffllig;': '\\uFB04',\n    '&ffr;': '\\uD835\\uDD23',\n    '&filig;': '\\uFB01',\n    '&fjlig;': '\\u0066\\u006A',\n    '&flat;': '\\u266D',\n    '&fllig;': '\\uFB02',\n    '&fltns;': '\\u25B1',\n    '&fnof;': '\\u0192',\n    '&fopf;': '\\uD835\\uDD57',\n    '&forall;': '\\u2200',\n    '&fork;': '\\u22D4',\n    '&forkv;': '\\u2AD9',\n    '&fpartint;': '\\u2A0D',\n    '&frac12': '\\u00BD',\n    '&frac12;': '\\u00BD',\n    '&frac13;': '\\u2153',\n    '&frac14': '\\u00BC',\n    '&frac14;': '\\u00BC',\n    '&frac15;': '\\u2155',\n    '&frac16;': '\\u2159',\n    '&frac18;': '\\u215B',\n    '&frac23;': '\\u2154',\n    '&frac25;': '\\u2156',\n    '&frac34': '\\u00BE',\n    '&frac34;': '\\u00BE',\n    '&frac35;': '\\u2157',\n    '&frac38;': '\\u215C',\n    '&frac45;': '\\u2158',\n    '&frac56;': '\\u215A',\n    '&frac58;': '\\u215D',\n    '&frac78;': '\\u215E',\n    '&frasl;': '\\u2044',\n    '&frown;': '\\u2322',\n    '&fscr;': '\\uD835\\uDCBB',\n    '&gE;': '\\u2267',\n    '&gEl;': '\\u2A8C',\n    '&gacute;': '\\u01F5',\n    '&gamma;': '\\u03B3',\n    '&gammad;': '\\u03DD',\n    '&gap;': '\\u2A86',\n    '&gbreve;': '\\u011F',\n    '&gcirc;': '\\u011D',\n    '&gcy;': '\\u0433',\n    '&gdot;': '\\u0121',\n    '&ge;': '\\u2265',\n    '&gel;': '\\u22DB',\n    '&geq;': '\\u2265',\n    '&geqq;': '\\u2267',\n    '&geqslant;': '\\u2A7E',\n    '&ges;': '\\u2A7E',\n    '&gescc;': '\\u2AA9',\n    '&gesdot;': '\\u2A80',\n    '&gesdoto;': '\\u2A82',\n    '&gesdotol;': '\\u2A84',\n    '&gesl;': '\\u22DB\\uFE00',\n    '&gesles;': '\\u2A94',\n    '&gfr;': '\\uD835\\uDD24',\n    '&gg;': '\\u226B',\n    '&ggg;': '\\u22D9',\n    '&gimel;': '\\u2137',\n    '&gjcy;': '\\u0453',\n    '&gl;': '\\u2277',\n    '&glE;': '\\u2A92',\n    '&gla;': '\\u2AA5',\n    '&glj;': '\\u2AA4',\n    '&gnE;': '\\u2269',\n    '&gnap;': '\\u2A8A',\n    '&gnapprox;': '\\u2A8A',\n    '&gne;': '\\u2A88',\n    '&gneq;': '\\u2A88',\n    '&gneqq;': '\\u2269',\n    '&gnsim;': '\\u22E7',\n    '&gopf;': '\\uD835\\uDD58',\n    '&grave;': '\\u0060',\n    '&gscr;': '\\u210A',\n    '&gsim;': '\\u2273',\n    '&gsime;': '\\u2A8E',\n    '&gsiml;': '\\u2A90',\n    '&gt': '\\u003E',\n    '&gt;': '\\u003E',\n    '&gtcc;': '\\u2AA7',\n    '&gtcir;': '\\u2A7A',\n    '&gtdot;': '\\u22D7',\n    '&gtlPar;': '\\u2995',\n    '&gtquest;': '\\u2A7C',\n    '&gtrapprox;': '\\u2A86',\n    '&gtrarr;': '\\u2978',\n    '&gtrdot;': '\\u22D7',\n    '&gtreqless;': '\\u22DB',\n    '&gtreqqless;': '\\u2A8C',\n    '&gtrless;': '\\u2277',\n    '&gtrsim;': '\\u2273',\n    '&gvertneqq;': '\\u2269\\uFE00',\n    '&gvnE;': '\\u2269\\uFE00',\n    '&hArr;': '\\u21D4',\n    '&hairsp;': '\\u200A',\n    '&half;': '\\u00BD',\n    '&hamilt;': '\\u210B',\n    '&hardcy;': '\\u044A',\n    '&harr;': '\\u2194',\n    '&harrcir;': '\\u2948',\n    '&harrw;': '\\u21AD',\n    '&hbar;': '\\u210F',\n    '&hcirc;': '\\u0125',\n    '&hearts;': '\\u2665',\n    '&heartsuit;': '\\u2665',\n    '&hellip;': '\\u2026',\n    '&hercon;': '\\u22B9',\n    '&hfr;': '\\uD835\\uDD25',\n    '&hksearow;': '\\u2925',\n    '&hkswarow;': '\\u2926',\n    '&hoarr;': '\\u21FF',\n    '&homtht;': '\\u223B',\n    '&hookleftarrow;': '\\u21A9',\n    '&hookrightarrow;': '\\u21AA',\n    '&hopf;': '\\uD835\\uDD59',\n    '&horbar;': '\\u2015',\n    '&hscr;': '\\uD835\\uDCBD',\n    '&hslash;': '\\u210F',\n    '&hstrok;': '\\u0127',\n    '&hybull;': '\\u2043',\n    '&hyphen;': '\\u2010',\n    '&iacute': '\\u00ED',\n    '&iacute;': '\\u00ED',\n    '&ic;': '\\u2063',\n    '&icirc': '\\u00EE',\n    '&icirc;': '\\u00EE',\n    '&icy;': '\\u0438',\n    '&iecy;': '\\u0435',\n    '&iexcl': '\\u00A1',\n    '&iexcl;': '\\u00A1',\n    '&iff;': '\\u21D4',\n    '&ifr;': '\\uD835\\uDD26',\n    '&igrave': '\\u00EC',\n    '&igrave;': '\\u00EC',\n    '&ii;': '\\u2148',\n    '&iiiint;': '\\u2A0C',\n    '&iiint;': '\\u222D',\n    '&iinfin;': '\\u29DC',\n    '&iiota;': '\\u2129',\n    '&ijlig;': '\\u0133',\n    '&imacr;': '\\u012B',\n    '&image;': '\\u2111',\n    '&imagline;': '\\u2110',\n    '&imagpart;': '\\u2111',\n    '&imath;': '\\u0131',\n    '&imof;': '\\u22B7',\n    '&imped;': '\\u01B5',\n    '&in;': '\\u2208',\n    '&incare;': '\\u2105',\n    '&infin;': '\\u221E',\n    '&infintie;': '\\u29DD',\n    '&inodot;': '\\u0131',\n    '&int;': '\\u222B',\n    '&intcal;': '\\u22BA',\n    '&integers;': '\\u2124',\n    '&intercal;': '\\u22BA',\n    '&intlarhk;': '\\u2A17',\n    '&intprod;': '\\u2A3C',\n    '&iocy;': '\\u0451',\n    '&iogon;': '\\u012F',\n    '&iopf;': '\\uD835\\uDD5A',\n    '&iota;': '\\u03B9',\n    '&iprod;': '\\u2A3C',\n    '&iquest': '\\u00BF',\n    '&iquest;': '\\u00BF',\n    '&iscr;': '\\uD835\\uDCBE',\n    '&isin;': '\\u2208',\n    '&isinE;': '\\u22F9',\n    '&isindot;': '\\u22F5',\n    '&isins;': '\\u22F4',\n    '&isinsv;': '\\u22F3',\n    '&isinv;': '\\u2208',\n    '&it;': '\\u2062',\n    '&itilde;': '\\u0129',\n    '&iukcy;': '\\u0456',\n    '&iuml': '\\u00EF',\n    '&iuml;': '\\u00EF',\n    '&jcirc;': '\\u0135',\n    '&jcy;': '\\u0439',\n    '&jfr;': '\\uD835\\uDD27',\n    '&jmath;': '\\u0237',\n    '&jopf;': '\\uD835\\uDD5B',\n    '&jscr;': '\\uD835\\uDCBF',\n    '&jsercy;': '\\u0458',\n    '&jukcy;': '\\u0454',\n    '&kappa;': '\\u03BA',\n    '&kappav;': '\\u03F0',\n    '&kcedil;': '\\u0137',\n    '&kcy;': '\\u043A',\n    '&kfr;': '\\uD835\\uDD28',\n    '&kgreen;': '\\u0138',\n    '&khcy;': '\\u0445',\n    '&kjcy;': '\\u045C',\n    '&kopf;': '\\uD835\\uDD5C',\n    '&kscr;': '\\uD835\\uDCC0',\n    '&lAarr;': '\\u21DA',\n    '&lArr;': '\\u21D0',\n    '&lAtail;': '\\u291B',\n    '&lBarr;': '\\u290E',\n    '&lE;': '\\u2266',\n    '&lEg;': '\\u2A8B',\n    '&lHar;': '\\u2962',\n    '&lacute;': '\\u013A',\n    '&laemptyv;': '\\u29B4',\n    '&lagran;': '\\u2112',\n    '&lambda;': '\\u03BB',\n    '&lang;': '\\u27E8',\n    '&langd;': '\\u2991',\n    '&langle;': '\\u27E8',\n    '&lap;': '\\u2A85',\n    '&laquo': '\\u00AB',\n    '&laquo;': '\\u00AB',\n    '&larr;': '\\u2190',\n    '&larrb;': '\\u21E4',\n    '&larrbfs;': '\\u291F',\n    '&larrfs;': '\\u291D',\n    '&larrhk;': '\\u21A9',\n    '&larrlp;': '\\u21AB',\n    '&larrpl;': '\\u2939',\n    '&larrsim;': '\\u2973',\n    '&larrtl;': '\\u21A2',\n    '&lat;': '\\u2AAB',\n    '&latail;': '\\u2919',\n    '&late;': '\\u2AAD',\n    '&lates;': '\\u2AAD\\uFE00',\n    '&lbarr;': '\\u290C',\n    '&lbbrk;': '\\u2772',\n    '&lbrace;': '\\u007B',\n    '&lbrack;': '\\u005B',\n    '&lbrke;': '\\u298B',\n    '&lbrksld;': '\\u298F',\n    '&lbrkslu;': '\\u298D',\n    '&lcaron;': '\\u013E',\n    '&lcedil;': '\\u013C',\n    '&lceil;': '\\u2308',\n    '&lcub;': '\\u007B',\n    '&lcy;': '\\u043B',\n    '&ldca;': '\\u2936',\n    '&ldquo;': '\\u201C',\n    '&ldquor;': '\\u201E',\n    '&ldrdhar;': '\\u2967',\n    '&ldrushar;': '\\u294B',\n    '&ldsh;': '\\u21B2',\n    '&le;': '\\u2264',\n    '&leftarrow;': '\\u2190',\n    '&leftarrowtail;': '\\u21A2',\n    '&leftharpoondown;': '\\u21BD',\n    '&leftharpoonup;': '\\u21BC',\n    '&leftleftarrows;': '\\u21C7',\n    '&leftrightarrow;': '\\u2194',\n    '&leftrightarrows;': '\\u21C6',\n    '&leftrightharpoons;': '\\u21CB',\n    '&leftrightsquigarrow;': '\\u21AD',\n    '&leftthreetimes;': '\\u22CB',\n    '&leg;': '\\u22DA',\n    '&leq;': '\\u2264',\n    '&leqq;': '\\u2266',\n    '&leqslant;': '\\u2A7D',\n    '&les;': '\\u2A7D',\n    '&lescc;': '\\u2AA8',\n    '&lesdot;': '\\u2A7F',\n    '&lesdoto;': '\\u2A81',\n    '&lesdotor;': '\\u2A83',\n    '&lesg;': '\\u22DA\\uFE00',\n    '&lesges;': '\\u2A93',\n    '&lessapprox;': '\\u2A85',\n    '&lessdot;': '\\u22D6',\n    '&lesseqgtr;': '\\u22DA',\n    '&lesseqqgtr;': '\\u2A8B',\n    '&lessgtr;': '\\u2276',\n    '&lesssim;': '\\u2272',\n    '&lfisht;': '\\u297C',\n    '&lfloor;': '\\u230A',\n    '&lfr;': '\\uD835\\uDD29',\n    '&lg;': '\\u2276',\n    '&lgE;': '\\u2A91',\n    '&lhard;': '\\u21BD',\n    '&lharu;': '\\u21BC',\n    '&lharul;': '\\u296A',\n    '&lhblk;': '\\u2584',\n    '&ljcy;': '\\u0459',\n    '&ll;': '\\u226A',\n    '&llarr;': '\\u21C7',\n    '&llcorner;': '\\u231E',\n    '&llhard;': '\\u296B',\n    '&lltri;': '\\u25FA',\n    '&lmidot;': '\\u0140',\n    '&lmoust;': '\\u23B0',\n    '&lmoustache;': '\\u23B0',\n    '&lnE;': '\\u2268',\n    '&lnap;': '\\u2A89',\n    '&lnapprox;': '\\u2A89',\n    '&lne;': '\\u2A87',\n    '&lneq;': '\\u2A87',\n    '&lneqq;': '\\u2268',\n    '&lnsim;': '\\u22E6',\n    '&loang;': '\\u27EC',\n    '&loarr;': '\\u21FD',\n    '&lobrk;': '\\u27E6',\n    '&longleftarrow;': '\\u27F5',\n    '&longleftrightarrow;': '\\u27F7',\n    '&longmapsto;': '\\u27FC',\n    '&longrightarrow;': '\\u27F6',\n    '&looparrowleft;': '\\u21AB',\n    '&looparrowright;': '\\u21AC',\n    '&lopar;': '\\u2985',\n    '&lopf;': '\\uD835\\uDD5D',\n    '&loplus;': '\\u2A2D',\n    '&lotimes;': '\\u2A34',\n    '&lowast;': '\\u2217',\n    '&lowbar;': '\\u005F',\n    '&loz;': '\\u25CA',\n    '&lozenge;': '\\u25CA',\n    '&lozf;': '\\u29EB',\n    '&lpar;': '\\u0028',\n    '&lparlt;': '\\u2993',\n    '&lrarr;': '\\u21C6',\n    '&lrcorner;': '\\u231F',\n    '&lrhar;': '\\u21CB',\n    '&lrhard;': '\\u296D',\n    '&lrm;': '\\u200E',\n    '&lrtri;': '\\u22BF',\n    '&lsaquo;': '\\u2039',\n    '&lscr;': '\\uD835\\uDCC1',\n    '&lsh;': '\\u21B0',\n    '&lsim;': '\\u2272',\n    '&lsime;': '\\u2A8D',\n    '&lsimg;': '\\u2A8F',\n    '&lsqb;': '\\u005B',\n    '&lsquo;': '\\u2018',\n    '&lsquor;': '\\u201A',\n    '&lstrok;': '\\u0142',\n    '&lt': '\\u003C',\n    '&lt;': '\\u003C',\n    '&ltcc;': '\\u2AA6',\n    '&ltcir;': '\\u2A79',\n    '&ltdot;': '\\u22D6',\n    '&lthree;': '\\u22CB',\n    '&ltimes;': '\\u22C9',\n    '&ltlarr;': '\\u2976',\n    '&ltquest;': '\\u2A7B',\n    '&ltrPar;': '\\u2996',\n    '&ltri;': '\\u25C3',\n    '&ltrie;': '\\u22B4',\n    '&ltrif;': '\\u25C2',\n    '&lurdshar;': '\\u294A',\n    '&luruhar;': '\\u2966',\n    '&lvertneqq;': '\\u2268\\uFE00',\n    '&lvnE;': '\\u2268\\uFE00',\n    '&mDDot;': '\\u223A',\n    '&macr': '\\u00AF',\n    '&macr;': '\\u00AF',\n    '&male;': '\\u2642',\n    '&malt;': '\\u2720',\n    '&maltese;': '\\u2720',\n    '&map;': '\\u21A6',\n    '&mapsto;': '\\u21A6',\n    '&mapstodown;': '\\u21A7',\n    '&mapstoleft;': '\\u21A4',\n    '&mapstoup;': '\\u21A5',\n    '&marker;': '\\u25AE',\n    '&mcomma;': '\\u2A29',\n    '&mcy;': '\\u043C',\n    '&mdash;': '\\u2014',\n    '&measuredangle;': '\\u2221',\n    '&mfr;': '\\uD835\\uDD2A',\n    '&mho;': '\\u2127',\n    '&micro': '\\u00B5',\n    '&micro;': '\\u00B5',\n    '&mid;': '\\u2223',\n    '&midast;': '\\u002A',\n    '&midcir;': '\\u2AF0',\n    '&middot': '\\u00B7',\n    '&middot;': '\\u00B7',\n    '&minus;': '\\u2212',\n    '&minusb;': '\\u229F',\n    '&minusd;': '\\u2238',\n    '&minusdu;': '\\u2A2A',\n    '&mlcp;': '\\u2ADB',\n    '&mldr;': '\\u2026',\n    '&mnplus;': '\\u2213',\n    '&models;': '\\u22A7',\n    '&mopf;': '\\uD835\\uDD5E',\n    '&mp;': '\\u2213',\n    '&mscr;': '\\uD835\\uDCC2',\n    '&mstpos;': '\\u223E',\n    '&mu;': '\\u03BC',\n    '&multimap;': '\\u22B8',\n    '&mumap;': '\\u22B8',\n    '&nGg;': '\\u22D9\\u0338',\n    '&nGt;': '\\u226B\\u20D2',\n    '&nGtv;': '\\u226B\\u0338',\n    '&nLeftarrow;': '\\u21CD',\n    '&nLeftrightarrow;': '\\u21CE',\n    '&nLl;': '\\u22D8\\u0338',\n    '&nLt;': '\\u226A\\u20D2',\n    '&nLtv;': '\\u226A\\u0338',\n    '&nRightarrow;': '\\u21CF',\n    '&nVDash;': '\\u22AF',\n    '&nVdash;': '\\u22AE',\n    '&nabla;': '\\u2207',\n    '&nacute;': '\\u0144',\n    '&nang;': '\\u2220\\u20D2',\n    '&nap;': '\\u2249',\n    '&napE;': '\\u2A70\\u0338',\n    '&napid;': '\\u224B\\u0338',\n    '&napos;': '\\u0149',\n    '&napprox;': '\\u2249',\n    '&natur;': '\\u266E',\n    '&natural;': '\\u266E',\n    '&naturals;': '\\u2115',\n    '&nbsp': '\\u00A0',\n    '&nbsp;': '\\u00A0',\n    '&nbump;': '\\u224E\\u0338',\n    '&nbumpe;': '\\u224F\\u0338',\n    '&ncap;': '\\u2A43',\n    '&ncaron;': '\\u0148',\n    '&ncedil;': '\\u0146',\n    '&ncong;': '\\u2247',\n    '&ncongdot;': '\\u2A6D\\u0338',\n    '&ncup;': '\\u2A42',\n    '&ncy;': '\\u043D',\n    '&ndash;': '\\u2013',\n    '&ne;': '\\u2260',\n    '&neArr;': '\\u21D7',\n    '&nearhk;': '\\u2924',\n    '&nearr;': '\\u2197',\n    '&nearrow;': '\\u2197',\n    '&nedot;': '\\u2250\\u0338',\n    '&nequiv;': '\\u2262',\n    '&nesear;': '\\u2928',\n    '&nesim;': '\\u2242\\u0338',\n    '&nexist;': '\\u2204',\n    '&nexists;': '\\u2204',\n    '&nfr;': '\\uD835\\uDD2B',\n    '&ngE;': '\\u2267\\u0338',\n    '&nge;': '\\u2271',\n    '&ngeq;': '\\u2271',\n    '&ngeqq;': '\\u2267\\u0338',\n    '&ngeqslant;': '\\u2A7E\\u0338',\n    '&nges;': '\\u2A7E\\u0338',\n    '&ngsim;': '\\u2275',\n    '&ngt;': '\\u226F',\n    '&ngtr;': '\\u226F',\n    '&nhArr;': '\\u21CE',\n    '&nharr;': '\\u21AE',\n    '&nhpar;': '\\u2AF2',\n    '&ni;': '\\u220B',\n    '&nis;': '\\u22FC',\n    '&nisd;': '\\u22FA',\n    '&niv;': '\\u220B',\n    '&njcy;': '\\u045A',\n    '&nlArr;': '\\u21CD',\n    '&nlE;': '\\u2266\\u0338',\n    '&nlarr;': '\\u219A',\n    '&nldr;': '\\u2025',\n    '&nle;': '\\u2270',\n    '&nleftarrow;': '\\u219A',\n    '&nleftrightarrow;': '\\u21AE',\n    '&nleq;': '\\u2270',\n    '&nleqq;': '\\u2266\\u0338',\n    '&nleqslant;': '\\u2A7D\\u0338',\n    '&nles;': '\\u2A7D\\u0338',\n    '&nless;': '\\u226E',\n    '&nlsim;': '\\u2274',\n    '&nlt;': '\\u226E',\n    '&nltri;': '\\u22EA',\n    '&nltrie;': '\\u22EC',\n    '&nmid;': '\\u2224',\n    '&nopf;': '\\uD835\\uDD5F',\n    '&not': '\\u00AC',\n    '&not;': '\\u00AC',\n    '&notin;': '\\u2209',\n    '&notinE;': '\\u22F9\\u0338',\n    '&notindot;': '\\u22F5\\u0338',\n    '&notinva;': '\\u2209',\n    '&notinvb;': '\\u22F7',\n    '&notinvc;': '\\u22F6',\n    '&notni;': '\\u220C',\n    '&notniva;': '\\u220C',\n    '&notnivb;': '\\u22FE',\n    '&notnivc;': '\\u22FD',\n    '&npar;': '\\u2226',\n    '&nparallel;': '\\u2226',\n    '&nparsl;': '\\u2AFD\\u20E5',\n    '&npart;': '\\u2202\\u0338',\n    '&npolint;': '\\u2A14',\n    '&npr;': '\\u2280',\n    '&nprcue;': '\\u22E0',\n    '&npre;': '\\u2AAF\\u0338',\n    '&nprec;': '\\u2280',\n    '&npreceq;': '\\u2AAF\\u0338',\n    '&nrArr;': '\\u21CF',\n    '&nrarr;': '\\u219B',\n    '&nrarrc;': '\\u2933\\u0338',\n    '&nrarrw;': '\\u219D\\u0338',\n    '&nrightarrow;': '\\u219B',\n    '&nrtri;': '\\u22EB',\n    '&nrtrie;': '\\u22ED',\n    '&nsc;': '\\u2281',\n    '&nsccue;': '\\u22E1',\n    '&nsce;': '\\u2AB0\\u0338',\n    '&nscr;': '\\uD835\\uDCC3',\n    '&nshortmid;': '\\u2224',\n    '&nshortparallel;': '\\u2226',\n    '&nsim;': '\\u2241',\n    '&nsime;': '\\u2244',\n    '&nsimeq;': '\\u2244',\n    '&nsmid;': '\\u2224',\n    '&nspar;': '\\u2226',\n    '&nsqsube;': '\\u22E2',\n    '&nsqsupe;': '\\u22E3',\n    '&nsub;': '\\u2284',\n    '&nsubE;': '\\u2AC5\\u0338',\n    '&nsube;': '\\u2288',\n    '&nsubset;': '\\u2282\\u20D2',\n    '&nsubseteq;': '\\u2288',\n    '&nsubseteqq;': '\\u2AC5\\u0338',\n    '&nsucc;': '\\u2281',\n    '&nsucceq;': '\\u2AB0\\u0338',\n    '&nsup;': '\\u2285',\n    '&nsupE;': '\\u2AC6\\u0338',\n    '&nsupe;': '\\u2289',\n    '&nsupset;': '\\u2283\\u20D2',\n    '&nsupseteq;': '\\u2289',\n    '&nsupseteqq;': '\\u2AC6\\u0338',\n    '&ntgl;': '\\u2279',\n    '&ntilde': '\\u00F1',\n    '&ntilde;': '\\u00F1',\n    '&ntlg;': '\\u2278',\n    '&ntriangleleft;': '\\u22EA',\n    '&ntrianglelefteq;': '\\u22EC',\n    '&ntriangleright;': '\\u22EB',\n    '&ntrianglerighteq;': '\\u22ED',\n    '&nu;': '\\u03BD',\n    '&num;': '\\u0023',\n    '&numero;': '\\u2116',\n    '&numsp;': '\\u2007',\n    '&nvDash;': '\\u22AD',\n    '&nvHarr;': '\\u2904',\n    '&nvap;': '\\u224D\\u20D2',\n    '&nvdash;': '\\u22AC',\n    '&nvge;': '\\u2265\\u20D2',\n    '&nvgt;': '\\u003E\\u20D2',\n    '&nvinfin;': '\\u29DE',\n    '&nvlArr;': '\\u2902',\n    '&nvle;': '\\u2264\\u20D2',\n    '&nvlt;': '\\u003C\\u20D2',\n    '&nvltrie;': '\\u22B4\\u20D2',\n    '&nvrArr;': '\\u2903',\n    '&nvrtrie;': '\\u22B5\\u20D2',\n    '&nvsim;': '\\u223C\\u20D2',\n    '&nwArr;': '\\u21D6',\n    '&nwarhk;': '\\u2923',\n    '&nwarr;': '\\u2196',\n    '&nwarrow;': '\\u2196',\n    '&nwnear;': '\\u2927',\n    '&oS;': '\\u24C8',\n    '&oacute': '\\u00F3',\n    '&oacute;': '\\u00F3',\n    '&oast;': '\\u229B',\n    '&ocir;': '\\u229A',\n    '&ocirc': '\\u00F4',\n    '&ocirc;': '\\u00F4',\n    '&ocy;': '\\u043E',\n    '&odash;': '\\u229D',\n    '&odblac;': '\\u0151',\n    '&odiv;': '\\u2A38',\n    '&odot;': '\\u2299',\n    '&odsold;': '\\u29BC',\n    '&oelig;': '\\u0153',\n    '&ofcir;': '\\u29BF',\n    '&ofr;': '\\uD835\\uDD2C',\n    '&ogon;': '\\u02DB',\n    '&ograve': '\\u00F2',\n    '&ograve;': '\\u00F2',\n    '&ogt;': '\\u29C1',\n    '&ohbar;': '\\u29B5',\n    '&ohm;': '\\u03A9',\n    '&oint;': '\\u222E',\n    '&olarr;': '\\u21BA',\n    '&olcir;': '\\u29BE',\n    '&olcross;': '\\u29BB',\n    '&oline;': '\\u203E',\n    '&olt;': '\\u29C0',\n    '&omacr;': '\\u014D',\n    '&omega;': '\\u03C9',\n    '&omicron;': '\\u03BF',\n    '&omid;': '\\u29B6',\n    '&ominus;': '\\u2296',\n    '&oopf;': '\\uD835\\uDD60',\n    '&opar;': '\\u29B7',\n    '&operp;': '\\u29B9',\n    '&oplus;': '\\u2295',\n    '&or;': '\\u2228',\n    '&orarr;': '\\u21BB',\n    '&ord;': '\\u2A5D',\n    '&order;': '\\u2134',\n    '&orderof;': '\\u2134',\n    '&ordf': '\\u00AA',\n    '&ordf;': '\\u00AA',\n    '&ordm': '\\u00BA',\n    '&ordm;': '\\u00BA',\n    '&origof;': '\\u22B6',\n    '&oror;': '\\u2A56',\n    '&orslope;': '\\u2A57',\n    '&orv;': '\\u2A5B',\n    '&oscr;': '\\u2134',\n    '&oslash': '\\u00F8',\n    '&oslash;': '\\u00F8',\n    '&osol;': '\\u2298',\n    '&otilde': '\\u00F5',\n    '&otilde;': '\\u00F5',\n    '&otimes;': '\\u2297',\n    '&otimesas;': '\\u2A36',\n    '&ouml': '\\u00F6',\n    '&ouml;': '\\u00F6',\n    '&ovbar;': '\\u233D',\n    '&par;': '\\u2225',\n    '&para': '\\u00B6',\n    '&para;': '\\u00B6',\n    '&parallel;': '\\u2225',\n    '&parsim;': '\\u2AF3',\n    '&parsl;': '\\u2AFD',\n    '&part;': '\\u2202',\n    '&pcy;': '\\u043F',\n    '&percnt;': '\\u0025',\n    '&period;': '\\u002E',\n    '&permil;': '\\u2030',\n    '&perp;': '\\u22A5',\n    '&pertenk;': '\\u2031',\n    '&pfr;': '\\uD835\\uDD2D',\n    '&phi;': '\\u03C6',\n    '&phiv;': '\\u03D5',\n    '&phmmat;': '\\u2133',\n    '&phone;': '\\u260E',\n    '&pi;': '\\u03C0',\n    '&pitchfork;': '\\u22D4',\n    '&piv;': '\\u03D6',\n    '&planck;': '\\u210F',\n    '&planckh;': '\\u210E',\n    '&plankv;': '\\u210F',\n    '&plus;': '\\u002B',\n    '&plusacir;': '\\u2A23',\n    '&plusb;': '\\u229E',\n    '&pluscir;': '\\u2A22',\n    '&plusdo;': '\\u2214',\n    '&plusdu;': '\\u2A25',\n    '&pluse;': '\\u2A72',\n    '&plusmn': '\\u00B1',\n    '&plusmn;': '\\u00B1',\n    '&plussim;': '\\u2A26',\n    '&plustwo;': '\\u2A27',\n    '&pm;': '\\u00B1',\n    '&pointint;': '\\u2A15',\n    '&popf;': '\\uD835\\uDD61',\n    '&pound': '\\u00A3',\n    '&pound;': '\\u00A3',\n    '&pr;': '\\u227A',\n    '&prE;': '\\u2AB3',\n    '&prap;': '\\u2AB7',\n    '&prcue;': '\\u227C',\n    '&pre;': '\\u2AAF',\n    '&prec;': '\\u227A',\n    '&precapprox;': '\\u2AB7',\n    '&preccurlyeq;': '\\u227C',\n    '&preceq;': '\\u2AAF',\n    '&precnapprox;': '\\u2AB9',\n    '&precneqq;': '\\u2AB5',\n    '&precnsim;': '\\u22E8',\n    '&precsim;': '\\u227E',\n    '&prime;': '\\u2032',\n    '&primes;': '\\u2119',\n    '&prnE;': '\\u2AB5',\n    '&prnap;': '\\u2AB9',\n    '&prnsim;': '\\u22E8',\n    '&prod;': '\\u220F',\n    '&profalar;': '\\u232E',\n    '&profline;': '\\u2312',\n    '&profsurf;': '\\u2313',\n    '&prop;': '\\u221D',\n    '&propto;': '\\u221D',\n    '&prsim;': '\\u227E',\n    '&prurel;': '\\u22B0',\n    '&pscr;': '\\uD835\\uDCC5',\n    '&psi;': '\\u03C8',\n    '&puncsp;': '\\u2008',\n    '&qfr;': '\\uD835\\uDD2E',\n    '&qint;': '\\u2A0C',\n    '&qopf;': '\\uD835\\uDD62',\n    '&qprime;': '\\u2057',\n    '&qscr;': '\\uD835\\uDCC6',\n    '&quaternions;': '\\u210D',\n    '&quatint;': '\\u2A16',\n    '&quest;': '\\u003F',\n    '&questeq;': '\\u225F',\n    '&quot': '\\u0022',\n    '&quot;': '\\u0022',\n    '&rAarr;': '\\u21DB',\n    '&rArr;': '\\u21D2',\n    '&rAtail;': '\\u291C',\n    '&rBarr;': '\\u290F',\n    '&rHar;': '\\u2964',\n    '&race;': '\\u223D\\u0331',\n    '&racute;': '\\u0155',\n    '&radic;': '\\u221A',\n    '&raemptyv;': '\\u29B3',\n    '&rang;': '\\u27E9',\n    '&rangd;': '\\u2992',\n    '&range;': '\\u29A5',\n    '&rangle;': '\\u27E9',\n    '&raquo': '\\u00BB',\n    '&raquo;': '\\u00BB',\n    '&rarr;': '\\u2192',\n    '&rarrap;': '\\u2975',\n    '&rarrb;': '\\u21E5',\n    '&rarrbfs;': '\\u2920',\n    '&rarrc;': '\\u2933',\n    '&rarrfs;': '\\u291E',\n    '&rarrhk;': '\\u21AA',\n    '&rarrlp;': '\\u21AC',\n    '&rarrpl;': '\\u2945',\n    '&rarrsim;': '\\u2974',\n    '&rarrtl;': '\\u21A3',\n    '&rarrw;': '\\u219D',\n    '&ratail;': '\\u291A',\n    '&ratio;': '\\u2236',\n    '&rationals;': '\\u211A',\n    '&rbarr;': '\\u290D',\n    '&rbbrk;': '\\u2773',\n    '&rbrace;': '\\u007D',\n    '&rbrack;': '\\u005D',\n    '&rbrke;': '\\u298C',\n    '&rbrksld;': '\\u298E',\n    '&rbrkslu;': '\\u2990',\n    '&rcaron;': '\\u0159',\n    '&rcedil;': '\\u0157',\n    '&rceil;': '\\u2309',\n    '&rcub;': '\\u007D',\n    '&rcy;': '\\u0440',\n    '&rdca;': '\\u2937',\n    '&rdldhar;': '\\u2969',\n    '&rdquo;': '\\u201D',\n    '&rdquor;': '\\u201D',\n    '&rdsh;': '\\u21B3',\n    '&real;': '\\u211C',\n    '&realine;': '\\u211B',\n    '&realpart;': '\\u211C',\n    '&reals;': '\\u211D',\n    '&rect;': '\\u25AD',\n    '&reg': '\\u00AE',\n    '&reg;': '\\u00AE',\n    '&rfisht;': '\\u297D',\n    '&rfloor;': '\\u230B',\n    '&rfr;': '\\uD835\\uDD2F',\n    '&rhard;': '\\u21C1',\n    '&rharu;': '\\u21C0',\n    '&rharul;': '\\u296C',\n    '&rho;': '\\u03C1',\n    '&rhov;': '\\u03F1',\n    '&rightarrow;': '\\u2192',\n    '&rightarrowtail;': '\\u21A3',\n    '&rightharpoondown;': '\\u21C1',\n    '&rightharpoonup;': '\\u21C0',\n    '&rightleftarrows;': '\\u21C4',\n    '&rightleftharpoons;': '\\u21CC',\n    '&rightrightarrows;': '\\u21C9',\n    '&rightsquigarrow;': '\\u219D',\n    '&rightthreetimes;': '\\u22CC',\n    '&ring;': '\\u02DA',\n    '&risingdotseq;': '\\u2253',\n    '&rlarr;': '\\u21C4',\n    '&rlhar;': '\\u21CC',\n    '&rlm;': '\\u200F',\n    '&rmoust;': '\\u23B1',\n    '&rmoustache;': '\\u23B1',\n    '&rnmid;': '\\u2AEE',\n    '&roang;': '\\u27ED',\n    '&roarr;': '\\u21FE',\n    '&robrk;': '\\u27E7',\n    '&ropar;': '\\u2986',\n    '&ropf;': '\\uD835\\uDD63',\n    '&roplus;': '\\u2A2E',\n    '&rotimes;': '\\u2A35',\n    '&rpar;': '\\u0029',\n    '&rpargt;': '\\u2994',\n    '&rppolint;': '\\u2A12',\n    '&rrarr;': '\\u21C9',\n    '&rsaquo;': '\\u203A',\n    '&rscr;': '\\uD835\\uDCC7',\n    '&rsh;': '\\u21B1',\n    '&rsqb;': '\\u005D',\n    '&rsquo;': '\\u2019',\n    '&rsquor;': '\\u2019',\n    '&rthree;': '\\u22CC',\n    '&rtimes;': '\\u22CA',\n    '&rtri;': '\\u25B9',\n    '&rtrie;': '\\u22B5',\n    '&rtrif;': '\\u25B8',\n    '&rtriltri;': '\\u29CE',\n    '&ruluhar;': '\\u2968',\n    '&rx;': '\\u211E',\n    '&sacute;': '\\u015B',\n    '&sbquo;': '\\u201A',\n    '&sc;': '\\u227B',\n    '&scE;': '\\u2AB4',\n    '&scap;': '\\u2AB8',\n    '&scaron;': '\\u0161',\n    '&sccue;': '\\u227D',\n    '&sce;': '\\u2AB0',\n    '&scedil;': '\\u015F',\n    '&scirc;': '\\u015D',\n    '&scnE;': '\\u2AB6',\n    '&scnap;': '\\u2ABA',\n    '&scnsim;': '\\u22E9',\n    '&scpolint;': '\\u2A13',\n    '&scsim;': '\\u227F',\n    '&scy;': '\\u0441',\n    '&sdot;': '\\u22C5',\n    '&sdotb;': '\\u22A1',\n    '&sdote;': '\\u2A66',\n    '&seArr;': '\\u21D8',\n    '&searhk;': '\\u2925',\n    '&searr;': '\\u2198',\n    '&searrow;': '\\u2198',\n    '&sect': '\\u00A7',\n    '&sect;': '\\u00A7',\n    '&semi;': '\\u003B',\n    '&seswar;': '\\u2929',\n    '&setminus;': '\\u2216',\n    '&setmn;': '\\u2216',\n    '&sext;': '\\u2736',\n    '&sfr;': '\\uD835\\uDD30',\n    '&sfrown;': '\\u2322',\n    '&sharp;': '\\u266F',\n    '&shchcy;': '\\u0449',\n    '&shcy;': '\\u0448',\n    '&shortmid;': '\\u2223',\n    '&shortparallel;': '\\u2225',\n    '&shy': '\\u00AD',\n    '&shy;': '\\u00AD',\n    '&sigma;': '\\u03C3',\n    '&sigmaf;': '\\u03C2',\n    '&sigmav;': '\\u03C2',\n    '&sim;': '\\u223C',\n    '&simdot;': '\\u2A6A',\n    '&sime;': '\\u2243',\n    '&simeq;': '\\u2243',\n    '&simg;': '\\u2A9E',\n    '&simgE;': '\\u2AA0',\n    '&siml;': '\\u2A9D',\n    '&simlE;': '\\u2A9F',\n    '&simne;': '\\u2246',\n    '&simplus;': '\\u2A24',\n    '&simrarr;': '\\u2972',\n    '&slarr;': '\\u2190',\n    '&smallsetminus;': '\\u2216',\n    '&smashp;': '\\u2A33',\n    '&smeparsl;': '\\u29E4',\n    '&smid;': '\\u2223',\n    '&smile;': '\\u2323',\n    '&smt;': '\\u2AAA',\n    '&smte;': '\\u2AAC',\n    '&smtes;': '\\u2AAC\\uFE00',\n    '&softcy;': '\\u044C',\n    '&sol;': '\\u002F',\n    '&solb;': '\\u29C4',\n    '&solbar;': '\\u233F',\n    '&sopf;': '\\uD835\\uDD64',\n    '&spades;': '\\u2660',\n    '&spadesuit;': '\\u2660',\n    '&spar;': '\\u2225',\n    '&sqcap;': '\\u2293',\n    '&sqcaps;': '\\u2293\\uFE00',\n    '&sqcup;': '\\u2294',\n    '&sqcups;': '\\u2294\\uFE00',\n    '&sqsub;': '\\u228F',\n    '&sqsube;': '\\u2291',\n    '&sqsubset;': '\\u228F',\n    '&sqsubseteq;': '\\u2291',\n    '&sqsup;': '\\u2290',\n    '&sqsupe;': '\\u2292',\n    '&sqsupset;': '\\u2290',\n    '&sqsupseteq;': '\\u2292',\n    '&squ;': '\\u25A1',\n    '&square;': '\\u25A1',\n    '&squarf;': '\\u25AA',\n    '&squf;': '\\u25AA',\n    '&srarr;': '\\u2192',\n    '&sscr;': '\\uD835\\uDCC8',\n    '&ssetmn;': '\\u2216',\n    '&ssmile;': '\\u2323',\n    '&sstarf;': '\\u22C6',\n    '&star;': '\\u2606',\n    '&starf;': '\\u2605',\n    '&straightepsilon;': '\\u03F5',\n    '&straightphi;': '\\u03D5',\n    '&strns;': '\\u00AF',\n    '&sub;': '\\u2282',\n    '&subE;': '\\u2AC5',\n    '&subdot;': '\\u2ABD',\n    '&sube;': '\\u2286',\n    '&subedot;': '\\u2AC3',\n    '&submult;': '\\u2AC1',\n    '&subnE;': '\\u2ACB',\n    '&subne;': '\\u228A',\n    '&subplus;': '\\u2ABF',\n    '&subrarr;': '\\u2979',\n    '&subset;': '\\u2282',\n    '&subseteq;': '\\u2286',\n    '&subseteqq;': '\\u2AC5',\n    '&subsetneq;': '\\u228A',\n    '&subsetneqq;': '\\u2ACB',\n    '&subsim;': '\\u2AC7',\n    '&subsub;': '\\u2AD5',\n    '&subsup;': '\\u2AD3',\n    '&succ;': '\\u227B',\n    '&succapprox;': '\\u2AB8',\n    '&succcurlyeq;': '\\u227D',\n    '&succeq;': '\\u2AB0',\n    '&succnapprox;': '\\u2ABA',\n    '&succneqq;': '\\u2AB6',\n    '&succnsim;': '\\u22E9',\n    '&succsim;': '\\u227F',\n    '&sum;': '\\u2211',\n    '&sung;': '\\u266A',\n    '&sup1': '\\u00B9',\n    '&sup1;': '\\u00B9',\n    '&sup2': '\\u00B2',\n    '&sup2;': '\\u00B2',\n    '&sup3': '\\u00B3',\n    '&sup3;': '\\u00B3',\n    '&sup;': '\\u2283',\n    '&supE;': '\\u2AC6',\n    '&supdot;': '\\u2ABE',\n    '&supdsub;': '\\u2AD8',\n    '&supe;': '\\u2287',\n    '&supedot;': '\\u2AC4',\n    '&suphsol;': '\\u27C9',\n    '&suphsub;': '\\u2AD7',\n    '&suplarr;': '\\u297B',\n    '&supmult;': '\\u2AC2',\n    '&supnE;': '\\u2ACC',\n    '&supne;': '\\u228B',\n    '&supplus;': '\\u2AC0',\n    '&supset;': '\\u2283',\n    '&supseteq;': '\\u2287',\n    '&supseteqq;': '\\u2AC6',\n    '&supsetneq;': '\\u228B',\n    '&supsetneqq;': '\\u2ACC',\n    '&supsim;': '\\u2AC8',\n    '&supsub;': '\\u2AD4',\n    '&supsup;': '\\u2AD6',\n    '&swArr;': '\\u21D9',\n    '&swarhk;': '\\u2926',\n    '&swarr;': '\\u2199',\n    '&swarrow;': '\\u2199',\n    '&swnwar;': '\\u292A',\n    '&szlig': '\\u00DF',\n    '&szlig;': '\\u00DF',\n    '&target;': '\\u2316',\n    '&tau;': '\\u03C4',\n    '&tbrk;': '\\u23B4',\n    '&tcaron;': '\\u0165',\n    '&tcedil;': '\\u0163',\n    '&tcy;': '\\u0442',\n    '&tdot;': '\\u20DB',\n    '&telrec;': '\\u2315',\n    '&tfr;': '\\uD835\\uDD31',\n    '&there4;': '\\u2234',\n    '&therefore;': '\\u2234',\n    '&theta;': '\\u03B8',\n    '&thetasym;': '\\u03D1',\n    '&thetav;': '\\u03D1',\n    '&thickapprox;': '\\u2248',\n    '&thicksim;': '\\u223C',\n    '&thinsp;': '\\u2009',\n    '&thkap;': '\\u2248',\n    '&thksim;': '\\u223C',\n    '&thorn': '\\u00FE',\n    '&thorn;': '\\u00FE',\n    '&tilde;': '\\u02DC',\n    '&times': '\\u00D7',\n    '&times;': '\\u00D7',\n    '&timesb;': '\\u22A0',\n    '&timesbar;': '\\u2A31',\n    '&timesd;': '\\u2A30',\n    '&tint;': '\\u222D',\n    '&toea;': '\\u2928',\n    '&top;': '\\u22A4',\n    '&topbot;': '\\u2336',\n    '&topcir;': '\\u2AF1',\n    '&topf;': '\\uD835\\uDD65',\n    '&topfork;': '\\u2ADA',\n    '&tosa;': '\\u2929',\n    '&tprime;': '\\u2034',\n    '&trade;': '\\u2122',\n    '&triangle;': '\\u25B5',\n    '&triangledown;': '\\u25BF',\n    '&triangleleft;': '\\u25C3',\n    '&trianglelefteq;': '\\u22B4',\n    '&triangleq;': '\\u225C',\n    '&triangleright;': '\\u25B9',\n    '&trianglerighteq;': '\\u22B5',\n    '&tridot;': '\\u25EC',\n    '&trie;': '\\u225C',\n    '&triminus;': '\\u2A3A',\n    '&triplus;': '\\u2A39',\n    '&trisb;': '\\u29CD',\n    '&tritime;': '\\u2A3B',\n    '&trpezium;': '\\u23E2',\n    '&tscr;': '\\uD835\\uDCC9',\n    '&tscy;': '\\u0446',\n    '&tshcy;': '\\u045B',\n    '&tstrok;': '\\u0167',\n    '&twixt;': '\\u226C',\n    '&twoheadleftarrow;': '\\u219E',\n    '&twoheadrightarrow;': '\\u21A0',\n    '&uArr;': '\\u21D1',\n    '&uHar;': '\\u2963',\n    '&uacute': '\\u00FA',\n    '&uacute;': '\\u00FA',\n    '&uarr;': '\\u2191',\n    '&ubrcy;': '\\u045E',\n    '&ubreve;': '\\u016D',\n    '&ucirc': '\\u00FB',\n    '&ucirc;': '\\u00FB',\n    '&ucy;': '\\u0443',\n    '&udarr;': '\\u21C5',\n    '&udblac;': '\\u0171',\n    '&udhar;': '\\u296E',\n    '&ufisht;': '\\u297E',\n    '&ufr;': '\\uD835\\uDD32',\n    '&ugrave': '\\u00F9',\n    '&ugrave;': '\\u00F9',\n    '&uharl;': '\\u21BF',\n    '&uharr;': '\\u21BE',\n    '&uhblk;': '\\u2580',\n    '&ulcorn;': '\\u231C',\n    '&ulcorner;': '\\u231C',\n    '&ulcrop;': '\\u230F',\n    '&ultri;': '\\u25F8',\n    '&umacr;': '\\u016B',\n    '&uml': '\\u00A8',\n    '&uml;': '\\u00A8',\n    '&uogon;': '\\u0173',\n    '&uopf;': '\\uD835\\uDD66',\n    '&uparrow;': '\\u2191',\n    '&updownarrow;': '\\u2195',\n    '&upharpoonleft;': '\\u21BF',\n    '&upharpoonright;': '\\u21BE',\n    '&uplus;': '\\u228E',\n    '&upsi;': '\\u03C5',\n    '&upsih;': '\\u03D2',\n    '&upsilon;': '\\u03C5',\n    '&upuparrows;': '\\u21C8',\n    '&urcorn;': '\\u231D',\n    '&urcorner;': '\\u231D',\n    '&urcrop;': '\\u230E',\n    '&uring;': '\\u016F',\n    '&urtri;': '\\u25F9',\n    '&uscr;': '\\uD835\\uDCCA',\n    '&utdot;': '\\u22F0',\n    '&utilde;': '\\u0169',\n    '&utri;': '\\u25B5',\n    '&utrif;': '\\u25B4',\n    '&uuarr;': '\\u21C8',\n    '&uuml': '\\u00FC',\n    '&uuml;': '\\u00FC',\n    '&uwangle;': '\\u29A7',\n    '&vArr;': '\\u21D5',\n    '&vBar;': '\\u2AE8',\n    '&vBarv;': '\\u2AE9',\n    '&vDash;': '\\u22A8',\n    '&vangrt;': '\\u299C',\n    '&varepsilon;': '\\u03F5',\n    '&varkappa;': '\\u03F0',\n    '&varnothing;': '\\u2205',\n    '&varphi;': '\\u03D5',\n    '&varpi;': '\\u03D6',\n    '&varpropto;': '\\u221D',\n    '&varr;': '\\u2195',\n    '&varrho;': '\\u03F1',\n    '&varsigma;': '\\u03C2',\n    '&varsubsetneq;': '\\u228A\\uFE00',\n    '&varsubsetneqq;': '\\u2ACB\\uFE00',\n    '&varsupsetneq;': '\\u228B\\uFE00',\n    '&varsupsetneqq;': '\\u2ACC\\uFE00',\n    '&vartheta;': '\\u03D1',\n    '&vartriangleleft;': '\\u22B2',\n    '&vartriangleright;': '\\u22B3',\n    '&vcy;': '\\u0432',\n    '&vdash;': '\\u22A2',\n    '&vee;': '\\u2228',\n    '&veebar;': '\\u22BB',\n    '&veeeq;': '\\u225A',\n    '&vellip;': '\\u22EE',\n    '&verbar;': '\\u007C',\n    '&vert;': '\\u007C',\n    '&vfr;': '\\uD835\\uDD33',\n    '&vltri;': '\\u22B2',\n    '&vnsub;': '\\u2282\\u20D2',\n    '&vnsup;': '\\u2283\\u20D2',\n    '&vopf;': '\\uD835\\uDD67',\n    '&vprop;': '\\u221D',\n    '&vrtri;': '\\u22B3',\n    '&vscr;': '\\uD835\\uDCCB',\n    '&vsubnE;': '\\u2ACB\\uFE00',\n    '&vsubne;': '\\u228A\\uFE00',\n    '&vsupnE;': '\\u2ACC\\uFE00',\n    '&vsupne;': '\\u228B\\uFE00',\n    '&vzigzag;': '\\u299A',\n    '&wcirc;': '\\u0175',\n    '&wedbar;': '\\u2A5F',\n    '&wedge;': '\\u2227',\n    '&wedgeq;': '\\u2259',\n    '&weierp;': '\\u2118',\n    '&wfr;': '\\uD835\\uDD34',\n    '&wopf;': '\\uD835\\uDD68',\n    '&wp;': '\\u2118',\n    '&wr;': '\\u2240',\n    '&wreath;': '\\u2240',\n    '&wscr;': '\\uD835\\uDCCC',\n    '&xcap;': '\\u22C2',\n    '&xcirc;': '\\u25EF',\n    '&xcup;': '\\u22C3',\n    '&xdtri;': '\\u25BD',\n    '&xfr;': '\\uD835\\uDD35',\n    '&xhArr;': '\\u27FA',\n    '&xharr;': '\\u27F7',\n    '&xi;': '\\u03BE',\n    '&xlArr;': '\\u27F8',\n    '&xlarr;': '\\u27F5',\n    '&xmap;': '\\u27FC',\n    '&xnis;': '\\u22FB',\n    '&xodot;': '\\u2A00',\n    '&xopf;': '\\uD835\\uDD69',\n    '&xoplus;': '\\u2A01',\n    '&xotime;': '\\u2A02',\n    '&xrArr;': '\\u27F9',\n    '&xrarr;': '\\u27F6',\n    '&xscr;': '\\uD835\\uDCCD',\n    '&xsqcup;': '\\u2A06',\n    '&xuplus;': '\\u2A04',\n    '&xutri;': '\\u25B3',\n    '&xvee;': '\\u22C1',\n    '&xwedge;': '\\u22C0',\n    '&yacute': '\\u00FD',\n    '&yacute;': '\\u00FD',\n    '&yacy;': '\\u044F',\n    '&ycirc;': '\\u0177',\n    '&ycy;': '\\u044B',\n    '&yen': '\\u00A5',\n    '&yen;': '\\u00A5',\n    '&yfr;': '\\uD835\\uDD36',\n    '&yicy;': '\\u0457',\n    '&yopf;': '\\uD835\\uDD6A',\n    '&yscr;': '\\uD835\\uDCCE',\n    '&yucy;': '\\u044E',\n    '&yuml': '\\u00FF',\n    '&yuml;': '\\u00FF',\n    '&zacute;': '\\u017A',\n    '&zcaron;': '\\u017E',\n    '&zcy;': '\\u0437',\n    '&zdot;': '\\u017C',\n    '&zeetrf;': '\\u2128',\n    '&zeta;': '\\u03B6',\n    '&zfr;': '\\uD835\\uDD37',\n    '&zhcy;': '\\u0436',\n    '&zigrarr;': '\\u21DD',\n    '&zopf;': '\\uD835\\uDD6B',\n    '&zscr;': '\\uD835\\uDCCF',\n    '&zwj;': '\\u200D',\n    '&zwnj;': '\\u200C'\n};\n\nexport default htmlEntities;\n", "import htmlEntities from './html-entities.js';\n\nexport function decodeHTMLEntities(str) {\n    return str.replace(/&(#\\d+|#x[a-f0-9]+|[a-z]+\\d*);?/gi, (match, entity) => {\n        if (typeof htmlEntities[match] === 'string') {\n            return htmlEntities[match];\n        }\n\n        if (entity.charAt(0) !== '#' || match.charAt(match.length - 1) !== ';') {\n            // keep as is, invalid or unknown sequence\n            return match;\n        }\n\n        let codePoint;\n        if (entity.charAt(1) === 'x') {\n            // hex\n            codePoint = parseInt(entity.substr(2), 16);\n        } else {\n            // dec\n            codePoint = parseInt(entity.substr(1), 10);\n        }\n\n        var output = '';\n\n        if ((codePoint >= 0xd800 && codePoint <= 0xdfff) || codePoint > 0x10ffff) {\n            // Invalid range, return a replacement character instead\n            return '\\uFFFD';\n        }\n\n        if (codePoint > 0xffff) {\n            codePoint -= 0x10000;\n            output += String.fromCharCode(((codePoint >>> 10) & 0x3ff) | 0xd800);\n            codePoint = 0xdc00 | (codePoint & 0x3ff);\n        }\n\n        output += String.fromCharCode(codePoint);\n\n        return output;\n    });\n}\n\nexport function escapeHtml(str) {\n    return str.trim().replace(/[<>\"'?&]/g, c => {\n        let hex = c.charCodeAt(0).toString(16);\n        if (hex.length < 2) {\n            hex = '0' + hex;\n        }\n        return '&#x' + hex.toUpperCase() + ';';\n    });\n}\n\nexport function textToHtml(str) {\n    let html = escapeHtml(str).replace(/\\n/g, '<br />');\n    return '<div>' + html + '</div>';\n}\n\nexport function htmlToText(str) {\n    str = str\n        // we can't process tags on multiple lines so remove newlines first\n        .replace(/\\r?\\n/g, '\\u0001')\n        .replace(/<\\!\\-\\-.*?\\-\\->/gi, ' ')\n\n        .replace(/<br\\b[^>]*>/gi, '\\n')\n        .replace(/<\\/?(p|div|table|tr|td|th)\\b[^>]*>/gi, '\\n\\n')\n        .replace(/<script\\b[^>]*>.*?<\\/script\\b[^>]*>/gi, ' ')\n        .replace(/^.*<body\\b[^>]*>/i, '')\n        .replace(/^.*<\\/head\\b[^>]*>/i, '')\n        .replace(/^.*<\\!doctype\\b[^>]*>/i, '')\n        .replace(/<\\/body\\b[^>]*>.*$/i, '')\n        .replace(/<\\/html\\b[^>]*>.*$/i, '')\n\n        .replace(/<a\\b[^>]*href\\s*=\\s*[\"']?([^\\s\"']+)[^>]*>/gi, ' ($1) ')\n\n        .replace(/<\\/?(span|em|i|strong|b|u|a)\\b[^>]*>/gi, '')\n\n        .replace(/<li\\b[^>]*>[\\n\\u0001\\s]*/gi, '* ')\n\n        .replace(/<hr\\b[^>]*>/g, '\\n-------------\\n')\n\n        .replace(/<[^>]*>/g, ' ')\n\n        // convert linebreak placeholders back to newlines\n        .replace(/\\u0001/g, '\\n')\n\n        .replace(/[ \\t]+/g, ' ')\n\n        .replace(/^\\s+$/gm, '')\n\n        .replace(/\\n\\n+/g, '\\n\\n')\n        .replace(/^\\n+/, '\\n')\n        .replace(/\\n+$/, '\\n');\n\n    str = decodeHTMLEntities(str);\n\n    return str;\n}\n\nfunction formatTextAddress(address) {\n    return []\n        .concat(address.name || [])\n        .concat(address.name ? `<${address.address}>` : address.address)\n        .join(' ');\n}\n\nfunction formatTextAddresses(addresses) {\n    let parts = [];\n\n    let processAddress = (address, partCounter) => {\n        if (partCounter) {\n            parts.push(', ');\n        }\n\n        if (address.group) {\n            let groupStart = `${address.name}:`;\n            let groupEnd = `;`;\n\n            parts.push(groupStart);\n            address.group.forEach(processAddress);\n            parts.push(groupEnd);\n        } else {\n            parts.push(formatTextAddress(address));\n        }\n    };\n\n    addresses.forEach(processAddress);\n\n    return parts.join('');\n}\n\nfunction formatHtmlAddress(address) {\n    return `<a href=\"mailto:${escapeHtml(address.address)}\" class=\"postal-email-address\">${escapeHtml(address.name || `<${address.address}>`)}</a>`;\n}\n\nfunction formatHtmlAddresses(addresses) {\n    let parts = [];\n\n    let processAddress = (address, partCounter) => {\n        if (partCounter) {\n            parts.push('<span class=\"postal-email-address-separator\">, </span>');\n        }\n\n        if (address.group) {\n            let groupStart = `<span class=\"postal-email-address-group\">${escapeHtml(address.name)}:</span>`;\n            let groupEnd = `<span class=\"postal-email-address-group\">;</span>`;\n\n            parts.push(groupStart);\n            address.group.forEach(processAddress);\n            parts.push(groupEnd);\n        } else {\n            parts.push(formatHtmlAddress(address));\n        }\n    };\n\n    addresses.forEach(processAddress);\n\n    return parts.join(' ');\n}\n\nfunction foldLines(str, lineLength, afterSpace) {\n    str = (str || '').toString();\n    lineLength = lineLength || 76;\n\n    let pos = 0,\n        len = str.length,\n        result = '',\n        line,\n        match;\n\n    while (pos < len) {\n        line = str.substr(pos, lineLength);\n        if (line.length < lineLength) {\n            result += line;\n            break;\n        }\n        if ((match = line.match(/^[^\\n\\r]*(\\r?\\n|\\r)/))) {\n            line = match[0];\n            result += line;\n            pos += line.length;\n            continue;\n        } else if ((match = line.match(/(\\s+)[^\\s]*$/)) && match[0].length - (afterSpace ? (match[1] || '').length : 0) < line.length) {\n            line = line.substr(0, line.length - (match[0].length - (afterSpace ? (match[1] || '').length : 0)));\n        } else if ((match = str.substr(pos + line.length).match(/^[^\\s]+(\\s*)/))) {\n            line = line + match[0].substr(0, match[0].length - (!afterSpace ? (match[1] || '').length : 0));\n        }\n\n        result += line;\n        pos += line.length;\n        if (pos < len) {\n            result += '\\r\\n';\n        }\n    }\n\n    return result;\n}\n\nexport function formatTextHeader(message) {\n    let rows = [];\n\n    if (message.from) {\n        rows.push({ key: 'From', val: formatTextAddress(message.from) });\n    }\n\n    if (message.subject) {\n        rows.push({ key: 'Subject', val: message.subject });\n    }\n\n    if (message.date) {\n        let dateOptions = {\n            year: 'numeric',\n            month: 'numeric',\n            day: 'numeric',\n            hour: 'numeric',\n            minute: 'numeric',\n            second: 'numeric',\n            hour12: false\n        };\n\n        let dateStr = typeof Intl === 'undefined' ? message.date : new Intl.DateTimeFormat('default', dateOptions).format(new Date(message.date));\n\n        rows.push({ key: 'Date', val: dateStr });\n    }\n\n    if (message.to && message.to.length) {\n        rows.push({ key: 'To', val: formatTextAddresses(message.to) });\n    }\n\n    if (message.cc && message.cc.length) {\n        rows.push({ key: 'Cc', val: formatTextAddresses(message.cc) });\n    }\n\n    if (message.bcc && message.bcc.length) {\n        rows.push({ key: 'Bcc', val: formatTextAddresses(message.bcc) });\n    }\n\n    // Align keys and values by adding space between these two\n    // Also make sure that the separator line is as long as the longest line\n    // Should end up with something like this:\n    /*\n    -----------------------------\n    From:    xx xx <xxx@xxx.com>\n    Subject: Example Subject\n    Date:    16/02/2021, 02:57:06\n    To:      not@found.com\n    -----------------------------\n    */\n\n    let maxKeyLength = rows\n        .map(r => r.key.length)\n        .reduce((acc, cur) => {\n            return cur > acc ? cur : acc;\n        }, 0);\n\n    rows = rows.flatMap(row => {\n        let sepLen = maxKeyLength - row.key.length;\n        let prefix = `${row.key}: ${' '.repeat(sepLen)}`;\n        let emptyPrefix = `${' '.repeat(row.key.length + 1)} ${' '.repeat(sepLen)}`;\n\n        let foldedLines = foldLines(row.val, 80, true)\n            .split(/\\r?\\n/)\n            .map(line => line.trim());\n\n        return foldedLines.map((line, i) => `${i ? emptyPrefix : prefix}${line}`);\n    });\n\n    let maxLineLength = rows\n        .map(r => r.length)\n        .reduce((acc, cur) => {\n            return cur > acc ? cur : acc;\n        }, 0);\n\n    let lineMarker = '-'.repeat(maxLineLength);\n\n    let template = `\n${lineMarker}\n${rows.join('\\n')}\n${lineMarker}\n`;\n\n    return template;\n}\n\nexport function formatHtmlHeader(message) {\n    let rows = [];\n\n    if (message.from) {\n        rows.push(`<div class=\"postal-email-header-key\">From</div><div class=\"postal-email-header-value\">${formatHtmlAddress(message.from)}</div>`);\n    }\n\n    if (message.subject) {\n        rows.push(\n            `<div class=\"postal-email-header-key\">Subject</div><div class=\"postal-email-header-value postal-email-header-subject\">${escapeHtml(\n                message.subject\n            )}</div>`\n        );\n    }\n\n    if (message.date) {\n        let dateOptions = {\n            year: 'numeric',\n            month: 'numeric',\n            day: 'numeric',\n            hour: 'numeric',\n            minute: 'numeric',\n            second: 'numeric',\n            hour12: false\n        };\n\n        let dateStr = typeof Intl === 'undefined' ? message.date : new Intl.DateTimeFormat('default', dateOptions).format(new Date(message.date));\n\n        rows.push(\n            `<div class=\"postal-email-header-key\">Date</div><div class=\"postal-email-header-value postal-email-header-date\" data-date=\"${escapeHtml(\n                message.date\n            )}\">${escapeHtml(dateStr)}</div>`\n        );\n    }\n\n    if (message.to && message.to.length) {\n        rows.push(`<div class=\"postal-email-header-key\">To</div><div class=\"postal-email-header-value\">${formatHtmlAddresses(message.to)}</div>`);\n    }\n\n    if (message.cc && message.cc.length) {\n        rows.push(`<div class=\"postal-email-header-key\">Cc</div><div class=\"postal-email-header-value\">${formatHtmlAddresses(message.cc)}</div>`);\n    }\n\n    if (message.bcc && message.bcc.length) {\n        rows.push(`<div class=\"postal-email-header-key\">Bcc</div><div class=\"postal-email-header-value\">${formatHtmlAddresses(message.bcc)}</div>`);\n    }\n\n    let template = `<div class=\"postal-email-header\">${rows.length ? '<div class=\"postal-email-header-row\">' : ''}${rows.join(\n        '</div>\\n<div class=\"postal-email-header-row\">'\n    )}${rows.length ? '</div>' : ''}</div>`;\n\n    return template;\n}\n", "import { decodeWords } from './decode-strings.js';\n\n/**\n * Converts tokens for a single address into an address object\n *\n * @param {Array} tokens Tokens object\n * @return {Object} Address object\n */\nfunction _handleAddress(tokens) {\n    let token;\n    let isGroup = false;\n    let state = 'text';\n    let address;\n    let addresses = [];\n    let data = {\n        address: [],\n        comment: [],\n        group: [],\n        text: []\n    };\n    let i;\n    let len;\n\n    // Filter out <addresses>, (comments) and regular text\n    for (i = 0, len = tokens.length; i < len; i++) {\n        token = tokens[i];\n        if (token.type === 'operator') {\n            switch (token.value) {\n                case '<':\n                    state = 'address';\n                    break;\n                case '(':\n                    state = 'comment';\n                    break;\n                case ':':\n                    state = 'group';\n                    isGroup = true;\n                    break;\n                default:\n                    state = 'text';\n            }\n        } else if (token.value) {\n            if (state === 'address') {\n                // handle use case where unquoted name includes a \"<\"\n                // Apple Mail truncates everything between an unexpected < and an address\n                // and so will we\n                token.value = token.value.replace(/^[^<]*<\\s*/, '');\n            }\n            data[state].push(token.value);\n        }\n    }\n\n    // If there is no text but a comment, replace the two\n    if (!data.text.length && data.comment.length) {\n        data.text = data.comment;\n        data.comment = [];\n    }\n\n    if (isGroup) {\n        // http://tools.ietf.org/html/rfc2822#appendix-A.1.3\n        data.text = data.text.join(' ');\n        addresses.push({\n            name: decodeWords(data.text || (address && address.name)),\n            group: data.group.length ? addressParser(data.group.join(',')) : []\n        });\n    } else {\n        // If no address was found, try to detect one from regular text\n        if (!data.address.length && data.text.length) {\n            for (i = data.text.length - 1; i >= 0; i--) {\n                if (data.text[i].match(/^[^@\\s]+@[^@\\s]+$/)) {\n                    data.address = data.text.splice(i, 1);\n                    break;\n                }\n            }\n\n            let _regexHandler = function (address) {\n                if (!data.address.length) {\n                    data.address = [address.trim()];\n                    return ' ';\n                } else {\n                    return address;\n                }\n            };\n\n            // still no address\n            if (!data.address.length) {\n                for (i = data.text.length - 1; i >= 0; i--) {\n                    // fixed the regex to parse email address correctly when email address has more than one @\n                    data.text[i] = data.text[i].replace(/\\s*\\b[^@\\s]+@[^\\s]+\\b\\s*/, _regexHandler).trim();\n                    if (data.address.length) {\n                        break;\n                    }\n                }\n            }\n        }\n\n        // If there's still is no text but a comment exixts, replace the two\n        if (!data.text.length && data.comment.length) {\n            data.text = data.comment;\n            data.comment = [];\n        }\n\n        // Keep only the first address occurence, push others to regular text\n        if (data.address.length > 1) {\n            data.text = data.text.concat(data.address.splice(1));\n        }\n\n        // Join values with spaces\n        data.text = data.text.join(' ');\n        data.address = data.address.join(' ');\n\n        if (!data.address && /^=\\?[^=]+?=$/.test(data.text.trim())) {\n            // try to extract words from text content\n            const parsedSubAddresses = addressParser(decodeWords(data.text));\n            if (parsedSubAddresses && parsedSubAddresses.length) {\n                return parsedSubAddresses;\n            }\n        }\n\n        if (!data.address && isGroup) {\n            return [];\n        } else {\n            address = {\n                address: data.address || data.text || '',\n                name: decodeWords(data.text || data.address || '')\n            };\n\n            if (address.address === address.name) {\n                if ((address.address || '').match(/@/)) {\n                    address.name = '';\n                } else {\n                    address.address = '';\n                }\n            }\n\n            addresses.push(address);\n        }\n    }\n\n    return addresses;\n}\n\n/**\n * Creates a Tokenizer object for tokenizing address field strings\n *\n * @constructor\n * @param {String} str Address field string\n */\nclass Tokenizer {\n    constructor(str) {\n        this.str = (str || '').toString();\n        this.operatorCurrent = '';\n        this.operatorExpecting = '';\n        this.node = null;\n        this.escaped = false;\n\n        this.list = [];\n        /**\n         * Operator tokens and which tokens are expected to end the sequence\n         */\n        this.operators = {\n            '\"': '\"',\n            '(': ')',\n            '<': '>',\n            ',': '',\n            ':': ';',\n            // Semicolons are not a legal delimiter per the RFC2822 grammar other\n            // than for terminating a group, but they are also not valid for any\n            // other use in this context.  Given that some mail clients have\n            // historically allowed the semicolon as a delimiter equivalent to the\n            // comma in their UI, it makes sense to treat them the same as a comma\n            // when used outside of a group.\n            ';': ''\n        };\n    }\n\n    /**\n     * Tokenizes the original input string\n     *\n     * @return {Array} An array of operator|text tokens\n     */\n    tokenize() {\n        let chr,\n            list = [];\n        for (let i = 0, len = this.str.length; i < len; i++) {\n            chr = this.str.charAt(i);\n            this.checkChar(chr);\n        }\n\n        this.list.forEach(node => {\n            node.value = (node.value || '').toString().trim();\n            if (node.value) {\n                list.push(node);\n            }\n        });\n\n        return list;\n    }\n\n    /**\n     * Checks if a character is an operator or text and acts accordingly\n     *\n     * @param {String} chr Character from the address field\n     */\n    checkChar(chr) {\n        if (this.escaped) {\n            // ignore next condition blocks\n        } else if (chr === this.operatorExpecting) {\n            this.node = {\n                type: 'operator',\n                value: chr\n            };\n            this.list.push(this.node);\n            this.node = null;\n            this.operatorExpecting = '';\n            this.escaped = false;\n            return;\n        } else if (!this.operatorExpecting && chr in this.operators) {\n            this.node = {\n                type: 'operator',\n                value: chr\n            };\n            this.list.push(this.node);\n            this.node = null;\n            this.operatorExpecting = this.operators[chr];\n            this.escaped = false;\n            return;\n        } else if (['\"', \"'\"].includes(this.operatorExpecting) && chr === '\\\\') {\n            this.escaped = true;\n            return;\n        }\n\n        if (!this.node) {\n            this.node = {\n                type: 'text',\n                value: ''\n            };\n            this.list.push(this.node);\n        }\n\n        if (chr === '\\n') {\n            // Convert newlines to spaces. Carriage return is ignored as \\r and \\n usually\n            // go together anyway and there already is a WS for \\n. Lone \\r means something is fishy.\n            chr = ' ';\n        }\n\n        if (chr.charCodeAt(0) >= 0x21 || [' ', '\\t'].includes(chr)) {\n            // skip command bytes\n            this.node.value += chr;\n        }\n\n        this.escaped = false;\n    }\n}\n\n/**\n * Parses structured e-mail addresses from an address field\n *\n * Example:\n *\n *    'Name <address@domain>'\n *\n * will be converted to\n *\n *     [{name: 'Name', address: 'address@domain'}]\n *\n * @param {String} str Address field\n * @return {Array} An array of address objects\n */\nfunction addressParser(str, options) {\n    options = options || {};\n\n    let tokenizer = new Tokenizer(str);\n    let tokens = tokenizer.tokenize();\n\n    let addresses = [];\n    let address = [];\n    let parsedAddresses = [];\n\n    tokens.forEach(token => {\n        if (token.type === 'operator' && (token.value === ',' || token.value === ';')) {\n            if (address.length) {\n                addresses.push(address);\n            }\n            address = [];\n        } else {\n            address.push(token);\n        }\n    });\n\n    if (address.length) {\n        addresses.push(address);\n    }\n\n    addresses.forEach(address => {\n        address = _handleAddress(address);\n        if (address.length) {\n            parsedAddresses = parsedAddresses.concat(address);\n        }\n    });\n\n    if (options.flatten) {\n        let addresses = [];\n        let walkAddressList = list => {\n            list.forEach(address => {\n                if (address.group) {\n                    return walkAddressList(address.group);\n                } else {\n                    addresses.push(address);\n                }\n            });\n        };\n        walkAddressList(parsedAddresses);\n        return addresses;\n    }\n\n    return parsedAddresses;\n}\n\n// expose to the world\nexport default addressParser;\n", "// Code from: https://gist.githubusercontent.com/jonleighton/958841/raw/fb05a8632efb75d85d43deb593df04367ce48371/base64ArrayBuffer.js\n\n// Converts an ArrayBuffer directly to base64, without any intermediate 'convert to string then\n// use window.btoa' step. According to my tests, this appears to be a faster approach:\n// http://jsperf.com/encoding-xhr-image-data/5\n\n/*\nMIT LICENSE\n\nCopyright 2011 Jon Leighton\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n*/\n\nexport function base64ArrayBuffer(arrayBuffer) {\n    var base64 = '';\n    var encodings = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\n    var bytes = new Uint8Array(arrayBuffer);\n    var byteLength = bytes.byteLength;\n    var byteRemainder = byteLength % 3;\n    var mainLength = byteLength - byteRemainder;\n\n    var a, b, c, d;\n    var chunk;\n\n    // Main loop deals with bytes in chunks of 3\n    for (var i = 0; i < mainLength; i = i + 3) {\n        // Combine the three bytes into a single integer\n        chunk = (bytes[i] << 16) | (bytes[i + 1] << 8) | bytes[i + 2];\n\n        // Use bitmasks to extract 6-bit segments from the triplet\n        a = (chunk & 16515072) >> 18; // 16515072 = (2^6 - 1) << 18\n        b = (chunk & 258048) >> 12; // 258048   = (2^6 - 1) << 12\n        c = (chunk & 4032) >> 6; // 4032     = (2^6 - 1) << 6\n        d = chunk & 63; // 63       = 2^6 - 1\n\n        // Convert the raw binary segments to the appropriate ASCII encoding\n        base64 += encodings[a] + encodings[b] + encodings[c] + encodings[d];\n    }\n\n    // Deal with the remaining bytes and padding\n    if (byteRemainder == 1) {\n        chunk = bytes[mainLength];\n\n        a = (chunk & 252) >> 2; // 252 = (2^6 - 1) << 2\n\n        // Set the 4 least significant bits to zero\n        b = (chunk & 3) << 4; // 3   = 2^2 - 1\n\n        base64 += encodings[a] + encodings[b] + '==';\n    } else if (byteRemainder == 2) {\n        chunk = (bytes[mainLength] << 8) | bytes[mainLength + 1];\n\n        a = (chunk & 64512) >> 10; // 64512 = (2^6 - 1) << 10\n        b = (chunk & 1008) >> 4; // 1008  = (2^6 - 1) << 4\n\n        // Set the 2 least significant bits to zero\n        c = (chunk & 15) << 2; // 15    = 2^4 - 1\n\n        base64 += encodings[a] + encodings[b] + encodings[c] + '=';\n    }\n\n    return base64;\n}\n", "import MimeNode from './mime-node.js';\nimport { textToHtml, htmlToText, formatTextHeader, formatHtmlHeader } from './text-format.js';\nimport addressParser from './address-parser.js';\nimport { decodeWords, textEncoder, blobToArrayBuffer } from './decode-strings.js';\nimport { base64ArrayBuffer } from './base64-encoder.js';\n\nexport { addressParser, decodeWords };\n\nexport default class PostalMime {\n    static parse(buf, options) {\n        const parser = new PostalMime(options);\n        return parser.parse(buf);\n    }\n\n    constructor(options) {\n        this.options = options || {};\n\n        this.root = this.currentNode = new MimeNode({\n            postalMime: this\n        });\n        this.boundaries = [];\n\n        this.textContent = {};\n        this.attachments = [];\n\n        this.attachmentEncoding =\n            (this.options.attachmentEncoding || '')\n                .toString()\n                .replace(/[-_\\s]/g, '')\n                .trim()\n                .toLowerCase() || 'arraybuffer';\n\n        this.started = false;\n    }\n\n    async finalize() {\n        // close all pending nodes\n        await this.root.finalize();\n    }\n\n    async processLine(line, isFinal) {\n        let boundaries = this.boundaries;\n\n        // check if this is a mime boundary\n        if (boundaries.length && line.length > 2 && line[0] === 0x2d && line[1] === 0x2d) {\n            // could be a boundary marker\n            for (let i = boundaries.length - 1; i >= 0; i--) {\n                let boundary = boundaries[i];\n\n                if (line.length !== boundary.value.length + 2 && line.length !== boundary.value.length + 4) {\n                    continue;\n                }\n\n                let isTerminator = line.length === boundary.value.length + 4;\n\n                if (isTerminator && (line[line.length - 2] !== 0x2d || line[line.length - 1] !== 0x2d)) {\n                    continue;\n                }\n\n                let boudaryMatches = true;\n                for (let i = 0; i < boundary.value.length; i++) {\n                    if (line[i + 2] !== boundary.value[i]) {\n                        boudaryMatches = false;\n                        break;\n                    }\n                }\n                if (!boudaryMatches) {\n                    continue;\n                }\n\n                if (isTerminator) {\n                    await boundary.node.finalize();\n\n                    this.currentNode = boundary.node.parentNode || this.root;\n                } else {\n                    // finalize any open child nodes (should be just one though)\n                    await boundary.node.finalizeChildNodes();\n\n                    this.currentNode = new MimeNode({\n                        postalMime: this,\n                        parentNode: boundary.node\n                    });\n                }\n\n                if (isFinal) {\n                    return this.finalize();\n                }\n\n                return;\n            }\n        }\n\n        this.currentNode.feed(line);\n\n        if (isFinal) {\n            return this.finalize();\n        }\n    }\n\n    readLine() {\n        let startPos = this.readPos;\n        let endPos = this.readPos;\n\n        let res = () => {\n            return {\n                bytes: new Uint8Array(this.buf, startPos, endPos - startPos),\n                done: this.readPos >= this.av.length\n            };\n        };\n\n        while (this.readPos < this.av.length) {\n            const c = this.av[this.readPos++];\n\n            if (c !== 0x0d && c !== 0x0a) {\n                endPos = this.readPos;\n            }\n\n            if (c === 0x0a) {\n                return res();\n            }\n        }\n\n        return res();\n    }\n\n    async processNodeTree() {\n        // get text nodes\n\n        let textContent = {};\n\n        let textTypes = new Set();\n        let textMap = (this.textMap = new Map());\n\n        let forceRfc822Attachments = this.forceRfc822Attachments();\n\n        let walk = async (node, alternative, related) => {\n            alternative = alternative || false;\n            related = related || false;\n\n            if (!node.contentType.multipart) {\n                // is it inline message/rfc822\n                if (this.isInlineMessageRfc822(node) && !forceRfc822Attachments) {\n                    const subParser = new PostalMime();\n                    node.subMessage = await subParser.parse(node.content);\n\n                    if (!textMap.has(node)) {\n                        textMap.set(node, {});\n                    }\n\n                    let textEntry = textMap.get(node);\n\n                    // default to text if there is no content\n                    if (node.subMessage.text || !node.subMessage.html) {\n                        textEntry.plain = textEntry.plain || [];\n                        textEntry.plain.push({ type: 'subMessage', value: node.subMessage });\n                        textTypes.add('plain');\n                    }\n\n                    if (node.subMessage.html) {\n                        textEntry.html = textEntry.html || [];\n                        textEntry.html.push({ type: 'subMessage', value: node.subMessage });\n                        textTypes.add('html');\n                    }\n\n                    if (subParser.textMap) {\n                        subParser.textMap.forEach((subTextEntry, subTextNode) => {\n                            textMap.set(subTextNode, subTextEntry);\n                        });\n                    }\n\n                    for (let attachment of node.subMessage.attachments || []) {\n                        this.attachments.push(attachment);\n                    }\n                }\n\n                // is it text?\n                else if (this.isInlineTextNode(node)) {\n                    let textType = node.contentType.parsed.value.substr(node.contentType.parsed.value.indexOf('/') + 1);\n\n                    let selectorNode = alternative || node;\n                    if (!textMap.has(selectorNode)) {\n                        textMap.set(selectorNode, {});\n                    }\n\n                    let textEntry = textMap.get(selectorNode);\n                    textEntry[textType] = textEntry[textType] || [];\n                    textEntry[textType].push({ type: 'text', value: node.getTextContent() });\n                    textTypes.add(textType);\n                }\n\n                // is it an attachment\n                else if (node.content) {\n                    const filename = node.contentDisposition.parsed.params.filename || node.contentType.parsed.params.name || null;\n                    const attachment = {\n                        filename: filename ? decodeWords(filename) : null,\n                        mimeType: node.contentType.parsed.value,\n                        disposition: node.contentDisposition.parsed.value || null\n                    };\n\n                    if (related && node.contentId) {\n                        attachment.related = true;\n                    }\n\n                    if (node.contentDescription) {\n                        attachment.description = node.contentDescription;\n                    }\n\n                    if (node.contentId) {\n                        attachment.contentId = node.contentId;\n                    }\n\n                    switch (node.contentType.parsed.value) {\n                        // Special handling for calendar events\n                        case 'text/calendar':\n                        case 'application/ics': {\n                            if (node.contentType.parsed.params.method) {\n                                attachment.method = node.contentType.parsed.params.method.toString().toUpperCase().trim();\n                            }\n\n                            // Enforce into unicode\n                            const decodedText = node.getTextContent().replace(/\\r?\\n/g, '\\n').replace(/\\n*$/, '\\n');\n                            attachment.content = textEncoder.encode(decodedText);\n                            break;\n                        }\n\n                        // Regular attachments\n                        default:\n                            attachment.content = node.content;\n                    }\n\n                    this.attachments.push(attachment);\n                }\n            } else if (node.contentType.multipart === 'alternative') {\n                alternative = node;\n            } else if (node.contentType.multipart === 'related') {\n                related = node;\n            }\n\n            for (let childNode of node.childNodes) {\n                await walk(childNode, alternative, related);\n            }\n        };\n\n        await walk(this.root, false, []);\n\n        textMap.forEach(mapEntry => {\n            textTypes.forEach(textType => {\n                if (!textContent[textType]) {\n                    textContent[textType] = [];\n                }\n\n                if (mapEntry[textType]) {\n                    mapEntry[textType].forEach(textEntry => {\n                        switch (textEntry.type) {\n                            case 'text':\n                                textContent[textType].push(textEntry.value);\n                                break;\n\n                            case 'subMessage':\n                                {\n                                    switch (textType) {\n                                        case 'html':\n                                            textContent[textType].push(formatHtmlHeader(textEntry.value));\n                                            break;\n                                        case 'plain':\n                                            textContent[textType].push(formatTextHeader(textEntry.value));\n                                            break;\n                                    }\n                                }\n                                break;\n                        }\n                    });\n                } else {\n                    let alternativeType;\n                    switch (textType) {\n                        case 'html':\n                            alternativeType = 'plain';\n                            break;\n                        case 'plain':\n                            alternativeType = 'html';\n                            break;\n                    }\n\n                    (mapEntry[alternativeType] || []).forEach(textEntry => {\n                        switch (textEntry.type) {\n                            case 'text':\n                                switch (textType) {\n                                    case 'html':\n                                        textContent[textType].push(textToHtml(textEntry.value));\n                                        break;\n                                    case 'plain':\n                                        textContent[textType].push(htmlToText(textEntry.value));\n                                        break;\n                                }\n                                break;\n\n                            case 'subMessage':\n                                {\n                                    switch (textType) {\n                                        case 'html':\n                                            textContent[textType].push(formatHtmlHeader(textEntry.value));\n                                            break;\n                                        case 'plain':\n                                            textContent[textType].push(formatTextHeader(textEntry.value));\n                                            break;\n                                    }\n                                }\n                                break;\n                        }\n                    });\n                }\n            });\n        });\n\n        Object.keys(textContent).forEach(textType => {\n            textContent[textType] = textContent[textType].join('\\n');\n        });\n\n        this.textContent = textContent;\n    }\n\n    isInlineTextNode(node) {\n        if (node.contentDisposition.parsed.value === 'attachment') {\n            // no matter the type, this is an attachment\n            return false;\n        }\n\n        switch (node.contentType.parsed.value) {\n            case 'text/html':\n            case 'text/plain':\n                return true;\n\n            case 'text/calendar':\n            case 'text/csv':\n            default:\n                return false;\n        }\n    }\n\n    isInlineMessageRfc822(node) {\n        if (node.contentType.parsed.value !== 'message/rfc822') {\n            return false;\n        }\n        let disposition = node.contentDisposition.parsed.value || (this.options.rfc822Attachments ? 'attachment' : 'inline');\n        return disposition === 'inline';\n    }\n\n    // Check if this is a specially crafted report email where message/rfc822 content should not be inlined\n    forceRfc822Attachments() {\n        if (this.options.forceRfc822Attachments) {\n            return true;\n        }\n\n        let forceRfc822Attachments = false;\n        let walk = node => {\n            if (!node.contentType.multipart) {\n                if (['message/delivery-status', 'message/feedback-report'].includes(node.contentType.parsed.value)) {\n                    forceRfc822Attachments = true;\n                }\n            }\n\n            for (let childNode of node.childNodes) {\n                walk(childNode);\n            }\n        };\n        walk(this.root);\n        return forceRfc822Attachments;\n    }\n\n    async resolveStream(stream) {\n        let chunkLen = 0;\n        let chunks = [];\n        const reader = stream.getReader();\n\n        while (true) {\n            const { done, value } = await reader.read();\n            if (done) {\n                break;\n            }\n            chunks.push(value);\n            chunkLen += value.length;\n        }\n\n        const result = new Uint8Array(chunkLen);\n        let chunkPointer = 0;\n        for (let chunk of chunks) {\n            result.set(chunk, chunkPointer);\n            chunkPointer += chunk.length;\n        }\n\n        return result;\n    }\n\n    async parse(buf) {\n        if (this.started) {\n            throw new Error('Can not reuse parser, create a new PostalMime object');\n        }\n        this.started = true;\n\n        // Check if the input is a readable stream and resolve it into an ArrayBuffer\n        if (buf && typeof buf.getReader === 'function') {\n            buf = await this.resolveStream(buf);\n        }\n\n        // Should it throw for an empty value instead of defaulting to an empty ArrayBuffer?\n        buf = buf || new ArrayBuffer(0);\n\n        // Cast string input to Uint8Array\n        if (typeof buf === 'string') {\n            buf = textEncoder.encode(buf);\n        }\n\n        // Cast Blob to ArrayBuffer\n        if (buf instanceof Blob || Object.prototype.toString.call(buf) === '[object Blob]') {\n            buf = await blobToArrayBuffer(buf);\n        }\n\n        // Cast Node.js Buffer object or Uint8Array into ArrayBuffer\n        if (buf.buffer instanceof ArrayBuffer) {\n            buf = new Uint8Array(buf).buffer;\n        }\n\n        this.buf = buf;\n\n        this.av = new Uint8Array(buf);\n        this.readPos = 0;\n\n        while (this.readPos < this.av.length) {\n            const line = this.readLine();\n\n            await this.processLine(line.bytes, line.done);\n        }\n\n        await this.processNodeTree();\n\n        const message = {\n            headers: this.root.headers.map(entry => ({ key: entry.key, value: entry.value })).reverse()\n        };\n\n        for (const key of ['from', 'sender']) {\n            const addressHeader = this.root.headers.find(line => line.key === key);\n            if (addressHeader && addressHeader.value) {\n                const addresses = addressParser(addressHeader.value);\n                if (addresses && addresses.length) {\n                    message[key] = addresses[0];\n                }\n            }\n        }\n\n        for (const key of ['delivered-to', 'return-path']) {\n            const addressHeader = this.root.headers.find(line => line.key === key);\n            if (addressHeader && addressHeader.value) {\n                const addresses = addressParser(addressHeader.value);\n                if (addresses && addresses.length && addresses[0].address) {\n                    const camelKey = key.replace(/\\-(.)/g, (o, c) => c.toUpperCase());\n                    message[camelKey] = addresses[0].address;\n                }\n            }\n        }\n\n        for (const key of ['to', 'cc', 'bcc', 'reply-to']) {\n            const addressHeaders = this.root.headers.filter(line => line.key === key);\n            let addresses = [];\n\n            addressHeaders\n                .filter(entry => entry && entry.value)\n                .map(entry => addressParser(entry.value))\n                .forEach(parsed => (addresses = addresses.concat(parsed || [])));\n\n            if (addresses && addresses.length) {\n                const camelKey = key.replace(/\\-(.)/g, (o, c) => c.toUpperCase());\n                message[camelKey] = addresses;\n            }\n        }\n\n        for (const key of ['subject', 'message-id', 'in-reply-to', 'references']) {\n            const header = this.root.headers.find(line => line.key === key);\n            if (header && header.value) {\n                const camelKey = key.replace(/\\-(.)/g, (o, c) => c.toUpperCase());\n                message[camelKey] = decodeWords(header.value);\n            }\n        }\n\n        let dateHeader = this.root.headers.find(line => line.key === 'date');\n        if (dateHeader) {\n            let date = new Date(dateHeader.value);\n            if (!date || date.toString() === 'Invalid Date') {\n                date = dateHeader.value;\n            } else {\n                // enforce ISO format if seems to be a valid date\n                date = date.toISOString();\n            }\n            message.date = date;\n        }\n\n        if (this.textContent?.html) {\n            message.html = this.textContent.html;\n        }\n\n        if (this.textContent?.plain) {\n            message.text = this.textContent.plain;\n        }\n\n        message.attachments = this.attachments;\n\n        switch (this.attachmentEncoding) {\n            case 'arraybuffer':\n                break;\n\n            case 'base64':\n                for (let attachment of message.attachments || []) {\n                    if (attachment?.content) {\n                        attachment.content = base64ArrayBuffer(attachment.content);\n                        attachment.encoding = 'base64';\n                    }\n                }\n                break;\n\n            case 'utf8':\n                let attachmentDecoder = new TextDecoder('utf8');\n                for (let attachment of message.attachments || []) {\n                    if (attachment?.content) {\n                        attachment.content = attachmentDecoder.decode(attachment.content);\n                        attachment.encoding = 'utf8';\n                    }\n                }\n                break;\n\n            default:\n                throw new Error('Unknwon attachment encoding');\n        }\n\n        return message;\n    }\n}\n", "export const RAW_EMAIL = \"EmailMessage::raw\";\n"],
  "mappings": "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",
  "names": ["i", "c", "i", "i", "i", "i", "address", "addresses", "i", "i"]
}
