bookracy-convertor
Version:
A tool to convert EPUB files to PDF using jsPDF
1,901 lines • 369 kB
JavaScript
import { jsPDF as $s } from "jspdf";
import Rs from "jszip";
import { convert as Ms } from "html-to-text";
typeof globalThis.Node > "u" && (globalThis.Node = { ELEMENT_NODE: 1, TEXT_NODE: 3 });
const qs = async (e) => {
const t = await fetch(e);
if (!t.ok)
throw console.error(`FETCHFILE_ERROR - Fetch failed for URL: ${e}, Status: ${t.status} ${t.statusText}`), new Error(`Failed to fetch file: ${t.statusText}`);
const r = await t.blob(), n = r.type;
return console.log(`FETCHFILE_DEBUG - URL: ${e}, Detected MIME Type: '${n}'`), { buffer: await r.arrayBuffer(), mimeType: n };
};
var Qe = {}, je = {};
function js(e, t, r) {
if (r === void 0 && (r = Array.prototype), e && typeof r.find == "function")
return r.find.call(e, t);
for (var n = 0; n < e.length; n++)
if (Object.prototype.hasOwnProperty.call(e, n)) {
var i = e[n];
if (t.call(void 0, i, n, e))
return i;
}
}
function xn(e, t) {
return t === void 0 && (t = Object), t && typeof t.freeze == "function" ? t.freeze(e) : e;
}
function Us(e, t) {
if (e === null || typeof e != "object")
throw new TypeError("target is not an object");
for (var r in t)
Object.prototype.hasOwnProperty.call(t, r) && (e[r] = t[r]);
return e;
}
var xo = xn({
/**
* `text/html`, the only mime type that triggers treating an XML document as HTML.
*
* @see DOMParser.SupportedType.isHTML
* @see https://www.iana.org/assignments/media-types/text/html IANA MimeType registration
* @see https://en.wikipedia.org/wiki/HTML Wikipedia
* @see https://developer.mozilla.org/en-US/docs/Web/API/DOMParser/parseFromString MDN
* @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-domparser-parsefromstring WHATWG HTML Spec
*/
HTML: "text/html",
/**
* Helper method to check a mime type if it indicates an HTML document
*
* @param {string} [value]
* @returns {boolean}
*
* @see https://www.iana.org/assignments/media-types/text/html IANA MimeType registration
* @see https://en.wikipedia.org/wiki/HTML Wikipedia
* @see https://developer.mozilla.org/en-US/docs/Web/API/DOMParser/parseFromString MDN
* @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-domparser-parsefromstring */
isHTML: function(e) {
return e === xo.HTML;
},
/**
* `application/xml`, the standard mime type for XML documents.
*
* @see https://www.iana.org/assignments/media-types/application/xml IANA MimeType registration
* @see https://tools.ietf.org/html/rfc7303#section-9.1 RFC 7303
* @see https://en.wikipedia.org/wiki/XML_and_MIME Wikipedia
*/
XML_APPLICATION: "application/xml",
/**
* `text/html`, an alias for `application/xml`.
*
* @see https://tools.ietf.org/html/rfc7303#section-9.2 RFC 7303
* @see https://www.iana.org/assignments/media-types/text/xml IANA MimeType registration
* @see https://en.wikipedia.org/wiki/XML_and_MIME Wikipedia
*/
XML_TEXT: "text/xml",
/**
* `application/xhtml+xml`, indicates an XML document that has the default HTML namespace,
* but is parsed as an XML document.
*
* @see https://www.iana.org/assignments/media-types/application/xhtml+xml IANA MimeType registration
* @see https://dom.spec.whatwg.org/#dom-domimplementation-createdocument WHATWG DOM Spec
* @see https://en.wikipedia.org/wiki/XHTML Wikipedia
*/
XML_XHTML_APPLICATION: "application/xhtml+xml",
/**
* `image/svg+xml`,
*
* @see https://www.iana.org/assignments/media-types/image/svg+xml IANA MimeType registration
* @see https://www.w3.org/TR/SVG11/ W3C SVG 1.1
* @see https://en.wikipedia.org/wiki/Scalable_Vector_Graphics Wikipedia
*/
XML_SVG_IMAGE: "image/svg+xml"
}), Ao = xn({
/**
* The XHTML namespace.
*
* @see http://www.w3.org/1999/xhtml
*/
HTML: "http://www.w3.org/1999/xhtml",
/**
* Checks if `uri` equals `NAMESPACE.HTML`.
*
* @param {string} [uri]
*
* @see NAMESPACE.HTML
*/
isHTML: function(e) {
return e === Ao.HTML;
},
/**
* The SVG namespace.
*
* @see http://www.w3.org/2000/svg
*/
SVG: "http://www.w3.org/2000/svg",
/**
* The `xml:` namespace.
*
* @see http://www.w3.org/XML/1998/namespace
*/
XML: "http://www.w3.org/XML/1998/namespace",
/**
* The `xmlns:` namespace
*
* @see https://www.w3.org/2000/xmlns/
*/
XMLNS: "http://www.w3.org/2000/xmlns/"
});
je.assign = Us;
je.find = js;
je.freeze = xn;
je.MIME_TYPE = xo;
je.NAMESPACE = Ao;
var Co = je, Be = Co.find, $t = Co.NAMESPACE;
function Hs(e) {
return e !== "";
}
function Ws(e) {
return e ? e.split(/[\t\n\f\r ]+/).filter(Hs) : [];
}
function Gs(e, t) {
return e.hasOwnProperty(t) || (e[t] = !0), e;
}
function Zn(e) {
if (!e) return [];
var t = Ws(e);
return Object.keys(t.reduce(Gs, {}));
}
function Vs(e) {
return function(t) {
return e && e.indexOf(t) !== -1;
};
}
function Wt(e, t) {
for (var r in e)
Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r]);
}
function fe(e, t) {
var r = e.prototype;
if (!(r instanceof t)) {
let n = function() {
};
n.prototype = t.prototype, n = new n(), Wt(r, n), e.prototype = r = n;
}
r.constructor != e && (typeof e != "function" && console.error("unknown Class:" + e), r.constructor = e);
}
var de = {}, Ce = de.ELEMENT_NODE = 1, vt = de.ATTRIBUTE_NODE = 2, hr = de.TEXT_NODE = 3, Do = de.CDATA_SECTION_NODE = 4, So = de.ENTITY_REFERENCE_NODE = 5, Xs = de.ENTITY_NODE = 6, Eo = de.PROCESSING_INSTRUCTION_NODE = 7, To = de.COMMENT_NODE = 8, No = de.DOCUMENT_NODE = 9, Lo = de.DOCUMENT_TYPE_NODE = 10, Re = de.DOCUMENT_FRAGMENT_NODE = 11, Ys = de.NOTATION_NODE = 12, ue = {}, Z = {};
ue.INDEX_SIZE_ERR = (Z[1] = "Index size error", 1);
ue.DOMSTRING_SIZE_ERR = (Z[2] = "DOMString size error", 2);
var pe = ue.HIERARCHY_REQUEST_ERR = (Z[3] = "Hierarchy request error", 3);
ue.WRONG_DOCUMENT_ERR = (Z[4] = "Wrong document", 4);
ue.INVALID_CHARACTER_ERR = (Z[5] = "Invalid character", 5);
ue.NO_DATA_ALLOWED_ERR = (Z[6] = "No data allowed", 6);
ue.NO_MODIFICATION_ALLOWED_ERR = (Z[7] = "No modification allowed", 7);
var Oo = ue.NOT_FOUND_ERR = (Z[8] = "Not found", 8);
ue.NOT_SUPPORTED_ERR = (Z[9] = "Not supported", 9);
var ei = ue.INUSE_ATTRIBUTE_ERR = (Z[10] = "Attribute in use", 10);
ue.INVALID_STATE_ERR = (Z[11] = "Invalid state", 11);
ue.SYNTAX_ERR = (Z[12] = "Syntax error", 12);
ue.INVALID_MODIFICATION_ERR = (Z[13] = "Invalid modification", 13);
ue.NAMESPACE_ERR = (Z[14] = "Invalid namespace", 14);
ue.INVALID_ACCESS_ERR = (Z[15] = "Invalid access", 15);
function V(e, t) {
if (t instanceof Error)
var r = t;
else
r = this, Error.call(this, Z[e]), this.message = Z[e], Error.captureStackTrace && Error.captureStackTrace(this, V);
return r.code = e, t && (this.message = this.message + ": " + t), r;
}
V.prototype = Error.prototype;
Wt(ue, V);
function $e() {
}
$e.prototype = {
/**
* The number of nodes in the list. The range of valid child node indices is 0 to length-1 inclusive.
* @standard level1
*/
length: 0,
/**
* Returns the indexth item in the collection. If index is greater than or equal to the number of nodes in the list, this returns null.
* @standard level1
* @param index unsigned long
* Index into the collection.
* @return Node
* The node at the indexth position in the NodeList, or null if that is not a valid index.
*/
item: function(e) {
return e >= 0 && e < this.length ? this[e] : null;
},
toString: function(e, t) {
for (var r = [], n = 0; n < this.length; n++)
dt(this[n], r, e, t);
return r.join("");
},
/**
* @private
* @param {function (Node):boolean} predicate
* @returns {Node[]}
*/
filter: function(e) {
return Array.prototype.filter.call(this, e);
},
/**
* @private
* @param {Node} item
* @returns {number}
*/
indexOf: function(e) {
return Array.prototype.indexOf.call(this, e);
}
};
function wt(e, t) {
this._node = e, this._refresh = t, An(this);
}
function An(e) {
var t = e._node._inc || e._node.ownerDocument._inc;
if (e._inc !== t) {
var r = e._refresh(e._node);
if (Uo(e, "length", r.length), !e.$$length || r.length < e.$$length)
for (var n = r.length; n in e; n++)
Object.prototype.hasOwnProperty.call(e, n) && delete e[n];
Wt(r, e), e._inc = t;
}
}
wt.prototype.item = function(e) {
return An(this), this[e] || null;
};
fe(wt, $e);
function pr() {
}
function _o(e, t) {
for (var r = e.length; r--; )
if (e[r] === t)
return r;
}
function ti(e, t, r, n) {
if (n ? t[_o(t, n)] = r : t[t.length++] = r, e) {
r.ownerElement = e;
var i = e.ownerDocument;
i && (n && Po(i, e, n), Ks(i, e, r));
}
}
function ri(e, t, r) {
var n = _o(t, r);
if (n >= 0) {
for (var i = t.length - 1; n < i; )
t[n] = t[++n];
if (t.length = i, e) {
var o = e.ownerDocument;
o && (Po(o, e, r), r.ownerElement = null);
}
} else
throw new V(Oo, new Error(e.tagName + "@" + r));
}
pr.prototype = {
length: 0,
item: $e.prototype.item,
getNamedItem: function(e) {
for (var t = this.length; t--; ) {
var r = this[t];
if (r.nodeName == e)
return r;
}
},
setNamedItem: function(e) {
var t = e.ownerElement;
if (t && t != this._ownerElement)
throw new V(ei);
var r = this.getNamedItem(e.nodeName);
return ti(this._ownerElement, this, e, r), r;
},
/* returns Node */
setNamedItemNS: function(e) {
var t = e.ownerElement, r;
if (t && t != this._ownerElement)
throw new V(ei);
return r = this.getNamedItemNS(e.namespaceURI, e.localName), ti(this._ownerElement, this, e, r), r;
},
/* returns Node */
removeNamedItem: function(e) {
var t = this.getNamedItem(e);
return ri(this._ownerElement, this, t), t;
},
// raises: NOT_FOUND_ERR,NO_MODIFICATION_ALLOWED_ERR
//for level2
removeNamedItemNS: function(e, t) {
var r = this.getNamedItemNS(e, t);
return ri(this._ownerElement, this, r), r;
},
getNamedItemNS: function(e, t) {
for (var r = this.length; r--; ) {
var n = this[r];
if (n.localName == t && n.namespaceURI == e)
return n;
}
return null;
}
};
function Bo() {
}
Bo.prototype = {
/**
* The DOMImplementation.hasFeature() method returns a Boolean flag indicating if a given feature is supported.
* The different implementations fairly diverged in what kind of features were reported.
* The latest version of the spec settled to force this method to always return true, where the functionality was accurate and in use.
*
* @deprecated It is deprecated and modern browsers return true in all cases.
*
* @param {string} feature
* @param {string} [version]
* @returns {boolean} always true
*
* @see https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation/hasFeature MDN
* @see https://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#ID-5CED94D7 DOM Level 1 Core
* @see https://dom.spec.whatwg.org/#dom-domimplementation-hasfeature DOM Living Standard
*/
hasFeature: function(e, t) {
return !0;
},
/**
* Creates an XML Document object of the specified type with its document element.
*
* __It behaves slightly different from the description in the living standard__:
* - There is no interface/class `XMLDocument`, it returns a `Document` instance.
* - `contentType`, `encoding`, `mode`, `origin`, `url` fields are currently not declared.
* - this implementation is not validating names or qualified names
* (when parsing XML strings, the SAX parser takes care of that)
*
* @param {string|null} namespaceURI
* @param {string} qualifiedName
* @param {DocumentType=null} doctype
* @returns {Document}
*
* @see https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation/createDocument MDN
* @see https://www.w3.org/TR/DOM-Level-2-Core/core.html#Level-2-Core-DOM-createDocument DOM Level 2 Core (initial)
* @see https://dom.spec.whatwg.org/#dom-domimplementation-createdocument DOM Level 2 Core
*
* @see https://dom.spec.whatwg.org/#validate-and-extract DOM: Validate and extract
* @see https://www.w3.org/TR/xml/#NT-NameStartChar XML Spec: Names
* @see https://www.w3.org/TR/xml-names/#ns-qualnames XML Namespaces: Qualified names
*/
createDocument: function(e, t, r) {
var n = new Gt();
if (n.implementation = this, n.childNodes = new $e(), n.doctype = r || null, r && n.appendChild(r), t) {
var i = n.createElementNS(e, t);
n.appendChild(i);
}
return n;
},
/**
* Returns a doctype, with the given `qualifiedName`, `publicId`, and `systemId`.
*
* __This behavior is slightly different from the in the specs__:
* - this implementation is not validating names or qualified names
* (when parsing XML strings, the SAX parser takes care of that)
*
* @param {string} qualifiedName
* @param {string} [publicId]
* @param {string} [systemId]
* @returns {DocumentType} which can either be used with `DOMImplementation.createDocument` upon document creation
* or can be put into the document via methods like `Node.insertBefore()` or `Node.replaceChild()`
*
* @see https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation/createDocumentType MDN
* @see https://www.w3.org/TR/DOM-Level-2-Core/core.html#Level-2-Core-DOM-createDocType DOM Level 2 Core
* @see https://dom.spec.whatwg.org/#dom-domimplementation-createdocumenttype DOM Living Standard
*
* @see https://dom.spec.whatwg.org/#validate-and-extract DOM: Validate and extract
* @see https://www.w3.org/TR/xml/#NT-NameStartChar XML Spec: Names
* @see https://www.w3.org/TR/xml-names/#ns-qualnames XML Namespaces: Qualified names
*/
createDocumentType: function(e, t, r) {
var n = new Cr();
return n.name = e, n.nodeName = e, n.publicId = t || "", n.systemId = r || "", n;
}
};
function $() {
}
$.prototype = {
firstChild: null,
lastChild: null,
previousSibling: null,
nextSibling: null,
attributes: null,
parentNode: null,
childNodes: null,
ownerDocument: null,
nodeValue: null,
namespaceURI: null,
prefix: null,
localName: null,
// Modified in DOM Level 2:
insertBefore: function(e, t) {
return fr(this, e, t);
},
replaceChild: function(e, t) {
fr(this, e, t, zo), t && this.removeChild(t);
},
removeChild: function(e) {
return Io(this, e);
},
appendChild: function(e) {
return this.insertBefore(e, null);
},
hasChildNodes: function() {
return this.firstChild != null;
},
cloneNode: function(e) {
return on(this.ownerDocument || this, this, e);
},
// Modified in DOM Level 2:
normalize: function() {
for (var e = this.firstChild; e; ) {
var t = e.nextSibling;
t && t.nodeType == hr && e.nodeType == hr ? (this.removeChild(t), e.appendData(t.data)) : (e.normalize(), e = t);
}
},
// Introduced in DOM Level 2:
isSupported: function(e, t) {
return this.ownerDocument.implementation.hasFeature(e, t);
},
// Introduced in DOM Level 2:
hasAttributes: function() {
return this.attributes.length > 0;
},
/**
* Look up the prefix associated to the given namespace URI, starting from this node.
* **The default namespace declarations are ignored by this method.**
* See Namespace Prefix Lookup for details on the algorithm used by this method.
*
* _Note: The implementation seems to be incomplete when compared to the algorithm described in the specs._
*
* @param {string | null} namespaceURI
* @returns {string | null}
* @see https://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-lookupNamespacePrefix
* @see https://www.w3.org/TR/DOM-Level-3-Core/namespaces-algorithms.html#lookupNamespacePrefixAlgo
* @see https://dom.spec.whatwg.org/#dom-node-lookupprefix
* @see https://github.com/xmldom/xmldom/issues/322
*/
lookupPrefix: function(e) {
for (var t = this; t; ) {
var r = t._nsMap;
if (r) {
for (var n in r)
if (Object.prototype.hasOwnProperty.call(r, n) && r[n] === e)
return n;
}
t = t.nodeType == vt ? t.ownerDocument : t.parentNode;
}
return null;
},
// Introduced in DOM Level 3:
lookupNamespaceURI: function(e) {
for (var t = this; t; ) {
var r = t._nsMap;
if (r && Object.prototype.hasOwnProperty.call(r, e))
return r[e];
t = t.nodeType == vt ? t.ownerDocument : t.parentNode;
}
return null;
},
// Introduced in DOM Level 3:
isDefaultNamespace: function(e) {
var t = this.lookupPrefix(e);
return t == null;
}
};
function Fo(e) {
return e == "<" && "<" || e == ">" && ">" || e == "&" && "&" || e == '"' && """ || "&#" + e.charCodeAt() + ";";
}
Wt(de, $);
Wt(de, $.prototype);
function Rt(e, t) {
if (t(e))
return !0;
if (e = e.firstChild)
do
if (Rt(e, t))
return !0;
while (e = e.nextSibling);
}
function Gt() {
this.ownerDocument = this;
}
function Ks(e, t, r) {
e && e._inc++;
var n = r.namespaceURI;
n === $t.XMLNS && (t._nsMap[r.prefix ? r.localName : ""] = r.value);
}
function Po(e, t, r, n) {
e && e._inc++;
var i = r.namespaceURI;
i === $t.XMLNS && delete t._nsMap[r.prefix ? r.localName : ""];
}
function Cn(e, t, r) {
if (e && e._inc) {
e._inc++;
var n = t.childNodes;
if (r)
n[n.length++] = r;
else {
for (var i = t.firstChild, o = 0; i; )
n[o++] = i, i = i.nextSibling;
n.length = o, delete n[n.length];
}
}
}
function Io(e, t) {
var r = t.previousSibling, n = t.nextSibling;
return r ? r.nextSibling = n : e.firstChild = n, n ? n.previousSibling = r : e.lastChild = r, t.parentNode = null, t.previousSibling = null, t.nextSibling = null, Cn(e.ownerDocument, e), t;
}
function Qs(e) {
return e && (e.nodeType === $.DOCUMENT_NODE || e.nodeType === $.DOCUMENT_FRAGMENT_NODE || e.nodeType === $.ELEMENT_NODE);
}
function Js(e) {
return e && (Fe(e) || Dn(e) || Me(e) || e.nodeType === $.DOCUMENT_FRAGMENT_NODE || e.nodeType === $.COMMENT_NODE || e.nodeType === $.PROCESSING_INSTRUCTION_NODE);
}
function Me(e) {
return e && e.nodeType === $.DOCUMENT_TYPE_NODE;
}
function Fe(e) {
return e && e.nodeType === $.ELEMENT_NODE;
}
function Dn(e) {
return e && e.nodeType === $.TEXT_NODE;
}
function ni(e, t) {
var r = e.childNodes || [];
if (Be(r, Fe) || Me(t))
return !1;
var n = Be(r, Me);
return !(t && n && r.indexOf(n) > r.indexOf(t));
}
function ii(e, t) {
var r = e.childNodes || [];
function n(o) {
return Fe(o) && o !== t;
}
if (Be(r, n))
return !1;
var i = Be(r, Me);
return !(t && i && r.indexOf(i) > r.indexOf(t));
}
function Zs(e, t, r) {
if (!Qs(e))
throw new V(pe, "Unexpected parent node type " + e.nodeType);
if (r && r.parentNode !== e)
throw new V(Oo, "child not in parent");
if (
// 4. If `node` is not a DocumentFragment, DocumentType, Element, or CharacterData node, then throw a "HierarchyRequestError" DOMException.
!Js(t) || // 5. If either `node` is a Text node and `parent` is a document,
// the sax parser currently adds top level text nodes, this will be fixed in 0.9.0
// || (node.nodeType === Node.TEXT_NODE && parent.nodeType === Node.DOCUMENT_NODE)
// or `node` is a doctype and `parent` is not a document, then throw a "HierarchyRequestError" DOMException.
Me(t) && e.nodeType !== $.DOCUMENT_NODE
)
throw new V(
pe,
"Unexpected node type " + t.nodeType + " for parent node type " + e.nodeType
);
}
function el(e, t, r) {
var n = e.childNodes || [], i = t.childNodes || [];
if (t.nodeType === $.DOCUMENT_FRAGMENT_NODE) {
var o = i.filter(Fe);
if (o.length > 1 || Be(i, Dn))
throw new V(pe, "More than one element or text in fragment");
if (o.length === 1 && !ni(e, r))
throw new V(pe, "Element in fragment can not be inserted before doctype");
}
if (Fe(t) && !ni(e, r))
throw new V(pe, "Only one element can be added and only after doctype");
if (Me(t)) {
if (Be(n, Me))
throw new V(pe, "Only one doctype is allowed");
var s = Be(n, Fe);
if (r && n.indexOf(s) < n.indexOf(r))
throw new V(pe, "Doctype can only be inserted before an element");
if (!r && s)
throw new V(pe, "Doctype can not be appended since element is present");
}
}
function zo(e, t, r) {
var n = e.childNodes || [], i = t.childNodes || [];
if (t.nodeType === $.DOCUMENT_FRAGMENT_NODE) {
var o = i.filter(Fe);
if (o.length > 1 || Be(i, Dn))
throw new V(pe, "More than one element or text in fragment");
if (o.length === 1 && !ii(e, r))
throw new V(pe, "Element in fragment can not be inserted before doctype");
}
if (Fe(t) && !ii(e, r))
throw new V(pe, "Only one element can be added and only after doctype");
if (Me(t)) {
if (Be(n, function(l) {
return Me(l) && l !== r;
}))
throw new V(pe, "Only one doctype is allowed");
var s = Be(n, Fe);
if (r && n.indexOf(s) < n.indexOf(r))
throw new V(pe, "Doctype can only be inserted before an element");
}
}
function fr(e, t, r, n) {
Zs(e, t, r), e.nodeType === $.DOCUMENT_NODE && (n || el)(e, t, r);
var i = t.parentNode;
if (i && i.removeChild(t), t.nodeType === Re) {
var o = t.firstChild;
if (o == null)
return t;
var s = t.lastChild;
} else
o = s = t;
var c = r ? r.previousSibling : e.lastChild;
o.previousSibling = c, s.nextSibling = r, c ? c.nextSibling = o : e.firstChild = o, r == null ? e.lastChild = s : r.previousSibling = s;
do
o.parentNode = e;
while (o !== s && (o = o.nextSibling));
return Cn(e.ownerDocument || e, e), t.nodeType == Re && (t.firstChild = t.lastChild = null), t;
}
function tl(e, t) {
return t.parentNode && t.parentNode.removeChild(t), t.parentNode = e, t.previousSibling = e.lastChild, t.nextSibling = null, t.previousSibling ? t.previousSibling.nextSibling = t : e.firstChild = t, e.lastChild = t, Cn(e.ownerDocument, e, t), t;
}
Gt.prototype = {
//implementation : null,
nodeName: "#document",
nodeType: No,
/**
* The DocumentType node of the document.
*
* @readonly
* @type DocumentType
*/
doctype: null,
documentElement: null,
_inc: 1,
insertBefore: function(e, t) {
if (e.nodeType == Re) {
for (var r = e.firstChild; r; ) {
var n = r.nextSibling;
this.insertBefore(r, t), r = n;
}
return e;
}
return fr(this, e, t), e.ownerDocument = this, this.documentElement === null && e.nodeType === Ce && (this.documentElement = e), e;
},
removeChild: function(e) {
return this.documentElement == e && (this.documentElement = null), Io(this, e);
},
replaceChild: function(e, t) {
fr(this, e, t, zo), e.ownerDocument = this, t && this.removeChild(t), Fe(e) && (this.documentElement = e);
},
// Introduced in DOM Level 2:
importNode: function(e, t) {
return jo(this, e, t);
},
// Introduced in DOM Level 2:
getElementById: function(e) {
var t = null;
return Rt(this.documentElement, function(r) {
if (r.nodeType == Ce && r.getAttribute("id") == e)
return t = r, !0;
}), t;
},
/**
* The `getElementsByClassName` method of `Document` interface returns an array-like object
* of all child elements which have **all** of the given class name(s).
*
* Returns an empty list if `classeNames` is an empty string or only contains HTML white space characters.
*
*
* Warning: This is a live LiveNodeList.
* Changes in the DOM will reflect in the array as the changes occur.
* If an element selected by this array no longer qualifies for the selector,
* it will automatically be removed. Be aware of this for iteration purposes.
*
* @param {string} classNames is a string representing the class name(s) to match; multiple class names are separated by (ASCII-)whitespace
*
* @see https://developer.mozilla.org/en-US/docs/Web/API/Document/getElementsByClassName
* @see https://dom.spec.whatwg.org/#concept-getelementsbyclassname
*/
getElementsByClassName: function(e) {
var t = Zn(e);
return new wt(this, function(r) {
var n = [];
return t.length > 0 && Rt(r.documentElement, function(i) {
if (i !== r && i.nodeType === Ce) {
var o = i.getAttribute("class");
if (o) {
var s = e === o;
if (!s) {
var c = Zn(o);
s = t.every(Vs(c));
}
s && n.push(i);
}
}
}), n;
});
},
//document factory method:
createElement: function(e) {
var t = new rt();
t.ownerDocument = this, t.nodeName = e, t.tagName = e, t.localName = e, t.childNodes = new $e();
var r = t.attributes = new pr();
return r._ownerElement = t, t;
},
createDocumentFragment: function() {
var e = new Dr();
return e.ownerDocument = this, e.childNodes = new $e(), e;
},
createTextNode: function(e) {
var t = new Sn();
return t.ownerDocument = this, t.appendData(e), t;
},
createComment: function(e) {
var t = new En();
return t.ownerDocument = this, t.appendData(e), t;
},
createCDATASection: function(e) {
var t = new Tn();
return t.ownerDocument = this, t.appendData(e), t;
},
createProcessingInstruction: function(e, t) {
var r = new Ln();
return r.ownerDocument = this, r.tagName = r.nodeName = r.target = e, r.nodeValue = r.data = t, r;
},
createAttribute: function(e) {
var t = new dr();
return t.ownerDocument = this, t.name = e, t.nodeName = e, t.localName = e, t.specified = !0, t;
},
createEntityReference: function(e) {
var t = new Nn();
return t.ownerDocument = this, t.nodeName = e, t;
},
// Introduced in DOM Level 2:
createElementNS: function(e, t) {
var r = new rt(), n = t.split(":"), i = r.attributes = new pr();
return r.childNodes = new $e(), r.ownerDocument = this, r.nodeName = t, r.tagName = t, r.namespaceURI = e, n.length == 2 ? (r.prefix = n[0], r.localName = n[1]) : r.localName = t, i._ownerElement = r, r;
},
// Introduced in DOM Level 2:
createAttributeNS: function(e, t) {
var r = new dr(), n = t.split(":");
return r.ownerDocument = this, r.nodeName = t, r.name = t, r.namespaceURI = e, r.specified = !0, n.length == 2 ? (r.prefix = n[0], r.localName = n[1]) : r.localName = t, r;
}
};
fe(Gt, $);
function rt() {
this._nsMap = {};
}
rt.prototype = {
nodeType: Ce,
hasAttribute: function(e) {
return this.getAttributeNode(e) != null;
},
getAttribute: function(e) {
var t = this.getAttributeNode(e);
return t && t.value || "";
},
getAttributeNode: function(e) {
return this.attributes.getNamedItem(e);
},
setAttribute: function(e, t) {
var r = this.ownerDocument.createAttribute(e);
r.value = r.nodeValue = "" + t, this.setAttributeNode(r);
},
removeAttribute: function(e) {
var t = this.getAttributeNode(e);
t && this.removeAttributeNode(t);
},
//four real opeartion method
appendChild: function(e) {
return e.nodeType === Re ? this.insertBefore(e, null) : tl(this, e);
},
setAttributeNode: function(e) {
return this.attributes.setNamedItem(e);
},
setAttributeNodeNS: function(e) {
return this.attributes.setNamedItemNS(e);
},
removeAttributeNode: function(e) {
return this.attributes.removeNamedItem(e.nodeName);
},
//get real attribute name,and remove it by removeAttributeNode
removeAttributeNS: function(e, t) {
var r = this.getAttributeNodeNS(e, t);
r && this.removeAttributeNode(r);
},
hasAttributeNS: function(e, t) {
return this.getAttributeNodeNS(e, t) != null;
},
getAttributeNS: function(e, t) {
var r = this.getAttributeNodeNS(e, t);
return r && r.value || "";
},
setAttributeNS: function(e, t, r) {
var n = this.ownerDocument.createAttributeNS(e, t);
n.value = n.nodeValue = "" + r, this.setAttributeNode(n);
},
getAttributeNodeNS: function(e, t) {
return this.attributes.getNamedItemNS(e, t);
},
getElementsByTagName: function(e) {
return new wt(this, function(t) {
var r = [];
return Rt(t, function(n) {
n !== t && n.nodeType == Ce && (e === "*" || n.tagName == e) && r.push(n);
}), r;
});
},
getElementsByTagNameNS: function(e, t) {
return new wt(this, function(r) {
var n = [];
return Rt(r, function(i) {
i !== r && i.nodeType === Ce && (e === "*" || i.namespaceURI === e) && (t === "*" || i.localName == t) && n.push(i);
}), n;
});
}
};
Gt.prototype.getElementsByTagName = rt.prototype.getElementsByTagName;
Gt.prototype.getElementsByTagNameNS = rt.prototype.getElementsByTagNameNS;
fe(rt, $);
function dr() {
}
dr.prototype.nodeType = vt;
fe(dr, $);
function Vt() {
}
Vt.prototype = {
data: "",
substringData: function(e, t) {
return this.data.substring(e, e + t);
},
appendData: function(e) {
e = this.data + e, this.nodeValue = this.data = e, this.length = e.length;
},
insertData: function(e, t) {
this.replaceData(e, 0, t);
},
appendChild: function(e) {
throw new Error(Z[pe]);
},
deleteData: function(e, t) {
this.replaceData(e, t, "");
},
replaceData: function(e, t, r) {
var n = this.data.substring(0, e), i = this.data.substring(e + t);
r = n + r + i, this.nodeValue = this.data = r, this.length = r.length;
}
};
fe(Vt, $);
function Sn() {
}
Sn.prototype = {
nodeName: "#text",
nodeType: hr,
splitText: function(e) {
var t = this.data, r = t.substring(e);
t = t.substring(0, e), this.data = this.nodeValue = t, this.length = t.length;
var n = this.ownerDocument.createTextNode(r);
return this.parentNode && this.parentNode.insertBefore(n, this.nextSibling), n;
}
};
fe(Sn, Vt);
function En() {
}
En.prototype = {
nodeName: "#comment",
nodeType: To
};
fe(En, Vt);
function Tn() {
}
Tn.prototype = {
nodeName: "#cdata-section",
nodeType: Do
};
fe(Tn, Vt);
function Cr() {
}
Cr.prototype.nodeType = Lo;
fe(Cr, $);
function $o() {
}
$o.prototype.nodeType = Ys;
fe($o, $);
function Ro() {
}
Ro.prototype.nodeType = Xs;
fe(Ro, $);
function Nn() {
}
Nn.prototype.nodeType = So;
fe(Nn, $);
function Dr() {
}
Dr.prototype.nodeName = "#document-fragment";
Dr.prototype.nodeType = Re;
fe(Dr, $);
function Ln() {
}
Ln.prototype.nodeType = Eo;
fe(Ln, $);
function Mo() {
}
Mo.prototype.serializeToString = function(e, t, r) {
return qo.call(e, t, r);
};
$.prototype.toString = qo;
function qo(e, t) {
var r = [], n = this.nodeType == 9 && this.documentElement || this, i = n.prefix, o = n.namespaceURI;
if (o && i == null) {
var i = n.lookupPrefix(o);
if (i == null)
var s = [
{ namespace: o, prefix: null }
//{namespace:uri,prefix:''}
];
}
return dt(this, r, e, t, s), r.join("");
}
function oi(e, t, r) {
var n = e.prefix || "", i = e.namespaceURI;
if (!i || n === "xml" && i === $t.XML || i === $t.XMLNS)
return !1;
for (var o = r.length; o--; ) {
var s = r[o];
if (s.prefix === n)
return s.namespace !== i;
}
return !0;
}
function Fr(e, t, r) {
e.push(" ", t, '="', r.replace(/[<>&"\t\n\r]/g, Fo), '"');
}
function dt(e, t, r, n, i) {
if (i || (i = []), n)
if (e = n(e), e) {
if (typeof e == "string") {
t.push(e);
return;
}
} else
return;
switch (e.nodeType) {
case Ce:
var o = e.attributes, s = o.length, v = e.firstChild, c = e.tagName;
r = $t.isHTML(e.namespaceURI) || r;
var l = c;
if (!r && !e.prefix && e.namespaceURI) {
for (var a, u = 0; u < o.length; u++)
if (o.item(u).name === "xmlns") {
a = o.item(u).value;
break;
}
if (!a)
for (var h = i.length - 1; h >= 0; h--) {
var p = i[h];
if (p.prefix === "" && p.namespace === e.namespaceURI) {
a = p.namespace;
break;
}
}
if (a !== e.namespaceURI)
for (var h = i.length - 1; h >= 0; h--) {
var p = i[h];
if (p.namespace === e.namespaceURI) {
p.prefix && (l = p.prefix + ":" + c);
break;
}
}
}
t.push("<", l);
for (var m = 0; m < s; m++) {
var y = o.item(m);
y.prefix == "xmlns" ? i.push({ prefix: y.localName, namespace: y.value }) : y.nodeName == "xmlns" && i.push({ prefix: "", namespace: y.value });
}
for (var m = 0; m < s; m++) {
var y = o.item(m);
if (oi(y, r, i)) {
var b = y.prefix || "", A = y.namespaceURI;
Fr(t, b ? "xmlns:" + b : "xmlns", A), i.push({ prefix: b, namespace: A });
}
dt(y, t, r, n, i);
}
if (c === l && oi(e, r, i)) {
var b = e.prefix || "", A = e.namespaceURI;
Fr(t, b ? "xmlns:" + b : "xmlns", A), i.push({ prefix: b, namespace: A });
}
if (v || r && !/^(?:meta|link|img|br|hr|input)$/i.test(c)) {
if (t.push(">"), r && /^script$/i.test(c))
for (; v; )
v.data ? t.push(v.data) : dt(v, t, r, n, i.slice()), v = v.nextSibling;
else
for (; v; )
dt(v, t, r, n, i.slice()), v = v.nextSibling;
t.push("</", l, ">");
} else
t.push("/>");
return;
case No:
case Re:
for (var v = e.firstChild; v; )
dt(v, t, r, n, i.slice()), v = v.nextSibling;
return;
case vt:
return Fr(t, e.name, e.value);
case hr:
return t.push(
e.data.replace(/[<&>]/g, Fo)
);
case Do:
return t.push("<![CDATA[", e.data, "]]>");
case To:
return t.push("<!--", e.data, "-->");
case Lo:
var T = e.publicId, D = e.systemId;
if (t.push("<!DOCTYPE ", e.name), T)
t.push(" PUBLIC ", T), D && D != "." && t.push(" ", D), t.push(">");
else if (D && D != ".")
t.push(" SYSTEM ", D, ">");
else {
var w = e.internalSubset;
w && t.push(" [", w, "]"), t.push(">");
}
return;
case Eo:
return t.push("<?", e.target, " ", e.data, "?>");
case So:
return t.push("&", e.nodeName, ";");
default:
t.push("??", e.nodeName);
}
}
function jo(e, t, r) {
var n;
switch (t.nodeType) {
case Ce:
n = t.cloneNode(!1), n.ownerDocument = e;
case Re:
break;
case vt:
r = !0;
break;
}
if (n || (n = t.cloneNode(!1)), n.ownerDocument = e, n.parentNode = null, r)
for (var i = t.firstChild; i; )
n.appendChild(jo(e, i, r)), i = i.nextSibling;
return n;
}
function on(e, t, r) {
var n = new t.constructor();
for (var i in t)
if (Object.prototype.hasOwnProperty.call(t, i)) {
var o = t[i];
typeof o != "object" && o != n[i] && (n[i] = o);
}
switch (t.childNodes && (n.childNodes = new $e()), n.ownerDocument = e, n.nodeType) {
case Ce:
var s = t.attributes, c = n.attributes = new pr(), l = s.length;
c._ownerElement = n;
for (var a = 0; a < l; a++)
n.setAttributeNode(on(e, s.item(a), !0));
break;
case vt:
r = !0;
}
if (r)
for (var u = t.firstChild; u; )
n.appendChild(on(e, u, r)), u = u.nextSibling;
return n;
}
function Uo(e, t, r) {
e[t] = r;
}
try {
if (Object.defineProperty) {
let e = function(t) {
switch (t.nodeType) {
case Ce:
case Re:
var r = [];
for (t = t.firstChild; t; )
t.nodeType !== 7 && t.nodeType !== 8 && r.push(e(t)), t = t.nextSibling;
return r.join("");
default:
return t.nodeValue;
}
};
Object.defineProperty(wt.prototype, "length", {
get: function() {
return An(this), this.$$length;
}
}), Object.defineProperty($.prototype, "textContent", {
get: function() {
return e(this);
},
set: function(t) {
switch (this.nodeType) {
case Ce:
case Re:
for (; this.firstChild; )
this.removeChild(this.firstChild);
(t || String(t)) && this.appendChild(this.ownerDocument.createTextNode(t));
break;
default:
this.data = t, this.value = t, this.nodeValue = t;
}
}
}), Uo = function(t, r, n) {
t["$$" + r] = n;
};
}
} catch {
}
Qe.DocumentType = Cr;
Qe.DOMException = V;
Qe.DOMImplementation = Bo;
Qe.Element = rt;
Qe.Node = $;
Qe.NodeList = $e;
Qe.XMLSerializer = Mo;
var Sr = {}, Ho = {};
(function(e) {
var t = je.freeze;
e.XML_ENTITIES = t({
amp: "&",
apos: "'",
gt: ">",
lt: "<",
quot: '"'
}), e.HTML_ENTITIES = t({
Aacute: "Á",
aacute: "á",
Abreve: "Ă",
abreve: "ă",
ac: "∾",
acd: "∿",
acE: "∾̳",
Acirc: "Â",
acirc: "â",
acute: "´",
Acy: "А",
acy: "а",
AElig: "Æ",
aelig: "æ",
af: "",
Afr: "𝔄",
afr: "𝔞",
Agrave: "À",
agrave: "à",
alefsym: "ℵ",
aleph: "ℵ",
Alpha: "Α",
alpha: "α",
Amacr: "Ā",
amacr: "ā",
amalg: "⨿",
AMP: "&",
amp: "&",
And: "⩓",
and: "∧",
andand: "⩕",
andd: "⩜",
andslope: "⩘",
andv: "⩚",
ang: "∠",
ange: "⦤",
angle: "∠",
angmsd: "∡",
angmsdaa: "⦨",
angmsdab: "⦩",
angmsdac: "⦪",
angmsdad: "⦫",
angmsdae: "⦬",
angmsdaf: "⦭",
angmsdag: "⦮",
angmsdah: "⦯",
angrt: "∟",
angrtvb: "⊾",
angrtvbd: "⦝",
angsph: "∢",
angst: "Å",
angzarr: "⍼",
Aogon: "Ą",
aogon: "ą",
Aopf: "𝔸",
aopf: "𝕒",
ap: "≈",
apacir: "⩯",
apE: "⩰",
ape: "≊",
apid: "≋",
apos: "'",
ApplyFunction: "",
approx: "≈",
approxeq: "≊",
Aring: "Å",
aring: "å",
Ascr: "𝒜",
ascr: "𝒶",
Assign: "≔",
ast: "*",
asymp: "≈",
asympeq: "≍",
Atilde: "Ã",
atilde: "ã",
Auml: "Ä",
auml: "ä",
awconint: "∳",
awint: "⨑",
backcong: "≌",
backepsilon: "϶",
backprime: "‵",
backsim: "∽",
backsimeq: "⋍",
Backslash: "∖",
Barv: "⫧",
barvee: "⊽",
Barwed: "⌆",
barwed: "⌅",
barwedge: "⌅",
bbrk: "⎵",
bbrktbrk: "⎶",
bcong: "≌",
Bcy: "Б",
bcy: "б",
bdquo: "„",
becaus: "∵",
Because: "∵",
because: "∵",
bemptyv: "⦰",
bepsi: "϶",
bernou: "ℬ",
Bernoullis: "ℬ",
Beta: "Β",
beta: "β",
beth: "ℶ",
between: "≬",
Bfr: "𝔅",
bfr: "𝔟",
bigcap: "⋂",
bigcirc: "◯",
bigcup: "⋃",
bigodot: "⨀",
bigoplus: "⨁",
bigotimes: "⨂",
bigsqcup: "⨆",
bigstar: "★",
bigtriangledown: "▽",
bigtriangleup: "△",
biguplus: "⨄",
bigvee: "⋁",
bigwedge: "⋀",
bkarow: "⤍",
blacklozenge: "⧫",
blacksquare: "▪",
blacktriangle: "▴",
blacktriangledown: "▾",
blacktriangleleft: "◂",
blacktriangleright: "▸",
blank: "␣",
blk12: "▒",
blk14: "░",
blk34: "▓",
block: "█",
bne: "=⃥",
bnequiv: "≡⃥",
bNot: "⫭",
bnot: "⌐",
Bopf: "𝔹",
bopf: "𝕓",
bot: "⊥",
bottom: "⊥",
bowtie: "⋈",
boxbox: "⧉",
boxDL: "╗",
boxDl: "╖",
boxdL: "╕",
boxdl: "┐",
boxDR: "╔",
boxDr: "╓",
boxdR: "╒",
boxdr: "┌",
boxH: "═",
boxh: "─",
boxHD: "╦",
boxHd: "╤",
boxhD: "╥",
boxhd: "┬",
boxHU: "╩",
boxHu: "╧",
boxhU: "╨",
boxhu: "┴",
boxminus: "⊟",
boxplus: "⊞",
boxtimes: "⊠",
boxUL: "╝",
boxUl: "╜",
boxuL: "╛",
boxul: "┘",
boxUR: "╚",
boxUr: "╙",
boxuR: "╘",
boxur: "└",
boxV: "║",
boxv: "│",
boxVH: "╬",
boxVh: "╫",
boxvH: "╪",
boxvh: "┼",
boxVL: "╣",
boxVl: "╢",
boxvL: "╡",
boxvl: "┤",
boxVR: "╠",
boxVr: "╟",
boxvR: "╞",
boxvr: "├",
bprime: "‵",
Breve: "˘",
breve: "˘",
brvbar: "¦",
Bscr: "ℬ",
bscr: "𝒷",
bsemi: "⁏",
bsim: "∽",
bsime: "⋍",
bsol: "\\",
bsolb: "⧅",
bsolhsub: "⟈",
bull: "•",
bullet: "•",
bump: "≎",
bumpE: "⪮",
bumpe: "≏",
Bumpeq: "≎",
bumpeq: "≏",
Cacute: "Ć",
cacute: "ć",
Cap: "⋒",
cap: "∩",
capand: "⩄",
capbrcup: "⩉",
capcap: "⩋",
capcup: "⩇",
capdot: "⩀",
CapitalDifferentialD: "ⅅ",
caps: "∩︀",
caret: "⁁",
caron: "ˇ",
Cayleys: "ℭ",
ccaps: "⩍",
Ccaron: "Č",
ccaron: "č",
Ccedil: "Ç",
ccedil: "ç",
Ccirc: "Ĉ",
ccirc: "ĉ",
Cconint: "∰",
ccups: "⩌",
ccupssm: "⩐",
Cdot: "Ċ",
cdot: "ċ",
cedil: "¸",
Cedilla: "¸",
cemptyv: "⦲",
cent: "¢",
CenterDot: "·",
centerdot: "·",
Cfr: "ℭ",
cfr: "𝔠",
CHcy: "Ч",
chcy: "ч",
check: "✓",
checkmark: "✓",
Chi: "Χ",
chi: "χ",
cir: "○",
circ: "ˆ",
circeq: "≗",
circlearrowleft: "↺",
circlearrowright: "↻",
circledast: "⊛",
circledcirc: "⊚",
circleddash: "⊝",
CircleDot: "⊙",
circledR: "®",
circledS: "Ⓢ",
CircleMinus: "⊖",
CirclePlus: "⊕",
CircleTimes: "⊗",
cirE: "⧃",
cire: "≗",
cirfnint: "⨐",
cirmid: "⫯",
cirscir: "⧂",
ClockwiseContourIntegral: "∲",
CloseCurlyDoubleQuote: "”",
CloseCurlyQuote: "’",
clubs: "♣",
clubsuit: "♣",
Colon: "∷",
colon: ":",
Colone: "⩴",
colone: "≔",
coloneq: "≔",
comma: ",",
commat: "@",
comp: "∁",
compfn: "∘",
complement: "∁",
complexes: "ℂ",
cong: "≅",
congdot: "⩭",
Congruent: "≡",
Conint: "∯",
conint: "∮",
ContourIntegral: "∮",
Copf: "ℂ",
copf: "𝕔",
coprod: "∐",
Coproduct: "∐",
COPY: "©",
copy: "©",
copysr: "℗",
CounterClockwiseContourIntegral: "∳",
crarr: "↵",
Cross: "⨯",
cross: "✗",
Cscr: "𝒞",
cscr: "𝒸",
csub: "⫏",
csube: "⫑",
csup: "⫐",
csupe: "⫒",
ctdot: "⋯",
cudarrl: "⤸",
cudarrr: "⤵",
cuepr: "⋞",
cuesc: "⋟",
cularr: "↶",
cularrp: "⤽",
Cup: "⋓",
cup: "∪",
cupbrcap: "⩈",
CupCap: "≍",
cupcap: "⩆",
cupcup: "⩊",
cupdot: "⊍",
cupor: "⩅",
cups: "∪︀",
curarr: "↷",
curarrm: "⤼",
curlyeqprec: "⋞",
curlyeqsucc: "⋟",
curlyvee: "⋎",
curlywedge: "⋏",
curren: "¤",
curvearrowleft: "↶",
curvearrowright: "↷",
cuvee: "⋎",
cuwed: "⋏",
cwconint: "∲",
cwint: "∱",
cylcty: "⌭",
Dagger: "‡",
dagger: "†",
daleth: "ℸ",
Darr: "↡",
dArr: "⇓",
darr: "↓",
dash: "‐",
Dashv: "⫤",
dashv: "⊣",
dbkarow: "⤏",
dblac: "˝",
Dcaron: "Ď",
dcaron: "ď",
Dcy: "Д",
dcy: "д",
DD: "ⅅ",
dd: "ⅆ",
ddagger: "‡",
ddarr: "⇊",
DDotrahd: "⤑",
ddotseq: "⩷",
deg: "°",
Del: "∇",
Delta: "Δ",
delta: "δ",
demptyv: "⦱",
dfisht: "⥿",
Dfr: "𝔇",
dfr: "𝔡",
dHar: "⥥",
dharl: "⇃",
dharr: "⇂",
DiacriticalAcute: "´",
DiacriticalDot: "˙",
DiacriticalDoubleAcute: "˝",
DiacriticalGrave: "`",
DiacriticalTilde: "˜",
diam: "⋄",
Diamond: "⋄",
diamond: "⋄",
diamondsuit: "♦",
diams: "♦",
die: "¨",
DifferentialD: "ⅆ",
digamma: "ϝ",
disin: "⋲",
div: "÷",
divide: "÷",
divideontimes: "⋇",
divonx: "⋇",
DJcy: "Ђ",
djcy: "ђ",
dlcorn: "⌞",
dlcrop: "⌍",
dollar: "$",
Dopf: "𝔻",
dopf: "𝕕",
Dot: "¨",
dot: "˙",
DotDot: "⃜",
doteq: "≐",
doteqdot: "≑",
DotEqual: "≐",
dotminus: "∸",
dotplus: "∔",
dotsquare: "⊡",
doublebarwedge: "⌆",
DoubleContourIntegral: "∯",
DoubleDot: "¨",
DoubleDownArrow: "⇓",
DoubleLeftArrow: "⇐",
DoubleLeftRightArrow: "⇔",
DoubleLeftTee: "⫤",
DoubleLongLeftArrow: "⟸",
DoubleLongLeftRightArrow: "⟺",
DoubleLongRightArrow: "⟹",
DoubleRightArrow: "⇒",
DoubleRightTee: "⊨",
DoubleUpArrow: "⇑",
DoubleUpDownArrow: "⇕",
DoubleVerticalBar: "∥",
DownArrow: "↓",
Downarrow: "⇓",
downarrow: "↓",
DownArrowBar: "⤓",
DownArrowUpArrow: "⇵",
DownBreve: "̑",
downdownarrows: "⇊",
downharpoonleft: "⇃",
downharpoonright: "⇂",
DownLeftRightVector: "⥐",
DownLeftTeeVector: "⥞",
DownLeftVector: "↽",
DownLeftVectorBar: "⥖",
DownRightTeeVector: "⥟",
DownRightVector: "⇁",
DownRightVectorBar: "⥗",
DownTee: "⊤",
DownTeeArrow: "↧",
drbkarow: "⤐",
drcorn: "⌟",
drcrop: "⌌",
Dscr: "𝒟",
dscr: "𝒹",
DScy: "Ѕ",
dscy: "ѕ",
dsol: "⧶",
Dstrok: "Đ",
dstrok: "đ",
dtdot: "⋱",
dtri: "▿",
dtrif: "▾",
duarr: "⇵",
duhar: "⥯",
dwangle: "⦦",
DZcy: "Џ",
dzcy: "џ",
dzigrarr: "⟿",
Eacute: "É",
eacute: "é",
easter: "⩮",
Ecaron: "Ě",
ecaron: "ě",
ecir: "≖",
Ecirc: "Ê",
ecirc: "ê",
ecolon: "≕",
Ecy: "Э",
ecy: "э",
eDDot: "⩷",
Edot: "Ė",
eDot: "≑",
edot: "ė",
ee: "ⅇ",
efDot: "≒",
Efr: "𝔈",
efr: "𝔢",
eg: "⪚",
Egrave: "È",
egrave: "è",
egs: "⪖",
egsdot: "⪘",
el: "⪙",
Element: "∈",
elinters: "⏧",
ell: "ℓ",
els: "⪕",
elsdot: "⪗",
Emacr: "Ē",
emacr: "ē",
empty: "∅",
emptyset: "∅",
EmptySmallSquare: "◻",
emptyv: "∅",
EmptyVerySmallSquare: "▫",
emsp: " ",
emsp13: " ",
emsp14: " ",
ENG: "Ŋ",
eng: "ŋ",
ensp: " ",
Eogon: "Ę",
eogon: "ę",
Eopf: "𝔼",
eopf: "𝕖",
epar: "⋕",
eparsl: "⧣",
eplus: "⩱",
epsi: "ε",
Epsilon: "Ε",
epsilon: "ε",
epsiv: "ϵ",
eqcirc: "≖",
eqcolon: "≕",
eqsim: "≂",
eqslantgtr: "⪖",
eqslantless: "⪕",
Equal: "⩵",
equals: "=",
EqualTilde: "≂",
equest: "≟",
Equilibrium: "⇌",
equiv: "≡",
equivDD: "⩸",
eqvparsl: "⧥",
erarr: "⥱",
erDot: "≓",
Escr: "ℰ",
escr: "ℯ",
esdot: "≐",
Esim: "⩳",
esim: "≂",
Eta: "Η",
eta: "η",
ETH: "Ð",
eth: "ð",
Euml: "Ë",
euml: "ë",
euro: "€",
excl: "!",
exist: "∃",
Exists: "∃",
expectation: "ℰ",
ExponentialE: "ⅇ",
exponentiale: "ⅇ",
fallingdotseq: "≒",
Fcy: "Ф",
fcy: "ф",
female: "♀",
ffilig: "ffi",
fflig: "ff",
ffllig: "ffl",
Ffr: "𝔉",
ffr: "𝔣",
filig: "fi",
FilledSmallSquare: "◼",
FilledVerySmallSquare: "▪",
fjlig: "fj",
flat: "♭",
fllig: "fl",
fltns: "▱",
fnof: "ƒ",
Fopf: "𝔽",
fopf: "𝕗",
ForAll: "∀",
forall: "∀",
fork: "⋔",
forkv: "⫙",
Fouriertrf: "ℱ",
fpartint: "⨍",
frac12: "½",
frac13: "⅓",
frac14: "¼",
frac15: "⅕",
frac16: "⅙",
frac18: "⅛",
frac23: "⅔",
frac25: "⅖",
frac34: "¾",
frac35: "⅗",
frac38: "⅜",
frac45: "⅘",
frac56: "⅚",
frac58: "⅝",
frac78: "⅞",
frasl: "⁄",
frown: "⌢",
Fscr: "ℱ",
fscr: "𝒻",
gacute: "ǵ",
Gamma: "Γ",
gamma: "γ",
Gammad: "Ϝ",
gammad: "ϝ",
gap: "⪆",
Gbreve: "Ğ",
gbreve: "ğ",
Gcedil: "Ģ",
Gcirc: "Ĝ",
gcirc: "ĝ",
Gcy: "Г",
gcy: "г",
Gdot: "Ġ",
gdot: "ġ",
gE: "≧",
ge: "≥",
gEl: "⪌",
gel: "⋛",
geq: "≥",
geqq: "≧",
geqslant: "⩾",
ges: "⩾",
gescc: "⪩",
gesdot: "⪀",
gesdoto: "⪂",
gesdotol: "⪄",
gesl: "⋛︀",
gesles: "⪔",
Gfr: "𝔊",
gfr: "𝔤",
Gg: "⋙",
gg: "≫",
ggg: "⋙",
gimel: "ℷ",
GJcy: "Ѓ",
gjcy: "ѓ",
gl: "≷",
gla: "⪥",
glE: "⪒",
glj: "⪤",
gnap: "⪊",
gnapprox: "⪊",
gnE: "≩",
gne: "⪈",
gneq: "⪈",
gneqq: "≩",
gnsim: "⋧",
Gopf: "𝔾",
gopf: "𝕘",
grave: "`",
GreaterEqual: "≥",
GreaterEqualLess: "⋛",
GreaterFullEqual: "≧",
GreaterGreater: "⪢",
GreaterLess: "≷",
GreaterSlantEqual: "⩾",
GreaterTilde: "≳",
Gscr: "𝒢",
gscr: "ℊ",
gsim: "≳",
gsime: "⪎",
gsiml: "⪐",
Gt: "≫",
GT: ">",
gt: ">",
gtcc: "⪧",
gtcir: "⩺",
gtdot: "⋗",
gtlPar: "⦕",
gtquest: "⩼",
gtrapprox: "⪆",
gtrarr: "⥸",
gtrdot: "⋗",
gtreqless: "⋛",
gtreqqless: "⪌",
gtrless: "≷",
gtrsim: "≳",
gvertneqq: "≩︀",
gvnE: "≩︀",
Hacek: "ˇ",
hairsp: " ",
half: "½",
hamilt: "ℋ",
HARDcy: "Ъ",
hardcy: "ъ",
hArr: "⇔",
harr: "↔",
harrcir: "⥈",
harrw: "↭",
Hat: "^",
hbar: "ℏ",
Hcirc: "Ĥ",
hcirc: "ĥ",
hearts: "♥",
heartsuit: "♥",
hellip: "…",
hercon: "⊹",
Hfr: "ℌ",
hfr: "𝔥",
HilbertSpace: "ℋ",
hksearow: "⤥",
hkswarow: "⤦",
hoarr: "⇿",
homtht: "∻",
hookleftarrow: "↩",
hookrightarrow: "↪",
Hopf: "ℍ",
hopf: "𝕙",
horbar: "―",
HorizontalLine: "─",
Hscr: "ℋ",
hscr: "𝒽",
hslash: "ℏ",
Hstrok: "Ħ",
hstrok: "ħ",
HumpDownHump: "≎",
HumpEqual: "≏",
hybull: "⁃",
hyphen: "‐",
Iacute: "Í",
iacute: "í",
ic: "",
Icirc: "Î",
icirc: "î",
Icy: "И",
icy: "и",
Idot: "İ",
IEcy: "Е",
iecy: "е",
iexcl: "¡",
iff: "⇔",
Ifr: "ℑ",
ifr: "𝔦",
Igrave: "Ì",
igrave: "ì",
ii: "ⅈ",
iiiint: "⨌",
iiint: "∭",
iinfin: "⧜",
iiota: "℩",
IJlig: "IJ",
ijlig: "ij",
Im: "ℑ",
Imacr: "Ī",
imacr: "ī",
image: "ℑ",
ImaginaryI: "ⅈ",
imagline: "ℐ",
imagpart: "ℑ",
imath: "ı",
imof: "⊷",
imped: "Ƶ",
Implies: "⇒",
in: "∈",
incare: "℅",
infin: "∞",
infintie: "⧝",
inodot: "ı",
Int: "∬",
int: "∫",
intcal: "⊺",
integers: "ℤ",
Integral: "∫",
intercal: "⊺",
Intersection: "⋂",
intlarhk: "⨗",
intprod: "⨼",
InvisibleComma: ""