{"version":3,"file":"builder.P8OhRle_.js","sources":["../../../../../../../../packages/common/src/embedded-link/enums.ts","../../../../../../../../node_modules/.pnpm/@xmldom+xmldom@0.8.10/node_modules/@xmldom/xmldom/lib/conventions.js","../../../../../../../../node_modules/.pnpm/@xmldom+xmldom@0.8.10/node_modules/@xmldom/xmldom/lib/dom.js","../../../../../../../../node_modules/.pnpm/@xmldom+xmldom@0.8.10/node_modules/@xmldom/xmldom/lib/entities.js","../../../../../../../../node_modules/.pnpm/@xmldom+xmldom@0.8.10/node_modules/@xmldom/xmldom/lib/sax.js","../../../../../../../../node_modules/.pnpm/@xmldom+xmldom@0.8.10/node_modules/@xmldom/xmldom/lib/dom-parser.js","../../../../../../../../node_modules/.pnpm/xpath@0.0.34/node_modules/xpath/xpath.js","../../../../../../../../packages/common/src/constants/builder.ts"],"sourcesContent":["export enum LinkTarget {\n\tBLANK = '_blank',\n\tSELF = '_self',\n\tMODAL = 'modal',\n}\n","'use strict'\n\n/**\n * Ponyfill for `Array.prototype.find` which is only available in ES6 runtimes.\n *\n * Works with anything that has a `length` property and index access properties, including NodeList.\n *\n * @template {unknown} T\n * @param {Array<T> | ({length:number, [number]: T})} list\n * @param {function (item: T, index: number, list:Array<T> | ({length:number, [number]: T})):boolean} predicate\n * @param {Partial<Pick<ArrayConstructor['prototype'], 'find'>>?} ac `Array.prototype` by default,\n * \t\t\t\tallows injecting a custom implementation in tests\n * @returns {T | undefined}\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find\n * @see https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.find\n */\nfunction find(list, predicate, ac) {\n\tif (ac === undefined) {\n\t\tac = Array.prototype;\n\t}\n\tif (list && typeof ac.find === 'function') {\n\t\treturn ac.find.call(list, predicate);\n\t}\n\tfor (var i = 0; i < list.length; i++) {\n\t\tif (Object.prototype.hasOwnProperty.call(list, i)) {\n\t\t\tvar item = list[i];\n\t\t\tif (predicate.call(undefined, item, i, list)) {\n\t\t\t\treturn item;\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * \"Shallow freezes\" an object to render it immutable.\n * Uses `Object.freeze` if available,\n * otherwise the immutability is only in the type.\n *\n * Is used to create \"enum like\" objects.\n *\n * @template T\n * @param {T} object the object to freeze\n * @param {Pick<ObjectConstructor, 'freeze'> = Object} oc `Object` by default,\n * \t\t\t\tallows to inject custom object constructor for tests\n * @returns {Readonly<T>}\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze\n */\nfunction freeze(object, oc) {\n\tif (oc === undefined) {\n\t\toc = Object\n\t}\n\treturn oc && typeof oc.freeze === 'function' ? oc.freeze(object) : object\n}\n\n/**\n * Since we can not rely on `Object.assign` we provide a simplified version\n * that is sufficient for our needs.\n *\n * @param {Object} target\n * @param {Object | null | undefined} source\n *\n * @returns {Object} target\n * @throws TypeError if target is not an object\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign\n * @see https://tc39.es/ecma262/multipage/fundamental-objects.html#sec-object.assign\n */\nfunction assign(target, source) {\n\tif (target === null || typeof target !== 'object') {\n\t\tthrow new TypeError('target is not an object')\n\t}\n\tfor (var key in source) {\n\t\tif (Object.prototype.hasOwnProperty.call(source, key)) {\n\t\t\ttarget[key] = source[key]\n\t\t}\n\t}\n\treturn target\n}\n\n/**\n * All mime types that are allowed as input to `DOMParser.parseFromString`\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMParser/parseFromString#Argument02 MDN\n * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#domparsersupportedtype WHATWG HTML Spec\n * @see DOMParser.prototype.parseFromString\n */\nvar MIME_TYPE = freeze({\n\t/**\n\t * `text/html`, the only mime type that triggers treating an XML document as HTML.\n\t *\n\t * @see DOMParser.SupportedType.isHTML\n\t * @see https://www.iana.org/assignments/media-types/text/html IANA MimeType registration\n\t * @see https://en.wikipedia.org/wiki/HTML Wikipedia\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMParser/parseFromString MDN\n\t * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-domparser-parsefromstring WHATWG HTML Spec\n\t */\n\tHTML: 'text/html',\n\n\t/**\n\t * Helper method to check a mime type if it indicates an HTML document\n\t *\n\t * @param {string} [value]\n\t * @returns {boolean}\n\t *\n\t * @see https://www.iana.org/assignments/media-types/text/html IANA MimeType registration\n\t * @see https://en.wikipedia.org/wiki/HTML Wikipedia\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMParser/parseFromString MDN\n\t * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-domparser-parsefromstring \t */\n\tisHTML: function (value) {\n\t\treturn value === MIME_TYPE.HTML\n\t},\n\n\t/**\n\t * `application/xml`, the standard mime type for XML documents.\n\t *\n\t * @see https://www.iana.org/assignments/media-types/application/xml IANA MimeType registration\n\t * @see https://tools.ietf.org/html/rfc7303#section-9.1 RFC 7303\n\t * @see https://en.wikipedia.org/wiki/XML_and_MIME Wikipedia\n\t */\n\tXML_APPLICATION: 'application/xml',\n\n\t/**\n\t * `text/html`, an alias for `application/xml`.\n\t *\n\t * @see https://tools.ietf.org/html/rfc7303#section-9.2 RFC 7303\n\t * @see https://www.iana.org/assignments/media-types/text/xml IANA MimeType registration\n\t * @see https://en.wikipedia.org/wiki/XML_and_MIME Wikipedia\n\t */\n\tXML_TEXT: 'text/xml',\n\n\t/**\n\t * `application/xhtml+xml`, indicates an XML document that has the default HTML namespace,\n\t * but is parsed as an XML document.\n\t *\n\t * @see https://www.iana.org/assignments/media-types/application/xhtml+xml IANA MimeType registration\n\t * @see https://dom.spec.whatwg.org/#dom-domimplementation-createdocument WHATWG DOM Spec\n\t * @see https://en.wikipedia.org/wiki/XHTML Wikipedia\n\t */\n\tXML_XHTML_APPLICATION: 'application/xhtml+xml',\n\n\t/**\n\t * `image/svg+xml`,\n\t *\n\t * @see https://www.iana.org/assignments/media-types/image/svg+xml IANA MimeType registration\n\t * @see https://www.w3.org/TR/SVG11/ W3C SVG 1.1\n\t * @see https://en.wikipedia.org/wiki/Scalable_Vector_Graphics Wikipedia\n\t */\n\tXML_SVG_IMAGE: 'image/svg+xml',\n})\n\n/**\n * Namespaces that are used in this code base.\n *\n * @see http://www.w3.org/TR/REC-xml-names\n */\nvar NAMESPACE = freeze({\n\t/**\n\t * The XHTML namespace.\n\t *\n\t * @see http://www.w3.org/1999/xhtml\n\t */\n\tHTML: 'http://www.w3.org/1999/xhtml',\n\n\t/**\n\t * Checks if `uri` equals `NAMESPACE.HTML`.\n\t *\n\t * @param {string} [uri]\n\t *\n\t * @see NAMESPACE.HTML\n\t */\n\tisHTML: function (uri) {\n\t\treturn uri === NAMESPACE.HTML\n\t},\n\n\t/**\n\t * The SVG namespace.\n\t *\n\t * @see http://www.w3.org/2000/svg\n\t */\n\tSVG: 'http://www.w3.org/2000/svg',\n\n\t/**\n\t * The `xml:` namespace.\n\t *\n\t * @see http://www.w3.org/XML/1998/namespace\n\t */\n\tXML: 'http://www.w3.org/XML/1998/namespace',\n\n\t/**\n\t * The `xmlns:` namespace\n\t *\n\t * @see https://www.w3.org/2000/xmlns/\n\t */\n\tXMLNS: 'http://www.w3.org/2000/xmlns/',\n})\n\nexports.assign = assign;\nexports.find = find;\nexports.freeze = freeze;\nexports.MIME_TYPE = MIME_TYPE;\nexports.NAMESPACE = NAMESPACE;\n","var conventions = require(\"./conventions\");\n\nvar find = conventions.find;\nvar NAMESPACE = conventions.NAMESPACE;\n\n/**\n * A prerequisite for `[].filter`, to drop elements that are empty\n * @param {string} input\n * @returns {boolean}\n */\nfunction notEmptyString (input) {\n\treturn input !== ''\n}\n/**\n * @see https://infra.spec.whatwg.org/#split-on-ascii-whitespace\n * @see https://infra.spec.whatwg.org/#ascii-whitespace\n *\n * @param {string} input\n * @returns {string[]} (can be empty)\n */\nfunction splitOnASCIIWhitespace(input) {\n\t// U+0009 TAB, U+000A LF, U+000C FF, U+000D CR, U+0020 SPACE\n\treturn input ? input.split(/[\\t\\n\\f\\r ]+/).filter(notEmptyString) : []\n}\n\n/**\n * Adds element as a key to current if it is not already present.\n *\n * @param {Record<string, boolean | undefined>} current\n * @param {string} element\n * @returns {Record<string, boolean | undefined>}\n */\nfunction orderedSetReducer (current, element) {\n\tif (!current.hasOwnProperty(element)) {\n\t\tcurrent[element] = true;\n\t}\n\treturn current;\n}\n\n/**\n * @see https://infra.spec.whatwg.org/#ordered-set\n * @param {string} input\n * @returns {string[]}\n */\nfunction toOrderedSet(input) {\n\tif (!input) return [];\n\tvar list = splitOnASCIIWhitespace(input);\n\treturn Object.keys(list.reduce(orderedSetReducer, {}))\n}\n\n/**\n * Uses `list.indexOf` to implement something like `Array.prototype.includes`,\n * which we can not rely on being available.\n *\n * @param {any[]} list\n * @returns {function(any): boolean}\n */\nfunction arrayIncludes (list) {\n\treturn function(element) {\n\t\treturn list && list.indexOf(element) !== -1;\n\t}\n}\n\nfunction copy(src,dest){\n\tfor(var p in src){\n\t\tif (Object.prototype.hasOwnProperty.call(src, p)) {\n\t\t\tdest[p] = src[p];\n\t\t}\n\t}\n}\n\n/**\n^\\w+\\.prototype\\.([_\\w]+)\\s*=\\s*((?:.*\\{\\s*?[\\r\\n][\\s\\S]*?^})|\\S.*?(?=[;\\r\\n]));?\n^\\w+\\.prototype\\.([_\\w]+)\\s*=\\s*(\\S.*?(?=[;\\r\\n]));?\n */\nfunction _extends(Class,Super){\n\tvar pt = Class.prototype;\n\tif(!(pt instanceof Super)){\n\t\tfunction t(){};\n\t\tt.prototype = Super.prototype;\n\t\tt = new t();\n\t\tcopy(pt,t);\n\t\tClass.prototype = pt = t;\n\t}\n\tif(pt.constructor != Class){\n\t\tif(typeof Class != 'function'){\n\t\t\tconsole.error(\"unknown Class:\"+Class)\n\t\t}\n\t\tpt.constructor = Class\n\t}\n}\n\n// Node Types\nvar NodeType = {}\nvar ELEMENT_NODE                = NodeType.ELEMENT_NODE                = 1;\nvar ATTRIBUTE_NODE              = NodeType.ATTRIBUTE_NODE              = 2;\nvar TEXT_NODE                   = NodeType.TEXT_NODE                   = 3;\nvar CDATA_SECTION_NODE          = NodeType.CDATA_SECTION_NODE          = 4;\nvar ENTITY_REFERENCE_NODE       = NodeType.ENTITY_REFERENCE_NODE       = 5;\nvar ENTITY_NODE                 = NodeType.ENTITY_NODE                 = 6;\nvar PROCESSING_INSTRUCTION_NODE = NodeType.PROCESSING_INSTRUCTION_NODE = 7;\nvar COMMENT_NODE                = NodeType.COMMENT_NODE                = 8;\nvar DOCUMENT_NODE               = NodeType.DOCUMENT_NODE               = 9;\nvar DOCUMENT_TYPE_NODE          = NodeType.DOCUMENT_TYPE_NODE          = 10;\nvar DOCUMENT_FRAGMENT_NODE      = NodeType.DOCUMENT_FRAGMENT_NODE      = 11;\nvar NOTATION_NODE               = NodeType.NOTATION_NODE               = 12;\n\n// ExceptionCode\nvar ExceptionCode = {}\nvar ExceptionMessage = {};\nvar INDEX_SIZE_ERR              = ExceptionCode.INDEX_SIZE_ERR              = ((ExceptionMessage[1]=\"Index size error\"),1);\nvar DOMSTRING_SIZE_ERR          = ExceptionCode.DOMSTRING_SIZE_ERR          = ((ExceptionMessage[2]=\"DOMString size error\"),2);\nvar HIERARCHY_REQUEST_ERR       = ExceptionCode.HIERARCHY_REQUEST_ERR       = ((ExceptionMessage[3]=\"Hierarchy request error\"),3);\nvar WRONG_DOCUMENT_ERR          = ExceptionCode.WRONG_DOCUMENT_ERR          = ((ExceptionMessage[4]=\"Wrong document\"),4);\nvar INVALID_CHARACTER_ERR       = ExceptionCode.INVALID_CHARACTER_ERR       = ((ExceptionMessage[5]=\"Invalid character\"),5);\nvar NO_DATA_ALLOWED_ERR         = ExceptionCode.NO_DATA_ALLOWED_ERR         = ((ExceptionMessage[6]=\"No data allowed\"),6);\nvar NO_MODIFICATION_ALLOWED_ERR = ExceptionCode.NO_MODIFICATION_ALLOWED_ERR = ((ExceptionMessage[7]=\"No modification allowed\"),7);\nvar NOT_FOUND_ERR               = ExceptionCode.NOT_FOUND_ERR               = ((ExceptionMessage[8]=\"Not found\"),8);\nvar NOT_SUPPORTED_ERR           = ExceptionCode.NOT_SUPPORTED_ERR           = ((ExceptionMessage[9]=\"Not supported\"),9);\nvar INUSE_ATTRIBUTE_ERR         = ExceptionCode.INUSE_ATTRIBUTE_ERR         = ((ExceptionMessage[10]=\"Attribute in use\"),10);\n//level2\nvar INVALID_STATE_ERR        \t= ExceptionCode.INVALID_STATE_ERR        \t= ((ExceptionMessage[11]=\"Invalid state\"),11);\nvar SYNTAX_ERR               \t= ExceptionCode.SYNTAX_ERR               \t= ((ExceptionMessage[12]=\"Syntax error\"),12);\nvar INVALID_MODIFICATION_ERR \t= ExceptionCode.INVALID_MODIFICATION_ERR \t= ((ExceptionMessage[13]=\"Invalid modification\"),13);\nvar NAMESPACE_ERR            \t= ExceptionCode.NAMESPACE_ERR           \t= ((ExceptionMessage[14]=\"Invalid namespace\"),14);\nvar INVALID_ACCESS_ERR       \t= ExceptionCode.INVALID_ACCESS_ERR      \t= ((ExceptionMessage[15]=\"Invalid access\"),15);\n\n/**\n * DOM Level 2\n * Object DOMException\n * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html\n * @see http://www.w3.org/TR/REC-DOM-Level-1/ecma-script-language-binding.html\n */\nfunction DOMException(code, message) {\n\tif(message instanceof Error){\n\t\tvar error = message;\n\t}else{\n\t\terror = this;\n\t\tError.call(this, ExceptionMessage[code]);\n\t\tthis.message = ExceptionMessage[code];\n\t\tif(Error.captureStackTrace) Error.captureStackTrace(this, DOMException);\n\t}\n\terror.code = code;\n\tif(message) this.message = this.message + \": \" + message;\n\treturn error;\n};\nDOMException.prototype = Error.prototype;\ncopy(ExceptionCode,DOMException)\n\n/**\n * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-536297177\n * The NodeList interface provides the abstraction of an ordered collection of nodes, without defining or constraining how this collection is implemented. NodeList objects in the DOM are live.\n * The items in the NodeList are accessible via an integral index, starting from 0.\n */\nfunction NodeList() {\n};\nNodeList.prototype = {\n\t/**\n\t * The number of nodes in the list. The range of valid child node indices is 0 to length-1 inclusive.\n\t * @standard level1\n\t */\n\tlength:0,\n\t/**\n\t * 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.\n\t * @standard level1\n\t * @param index  unsigned long\n\t *   Index into the collection.\n\t * @return Node\n\t * \tThe node at the indexth position in the NodeList, or null if that is not a valid index.\n\t */\n\titem: function(index) {\n\t\treturn index >= 0 && index < this.length ? this[index] : null;\n\t},\n\ttoString:function(isHTML,nodeFilter){\n\t\tfor(var buf = [], i = 0;i<this.length;i++){\n\t\t\tserializeToString(this[i],buf,isHTML,nodeFilter);\n\t\t}\n\t\treturn buf.join('');\n\t},\n\t/**\n\t * @private\n\t * @param {function (Node):boolean} predicate\n\t * @returns {Node[]}\n\t */\n\tfilter: function (predicate) {\n\t\treturn Array.prototype.filter.call(this, predicate);\n\t},\n\t/**\n\t * @private\n\t * @param {Node} item\n\t * @returns {number}\n\t */\n\tindexOf: function (item) {\n\t\treturn Array.prototype.indexOf.call(this, item);\n\t},\n};\n\nfunction LiveNodeList(node,refresh){\n\tthis._node = node;\n\tthis._refresh = refresh\n\t_updateLiveList(this);\n}\nfunction _updateLiveList(list){\n\tvar inc = list._node._inc || list._node.ownerDocument._inc;\n\tif (list._inc !== inc) {\n\t\tvar ls = list._refresh(list._node);\n\t\t__set__(list,'length',ls.length);\n\t\tif (!list.$$length || ls.length < list.$$length) {\n\t\t\tfor (var i = ls.length; i in list; i++) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(list, i)) {\n\t\t\t\t\tdelete list[i];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tcopy(ls,list);\n\t\tlist._inc = inc;\n\t}\n}\nLiveNodeList.prototype.item = function(i){\n\t_updateLiveList(this);\n\treturn this[i] || null;\n}\n\n_extends(LiveNodeList,NodeList);\n\n/**\n * Objects implementing the NamedNodeMap interface are used\n * to represent collections of nodes that can be accessed by name.\n * Note that NamedNodeMap does not inherit from NodeList;\n * NamedNodeMaps are not maintained in any particular order.\n * Objects contained in an object implementing NamedNodeMap may also be accessed by an ordinal index,\n * but this is simply to allow convenient enumeration of the contents of a NamedNodeMap,\n * and does not imply that the DOM specifies an order to these Nodes.\n * NamedNodeMap objects in the DOM are live.\n * used for attributes or DocumentType entities\n */\nfunction NamedNodeMap() {\n};\n\nfunction _findNodeIndex(list,node){\n\tvar i = list.length;\n\twhile(i--){\n\t\tif(list[i] === node){return i}\n\t}\n}\n\nfunction _addNamedNode(el,list,newAttr,oldAttr){\n\tif(oldAttr){\n\t\tlist[_findNodeIndex(list,oldAttr)] = newAttr;\n\t}else{\n\t\tlist[list.length++] = newAttr;\n\t}\n\tif(el){\n\t\tnewAttr.ownerElement = el;\n\t\tvar doc = el.ownerDocument;\n\t\tif(doc){\n\t\t\toldAttr && _onRemoveAttribute(doc,el,oldAttr);\n\t\t\t_onAddAttribute(doc,el,newAttr);\n\t\t}\n\t}\n}\nfunction _removeNamedNode(el,list,attr){\n\t//console.log('remove attr:'+attr)\n\tvar i = _findNodeIndex(list,attr);\n\tif(i>=0){\n\t\tvar lastIndex = list.length-1\n\t\twhile(i<lastIndex){\n\t\t\tlist[i] = list[++i]\n\t\t}\n\t\tlist.length = lastIndex;\n\t\tif(el){\n\t\t\tvar doc = el.ownerDocument;\n\t\t\tif(doc){\n\t\t\t\t_onRemoveAttribute(doc,el,attr);\n\t\t\t\tattr.ownerElement = null;\n\t\t\t}\n\t\t}\n\t}else{\n\t\tthrow new DOMException(NOT_FOUND_ERR,new Error(el.tagName+'@'+attr))\n\t}\n}\nNamedNodeMap.prototype = {\n\tlength:0,\n\titem:NodeList.prototype.item,\n\tgetNamedItem: function(key) {\n//\t\tif(key.indexOf(':')>0 || key == 'xmlns'){\n//\t\t\treturn null;\n//\t\t}\n\t\t//console.log()\n\t\tvar i = this.length;\n\t\twhile(i--){\n\t\t\tvar attr = this[i];\n\t\t\t//console.log(attr.nodeName,key)\n\t\t\tif(attr.nodeName == key){\n\t\t\t\treturn attr;\n\t\t\t}\n\t\t}\n\t},\n\tsetNamedItem: function(attr) {\n\t\tvar el = attr.ownerElement;\n\t\tif(el && el!=this._ownerElement){\n\t\t\tthrow new DOMException(INUSE_ATTRIBUTE_ERR);\n\t\t}\n\t\tvar oldAttr = this.getNamedItem(attr.nodeName);\n\t\t_addNamedNode(this._ownerElement,this,attr,oldAttr);\n\t\treturn oldAttr;\n\t},\n\t/* returns Node */\n\tsetNamedItemNS: function(attr) {// raises: WRONG_DOCUMENT_ERR,NO_MODIFICATION_ALLOWED_ERR,INUSE_ATTRIBUTE_ERR\n\t\tvar el = attr.ownerElement, oldAttr;\n\t\tif(el && el!=this._ownerElement){\n\t\t\tthrow new DOMException(INUSE_ATTRIBUTE_ERR);\n\t\t}\n\t\toldAttr = this.getNamedItemNS(attr.namespaceURI,attr.localName);\n\t\t_addNamedNode(this._ownerElement,this,attr,oldAttr);\n\t\treturn oldAttr;\n\t},\n\n\t/* returns Node */\n\tremoveNamedItem: function(key) {\n\t\tvar attr = this.getNamedItem(key);\n\t\t_removeNamedNode(this._ownerElement,this,attr);\n\t\treturn attr;\n\n\n\t},// raises: NOT_FOUND_ERR,NO_MODIFICATION_ALLOWED_ERR\n\n\t//for level2\n\tremoveNamedItemNS:function(namespaceURI,localName){\n\t\tvar attr = this.getNamedItemNS(namespaceURI,localName);\n\t\t_removeNamedNode(this._ownerElement,this,attr);\n\t\treturn attr;\n\t},\n\tgetNamedItemNS: function(namespaceURI, localName) {\n\t\tvar i = this.length;\n\t\twhile(i--){\n\t\t\tvar node = this[i];\n\t\t\tif(node.localName == localName && node.namespaceURI == namespaceURI){\n\t\t\t\treturn node;\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n};\n\n/**\n * The DOMImplementation interface represents an object providing methods\n * which are not dependent on any particular document.\n * Such an object is returned by the `Document.implementation` property.\n *\n * __The individual methods describe the differences compared to the specs.__\n *\n * @constructor\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation MDN\n * @see https://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#ID-102161490 DOM Level 1 Core (Initial)\n * @see https://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-102161490 DOM Level 2 Core\n * @see https://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-102161490 DOM Level 3 Core\n * @see https://dom.spec.whatwg.org/#domimplementation DOM Living Standard\n */\nfunction DOMImplementation() {\n}\n\nDOMImplementation.prototype = {\n\t/**\n\t * The DOMImplementation.hasFeature() method returns a Boolean flag indicating if a given feature is supported.\n\t * The different implementations fairly diverged in what kind of features were reported.\n\t * The latest version of the spec settled to force this method to always return true, where the functionality was accurate and in use.\n\t *\n\t * @deprecated It is deprecated and modern browsers return true in all cases.\n\t *\n\t * @param {string} feature\n\t * @param {string} [version]\n\t * @returns {boolean} always true\n\t *\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation/hasFeature MDN\n\t * @see https://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#ID-5CED94D7 DOM Level 1 Core\n\t * @see https://dom.spec.whatwg.org/#dom-domimplementation-hasfeature DOM Living Standard\n\t */\n\thasFeature: function(feature, version) {\n\t\t\treturn true;\n\t},\n\t/**\n\t * Creates an XML Document object of the specified type with its document element.\n\t *\n\t * __It behaves slightly different from the description in the living standard__:\n\t * - There is no interface/class `XMLDocument`, it returns a `Document` instance.\n\t * - `contentType`, `encoding`, `mode`, `origin`, `url` fields are currently not declared.\n\t * - this implementation is not validating names or qualified names\n\t *   (when parsing XML strings, the SAX parser takes care of that)\n\t *\n\t * @param {string|null} namespaceURI\n\t * @param {string} qualifiedName\n\t * @param {DocumentType=null} doctype\n\t * @returns {Document}\n\t *\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation/createDocument MDN\n\t * @see https://www.w3.org/TR/DOM-Level-2-Core/core.html#Level-2-Core-DOM-createDocument DOM Level 2 Core (initial)\n\t * @see https://dom.spec.whatwg.org/#dom-domimplementation-createdocument  DOM Level 2 Core\n\t *\n\t * @see https://dom.spec.whatwg.org/#validate-and-extract DOM: Validate and extract\n\t * @see https://www.w3.org/TR/xml/#NT-NameStartChar XML Spec: Names\n\t * @see https://www.w3.org/TR/xml-names/#ns-qualnames XML Namespaces: Qualified names\n\t */\n\tcreateDocument: function(namespaceURI,  qualifiedName, doctype){\n\t\tvar doc = new Document();\n\t\tdoc.implementation = this;\n\t\tdoc.childNodes = new NodeList();\n\t\tdoc.doctype = doctype || null;\n\t\tif (doctype){\n\t\t\tdoc.appendChild(doctype);\n\t\t}\n\t\tif (qualifiedName){\n\t\t\tvar root = doc.createElementNS(namespaceURI, qualifiedName);\n\t\t\tdoc.appendChild(root);\n\t\t}\n\t\treturn doc;\n\t},\n\t/**\n\t * Returns a doctype, with the given `qualifiedName`, `publicId`, and `systemId`.\n\t *\n\t * __This behavior is slightly different from the in the specs__:\n\t * - this implementation is not validating names or qualified names\n\t *   (when parsing XML strings, the SAX parser takes care of that)\n\t *\n\t * @param {string} qualifiedName\n\t * @param {string} [publicId]\n\t * @param {string} [systemId]\n\t * @returns {DocumentType} which can either be used with `DOMImplementation.createDocument` upon document creation\n\t * \t\t\t\t  or can be put into the document via methods like `Node.insertBefore()` or `Node.replaceChild()`\n\t *\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation/createDocumentType MDN\n\t * @see https://www.w3.org/TR/DOM-Level-2-Core/core.html#Level-2-Core-DOM-createDocType DOM Level 2 Core\n\t * @see https://dom.spec.whatwg.org/#dom-domimplementation-createdocumenttype DOM Living Standard\n\t *\n\t * @see https://dom.spec.whatwg.org/#validate-and-extract DOM: Validate and extract\n\t * @see https://www.w3.org/TR/xml/#NT-NameStartChar XML Spec: Names\n\t * @see https://www.w3.org/TR/xml-names/#ns-qualnames XML Namespaces: Qualified names\n\t */\n\tcreateDocumentType: function(qualifiedName, publicId, systemId){\n\t\tvar node = new DocumentType();\n\t\tnode.name = qualifiedName;\n\t\tnode.nodeName = qualifiedName;\n\t\tnode.publicId = publicId || '';\n\t\tnode.systemId = systemId || '';\n\n\t\treturn node;\n\t}\n};\n\n\n/**\n * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-1950641247\n */\n\nfunction Node() {\n};\n\nNode.prototype = {\n\tfirstChild : null,\n\tlastChild : null,\n\tpreviousSibling : null,\n\tnextSibling : null,\n\tattributes : null,\n\tparentNode : null,\n\tchildNodes : null,\n\townerDocument : null,\n\tnodeValue : null,\n\tnamespaceURI : null,\n\tprefix : null,\n\tlocalName : null,\n\t// Modified in DOM Level 2:\n\tinsertBefore:function(newChild, refChild){//raises\n\t\treturn _insertBefore(this,newChild,refChild);\n\t},\n\treplaceChild:function(newChild, oldChild){//raises\n\t\t_insertBefore(this, newChild,oldChild, assertPreReplacementValidityInDocument);\n\t\tif(oldChild){\n\t\t\tthis.removeChild(oldChild);\n\t\t}\n\t},\n\tremoveChild:function(oldChild){\n\t\treturn _removeChild(this,oldChild);\n\t},\n\tappendChild:function(newChild){\n\t\treturn this.insertBefore(newChild,null);\n\t},\n\thasChildNodes:function(){\n\t\treturn this.firstChild != null;\n\t},\n\tcloneNode:function(deep){\n\t\treturn cloneNode(this.ownerDocument||this,this,deep);\n\t},\n\t// Modified in DOM Level 2:\n\tnormalize:function(){\n\t\tvar child = this.firstChild;\n\t\twhile(child){\n\t\t\tvar next = child.nextSibling;\n\t\t\tif(next && next.nodeType == TEXT_NODE && child.nodeType == TEXT_NODE){\n\t\t\t\tthis.removeChild(next);\n\t\t\t\tchild.appendData(next.data);\n\t\t\t}else{\n\t\t\t\tchild.normalize();\n\t\t\t\tchild = next;\n\t\t\t}\n\t\t}\n\t},\n  \t// Introduced in DOM Level 2:\n\tisSupported:function(feature, version){\n\t\treturn this.ownerDocument.implementation.hasFeature(feature,version);\n\t},\n    // Introduced in DOM Level 2:\n    hasAttributes:function(){\n    \treturn this.attributes.length>0;\n    },\n\t/**\n\t * Look up the prefix associated to the given namespace URI, starting from this node.\n\t * **The default namespace declarations are ignored by this method.**\n\t * See Namespace Prefix Lookup for details on the algorithm used by this method.\n\t *\n\t * _Note: The implementation seems to be incomplete when compared to the algorithm described in the specs._\n\t *\n\t * @param {string | null} namespaceURI\n\t * @returns {string | null}\n\t * @see https://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-lookupNamespacePrefix\n\t * @see https://www.w3.org/TR/DOM-Level-3-Core/namespaces-algorithms.html#lookupNamespacePrefixAlgo\n\t * @see https://dom.spec.whatwg.org/#dom-node-lookupprefix\n\t * @see https://github.com/xmldom/xmldom/issues/322\n\t */\n    lookupPrefix:function(namespaceURI){\n    \tvar el = this;\n    \twhile(el){\n    \t\tvar map = el._nsMap;\n    \t\t//console.dir(map)\n    \t\tif(map){\n    \t\t\tfor(var n in map){\n\t\t\t\t\t\tif (Object.prototype.hasOwnProperty.call(map, n) && map[n] === namespaceURI) {\n\t\t\t\t\t\t\treturn n;\n\t\t\t\t\t\t}\n    \t\t\t}\n    \t\t}\n    \t\tel = el.nodeType == ATTRIBUTE_NODE?el.ownerDocument : el.parentNode;\n    \t}\n    \treturn null;\n    },\n    // Introduced in DOM Level 3:\n    lookupNamespaceURI:function(prefix){\n    \tvar el = this;\n    \twhile(el){\n    \t\tvar map = el._nsMap;\n    \t\t//console.dir(map)\n    \t\tif(map){\n    \t\t\tif(Object.prototype.hasOwnProperty.call(map, prefix)){\n    \t\t\t\treturn map[prefix] ;\n    \t\t\t}\n    \t\t}\n    \t\tel = el.nodeType == ATTRIBUTE_NODE?el.ownerDocument : el.parentNode;\n    \t}\n    \treturn null;\n    },\n    // Introduced in DOM Level 3:\n    isDefaultNamespace:function(namespaceURI){\n    \tvar prefix = this.lookupPrefix(namespaceURI);\n    \treturn prefix == null;\n    }\n};\n\n\nfunction _xmlEncoder(c){\n\treturn c == '<' && '&lt;' ||\n         c == '>' && '&gt;' ||\n         c == '&' && '&amp;' ||\n         c == '\"' && '&quot;' ||\n         '&#'+c.charCodeAt()+';'\n}\n\n\ncopy(NodeType,Node);\ncopy(NodeType,Node.prototype);\n\n/**\n * @param callback return true for continue,false for break\n * @return boolean true: break visit;\n */\nfunction _visitNode(node,callback){\n\tif(callback(node)){\n\t\treturn true;\n\t}\n\tif(node = node.firstChild){\n\t\tdo{\n\t\t\tif(_visitNode(node,callback)){return true}\n        }while(node=node.nextSibling)\n    }\n}\n\n\n\nfunction Document(){\n\tthis.ownerDocument = this;\n}\n\nfunction _onAddAttribute(doc,el,newAttr){\n\tdoc && doc._inc++;\n\tvar ns = newAttr.namespaceURI ;\n\tif(ns === NAMESPACE.XMLNS){\n\t\t//update namespace\n\t\tel._nsMap[newAttr.prefix?newAttr.localName:''] = newAttr.value\n\t}\n}\n\nfunction _onRemoveAttribute(doc,el,newAttr,remove){\n\tdoc && doc._inc++;\n\tvar ns = newAttr.namespaceURI ;\n\tif(ns === NAMESPACE.XMLNS){\n\t\t//update namespace\n\t\tdelete el._nsMap[newAttr.prefix?newAttr.localName:'']\n\t}\n}\n\n/**\n * Updates `el.childNodes`, updating the indexed items and it's `length`.\n * Passing `newChild` means it will be appended.\n * Otherwise it's assumed that an item has been removed,\n * and `el.firstNode` and it's `.nextSibling` are used\n * to walk the current list of child nodes.\n *\n * @param {Document} doc\n * @param {Node} el\n * @param {Node} [newChild]\n * @private\n */\nfunction _onUpdateChild (doc, el, newChild) {\n\tif(doc && doc._inc){\n\t\tdoc._inc++;\n\t\t//update childNodes\n\t\tvar cs = el.childNodes;\n\t\tif (newChild) {\n\t\t\tcs[cs.length++] = newChild;\n\t\t} else {\n\t\t\tvar child = el.firstChild;\n\t\t\tvar i = 0;\n\t\t\twhile (child) {\n\t\t\t\tcs[i++] = child;\n\t\t\t\tchild = child.nextSibling;\n\t\t\t}\n\t\t\tcs.length = i;\n\t\t\tdelete cs[cs.length];\n\t\t}\n\t}\n}\n\n/**\n * Removes the connections between `parentNode` and `child`\n * and any existing `child.previousSibling` or `child.nextSibling`.\n *\n * @see https://github.com/xmldom/xmldom/issues/135\n * @see https://github.com/xmldom/xmldom/issues/145\n *\n * @param {Node} parentNode\n * @param {Node} child\n * @returns {Node} the child that was removed.\n * @private\n */\nfunction _removeChild (parentNode, child) {\n\tvar previous = child.previousSibling;\n\tvar next = child.nextSibling;\n\tif (previous) {\n\t\tprevious.nextSibling = next;\n\t} else {\n\t\tparentNode.firstChild = next;\n\t}\n\tif (next) {\n\t\tnext.previousSibling = previous;\n\t} else {\n\t\tparentNode.lastChild = previous;\n\t}\n\tchild.parentNode = null;\n\tchild.previousSibling = null;\n\tchild.nextSibling = null;\n\t_onUpdateChild(parentNode.ownerDocument, parentNode);\n\treturn child;\n}\n\n/**\n * Returns `true` if `node` can be a parent for insertion.\n * @param {Node} node\n * @returns {boolean}\n */\nfunction hasValidParentNodeType(node) {\n\treturn (\n\t\tnode &&\n\t\t(node.nodeType === Node.DOCUMENT_NODE || node.nodeType === Node.DOCUMENT_FRAGMENT_NODE || node.nodeType === Node.ELEMENT_NODE)\n\t);\n}\n\n/**\n * Returns `true` if `node` can be inserted according to it's `nodeType`.\n * @param {Node} node\n * @returns {boolean}\n */\nfunction hasInsertableNodeType(node) {\n\treturn (\n\t\tnode &&\n\t\t(isElementNode(node) ||\n\t\t\tisTextNode(node) ||\n\t\t\tisDocTypeNode(node) ||\n\t\t\tnode.nodeType === Node.DOCUMENT_FRAGMENT_NODE ||\n\t\t\tnode.nodeType === Node.COMMENT_NODE ||\n\t\t\tnode.nodeType === Node.PROCESSING_INSTRUCTION_NODE)\n\t);\n}\n\n/**\n * Returns true if `node` is a DOCTYPE node\n * @param {Node} node\n * @returns {boolean}\n */\nfunction isDocTypeNode(node) {\n\treturn node && node.nodeType === Node.DOCUMENT_TYPE_NODE;\n}\n\n/**\n * Returns true if the node is an element\n * @param {Node} node\n * @returns {boolean}\n */\nfunction isElementNode(node) {\n\treturn node && node.nodeType === Node.ELEMENT_NODE;\n}\n/**\n * Returns true if `node` is a text node\n * @param {Node} node\n * @returns {boolean}\n */\nfunction isTextNode(node) {\n\treturn node && node.nodeType === Node.TEXT_NODE;\n}\n\n/**\n * Check if en element node can be inserted before `child`, or at the end if child is falsy,\n * according to the presence and position of a doctype node on the same level.\n *\n * @param {Document} doc The document node\n * @param {Node} child the node that would become the nextSibling if the element would be inserted\n * @returns {boolean} `true` if an element can be inserted before child\n * @private\n * https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity\n */\nfunction isElementInsertionPossible(doc, child) {\n\tvar parentChildNodes = doc.childNodes || [];\n\tif (find(parentChildNodes, isElementNode) || isDocTypeNode(child)) {\n\t\treturn false;\n\t}\n\tvar docTypeNode = find(parentChildNodes, isDocTypeNode);\n\treturn !(child && docTypeNode && parentChildNodes.indexOf(docTypeNode) > parentChildNodes.indexOf(child));\n}\n\n/**\n * Check if en element node can be inserted before `child`, or at the end if child is falsy,\n * according to the presence and position of a doctype node on the same level.\n *\n * @param {Node} doc The document node\n * @param {Node} child the node that would become the nextSibling if the element would be inserted\n * @returns {boolean} `true` if an element can be inserted before child\n * @private\n * https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity\n */\nfunction isElementReplacementPossible(doc, child) {\n\tvar parentChildNodes = doc.childNodes || [];\n\n\tfunction hasElementChildThatIsNotChild(node) {\n\t\treturn isElementNode(node) && node !== child;\n\t}\n\n\tif (find(parentChildNodes, hasElementChildThatIsNotChild)) {\n\t\treturn false;\n\t}\n\tvar docTypeNode = find(parentChildNodes, isDocTypeNode);\n\treturn !(child && docTypeNode && parentChildNodes.indexOf(docTypeNode) > parentChildNodes.indexOf(child));\n}\n\n/**\n * @private\n * Steps 1-5 of the checks before inserting and before replacing a child are the same.\n *\n * @param {Node} parent the parent node to insert `node` into\n * @param {Node} node the node to insert\n * @param {Node=} child the node that should become the `nextSibling` of `node`\n * @returns {Node}\n * @throws DOMException for several node combinations that would create a DOM that is not well-formed.\n * @throws DOMException if `child` is provided but is not a child of `parent`.\n * @see https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity\n * @see https://dom.spec.whatwg.org/#concept-node-replace\n */\nfunction assertPreInsertionValidity1to5(parent, node, child) {\n\t// 1. If `parent` is not a Document, DocumentFragment, or Element node, then throw a \"HierarchyRequestError\" DOMException.\n\tif (!hasValidParentNodeType(parent)) {\n\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Unexpected parent node type ' + parent.nodeType);\n\t}\n\t// 2. If `node` is a host-including inclusive ancestor of `parent`, then throw a \"HierarchyRequestError\" DOMException.\n\t// not implemented!\n\t// 3. If `child` is non-null and its parent is not `parent`, then throw a \"NotFoundError\" DOMException.\n\tif (child && child.parentNode !== parent) {\n\t\tthrow new DOMException(NOT_FOUND_ERR, 'child not in parent');\n\t}\n\tif (\n\t\t// 4. If `node` is not a DocumentFragment, DocumentType, Element, or CharacterData node, then throw a \"HierarchyRequestError\" DOMException.\n\t\t!hasInsertableNodeType(node) ||\n\t\t// 5. If either `node` is a Text node and `parent` is a document,\n\t\t// the sax parser currently adds top level text nodes, this will be fixed in 0.9.0\n\t\t// || (node.nodeType === Node.TEXT_NODE && parent.nodeType === Node.DOCUMENT_NODE)\n\t\t// or `node` is a doctype and `parent` is not a document, then throw a \"HierarchyRequestError\" DOMException.\n\t\t(isDocTypeNode(node) && parent.nodeType !== Node.DOCUMENT_NODE)\n\t) {\n\t\tthrow new DOMException(\n\t\t\tHIERARCHY_REQUEST_ERR,\n\t\t\t'Unexpected node type ' + node.nodeType + ' for parent node type ' + parent.nodeType\n\t\t);\n\t}\n}\n\n/**\n * @private\n * Step 6 of the checks before inserting and before replacing a child are different.\n *\n * @param {Document} parent the parent node to insert `node` into\n * @param {Node} node the node to insert\n * @param {Node | undefined} child the node that should become the `nextSibling` of `node`\n * @returns {Node}\n * @throws DOMException for several node combinations that would create a DOM that is not well-formed.\n * @throws DOMException if `child` is provided but is not a child of `parent`.\n * @see https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity\n * @see https://dom.spec.whatwg.org/#concept-node-replace\n */\nfunction assertPreInsertionValidityInDocument(parent, node, child) {\n\tvar parentChildNodes = parent.childNodes || [];\n\tvar nodeChildNodes = node.childNodes || [];\n\n\t// DocumentFragment\n\tif (node.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n\t\tvar nodeChildElements = nodeChildNodes.filter(isElementNode);\n\t\t// If node has more than one element child or has a Text node child.\n\t\tif (nodeChildElements.length > 1 || find(nodeChildNodes, isTextNode)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'More than one element or text in fragment');\n\t\t}\n\t\t// Otherwise, if `node` has one element child and either `parent` has an element child,\n\t\t// `child` is a doctype, or `child` is non-null and a doctype is following `child`.\n\t\tif (nodeChildElements.length === 1 && !isElementInsertionPossible(parent, child)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Element in fragment can not be inserted before doctype');\n\t\t}\n\t}\n\t// Element\n\tif (isElementNode(node)) {\n\t\t// `parent` has an element child, `child` is a doctype,\n\t\t// or `child` is non-null and a doctype is following `child`.\n\t\tif (!isElementInsertionPossible(parent, child)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Only one element can be added and only after doctype');\n\t\t}\n\t}\n\t// DocumentType\n\tif (isDocTypeNode(node)) {\n\t\t// `parent` has a doctype child,\n\t\tif (find(parentChildNodes, isDocTypeNode)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Only one doctype is allowed');\n\t\t}\n\t\tvar parentElementChild = find(parentChildNodes, isElementNode);\n\t\t// `child` is non-null and an element is preceding `child`,\n\t\tif (child && parentChildNodes.indexOf(parentElementChild) < parentChildNodes.indexOf(child)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Doctype can only be inserted before an element');\n\t\t}\n\t\t// or `child` is null and `parent` has an element child.\n\t\tif (!child && parentElementChild) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Doctype can not be appended since element is present');\n\t\t}\n\t}\n}\n\n/**\n * @private\n * Step 6 of the checks before inserting and before replacing a child are different.\n *\n * @param {Document} parent the parent node to insert `node` into\n * @param {Node} node the node to insert\n * @param {Node | undefined} child the node that should become the `nextSibling` of `node`\n * @returns {Node}\n * @throws DOMException for several node combinations that would create a DOM that is not well-formed.\n * @throws DOMException if `child` is provided but is not a child of `parent`.\n * @see https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity\n * @see https://dom.spec.whatwg.org/#concept-node-replace\n */\nfunction assertPreReplacementValidityInDocument(parent, node, child) {\n\tvar parentChildNodes = parent.childNodes || [];\n\tvar nodeChildNodes = node.childNodes || [];\n\n\t// DocumentFragment\n\tif (node.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n\t\tvar nodeChildElements = nodeChildNodes.filter(isElementNode);\n\t\t// If `node` has more than one element child or has a Text node child.\n\t\tif (nodeChildElements.length > 1 || find(nodeChildNodes, isTextNode)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'More than one element or text in fragment');\n\t\t}\n\t\t// Otherwise, if `node` has one element child and either `parent` has an element child that is not `child` or a doctype is following `child`.\n\t\tif (nodeChildElements.length === 1 && !isElementReplacementPossible(parent, child)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Element in fragment can not be inserted before doctype');\n\t\t}\n\t}\n\t// Element\n\tif (isElementNode(node)) {\n\t\t// `parent` has an element child that is not `child` or a doctype is following `child`.\n\t\tif (!isElementReplacementPossible(parent, child)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Only one element can be added and only after doctype');\n\t\t}\n\t}\n\t// DocumentType\n\tif (isDocTypeNode(node)) {\n\t\tfunction hasDoctypeChildThatIsNotChild(node) {\n\t\t\treturn isDocTypeNode(node) && node !== child;\n\t\t}\n\n\t\t// `parent` has a doctype child that is not `child`,\n\t\tif (find(parentChildNodes, hasDoctypeChildThatIsNotChild)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Only one doctype is allowed');\n\t\t}\n\t\tvar parentElementChild = find(parentChildNodes, isElementNode);\n\t\t// or an element is preceding `child`.\n\t\tif (child && parentChildNodes.indexOf(parentElementChild) < parentChildNodes.indexOf(child)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Doctype can only be inserted before an element');\n\t\t}\n\t}\n}\n\n/**\n * @private\n * @param {Node} parent the parent node to insert `node` into\n * @param {Node} node the node to insert\n * @param {Node=} child the node that should become the `nextSibling` of `node`\n * @returns {Node}\n * @throws DOMException for several node combinations that would create a DOM that is not well-formed.\n * @throws DOMException if `child` is provided but is not a child of `parent`.\n * @see https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity\n */\nfunction _insertBefore(parent, node, child, _inDocumentAssertion) {\n\t// To ensure pre-insertion validity of a node into a parent before a child, run these steps:\n\tassertPreInsertionValidity1to5(parent, node, child);\n\n\t// If parent is a document, and any of the statements below, switched on the interface node implements,\n\t// are true, then throw a \"HierarchyRequestError\" DOMException.\n\tif (parent.nodeType === Node.DOCUMENT_NODE) {\n\t\t(_inDocumentAssertion || assertPreInsertionValidityInDocument)(parent, node, child);\n\t}\n\n\tvar cp = node.parentNode;\n\tif(cp){\n\t\tcp.removeChild(node);//remove and update\n\t}\n\tif(node.nodeType === DOCUMENT_FRAGMENT_NODE){\n\t\tvar newFirst = node.firstChild;\n\t\tif (newFirst == null) {\n\t\t\treturn node;\n\t\t}\n\t\tvar newLast = node.lastChild;\n\t}else{\n\t\tnewFirst = newLast = node;\n\t}\n\tvar pre = child ? child.previousSibling : parent.lastChild;\n\n\tnewFirst.previousSibling = pre;\n\tnewLast.nextSibling = child;\n\n\n\tif(pre){\n\t\tpre.nextSibling = newFirst;\n\t}else{\n\t\tparent.firstChild = newFirst;\n\t}\n\tif(child == null){\n\t\tparent.lastChild = newLast;\n\t}else{\n\t\tchild.previousSibling = newLast;\n\t}\n\tdo{\n\t\tnewFirst.parentNode = parent;\n\t}while(newFirst !== newLast && (newFirst= newFirst.nextSibling))\n\t_onUpdateChild(parent.ownerDocument||parent, parent);\n\t//console.log(parent.lastChild.nextSibling == null)\n\tif (node.nodeType == DOCUMENT_FRAGMENT_NODE) {\n\t\tnode.firstChild = node.lastChild = null;\n\t}\n\treturn node;\n}\n\n/**\n * Appends `newChild` to `parentNode`.\n * If `newChild` is already connected to a `parentNode` it is first removed from it.\n *\n * @see https://github.com/xmldom/xmldom/issues/135\n * @see https://github.com/xmldom/xmldom/issues/145\n * @param {Node} parentNode\n * @param {Node} newChild\n * @returns {Node}\n * @private\n */\nfunction _appendSingleChild (parentNode, newChild) {\n\tif (newChild.parentNode) {\n\t\tnewChild.parentNode.removeChild(newChild);\n\t}\n\tnewChild.parentNode = parentNode;\n\tnewChild.previousSibling = parentNode.lastChild;\n\tnewChild.nextSibling = null;\n\tif (newChild.previousSibling) {\n\t\tnewChild.previousSibling.nextSibling = newChild;\n\t} else {\n\t\tparentNode.firstChild = newChild;\n\t}\n\tparentNode.lastChild = newChild;\n\t_onUpdateChild(parentNode.ownerDocument, parentNode, newChild);\n\treturn newChild;\n}\n\nDocument.prototype = {\n\t//implementation : null,\n\tnodeName :  '#document',\n\tnodeType :  DOCUMENT_NODE,\n\t/**\n\t * The DocumentType node of the document.\n\t *\n\t * @readonly\n\t * @type DocumentType\n\t */\n\tdoctype :  null,\n\tdocumentElement :  null,\n\t_inc : 1,\n\n\tinsertBefore :  function(newChild, refChild){//raises\n\t\tif(newChild.nodeType == DOCUMENT_FRAGMENT_NODE){\n\t\t\tvar child = newChild.firstChild;\n\t\t\twhile(child){\n\t\t\t\tvar next = child.nextSibling;\n\t\t\t\tthis.insertBefore(child,refChild);\n\t\t\t\tchild = next;\n\t\t\t}\n\t\t\treturn newChild;\n\t\t}\n\t\t_insertBefore(this, newChild, refChild);\n\t\tnewChild.ownerDocument = this;\n\t\tif (this.documentElement === null && newChild.nodeType === ELEMENT_NODE) {\n\t\t\tthis.documentElement = newChild;\n\t\t}\n\n\t\treturn newChild;\n\t},\n\tremoveChild :  function(oldChild){\n\t\tif(this.documentElement == oldChild){\n\t\t\tthis.documentElement = null;\n\t\t}\n\t\treturn _removeChild(this,oldChild);\n\t},\n\treplaceChild: function (newChild, oldChild) {\n\t\t//raises\n\t\t_insertBefore(this, newChild, oldChild, assertPreReplacementValidityInDocument);\n\t\tnewChild.ownerDocument = this;\n\t\tif (oldChild) {\n\t\t\tthis.removeChild(oldChild);\n\t\t}\n\t\tif (isElementNode(newChild)) {\n\t\t\tthis.documentElement = newChild;\n\t\t}\n\t},\n\t// Introduced in DOM Level 2:\n\timportNode : function(importedNode,deep){\n\t\treturn importNode(this,importedNode,deep);\n\t},\n\t// Introduced in DOM Level 2:\n\tgetElementById :\tfunction(id){\n\t\tvar rtv = null;\n\t\t_visitNode(this.documentElement,function(node){\n\t\t\tif(node.nodeType == ELEMENT_NODE){\n\t\t\t\tif(node.getAttribute('id') == id){\n\t\t\t\t\trtv = node;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t\treturn rtv;\n\t},\n\n\t/**\n\t * The `getElementsByClassName` method of `Document` interface returns an array-like object\n\t * of all child elements which have **all** of the given class name(s).\n\t *\n\t * Returns an empty list if `classeNames` is an empty string or only contains HTML white space characters.\n\t *\n\t *\n\t * Warning: This is a live LiveNodeList.\n\t * Changes in the DOM will reflect in the array as the changes occur.\n\t * If an element selected by this array no longer qualifies for the selector,\n\t * it will automatically be removed. Be aware of this for iteration purposes.\n\t *\n\t * @param {string} classNames is a string representing the class name(s) to match; multiple class names are separated by (ASCII-)whitespace\n\t *\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/Document/getElementsByClassName\n\t * @see https://dom.spec.whatwg.org/#concept-getelementsbyclassname\n\t */\n\tgetElementsByClassName: function(classNames) {\n\t\tvar classNamesSet = toOrderedSet(classNames)\n\t\treturn new LiveNodeList(this, function(base) {\n\t\t\tvar ls = [];\n\t\t\tif (classNamesSet.length > 0) {\n\t\t\t\t_visitNode(base.documentElement, function(node) {\n\t\t\t\t\tif(node !== base && node.nodeType === ELEMENT_NODE) {\n\t\t\t\t\t\tvar nodeClassNames = node.getAttribute('class')\n\t\t\t\t\t\t// can be null if the attribute does not exist\n\t\t\t\t\t\tif (nodeClassNames) {\n\t\t\t\t\t\t\t// before splitting and iterating just compare them for the most common case\n\t\t\t\t\t\t\tvar matches = classNames === nodeClassNames;\n\t\t\t\t\t\t\tif (!matches) {\n\t\t\t\t\t\t\t\tvar nodeClassNamesSet = toOrderedSet(nodeClassNames)\n\t\t\t\t\t\t\t\tmatches = classNamesSet.every(arrayIncludes(nodeClassNamesSet))\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(matches) {\n\t\t\t\t\t\t\t\tls.push(node);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn ls;\n\t\t});\n\t},\n\n\t//document factory method:\n\tcreateElement :\tfunction(tagName){\n\t\tvar node = new Element();\n\t\tnode.ownerDocument = this;\n\t\tnode.nodeName = tagName;\n\t\tnode.tagName = tagName;\n\t\tnode.localName = tagName;\n\t\tnode.childNodes = new NodeList();\n\t\tvar attrs\t= node.attributes = new NamedNodeMap();\n\t\tattrs._ownerElement = node;\n\t\treturn node;\n\t},\n\tcreateDocumentFragment :\tfunction(){\n\t\tvar node = new DocumentFragment();\n\t\tnode.ownerDocument = this;\n\t\tnode.childNodes = new NodeList();\n\t\treturn node;\n\t},\n\tcreateTextNode :\tfunction(data){\n\t\tvar node = new Text();\n\t\tnode.ownerDocument = this;\n\t\tnode.appendData(data)\n\t\treturn node;\n\t},\n\tcreateComment :\tfunction(data){\n\t\tvar node = new Comment();\n\t\tnode.ownerDocument = this;\n\t\tnode.appendData(data)\n\t\treturn node;\n\t},\n\tcreateCDATASection :\tfunction(data){\n\t\tvar node = new CDATASection();\n\t\tnode.ownerDocument = this;\n\t\tnode.appendData(data)\n\t\treturn node;\n\t},\n\tcreateProcessingInstruction :\tfunction(target,data){\n\t\tvar node = new ProcessingInstruction();\n\t\tnode.ownerDocument = this;\n\t\tnode.tagName = node.nodeName = node.target = target;\n\t\tnode.nodeValue = node.data = data;\n\t\treturn node;\n\t},\n\tcreateAttribute :\tfunction(name){\n\t\tvar node = new Attr();\n\t\tnode.ownerDocument\t= this;\n\t\tnode.name = name;\n\t\tnode.nodeName\t= name;\n\t\tnode.localName = name;\n\t\tnode.specified = true;\n\t\treturn node;\n\t},\n\tcreateEntityReference :\tfunction(name){\n\t\tvar node = new EntityReference();\n\t\tnode.ownerDocument\t= this;\n\t\tnode.nodeName\t= name;\n\t\treturn node;\n\t},\n\t// Introduced in DOM Level 2:\n\tcreateElementNS :\tfunction(namespaceURI,qualifiedName){\n\t\tvar node = new Element();\n\t\tvar pl = qualifiedName.split(':');\n\t\tvar attrs\t= node.attributes = new NamedNodeMap();\n\t\tnode.childNodes = new NodeList();\n\t\tnode.ownerDocument = this;\n\t\tnode.nodeName = qualifiedName;\n\t\tnode.tagName = qualifiedName;\n\t\tnode.namespaceURI = namespaceURI;\n\t\tif(pl.length == 2){\n\t\t\tnode.prefix = pl[0];\n\t\t\tnode.localName = pl[1];\n\t\t}else{\n\t\t\t//el.prefix = null;\n\t\t\tnode.localName = qualifiedName;\n\t\t}\n\t\tattrs._ownerElement = node;\n\t\treturn node;\n\t},\n\t// Introduced in DOM Level 2:\n\tcreateAttributeNS :\tfunction(namespaceURI,qualifiedName){\n\t\tvar node = new Attr();\n\t\tvar pl = qualifiedName.split(':');\n\t\tnode.ownerDocument = this;\n\t\tnode.nodeName = qualifiedName;\n\t\tnode.name = qualifiedName;\n\t\tnode.namespaceURI = namespaceURI;\n\t\tnode.specified = true;\n\t\tif(pl.length == 2){\n\t\t\tnode.prefix = pl[0];\n\t\t\tnode.localName = pl[1];\n\t\t}else{\n\t\t\t//el.prefix = null;\n\t\t\tnode.localName = qualifiedName;\n\t\t}\n\t\treturn node;\n\t}\n};\n_extends(Document,Node);\n\n\nfunction Element() {\n\tthis._nsMap = {};\n};\nElement.prototype = {\n\tnodeType : ELEMENT_NODE,\n\thasAttribute : function(name){\n\t\treturn this.getAttributeNode(name)!=null;\n\t},\n\tgetAttribute : function(name){\n\t\tvar attr = this.getAttributeNode(name);\n\t\treturn attr && attr.value || '';\n\t},\n\tgetAttributeNode : function(name){\n\t\treturn this.attributes.getNamedItem(name);\n\t},\n\tsetAttribute : function(name, value){\n\t\tvar attr = this.ownerDocument.createAttribute(name);\n\t\tattr.value = attr.nodeValue = \"\" + value;\n\t\tthis.setAttributeNode(attr)\n\t},\n\tremoveAttribute : function(name){\n\t\tvar attr = this.getAttributeNode(name)\n\t\tattr && this.removeAttributeNode(attr);\n\t},\n\n\t//four real opeartion method\n\tappendChild:function(newChild){\n\t\tif(newChild.nodeType === DOCUMENT_FRAGMENT_NODE){\n\t\t\treturn this.insertBefore(newChild,null);\n\t\t}else{\n\t\t\treturn _appendSingleChild(this,newChild);\n\t\t}\n\t},\n\tsetAttributeNode : function(newAttr){\n\t\treturn this.attributes.setNamedItem(newAttr);\n\t},\n\tsetAttributeNodeNS : function(newAttr){\n\t\treturn this.attributes.setNamedItemNS(newAttr);\n\t},\n\tremoveAttributeNode : function(oldAttr){\n\t\t//console.log(this == oldAttr.ownerElement)\n\t\treturn this.attributes.removeNamedItem(oldAttr.nodeName);\n\t},\n\t//get real attribute name,and remove it by removeAttributeNode\n\tremoveAttributeNS : function(namespaceURI, localName){\n\t\tvar old = this.getAttributeNodeNS(namespaceURI, localName);\n\t\told && this.removeAttributeNode(old);\n\t},\n\n\thasAttributeNS : function(namespaceURI, localName){\n\t\treturn this.getAttributeNodeNS(namespaceURI, localName)!=null;\n\t},\n\tgetAttributeNS : function(namespaceURI, localName){\n\t\tvar attr = this.getAttributeNodeNS(namespaceURI, localName);\n\t\treturn attr && attr.value || '';\n\t},\n\tsetAttributeNS : function(namespaceURI, qualifiedName, value){\n\t\tvar attr = this.ownerDocument.createAttributeNS(namespaceURI, qualifiedName);\n\t\tattr.value = attr.nodeValue = \"\" + value;\n\t\tthis.setAttributeNode(attr)\n\t},\n\tgetAttributeNodeNS : function(namespaceURI, localName){\n\t\treturn this.attributes.getNamedItemNS(namespaceURI, localName);\n\t},\n\n\tgetElementsByTagName : function(tagName){\n\t\treturn new LiveNodeList(this,function(base){\n\t\t\tvar ls = [];\n\t\t\t_visitNode(base,function(node){\n\t\t\t\tif(node !== base && node.nodeType == ELEMENT_NODE && (tagName === '*' || node.tagName == tagName)){\n\t\t\t\t\tls.push(node);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn ls;\n\t\t});\n\t},\n\tgetElementsByTagNameNS : function(namespaceURI, localName){\n\t\treturn new LiveNodeList(this,function(base){\n\t\t\tvar ls = [];\n\t\t\t_visitNode(base,function(node){\n\t\t\t\tif(node !== base && node.nodeType === ELEMENT_NODE && (namespaceURI === '*' || node.namespaceURI === namespaceURI) && (localName === '*' || node.localName == localName)){\n\t\t\t\t\tls.push(node);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn ls;\n\n\t\t});\n\t}\n};\nDocument.prototype.getElementsByTagName = Element.prototype.getElementsByTagName;\nDocument.prototype.getElementsByTagNameNS = Element.prototype.getElementsByTagNameNS;\n\n\n_extends(Element,Node);\nfunction Attr() {\n};\nAttr.prototype.nodeType = ATTRIBUTE_NODE;\n_extends(Attr,Node);\n\n\nfunction CharacterData() {\n};\nCharacterData.prototype = {\n\tdata : '',\n\tsubstringData : function(offset, count) {\n\t\treturn this.data.substring(offset, offset+count);\n\t},\n\tappendData: function(text) {\n\t\ttext = this.data+text;\n\t\tthis.nodeValue = this.data = text;\n\t\tthis.length = text.length;\n\t},\n\tinsertData: function(offset,text) {\n\t\tthis.replaceData(offset,0,text);\n\n\t},\n\tappendChild:function(newChild){\n\t\tthrow new Error(ExceptionMessage[HIERARCHY_REQUEST_ERR])\n\t},\n\tdeleteData: function(offset, count) {\n\t\tthis.replaceData(offset,count,\"\");\n\t},\n\treplaceData: function(offset, count, text) {\n\t\tvar start = this.data.substring(0,offset);\n\t\tvar end = this.data.substring(offset+count);\n\t\ttext = start + text + end;\n\t\tthis.nodeValue = this.data = text;\n\t\tthis.length = text.length;\n\t}\n}\n_extends(CharacterData,Node);\nfunction Text() {\n};\nText.prototype = {\n\tnodeName : \"#text\",\n\tnodeType : TEXT_NODE,\n\tsplitText : function(offset) {\n\t\tvar text = this.data;\n\t\tvar newText = text.substring(offset);\n\t\ttext = text.substring(0, offset);\n\t\tthis.data = this.nodeValue = text;\n\t\tthis.length = text.length;\n\t\tvar newNode = this.ownerDocument.createTextNode(newText);\n\t\tif(this.parentNode){\n\t\t\tthis.parentNode.insertBefore(newNode, this.nextSibling);\n\t\t}\n\t\treturn newNode;\n\t}\n}\n_extends(Text,CharacterData);\nfunction Comment() {\n};\nComment.prototype = {\n\tnodeName : \"#comment\",\n\tnodeType : COMMENT_NODE\n}\n_extends(Comment,CharacterData);\n\nfunction CDATASection() {\n};\nCDATASection.prototype = {\n\tnodeName : \"#cdata-section\",\n\tnodeType : CDATA_SECTION_NODE\n}\n_extends(CDATASection,CharacterData);\n\n\nfunction DocumentType() {\n};\nDocumentType.prototype.nodeType = DOCUMENT_TYPE_NODE;\n_extends(DocumentType,Node);\n\nfunction Notation() {\n};\nNotation.prototype.nodeType = NOTATION_NODE;\n_extends(Notation,Node);\n\nfunction Entity() {\n};\nEntity.prototype.nodeType = ENTITY_NODE;\n_extends(Entity,Node);\n\nfunction EntityReference() {\n};\nEntityReference.prototype.nodeType = ENTITY_REFERENCE_NODE;\n_extends(EntityReference,Node);\n\nfunction DocumentFragment() {\n};\nDocumentFragment.prototype.nodeName =\t\"#document-fragment\";\nDocumentFragment.prototype.nodeType =\tDOCUMENT_FRAGMENT_NODE;\n_extends(DocumentFragment,Node);\n\n\nfunction ProcessingInstruction() {\n}\nProcessingInstruction.prototype.nodeType = PROCESSING_INSTRUCTION_NODE;\n_extends(ProcessingInstruction,Node);\nfunction XMLSerializer(){}\nXMLSerializer.prototype.serializeToString = function(node,isHtml,nodeFilter){\n\treturn nodeSerializeToString.call(node,isHtml,nodeFilter);\n}\nNode.prototype.toString = nodeSerializeToString;\nfunction nodeSerializeToString(isHtml,nodeFilter){\n\tvar buf = [];\n\tvar refNode = this.nodeType == 9 && this.documentElement || this;\n\tvar prefix = refNode.prefix;\n\tvar uri = refNode.namespaceURI;\n\n\tif(uri && prefix == null){\n\t\t//console.log(prefix)\n\t\tvar prefix = refNode.lookupPrefix(uri);\n\t\tif(prefix == null){\n\t\t\t//isHTML = true;\n\t\t\tvar visibleNamespaces=[\n\t\t\t{namespace:uri,prefix:null}\n\t\t\t//{namespace:uri,prefix:''}\n\t\t\t]\n\t\t}\n\t}\n\tserializeToString(this,buf,isHtml,nodeFilter,visibleNamespaces);\n\t//console.log('###',this.nodeType,uri,prefix,buf.join(''))\n\treturn buf.join('');\n}\n\nfunction needNamespaceDefine(node, isHTML, visibleNamespaces) {\n\tvar prefix = node.prefix || '';\n\tvar uri = node.namespaceURI;\n\t// According to [Namespaces in XML 1.0](https://www.w3.org/TR/REC-xml-names/#ns-using) ,\n\t// and more specifically https://www.w3.org/TR/REC-xml-names/#nsc-NoPrefixUndecl :\n\t// > In a namespace declaration for a prefix [...], the attribute value MUST NOT be empty.\n\t// in a similar manner [Namespaces in XML 1.1](https://www.w3.org/TR/xml-names11/#ns-using)\n\t// and more specifically https://www.w3.org/TR/xml-names11/#nsc-NSDeclared :\n\t// > [...] Furthermore, the attribute value [...] must not be an empty string.\n\t// so serializing empty namespace value like xmlns:ds=\"\" would produce an invalid XML document.\n\tif (!uri) {\n\t\treturn false;\n\t}\n\tif (prefix === \"xml\" && uri === NAMESPACE.XML || uri === NAMESPACE.XMLNS) {\n\t\treturn false;\n\t}\n\n\tvar i = visibleNamespaces.length\n\twhile (i--) {\n\t\tvar ns = visibleNamespaces[i];\n\t\t// get namespace prefix\n\t\tif (ns.prefix === prefix) {\n\t\t\treturn ns.namespace !== uri;\n\t\t}\n\t}\n\treturn true;\n}\n/**\n * Well-formed constraint: No < in Attribute Values\n * > The replacement text of any entity referred to directly or indirectly\n * > in an attribute value must not contain a <.\n * @see https://www.w3.org/TR/xml11/#CleanAttrVals\n * @see https://www.w3.org/TR/xml11/#NT-AttValue\n *\n * Literal whitespace other than space that appear in attribute values\n * are serialized as their entity references, so they will be preserved.\n * (In contrast to whitespace literals in the input which are normalized to spaces)\n * @see https://www.w3.org/TR/xml11/#AVNormalize\n * @see https://w3c.github.io/DOM-Parsing/#serializing-an-element-s-attributes\n */\nfunction addSerializedAttribute(buf, qualifiedName, value) {\n\tbuf.push(' ', qualifiedName, '=\"', value.replace(/[<>&\"\\t\\n\\r]/g, _xmlEncoder), '\"')\n}\n\nfunction serializeToString(node,buf,isHTML,nodeFilter,visibleNamespaces){\n\tif (!visibleNamespaces) {\n\t\tvisibleNamespaces = [];\n\t}\n\n\tif(nodeFilter){\n\t\tnode = nodeFilter(node);\n\t\tif(node){\n\t\t\tif(typeof node == 'string'){\n\t\t\t\tbuf.push(node);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}else{\n\t\t\treturn;\n\t\t}\n\t\t//buf.sort.apply(attrs, attributeSorter);\n\t}\n\n\tswitch(node.nodeType){\n\tcase ELEMENT_NODE:\n\t\tvar attrs = node.attributes;\n\t\tvar len = attrs.length;\n\t\tvar child = node.firstChild;\n\t\tvar nodeName = node.tagName;\n\n\t\tisHTML = NAMESPACE.isHTML(node.namespaceURI) || isHTML\n\n\t\tvar prefixedNodeName = nodeName\n\t\tif (!isHTML && !node.prefix && node.namespaceURI) {\n\t\t\tvar defaultNS\n\t\t\t// lookup current default ns from `xmlns` attribute\n\t\t\tfor (var ai = 0; ai < attrs.length; ai++) {\n\t\t\t\tif (attrs.item(ai).name === 'xmlns') {\n\t\t\t\t\tdefaultNS = attrs.item(ai).value\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!defaultNS) {\n\t\t\t\t// lookup current default ns in visibleNamespaces\n\t\t\t\tfor (var nsi = visibleNamespaces.length - 1; nsi >= 0; nsi--) {\n\t\t\t\t\tvar namespace = visibleNamespaces[nsi]\n\t\t\t\t\tif (namespace.prefix === '' && namespace.namespace === node.namespaceURI) {\n\t\t\t\t\t\tdefaultNS = namespace.namespace\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (defaultNS !== node.namespaceURI) {\n\t\t\t\tfor (var nsi = visibleNamespaces.length - 1; nsi >= 0; nsi--) {\n\t\t\t\t\tvar namespace = visibleNamespaces[nsi]\n\t\t\t\t\tif (namespace.namespace === node.namespaceURI) {\n\t\t\t\t\t\tif (namespace.prefix) {\n\t\t\t\t\t\t\tprefixedNodeName = namespace.prefix + ':' + nodeName\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tbuf.push('<', prefixedNodeName);\n\n\t\tfor(var i=0;i<len;i++){\n\t\t\t// add namespaces for attributes\n\t\t\tvar attr = attrs.item(i);\n\t\t\tif (attr.prefix == 'xmlns') {\n\t\t\t\tvisibleNamespaces.push({ prefix: attr.localName, namespace: attr.value });\n\t\t\t}else if(attr.nodeName == 'xmlns'){\n\t\t\t\tvisibleNamespaces.push({ prefix: '', namespace: attr.value });\n\t\t\t}\n\t\t}\n\n\t\tfor(var i=0;i<len;i++){\n\t\t\tvar attr = attrs.item(i);\n\t\t\tif (needNamespaceDefine(attr,isHTML, visibleNamespaces)) {\n\t\t\t\tvar prefix = attr.prefix||'';\n\t\t\t\tvar uri = attr.namespaceURI;\n\t\t\t\taddSerializedAttribute(buf, prefix ? 'xmlns:' + prefix : \"xmlns\", uri);\n\t\t\t\tvisibleNamespaces.push({ prefix: prefix, namespace:uri });\n\t\t\t}\n\t\t\tserializeToString(attr,buf,isHTML,nodeFilter,visibleNamespaces);\n\t\t}\n\n\t\t// add namespace for current node\n\t\tif (nodeName === prefixedNodeName && needNamespaceDefine(node, isHTML, visibleNamespaces)) {\n\t\t\tvar prefix = node.prefix||'';\n\t\t\tvar uri = node.namespaceURI;\n\t\t\taddSerializedAttribute(buf, prefix ? 'xmlns:' + prefix : \"xmlns\", uri);\n\t\t\tvisibleNamespaces.push({ prefix: prefix, namespace:uri });\n\t\t}\n\n\t\tif(child || isHTML && !/^(?:meta|link|img|br|hr|input)$/i.test(nodeName)){\n\t\t\tbuf.push('>');\n\t\t\t//if is cdata child node\n\t\t\tif(isHTML && /^script$/i.test(nodeName)){\n\t\t\t\twhile(child){\n\t\t\t\t\tif(child.data){\n\t\t\t\t\t\tbuf.push(child.data);\n\t\t\t\t\t}else{\n\t\t\t\t\t\tserializeToString(child, buf, isHTML, nodeFilter, visibleNamespaces.slice());\n\t\t\t\t\t}\n\t\t\t\t\tchild = child.nextSibling;\n\t\t\t\t}\n\t\t\t}else\n\t\t\t{\n\t\t\t\twhile(child){\n\t\t\t\t\tserializeToString(child, buf, isHTML, nodeFilter, visibleNamespaces.slice());\n\t\t\t\t\tchild = child.nextSibling;\n\t\t\t\t}\n\t\t\t}\n\t\t\tbuf.push('</',prefixedNodeName,'>');\n\t\t}else{\n\t\t\tbuf.push('/>');\n\t\t}\n\t\t// remove added visible namespaces\n\t\t//visibleNamespaces.length = startVisibleNamespaces;\n\t\treturn;\n\tcase DOCUMENT_NODE:\n\tcase DOCUMENT_FRAGMENT_NODE:\n\t\tvar child = node.firstChild;\n\t\twhile(child){\n\t\t\tserializeToString(child, buf, isHTML, nodeFilter, visibleNamespaces.slice());\n\t\t\tchild = child.nextSibling;\n\t\t}\n\t\treturn;\n\tcase ATTRIBUTE_NODE:\n\t\treturn addSerializedAttribute(buf, node.name, node.value);\n\tcase TEXT_NODE:\n\t\t/**\n\t\t * The ampersand character (&) and the left angle bracket (<) must not appear in their literal form,\n\t\t * except when used as markup delimiters, or within a comment, a processing instruction, or a CDATA section.\n\t\t * If they are needed elsewhere, they must be escaped using either numeric character references or the strings\n\t\t * `&amp;` and `&lt;` respectively.\n\t\t * The right angle bracket (>) may be represented using the string \" &gt; \", and must, for compatibility,\n\t\t * be escaped using either `&gt;` or a character reference when it appears in the string `]]>` in content,\n\t\t * when that string is not marking the end of a CDATA section.\n\t\t *\n\t\t * In the content of elements, character data is any string of characters\n\t\t * which does not contain the start-delimiter of any markup\n\t\t * and does not include the CDATA-section-close delimiter, `]]>`.\n\t\t *\n\t\t * @see https://www.w3.org/TR/xml/#NT-CharData\n\t\t * @see https://w3c.github.io/DOM-Parsing/#xml-serializing-a-text-node\n\t\t */\n\t\treturn buf.push(node.data\n\t\t\t.replace(/[<&>]/g,_xmlEncoder)\n\t\t);\n\tcase CDATA_SECTION_NODE:\n\t\treturn buf.push( '<![CDATA[',node.data,']]>');\n\tcase COMMENT_NODE:\n\t\treturn buf.push( \"<!--\",node.data,\"-->\");\n\tcase DOCUMENT_TYPE_NODE:\n\t\tvar pubid = node.publicId;\n\t\tvar sysid = node.systemId;\n\t\tbuf.push('<!DOCTYPE ',node.name);\n\t\tif(pubid){\n\t\t\tbuf.push(' PUBLIC ', pubid);\n\t\t\tif (sysid && sysid!='.') {\n\t\t\t\tbuf.push(' ', sysid);\n\t\t\t}\n\t\t\tbuf.push('>');\n\t\t}else if(sysid && sysid!='.'){\n\t\t\tbuf.push(' SYSTEM ', sysid, '>');\n\t\t}else{\n\t\t\tvar sub = node.internalSubset;\n\t\t\tif(sub){\n\t\t\t\tbuf.push(\" [\",sub,\"]\");\n\t\t\t}\n\t\t\tbuf.push(\">\");\n\t\t}\n\t\treturn;\n\tcase PROCESSING_INSTRUCTION_NODE:\n\t\treturn buf.push( \"<?\",node.target,\" \",node.data,\"?>\");\n\tcase ENTITY_REFERENCE_NODE:\n\t\treturn buf.push( '&',node.nodeName,';');\n\t//case ENTITY_NODE:\n\t//case NOTATION_NODE:\n\tdefault:\n\t\tbuf.push('??',node.nodeName);\n\t}\n}\nfunction importNode(doc,node,deep){\n\tvar node2;\n\tswitch (node.nodeType) {\n\tcase ELEMENT_NODE:\n\t\tnode2 = node.cloneNode(false);\n\t\tnode2.ownerDocument = doc;\n\t\t//var attrs = node2.attributes;\n\t\t//var len = attrs.length;\n\t\t//for(var i=0;i<len;i++){\n\t\t\t//node2.setAttributeNodeNS(importNode(doc,attrs.item(i),deep));\n\t\t//}\n\tcase DOCUMENT_FRAGMENT_NODE:\n\t\tbreak;\n\tcase ATTRIBUTE_NODE:\n\t\tdeep = true;\n\t\tbreak;\n\t//case ENTITY_REFERENCE_NODE:\n\t//case PROCESSING_INSTRUCTION_NODE:\n\t////case TEXT_NODE:\n\t//case CDATA_SECTION_NODE:\n\t//case COMMENT_NODE:\n\t//\tdeep = false;\n\t//\tbreak;\n\t//case DOCUMENT_NODE:\n\t//case DOCUMENT_TYPE_NODE:\n\t//cannot be imported.\n\t//case ENTITY_NODE:\n\t//case NOTATION_NODE:\n\t//can not hit in level3\n\t//default:throw e;\n\t}\n\tif(!node2){\n\t\tnode2 = node.cloneNode(false);//false\n\t}\n\tnode2.ownerDocument = doc;\n\tnode2.parentNode = null;\n\tif(deep){\n\t\tvar child = node.firstChild;\n\t\twhile(child){\n\t\t\tnode2.appendChild(importNode(doc,child,deep));\n\t\t\tchild = child.nextSibling;\n\t\t}\n\t}\n\treturn node2;\n}\n//\n//var _relationMap = {firstChild:1,lastChild:1,previousSibling:1,nextSibling:1,\n//\t\t\t\t\tattributes:1,childNodes:1,parentNode:1,documentElement:1,doctype,};\nfunction cloneNode(doc,node,deep){\n\tvar node2 = new node.constructor();\n\tfor (var n in node) {\n\t\tif (Object.prototype.hasOwnProperty.call(node, n)) {\n\t\t\tvar v = node[n];\n\t\t\tif (typeof v != \"object\") {\n\t\t\t\tif (v != node2[n]) {\n\t\t\t\t\tnode2[n] = v;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tif(node.childNodes){\n\t\tnode2.childNodes = new NodeList();\n\t}\n\tnode2.ownerDocument = doc;\n\tswitch (node2.nodeType) {\n\tcase ELEMENT_NODE:\n\t\tvar attrs\t= node.attributes;\n\t\tvar attrs2\t= node2.attributes = new NamedNodeMap();\n\t\tvar len = attrs.length\n\t\tattrs2._ownerElement = node2;\n\t\tfor(var i=0;i<len;i++){\n\t\t\tnode2.setAttributeNode(cloneNode(doc,attrs.item(i),true));\n\t\t}\n\t\tbreak;;\n\tcase ATTRIBUTE_NODE:\n\t\tdeep = true;\n\t}\n\tif(deep){\n\t\tvar child = node.firstChild;\n\t\twhile(child){\n\t\t\tnode2.appendChild(cloneNode(doc,child,deep));\n\t\t\tchild = child.nextSibling;\n\t\t}\n\t}\n\treturn node2;\n}\n\nfunction __set__(object,key,value){\n\tobject[key] = value\n}\n//do dynamic\ntry{\n\tif(Object.defineProperty){\n\t\tObject.defineProperty(LiveNodeList.prototype,'length',{\n\t\t\tget:function(){\n\t\t\t\t_updateLiveList(this);\n\t\t\t\treturn this.$$length;\n\t\t\t}\n\t\t});\n\n\t\tObject.defineProperty(Node.prototype,'textContent',{\n\t\t\tget:function(){\n\t\t\t\treturn getTextContent(this);\n\t\t\t},\n\n\t\t\tset:function(data){\n\t\t\t\tswitch(this.nodeType){\n\t\t\t\tcase ELEMENT_NODE:\n\t\t\t\tcase DOCUMENT_FRAGMENT_NODE:\n\t\t\t\t\twhile(this.firstChild){\n\t\t\t\t\t\tthis.removeChild(this.firstChild);\n\t\t\t\t\t}\n\t\t\t\t\tif(data || String(data)){\n\t\t\t\t\t\tthis.appendChild(this.ownerDocument.createTextNode(data));\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tthis.data = data;\n\t\t\t\t\tthis.value = data;\n\t\t\t\t\tthis.nodeValue = data;\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\n\t\tfunction getTextContent(node){\n\t\t\tswitch(node.nodeType){\n\t\t\tcase ELEMENT_NODE:\n\t\t\tcase DOCUMENT_FRAGMENT_NODE:\n\t\t\t\tvar buf = [];\n\t\t\t\tnode = node.firstChild;\n\t\t\t\twhile(node){\n\t\t\t\t\tif(node.nodeType!==7 && node.nodeType !==8){\n\t\t\t\t\t\tbuf.push(getTextContent(node));\n\t\t\t\t\t}\n\t\t\t\t\tnode = node.nextSibling;\n\t\t\t\t}\n\t\t\t\treturn buf.join('');\n\t\t\tdefault:\n\t\t\t\treturn node.nodeValue;\n\t\t\t}\n\t\t}\n\n\t\t__set__ = function(object,key,value){\n\t\t\t//console.log(value)\n\t\t\tobject['$$'+key] = value\n\t\t}\n\t}\n}catch(e){//ie8\n}\n\n//if(typeof require == 'function'){\n\texports.DocumentType = DocumentType;\n\texports.DOMException = DOMException;\n\texports.DOMImplementation = DOMImplementation;\n\texports.Element = Element;\n\texports.Node = Node;\n\texports.NodeList = NodeList;\n\texports.XMLSerializer = XMLSerializer;\n//}\n","'use strict';\n\nvar freeze = require('./conventions').freeze;\n\n/**\n * The entities that are predefined in every XML document.\n *\n * @see https://www.w3.org/TR/2006/REC-xml11-20060816/#sec-predefined-ent W3C XML 1.1\n * @see https://www.w3.org/TR/2008/REC-xml-20081126/#sec-predefined-ent W3C XML 1.0\n * @see https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references#Predefined_entities_in_XML Wikipedia\n */\nexports.XML_ENTITIES = freeze({\n\tamp: '&',\n\tapos: \"'\",\n\tgt: '>',\n\tlt: '<',\n\tquot: '\"',\n});\n\n/**\n * A map of all entities that are detected in an HTML document.\n * They contain all entries from `XML_ENTITIES`.\n *\n * @see XML_ENTITIES\n * @see DOMParser.parseFromString\n * @see DOMImplementation.prototype.createHTMLDocument\n * @see https://html.spec.whatwg.org/#named-character-references WHATWG HTML(5) Spec\n * @see https://html.spec.whatwg.org/entities.json JSON\n * @see https://www.w3.org/TR/xml-entity-names/ W3C XML Entity Names\n * @see https://www.w3.org/TR/html4/sgml/entities.html W3C HTML4/SGML\n * @see https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references#Character_entity_references_in_HTML Wikipedia (HTML)\n * @see https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references#Entities_representing_special_characters_in_XHTML Wikpedia (XHTML)\n */\nexports.HTML_ENTITIES = freeze({\n\tAacute: '\\u00C1',\n\taacute: '\\u00E1',\n\tAbreve: '\\u0102',\n\tabreve: '\\u0103',\n\tac: '\\u223E',\n\tacd: '\\u223F',\n\tacE: '\\u223E\\u0333',\n\tAcirc: '\\u00C2',\n\tacirc: '\\u00E2',\n\tacute: '\\u00B4',\n\tAcy: '\\u0410',\n\tacy: '\\u0430',\n\tAElig: '\\u00C6',\n\taelig: '\\u00E6',\n\taf: '\\u2061',\n\tAfr: '\\uD835\\uDD04',\n\tafr: '\\uD835\\uDD1E',\n\tAgrave: '\\u00C0',\n\tagrave: '\\u00E0',\n\talefsym: '\\u2135',\n\taleph: '\\u2135',\n\tAlpha: '\\u0391',\n\talpha: '\\u03B1',\n\tAmacr: '\\u0100',\n\tamacr: '\\u0101',\n\tamalg: '\\u2A3F',\n\tAMP: '\\u0026',\n\tamp: '\\u0026',\n\tAnd: '\\u2A53',\n\tand: '\\u2227',\n\tandand: '\\u2A55',\n\tandd: '\\u2A5C',\n\tandslope: '\\u2A58',\n\tandv: '\\u2A5A',\n\tang: '\\u2220',\n\tange: '\\u29A4',\n\tangle: '\\u2220',\n\tangmsd: '\\u2221',\n\tangmsdaa: '\\u29A8',\n\tangmsdab: '\\u29A9',\n\tangmsdac: '\\u29AA',\n\tangmsdad: '\\u29AB',\n\tangmsdae: '\\u29AC',\n\tangmsdaf: '\\u29AD',\n\tangmsdag: '\\u29AE',\n\tangmsdah: '\\u29AF',\n\tangrt: '\\u221F',\n\tangrtvb: '\\u22BE',\n\tangrtvbd: '\\u299D',\n\tangsph: '\\u2222',\n\tangst: '\\u00C5',\n\tangzarr: '\\u237C',\n\tAogon: '\\u0104',\n\taogon: '\\u0105',\n\tAopf: '\\uD835\\uDD38',\n\taopf: '\\uD835\\uDD52',\n\tap: '\\u2248',\n\tapacir: '\\u2A6F',\n\tapE: '\\u2A70',\n\tape: '\\u224A',\n\tapid: '\\u224B',\n\tapos: '\\u0027',\n\tApplyFunction: '\\u2061',\n\tapprox: '\\u2248',\n\tapproxeq: '\\u224A',\n\tAring: '\\u00C5',\n\taring: '\\u00E5',\n\tAscr: '\\uD835\\uDC9C',\n\tascr: '\\uD835\\uDCB6',\n\tAssign: '\\u2254',\n\tast: '\\u002A',\n\tasymp: '\\u2248',\n\tasympeq: '\\u224D',\n\tAtilde: '\\u00C3',\n\tatilde: '\\u00E3',\n\tAuml: '\\u00C4',\n\tauml: '\\u00E4',\n\tawconint: '\\u2233',\n\tawint: '\\u2A11',\n\tbackcong: '\\u224C',\n\tbackepsilon: '\\u03F6',\n\tbackprime: '\\u2035',\n\tbacksim: '\\u223D',\n\tbacksimeq: '\\u22CD',\n\tBackslash: '\\u2216',\n\tBarv: '\\u2AE7',\n\tbarvee: '\\u22BD',\n\tBarwed: '\\u2306',\n\tbarwed: '\\u2305',\n\tbarwedge: '\\u2305',\n\tbbrk: '\\u23B5',\n\tbbrktbrk: '\\u23B6',\n\tbcong: '\\u224C',\n\tBcy: '\\u0411',\n\tbcy: '\\u0431',\n\tbdquo: '\\u201E',\n\tbecaus: '\\u2235',\n\tBecause: '\\u2235',\n\tbecause: '\\u2235',\n\tbemptyv: '\\u29B0',\n\tbepsi: '\\u03F6',\n\tbernou: '\\u212C',\n\tBernoullis: '\\u212C',\n\tBeta: '\\u0392',\n\tbeta: '\\u03B2',\n\tbeth: '\\u2136',\n\tbetween: '\\u226C',\n\tBfr: '\\uD835\\uDD05',\n\tbfr: '\\uD835\\uDD1F',\n\tbigcap: '\\u22C2',\n\tbigcirc: '\\u25EF',\n\tbigcup: '\\u22C3',\n\tbigodot: '\\u2A00',\n\tbigoplus: '\\u2A01',\n\tbigotimes: '\\u2A02',\n\tbigsqcup: '\\u2A06',\n\tbigstar: '\\u2605',\n\tbigtriangledown: '\\u25BD',\n\tbigtriangleup: '\\u25B3',\n\tbiguplus: '\\u2A04',\n\tbigvee: '\\u22C1',\n\tbigwedge: '\\u22C0',\n\tbkarow: '\\u290D',\n\tblacklozenge: '\\u29EB',\n\tblacksquare: '\\u25AA',\n\tblacktriangle: '\\u25B4',\n\tblacktriangledown: '\\u25BE',\n\tblacktriangleleft: '\\u25C2',\n\tblacktriangleright: '\\u25B8',\n\tblank: '\\u2423',\n\tblk12: '\\u2592',\n\tblk14: '\\u2591',\n\tblk34: '\\u2593',\n\tblock: '\\u2588',\n\tbne: '\\u003D\\u20E5',\n\tbnequiv: '\\u2261\\u20E5',\n\tbNot: '\\u2AED',\n\tbnot: '\\u2310',\n\tBopf: '\\uD835\\uDD39',\n\tbopf: '\\uD835\\uDD53',\n\tbot: '\\u22A5',\n\tbottom: '\\u22A5',\n\tbowtie: '\\u22C8',\n\tboxbox: '\\u29C9',\n\tboxDL: '\\u2557',\n\tboxDl: '\\u2556',\n\tboxdL: '\\u2555',\n\tboxdl: '\\u2510',\n\tboxDR: '\\u2554',\n\tboxDr: '\\u2553',\n\tboxdR: '\\u2552',\n\tboxdr: '\\u250C',\n\tboxH: '\\u2550',\n\tboxh: '\\u2500',\n\tboxHD: '\\u2566',\n\tboxHd: '\\u2564',\n\tboxhD: '\\u2565',\n\tboxhd: '\\u252C',\n\tboxHU: '\\u2569',\n\tboxHu: '\\u2567',\n\tboxhU: '\\u2568',\n\tboxhu: '\\u2534',\n\tboxminus: '\\u229F',\n\tboxplus: '\\u229E',\n\tboxtimes: '\\u22A0',\n\tboxUL: '\\u255D',\n\tboxUl: '\\u255C',\n\tboxuL: '\\u255B',\n\tboxul: '\\u2518',\n\tboxUR: '\\u255A',\n\tboxUr: '\\u2559',\n\tboxuR: '\\u2558',\n\tboxur: '\\u2514',\n\tboxV: '\\u2551',\n\tboxv: '\\u2502',\n\tboxVH: '\\u256C',\n\tboxVh: '\\u256B',\n\tboxvH: '\\u256A',\n\tboxvh: '\\u253C',\n\tboxVL: '\\u2563',\n\tboxVl: '\\u2562',\n\tboxvL: '\\u2561',\n\tboxvl: '\\u2524',\n\tboxVR: '\\u2560',\n\tboxVr: '\\u255F',\n\tboxvR: '\\u255E',\n\tboxvr: '\\u251C',\n\tbprime: '\\u2035',\n\tBreve: '\\u02D8',\n\tbreve: '\\u02D8',\n\tbrvbar: '\\u00A6',\n\tBscr: '\\u212C',\n\tbscr: '\\uD835\\uDCB7',\n\tbsemi: '\\u204F',\n\tbsim: '\\u223D',\n\tbsime: '\\u22CD',\n\tbsol: '\\u005C',\n\tbsolb: '\\u29C5',\n\tbsolhsub: '\\u27C8',\n\tbull: '\\u2022',\n\tbullet: '\\u2022',\n\tbump: '\\u224E',\n\tbumpE: '\\u2AAE',\n\tbumpe: '\\u224F',\n\tBumpeq: '\\u224E',\n\tbumpeq: '\\u224F',\n\tCacute: '\\u0106',\n\tcacute: '\\u0107',\n\tCap: '\\u22D2',\n\tcap: '\\u2229',\n\tcapand: '\\u2A44',\n\tcapbrcup: '\\u2A49',\n\tcapcap: '\\u2A4B',\n\tcapcup: '\\u2A47',\n\tcapdot: '\\u2A40',\n\tCapitalDifferentialD: '\\u2145',\n\tcaps: '\\u2229\\uFE00',\n\tcaret: '\\u2041',\n\tcaron: '\\u02C7',\n\tCayleys: '\\u212D',\n\tccaps: '\\u2A4D',\n\tCcaron: '\\u010C',\n\tccaron: '\\u010D',\n\tCcedil: '\\u00C7',\n\tccedil: '\\u00E7',\n\tCcirc: '\\u0108',\n\tccirc: '\\u0109',\n\tCconint: '\\u2230',\n\tccups: '\\u2A4C',\n\tccupssm: '\\u2A50',\n\tCdot: '\\u010A',\n\tcdot: '\\u010B',\n\tcedil: '\\u00B8',\n\tCedilla: '\\u00B8',\n\tcemptyv: '\\u29B2',\n\tcent: '\\u00A2',\n\tCenterDot: '\\u00B7',\n\tcenterdot: '\\u00B7',\n\tCfr: '\\u212D',\n\tcfr: '\\uD835\\uDD20',\n\tCHcy: '\\u0427',\n\tchcy: '\\u0447',\n\tcheck: '\\u2713',\n\tcheckmark: '\\u2713',\n\tChi: '\\u03A7',\n\tchi: '\\u03C7',\n\tcir: '\\u25CB',\n\tcirc: '\\u02C6',\n\tcirceq: '\\u2257',\n\tcirclearrowleft: '\\u21BA',\n\tcirclearrowright: '\\u21BB',\n\tcircledast: '\\u229B',\n\tcircledcirc: '\\u229A',\n\tcircleddash: '\\u229D',\n\tCircleDot: '\\u2299',\n\tcircledR: '\\u00AE',\n\tcircledS: '\\u24C8',\n\tCircleMinus: '\\u2296',\n\tCirclePlus: '\\u2295',\n\tCircleTimes: '\\u2297',\n\tcirE: '\\u29C3',\n\tcire: '\\u2257',\n\tcirfnint: '\\u2A10',\n\tcirmid: '\\u2AEF',\n\tcirscir: '\\u29C2',\n\tClockwiseContourIntegral: '\\u2232',\n\tCloseCurlyDoubleQuote: '\\u201D',\n\tCloseCurlyQuote: '\\u2019',\n\tclubs: '\\u2663',\n\tclubsuit: '\\u2663',\n\tColon: '\\u2237',\n\tcolon: '\\u003A',\n\tColone: '\\u2A74',\n\tcolone: '\\u2254',\n\tcoloneq: '\\u2254',\n\tcomma: '\\u002C',\n\tcommat: '\\u0040',\n\tcomp: '\\u2201',\n\tcompfn: '\\u2218',\n\tcomplement: '\\u2201',\n\tcomplexes: '\\u2102',\n\tcong: '\\u2245',\n\tcongdot: '\\u2A6D',\n\tCongruent: '\\u2261',\n\tConint: '\\u222F',\n\tconint: '\\u222E',\n\tContourIntegral: '\\u222E',\n\tCopf: '\\u2102',\n\tcopf: '\\uD835\\uDD54',\n\tcoprod: '\\u2210',\n\tCoproduct: '\\u2210',\n\tCOPY: '\\u00A9',\n\tcopy: '\\u00A9',\n\tcopysr: '\\u2117',\n\tCounterClockwiseContourIntegral: '\\u2233',\n\tcrarr: '\\u21B5',\n\tCross: '\\u2A2F',\n\tcross: '\\u2717',\n\tCscr: '\\uD835\\uDC9E',\n\tcscr: '\\uD835\\uDCB8',\n\tcsub: '\\u2ACF',\n\tcsube: '\\u2AD1',\n\tcsup: '\\u2AD0',\n\tcsupe: '\\u2AD2',\n\tctdot: '\\u22EF',\n\tcudarrl: '\\u2938',\n\tcudarrr: '\\u2935',\n\tcuepr: '\\u22DE',\n\tcuesc: '\\u22DF',\n\tcularr: '\\u21B6',\n\tcularrp: '\\u293D',\n\tCup: '\\u22D3',\n\tcup: '\\u222A',\n\tcupbrcap: '\\u2A48',\n\tCupCap: '\\u224D',\n\tcupcap: '\\u2A46',\n\tcupcup: '\\u2A4A',\n\tcupdot: '\\u228D',\n\tcupor: '\\u2A45',\n\tcups: '\\u222A\\uFE00',\n\tcurarr: '\\u21B7',\n\tcurarrm: '\\u293C',\n\tcurlyeqprec: '\\u22DE',\n\tcurlyeqsucc: '\\u22DF',\n\tcurlyvee: '\\u22CE',\n\tcurlywedge: '\\u22CF',\n\tcurren: '\\u00A4',\n\tcurvearrowleft: '\\u21B6',\n\tcurvearrowright: '\\u21B7',\n\tcuvee: '\\u22CE',\n\tcuwed: '\\u22CF',\n\tcwconint: '\\u2232',\n\tcwint: '\\u2231',\n\tcylcty: '\\u232D',\n\tDagger: '\\u2021',\n\tdagger: '\\u2020',\n\tdaleth: '\\u2138',\n\tDarr: '\\u21A1',\n\tdArr: '\\u21D3',\n\tdarr: '\\u2193',\n\tdash: '\\u2010',\n\tDashv: '\\u2AE4',\n\tdashv: '\\u22A3',\n\tdbkarow: '\\u290F',\n\tdblac: '\\u02DD',\n\tDcaron: '\\u010E',\n\tdcaron: '\\u010F',\n\tDcy: '\\u0414',\n\tdcy: '\\u0434',\n\tDD: '\\u2145',\n\tdd: '\\u2146',\n\tddagger: '\\u2021',\n\tddarr: '\\u21CA',\n\tDDotrahd: '\\u2911',\n\tddotseq: '\\u2A77',\n\tdeg: '\\u00B0',\n\tDel: '\\u2207',\n\tDelta: '\\u0394',\n\tdelta: '\\u03B4',\n\tdemptyv: '\\u29B1',\n\tdfisht: '\\u297F',\n\tDfr: '\\uD835\\uDD07',\n\tdfr: '\\uD835\\uDD21',\n\tdHar: '\\u2965',\n\tdharl: '\\u21C3',\n\tdharr: '\\u21C2',\n\tDiacriticalAcute: '\\u00B4',\n\tDiacriticalDot: '\\u02D9',\n\tDiacriticalDoubleAcute: '\\u02DD',\n\tDiacriticalGrave: '\\u0060',\n\tDiacriticalTilde: '\\u02DC',\n\tdiam: '\\u22C4',\n\tDiamond: '\\u22C4',\n\tdiamond: '\\u22C4',\n\tdiamondsuit: '\\u2666',\n\tdiams: '\\u2666',\n\tdie: '\\u00A8',\n\tDifferentialD: '\\u2146',\n\tdigamma: '\\u03DD',\n\tdisin: '\\u22F2',\n\tdiv: '\\u00F7',\n\tdivide: '\\u00F7',\n\tdivideontimes: '\\u22C7',\n\tdivonx: '\\u22C7',\n\tDJcy: '\\u0402',\n\tdjcy: '\\u0452',\n\tdlcorn: '\\u231E',\n\tdlcrop: '\\u230D',\n\tdollar: '\\u0024',\n\tDopf: '\\uD835\\uDD3B',\n\tdopf: '\\uD835\\uDD55',\n\tDot: '\\u00A8',\n\tdot: '\\u02D9',\n\tDotDot: '\\u20DC',\n\tdoteq: '\\u2250',\n\tdoteqdot: '\\u2251',\n\tDotEqual: '\\u2250',\n\tdotminus: '\\u2238',\n\tdotplus: '\\u2214',\n\tdotsquare: '\\u22A1',\n\tdoublebarwedge: '\\u2306',\n\tDoubleContourIntegral: '\\u222F',\n\tDoubleDot: '\\u00A8',\n\tDoubleDownArrow: '\\u21D3',\n\tDoubleLeftArrow: '\\u21D0',\n\tDoubleLeftRightArrow: '\\u21D4',\n\tDoubleLeftTee: '\\u2AE4',\n\tDoubleLongLeftArrow: '\\u27F8',\n\tDoubleLongLeftRightArrow: '\\u27FA',\n\tDoubleLongRightArrow: '\\u27F9',\n\tDoubleRightArrow: '\\u21D2',\n\tDoubleRightTee: '\\u22A8',\n\tDoubleUpArrow: '\\u21D1',\n\tDoubleUpDownArrow: '\\u21D5',\n\tDoubleVerticalBar: '\\u2225',\n\tDownArrow: '\\u2193',\n\tDownarrow: '\\u21D3',\n\tdownarrow: '\\u2193',\n\tDownArrowBar: '\\u2913',\n\tDownArrowUpArrow: '\\u21F5',\n\tDownBreve: '\\u0311',\n\tdowndownarrows: '\\u21CA',\n\tdownharpoonleft: '\\u21C3',\n\tdownharpoonright: '\\u21C2',\n\tDownLeftRightVector: '\\u2950',\n\tDownLeftTeeVector: '\\u295E',\n\tDownLeftVector: '\\u21BD',\n\tDownLeftVectorBar: '\\u2956',\n\tDownRightTeeVector: '\\u295F',\n\tDownRightVector: '\\u21C1',\n\tDownRightVectorBar: '\\u2957',\n\tDownTee: '\\u22A4',\n\tDownTeeArrow: '\\u21A7',\n\tdrbkarow: '\\u2910',\n\tdrcorn: '\\u231F',\n\tdrcrop: '\\u230C',\n\tDscr: '\\uD835\\uDC9F',\n\tdscr: '\\uD835\\uDCB9',\n\tDScy: '\\u0405',\n\tdscy: '\\u0455',\n\tdsol: '\\u29F6',\n\tDstrok: '\\u0110',\n\tdstrok: '\\u0111',\n\tdtdot: '\\u22F1',\n\tdtri: '\\u25BF',\n\tdtrif: '\\u25BE',\n\tduarr: '\\u21F5',\n\tduhar: '\\u296F',\n\tdwangle: '\\u29A6',\n\tDZcy: '\\u040F',\n\tdzcy: '\\u045F',\n\tdzigrarr: '\\u27FF',\n\tEacute: '\\u00C9',\n\teacute: '\\u00E9',\n\teaster: '\\u2A6E',\n\tEcaron: '\\u011A',\n\tecaron: '\\u011B',\n\tecir: '\\u2256',\n\tEcirc: '\\u00CA',\n\tecirc: '\\u00EA',\n\tecolon: '\\u2255',\n\tEcy: '\\u042D',\n\tecy: '\\u044D',\n\teDDot: '\\u2A77',\n\tEdot: '\\u0116',\n\teDot: '\\u2251',\n\tedot: '\\u0117',\n\tee: '\\u2147',\n\tefDot: '\\u2252',\n\tEfr: '\\uD835\\uDD08',\n\tefr: '\\uD835\\uDD22',\n\teg: '\\u2A9A',\n\tEgrave: '\\u00C8',\n\tegrave: '\\u00E8',\n\tegs: '\\u2A96',\n\tegsdot: '\\u2A98',\n\tel: '\\u2A99',\n\tElement: '\\u2208',\n\telinters: '\\u23E7',\n\tell: '\\u2113',\n\tels: '\\u2A95',\n\telsdot: '\\u2A97',\n\tEmacr: '\\u0112',\n\temacr: '\\u0113',\n\tempty: '\\u2205',\n\temptyset: '\\u2205',\n\tEmptySmallSquare: '\\u25FB',\n\temptyv: '\\u2205',\n\tEmptyVerySmallSquare: '\\u25AB',\n\temsp: '\\u2003',\n\temsp13: '\\u2004',\n\temsp14: '\\u2005',\n\tENG: '\\u014A',\n\teng: '\\u014B',\n\tensp: '\\u2002',\n\tEogon: '\\u0118',\n\teogon: '\\u0119',\n\tEopf: '\\uD835\\uDD3C',\n\teopf: '\\uD835\\uDD56',\n\tepar: '\\u22D5',\n\teparsl: '\\u29E3',\n\teplus: '\\u2A71',\n\tepsi: '\\u03B5',\n\tEpsilon: '\\u0395',\n\tepsilon: '\\u03B5',\n\tepsiv: '\\u03F5',\n\teqcirc: '\\u2256',\n\teqcolon: '\\u2255',\n\teqsim: '\\u2242',\n\teqslantgtr: '\\u2A96',\n\teqslantless: '\\u2A95',\n\tEqual: '\\u2A75',\n\tequals: '\\u003D',\n\tEqualTilde: '\\u2242',\n\tequest: '\\u225F',\n\tEquilibrium: '\\u21CC',\n\tequiv: '\\u2261',\n\tequivDD: '\\u2A78',\n\teqvparsl: '\\u29E5',\n\terarr: '\\u2971',\n\terDot: '\\u2253',\n\tEscr: '\\u2130',\n\tescr: '\\u212F',\n\tesdot: '\\u2250',\n\tEsim: '\\u2A73',\n\tesim: '\\u2242',\n\tEta: '\\u0397',\n\teta: '\\u03B7',\n\tETH: '\\u00D0',\n\teth: '\\u00F0',\n\tEuml: '\\u00CB',\n\teuml: '\\u00EB',\n\teuro: '\\u20AC',\n\texcl: '\\u0021',\n\texist: '\\u2203',\n\tExists: '\\u2203',\n\texpectation: '\\u2130',\n\tExponentialE: '\\u2147',\n\texponentiale: '\\u2147',\n\tfallingdotseq: '\\u2252',\n\tFcy: '\\u0424',\n\tfcy: '\\u0444',\n\tfemale: '\\u2640',\n\tffilig: '\\uFB03',\n\tfflig: '\\uFB00',\n\tffllig: '\\uFB04',\n\tFfr: '\\uD835\\uDD09',\n\tffr: '\\uD835\\uDD23',\n\tfilig: '\\uFB01',\n\tFilledSmallSquare: '\\u25FC',\n\tFilledVerySmallSquare: '\\u25AA',\n\tfjlig: '\\u0066\\u006A',\n\tflat: '\\u266D',\n\tfllig: '\\uFB02',\n\tfltns: '\\u25B1',\n\tfnof: '\\u0192',\n\tFopf: '\\uD835\\uDD3D',\n\tfopf: '\\uD835\\uDD57',\n\tForAll: '\\u2200',\n\tforall: '\\u2200',\n\tfork: '\\u22D4',\n\tforkv: '\\u2AD9',\n\tFouriertrf: '\\u2131',\n\tfpartint: '\\u2A0D',\n\tfrac12: '\\u00BD',\n\tfrac13: '\\u2153',\n\tfrac14: '\\u00BC',\n\tfrac15: '\\u2155',\n\tfrac16: '\\u2159',\n\tfrac18: '\\u215B',\n\tfrac23: '\\u2154',\n\tfrac25: '\\u2156',\n\tfrac34: '\\u00BE',\n\tfrac35: '\\u2157',\n\tfrac38: '\\u215C',\n\tfrac45: '\\u2158',\n\tfrac56: '\\u215A',\n\tfrac58: '\\u215D',\n\tfrac78: '\\u215E',\n\tfrasl: '\\u2044',\n\tfrown: '\\u2322',\n\tFscr: '\\u2131',\n\tfscr: '\\uD835\\uDCBB',\n\tgacute: '\\u01F5',\n\tGamma: '\\u0393',\n\tgamma: '\\u03B3',\n\tGammad: '\\u03DC',\n\tgammad: '\\u03DD',\n\tgap: '\\u2A86',\n\tGbreve: '\\u011E',\n\tgbreve: '\\u011F',\n\tGcedil: '\\u0122',\n\tGcirc: '\\u011C',\n\tgcirc: '\\u011D',\n\tGcy: '\\u0413',\n\tgcy: '\\u0433',\n\tGdot: '\\u0120',\n\tgdot: '\\u0121',\n\tgE: '\\u2267',\n\tge: '\\u2265',\n\tgEl: '\\u2A8C',\n\tgel: '\\u22DB',\n\tgeq: '\\u2265',\n\tgeqq: '\\u2267',\n\tgeqslant: '\\u2A7E',\n\tges: '\\u2A7E',\n\tgescc: '\\u2AA9',\n\tgesdot: '\\u2A80',\n\tgesdoto: '\\u2A82',\n\tgesdotol: '\\u2A84',\n\tgesl: '\\u22DB\\uFE00',\n\tgesles: '\\u2A94',\n\tGfr: '\\uD835\\uDD0A',\n\tgfr: '\\uD835\\uDD24',\n\tGg: '\\u22D9',\n\tgg: '\\u226B',\n\tggg: '\\u22D9',\n\tgimel: '\\u2137',\n\tGJcy: '\\u0403',\n\tgjcy: '\\u0453',\n\tgl: '\\u2277',\n\tgla: '\\u2AA5',\n\tglE: '\\u2A92',\n\tglj: '\\u2AA4',\n\tgnap: '\\u2A8A',\n\tgnapprox: '\\u2A8A',\n\tgnE: '\\u2269',\n\tgne: '\\u2A88',\n\tgneq: '\\u2A88',\n\tgneqq: '\\u2269',\n\tgnsim: '\\u22E7',\n\tGopf: '\\uD835\\uDD3E',\n\tgopf: '\\uD835\\uDD58',\n\tgrave: '\\u0060',\n\tGreaterEqual: '\\u2265',\n\tGreaterEqualLess: '\\u22DB',\n\tGreaterFullEqual: '\\u2267',\n\tGreaterGreater: '\\u2AA2',\n\tGreaterLess: '\\u2277',\n\tGreaterSlantEqual: '\\u2A7E',\n\tGreaterTilde: '\\u2273',\n\tGscr: '\\uD835\\uDCA2',\n\tgscr: '\\u210A',\n\tgsim: '\\u2273',\n\tgsime: '\\u2A8E',\n\tgsiml: '\\u2A90',\n\tGt: '\\u226B',\n\tGT: '\\u003E',\n\tgt: '\\u003E',\n\tgtcc: '\\u2AA7',\n\tgtcir: '\\u2A7A',\n\tgtdot: '\\u22D7',\n\tgtlPar: '\\u2995',\n\tgtquest: '\\u2A7C',\n\tgtrapprox: '\\u2A86',\n\tgtrarr: '\\u2978',\n\tgtrdot: '\\u22D7',\n\tgtreqless: '\\u22DB',\n\tgtreqqless: '\\u2A8C',\n\tgtrless: '\\u2277',\n\tgtrsim: '\\u2273',\n\tgvertneqq: '\\u2269\\uFE00',\n\tgvnE: '\\u2269\\uFE00',\n\tHacek: '\\u02C7',\n\thairsp: '\\u200A',\n\thalf: '\\u00BD',\n\thamilt: '\\u210B',\n\tHARDcy: '\\u042A',\n\thardcy: '\\u044A',\n\thArr: '\\u21D4',\n\tharr: '\\u2194',\n\tharrcir: '\\u2948',\n\tharrw: '\\u21AD',\n\tHat: '\\u005E',\n\thbar: '\\u210F',\n\tHcirc: '\\u0124',\n\thcirc: '\\u0125',\n\thearts: '\\u2665',\n\theartsuit: '\\u2665',\n\thellip: '\\u2026',\n\thercon: '\\u22B9',\n\tHfr: '\\u210C',\n\thfr: '\\uD835\\uDD25',\n\tHilbertSpace: '\\u210B',\n\thksearow: '\\u2925',\n\thkswarow: '\\u2926',\n\thoarr: '\\u21FF',\n\thomtht: '\\u223B',\n\thookleftarrow: '\\u21A9',\n\thookrightarrow: '\\u21AA',\n\tHopf: '\\u210D',\n\thopf: '\\uD835\\uDD59',\n\thorbar: '\\u2015',\n\tHorizontalLine: '\\u2500',\n\tHscr: '\\u210B',\n\thscr: '\\uD835\\uDCBD',\n\thslash: '\\u210F',\n\tHstrok: '\\u0126',\n\thstrok: '\\u0127',\n\tHumpDownHump: '\\u224E',\n\tHumpEqual: '\\u224F',\n\thybull: '\\u2043',\n\thyphen: '\\u2010',\n\tIacute: '\\u00CD',\n\tiacute: '\\u00ED',\n\tic: '\\u2063',\n\tIcirc: '\\u00CE',\n\ticirc: '\\u00EE',\n\tIcy: '\\u0418',\n\ticy: '\\u0438',\n\tIdot: '\\u0130',\n\tIEcy: '\\u0415',\n\tiecy: '\\u0435',\n\tiexcl: '\\u00A1',\n\tiff: '\\u21D4',\n\tIfr: '\\u2111',\n\tifr: '\\uD835\\uDD26',\n\tIgrave: '\\u00CC',\n\tigrave: '\\u00EC',\n\tii: '\\u2148',\n\tiiiint: '\\u2A0C',\n\tiiint: '\\u222D',\n\tiinfin: '\\u29DC',\n\tiiota: '\\u2129',\n\tIJlig: '\\u0132',\n\tijlig: '\\u0133',\n\tIm: '\\u2111',\n\tImacr: '\\u012A',\n\timacr: '\\u012B',\n\timage: '\\u2111',\n\tImaginaryI: '\\u2148',\n\timagline: '\\u2110',\n\timagpart: '\\u2111',\n\timath: '\\u0131',\n\timof: '\\u22B7',\n\timped: '\\u01B5',\n\tImplies: '\\u21D2',\n\tin: '\\u2208',\n\tincare: '\\u2105',\n\tinfin: '\\u221E',\n\tinfintie: '\\u29DD',\n\tinodot: '\\u0131',\n\tInt: '\\u222C',\n\tint: '\\u222B',\n\tintcal: '\\u22BA',\n\tintegers: '\\u2124',\n\tIntegral: '\\u222B',\n\tintercal: '\\u22BA',\n\tIntersection: '\\u22C2',\n\tintlarhk: '\\u2A17',\n\tintprod: '\\u2A3C',\n\tInvisibleComma: '\\u2063',\n\tInvisibleTimes: '\\u2062',\n\tIOcy: '\\u0401',\n\tiocy: '\\u0451',\n\tIogon: '\\u012E',\n\tiogon: '\\u012F',\n\tIopf: '\\uD835\\uDD40',\n\tiopf: '\\uD835\\uDD5A',\n\tIota: '\\u0399',\n\tiota: '\\u03B9',\n\tiprod: '\\u2A3C',\n\tiquest: '\\u00BF',\n\tIscr: '\\u2110',\n\tiscr: '\\uD835\\uDCBE',\n\tisin: '\\u2208',\n\tisindot: '\\u22F5',\n\tisinE: '\\u22F9',\n\tisins: '\\u22F4',\n\tisinsv: '\\u22F3',\n\tisinv: '\\u2208',\n\tit: '\\u2062',\n\tItilde: '\\u0128',\n\titilde: '\\u0129',\n\tIukcy: '\\u0406',\n\tiukcy: '\\u0456',\n\tIuml: '\\u00CF',\n\tiuml: '\\u00EF',\n\tJcirc: '\\u0134',\n\tjcirc: '\\u0135',\n\tJcy: '\\u0419',\n\tjcy: '\\u0439',\n\tJfr: '\\uD835\\uDD0D',\n\tjfr: '\\uD835\\uDD27',\n\tjmath: '\\u0237',\n\tJopf: '\\uD835\\uDD41',\n\tjopf: '\\uD835\\uDD5B',\n\tJscr: '\\uD835\\uDCA5',\n\tjscr: '\\uD835\\uDCBF',\n\tJsercy: '\\u0408',\n\tjsercy: '\\u0458',\n\tJukcy: '\\u0404',\n\tjukcy: '\\u0454',\n\tKappa: '\\u039A',\n\tkappa: '\\u03BA',\n\tkappav: '\\u03F0',\n\tKcedil: '\\u0136',\n\tkcedil: '\\u0137',\n\tKcy: '\\u041A',\n\tkcy: '\\u043A',\n\tKfr: '\\uD835\\uDD0E',\n\tkfr: '\\uD835\\uDD28',\n\tkgreen: '\\u0138',\n\tKHcy: '\\u0425',\n\tkhcy: '\\u0445',\n\tKJcy: '\\u040C',\n\tkjcy: '\\u045C',\n\tKopf: '\\uD835\\uDD42',\n\tkopf: '\\uD835\\uDD5C',\n\tKscr: '\\uD835\\uDCA6',\n\tkscr: '\\uD835\\uDCC0',\n\tlAarr: '\\u21DA',\n\tLacute: '\\u0139',\n\tlacute: '\\u013A',\n\tlaemptyv: '\\u29B4',\n\tlagran: '\\u2112',\n\tLambda: '\\u039B',\n\tlambda: '\\u03BB',\n\tLang: '\\u27EA',\n\tlang: '\\u27E8',\n\tlangd: '\\u2991',\n\tlangle: '\\u27E8',\n\tlap: '\\u2A85',\n\tLaplacetrf: '\\u2112',\n\tlaquo: '\\u00AB',\n\tLarr: '\\u219E',\n\tlArr: '\\u21D0',\n\tlarr: '\\u2190',\n\tlarrb: '\\u21E4',\n\tlarrbfs: '\\u291F',\n\tlarrfs: '\\u291D',\n\tlarrhk: '\\u21A9',\n\tlarrlp: '\\u21AB',\n\tlarrpl: '\\u2939',\n\tlarrsim: '\\u2973',\n\tlarrtl: '\\u21A2',\n\tlat: '\\u2AAB',\n\tlAtail: '\\u291B',\n\tlatail: '\\u2919',\n\tlate: '\\u2AAD',\n\tlates: '\\u2AAD\\uFE00',\n\tlBarr: '\\u290E',\n\tlbarr: '\\u290C',\n\tlbbrk: '\\u2772',\n\tlbrace: '\\u007B',\n\tlbrack: '\\u005B',\n\tlbrke: '\\u298B',\n\tlbrksld: '\\u298F',\n\tlbrkslu: '\\u298D',\n\tLcaron: '\\u013D',\n\tlcaron: '\\u013E',\n\tLcedil: '\\u013B',\n\tlcedil: '\\u013C',\n\tlceil: '\\u2308',\n\tlcub: '\\u007B',\n\tLcy: '\\u041B',\n\tlcy: '\\u043B',\n\tldca: '\\u2936',\n\tldquo: '\\u201C',\n\tldquor: '\\u201E',\n\tldrdhar: '\\u2967',\n\tldrushar: '\\u294B',\n\tldsh: '\\u21B2',\n\tlE: '\\u2266',\n\tle: '\\u2264',\n\tLeftAngleBracket: '\\u27E8',\n\tLeftArrow: '\\u2190',\n\tLeftarrow: '\\u21D0',\n\tleftarrow: '\\u2190',\n\tLeftArrowBar: '\\u21E4',\n\tLeftArrowRightArrow: '\\u21C6',\n\tleftarrowtail: '\\u21A2',\n\tLeftCeiling: '\\u2308',\n\tLeftDoubleBracket: '\\u27E6',\n\tLeftDownTeeVector: '\\u2961',\n\tLeftDownVector: '\\u21C3',\n\tLeftDownVectorBar: '\\u2959',\n\tLeftFloor: '\\u230A',\n\tleftharpoondown: '\\u21BD',\n\tleftharpoonup: '\\u21BC',\n\tleftleftarrows: '\\u21C7',\n\tLeftRightArrow: '\\u2194',\n\tLeftrightarrow: '\\u21D4',\n\tleftrightarrow: '\\u2194',\n\tleftrightarrows: '\\u21C6',\n\tleftrightharpoons: '\\u21CB',\n\tleftrightsquigarrow: '\\u21AD',\n\tLeftRightVector: '\\u294E',\n\tLeftTee: '\\u22A3',\n\tLeftTeeArrow: '\\u21A4',\n\tLeftTeeVector: '\\u295A',\n\tleftthreetimes: '\\u22CB',\n\tLeftTriangle: '\\u22B2',\n\tLeftTriangleBar: '\\u29CF',\n\tLeftTriangleEqual: '\\u22B4',\n\tLeftUpDownVector: '\\u2951',\n\tLeftUpTeeVector: '\\u2960',\n\tLeftUpVector: '\\u21BF',\n\tLeftUpVectorBar: '\\u2958',\n\tLeftVector: '\\u21BC',\n\tLeftVectorBar: '\\u2952',\n\tlEg: '\\u2A8B',\n\tleg: '\\u22DA',\n\tleq: '\\u2264',\n\tleqq: '\\u2266',\n\tleqslant: '\\u2A7D',\n\tles: '\\u2A7D',\n\tlescc: '\\u2AA8',\n\tlesdot: '\\u2A7F',\n\tlesdoto: '\\u2A81',\n\tlesdotor: '\\u2A83',\n\tlesg: '\\u22DA\\uFE00',\n\tlesges: '\\u2A93',\n\tlessapprox: '\\u2A85',\n\tlessdot: '\\u22D6',\n\tlesseqgtr: '\\u22DA',\n\tlesseqqgtr: '\\u2A8B',\n\tLessEqualGreater: '\\u22DA',\n\tLessFullEqual: '\\u2266',\n\tLessGreater: '\\u2276',\n\tlessgtr: '\\u2276',\n\tLessLess: '\\u2AA1',\n\tlesssim: '\\u2272',\n\tLessSlantEqual: '\\u2A7D',\n\tLessTilde: '\\u2272',\n\tlfisht: '\\u297C',\n\tlfloor: '\\u230A',\n\tLfr: '\\uD835\\uDD0F',\n\tlfr: '\\uD835\\uDD29',\n\tlg: '\\u2276',\n\tlgE: '\\u2A91',\n\tlHar: '\\u2962',\n\tlhard: '\\u21BD',\n\tlharu: '\\u21BC',\n\tlharul: '\\u296A',\n\tlhblk: '\\u2584',\n\tLJcy: '\\u0409',\n\tljcy: '\\u0459',\n\tLl: '\\u22D8',\n\tll: '\\u226A',\n\tllarr: '\\u21C7',\n\tllcorner: '\\u231E',\n\tLleftarrow: '\\u21DA',\n\tllhard: '\\u296B',\n\tlltri: '\\u25FA',\n\tLmidot: '\\u013F',\n\tlmidot: '\\u0140',\n\tlmoust: '\\u23B0',\n\tlmoustache: '\\u23B0',\n\tlnap: '\\u2A89',\n\tlnapprox: '\\u2A89',\n\tlnE: '\\u2268',\n\tlne: '\\u2A87',\n\tlneq: '\\u2A87',\n\tlneqq: '\\u2268',\n\tlnsim: '\\u22E6',\n\tloang: '\\u27EC',\n\tloarr: '\\u21FD',\n\tlobrk: '\\u27E6',\n\tLongLeftArrow: '\\u27F5',\n\tLongleftarrow: '\\u27F8',\n\tlongleftarrow: '\\u27F5',\n\tLongLeftRightArrow: '\\u27F7',\n\tLongleftrightarrow: '\\u27FA',\n\tlongleftrightarrow: '\\u27F7',\n\tlongmapsto: '\\u27FC',\n\tLongRightArrow: '\\u27F6',\n\tLongrightarrow: '\\u27F9',\n\tlongrightarrow: '\\u27F6',\n\tlooparrowleft: '\\u21AB',\n\tlooparrowright: '\\u21AC',\n\tlopar: '\\u2985',\n\tLopf: '\\uD835\\uDD43',\n\tlopf: '\\uD835\\uDD5D',\n\tloplus: '\\u2A2D',\n\tlotimes: '\\u2A34',\n\tlowast: '\\u2217',\n\tlowbar: '\\u005F',\n\tLowerLeftArrow: '\\u2199',\n\tLowerRightArrow: '\\u2198',\n\tloz: '\\u25CA',\n\tlozenge: '\\u25CA',\n\tlozf: '\\u29EB',\n\tlpar: '\\u0028',\n\tlparlt: '\\u2993',\n\tlrarr: '\\u21C6',\n\tlrcorner: '\\u231F',\n\tlrhar: '\\u21CB',\n\tlrhard: '\\u296D',\n\tlrm: '\\u200E',\n\tlrtri: '\\u22BF',\n\tlsaquo: '\\u2039',\n\tLscr: '\\u2112',\n\tlscr: '\\uD835\\uDCC1',\n\tLsh: '\\u21B0',\n\tlsh: '\\u21B0',\n\tlsim: '\\u2272',\n\tlsime: '\\u2A8D',\n\tlsimg: '\\u2A8F',\n\tlsqb: '\\u005B',\n\tlsquo: '\\u2018',\n\tlsquor: '\\u201A',\n\tLstrok: '\\u0141',\n\tlstrok: '\\u0142',\n\tLt: '\\u226A',\n\tLT: '\\u003C',\n\tlt: '\\u003C',\n\tltcc: '\\u2AA6',\n\tltcir: '\\u2A79',\n\tltdot: '\\u22D6',\n\tlthree: '\\u22CB',\n\tltimes: '\\u22C9',\n\tltlarr: '\\u2976',\n\tltquest: '\\u2A7B',\n\tltri: '\\u25C3',\n\tltrie: '\\u22B4',\n\tltrif: '\\u25C2',\n\tltrPar: '\\u2996',\n\tlurdshar: '\\u294A',\n\tluruhar: '\\u2966',\n\tlvertneqq: '\\u2268\\uFE00',\n\tlvnE: '\\u2268\\uFE00',\n\tmacr: '\\u00AF',\n\tmale: '\\u2642',\n\tmalt: '\\u2720',\n\tmaltese: '\\u2720',\n\tMap: '\\u2905',\n\tmap: '\\u21A6',\n\tmapsto: '\\u21A6',\n\tmapstodown: '\\u21A7',\n\tmapstoleft: '\\u21A4',\n\tmapstoup: '\\u21A5',\n\tmarker: '\\u25AE',\n\tmcomma: '\\u2A29',\n\tMcy: '\\u041C',\n\tmcy: '\\u043C',\n\tmdash: '\\u2014',\n\tmDDot: '\\u223A',\n\tmeasuredangle: '\\u2221',\n\tMediumSpace: '\\u205F',\n\tMellintrf: '\\u2133',\n\tMfr: '\\uD835\\uDD10',\n\tmfr: '\\uD835\\uDD2A',\n\tmho: '\\u2127',\n\tmicro: '\\u00B5',\n\tmid: '\\u2223',\n\tmidast: '\\u002A',\n\tmidcir: '\\u2AF0',\n\tmiddot: '\\u00B7',\n\tminus: '\\u2212',\n\tminusb: '\\u229F',\n\tminusd: '\\u2238',\n\tminusdu: '\\u2A2A',\n\tMinusPlus: '\\u2213',\n\tmlcp: '\\u2ADB',\n\tmldr: '\\u2026',\n\tmnplus: '\\u2213',\n\tmodels: '\\u22A7',\n\tMopf: '\\uD835\\uDD44',\n\tmopf: '\\uD835\\uDD5E',\n\tmp: '\\u2213',\n\tMscr: '\\u2133',\n\tmscr: '\\uD835\\uDCC2',\n\tmstpos: '\\u223E',\n\tMu: '\\u039C',\n\tmu: '\\u03BC',\n\tmultimap: '\\u22B8',\n\tmumap: '\\u22B8',\n\tnabla: '\\u2207',\n\tNacute: '\\u0143',\n\tnacute: '\\u0144',\n\tnang: '\\u2220\\u20D2',\n\tnap: '\\u2249',\n\tnapE: '\\u2A70\\u0338',\n\tnapid: '\\u224B\\u0338',\n\tnapos: '\\u0149',\n\tnapprox: '\\u2249',\n\tnatur: '\\u266E',\n\tnatural: '\\u266E',\n\tnaturals: '\\u2115',\n\tnbsp: '\\u00A0',\n\tnbump: '\\u224E\\u0338',\n\tnbumpe: '\\u224F\\u0338',\n\tncap: '\\u2A43',\n\tNcaron: '\\u0147',\n\tncaron: '\\u0148',\n\tNcedil: '\\u0145',\n\tncedil: '\\u0146',\n\tncong: '\\u2247',\n\tncongdot: '\\u2A6D\\u0338',\n\tncup: '\\u2A42',\n\tNcy: '\\u041D',\n\tncy: '\\u043D',\n\tndash: '\\u2013',\n\tne: '\\u2260',\n\tnearhk: '\\u2924',\n\tneArr: '\\u21D7',\n\tnearr: '\\u2197',\n\tnearrow: '\\u2197',\n\tnedot: '\\u2250\\u0338',\n\tNegativeMediumSpace: '\\u200B',\n\tNegativeThickSpace: '\\u200B',\n\tNegativeThinSpace: '\\u200B',\n\tNegativeVeryThinSpace: '\\u200B',\n\tnequiv: '\\u2262',\n\tnesear: '\\u2928',\n\tnesim: '\\u2242\\u0338',\n\tNestedGreaterGreater: '\\u226B',\n\tNestedLessLess: '\\u226A',\n\tNewLine: '\\u000A',\n\tnexist: '\\u2204',\n\tnexists: '\\u2204',\n\tNfr: '\\uD835\\uDD11',\n\tnfr: '\\uD835\\uDD2B',\n\tngE: '\\u2267\\u0338',\n\tnge: '\\u2271',\n\tngeq: '\\u2271',\n\tngeqq: '\\u2267\\u0338',\n\tngeqslant: '\\u2A7E\\u0338',\n\tnges: '\\u2A7E\\u0338',\n\tnGg: '\\u22D9\\u0338',\n\tngsim: '\\u2275',\n\tnGt: '\\u226B\\u20D2',\n\tngt: '\\u226F',\n\tngtr: '\\u226F',\n\tnGtv: '\\u226B\\u0338',\n\tnhArr: '\\u21CE',\n\tnharr: '\\u21AE',\n\tnhpar: '\\u2AF2',\n\tni: '\\u220B',\n\tnis: '\\u22FC',\n\tnisd: '\\u22FA',\n\tniv: '\\u220B',\n\tNJcy: '\\u040A',\n\tnjcy: '\\u045A',\n\tnlArr: '\\u21CD',\n\tnlarr: '\\u219A',\n\tnldr: '\\u2025',\n\tnlE: '\\u2266\\u0338',\n\tnle: '\\u2270',\n\tnLeftarrow: '\\u21CD',\n\tnleftarrow: '\\u219A',\n\tnLeftrightarrow: '\\u21CE',\n\tnleftrightarrow: '\\u21AE',\n\tnleq: '\\u2270',\n\tnleqq: '\\u2266\\u0338',\n\tnleqslant: '\\u2A7D\\u0338',\n\tnles: '\\u2A7D\\u0338',\n\tnless: '\\u226E',\n\tnLl: '\\u22D8\\u0338',\n\tnlsim: '\\u2274',\n\tnLt: '\\u226A\\u20D2',\n\tnlt: '\\u226E',\n\tnltri: '\\u22EA',\n\tnltrie: '\\u22EC',\n\tnLtv: '\\u226A\\u0338',\n\tnmid: '\\u2224',\n\tNoBreak: '\\u2060',\n\tNonBreakingSpace: '\\u00A0',\n\tNopf: '\\u2115',\n\tnopf: '\\uD835\\uDD5F',\n\tNot: '\\u2AEC',\n\tnot: '\\u00AC',\n\tNotCongruent: '\\u2262',\n\tNotCupCap: '\\u226D',\n\tNotDoubleVerticalBar: '\\u2226',\n\tNotElement: '\\u2209',\n\tNotEqual: '\\u2260',\n\tNotEqualTilde: '\\u2242\\u0338',\n\tNotExists: '\\u2204',\n\tNotGreater: '\\u226F',\n\tNotGreaterEqual: '\\u2271',\n\tNotGreaterFullEqual: '\\u2267\\u0338',\n\tNotGreaterGreater: '\\u226B\\u0338',\n\tNotGreaterLess: '\\u2279',\n\tNotGreaterSlantEqual: '\\u2A7E\\u0338',\n\tNotGreaterTilde: '\\u2275',\n\tNotHumpDownHump: '\\u224E\\u0338',\n\tNotHumpEqual: '\\u224F\\u0338',\n\tnotin: '\\u2209',\n\tnotindot: '\\u22F5\\u0338',\n\tnotinE: '\\u22F9\\u0338',\n\tnotinva: '\\u2209',\n\tnotinvb: '\\u22F7',\n\tnotinvc: '\\u22F6',\n\tNotLeftTriangle: '\\u22EA',\n\tNotLeftTriangleBar: '\\u29CF\\u0338',\n\tNotLeftTriangleEqual: '\\u22EC',\n\tNotLess: '\\u226E',\n\tNotLessEqual: '\\u2270',\n\tNotLessGreater: '\\u2278',\n\tNotLessLess: '\\u226A\\u0338',\n\tNotLessSlantEqual: '\\u2A7D\\u0338',\n\tNotLessTilde: '\\u2274',\n\tNotNestedGreaterGreater: '\\u2AA2\\u0338',\n\tNotNestedLessLess: '\\u2AA1\\u0338',\n\tnotni: '\\u220C',\n\tnotniva: '\\u220C',\n\tnotnivb: '\\u22FE',\n\tnotnivc: '\\u22FD',\n\tNotPrecedes: '\\u2280',\n\tNotPrecedesEqual: '\\u2AAF\\u0338',\n\tNotPrecedesSlantEqual: '\\u22E0',\n\tNotReverseElement: '\\u220C',\n\tNotRightTriangle: '\\u22EB',\n\tNotRightTriangleBar: '\\u29D0\\u0338',\n\tNotRightTriangleEqual: '\\u22ED',\n\tNotSquareSubset: '\\u228F\\u0338',\n\tNotSquareSubsetEqual: '\\u22E2',\n\tNotSquareSuperset: '\\u2290\\u0338',\n\tNotSquareSupersetEqual: '\\u22E3',\n\tNotSubset: '\\u2282\\u20D2',\n\tNotSubsetEqual: '\\u2288',\n\tNotSucceeds: '\\u2281',\n\tNotSucceedsEqual: '\\u2AB0\\u0338',\n\tNotSucceedsSlantEqual: '\\u22E1',\n\tNotSucceedsTilde: '\\u227F\\u0338',\n\tNotSuperset: '\\u2283\\u20D2',\n\tNotSupersetEqual: '\\u2289',\n\tNotTilde: '\\u2241',\n\tNotTildeEqual: '\\u2244',\n\tNotTildeFullEqual: '\\u2247',\n\tNotTildeTilde: '\\u2249',\n\tNotVerticalBar: '\\u2224',\n\tnpar: '\\u2226',\n\tnparallel: '\\u2226',\n\tnparsl: '\\u2AFD\\u20E5',\n\tnpart: '\\u2202\\u0338',\n\tnpolint: '\\u2A14',\n\tnpr: '\\u2280',\n\tnprcue: '\\u22E0',\n\tnpre: '\\u2AAF\\u0338',\n\tnprec: '\\u2280',\n\tnpreceq: '\\u2AAF\\u0338',\n\tnrArr: '\\u21CF',\n\tnrarr: '\\u219B',\n\tnrarrc: '\\u2933\\u0338',\n\tnrarrw: '\\u219D\\u0338',\n\tnRightarrow: '\\u21CF',\n\tnrightarrow: '\\u219B',\n\tnrtri: '\\u22EB',\n\tnrtrie: '\\u22ED',\n\tnsc: '\\u2281',\n\tnsccue: '\\u22E1',\n\tnsce: '\\u2AB0\\u0338',\n\tNscr: '\\uD835\\uDCA9',\n\tnscr: '\\uD835\\uDCC3',\n\tnshortmid: '\\u2224',\n\tnshortparallel: '\\u2226',\n\tnsim: '\\u2241',\n\tnsime: '\\u2244',\n\tnsimeq: '\\u2244',\n\tnsmid: '\\u2224',\n\tnspar: '\\u2226',\n\tnsqsube: '\\u22E2',\n\tnsqsupe: '\\u22E3',\n\tnsub: '\\u2284',\n\tnsubE: '\\u2AC5\\u0338',\n\tnsube: '\\u2288',\n\tnsubset: '\\u2282\\u20D2',\n\tnsubseteq: '\\u2288',\n\tnsubseteqq: '\\u2AC5\\u0338',\n\tnsucc: '\\u2281',\n\tnsucceq: '\\u2AB0\\u0338',\n\tnsup: '\\u2285',\n\tnsupE: '\\u2AC6\\u0338',\n\tnsupe: '\\u2289',\n\tnsupset: '\\u2283\\u20D2',\n\tnsupseteq: '\\u2289',\n\tnsupseteqq: '\\u2AC6\\u0338',\n\tntgl: '\\u2279',\n\tNtilde: '\\u00D1',\n\tntilde: '\\u00F1',\n\tntlg: '\\u2278',\n\tntriangleleft: '\\u22EA',\n\tntrianglelefteq: '\\u22EC',\n\tntriangleright: '\\u22EB',\n\tntrianglerighteq: '\\u22ED',\n\tNu: '\\u039D',\n\tnu: '\\u03BD',\n\tnum: '\\u0023',\n\tnumero: '\\u2116',\n\tnumsp: '\\u2007',\n\tnvap: '\\u224D\\u20D2',\n\tnVDash: '\\u22AF',\n\tnVdash: '\\u22AE',\n\tnvDash: '\\u22AD',\n\tnvdash: '\\u22AC',\n\tnvge: '\\u2265\\u20D2',\n\tnvgt: '\\u003E\\u20D2',\n\tnvHarr: '\\u2904',\n\tnvinfin: '\\u29DE',\n\tnvlArr: '\\u2902',\n\tnvle: '\\u2264\\u20D2',\n\tnvlt: '\\u003C\\u20D2',\n\tnvltrie: '\\u22B4\\u20D2',\n\tnvrArr: '\\u2903',\n\tnvrtrie: '\\u22B5\\u20D2',\n\tnvsim: '\\u223C\\u20D2',\n\tnwarhk: '\\u2923',\n\tnwArr: '\\u21D6',\n\tnwarr: '\\u2196',\n\tnwarrow: '\\u2196',\n\tnwnear: '\\u2927',\n\tOacute: '\\u00D3',\n\toacute: '\\u00F3',\n\toast: '\\u229B',\n\tocir: '\\u229A',\n\tOcirc: '\\u00D4',\n\tocirc: '\\u00F4',\n\tOcy: '\\u041E',\n\tocy: '\\u043E',\n\todash: '\\u229D',\n\tOdblac: '\\u0150',\n\todblac: '\\u0151',\n\todiv: '\\u2A38',\n\todot: '\\u2299',\n\todsold: '\\u29BC',\n\tOElig: '\\u0152',\n\toelig: '\\u0153',\n\tofcir: '\\u29BF',\n\tOfr: '\\uD835\\uDD12',\n\tofr: '\\uD835\\uDD2C',\n\togon: '\\u02DB',\n\tOgrave: '\\u00D2',\n\tograve: '\\u00F2',\n\togt: '\\u29C1',\n\tohbar: '\\u29B5',\n\tohm: '\\u03A9',\n\toint: '\\u222E',\n\tolarr: '\\u21BA',\n\tolcir: '\\u29BE',\n\tolcross: '\\u29BB',\n\toline: '\\u203E',\n\tolt: '\\u29C0',\n\tOmacr: '\\u014C',\n\tomacr: '\\u014D',\n\tOmega: '\\u03A9',\n\tomega: '\\u03C9',\n\tOmicron: '\\u039F',\n\tomicron: '\\u03BF',\n\tomid: '\\u29B6',\n\tominus: '\\u2296',\n\tOopf: '\\uD835\\uDD46',\n\toopf: '\\uD835\\uDD60',\n\topar: '\\u29B7',\n\tOpenCurlyDoubleQuote: '\\u201C',\n\tOpenCurlyQuote: '\\u2018',\n\toperp: '\\u29B9',\n\toplus: '\\u2295',\n\tOr: '\\u2A54',\n\tor: '\\u2228',\n\torarr: '\\u21BB',\n\tord: '\\u2A5D',\n\torder: '\\u2134',\n\torderof: '\\u2134',\n\tordf: '\\u00AA',\n\tordm: '\\u00BA',\n\torigof: '\\u22B6',\n\toror: '\\u2A56',\n\torslope: '\\u2A57',\n\torv: '\\u2A5B',\n\toS: '\\u24C8',\n\tOscr: '\\uD835\\uDCAA',\n\toscr: '\\u2134',\n\tOslash: '\\u00D8',\n\toslash: '\\u00F8',\n\tosol: '\\u2298',\n\tOtilde: '\\u00D5',\n\totilde: '\\u00F5',\n\tOtimes: '\\u2A37',\n\totimes: '\\u2297',\n\totimesas: '\\u2A36',\n\tOuml: '\\u00D6',\n\touml: '\\u00F6',\n\tovbar: '\\u233D',\n\tOverBar: '\\u203E',\n\tOverBrace: '\\u23DE',\n\tOverBracket: '\\u23B4',\n\tOverParenthesis: '\\u23DC',\n\tpar: '\\u2225',\n\tpara: '\\u00B6',\n\tparallel: '\\u2225',\n\tparsim: '\\u2AF3',\n\tparsl: '\\u2AFD',\n\tpart: '\\u2202',\n\tPartialD: '\\u2202',\n\tPcy: '\\u041F',\n\tpcy: '\\u043F',\n\tpercnt: '\\u0025',\n\tperiod: '\\u002E',\n\tpermil: '\\u2030',\n\tperp: '\\u22A5',\n\tpertenk: '\\u2031',\n\tPfr: '\\uD835\\uDD13',\n\tpfr: '\\uD835\\uDD2D',\n\tPhi: '\\u03A6',\n\tphi: '\\u03C6',\n\tphiv: '\\u03D5',\n\tphmmat: '\\u2133',\n\tphone: '\\u260E',\n\tPi: '\\u03A0',\n\tpi: '\\u03C0',\n\tpitchfork: '\\u22D4',\n\tpiv: '\\u03D6',\n\tplanck: '\\u210F',\n\tplanckh: '\\u210E',\n\tplankv: '\\u210F',\n\tplus: '\\u002B',\n\tplusacir: '\\u2A23',\n\tplusb: '\\u229E',\n\tpluscir: '\\u2A22',\n\tplusdo: '\\u2214',\n\tplusdu: '\\u2A25',\n\tpluse: '\\u2A72',\n\tPlusMinus: '\\u00B1',\n\tplusmn: '\\u00B1',\n\tplussim: '\\u2A26',\n\tplustwo: '\\u2A27',\n\tpm: '\\u00B1',\n\tPoincareplane: '\\u210C',\n\tpointint: '\\u2A15',\n\tPopf: '\\u2119',\n\tpopf: '\\uD835\\uDD61',\n\tpound: '\\u00A3',\n\tPr: '\\u2ABB',\n\tpr: '\\u227A',\n\tprap: '\\u2AB7',\n\tprcue: '\\u227C',\n\tprE: '\\u2AB3',\n\tpre: '\\u2AAF',\n\tprec: '\\u227A',\n\tprecapprox: '\\u2AB7',\n\tpreccurlyeq: '\\u227C',\n\tPrecedes: '\\u227A',\n\tPrecedesEqual: '\\u2AAF',\n\tPrecedesSlantEqual: '\\u227C',\n\tPrecedesTilde: '\\u227E',\n\tpreceq: '\\u2AAF',\n\tprecnapprox: '\\u2AB9',\n\tprecneqq: '\\u2AB5',\n\tprecnsim: '\\u22E8',\n\tprecsim: '\\u227E',\n\tPrime: '\\u2033',\n\tprime: '\\u2032',\n\tprimes: '\\u2119',\n\tprnap: '\\u2AB9',\n\tprnE: '\\u2AB5',\n\tprnsim: '\\u22E8',\n\tprod: '\\u220F',\n\tProduct: '\\u220F',\n\tprofalar: '\\u232E',\n\tprofline: '\\u2312',\n\tprofsurf: '\\u2313',\n\tprop: '\\u221D',\n\tProportion: '\\u2237',\n\tProportional: '\\u221D',\n\tpropto: '\\u221D',\n\tprsim: '\\u227E',\n\tprurel: '\\u22B0',\n\tPscr: '\\uD835\\uDCAB',\n\tpscr: '\\uD835\\uDCC5',\n\tPsi: '\\u03A8',\n\tpsi: '\\u03C8',\n\tpuncsp: '\\u2008',\n\tQfr: '\\uD835\\uDD14',\n\tqfr: '\\uD835\\uDD2E',\n\tqint: '\\u2A0C',\n\tQopf: '\\u211A',\n\tqopf: '\\uD835\\uDD62',\n\tqprime: '\\u2057',\n\tQscr: '\\uD835\\uDCAC',\n\tqscr: '\\uD835\\uDCC6',\n\tquaternions: '\\u210D',\n\tquatint: '\\u2A16',\n\tquest: '\\u003F',\n\tquesteq: '\\u225F',\n\tQUOT: '\\u0022',\n\tquot: '\\u0022',\n\trAarr: '\\u21DB',\n\trace: '\\u223D\\u0331',\n\tRacute: '\\u0154',\n\tracute: '\\u0155',\n\tradic: '\\u221A',\n\traemptyv: '\\u29B3',\n\tRang: '\\u27EB',\n\trang: '\\u27E9',\n\trangd: '\\u2992',\n\trange: '\\u29A5',\n\trangle: '\\u27E9',\n\traquo: '\\u00BB',\n\tRarr: '\\u21A0',\n\trArr: '\\u21D2',\n\trarr: '\\u2192',\n\trarrap: '\\u2975',\n\trarrb: '\\u21E5',\n\trarrbfs: '\\u2920',\n\trarrc: '\\u2933',\n\trarrfs: '\\u291E',\n\trarrhk: '\\u21AA',\n\trarrlp: '\\u21AC',\n\trarrpl: '\\u2945',\n\trarrsim: '\\u2974',\n\tRarrtl: '\\u2916',\n\trarrtl: '\\u21A3',\n\trarrw: '\\u219D',\n\trAtail: '\\u291C',\n\tratail: '\\u291A',\n\tratio: '\\u2236',\n\trationals: '\\u211A',\n\tRBarr: '\\u2910',\n\trBarr: '\\u290F',\n\trbarr: '\\u290D',\n\trbbrk: '\\u2773',\n\trbrace: '\\u007D',\n\trbrack: '\\u005D',\n\trbrke: '\\u298C',\n\trbrksld: '\\u298E',\n\trbrkslu: '\\u2990',\n\tRcaron: '\\u0158',\n\trcaron: '\\u0159',\n\tRcedil: '\\u0156',\n\trcedil: '\\u0157',\n\trceil: '\\u2309',\n\trcub: '\\u007D',\n\tRcy: '\\u0420',\n\trcy: '\\u0440',\n\trdca: '\\u2937',\n\trdldhar: '\\u2969',\n\trdquo: '\\u201D',\n\trdquor: '\\u201D',\n\trdsh: '\\u21B3',\n\tRe: '\\u211C',\n\treal: '\\u211C',\n\trealine: '\\u211B',\n\trealpart: '\\u211C',\n\treals: '\\u211D',\n\trect: '\\u25AD',\n\tREG: '\\u00AE',\n\treg: '\\u00AE',\n\tReverseElement: '\\u220B',\n\tReverseEquilibrium: '\\u21CB',\n\tReverseUpEquilibrium: '\\u296F',\n\trfisht: '\\u297D',\n\trfloor: '\\u230B',\n\tRfr: '\\u211C',\n\trfr: '\\uD835\\uDD2F',\n\trHar: '\\u2964',\n\trhard: '\\u21C1',\n\trharu: '\\u21C0',\n\trharul: '\\u296C',\n\tRho: '\\u03A1',\n\trho: '\\u03C1',\n\trhov: '\\u03F1',\n\tRightAngleBracket: '\\u27E9',\n\tRightArrow: '\\u2192',\n\tRightarrow: '\\u21D2',\n\trightarrow: '\\u2192',\n\tRightArrowBar: '\\u21E5',\n\tRightArrowLeftArrow: '\\u21C4',\n\trightarrowtail: '\\u21A3',\n\tRightCeiling: '\\u2309',\n\tRightDoubleBracket: '\\u27E7',\n\tRightDownTeeVector: '\\u295D',\n\tRightDownVector: '\\u21C2',\n\tRightDownVectorBar: '\\u2955',\n\tRightFloor: '\\u230B',\n\trightharpoondown: '\\u21C1',\n\trightharpoonup: '\\u21C0',\n\trightleftarrows: '\\u21C4',\n\trightleftharpoons: '\\u21CC',\n\trightrightarrows: '\\u21C9',\n\trightsquigarrow: '\\u219D',\n\tRightTee: '\\u22A2',\n\tRightTeeArrow: '\\u21A6',\n\tRightTeeVector: '\\u295B',\n\trightthreetimes: '\\u22CC',\n\tRightTriangle: '\\u22B3',\n\tRightTriangleBar: '\\u29D0',\n\tRightTriangleEqual: '\\u22B5',\n\tRightUpDownVector: '\\u294F',\n\tRightUpTeeVector: '\\u295C',\n\tRightUpVector: '\\u21BE',\n\tRightUpVectorBar: '\\u2954',\n\tRightVector: '\\u21C0',\n\tRightVectorBar: '\\u2953',\n\tring: '\\u02DA',\n\trisingdotseq: '\\u2253',\n\trlarr: '\\u21C4',\n\trlhar: '\\u21CC',\n\trlm: '\\u200F',\n\trmoust: '\\u23B1',\n\trmoustache: '\\u23B1',\n\trnmid: '\\u2AEE',\n\troang: '\\u27ED',\n\troarr: '\\u21FE',\n\trobrk: '\\u27E7',\n\tropar: '\\u2986',\n\tRopf: '\\u211D',\n\tropf: '\\uD835\\uDD63',\n\troplus: '\\u2A2E',\n\trotimes: '\\u2A35',\n\tRoundImplies: '\\u2970',\n\trpar: '\\u0029',\n\trpargt: '\\u2994',\n\trppolint: '\\u2A12',\n\trrarr: '\\u21C9',\n\tRrightarrow: '\\u21DB',\n\trsaquo: '\\u203A',\n\tRscr: '\\u211B',\n\trscr: '\\uD835\\uDCC7',\n\tRsh: '\\u21B1',\n\trsh: '\\u21B1',\n\trsqb: '\\u005D',\n\trsquo: '\\u2019',\n\trsquor: '\\u2019',\n\trthree: '\\u22CC',\n\trtimes: '\\u22CA',\n\trtri: '\\u25B9',\n\trtrie: '\\u22B5',\n\trtrif: '\\u25B8',\n\trtriltri: '\\u29CE',\n\tRuleDelayed: '\\u29F4',\n\truluhar: '\\u2968',\n\trx: '\\u211E',\n\tSacute: '\\u015A',\n\tsacute: '\\u015B',\n\tsbquo: '\\u201A',\n\tSc: '\\u2ABC',\n\tsc: '\\u227B',\n\tscap: '\\u2AB8',\n\tScaron: '\\u0160',\n\tscaron: '\\u0161',\n\tsccue: '\\u227D',\n\tscE: '\\u2AB4',\n\tsce: '\\u2AB0',\n\tScedil: '\\u015E',\n\tscedil: '\\u015F',\n\tScirc: '\\u015C',\n\tscirc: '\\u015D',\n\tscnap: '\\u2ABA',\n\tscnE: '\\u2AB6',\n\tscnsim: '\\u22E9',\n\tscpolint: '\\u2A13',\n\tscsim: '\\u227F',\n\tScy: '\\u0421',\n\tscy: '\\u0441',\n\tsdot: '\\u22C5',\n\tsdotb: '\\u22A1',\n\tsdote: '\\u2A66',\n\tsearhk: '\\u2925',\n\tseArr: '\\u21D8',\n\tsearr: '\\u2198',\n\tsearrow: '\\u2198',\n\tsect: '\\u00A7',\n\tsemi: '\\u003B',\n\tseswar: '\\u2929',\n\tsetminus: '\\u2216',\n\tsetmn: '\\u2216',\n\tsext: '\\u2736',\n\tSfr: '\\uD835\\uDD16',\n\tsfr: '\\uD835\\uDD30',\n\tsfrown: '\\u2322',\n\tsharp: '\\u266F',\n\tSHCHcy: '\\u0429',\n\tshchcy: '\\u0449',\n\tSHcy: '\\u0428',\n\tshcy: '\\u0448',\n\tShortDownArrow: '\\u2193',\n\tShortLeftArrow: '\\u2190',\n\tshortmid: '\\u2223',\n\tshortparallel: '\\u2225',\n\tShortRightArrow: '\\u2192',\n\tShortUpArrow: '\\u2191',\n\tshy: '\\u00AD',\n\tSigma: '\\u03A3',\n\tsigma: '\\u03C3',\n\tsigmaf: '\\u03C2',\n\tsigmav: '\\u03C2',\n\tsim: '\\u223C',\n\tsimdot: '\\u2A6A',\n\tsime: '\\u2243',\n\tsimeq: '\\u2243',\n\tsimg: '\\u2A9E',\n\tsimgE: '\\u2AA0',\n\tsiml: '\\u2A9D',\n\tsimlE: '\\u2A9F',\n\tsimne: '\\u2246',\n\tsimplus: '\\u2A24',\n\tsimrarr: '\\u2972',\n\tslarr: '\\u2190',\n\tSmallCircle: '\\u2218',\n\tsmallsetminus: '\\u2216',\n\tsmashp: '\\u2A33',\n\tsmeparsl: '\\u29E4',\n\tsmid: '\\u2223',\n\tsmile: '\\u2323',\n\tsmt: '\\u2AAA',\n\tsmte: '\\u2AAC',\n\tsmtes: '\\u2AAC\\uFE00',\n\tSOFTcy: '\\u042C',\n\tsoftcy: '\\u044C',\n\tsol: '\\u002F',\n\tsolb: '\\u29C4',\n\tsolbar: '\\u233F',\n\tSopf: '\\uD835\\uDD4A',\n\tsopf: '\\uD835\\uDD64',\n\tspades: '\\u2660',\n\tspadesuit: '\\u2660',\n\tspar: '\\u2225',\n\tsqcap: '\\u2293',\n\tsqcaps: '\\u2293\\uFE00',\n\tsqcup: '\\u2294',\n\tsqcups: '\\u2294\\uFE00',\n\tSqrt: '\\u221A',\n\tsqsub: '\\u228F',\n\tsqsube: '\\u2291',\n\tsqsubset: '\\u228F',\n\tsqsubseteq: '\\u2291',\n\tsqsup: '\\u2290',\n\tsqsupe: '\\u2292',\n\tsqsupset: '\\u2290',\n\tsqsupseteq: '\\u2292',\n\tsqu: '\\u25A1',\n\tSquare: '\\u25A1',\n\tsquare: '\\u25A1',\n\tSquareIntersection: '\\u2293',\n\tSquareSubset: '\\u228F',\n\tSquareSubsetEqual: '\\u2291',\n\tSquareSuperset: '\\u2290',\n\tSquareSupersetEqual: '\\u2292',\n\tSquareUnion: '\\u2294',\n\tsquarf: '\\u25AA',\n\tsquf: '\\u25AA',\n\tsrarr: '\\u2192',\n\tSscr: '\\uD835\\uDCAE',\n\tsscr: '\\uD835\\uDCC8',\n\tssetmn: '\\u2216',\n\tssmile: '\\u2323',\n\tsstarf: '\\u22C6',\n\tStar: '\\u22C6',\n\tstar: '\\u2606',\n\tstarf: '\\u2605',\n\tstraightepsilon: '\\u03F5',\n\tstraightphi: '\\u03D5',\n\tstrns: '\\u00AF',\n\tSub: '\\u22D0',\n\tsub: '\\u2282',\n\tsubdot: '\\u2ABD',\n\tsubE: '\\u2AC5',\n\tsube: '\\u2286',\n\tsubedot: '\\u2AC3',\n\tsubmult: '\\u2AC1',\n\tsubnE: '\\u2ACB',\n\tsubne: '\\u228A',\n\tsubplus: '\\u2ABF',\n\tsubrarr: '\\u2979',\n\tSubset: '\\u22D0',\n\tsubset: '\\u2282',\n\tsubseteq: '\\u2286',\n\tsubseteqq: '\\u2AC5',\n\tSubsetEqual: '\\u2286',\n\tsubsetneq: '\\u228A',\n\tsubsetneqq: '\\u2ACB',\n\tsubsim: '\\u2AC7',\n\tsubsub: '\\u2AD5',\n\tsubsup: '\\u2AD3',\n\tsucc: '\\u227B',\n\tsuccapprox: '\\u2AB8',\n\tsucccurlyeq: '\\u227D',\n\tSucceeds: '\\u227B',\n\tSucceedsEqual: '\\u2AB0',\n\tSucceedsSlantEqual: '\\u227D',\n\tSucceedsTilde: '\\u227F',\n\tsucceq: '\\u2AB0',\n\tsuccnapprox: '\\u2ABA',\n\tsuccneqq: '\\u2AB6',\n\tsuccnsim: '\\u22E9',\n\tsuccsim: '\\u227F',\n\tSuchThat: '\\u220B',\n\tSum: '\\u2211',\n\tsum: '\\u2211',\n\tsung: '\\u266A',\n\tSup: '\\u22D1',\n\tsup: '\\u2283',\n\tsup1: '\\u00B9',\n\tsup2: '\\u00B2',\n\tsup3: '\\u00B3',\n\tsupdot: '\\u2ABE',\n\tsupdsub: '\\u2AD8',\n\tsupE: '\\u2AC6',\n\tsupe: '\\u2287',\n\tsupedot: '\\u2AC4',\n\tSuperset: '\\u2283',\n\tSupersetEqual: '\\u2287',\n\tsuphsol: '\\u27C9',\n\tsuphsub: '\\u2AD7',\n\tsuplarr: '\\u297B',\n\tsupmult: '\\u2AC2',\n\tsupnE: '\\u2ACC',\n\tsupne: '\\u228B',\n\tsupplus: '\\u2AC0',\n\tSupset: '\\u22D1',\n\tsupset: '\\u2283',\n\tsupseteq: '\\u2287',\n\tsupseteqq: '\\u2AC6',\n\tsupsetneq: '\\u228B',\n\tsupsetneqq: '\\u2ACC',\n\tsupsim: '\\u2AC8',\n\tsupsub: '\\u2AD4',\n\tsupsup: '\\u2AD6',\n\tswarhk: '\\u2926',\n\tswArr: '\\u21D9',\n\tswarr: '\\u2199',\n\tswarrow: '\\u2199',\n\tswnwar: '\\u292A',\n\tszlig: '\\u00DF',\n\tTab: '\\u0009',\n\ttarget: '\\u2316',\n\tTau: '\\u03A4',\n\ttau: '\\u03C4',\n\ttbrk: '\\u23B4',\n\tTcaron: '\\u0164',\n\ttcaron: '\\u0165',\n\tTcedil: '\\u0162',\n\ttcedil: '\\u0163',\n\tTcy: '\\u0422',\n\ttcy: '\\u0442',\n\ttdot: '\\u20DB',\n\ttelrec: '\\u2315',\n\tTfr: '\\uD835\\uDD17',\n\ttfr: '\\uD835\\uDD31',\n\tthere4: '\\u2234',\n\tTherefore: '\\u2234',\n\ttherefore: '\\u2234',\n\tTheta: '\\u0398',\n\ttheta: '\\u03B8',\n\tthetasym: '\\u03D1',\n\tthetav: '\\u03D1',\n\tthickapprox: '\\u2248',\n\tthicksim: '\\u223C',\n\tThickSpace: '\\u205F\\u200A',\n\tthinsp: '\\u2009',\n\tThinSpace: '\\u2009',\n\tthkap: '\\u2248',\n\tthksim: '\\u223C',\n\tTHORN: '\\u00DE',\n\tthorn: '\\u00FE',\n\tTilde: '\\u223C',\n\ttilde: '\\u02DC',\n\tTildeEqual: '\\u2243',\n\tTildeFullEqual: '\\u2245',\n\tTildeTilde: '\\u2248',\n\ttimes: '\\u00D7',\n\ttimesb: '\\u22A0',\n\ttimesbar: '\\u2A31',\n\ttimesd: '\\u2A30',\n\ttint: '\\u222D',\n\ttoea: '\\u2928',\n\ttop: '\\u22A4',\n\ttopbot: '\\u2336',\n\ttopcir: '\\u2AF1',\n\tTopf: '\\uD835\\uDD4B',\n\ttopf: '\\uD835\\uDD65',\n\ttopfork: '\\u2ADA',\n\ttosa: '\\u2929',\n\ttprime: '\\u2034',\n\tTRADE: '\\u2122',\n\ttrade: '\\u2122',\n\ttriangle: '\\u25B5',\n\ttriangledown: '\\u25BF',\n\ttriangleleft: '\\u25C3',\n\ttrianglelefteq: '\\u22B4',\n\ttriangleq: '\\u225C',\n\ttriangleright: '\\u25B9',\n\ttrianglerighteq: '\\u22B5',\n\ttridot: '\\u25EC',\n\ttrie: '\\u225C',\n\ttriminus: '\\u2A3A',\n\tTripleDot: '\\u20DB',\n\ttriplus: '\\u2A39',\n\ttrisb: '\\u29CD',\n\ttritime: '\\u2A3B',\n\ttrpezium: '\\u23E2',\n\tTscr: '\\uD835\\uDCAF',\n\ttscr: '\\uD835\\uDCC9',\n\tTScy: '\\u0426',\n\ttscy: '\\u0446',\n\tTSHcy: '\\u040B',\n\ttshcy: '\\u045B',\n\tTstrok: '\\u0166',\n\ttstrok: '\\u0167',\n\ttwixt: '\\u226C',\n\ttwoheadleftarrow: '\\u219E',\n\ttwoheadrightarrow: '\\u21A0',\n\tUacute: '\\u00DA',\n\tuacute: '\\u00FA',\n\tUarr: '\\u219F',\n\tuArr: '\\u21D1',\n\tuarr: '\\u2191',\n\tUarrocir: '\\u2949',\n\tUbrcy: '\\u040E',\n\tubrcy: '\\u045E',\n\tUbreve: '\\u016C',\n\tubreve: '\\u016D',\n\tUcirc: '\\u00DB',\n\tucirc: '\\u00FB',\n\tUcy: '\\u0423',\n\tucy: '\\u0443',\n\tudarr: '\\u21C5',\n\tUdblac: '\\u0170',\n\tudblac: '\\u0171',\n\tudhar: '\\u296E',\n\tufisht: '\\u297E',\n\tUfr: '\\uD835\\uDD18',\n\tufr: '\\uD835\\uDD32',\n\tUgrave: '\\u00D9',\n\tugrave: '\\u00F9',\n\tuHar: '\\u2963',\n\tuharl: '\\u21BF',\n\tuharr: '\\u21BE',\n\tuhblk: '\\u2580',\n\tulcorn: '\\u231C',\n\tulcorner: '\\u231C',\n\tulcrop: '\\u230F',\n\tultri: '\\u25F8',\n\tUmacr: '\\u016A',\n\tumacr: '\\u016B',\n\tuml: '\\u00A8',\n\tUnderBar: '\\u005F',\n\tUnderBrace: '\\u23DF',\n\tUnderBracket: '\\u23B5',\n\tUnderParenthesis: '\\u23DD',\n\tUnion: '\\u22C3',\n\tUnionPlus: '\\u228E',\n\tUogon: '\\u0172',\n\tuogon: '\\u0173',\n\tUopf: '\\uD835\\uDD4C',\n\tuopf: '\\uD835\\uDD66',\n\tUpArrow: '\\u2191',\n\tUparrow: '\\u21D1',\n\tuparrow: '\\u2191',\n\tUpArrowBar: '\\u2912',\n\tUpArrowDownArrow: '\\u21C5',\n\tUpDownArrow: '\\u2195',\n\tUpdownarrow: '\\u21D5',\n\tupdownarrow: '\\u2195',\n\tUpEquilibrium: '\\u296E',\n\tupharpoonleft: '\\u21BF',\n\tupharpoonright: '\\u21BE',\n\tuplus: '\\u228E',\n\tUpperLeftArrow: '\\u2196',\n\tUpperRightArrow: '\\u2197',\n\tUpsi: '\\u03D2',\n\tupsi: '\\u03C5',\n\tupsih: '\\u03D2',\n\tUpsilon: '\\u03A5',\n\tupsilon: '\\u03C5',\n\tUpTee: '\\u22A5',\n\tUpTeeArrow: '\\u21A5',\n\tupuparrows: '\\u21C8',\n\turcorn: '\\u231D',\n\turcorner: '\\u231D',\n\turcrop: '\\u230E',\n\tUring: '\\u016E',\n\turing: '\\u016F',\n\turtri: '\\u25F9',\n\tUscr: '\\uD835\\uDCB0',\n\tuscr: '\\uD835\\uDCCA',\n\tutdot: '\\u22F0',\n\tUtilde: '\\u0168',\n\tutilde: '\\u0169',\n\tutri: '\\u25B5',\n\tutrif: '\\u25B4',\n\tuuarr: '\\u21C8',\n\tUuml: '\\u00DC',\n\tuuml: '\\u00FC',\n\tuwangle: '\\u29A7',\n\tvangrt: '\\u299C',\n\tvarepsilon: '\\u03F5',\n\tvarkappa: '\\u03F0',\n\tvarnothing: '\\u2205',\n\tvarphi: '\\u03D5',\n\tvarpi: '\\u03D6',\n\tvarpropto: '\\u221D',\n\tvArr: '\\u21D5',\n\tvarr: '\\u2195',\n\tvarrho: '\\u03F1',\n\tvarsigma: '\\u03C2',\n\tvarsubsetneq: '\\u228A\\uFE00',\n\tvarsubsetneqq: '\\u2ACB\\uFE00',\n\tvarsupsetneq: '\\u228B\\uFE00',\n\tvarsupsetneqq: '\\u2ACC\\uFE00',\n\tvartheta: '\\u03D1',\n\tvartriangleleft: '\\u22B2',\n\tvartriangleright: '\\u22B3',\n\tVbar: '\\u2AEB',\n\tvBar: '\\u2AE8',\n\tvBarv: '\\u2AE9',\n\tVcy: '\\u0412',\n\tvcy: '\\u0432',\n\tVDash: '\\u22AB',\n\tVdash: '\\u22A9',\n\tvDash: '\\u22A8',\n\tvdash: '\\u22A2',\n\tVdashl: '\\u2AE6',\n\tVee: '\\u22C1',\n\tvee: '\\u2228',\n\tveebar: '\\u22BB',\n\tveeeq: '\\u225A',\n\tvellip: '\\u22EE',\n\tVerbar: '\\u2016',\n\tverbar: '\\u007C',\n\tVert: '\\u2016',\n\tvert: '\\u007C',\n\tVerticalBar: '\\u2223',\n\tVerticalLine: '\\u007C',\n\tVerticalSeparator: '\\u2758',\n\tVerticalTilde: '\\u2240',\n\tVeryThinSpace: '\\u200A',\n\tVfr: '\\uD835\\uDD19',\n\tvfr: '\\uD835\\uDD33',\n\tvltri: '\\u22B2',\n\tvnsub: '\\u2282\\u20D2',\n\tvnsup: '\\u2283\\u20D2',\n\tVopf: '\\uD835\\uDD4D',\n\tvopf: '\\uD835\\uDD67',\n\tvprop: '\\u221D',\n\tvrtri: '\\u22B3',\n\tVscr: '\\uD835\\uDCB1',\n\tvscr: '\\uD835\\uDCCB',\n\tvsubnE: '\\u2ACB\\uFE00',\n\tvsubne: '\\u228A\\uFE00',\n\tvsupnE: '\\u2ACC\\uFE00',\n\tvsupne: '\\u228B\\uFE00',\n\tVvdash: '\\u22AA',\n\tvzigzag: '\\u299A',\n\tWcirc: '\\u0174',\n\twcirc: '\\u0175',\n\twedbar: '\\u2A5F',\n\tWedge: '\\u22C0',\n\twedge: '\\u2227',\n\twedgeq: '\\u2259',\n\tweierp: '\\u2118',\n\tWfr: '\\uD835\\uDD1A',\n\twfr: '\\uD835\\uDD34',\n\tWopf: '\\uD835\\uDD4E',\n\twopf: '\\uD835\\uDD68',\n\twp: '\\u2118',\n\twr: '\\u2240',\n\twreath: '\\u2240',\n\tWscr: '\\uD835\\uDCB2',\n\twscr: '\\uD835\\uDCCC',\n\txcap: '\\u22C2',\n\txcirc: '\\u25EF',\n\txcup: '\\u22C3',\n\txdtri: '\\u25BD',\n\tXfr: '\\uD835\\uDD1B',\n\txfr: '\\uD835\\uDD35',\n\txhArr: '\\u27FA',\n\txharr: '\\u27F7',\n\tXi: '\\u039E',\n\txi: '\\u03BE',\n\txlArr: '\\u27F8',\n\txlarr: '\\u27F5',\n\txmap: '\\u27FC',\n\txnis: '\\u22FB',\n\txodot: '\\u2A00',\n\tXopf: '\\uD835\\uDD4F',\n\txopf: '\\uD835\\uDD69',\n\txoplus: '\\u2A01',\n\txotime: '\\u2A02',\n\txrArr: '\\u27F9',\n\txrarr: '\\u27F6',\n\tXscr: '\\uD835\\uDCB3',\n\txscr: '\\uD835\\uDCCD',\n\txsqcup: '\\u2A06',\n\txuplus: '\\u2A04',\n\txutri: '\\u25B3',\n\txvee: '\\u22C1',\n\txwedge: '\\u22C0',\n\tYacute: '\\u00DD',\n\tyacute: '\\u00FD',\n\tYAcy: '\\u042F',\n\tyacy: '\\u044F',\n\tYcirc: '\\u0176',\n\tycirc: '\\u0177',\n\tYcy: '\\u042B',\n\tycy: '\\u044B',\n\tyen: '\\u00A5',\n\tYfr: '\\uD835\\uDD1C',\n\tyfr: '\\uD835\\uDD36',\n\tYIcy: '\\u0407',\n\tyicy: '\\u0457',\n\tYopf: '\\uD835\\uDD50',\n\tyopf: '\\uD835\\uDD6A',\n\tYscr: '\\uD835\\uDCB4',\n\tyscr: '\\uD835\\uDCCE',\n\tYUcy: '\\u042E',\n\tyucy: '\\u044E',\n\tYuml: '\\u0178',\n\tyuml: '\\u00FF',\n\tZacute: '\\u0179',\n\tzacute: '\\u017A',\n\tZcaron: '\\u017D',\n\tzcaron: '\\u017E',\n\tZcy: '\\u0417',\n\tzcy: '\\u0437',\n\tZdot: '\\u017B',\n\tzdot: '\\u017C',\n\tzeetrf: '\\u2128',\n\tZeroWidthSpace: '\\u200B',\n\tZeta: '\\u0396',\n\tzeta: '\\u03B6',\n\tZfr: '\\u2128',\n\tzfr: '\\uD835\\uDD37',\n\tZHcy: '\\u0416',\n\tzhcy: '\\u0436',\n\tzigrarr: '\\u21DD',\n\tZopf: '\\u2124',\n\tzopf: '\\uD835\\uDD6B',\n\tZscr: '\\uD835\\uDCB5',\n\tzscr: '\\uD835\\uDCCF',\n\tzwj: '\\u200D',\n\tzwnj: '\\u200C',\n});\n\n/**\n * @deprecated use `HTML_ENTITIES` instead\n * @see HTML_ENTITIES\n */\nexports.entityMap = exports.HTML_ENTITIES;\n","var NAMESPACE = require(\"./conventions\").NAMESPACE;\n\n//[4]   \tNameStartChar\t   ::=   \t\":\" | [A-Z] | \"_\" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]\n//[4a]   \tNameChar\t   ::=   \tNameStartChar | \"-\" | \".\" | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]\n//[5]   \tName\t   ::=   \tNameStartChar (NameChar)*\nvar nameStartChar = /[A-Z_a-z\\xC0-\\xD6\\xD8-\\xF6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]///\\u10000-\\uEFFFF\nvar nameChar = new RegExp(\"[\\\\-\\\\.0-9\"+nameStartChar.source.slice(1,-1)+\"\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040]\");\nvar tagNamePattern = new RegExp('^'+nameStartChar.source+nameChar.source+'*(?:\\:'+nameStartChar.source+nameChar.source+'*)?$');\n//var tagNamePattern = /^[a-zA-Z_][\\w\\-\\.]*(?:\\:[a-zA-Z_][\\w\\-\\.]*)?$/\n//var handlers = 'resolveEntity,getExternalSubset,characters,endDocument,endElement,endPrefixMapping,ignorableWhitespace,processingInstruction,setDocumentLocator,skippedEntity,startDocument,startElement,startPrefixMapping,notationDecl,unparsedEntityDecl,error,fatalError,warning,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,comment,endCDATA,endDTD,endEntity,startCDATA,startDTD,startEntity'.split(',')\n\n//S_TAG,\tS_ATTR,\tS_EQ,\tS_ATTR_NOQUOT_VALUE\n//S_ATTR_SPACE,\tS_ATTR_END,\tS_TAG_SPACE, S_TAG_CLOSE\nvar S_TAG = 0;//tag name offerring\nvar S_ATTR = 1;//attr name offerring\nvar S_ATTR_SPACE=2;//attr name end and space offer\nvar S_EQ = 3;//=space?\nvar S_ATTR_NOQUOT_VALUE = 4;//attr value(no quot value only)\nvar S_ATTR_END = 5;//attr value end and no space(quot end)\nvar S_TAG_SPACE = 6;//(attr value end || tag end ) && (space offer)\nvar S_TAG_CLOSE = 7;//closed el<el />\n\n/**\n * Creates an error that will not be caught by XMLReader aka the SAX parser.\n *\n * @param {string} message\n * @param {any?} locator Optional, can provide details about the location in the source\n * @constructor\n */\nfunction ParseError(message, locator) {\n\tthis.message = message\n\tthis.locator = locator\n\tif(Error.captureStackTrace) Error.captureStackTrace(this, ParseError);\n}\nParseError.prototype = new Error();\nParseError.prototype.name = ParseError.name\n\nfunction XMLReader(){\n\n}\n\nXMLReader.prototype = {\n\tparse:function(source,defaultNSMap,entityMap){\n\t\tvar domBuilder = this.domBuilder;\n\t\tdomBuilder.startDocument();\n\t\t_copy(defaultNSMap ,defaultNSMap = {})\n\t\tparse(source,defaultNSMap,entityMap,\n\t\t\t\tdomBuilder,this.errorHandler);\n\t\tdomBuilder.endDocument();\n\t}\n}\nfunction parse(source,defaultNSMapCopy,entityMap,domBuilder,errorHandler){\n\tfunction fixedFromCharCode(code) {\n\t\t// String.prototype.fromCharCode does not supports\n\t\t// > 2 bytes unicode chars directly\n\t\tif (code > 0xffff) {\n\t\t\tcode -= 0x10000;\n\t\t\tvar surrogate1 = 0xd800 + (code >> 10)\n\t\t\t\t, surrogate2 = 0xdc00 + (code & 0x3ff);\n\n\t\t\treturn String.fromCharCode(surrogate1, surrogate2);\n\t\t} else {\n\t\t\treturn String.fromCharCode(code);\n\t\t}\n\t}\n\tfunction entityReplacer(a){\n\t\tvar k = a.slice(1,-1);\n\t\tif (Object.hasOwnProperty.call(entityMap, k)) {\n\t\t\treturn entityMap[k];\n\t\t}else if(k.charAt(0) === '#'){\n\t\t\treturn fixedFromCharCode(parseInt(k.substr(1).replace('x','0x')))\n\t\t}else{\n\t\t\terrorHandler.error('entity not found:'+a);\n\t\t\treturn a;\n\t\t}\n\t}\n\tfunction appendText(end){//has some bugs\n\t\tif(end>start){\n\t\t\tvar xt = source.substring(start,end).replace(/&#?\\w+;/g,entityReplacer);\n\t\t\tlocator&&position(start);\n\t\t\tdomBuilder.characters(xt,0,end-start);\n\t\t\tstart = end\n\t\t}\n\t}\n\tfunction position(p,m){\n\t\twhile(p>=lineEnd && (m = linePattern.exec(source))){\n\t\t\tlineStart = m.index;\n\t\t\tlineEnd = lineStart + m[0].length;\n\t\t\tlocator.lineNumber++;\n\t\t\t//console.log('line++:',locator,startPos,endPos)\n\t\t}\n\t\tlocator.columnNumber = p-lineStart+1;\n\t}\n\tvar lineStart = 0;\n\tvar lineEnd = 0;\n\tvar linePattern = /.*(?:\\r\\n?|\\n)|.*$/g\n\tvar locator = domBuilder.locator;\n\n\tvar parseStack = [{currentNSMap:defaultNSMapCopy}]\n\tvar closeMap = {};\n\tvar start = 0;\n\twhile(true){\n\t\ttry{\n\t\t\tvar tagStart = source.indexOf('<',start);\n\t\t\tif(tagStart<0){\n\t\t\t\tif(!source.substr(start).match(/^\\s*$/)){\n\t\t\t\t\tvar doc = domBuilder.doc;\n\t    \t\t\tvar text = doc.createTextNode(source.substr(start));\n\t    \t\t\tdoc.appendChild(text);\n\t    \t\t\tdomBuilder.currentElement = text;\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif(tagStart>start){\n\t\t\t\tappendText(tagStart);\n\t\t\t}\n\t\t\tswitch(source.charAt(tagStart+1)){\n\t\t\tcase '/':\n\t\t\t\tvar end = source.indexOf('>',tagStart+3);\n\t\t\t\tvar tagName = source.substring(tagStart + 2, end).replace(/[ \\t\\n\\r]+$/g, '');\n\t\t\t\tvar config = parseStack.pop();\n\t\t\t\tif(end<0){\n\n\t        \t\ttagName = source.substring(tagStart+2).replace(/[\\s<].*/,'');\n\t        \t\terrorHandler.error(\"end tag name: \"+tagName+' is not complete:'+config.tagName);\n\t        \t\tend = tagStart+1+tagName.length;\n\t        \t}else if(tagName.match(/\\s</)){\n\t        \t\ttagName = tagName.replace(/[\\s<].*/,'');\n\t        \t\terrorHandler.error(\"end tag name: \"+tagName+' maybe not complete');\n\t        \t\tend = tagStart+1+tagName.length;\n\t\t\t\t}\n\t\t\t\tvar localNSMap = config.localNSMap;\n\t\t\t\tvar endMatch = config.tagName == tagName;\n\t\t\t\tvar endIgnoreCaseMach = endMatch || config.tagName&&config.tagName.toLowerCase() == tagName.toLowerCase()\n\t\t        if(endIgnoreCaseMach){\n\t\t        \tdomBuilder.endElement(config.uri,config.localName,tagName);\n\t\t\t\t\tif(localNSMap){\n\t\t\t\t\t\tfor (var prefix in localNSMap) {\n\t\t\t\t\t\t\tif (Object.prototype.hasOwnProperty.call(localNSMap, prefix)) {\n\t\t\t\t\t\t\t\tdomBuilder.endPrefixMapping(prefix);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif(!endMatch){\n\t\t            \terrorHandler.fatalError(\"end tag name: \"+tagName+' is not match the current start tagName:'+config.tagName ); // No known test case\n\t\t\t\t\t}\n\t\t        }else{\n\t\t        \tparseStack.push(config)\n\t\t        }\n\n\t\t\t\tend++;\n\t\t\t\tbreak;\n\t\t\t\t// end elment\n\t\t\tcase '?':// <?...?>\n\t\t\t\tlocator&&position(tagStart);\n\t\t\t\tend = parseInstruction(source,tagStart,domBuilder);\n\t\t\t\tbreak;\n\t\t\tcase '!':// <!doctype,<![CDATA,<!--\n\t\t\t\tlocator&&position(tagStart);\n\t\t\t\tend = parseDCC(source,tagStart,domBuilder,errorHandler);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tlocator&&position(tagStart);\n\t\t\t\tvar el = new ElementAttributes();\n\t\t\t\tvar currentNSMap = parseStack[parseStack.length-1].currentNSMap;\n\t\t\t\t//elStartEnd\n\t\t\t\tvar end = parseElementStartPart(source,tagStart,el,currentNSMap,entityReplacer,errorHandler);\n\t\t\t\tvar len = el.length;\n\n\n\t\t\t\tif(!el.closed && fixSelfClosed(source,end,el.tagName,closeMap)){\n\t\t\t\t\tel.closed = true;\n\t\t\t\t\tif(!entityMap.nbsp){\n\t\t\t\t\t\terrorHandler.warning('unclosed xml attribute');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(locator && len){\n\t\t\t\t\tvar locator2 = copyLocator(locator,{});\n\t\t\t\t\t//try{//attribute position fixed\n\t\t\t\t\tfor(var i = 0;i<len;i++){\n\t\t\t\t\t\tvar a = el[i];\n\t\t\t\t\t\tposition(a.offset);\n\t\t\t\t\t\ta.locator = copyLocator(locator,{});\n\t\t\t\t\t}\n\t\t\t\t\tdomBuilder.locator = locator2\n\t\t\t\t\tif(appendElement(el,domBuilder,currentNSMap)){\n\t\t\t\t\t\tparseStack.push(el)\n\t\t\t\t\t}\n\t\t\t\t\tdomBuilder.locator = locator;\n\t\t\t\t}else{\n\t\t\t\t\tif(appendElement(el,domBuilder,currentNSMap)){\n\t\t\t\t\t\tparseStack.push(el)\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (NAMESPACE.isHTML(el.uri) && !el.closed) {\n\t\t\t\t\tend = parseHtmlSpecialContent(source,end,el.tagName,entityReplacer,domBuilder)\n\t\t\t\t} else {\n\t\t\t\t\tend++;\n\t\t\t\t}\n\t\t\t}\n\t\t}catch(e){\n\t\t\tif (e instanceof ParseError) {\n\t\t\t\tthrow e;\n\t\t\t}\n\t\t\terrorHandler.error('element parse error: '+e)\n\t\t\tend = -1;\n\t\t}\n\t\tif(end>start){\n\t\t\tstart = end;\n\t\t}else{\n\t\t\t//TODO: 这里有可能sax回退,有位置错误风险\n\t\t\tappendText(Math.max(tagStart,start)+1);\n\t\t}\n\t}\n}\nfunction copyLocator(f,t){\n\tt.lineNumber = f.lineNumber;\n\tt.columnNumber = f.columnNumber;\n\treturn t;\n}\n\n/**\n * @see #appendElement(source,elStartEnd,el,selfClosed,entityReplacer,domBuilder,parseStack);\n * @return end of the elementStartPart(end of elementEndPart for selfClosed el)\n */\nfunction parseElementStartPart(source,start,el,currentNSMap,entityReplacer,errorHandler){\n\n\t/**\n\t * @param {string} qname\n\t * @param {string} value\n\t * @param {number} startIndex\n\t */\n\tfunction addAttribute(qname, value, startIndex) {\n\t\tif (el.attributeNames.hasOwnProperty(qname)) {\n\t\t\terrorHandler.fatalError('Attribute ' + qname + ' redefined')\n\t\t}\n\t\tel.addValue(\n\t\t\tqname,\n\t\t\t// @see https://www.w3.org/TR/xml/#AVNormalize\n\t\t\t// since the xmldom sax parser does not \"interpret\" DTD the following is not implemented:\n\t\t\t// - recursive replacement of (DTD) entity references\n\t\t\t// - trimming and collapsing multiple spaces into a single one for attributes that are not of type CDATA\n\t\t\tvalue.replace(/[\\t\\n\\r]/g, ' ').replace(/&#?\\w+;/g, entityReplacer),\n\t\t\tstartIndex\n\t\t)\n\t}\n\tvar attrName;\n\tvar value;\n\tvar p = ++start;\n\tvar s = S_TAG;//status\n\twhile(true){\n\t\tvar c = source.charAt(p);\n\t\tswitch(c){\n\t\tcase '=':\n\t\t\tif(s === S_ATTR){//attrName\n\t\t\t\tattrName = source.slice(start,p);\n\t\t\t\ts = S_EQ;\n\t\t\t}else if(s === S_ATTR_SPACE){\n\t\t\t\ts = S_EQ;\n\t\t\t}else{\n\t\t\t\t//fatalError: equal must after attrName or space after attrName\n\t\t\t\tthrow new Error('attribute equal must after attrName'); // No known test case\n\t\t\t}\n\t\t\tbreak;\n\t\tcase '\\'':\n\t\tcase '\"':\n\t\t\tif(s === S_EQ || s === S_ATTR //|| s == S_ATTR_SPACE\n\t\t\t\t){//equal\n\t\t\t\tif(s === S_ATTR){\n\t\t\t\t\terrorHandler.warning('attribute value must after \"=\"')\n\t\t\t\t\tattrName = source.slice(start,p)\n\t\t\t\t}\n\t\t\t\tstart = p+1;\n\t\t\t\tp = source.indexOf(c,start)\n\t\t\t\tif(p>0){\n\t\t\t\t\tvalue = source.slice(start, p);\n\t\t\t\t\taddAttribute(attrName, value, start-1);\n\t\t\t\t\ts = S_ATTR_END;\n\t\t\t\t}else{\n\t\t\t\t\t//fatalError: no end quot match\n\t\t\t\t\tthrow new Error('attribute value no end \\''+c+'\\' match');\n\t\t\t\t}\n\t\t\t}else if(s == S_ATTR_NOQUOT_VALUE){\n\t\t\t\tvalue = source.slice(start, p);\n\t\t\t\taddAttribute(attrName, value, start);\n\t\t\t\terrorHandler.warning('attribute \"'+attrName+'\" missed start quot('+c+')!!');\n\t\t\t\tstart = p+1;\n\t\t\t\ts = S_ATTR_END\n\t\t\t}else{\n\t\t\t\t//fatalError: no equal before\n\t\t\t\tthrow new Error('attribute value must after \"=\"'); // No known test case\n\t\t\t}\n\t\t\tbreak;\n\t\tcase '/':\n\t\t\tswitch(s){\n\t\t\tcase S_TAG:\n\t\t\t\tel.setTagName(source.slice(start,p));\n\t\t\tcase S_ATTR_END:\n\t\t\tcase S_TAG_SPACE:\n\t\t\tcase S_TAG_CLOSE:\n\t\t\t\ts =S_TAG_CLOSE;\n\t\t\t\tel.closed = true;\n\t\t\tcase S_ATTR_NOQUOT_VALUE:\n\t\t\tcase S_ATTR:\n\t\t\t\tbreak;\n\t\t\t\tcase S_ATTR_SPACE:\n\t\t\t\t\tel.closed = true;\n\t\t\t\tbreak;\n\t\t\t//case S_EQ:\n\t\t\tdefault:\n\t\t\t\tthrow new Error(\"attribute invalid close char('/')\") // No known test case\n\t\t\t}\n\t\t\tbreak;\n\t\tcase ''://end document\n\t\t\terrorHandler.error('unexpected end of input');\n\t\t\tif(s == S_TAG){\n\t\t\t\tel.setTagName(source.slice(start,p));\n\t\t\t}\n\t\t\treturn p;\n\t\tcase '>':\n\t\t\tswitch(s){\n\t\t\tcase S_TAG:\n\t\t\t\tel.setTagName(source.slice(start,p));\n\t\t\tcase S_ATTR_END:\n\t\t\tcase S_TAG_SPACE:\n\t\t\tcase S_TAG_CLOSE:\n\t\t\t\tbreak;//normal\n\t\t\tcase S_ATTR_NOQUOT_VALUE://Compatible state\n\t\t\tcase S_ATTR:\n\t\t\t\tvalue = source.slice(start,p);\n\t\t\t\tif(value.slice(-1) === '/'){\n\t\t\t\t\tel.closed  = true;\n\t\t\t\t\tvalue = value.slice(0,-1)\n\t\t\t\t}\n\t\t\tcase S_ATTR_SPACE:\n\t\t\t\tif(s === S_ATTR_SPACE){\n\t\t\t\t\tvalue = attrName;\n\t\t\t\t}\n\t\t\t\tif(s == S_ATTR_NOQUOT_VALUE){\n\t\t\t\t\terrorHandler.warning('attribute \"'+value+'\" missed quot(\")!');\n\t\t\t\t\taddAttribute(attrName, value, start)\n\t\t\t\t}else{\n\t\t\t\t\tif(!NAMESPACE.isHTML(currentNSMap['']) || !value.match(/^(?:disabled|checked|selected)$/i)){\n\t\t\t\t\t\terrorHandler.warning('attribute \"'+value+'\" missed value!! \"'+value+'\" instead!!')\n\t\t\t\t\t}\n\t\t\t\t\taddAttribute(value, value, start)\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase S_EQ:\n\t\t\t\tthrow new Error('attribute value missed!!');\n\t\t\t}\n//\t\t\tconsole.log(tagName,tagNamePattern,tagNamePattern.test(tagName))\n\t\t\treturn p;\n\t\t/*xml space '\\x20' | #x9 | #xD | #xA; */\n\t\tcase '\\u0080':\n\t\t\tc = ' ';\n\t\tdefault:\n\t\t\tif(c<= ' '){//space\n\t\t\t\tswitch(s){\n\t\t\t\tcase S_TAG:\n\t\t\t\t\tel.setTagName(source.slice(start,p));//tagName\n\t\t\t\t\ts = S_TAG_SPACE;\n\t\t\t\t\tbreak;\n\t\t\t\tcase S_ATTR:\n\t\t\t\t\tattrName = source.slice(start,p)\n\t\t\t\t\ts = S_ATTR_SPACE;\n\t\t\t\t\tbreak;\n\t\t\t\tcase S_ATTR_NOQUOT_VALUE:\n\t\t\t\t\tvar value = source.slice(start, p);\n\t\t\t\t\terrorHandler.warning('attribute \"'+value+'\" missed quot(\")!!');\n\t\t\t\t\taddAttribute(attrName, value, start)\n\t\t\t\tcase S_ATTR_END:\n\t\t\t\t\ts = S_TAG_SPACE;\n\t\t\t\t\tbreak;\n\t\t\t\t//case S_TAG_SPACE:\n\t\t\t\t//case S_EQ:\n\t\t\t\t//case S_ATTR_SPACE:\n\t\t\t\t//\tvoid();break;\n\t\t\t\t//case S_TAG_CLOSE:\n\t\t\t\t\t//ignore warning\n\t\t\t\t}\n\t\t\t}else{//not space\n//S_TAG,\tS_ATTR,\tS_EQ,\tS_ATTR_NOQUOT_VALUE\n//S_ATTR_SPACE,\tS_ATTR_END,\tS_TAG_SPACE, S_TAG_CLOSE\n\t\t\t\tswitch(s){\n\t\t\t\t//case S_TAG:void();break;\n\t\t\t\t//case S_ATTR:void();break;\n\t\t\t\t//case S_ATTR_NOQUOT_VALUE:void();break;\n\t\t\t\tcase S_ATTR_SPACE:\n\t\t\t\t\tvar tagName =  el.tagName;\n\t\t\t\t\tif (!NAMESPACE.isHTML(currentNSMap['']) || !attrName.match(/^(?:disabled|checked|selected)$/i)) {\n\t\t\t\t\t\terrorHandler.warning('attribute \"'+attrName+'\" missed value!! \"'+attrName+'\" instead2!!')\n\t\t\t\t\t}\n\t\t\t\t\taddAttribute(attrName, attrName, start);\n\t\t\t\t\tstart = p;\n\t\t\t\t\ts = S_ATTR;\n\t\t\t\t\tbreak;\n\t\t\t\tcase S_ATTR_END:\n\t\t\t\t\terrorHandler.warning('attribute space is required\"'+attrName+'\"!!')\n\t\t\t\tcase S_TAG_SPACE:\n\t\t\t\t\ts = S_ATTR;\n\t\t\t\t\tstart = p;\n\t\t\t\t\tbreak;\n\t\t\t\tcase S_EQ:\n\t\t\t\t\ts = S_ATTR_NOQUOT_VALUE;\n\t\t\t\t\tstart = p;\n\t\t\t\t\tbreak;\n\t\t\t\tcase S_TAG_CLOSE:\n\t\t\t\t\tthrow new Error(\"elements closed character '/' and '>' must be connected to\");\n\t\t\t\t}\n\t\t\t}\n\t\t}//end outer switch\n\t\t//console.log('p++',p)\n\t\tp++;\n\t}\n}\n/**\n * @return true if has new namespace define\n */\nfunction appendElement(el,domBuilder,currentNSMap){\n\tvar tagName = el.tagName;\n\tvar localNSMap = null;\n\t//var currentNSMap = parseStack[parseStack.length-1].currentNSMap;\n\tvar i = el.length;\n\twhile(i--){\n\t\tvar a = el[i];\n\t\tvar qName = a.qName;\n\t\tvar value = a.value;\n\t\tvar nsp = qName.indexOf(':');\n\t\tif(nsp>0){\n\t\t\tvar prefix = a.prefix = qName.slice(0,nsp);\n\t\t\tvar localName = qName.slice(nsp+1);\n\t\t\tvar nsPrefix = prefix === 'xmlns' && localName\n\t\t}else{\n\t\t\tlocalName = qName;\n\t\t\tprefix = null\n\t\t\tnsPrefix = qName === 'xmlns' && ''\n\t\t}\n\t\t//can not set prefix,because prefix !== ''\n\t\ta.localName = localName ;\n\t\t//prefix == null for no ns prefix attribute\n\t\tif(nsPrefix !== false){//hack!!\n\t\t\tif(localNSMap == null){\n\t\t\t\tlocalNSMap = {}\n\t\t\t\t//console.log(currentNSMap,0)\n\t\t\t\t_copy(currentNSMap,currentNSMap={})\n\t\t\t\t//console.log(currentNSMap,1)\n\t\t\t}\n\t\t\tcurrentNSMap[nsPrefix] = localNSMap[nsPrefix] = value;\n\t\t\ta.uri = NAMESPACE.XMLNS\n\t\t\tdomBuilder.startPrefixMapping(nsPrefix, value)\n\t\t}\n\t}\n\tvar i = el.length;\n\twhile(i--){\n\t\ta = el[i];\n\t\tvar prefix = a.prefix;\n\t\tif(prefix){//no prefix attribute has no namespace\n\t\t\tif(prefix === 'xml'){\n\t\t\t\ta.uri = NAMESPACE.XML;\n\t\t\t}if(prefix !== 'xmlns'){\n\t\t\t\ta.uri = currentNSMap[prefix || '']\n\n\t\t\t\t//{console.log('###'+a.qName,domBuilder.locator.systemId+'',currentNSMap,a.uri)}\n\t\t\t}\n\t\t}\n\t}\n\tvar nsp = tagName.indexOf(':');\n\tif(nsp>0){\n\t\tprefix = el.prefix = tagName.slice(0,nsp);\n\t\tlocalName = el.localName = tagName.slice(nsp+1);\n\t}else{\n\t\tprefix = null;//important!!\n\t\tlocalName = el.localName = tagName;\n\t}\n\t//no prefix element has default namespace\n\tvar ns = el.uri = currentNSMap[prefix || ''];\n\tdomBuilder.startElement(ns,localName,tagName,el);\n\t//endPrefixMapping and startPrefixMapping have not any help for dom builder\n\t//localNSMap = null\n\tif(el.closed){\n\t\tdomBuilder.endElement(ns,localName,tagName);\n\t\tif(localNSMap){\n\t\t\tfor (prefix in localNSMap) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(localNSMap, prefix)) {\n\t\t\t\t\tdomBuilder.endPrefixMapping(prefix);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}else{\n\t\tel.currentNSMap = currentNSMap;\n\t\tel.localNSMap = localNSMap;\n\t\t//parseStack.push(el);\n\t\treturn true;\n\t}\n}\nfunction parseHtmlSpecialContent(source,elStartEnd,tagName,entityReplacer,domBuilder){\n\tif(/^(?:script|textarea)$/i.test(tagName)){\n\t\tvar elEndStart =  source.indexOf('</'+tagName+'>',elStartEnd);\n\t\tvar text = source.substring(elStartEnd+1,elEndStart);\n\t\tif(/[&<]/.test(text)){\n\t\t\tif(/^script$/i.test(tagName)){\n\t\t\t\t//if(!/\\]\\]>/.test(text)){\n\t\t\t\t\t//lexHandler.startCDATA();\n\t\t\t\t\tdomBuilder.characters(text,0,text.length);\n\t\t\t\t\t//lexHandler.endCDATA();\n\t\t\t\t\treturn elEndStart;\n\t\t\t\t//}\n\t\t\t}//}else{//text area\n\t\t\t\ttext = text.replace(/&#?\\w+;/g,entityReplacer);\n\t\t\t\tdomBuilder.characters(text,0,text.length);\n\t\t\t\treturn elEndStart;\n\t\t\t//}\n\n\t\t}\n\t}\n\treturn elStartEnd+1;\n}\nfunction fixSelfClosed(source,elStartEnd,tagName,closeMap){\n\t//if(tagName in closeMap){\n\tvar pos = closeMap[tagName];\n\tif(pos == null){\n\t\t//console.log(tagName)\n\t\tpos =  source.lastIndexOf('</'+tagName+'>')\n\t\tif(pos<elStartEnd){//忘记闭合\n\t\t\tpos = source.lastIndexOf('</'+tagName)\n\t\t}\n\t\tcloseMap[tagName] =pos\n\t}\n\treturn pos<elStartEnd;\n\t//}\n}\n\nfunction _copy (source, target) {\n\tfor (var n in source) {\n\t\tif (Object.prototype.hasOwnProperty.call(source, n)) {\n\t\t\ttarget[n] = source[n];\n\t\t}\n\t}\n}\n\nfunction parseDCC(source,start,domBuilder,errorHandler){//sure start with '<!'\n\tvar next= source.charAt(start+2)\n\tswitch(next){\n\tcase '-':\n\t\tif(source.charAt(start + 3) === '-'){\n\t\t\tvar end = source.indexOf('-->',start+4);\n\t\t\t//append comment source.substring(4,end)//<!--\n\t\t\tif(end>start){\n\t\t\t\tdomBuilder.comment(source,start+4,end-start-4);\n\t\t\t\treturn end+3;\n\t\t\t}else{\n\t\t\t\terrorHandler.error(\"Unclosed comment\");\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}else{\n\t\t\t//error\n\t\t\treturn -1;\n\t\t}\n\tdefault:\n\t\tif(source.substr(start+3,6) == 'CDATA['){\n\t\t\tvar end = source.indexOf(']]>',start+9);\n\t\t\tdomBuilder.startCDATA();\n\t\t\tdomBuilder.characters(source,start+9,end-start-9);\n\t\t\tdomBuilder.endCDATA()\n\t\t\treturn end+3;\n\t\t}\n\t\t//<!DOCTYPE\n\t\t//startDTD(java.lang.String name, java.lang.String publicId, java.lang.String systemId)\n\t\tvar matchs = split(source,start);\n\t\tvar len = matchs.length;\n\t\tif(len>1 && /!doctype/i.test(matchs[0][0])){\n\t\t\tvar name = matchs[1][0];\n\t\t\tvar pubid = false;\n\t\t\tvar sysid = false;\n\t\t\tif(len>3){\n\t\t\t\tif(/^public$/i.test(matchs[2][0])){\n\t\t\t\t\tpubid = matchs[3][0];\n\t\t\t\t\tsysid = len>4 && matchs[4][0];\n\t\t\t\t}else if(/^system$/i.test(matchs[2][0])){\n\t\t\t\t\tsysid = matchs[3][0];\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar lastMatch = matchs[len-1]\n\t\t\tdomBuilder.startDTD(name, pubid, sysid);\n\t\t\tdomBuilder.endDTD();\n\n\t\t\treturn lastMatch.index+lastMatch[0].length\n\t\t}\n\t}\n\treturn -1;\n}\n\n\n\nfunction parseInstruction(source,start,domBuilder){\n\tvar end = source.indexOf('?>',start);\n\tif(end){\n\t\tvar match = source.substring(start,end).match(/^<\\?(\\S*)\\s*([\\s\\S]*?)\\s*$/);\n\t\tif(match){\n\t\t\tvar len = match[0].length;\n\t\t\tdomBuilder.processingInstruction(match[1], match[2]) ;\n\t\t\treturn end+2;\n\t\t}else{//error\n\t\t\treturn -1;\n\t\t}\n\t}\n\treturn -1;\n}\n\nfunction ElementAttributes(){\n\tthis.attributeNames = {}\n}\nElementAttributes.prototype = {\n\tsetTagName:function(tagName){\n\t\tif(!tagNamePattern.test(tagName)){\n\t\t\tthrow new Error('invalid tagName:'+tagName)\n\t\t}\n\t\tthis.tagName = tagName\n\t},\n\taddValue:function(qName, value, offset) {\n\t\tif(!tagNamePattern.test(qName)){\n\t\t\tthrow new Error('invalid attribute:'+qName)\n\t\t}\n\t\tthis.attributeNames[qName] = this.length;\n\t\tthis[this.length++] = {qName:qName,value:value,offset:offset}\n\t},\n\tlength:0,\n\tgetLocalName:function(i){return this[i].localName},\n\tgetLocator:function(i){return this[i].locator},\n\tgetQName:function(i){return this[i].qName},\n\tgetURI:function(i){return this[i].uri},\n\tgetValue:function(i){return this[i].value}\n//\t,getIndex:function(uri, localName)){\n//\t\tif(localName){\n//\n//\t\t}else{\n//\t\t\tvar qName = uri\n//\t\t}\n//\t},\n//\tgetValue:function(){return this.getValue(this.getIndex.apply(this,arguments))},\n//\tgetType:function(uri,localName){}\n//\tgetType:function(i){},\n}\n\n\n\nfunction split(source,start){\n\tvar match;\n\tvar buf = [];\n\tvar reg = /'[^']+'|\"[^\"]+\"|[^\\s<>\\/=]+=?|(\\/?\\s*>|<)/g;\n\treg.lastIndex = start;\n\treg.exec(source);//skip <\n\twhile(match = reg.exec(source)){\n\t\tbuf.push(match);\n\t\tif(match[1])return buf;\n\t}\n}\n\nexports.XMLReader = XMLReader;\nexports.ParseError = ParseError;\n","var conventions = require(\"./conventions\");\nvar dom = require('./dom')\nvar entities = require('./entities');\nvar sax = require('./sax');\n\nvar DOMImplementation = dom.DOMImplementation;\n\nvar NAMESPACE = conventions.NAMESPACE;\n\nvar ParseError = sax.ParseError;\nvar XMLReader = sax.XMLReader;\n\n/**\n * Normalizes line ending according to https://www.w3.org/TR/xml11/#sec-line-ends:\n *\n * > XML parsed entities are often stored in computer files which,\n * > for editing convenience, are organized into lines.\n * > These lines are typically separated by some combination\n * > of the characters CARRIAGE RETURN (#xD) and LINE FEED (#xA).\n * >\n * > To simplify the tasks of applications, the XML processor must behave\n * > as if it normalized all line breaks in external parsed entities (including the document entity)\n * > on input, before parsing, by translating all of the following to a single #xA character:\n * >\n * > 1. the two-character sequence #xD #xA\n * > 2. the two-character sequence #xD #x85\n * > 3. the single character #x85\n * > 4. the single character #x2028\n * > 5. any #xD character that is not immediately followed by #xA or #x85.\n *\n * @param {string} input\n * @returns {string}\n */\nfunction normalizeLineEndings(input) {\n\treturn input\n\t\t.replace(/\\r[\\n\\u0085]/g, '\\n')\n\t\t.replace(/[\\r\\u0085\\u2028]/g, '\\n')\n}\n\n/**\n * @typedef Locator\n * @property {number} [columnNumber]\n * @property {number} [lineNumber]\n */\n\n/**\n * @typedef DOMParserOptions\n * @property {DOMHandler} [domBuilder]\n * @property {Function} [errorHandler]\n * @property {(string) => string} [normalizeLineEndings] used to replace line endings before parsing\n * \t\t\t\t\t\tdefaults to `normalizeLineEndings`\n * @property {Locator} [locator]\n * @property {Record<string, string>} [xmlns]\n *\n * @see normalizeLineEndings\n */\n\n/**\n * The DOMParser interface provides the ability to parse XML or HTML source code\n * from a string into a DOM `Document`.\n *\n * _xmldom is different from the spec in that it allows an `options` parameter,\n * to override the default behavior._\n *\n * @param {DOMParserOptions} [options]\n * @constructor\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMParser\n * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-parsing-and-serialization\n */\nfunction DOMParser(options){\n\tthis.options = options ||{locator:{}};\n}\n\nDOMParser.prototype.parseFromString = function(source,mimeType){\n\tvar options = this.options;\n\tvar sax =  new XMLReader();\n\tvar domBuilder = options.domBuilder || new DOMHandler();//contentHandler and LexicalHandler\n\tvar errorHandler = options.errorHandler;\n\tvar locator = options.locator;\n\tvar defaultNSMap = options.xmlns||{};\n\tvar isHTML = /\\/x?html?$/.test(mimeType);//mimeType.toLowerCase().indexOf('html') > -1;\n  \tvar entityMap = isHTML ? entities.HTML_ENTITIES : entities.XML_ENTITIES;\n\tif(locator){\n\t\tdomBuilder.setDocumentLocator(locator)\n\t}\n\n\tsax.errorHandler = buildErrorHandler(errorHandler,domBuilder,locator);\n\tsax.domBuilder = options.domBuilder || domBuilder;\n\tif(isHTML){\n\t\tdefaultNSMap[''] = NAMESPACE.HTML;\n\t}\n\tdefaultNSMap.xml = defaultNSMap.xml || NAMESPACE.XML;\n\tvar normalize = options.normalizeLineEndings || normalizeLineEndings;\n\tif (source && typeof source === 'string') {\n\t\tsax.parse(\n\t\t\tnormalize(source),\n\t\t\tdefaultNSMap,\n\t\t\tentityMap\n\t\t)\n\t} else {\n\t\tsax.errorHandler.error('invalid doc source')\n\t}\n\treturn domBuilder.doc;\n}\nfunction buildErrorHandler(errorImpl,domBuilder,locator){\n\tif(!errorImpl){\n\t\tif(domBuilder instanceof DOMHandler){\n\t\t\treturn domBuilder;\n\t\t}\n\t\terrorImpl = domBuilder ;\n\t}\n\tvar errorHandler = {}\n\tvar isCallback = errorImpl instanceof Function;\n\tlocator = locator||{}\n\tfunction build(key){\n\t\tvar fn = errorImpl[key];\n\t\tif(!fn && isCallback){\n\t\t\tfn = errorImpl.length == 2?function(msg){errorImpl(key,msg)}:errorImpl;\n\t\t}\n\t\terrorHandler[key] = fn && function(msg){\n\t\t\tfn('[xmldom '+key+']\\t'+msg+_locator(locator));\n\t\t}||function(){};\n\t}\n\tbuild('warning');\n\tbuild('error');\n\tbuild('fatalError');\n\treturn errorHandler;\n}\n\n//console.log('#\\n\\n\\n\\n\\n\\n\\n####')\n/**\n * +ContentHandler+ErrorHandler\n * +LexicalHandler+EntityResolver2\n * -DeclHandler-DTDHandler\n *\n * DefaultHandler:EntityResolver, DTDHandler, ContentHandler, ErrorHandler\n * DefaultHandler2:DefaultHandler,LexicalHandler, DeclHandler, EntityResolver2\n * @link http://www.saxproject.org/apidoc/org/xml/sax/helpers/DefaultHandler.html\n */\nfunction DOMHandler() {\n    this.cdata = false;\n}\nfunction position(locator,node){\n\tnode.lineNumber = locator.lineNumber;\n\tnode.columnNumber = locator.columnNumber;\n}\n/**\n * @see org.xml.sax.ContentHandler#startDocument\n * @link http://www.saxproject.org/apidoc/org/xml/sax/ContentHandler.html\n */\nDOMHandler.prototype = {\n\tstartDocument : function() {\n    \tthis.doc = new DOMImplementation().createDocument(null, null, null);\n    \tif (this.locator) {\n        \tthis.doc.documentURI = this.locator.systemId;\n    \t}\n\t},\n\tstartElement:function(namespaceURI, localName, qName, attrs) {\n\t\tvar doc = this.doc;\n\t    var el = doc.createElementNS(namespaceURI, qName||localName);\n\t    var len = attrs.length;\n\t    appendElement(this, el);\n\t    this.currentElement = el;\n\n\t\tthis.locator && position(this.locator,el)\n\t    for (var i = 0 ; i < len; i++) {\n\t        var namespaceURI = attrs.getURI(i);\n\t        var value = attrs.getValue(i);\n\t        var qName = attrs.getQName(i);\n\t\t\tvar attr = doc.createAttributeNS(namespaceURI, qName);\n\t\t\tthis.locator &&position(attrs.getLocator(i),attr);\n\t\t\tattr.value = attr.nodeValue = value;\n\t\t\tel.setAttributeNode(attr)\n\t    }\n\t},\n\tendElement:function(namespaceURI, localName, qName) {\n\t\tvar current = this.currentElement\n\t\tvar tagName = current.tagName;\n\t\tthis.currentElement = current.parentNode;\n\t},\n\tstartPrefixMapping:function(prefix, uri) {\n\t},\n\tendPrefixMapping:function(prefix) {\n\t},\n\tprocessingInstruction:function(target, data) {\n\t    var ins = this.doc.createProcessingInstruction(target, data);\n\t    this.locator && position(this.locator,ins)\n\t    appendElement(this, ins);\n\t},\n\tignorableWhitespace:function(ch, start, length) {\n\t},\n\tcharacters:function(chars, start, length) {\n\t\tchars = _toString.apply(this,arguments)\n\t\t//console.log(chars)\n\t\tif(chars){\n\t\t\tif (this.cdata) {\n\t\t\t\tvar charNode = this.doc.createCDATASection(chars);\n\t\t\t} else {\n\t\t\t\tvar charNode = this.doc.createTextNode(chars);\n\t\t\t}\n\t\t\tif(this.currentElement){\n\t\t\t\tthis.currentElement.appendChild(charNode);\n\t\t\t}else if(/^\\s*$/.test(chars)){\n\t\t\t\tthis.doc.appendChild(charNode);\n\t\t\t\t//process xml\n\t\t\t}\n\t\t\tthis.locator && position(this.locator,charNode)\n\t\t}\n\t},\n\tskippedEntity:function(name) {\n\t},\n\tendDocument:function() {\n\t\tthis.doc.normalize();\n\t},\n\tsetDocumentLocator:function (locator) {\n\t    if(this.locator = locator){// && !('lineNumber' in locator)){\n\t    \tlocator.lineNumber = 0;\n\t    }\n\t},\n\t//LexicalHandler\n\tcomment:function(chars, start, length) {\n\t\tchars = _toString.apply(this,arguments)\n\t    var comm = this.doc.createComment(chars);\n\t    this.locator && position(this.locator,comm)\n\t    appendElement(this, comm);\n\t},\n\n\tstartCDATA:function() {\n\t    //used in characters() methods\n\t    this.cdata = true;\n\t},\n\tendCDATA:function() {\n\t    this.cdata = false;\n\t},\n\n\tstartDTD:function(name, publicId, systemId) {\n\t\tvar impl = this.doc.implementation;\n\t    if (impl && impl.createDocumentType) {\n\t        var dt = impl.createDocumentType(name, publicId, systemId);\n\t        this.locator && position(this.locator,dt)\n\t        appendElement(this, dt);\n\t\t\t\t\tthis.doc.doctype = dt;\n\t    }\n\t},\n\t/**\n\t * @see org.xml.sax.ErrorHandler\n\t * @link http://www.saxproject.org/apidoc/org/xml/sax/ErrorHandler.html\n\t */\n\twarning:function(error) {\n\t\tconsole.warn('[xmldom warning]\\t'+error,_locator(this.locator));\n\t},\n\terror:function(error) {\n\t\tconsole.error('[xmldom error]\\t'+error,_locator(this.locator));\n\t},\n\tfatalError:function(error) {\n\t\tthrow new ParseError(error, this.locator);\n\t}\n}\nfunction _locator(l){\n\tif(l){\n\t\treturn '\\n@'+(l.systemId ||'')+'#[line:'+l.lineNumber+',col:'+l.columnNumber+']'\n\t}\n}\nfunction _toString(chars,start,length){\n\tif(typeof chars == 'string'){\n\t\treturn chars.substr(start,length)\n\t}else{//java sax connect width xmldom on rhino(what about: \"? && !(chars instanceof String)\")\n\t\tif(chars.length >= start+length || start){\n\t\t\treturn new java.lang.String(chars,start,length)+'';\n\t\t}\n\t\treturn chars;\n\t}\n}\n\n/*\n * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/LexicalHandler.html\n * used method of org.xml.sax.ext.LexicalHandler:\n *  #comment(chars, start, length)\n *  #startCDATA()\n *  #endCDATA()\n *  #startDTD(name, publicId, systemId)\n *\n *\n * IGNORED method of org.xml.sax.ext.LexicalHandler:\n *  #endDTD()\n *  #startEntity(name)\n *  #endEntity(name)\n *\n *\n * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/DeclHandler.html\n * IGNORED method of org.xml.sax.ext.DeclHandler\n * \t#attributeDecl(eName, aName, type, mode, value)\n *  #elementDecl(name, model)\n *  #externalEntityDecl(name, publicId, systemId)\n *  #internalEntityDecl(name, value)\n * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/EntityResolver2.html\n * IGNORED method of org.xml.sax.EntityResolver2\n *  #resolveEntity(String name,String publicId,String baseURI,String systemId)\n *  #resolveEntity(publicId, systemId)\n *  #getExternalSubset(name, baseURI)\n * @link http://www.saxproject.org/apidoc/org/xml/sax/DTDHandler.html\n * IGNORED method of org.xml.sax.DTDHandler\n *  #notationDecl(name, publicId, systemId) {};\n *  #unparsedEntityDecl(name, publicId, systemId, notationName) {};\n */\n\"endDTD,startEntity,endEntity,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,resolveEntity,getExternalSubset,notationDecl,unparsedEntityDecl\".replace(/\\w+/g,function(key){\n\tDOMHandler.prototype[key] = function(){return null}\n})\n\n/* Private static helpers treated below as private instance methods, so don't need to add these to the public API; we might use a Relator to also get rid of non-standard public properties */\nfunction appendElement (hander,node) {\n    if (!hander.currentElement) {\n        hander.doc.appendChild(node);\n    } else {\n        hander.currentElement.appendChild(node);\n    }\n}//appendChild and setAttributeNS are preformance key\n\nexports.__DOMHandler = DOMHandler;\nexports.normalizeLineEndings = normalizeLineEndings;\nexports.DOMParser = DOMParser;\n","/*\r\n * xpath.js\r\n *\r\n * An XPath 1.0 library for JavaScript.\r\n *\r\n * Cameron McCormack <cam (at) mcc.id.au>\r\n *\r\n * This work is licensed under the MIT License.\r\n *\r\n * Revision 20: April 26, 2011\r\n *   Fixed a typo resulting in FIRST_ORDERED_NODE_TYPE results being wrong,\r\n *   thanks to <shi_a009 (at) hotmail.com>.\r\n *\r\n * Revision 19: November 29, 2005\r\n *   Nodesets now store their nodes in a height balanced tree, increasing\r\n *   performance for the common case of selecting nodes in document order,\r\n *   thanks to Sébastien Cramatte <contact (at) zeninteractif.com>.\r\n *   AVL tree code adapted from Raimund Neumann <rnova (at) gmx.net>.\r\n *\r\n * Revision 18: October 27, 2005\r\n *   DOM 3 XPath support.  Caveats:\r\n *     - namespace prefixes aren't resolved in XPathEvaluator.createExpression,\r\n *       but in XPathExpression.evaluate.\r\n *     - XPathResult.invalidIteratorState is not implemented.\r\n *\r\n * Revision 17: October 25, 2005\r\n *   Some core XPath function fixes and a patch to avoid crashing certain\r\n *   versions of MSXML in PathExpr.prototype.getOwnerElement, thanks to\r\n *   Sébastien Cramatte <contact (at) zeninteractif.com>.\r\n *\r\n * Revision 16: September 22, 2005\r\n *   Workarounds for some IE 5.5 deficiencies.\r\n *   Fixed problem with prefix node tests on attribute nodes.\r\n *\r\n * Revision 15: May 21, 2005\r\n *   Fixed problem with QName node tests on elements with an xmlns=\"...\".\r\n *\r\n * Revision 14: May 19, 2005\r\n *   Fixed QName node tests on attribute node regression.\r\n *\r\n * Revision 13: May 3, 2005\r\n *   Node tests are case insensitive now if working in an HTML DOM.\r\n *\r\n * Revision 12: April 26, 2005\r\n *   Updated licence.  Slight code changes to enable use of Dean\r\n *   Edwards' script compression, http://dean.edwards.name/packer/ .\r\n *\r\n * Revision 11: April 23, 2005\r\n *   Fixed bug with 'and' and 'or' operators, fix thanks to\r\n *   Sandy McArthur <sandy (at) mcarthur.org>.\r\n *\r\n * Revision 10: April 15, 2005\r\n *   Added support for a virtual root node, supposedly helpful for\r\n *   implementing XForms.  Fixed problem with QName node tests and\r\n *   the parent axis.\r\n *\r\n * Revision 9: March 17, 2005\r\n *   Namespace resolver tweaked so using the document node as the context\r\n *   for namespace lookups is equivalent to using the document element.\r\n *\r\n * Revision 8: February 13, 2005\r\n *   Handle implicit declaration of 'xmlns' namespace prefix.\r\n *   Fixed bug when comparing nodesets.\r\n *   Instance data can now be associated with a FunctionResolver, and\r\n *     workaround for MSXML not supporting 'localName' and 'getElementById',\r\n *     thanks to Grant Gongaware.\r\n *   Fix a few problems when the context node is the root node.\r\n *\r\n * Revision 7: February 11, 2005\r\n *   Default namespace resolver fix from Grant Gongaware\r\n *   <grant (at) gongaware.com>.\r\n *\r\n * Revision 6: February 10, 2005\r\n *   Fixed bug in 'number' function.\r\n *\r\n * Revision 5: February 9, 2005\r\n *   Fixed bug where text nodes not getting converted to string values.\r\n *\r\n * Revision 4: January 21, 2005\r\n *   Bug in 'name' function, fix thanks to Bill Edney.\r\n *   Fixed incorrect processing of namespace nodes.\r\n *   Fixed NamespaceResolver to resolve 'xml' namespace.\r\n *   Implemented union '|' operator.\r\n *\r\n * Revision 3: January 14, 2005\r\n *   Fixed bug with nodeset comparisons, bug lexing < and >.\r\n *\r\n * Revision 2: October 26, 2004\r\n *   QName node test namespace handling fixed.  Few other bug fixes.\r\n *\r\n * Revision 1: August 13, 2004\r\n *   Bug fixes from William J. Edney <bedney (at) technicalpursuit.com>.\r\n *   Added minimal licence.\r\n *\r\n * Initial version: June 14, 2004\r\n */\r\n\r\n// non-node wrapper\r\nvar xpath = (typeof exports === 'undefined') ? {} : exports;\r\n\r\n(function (exports) {\r\n    \"use strict\";\r\n\r\n    // namespace nodes are not part of the DOM spec, so we use a custom nodetype for them.\r\n    // should NOT be used externally\r\n    var NAMESPACE_NODE_NODETYPE = '__namespace';\r\n\r\n    var isNil = function (x) {\r\n        return x === null || x === undefined;\r\n    };\r\n\r\n    var isValidNodeType = function (nodeType) {\r\n        return nodeType === NAMESPACE_NODE_NODETYPE ||\r\n            (Number.isInteger(nodeType)\r\n                && nodeType >= 1\r\n                && nodeType <= 11\r\n            );\r\n    };\r\n\r\n    var isNodeLike = function (value) {\r\n        return value\r\n            && isValidNodeType(value.nodeType)\r\n            && typeof value.nodeName === \"string\";\r\n    };\r\n\r\n    // functional helpers\r\n    function curry(func) {\r\n        var slice = Array.prototype.slice,\r\n            totalargs = func.length,\r\n            partial = function (args, fn) {\r\n                return function () {\r\n                    return fn.apply(this, args.concat(slice.call(arguments)));\r\n                }\r\n            },\r\n            fn = function () {\r\n                var args = slice.call(arguments);\r\n                return (args.length < totalargs) ?\r\n                    partial(args, fn) :\r\n                    func.apply(this, slice.apply(arguments, [0, totalargs]));\r\n            };\r\n        return fn;\r\n    }\r\n\r\n    var forEach = function (f, xs) {\r\n        for (var i = 0; i < xs.length; i += 1) {\r\n            f(xs[i], i, xs);\r\n        }\r\n    };\r\n\r\n    var reduce = function (f, seed, xs) {\r\n        var acc = seed;\r\n\r\n        forEach(function (x, i) { acc = f(acc, x, i); }, xs);\r\n\r\n        return acc;\r\n    };\r\n\r\n    var map = function (f, xs) {\r\n        var mapped = new Array(xs.length);\r\n\r\n        forEach(function (x, i) { mapped[i] = f(x); }, xs);\r\n\r\n        return mapped;\r\n    };\r\n\r\n    var filter = function (f, xs) {\r\n        var filtered = [];\r\n\r\n        forEach(function (x, i) { if (f(x, i)) { filtered.push(x); } }, xs);\r\n\r\n        return filtered;\r\n    };\r\n\r\n    var includes = function (values, value) {\r\n        for (var i = 0; i < values.length; i += 1) {\r\n            if (values[i] === value) {\r\n                return true;\r\n            }\r\n        }\r\n\r\n        return false;\r\n    };\r\n\r\n    function always(value) { return function () { return value; } }\r\n\r\n    function toString(x) { return x.toString(); }\r\n    var join = function (s, xs) { return xs.join(s); };\r\n    var wrap = function (pref, suf, str) { return pref + str + suf; };\r\n\r\n    var prototypeConcat = Array.prototype.concat;\r\n\r\n    var sortNodes = function (nodes, reverse) {\r\n        var ns = new XNodeSet();\r\n\r\n        ns.addArray(nodes);\r\n\r\n        var sorted = ns.toArray();\r\n\r\n        return reverse ? sorted.reverse() : sorted;\r\n    }\r\n\r\n    // .apply() fails above a certain number of arguments - https://github.com/goto100/xpath/pull/98\r\n    var MAX_ARGUMENT_LENGTH = 32767;\r\n\r\n    function flatten(arr) {\r\n        var result = [];\r\n\r\n        for (var start = 0; start < arr.length; start += MAX_ARGUMENT_LENGTH) {\r\n            var chunk = arr.slice(start, start + MAX_ARGUMENT_LENGTH);\r\n\r\n            result = prototypeConcat.apply(result, chunk);\r\n        }\r\n\r\n        return result;\r\n    }\r\n\r\n    function assign(target, varArgs) { // .length of function is 2\r\n        var to = Object(target);\r\n\r\n        for (var index = 1; index < arguments.length; index++) {\r\n            var nextSource = arguments[index];\r\n\r\n            if (nextSource != null) { // Skip over if undefined or null\r\n                for (var nextKey in nextSource) {\r\n                    // Avoid bugs when hasOwnProperty is shadowed\r\n                    if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {\r\n                        to[nextKey] = nextSource[nextKey];\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        return to;\r\n    }\r\n\r\n    var NodeTypes = {\r\n        ELEMENT_NODE: 1,\r\n        ATTRIBUTE_NODE: 2,\r\n        TEXT_NODE: 3,\r\n        CDATA_SECTION_NODE: 4,\r\n        PROCESSING_INSTRUCTION_NODE: 7,\r\n        COMMENT_NODE: 8,\r\n        DOCUMENT_NODE: 9,\r\n        DOCUMENT_TYPE_NODE: 10,\r\n        DOCUMENT_FRAGMENT_NODE: 11,\r\n        NAMESPACE_NODE: NAMESPACE_NODE_NODETYPE,\r\n    };\r\n\r\n    // XPathParser ///////////////////////////////////////////////////////////////\r\n\r\n    XPathParser.prototype = new Object();\r\n    XPathParser.prototype.constructor = XPathParser;\r\n    XPathParser.superclass = Object.prototype;\r\n\r\n    function XPathParser() {\r\n        this.init();\r\n    }\r\n\r\n    XPathParser.prototype.init = function () {\r\n        this.reduceActions = [];\r\n\r\n        this.reduceActions[3] = function (rhs) {\r\n            return new OrOperation(rhs[0], rhs[2]);\r\n        };\r\n        this.reduceActions[5] = function (rhs) {\r\n            return new AndOperation(rhs[0], rhs[2]);\r\n        };\r\n        this.reduceActions[7] = function (rhs) {\r\n            return new EqualsOperation(rhs[0], rhs[2]);\r\n        };\r\n        this.reduceActions[8] = function (rhs) {\r\n            return new NotEqualOperation(rhs[0], rhs[2]);\r\n        };\r\n        this.reduceActions[10] = function (rhs) {\r\n            return new LessThanOperation(rhs[0], rhs[2]);\r\n        };\r\n        this.reduceActions[11] = function (rhs) {\r\n            return new GreaterThanOperation(rhs[0], rhs[2]);\r\n        };\r\n        this.reduceActions[12] = function (rhs) {\r\n            return new LessThanOrEqualOperation(rhs[0], rhs[2]);\r\n        };\r\n        this.reduceActions[13] = function (rhs) {\r\n            return new GreaterThanOrEqualOperation(rhs[0], rhs[2]);\r\n        };\r\n        this.reduceActions[15] = function (rhs) {\r\n            return new PlusOperation(rhs[0], rhs[2]);\r\n        };\r\n        this.reduceActions[16] = function (rhs) {\r\n            return new MinusOperation(rhs[0], rhs[2]);\r\n        };\r\n        this.reduceActions[18] = function (rhs) {\r\n            return new MultiplyOperation(rhs[0], rhs[2]);\r\n        };\r\n        this.reduceActions[19] = function (rhs) {\r\n            return new DivOperation(rhs[0], rhs[2]);\r\n        };\r\n        this.reduceActions[20] = function (rhs) {\r\n            return new ModOperation(rhs[0], rhs[2]);\r\n        };\r\n        this.reduceActions[22] = function (rhs) {\r\n            return new UnaryMinusOperation(rhs[1]);\r\n        };\r\n        this.reduceActions[24] = function (rhs) {\r\n            return new BarOperation(rhs[0], rhs[2]);\r\n        };\r\n        this.reduceActions[25] = function (rhs) {\r\n            return new PathExpr(undefined, undefined, rhs[0]);\r\n        };\r\n        this.reduceActions[27] = function (rhs) {\r\n            rhs[0].locationPath = rhs[2];\r\n            return rhs[0];\r\n        };\r\n        this.reduceActions[28] = function (rhs) {\r\n            rhs[0].locationPath = rhs[2];\r\n            rhs[0].locationPath.steps.unshift(new Step(Step.DESCENDANTORSELF, NodeTest.nodeTest, []));\r\n            return rhs[0];\r\n        };\r\n        this.reduceActions[29] = function (rhs) {\r\n            return new PathExpr(rhs[0], [], undefined);\r\n        };\r\n        this.reduceActions[30] = function (rhs) {\r\n            if (Utilities.instance_of(rhs[0], PathExpr)) {\r\n                if (rhs[0].filterPredicates == undefined) {\r\n                    rhs[0].filterPredicates = [];\r\n                }\r\n                rhs[0].filterPredicates.push(rhs[1]);\r\n                return rhs[0];\r\n            } else {\r\n                return new PathExpr(rhs[0], [rhs[1]], undefined);\r\n            }\r\n        };\r\n        this.reduceActions[32] = function (rhs) {\r\n            return rhs[1];\r\n        };\r\n        this.reduceActions[33] = function (rhs) {\r\n            return new XString(rhs[0]);\r\n        };\r\n        this.reduceActions[34] = function (rhs) {\r\n            return new XNumber(rhs[0]);\r\n        };\r\n        this.reduceActions[36] = function (rhs) {\r\n            return new FunctionCall(rhs[0], []);\r\n        };\r\n        this.reduceActions[37] = function (rhs) {\r\n            return new FunctionCall(rhs[0], rhs[2]);\r\n        };\r\n        this.reduceActions[38] = function (rhs) {\r\n            return [rhs[0]];\r\n        };\r\n        this.reduceActions[39] = function (rhs) {\r\n            rhs[2].unshift(rhs[0]);\r\n            return rhs[2];\r\n        };\r\n        this.reduceActions[43] = function (rhs) {\r\n            return new LocationPath(true, []);\r\n        };\r\n        this.reduceActions[44] = function (rhs) {\r\n            rhs[1].absolute = true;\r\n            return rhs[1];\r\n        };\r\n        this.reduceActions[46] = function (rhs) {\r\n            return new LocationPath(false, [rhs[0]]);\r\n        };\r\n        this.reduceActions[47] = function (rhs) {\r\n            rhs[0].steps.push(rhs[2]);\r\n            return rhs[0];\r\n        };\r\n        this.reduceActions[49] = function (rhs) {\r\n            return new Step(rhs[0], rhs[1], []);\r\n        };\r\n        this.reduceActions[50] = function (rhs) {\r\n            return new Step(Step.CHILD, rhs[0], []);\r\n        };\r\n        this.reduceActions[51] = function (rhs) {\r\n            return new Step(rhs[0], rhs[1], rhs[2]);\r\n        };\r\n        this.reduceActions[52] = function (rhs) {\r\n            return new Step(Step.CHILD, rhs[0], rhs[1]);\r\n        };\r\n        this.reduceActions[54] = function (rhs) {\r\n            return [rhs[0]];\r\n        };\r\n        this.reduceActions[55] = function (rhs) {\r\n            rhs[1].unshift(rhs[0]);\r\n            return rhs[1];\r\n        };\r\n        this.reduceActions[56] = function (rhs) {\r\n            if (rhs[0] == \"ancestor\") {\r\n                return Step.ANCESTOR;\r\n            } else if (rhs[0] == \"ancestor-or-self\") {\r\n                return Step.ANCESTORORSELF;\r\n            } else if (rhs[0] == \"attribute\") {\r\n                return Step.ATTRIBUTE;\r\n            } else if (rhs[0] == \"child\") {\r\n                return Step.CHILD;\r\n            } else if (rhs[0] == \"descendant\") {\r\n                return Step.DESCENDANT;\r\n            } else if (rhs[0] == \"descendant-or-self\") {\r\n                return Step.DESCENDANTORSELF;\r\n            } else if (rhs[0] == \"following\") {\r\n                return Step.FOLLOWING;\r\n            } else if (rhs[0] == \"following-sibling\") {\r\n                return Step.FOLLOWINGSIBLING;\r\n            } else if (rhs[0] == \"namespace\") {\r\n                return Step.NAMESPACE;\r\n            } else if (rhs[0] == \"parent\") {\r\n                return Step.PARENT;\r\n            } else if (rhs[0] == \"preceding\") {\r\n                return Step.PRECEDING;\r\n            } else if (rhs[0] == \"preceding-sibling\") {\r\n                return Step.PRECEDINGSIBLING;\r\n            } else if (rhs[0] == \"self\") {\r\n                return Step.SELF;\r\n            }\r\n            return -1;\r\n        };\r\n        this.reduceActions[57] = function (rhs) {\r\n            return Step.ATTRIBUTE;\r\n        };\r\n        this.reduceActions[59] = function (rhs) {\r\n            if (rhs[0] == \"comment\") {\r\n                return NodeTest.commentTest;\r\n            } else if (rhs[0] == \"text\") {\r\n                return NodeTest.textTest;\r\n            } else if (rhs[0] == \"processing-instruction\") {\r\n                return NodeTest.anyPiTest;\r\n            } else if (rhs[0] == \"node\") {\r\n                return NodeTest.nodeTest;\r\n            }\r\n            return new NodeTest(-1, undefined);\r\n        };\r\n        this.reduceActions[60] = function (rhs) {\r\n            return new NodeTest.PITest(rhs[2]);\r\n        };\r\n        this.reduceActions[61] = function (rhs) {\r\n            return rhs[1];\r\n        };\r\n        this.reduceActions[63] = function (rhs) {\r\n            rhs[1].absolute = true;\r\n            rhs[1].steps.unshift(new Step(Step.DESCENDANTORSELF, NodeTest.nodeTest, []));\r\n            return rhs[1];\r\n        };\r\n        this.reduceActions[64] = function (rhs) {\r\n            rhs[0].steps.push(new Step(Step.DESCENDANTORSELF, NodeTest.nodeTest, []));\r\n            rhs[0].steps.push(rhs[2]);\r\n            return rhs[0];\r\n        };\r\n        this.reduceActions[65] = function (rhs) {\r\n            return new Step(Step.SELF, NodeTest.nodeTest, []);\r\n        };\r\n        this.reduceActions[66] = function (rhs) {\r\n            return new Step(Step.PARENT, NodeTest.nodeTest, []);\r\n        };\r\n        this.reduceActions[67] = function (rhs) {\r\n            return new VariableReference(rhs[1]);\r\n        };\r\n        this.reduceActions[68] = function (rhs) {\r\n            return NodeTest.nameTestAny;\r\n        };\r\n        this.reduceActions[69] = function (rhs) {\r\n            return new NodeTest.NameTestPrefixAny(rhs[0].split(':')[0]);\r\n        };\r\n        this.reduceActions[70] = function (rhs) {\r\n            return new NodeTest.NameTestQName(rhs[0]);\r\n        };\r\n    };\r\n\r\n    XPathParser.actionTable = [\r\n        \" s s        sssssssss    s ss  s  ss\",\r\n        \"                 s                  \",\r\n        \"r  rrrrrrrrr         rrrrrrr rr  r  \",\r\n        \"                rrrrr               \",\r\n        \" s s        sssssssss    s ss  s  ss\",\r\n        \"rs  rrrrrrrr s  sssssrrrrrr  rrs rs \",\r\n        \" s s        sssssssss    s ss  s  ss\",\r\n        \"                            s       \",\r\n        \"                            s       \",\r\n        \"r  rrrrrrrrr         rrrrrrr rr rr  \",\r\n        \"r  rrrrrrrrr         rrrrrrr rr rr  \",\r\n        \"r  rrrrrrrrr         rrrrrrr rr rr  \",\r\n        \"r  rrrrrrrrr         rrrrrrr rr rr  \",\r\n        \"r  rrrrrrrrr         rrrrrrr rr rr  \",\r\n        \"  s                                 \",\r\n        \"                            s       \",\r\n        \" s           s  sssss          s  s \",\r\n        \"r  rrrrrrrrr         rrrrrrr rr  r  \",\r\n        \"a                                   \",\r\n        \"r       s                    rr  r  \",\r\n        \"r      sr                    rr  r  \",\r\n        \"r   s  rr            s       rr  r  \",\r\n        \"r   rssrr            rss     rr  r  \",\r\n        \"r   rrrrr            rrrss   rr  r  \",\r\n        \"r   rrrrrsss         rrrrr   rr  r  \",\r\n        \"r   rrrrrrrr         rrrrr   rr  r  \",\r\n        \"r   rrrrrrrr         rrrrrs  rr  r  \",\r\n        \"r   rrrrrrrr         rrrrrr  rr  r  \",\r\n        \"r   rrrrrrrr         rrrrrr  rr  r  \",\r\n        \"r  srrrrrrrr         rrrrrrs rr sr  \",\r\n        \"r  srrrrrrrr         rrrrrrs rr  r  \",\r\n        \"r  rrrrrrrrr         rrrrrrr rr rr  \",\r\n        \"r  rrrrrrrrr         rrrrrrr rr rr  \",\r\n        \"r  rrrrrrrrr         rrrrrrr rr rr  \",\r\n        \"r   rrrrrrrr         rrrrrr  rr  r  \",\r\n        \"r   rrrrrrrr         rrrrrr  rr  r  \",\r\n        \"r  rrrrrrrrr         rrrrrrr rr  r  \",\r\n        \"r  rrrrrrrrr         rrrrrrr rr  r  \",\r\n        \"                sssss               \",\r\n        \"r  rrrrrrrrr         rrrrrrr rr sr  \",\r\n        \"r  rrrrrrrrr         rrrrrrr rr  r  \",\r\n        \"r  rrrrrrrrr         rrrrrrr rr rr  \",\r\n        \"r  rrrrrrrrr         rrrrrrr rr rr  \",\r\n        \"                             s      \",\r\n        \"r  srrrrrrrr         rrrrrrs rr  r  \",\r\n        \"r   rrrrrrrr         rrrrr   rr  r  \",\r\n        \"              s                     \",\r\n        \"                             s      \",\r\n        \"                rrrrr               \",\r\n        \" s s        sssssssss    s sss s  ss\",\r\n        \"r  srrrrrrrr         rrrrrrs rr  r  \",\r\n        \" s s        sssssssss    s ss  s  ss\",\r\n        \" s s        sssssssss    s ss  s  ss\",\r\n        \" s s        sssssssss    s ss  s  ss\",\r\n        \" s s        sssssssss    s ss  s  ss\",\r\n        \" s s        sssssssss    s ss  s  ss\",\r\n        \" s s        sssssssss    s ss  s  ss\",\r\n        \" s s        sssssssss    s ss  s  ss\",\r\n        \" s s        sssssssss    s ss  s  ss\",\r\n        \" s s        sssssssss    s ss  s  ss\",\r\n        \" s s        sssssssss    s ss  s  ss\",\r\n        \" s s        sssssssss    s ss  s  ss\",\r\n        \" s s        sssssssss    s ss  s  ss\",\r\n        \" s s        sssssssss    s ss  s  ss\",\r\n        \" s s        sssssssss      ss  s  ss\",\r\n        \" s s        sssssssss    s ss  s  ss\",\r\n        \" s           s  sssss          s  s \",\r\n        \" s           s  sssss          s  s \",\r\n        \"r  rrrrrrrrr         rrrrrrr rr rr  \",\r\n        \" s           s  sssss          s  s \",\r\n        \" s           s  sssss          s  s \",\r\n        \"r  rrrrrrrrr         rrrrrrr rr sr  \",\r\n        \"r  rrrrrrrrr         rrrrrrr rr sr  \",\r\n        \"r  rrrrrrrrr         rrrrrrr rr  r  \",\r\n        \"r  rrrrrrrrr         rrrrrrr rr rr  \",\r\n        \"                             s      \",\r\n        \"r  rrrrrrrrr         rrrrrrr rr rr  \",\r\n        \"r  rrrrrrrrr         rrrrrrr rr rr  \",\r\n        \"                             rr     \",\r\n        \"                             s      \",\r\n        \"                             rs     \",\r\n        \"r      sr                    rr  r  \",\r\n        \"r   s  rr            s       rr  r  \",\r\n        \"r   rssrr            rss     rr  r  \",\r\n        \"r   rssrr            rss     rr  r  \",\r\n        \"r   rrrrr            rrrss   rr  r  \",\r\n        \"r   rrrrr            rrrss   rr  r  \",\r\n        \"r   rrrrr            rrrss   rr  r  \",\r\n        \"r   rrrrr            rrrss   rr  r  \",\r\n        \"r   rrrrrsss         rrrrr   rr  r  \",\r\n        \"r   rrrrrsss         rrrrr   rr  r  \",\r\n        \"r   rrrrrrrr         rrrrr   rr  r  \",\r\n        \"r   rrrrrrrr         rrrrr   rr  r  \",\r\n        \"r   rrrrrrrr         rrrrr   rr  r  \",\r\n        \"r   rrrrrrrr         rrrrrr  rr  r  \",\r\n        \"                                 r  \",\r\n        \"                                 s  \",\r\n        \"r  srrrrrrrr         rrrrrrs rr  r  \",\r\n        \"r  srrrrrrrr         rrrrrrs rr  r  \",\r\n        \"r  rrrrrrrrr         rrrrrrr rr  r  \",\r\n        \"r  rrrrrrrrr         rrrrrrr rr  r  \",\r\n        \"r  rrrrrrrrr         rrrrrrr rr  r  \",\r\n        \"r  rrrrrrrrr         rrrrrrr rr  r  \",\r\n        \"r  rrrrrrrrr         rrrrrrr rr rr  \",\r\n        \"r  rrrrrrrrr         rrrrrrr rr rr  \",\r\n        \" s s        sssssssss    s ss  s  ss\",\r\n        \"r  rrrrrrrrr         rrrrrrr rr rr  \",\r\n        \"                             r      \"\r\n    ];\r\n\r\n    XPathParser.actionTableNumber = [\r\n        \" 1 0        /.-,+*)('    & %$  #  \\\"!\",\r\n        \"                 J                  \",\r\n        \"a  aaaaaaaaa         aaaaaaa aa  a  \",\r\n        \"                YYYYY               \",\r\n        \" 1 0        /.-,+*)('    & %$  #  \\\"!\",\r\n        \"K1  KKKKKKKK .  +*)('KKKKKK  KK# K\\\" \",\r\n        \" 1 0        /.-,+*)('    & %$  #  \\\"!\",\r\n        \"                            N       \",\r\n        \"                            O       \",\r\n        \"e  eeeeeeeee         eeeeeee ee ee  \",\r\n        \"f  fffffffff         fffffff ff ff  \",\r\n        \"d  ddddddddd         ddddddd dd dd  \",\r\n        \"B  BBBBBBBBB         BBBBBBB BB BB  \",\r\n        \"A  AAAAAAAAA         AAAAAAA AA AA  \",\r\n        \"  P                                 \",\r\n        \"                            Q       \",\r\n        \" 1           .  +*)('          #  \\\" \",\r\n        \"b  bbbbbbbbb         bbbbbbb bb  b  \",\r\n        \"                                    \",\r\n        \"!       S                    !!  !  \",\r\n        \"\\\"      T\\\"                    \\\"\\\"  \\\"  \",\r\n        \"$   V  $$            U       $$  $  \",\r\n        \"&   &ZY&&            &XW     &&  &  \",\r\n        \")   )))))            )))\\\\[   ))  )  \",\r\n        \".   ....._^]         .....   ..  .  \",\r\n        \"1   11111111         11111   11  1  \",\r\n        \"5   55555555         55555`  55  5  \",\r\n        \"7   77777777         777777  77  7  \",\r\n        \"9   99999999         999999  99  9  \",\r\n        \":  c::::::::         ::::::b :: a:  \",\r\n        \"I  fIIIIIIII         IIIIIIe II  I  \",\r\n        \"=  =========         ======= == ==  \",\r\n        \"?  ?????????         ??????? ?? ??  \",\r\n        \"C  CCCCCCCCC         CCCCCCC CC CC  \",\r\n        \"J   JJJJJJJJ         JJJJJJ  JJ  J  \",\r\n        \"M   MMMMMMMM         MMMMMM  MM  M  \",\r\n        \"N  NNNNNNNNN         NNNNNNN NN  N  \",\r\n        \"P  PPPPPPPPP         PPPPPPP PP  P  \",\r\n        \"                +*)('               \",\r\n        \"R  RRRRRRRRR         RRRRRRR RR aR  \",\r\n        \"U  UUUUUUUUU         UUUUUUU UU  U  \",\r\n        \"Z  ZZZZZZZZZ         ZZZZZZZ ZZ ZZ  \",\r\n        \"c  ccccccccc         ccccccc cc cc  \",\r\n        \"                             j      \",\r\n        \"L  fLLLLLLLL         LLLLLLe LL  L  \",\r\n        \"6   66666666         66666   66  6  \",\r\n        \"              k                     \",\r\n        \"                             l      \",\r\n        \"                XXXXX               \",\r\n        \" 1 0        /.-,+*)('    & %$m #  \\\"!\",\r\n        \"_  f________         ______e __  _  \",\r\n        \" 1 0        /.-,+*)('    & %$  #  \\\"!\",\r\n        \" 1 0        /.-,+*)('    & %$  #  \\\"!\",\r\n        \" 1 0        /.-,+*)('    & %$  #  \\\"!\",\r\n        \" 1 0        /.-,+*)('    & %$  #  \\\"!\",\r\n        \" 1 0        /.-,+*)('    & %$  #  \\\"!\",\r\n        \" 1 0        /.-,+*)('    & %$  #  \\\"!\",\r\n        \" 1 0        /.-,+*)('    & %$  #  \\\"!\",\r\n        \" 1 0        /.-,+*)('    & %$  #  \\\"!\",\r\n        \" 1 0        /.-,+*)('    & %$  #  \\\"!\",\r\n        \" 1 0        /.-,+*)('    & %$  #  \\\"!\",\r\n        \" 1 0        /.-,+*)('    & %$  #  \\\"!\",\r\n        \" 1 0        /.-,+*)('    & %$  #  \\\"!\",\r\n        \" 1 0        /.-,+*)('    & %$  #  \\\"!\",\r\n        \" 1 0        /.-,+*)('      %$  #  \\\"!\",\r\n        \" 1 0        /.-,+*)('    & %$  #  \\\"!\",\r\n        \" 1           .  +*)('          #  \\\" \",\r\n        \" 1           .  +*)('          #  \\\" \",\r\n        \">  >>>>>>>>>         >>>>>>> >> >>  \",\r\n        \" 1           .  +*)('          #  \\\" \",\r\n        \" 1           .  +*)('          #  \\\" \",\r\n        \"Q  QQQQQQQQQ         QQQQQQQ QQ aQ  \",\r\n        \"V  VVVVVVVVV         VVVVVVV VV aV  \",\r\n        \"T  TTTTTTTTT         TTTTTTT TT  T  \",\r\n        \"@  @@@@@@@@@         @@@@@@@ @@ @@  \",\r\n        \"                             \\x87      \",\r\n        \"[  [[[[[[[[[         [[[[[[[ [[ [[  \",\r\n        \"D  DDDDDDDDD         DDDDDDD DD DD  \",\r\n        \"                             HH     \",\r\n        \"                             \\x88      \",\r\n        \"                             F\\x89     \",\r\n        \"#      T#                    ##  #  \",\r\n        \"%   V  %%            U       %%  %  \",\r\n        \"'   'ZY''            'XW     ''  '  \",\r\n        \"(   (ZY((            (XW     ((  (  \",\r\n        \"+   +++++            +++\\\\[   ++  +  \",\r\n        \"*   *****            ***\\\\[   **  *  \",\r\n        \"-   -----            ---\\\\[   --  -  \",\r\n        \",   ,,,,,            ,,,\\\\[   ,,  ,  \",\r\n        \"0   00000_^]         00000   00  0  \",\r\n        \"/   /////_^]         /////   //  /  \",\r\n        \"2   22222222         22222   22  2  \",\r\n        \"3   33333333         33333   33  3  \",\r\n        \"4   44444444         44444   44  4  \",\r\n        \"8   88888888         888888  88  8  \",\r\n        \"                                 ^  \",\r\n        \"                                 \\x8a  \",\r\n        \";  f;;;;;;;;         ;;;;;;e ;;  ;  \",\r\n        \"<  f<<<<<<<<         <<<<<<e <<  <  \",\r\n        \"O  OOOOOOOOO         OOOOOOO OO  O  \",\r\n        \"`  `````````         ``````` ``  `  \",\r\n        \"S  SSSSSSSSS         SSSSSSS SS  S  \",\r\n        \"W  WWWWWWWWW         WWWWWWW WW  W  \",\r\n        \"\\\\  \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\         \\\\\\\\\\\\\\\\\\\\\\\\\\\\ \\\\\\\\ \\\\\\\\  \",\r\n        \"E  EEEEEEEEE         EEEEEEE EE EE  \",\r\n        \" 1 0        /.-,+*)('    & %$  #  \\\"!\",\r\n        \"]  ]]]]]]]]]         ]]]]]]] ]] ]]  \",\r\n        \"                             G      \"\r\n    ];\r\n\r\n    XPathParser.gotoTable = [\r\n        \"3456789:;<=>?@ AB  CDEFGH IJ \",\r\n        \"                             \",\r\n        \"                             \",\r\n        \"                             \",\r\n        \"L456789:;<=>?@ AB  CDEFGH IJ \",\r\n        \"            M        EFGH IJ \",\r\n        \"       N;<=>?@ AB  CDEFGH IJ \",\r\n        \"                             \",\r\n        \"                             \",\r\n        \"                             \",\r\n        \"                             \",\r\n        \"                             \",\r\n        \"                             \",\r\n        \"                             \",\r\n        \"                             \",\r\n        \"                             \",\r\n        \"            S        EFGH IJ \",\r\n        \"                             \",\r\n        \"                             \",\r\n        \"                             \",\r\n        \"                             \",\r\n        \"                             \",\r\n        \"                             \",\r\n        \"                             \",\r\n        \"                             \",\r\n        \"                             \",\r\n        \"                             \",\r\n        \"                             \",\r\n        \"                             \",\r\n        \"              e              \",\r\n        \"                             \",\r\n        \"                             \",\r\n        \"                             \",\r\n        \"                             \",\r\n        \"                             \",\r\n        \"                             \",\r\n        \"                             \",\r\n        \"                             \",\r\n        \"                        h  J \",\r\n        \"              i          j   \",\r\n        \"                             \",\r\n        \"                             \",\r\n        \"                             \",\r\n        \"                             \",\r\n        \"                             \",\r\n        \"                             \",\r\n        \"                             \",\r\n        \"                             \",\r\n        \"                             \",\r\n        \"o456789:;<=>?@ ABpqCDEFGH IJ \",\r\n        \"                             \",\r\n        \"  r6789:;<=>?@ AB  CDEFGH IJ \",\r\n        \"   s789:;<=>?@ AB  CDEFGH IJ \",\r\n        \"    t89:;<=>?@ AB  CDEFGH IJ \",\r\n        \"    u89:;<=>?@ AB  CDEFGH IJ \",\r\n        \"     v9:;<=>?@ AB  CDEFGH IJ \",\r\n        \"     w9:;<=>?@ AB  CDEFGH IJ \",\r\n        \"     x9:;<=>?@ AB  CDEFGH IJ \",\r\n        \"     y9:;<=>?@ AB  CDEFGH IJ \",\r\n        \"      z:;<=>?@ AB  CDEFGH IJ \",\r\n        \"      {:;<=>?@ AB  CDEFGH IJ \",\r\n        \"       |;<=>?@ AB  CDEFGH IJ \",\r\n        \"       };<=>?@ AB  CDEFGH IJ \",\r\n        \"       ~;<=>?@ AB  CDEFGH IJ \",\r\n        \"         \\x7f=>?@ AB  CDEFGH IJ \",\r\n        \"\\x80456789:;<=>?@ AB  CDEFGH IJ\\x81\",\r\n        \"            \\x82        EFGH IJ \",\r\n        \"            \\x83        EFGH IJ \",\r\n        \"                             \",\r\n        \"                     \\x84 GH IJ \",\r\n        \"                     \\x85 GH IJ \",\r\n        \"              i          \\x86   \",\r\n        \"              i          \\x87   \",\r\n        \"                             \",\r\n        \"                             \",\r\n        \"                             \",\r\n        \"                             \",\r\n        \"                             \",\r\n        \"                             \",\r\n        \"                             \",\r\n        \"                             \",\r\n        \"                             \",\r\n        \"                             \",\r\n        \"                             \",\r\n        \"                             \",\r\n        \"                             \",\r\n        \"                             \",\r\n        \"                             \",\r\n        \"                             \",\r\n        \"                             \",\r\n        \"                             \",\r\n        \"                             \",\r\n        \"                             \",\r\n        \"                             \",\r\n        \"                             \",\r\n        \"                             \",\r\n        \"                             \",\r\n        \"                             \",\r\n        \"                             \",\r\n        \"                             \",\r\n        \"                             \",\r\n        \"                             \",\r\n        \"                             \",\r\n        \"                             \",\r\n        \"                             \",\r\n        \"o456789:;<=>?@ AB\\x8cqCDEFGH IJ \",\r\n        \"                             \",\r\n        \"                             \"\r\n    ];\r\n\r\n    XPathParser.productions = [\r\n        [1, 1, 2],\r\n        [2, 1, 3],\r\n        [3, 1, 4],\r\n        [3, 3, 3, -9, 4],\r\n        [4, 1, 5],\r\n        [4, 3, 4, -8, 5],\r\n        [5, 1, 6],\r\n        [5, 3, 5, -22, 6],\r\n        [5, 3, 5, -5, 6],\r\n        [6, 1, 7],\r\n        [6, 3, 6, -23, 7],\r\n        [6, 3, 6, -24, 7],\r\n        [6, 3, 6, -6, 7],\r\n        [6, 3, 6, -7, 7],\r\n        [7, 1, 8],\r\n        [7, 3, 7, -25, 8],\r\n        [7, 3, 7, -26, 8],\r\n        [8, 1, 9],\r\n        [8, 3, 8, -12, 9],\r\n        [8, 3, 8, -11, 9],\r\n        [8, 3, 8, -10, 9],\r\n        [9, 1, 10],\r\n        [9, 2, -26, 9],\r\n        [10, 1, 11],\r\n        [10, 3, 10, -27, 11],\r\n        [11, 1, 12],\r\n        [11, 1, 13],\r\n        [11, 3, 13, -28, 14],\r\n        [11, 3, 13, -4, 14],\r\n        [13, 1, 15],\r\n        [13, 2, 13, 16],\r\n        [15, 1, 17],\r\n        [15, 3, -29, 2, -30],\r\n        [15, 1, -15],\r\n        [15, 1, -16],\r\n        [15, 1, 18],\r\n        [18, 3, -13, -29, -30],\r\n        [18, 4, -13, -29, 19, -30],\r\n        [19, 1, 20],\r\n        [19, 3, 20, -31, 19],\r\n        [20, 1, 2],\r\n        [12, 1, 14],\r\n        [12, 1, 21],\r\n        [21, 1, -28],\r\n        [21, 2, -28, 14],\r\n        [21, 1, 22],\r\n        [14, 1, 23],\r\n        [14, 3, 14, -28, 23],\r\n        [14, 1, 24],\r\n        [23, 2, 25, 26],\r\n        [23, 1, 26],\r\n        [23, 3, 25, 26, 27],\r\n        [23, 2, 26, 27],\r\n        [23, 1, 28],\r\n        [27, 1, 16],\r\n        [27, 2, 16, 27],\r\n        [25, 2, -14, -3],\r\n        [25, 1, -32],\r\n        [26, 1, 29],\r\n        [26, 3, -20, -29, -30],\r\n        [26, 4, -21, -29, -15, -30],\r\n        [16, 3, -33, 30, -34],\r\n        [30, 1, 2],\r\n        [22, 2, -4, 14],\r\n        [24, 3, 14, -4, 23],\r\n        [28, 1, -35],\r\n        [28, 1, -2],\r\n        [17, 2, -36, -18],\r\n        [29, 1, -17],\r\n        [29, 1, -19],\r\n        [29, 1, -18]\r\n    ];\r\n\r\n    XPathParser.DOUBLEDOT = 2;\r\n    XPathParser.DOUBLECOLON = 3;\r\n    XPathParser.DOUBLESLASH = 4;\r\n    XPathParser.NOTEQUAL = 5;\r\n    XPathParser.LESSTHANOREQUAL = 6;\r\n    XPathParser.GREATERTHANOREQUAL = 7;\r\n    XPathParser.AND = 8;\r\n    XPathParser.OR = 9;\r\n    XPathParser.MOD = 10;\r\n    XPathParser.DIV = 11;\r\n    XPathParser.MULTIPLYOPERATOR = 12;\r\n    XPathParser.FUNCTIONNAME = 13;\r\n    XPathParser.AXISNAME = 14;\r\n    XPathParser.LITERAL = 15;\r\n    XPathParser.NUMBER = 16;\r\n    XPathParser.ASTERISKNAMETEST = 17;\r\n    XPathParser.QNAME = 18;\r\n    XPathParser.NCNAMECOLONASTERISK = 19;\r\n    XPathParser.NODETYPE = 20;\r\n    XPathParser.PROCESSINGINSTRUCTIONWITHLITERAL = 21;\r\n    XPathParser.EQUALS = 22;\r\n    XPathParser.LESSTHAN = 23;\r\n    XPathParser.GREATERTHAN = 24;\r\n    XPathParser.PLUS = 25;\r\n    XPathParser.MINUS = 26;\r\n    XPathParser.BAR = 27;\r\n    XPathParser.SLASH = 28;\r\n    XPathParser.LEFTPARENTHESIS = 29;\r\n    XPathParser.RIGHTPARENTHESIS = 30;\r\n    XPathParser.COMMA = 31;\r\n    XPathParser.AT = 32;\r\n    XPathParser.LEFTBRACKET = 33;\r\n    XPathParser.RIGHTBRACKET = 34;\r\n    XPathParser.DOT = 35;\r\n    XPathParser.DOLLAR = 36;\r\n\r\n    XPathParser.prototype.tokenize = function (s1) {\r\n        var types = [];\r\n        var values = [];\r\n        var s = s1 + '\\0';\r\n\r\n        var pos = 0;\r\n        var c = s.charAt(pos++);\r\n        while (1) {\r\n            while (c == ' ' || c == '\\t' || c == '\\r' || c == '\\n') {\r\n                c = s.charAt(pos++);\r\n            }\r\n            if (c == '\\0' || pos >= s.length) {\r\n                break;\r\n            }\r\n\r\n            if (c == '(') {\r\n                types.push(XPathParser.LEFTPARENTHESIS);\r\n                values.push(c);\r\n                c = s.charAt(pos++);\r\n                continue;\r\n            }\r\n            if (c == ')') {\r\n                types.push(XPathParser.RIGHTPARENTHESIS);\r\n                values.push(c);\r\n                c = s.charAt(pos++);\r\n                continue;\r\n            }\r\n            if (c == '[') {\r\n                types.push(XPathParser.LEFTBRACKET);\r\n                values.push(c);\r\n                c = s.charAt(pos++);\r\n                continue;\r\n            }\r\n            if (c == ']') {\r\n                types.push(XPathParser.RIGHTBRACKET);\r\n                values.push(c);\r\n                c = s.charAt(pos++);\r\n                continue;\r\n            }\r\n            if (c == '@') {\r\n                types.push(XPathParser.AT);\r\n                values.push(c);\r\n                c = s.charAt(pos++);\r\n                continue;\r\n            }\r\n            if (c == ',') {\r\n                types.push(XPathParser.COMMA);\r\n                values.push(c);\r\n                c = s.charAt(pos++);\r\n                continue;\r\n            }\r\n            if (c == '|') {\r\n                types.push(XPathParser.BAR);\r\n                values.push(c);\r\n                c = s.charAt(pos++);\r\n                continue;\r\n            }\r\n            if (c == '+') {\r\n                types.push(XPathParser.PLUS);\r\n                values.push(c);\r\n                c = s.charAt(pos++);\r\n                continue;\r\n            }\r\n            if (c == '-') {\r\n                types.push(XPathParser.MINUS);\r\n                values.push(c);\r\n                c = s.charAt(pos++);\r\n                continue;\r\n            }\r\n            if (c == '=') {\r\n                types.push(XPathParser.EQUALS);\r\n                values.push(c);\r\n                c = s.charAt(pos++);\r\n                continue;\r\n            }\r\n            if (c == '$') {\r\n                types.push(XPathParser.DOLLAR);\r\n                values.push(c);\r\n                c = s.charAt(pos++);\r\n                continue;\r\n            }\r\n\r\n            if (c == '.') {\r\n                c = s.charAt(pos++);\r\n                if (c == '.') {\r\n                    types.push(XPathParser.DOUBLEDOT);\r\n                    values.push(\"..\");\r\n                    c = s.charAt(pos++);\r\n                    continue;\r\n                }\r\n                if (c >= '0' && c <= '9') {\r\n                    var number = \".\" + c;\r\n                    c = s.charAt(pos++);\r\n                    while (c >= '0' && c <= '9') {\r\n                        number += c;\r\n                        c = s.charAt(pos++);\r\n                    }\r\n                    types.push(XPathParser.NUMBER);\r\n                    values.push(number);\r\n                    continue;\r\n                }\r\n                types.push(XPathParser.DOT);\r\n                values.push('.');\r\n                continue;\r\n            }\r\n\r\n            if (c == '\\'' || c == '\"') {\r\n                var delimiter = c;\r\n                var literal = \"\";\r\n                while (pos < s.length && (c = s.charAt(pos)) !== delimiter) {\r\n                    literal += c;\r\n                    pos += 1;\r\n                }\r\n                if (c !== delimiter) {\r\n                    throw XPathException.fromMessage(\"Unterminated string literal: \" + delimiter + literal);\r\n                }\r\n                pos += 1;\r\n                types.push(XPathParser.LITERAL);\r\n                values.push(literal);\r\n                c = s.charAt(pos++);\r\n                continue;\r\n            }\r\n\r\n            if (c >= '0' && c <= '9') {\r\n                var number = c;\r\n                c = s.charAt(pos++);\r\n                while (c >= '0' && c <= '9') {\r\n                    number += c;\r\n                    c = s.charAt(pos++);\r\n                }\r\n                if (c == '.') {\r\n                    if (s.charAt(pos) >= '0' && s.charAt(pos) <= '9') {\r\n                        number += c;\r\n                        number += s.charAt(pos++);\r\n                        c = s.charAt(pos++);\r\n                        while (c >= '0' && c <= '9') {\r\n                            number += c;\r\n                            c = s.charAt(pos++);\r\n                        }\r\n                    }\r\n                }\r\n                types.push(XPathParser.NUMBER);\r\n                values.push(number);\r\n                continue;\r\n            }\r\n\r\n            if (c == '*') {\r\n                if (types.length > 0) {\r\n                    var last = types[types.length - 1];\r\n                    if (last != XPathParser.AT\r\n                        && last != XPathParser.DOUBLECOLON\r\n                        && last != XPathParser.LEFTPARENTHESIS\r\n                        && last != XPathParser.LEFTBRACKET\r\n                        && last != XPathParser.AND\r\n                        && last != XPathParser.OR\r\n                        && last != XPathParser.MOD\r\n                        && last != XPathParser.DIV\r\n                        && last != XPathParser.MULTIPLYOPERATOR\r\n                        && last != XPathParser.SLASH\r\n                        && last != XPathParser.DOUBLESLASH\r\n                        && last != XPathParser.BAR\r\n                        && last != XPathParser.PLUS\r\n                        && last != XPathParser.MINUS\r\n                        && last != XPathParser.EQUALS\r\n                        && last != XPathParser.NOTEQUAL\r\n                        && last != XPathParser.LESSTHAN\r\n                        && last != XPathParser.LESSTHANOREQUAL\r\n                        && last != XPathParser.GREATERTHAN\r\n                        && last != XPathParser.GREATERTHANOREQUAL) {\r\n                        types.push(XPathParser.MULTIPLYOPERATOR);\r\n                        values.push(c);\r\n                        c = s.charAt(pos++);\r\n                        continue;\r\n                    }\r\n                }\r\n                types.push(XPathParser.ASTERISKNAMETEST);\r\n                values.push(c);\r\n                c = s.charAt(pos++);\r\n                continue;\r\n            }\r\n\r\n            if (c == ':') {\r\n                if (s.charAt(pos) == ':') {\r\n                    types.push(XPathParser.DOUBLECOLON);\r\n                    values.push(\"::\");\r\n                    pos++;\r\n                    c = s.charAt(pos++);\r\n                    continue;\r\n                }\r\n            }\r\n\r\n            if (c == '/') {\r\n                c = s.charAt(pos++);\r\n                if (c == '/') {\r\n                    types.push(XPathParser.DOUBLESLASH);\r\n                    values.push(\"//\");\r\n                    c = s.charAt(pos++);\r\n                    continue;\r\n                }\r\n                types.push(XPathParser.SLASH);\r\n                values.push('/');\r\n                continue;\r\n            }\r\n\r\n            if (c == '!') {\r\n                if (s.charAt(pos) == '=') {\r\n                    types.push(XPathParser.NOTEQUAL);\r\n                    values.push(\"!=\");\r\n                    pos++;\r\n                    c = s.charAt(pos++);\r\n                    continue;\r\n                }\r\n            }\r\n\r\n            if (c == '<') {\r\n                if (s.charAt(pos) == '=') {\r\n                    types.push(XPathParser.LESSTHANOREQUAL);\r\n                    values.push(\"<=\");\r\n                    pos++;\r\n                    c = s.charAt(pos++);\r\n                    continue;\r\n                }\r\n                types.push(XPathParser.LESSTHAN);\r\n                values.push('<');\r\n                c = s.charAt(pos++);\r\n                continue;\r\n            }\r\n\r\n            if (c == '>') {\r\n                if (s.charAt(pos) == '=') {\r\n                    types.push(XPathParser.GREATERTHANOREQUAL);\r\n                    values.push(\">=\");\r\n                    pos++;\r\n                    c = s.charAt(pos++);\r\n                    continue;\r\n                }\r\n                types.push(XPathParser.GREATERTHAN);\r\n                values.push('>');\r\n                c = s.charAt(pos++);\r\n                continue;\r\n            }\r\n\r\n            if (c == '_' || Utilities.isLetter(c.charCodeAt(0))) {\r\n                var name = c;\r\n                c = s.charAt(pos++);\r\n                while (Utilities.isNCNameChar(c.charCodeAt(0))) {\r\n                    name += c;\r\n                    c = s.charAt(pos++);\r\n                }\r\n                if (types.length > 0) {\r\n                    var last = types[types.length - 1];\r\n                    if (last != XPathParser.AT\r\n                        && last != XPathParser.DOUBLECOLON\r\n                        && last != XPathParser.LEFTPARENTHESIS\r\n                        && last != XPathParser.LEFTBRACKET\r\n                        && last != XPathParser.AND\r\n                        && last != XPathParser.OR\r\n                        && last != XPathParser.MOD\r\n                        && last != XPathParser.DIV\r\n                        && last != XPathParser.MULTIPLYOPERATOR\r\n                        && last != XPathParser.SLASH\r\n                        && last != XPathParser.DOUBLESLASH\r\n                        && last != XPathParser.BAR\r\n                        && last != XPathParser.PLUS\r\n                        && last != XPathParser.MINUS\r\n                        && last != XPathParser.EQUALS\r\n                        && last != XPathParser.NOTEQUAL\r\n                        && last != XPathParser.LESSTHAN\r\n                        && last != XPathParser.LESSTHANOREQUAL\r\n                        && last != XPathParser.GREATERTHAN\r\n                        && last != XPathParser.GREATERTHANOREQUAL) {\r\n                        if (name == \"and\") {\r\n                            types.push(XPathParser.AND);\r\n                            values.push(name);\r\n                            continue;\r\n                        }\r\n                        if (name == \"or\") {\r\n                            types.push(XPathParser.OR);\r\n                            values.push(name);\r\n                            continue;\r\n                        }\r\n                        if (name == \"mod\") {\r\n                            types.push(XPathParser.MOD);\r\n                            values.push(name);\r\n                            continue;\r\n                        }\r\n                        if (name == \"div\") {\r\n                            types.push(XPathParser.DIV);\r\n                            values.push(name);\r\n                            continue;\r\n                        }\r\n                    }\r\n                }\r\n                if (c == ':') {\r\n                    if (s.charAt(pos) == '*') {\r\n                        types.push(XPathParser.NCNAMECOLONASTERISK);\r\n                        values.push(name + \":*\");\r\n                        pos++;\r\n                        c = s.charAt(pos++);\r\n                        continue;\r\n                    }\r\n                    if (s.charAt(pos) == '_' || Utilities.isLetter(s.charCodeAt(pos))) {\r\n                        name += ':';\r\n                        c = s.charAt(pos++);\r\n                        while (Utilities.isNCNameChar(c.charCodeAt(0))) {\r\n                            name += c;\r\n                            c = s.charAt(pos++);\r\n                        }\r\n                        if (c == '(') {\r\n                            types.push(XPathParser.FUNCTIONNAME);\r\n                            values.push(name);\r\n                            continue;\r\n                        }\r\n                        types.push(XPathParser.QNAME);\r\n                        values.push(name);\r\n                        continue;\r\n                    }\r\n                    if (s.charAt(pos) == ':') {\r\n                        types.push(XPathParser.AXISNAME);\r\n                        values.push(name);\r\n                        continue;\r\n                    }\r\n                }\r\n                if (c == '(') {\r\n                    if (name == \"comment\" || name == \"text\" || name == \"node\") {\r\n                        types.push(XPathParser.NODETYPE);\r\n                        values.push(name);\r\n                        continue;\r\n                    }\r\n                    if (name == \"processing-instruction\") {\r\n                        if (s.charAt(pos) == ')') {\r\n                            types.push(XPathParser.NODETYPE);\r\n                        } else {\r\n                            types.push(XPathParser.PROCESSINGINSTRUCTIONWITHLITERAL);\r\n                        }\r\n                        values.push(name);\r\n                        continue;\r\n                    }\r\n                    types.push(XPathParser.FUNCTIONNAME);\r\n                    values.push(name);\r\n                    continue;\r\n                }\r\n                types.push(XPathParser.QNAME);\r\n                values.push(name);\r\n                continue;\r\n            }\r\n\r\n            throw new Error(\"Unexpected character \" + c);\r\n        }\r\n        types.push(1);\r\n        values.push(\"[EOF]\");\r\n        return [types, values];\r\n    };\r\n\r\n    XPathParser.SHIFT = 's';\r\n    XPathParser.REDUCE = 'r';\r\n    XPathParser.ACCEPT = 'a';\r\n\r\n    XPathParser.prototype.parse = function (s) {\r\n        if (!s) {\r\n            throw new Error('XPath expression unspecified.');\r\n        }\r\n        if (typeof s !== 'string'){\r\n            throw new Error('XPath expression must be a string.');\r\n        }\r\n\r\n        var types;\r\n        var values;\r\n        var res = this.tokenize(s);\r\n        if (res == undefined) {\r\n            return undefined;\r\n        }\r\n        types = res[0];\r\n        values = res[1];\r\n        var tokenPos = 0;\r\n        var state = [];\r\n        var tokenType = [];\r\n        var tokenValue = [];\r\n        var s;\r\n        var a;\r\n        var t;\r\n\r\n        state.push(0);\r\n        tokenType.push(1);\r\n        tokenValue.push(\"_S\");\r\n\r\n        a = types[tokenPos];\r\n        t = values[tokenPos++];\r\n        while (1) {\r\n            s = state[state.length - 1];\r\n            switch (XPathParser.actionTable[s].charAt(a - 1)) {\r\n                case XPathParser.SHIFT:\r\n                    tokenType.push(-a);\r\n                    tokenValue.push(t);\r\n                    state.push(XPathParser.actionTableNumber[s].charCodeAt(a - 1) - 32);\r\n                    a = types[tokenPos];\r\n                    t = values[tokenPos++];\r\n                    break;\r\n                case XPathParser.REDUCE:\r\n                    var num = XPathParser.productions[XPathParser.actionTableNumber[s].charCodeAt(a - 1) - 32][1];\r\n                    var rhs = [];\r\n                    for (var i = 0; i < num; i++) {\r\n                        tokenType.pop();\r\n                        rhs.unshift(tokenValue.pop());\r\n                        state.pop();\r\n                    }\r\n                    var s_ = state[state.length - 1];\r\n                    tokenType.push(XPathParser.productions[XPathParser.actionTableNumber[s].charCodeAt(a - 1) - 32][0]);\r\n                    if (this.reduceActions[XPathParser.actionTableNumber[s].charCodeAt(a - 1) - 32] == undefined) {\r\n                        tokenValue.push(rhs[0]);\r\n                    } else {\r\n                        tokenValue.push(this.reduceActions[XPathParser.actionTableNumber[s].charCodeAt(a - 1) - 32](rhs));\r\n                    }\r\n                    state.push(XPathParser.gotoTable[s_].charCodeAt(XPathParser.productions[XPathParser.actionTableNumber[s].charCodeAt(a - 1) - 32][0] - 2) - 33);\r\n                    break;\r\n                case XPathParser.ACCEPT:\r\n                    return new XPath(tokenValue.pop());\r\n                default:\r\n                    throw new Error(\"XPath parse error\");\r\n            }\r\n        }\r\n    };\r\n\r\n    // XPath /////////////////////////////////////////////////////////////////////\r\n\r\n    XPath.prototype = new Object();\r\n    XPath.prototype.constructor = XPath;\r\n    XPath.superclass = Object.prototype;\r\n\r\n    function XPath(e) {\r\n        this.expression = e;\r\n    }\r\n\r\n    XPath.prototype.toString = function () {\r\n        return this.expression.toString();\r\n    };\r\n\r\n    function setIfUnset(obj, prop, value) {\r\n        if (!(prop in obj)) {\r\n            obj[prop] = value;\r\n        }\r\n    }\r\n\r\n    XPath.prototype.evaluate = function (c) {\r\n        var node = c.expressionContextNode;\r\n\r\n        if (!(isNil(node) || isNodeLike(node))) {\r\n            throw new Error(\"Context node does not appear to be a valid DOM node.\");\r\n        }\r\n\r\n        c.contextNode = c.expressionContextNode;\r\n        c.contextSize = 1;\r\n        c.contextPosition = 1;\r\n\r\n        // [2017-11-25] Removed usage of .implementation.hasFeature() since it does\r\n        //              not reliably detect HTML DOMs (always returns false in xmldom and true in browsers)\r\n        if (c.isHtml) {\r\n            setIfUnset(c, 'caseInsensitive', true);\r\n            setIfUnset(c, 'allowAnyNamespaceForNoPrefix', true);\r\n        }\r\n\r\n        setIfUnset(c, 'caseInsensitive', false);\r\n\r\n        return this.expression.evaluate(c);\r\n    };\r\n\r\n    XPath.XML_NAMESPACE_URI = \"http://www.w3.org/XML/1998/namespace\";\r\n    XPath.XMLNS_NAMESPACE_URI = \"http://www.w3.org/2000/xmlns/\";\r\n\r\n    // Expression ////////////////////////////////////////////////////////////////\r\n\r\n    Expression.prototype = new Object();\r\n    Expression.prototype.constructor = Expression;\r\n    Expression.superclass = Object.prototype;\r\n\r\n    function Expression() {\r\n    }\r\n\r\n    Expression.prototype.init = function () {\r\n    };\r\n\r\n    Expression.prototype.toString = function () {\r\n        return \"<Expression>\";\r\n    };\r\n\r\n    Expression.prototype.evaluate = function (c) {\r\n        throw new Error(\"Could not evaluate expression.\");\r\n    };\r\n\r\n    // UnaryOperation ////////////////////////////////////////////////////////////\r\n\r\n    UnaryOperation.prototype = new Expression();\r\n    UnaryOperation.prototype.constructor = UnaryOperation;\r\n    UnaryOperation.superclass = Expression.prototype;\r\n\r\n    function UnaryOperation(rhs) {\r\n        if (arguments.length > 0) {\r\n            this.init(rhs);\r\n        }\r\n    }\r\n\r\n    UnaryOperation.prototype.init = function (rhs) {\r\n        this.rhs = rhs;\r\n    };\r\n\r\n    // UnaryMinusOperation ///////////////////////////////////////////////////////\r\n\r\n    UnaryMinusOperation.prototype = new UnaryOperation();\r\n    UnaryMinusOperation.prototype.constructor = UnaryMinusOperation;\r\n    UnaryMinusOperation.superclass = UnaryOperation.prototype;\r\n\r\n    function UnaryMinusOperation(rhs) {\r\n        if (arguments.length > 0) {\r\n            this.init(rhs);\r\n        }\r\n    }\r\n\r\n    UnaryMinusOperation.prototype.init = function (rhs) {\r\n        UnaryMinusOperation.superclass.init.call(this, rhs);\r\n    };\r\n\r\n    UnaryMinusOperation.prototype.evaluate = function (c) {\r\n        return this.rhs.evaluate(c).number().negate();\r\n    };\r\n\r\n    UnaryMinusOperation.prototype.toString = function () {\r\n        return \"-\" + this.rhs.toString();\r\n    };\r\n\r\n    // BinaryOperation ///////////////////////////////////////////////////////////\r\n\r\n    BinaryOperation.prototype = new Expression();\r\n    BinaryOperation.prototype.constructor = BinaryOperation;\r\n    BinaryOperation.superclass = Expression.prototype;\r\n\r\n    function BinaryOperation(lhs, rhs) {\r\n        if (arguments.length > 0) {\r\n            this.init(lhs, rhs);\r\n        }\r\n    }\r\n\r\n    BinaryOperation.prototype.init = function (lhs, rhs) {\r\n        this.lhs = lhs;\r\n        this.rhs = rhs;\r\n    };\r\n\r\n    // OrOperation ///////////////////////////////////////////////////////////////\r\n\r\n    OrOperation.prototype = new BinaryOperation();\r\n    OrOperation.prototype.constructor = OrOperation;\r\n    OrOperation.superclass = BinaryOperation.prototype;\r\n\r\n    function OrOperation(lhs, rhs) {\r\n        if (arguments.length > 0) {\r\n            this.init(lhs, rhs);\r\n        }\r\n    }\r\n\r\n    OrOperation.prototype.init = function (lhs, rhs) {\r\n        OrOperation.superclass.init.call(this, lhs, rhs);\r\n    };\r\n\r\n    OrOperation.prototype.toString = function () {\r\n        return \"(\" + this.lhs.toString() + \" or \" + this.rhs.toString() + \")\";\r\n    };\r\n\r\n    OrOperation.prototype.evaluate = function (c) {\r\n        var b = this.lhs.evaluate(c).bool();\r\n        if (b.booleanValue()) {\r\n            return b;\r\n        }\r\n        return this.rhs.evaluate(c).bool();\r\n    };\r\n\r\n    // AndOperation //////////////////////////////////////////////////////////////\r\n\r\n    AndOperation.prototype = new BinaryOperation();\r\n    AndOperation.prototype.constructor = AndOperation;\r\n    AndOperation.superclass = BinaryOperation.prototype;\r\n\r\n    function AndOperation(lhs, rhs) {\r\n        if (arguments.length > 0) {\r\n            this.init(lhs, rhs);\r\n        }\r\n    }\r\n\r\n    AndOperation.prototype.init = function (lhs, rhs) {\r\n        AndOperation.superclass.init.call(this, lhs, rhs);\r\n    };\r\n\r\n    AndOperation.prototype.toString = function () {\r\n        return \"(\" + this.lhs.toString() + \" and \" + this.rhs.toString() + \")\";\r\n    };\r\n\r\n    AndOperation.prototype.evaluate = function (c) {\r\n        var b = this.lhs.evaluate(c).bool();\r\n        if (!b.booleanValue()) {\r\n            return b;\r\n        }\r\n        return this.rhs.evaluate(c).bool();\r\n    };\r\n\r\n    // EqualsOperation ///////////////////////////////////////////////////////////\r\n\r\n    EqualsOperation.prototype = new BinaryOperation();\r\n    EqualsOperation.prototype.constructor = EqualsOperation;\r\n    EqualsOperation.superclass = BinaryOperation.prototype;\r\n\r\n    function EqualsOperation(lhs, rhs) {\r\n        if (arguments.length > 0) {\r\n            this.init(lhs, rhs);\r\n        }\r\n    }\r\n\r\n    EqualsOperation.prototype.init = function (lhs, rhs) {\r\n        EqualsOperation.superclass.init.call(this, lhs, rhs);\r\n    };\r\n\r\n    EqualsOperation.prototype.toString = function () {\r\n        return \"(\" + this.lhs.toString() + \" = \" + this.rhs.toString() + \")\";\r\n    };\r\n\r\n    EqualsOperation.prototype.evaluate = function (c) {\r\n        return this.lhs.evaluate(c).equals(this.rhs.evaluate(c));\r\n    };\r\n\r\n    // NotEqualOperation /////////////////////////////////////////////////////////\r\n\r\n    NotEqualOperation.prototype = new BinaryOperation();\r\n    NotEqualOperation.prototype.constructor = NotEqualOperation;\r\n    NotEqualOperation.superclass = BinaryOperation.prototype;\r\n\r\n    function NotEqualOperation(lhs, rhs) {\r\n        if (arguments.length > 0) {\r\n            this.init(lhs, rhs);\r\n        }\r\n    }\r\n\r\n    NotEqualOperation.prototype.init = function (lhs, rhs) {\r\n        NotEqualOperation.superclass.init.call(this, lhs, rhs);\r\n    };\r\n\r\n    NotEqualOperation.prototype.toString = function () {\r\n        return \"(\" + this.lhs.toString() + \" != \" + this.rhs.toString() + \")\";\r\n    };\r\n\r\n    NotEqualOperation.prototype.evaluate = function (c) {\r\n        return this.lhs.evaluate(c).notequal(this.rhs.evaluate(c));\r\n    };\r\n\r\n    // LessThanOperation /////////////////////////////////////////////////////////\r\n\r\n    LessThanOperation.prototype = new BinaryOperation();\r\n    LessThanOperation.prototype.constructor = LessThanOperation;\r\n    LessThanOperation.superclass = BinaryOperation.prototype;\r\n\r\n    function LessThanOperation(lhs, rhs) {\r\n        if (arguments.length > 0) {\r\n            this.init(lhs, rhs);\r\n        }\r\n    }\r\n\r\n    LessThanOperation.prototype.init = function (lhs, rhs) {\r\n        LessThanOperation.superclass.init.call(this, lhs, rhs);\r\n    };\r\n\r\n    LessThanOperation.prototype.evaluate = function (c) {\r\n        return this.lhs.evaluate(c).lessthan(this.rhs.evaluate(c));\r\n    };\r\n\r\n    LessThanOperation.prototype.toString = function () {\r\n        return \"(\" + this.lhs.toString() + \" < \" + this.rhs.toString() + \")\";\r\n    };\r\n\r\n    // GreaterThanOperation //////////////////////////////////////////////////////\r\n\r\n    GreaterThanOperation.prototype = new BinaryOperation();\r\n    GreaterThanOperation.prototype.constructor = GreaterThanOperation;\r\n    GreaterThanOperation.superclass = BinaryOperation.prototype;\r\n\r\n    function GreaterThanOperation(lhs, rhs) {\r\n        if (arguments.length > 0) {\r\n            this.init(lhs, rhs);\r\n        }\r\n    }\r\n\r\n    GreaterThanOperation.prototype.init = function (lhs, rhs) {\r\n        GreaterThanOperation.superclass.init.call(this, lhs, rhs);\r\n    };\r\n\r\n    GreaterThanOperation.prototype.evaluate = function (c) {\r\n        return this.lhs.evaluate(c).greaterthan(this.rhs.evaluate(c));\r\n    };\r\n\r\n    GreaterThanOperation.prototype.toString = function () {\r\n        return \"(\" + this.lhs.toString() + \" > \" + this.rhs.toString() + \")\";\r\n    };\r\n\r\n    // LessThanOrEqualOperation //////////////////////////////////////////////////\r\n\r\n    LessThanOrEqualOperation.prototype = new BinaryOperation();\r\n    LessThanOrEqualOperation.prototype.constructor = LessThanOrEqualOperation;\r\n    LessThanOrEqualOperation.superclass = BinaryOperation.prototype;\r\n\r\n    function LessThanOrEqualOperation(lhs, rhs) {\r\n        if (arguments.length > 0) {\r\n            this.init(lhs, rhs);\r\n        }\r\n    }\r\n\r\n    LessThanOrEqualOperation.prototype.init = function (lhs, rhs) {\r\n        LessThanOrEqualOperation.superclass.init.call(this, lhs, rhs);\r\n    };\r\n\r\n    LessThanOrEqualOperation.prototype.evaluate = function (c) {\r\n        return this.lhs.evaluate(c).lessthanorequal(this.rhs.evaluate(c));\r\n    };\r\n\r\n    LessThanOrEqualOperation.prototype.toString = function () {\r\n        return \"(\" + this.lhs.toString() + \" <= \" + this.rhs.toString() + \")\";\r\n    };\r\n\r\n    // GreaterThanOrEqualOperation ///////////////////////////////////////////////\r\n\r\n    GreaterThanOrEqualOperation.prototype = new BinaryOperation();\r\n    GreaterThanOrEqualOperation.prototype.constructor = GreaterThanOrEqualOperation;\r\n    GreaterThanOrEqualOperation.superclass = BinaryOperation.prototype;\r\n\r\n    function GreaterThanOrEqualOperation(lhs, rhs) {\r\n        if (arguments.length > 0) {\r\n            this.init(lhs, rhs);\r\n        }\r\n    }\r\n\r\n    GreaterThanOrEqualOperation.prototype.init = function (lhs, rhs) {\r\n        GreaterThanOrEqualOperation.superclass.init.call(this, lhs, rhs);\r\n    };\r\n\r\n    GreaterThanOrEqualOperation.prototype.evaluate = function (c) {\r\n        return this.lhs.evaluate(c).greaterthanorequal(this.rhs.evaluate(c));\r\n    };\r\n\r\n    GreaterThanOrEqualOperation.prototype.toString = function () {\r\n        return \"(\" + this.lhs.toString() + \" >= \" + this.rhs.toString() + \")\";\r\n    };\r\n\r\n    // PlusOperation /////////////////////////////////////////////////////////////\r\n\r\n    PlusOperation.prototype = new BinaryOperation();\r\n    PlusOperation.prototype.constructor = PlusOperation;\r\n    PlusOperation.superclass = BinaryOperation.prototype;\r\n\r\n    function PlusOperation(lhs, rhs) {\r\n        if (arguments.length > 0) {\r\n            this.init(lhs, rhs);\r\n        }\r\n    }\r\n\r\n    PlusOperation.prototype.init = function (lhs, rhs) {\r\n        PlusOperation.superclass.init.call(this, lhs, rhs);\r\n    };\r\n\r\n    PlusOperation.prototype.evaluate = function (c) {\r\n        return this.lhs.evaluate(c).number().plus(this.rhs.evaluate(c).number());\r\n    };\r\n\r\n    PlusOperation.prototype.toString = function () {\r\n        return \"(\" + this.lhs.toString() + \" + \" + this.rhs.toString() + \")\";\r\n    };\r\n\r\n    // MinusOperation ////////////////////////////////////////////////////////////\r\n\r\n    MinusOperation.prototype = new BinaryOperation();\r\n    MinusOperation.prototype.constructor = MinusOperation;\r\n    MinusOperation.superclass = BinaryOperation.prototype;\r\n\r\n    function MinusOperation(lhs, rhs) {\r\n        if (arguments.length > 0) {\r\n            this.init(lhs, rhs);\r\n        }\r\n    }\r\n\r\n    MinusOperation.prototype.init = function (lhs, rhs) {\r\n        MinusOperation.superclass.init.call(this, lhs, rhs);\r\n    };\r\n\r\n    MinusOperation.prototype.evaluate = function (c) {\r\n        return this.lhs.evaluate(c).number().minus(this.rhs.evaluate(c).number());\r\n    };\r\n\r\n    MinusOperation.prototype.toString = function () {\r\n        return \"(\" + this.lhs.toString() + \" - \" + this.rhs.toString() + \")\";\r\n    };\r\n\r\n    // MultiplyOperation /////////////////////////////////////////////////////////\r\n\r\n    MultiplyOperation.prototype = new BinaryOperation();\r\n    MultiplyOperation.prototype.constructor = MultiplyOperation;\r\n    MultiplyOperation.superclass = BinaryOperation.prototype;\r\n\r\n    function MultiplyOperation(lhs, rhs) {\r\n        if (arguments.length > 0) {\r\n            this.init(lhs, rhs);\r\n        }\r\n    }\r\n\r\n    MultiplyOperation.prototype.init = function (lhs, rhs) {\r\n        MultiplyOperation.superclass.init.call(this, lhs, rhs);\r\n    };\r\n\r\n    MultiplyOperation.prototype.evaluate = function (c) {\r\n        return this.lhs.evaluate(c).number().multiply(this.rhs.evaluate(c).number());\r\n    };\r\n\r\n    MultiplyOperation.prototype.toString = function () {\r\n        return \"(\" + this.lhs.toString() + \" * \" + this.rhs.toString() + \")\";\r\n    };\r\n\r\n    // DivOperation //////////////////////////////////////////////////////////////\r\n\r\n    DivOperation.prototype = new BinaryOperation();\r\n    DivOperation.prototype.constructor = DivOperation;\r\n    DivOperation.superclass = BinaryOperation.prototype;\r\n\r\n    function DivOperation(lhs, rhs) {\r\n        if (arguments.length > 0) {\r\n            this.init(lhs, rhs);\r\n        }\r\n    }\r\n\r\n    DivOperation.prototype.init = function (lhs, rhs) {\r\n        DivOperation.superclass.init.call(this, lhs, rhs);\r\n    };\r\n\r\n    DivOperation.prototype.evaluate = function (c) {\r\n        return this.lhs.evaluate(c).number().div(this.rhs.evaluate(c).number());\r\n    };\r\n\r\n    DivOperation.prototype.toString = function () {\r\n        return \"(\" + this.lhs.toString() + \" div \" + this.rhs.toString() + \")\";\r\n    };\r\n\r\n    // ModOperation //////////////////////////////////////////////////////////////\r\n\r\n    ModOperation.prototype = new BinaryOperation();\r\n    ModOperation.prototype.constructor = ModOperation;\r\n    ModOperation.superclass = BinaryOperation.prototype;\r\n\r\n    function ModOperation(lhs, rhs) {\r\n        if (arguments.length > 0) {\r\n            this.init(lhs, rhs);\r\n        }\r\n    }\r\n\r\n    ModOperation.prototype.init = function (lhs, rhs) {\r\n        ModOperation.superclass.init.call(this, lhs, rhs);\r\n    };\r\n\r\n    ModOperation.prototype.evaluate = function (c) {\r\n        return this.lhs.evaluate(c).number().mod(this.rhs.evaluate(c).number());\r\n    };\r\n\r\n    ModOperation.prototype.toString = function () {\r\n        return \"(\" + this.lhs.toString() + \" mod \" + this.rhs.toString() + \")\";\r\n    };\r\n\r\n    // BarOperation //////////////////////////////////////////////////////////////\r\n\r\n    BarOperation.prototype = new BinaryOperation();\r\n    BarOperation.prototype.constructor = BarOperation;\r\n    BarOperation.superclass = BinaryOperation.prototype;\r\n\r\n    function BarOperation(lhs, rhs) {\r\n        if (arguments.length > 0) {\r\n            this.init(lhs, rhs);\r\n        }\r\n    }\r\n\r\n    BarOperation.prototype.init = function (lhs, rhs) {\r\n        BarOperation.superclass.init.call(this, lhs, rhs);\r\n    };\r\n\r\n    BarOperation.prototype.evaluate = function (c) {\r\n        return this.lhs.evaluate(c).nodeset().union(this.rhs.evaluate(c).nodeset());\r\n    };\r\n\r\n    BarOperation.prototype.toString = function () {\r\n        return map(toString, [this.lhs, this.rhs]).join(' | ');\r\n    };\r\n\r\n    // PathExpr //////////////////////////////////////////////////////////////////\r\n\r\n    PathExpr.prototype = new Expression();\r\n    PathExpr.prototype.constructor = PathExpr;\r\n    PathExpr.superclass = Expression.prototype;\r\n\r\n    function PathExpr(filter, filterPreds, locpath) {\r\n        if (arguments.length > 0) {\r\n            this.init(filter, filterPreds, locpath);\r\n        }\r\n    }\r\n\r\n    PathExpr.prototype.init = function (filter, filterPreds, locpath) {\r\n        PathExpr.superclass.init.call(this);\r\n        this.filter = filter;\r\n        this.filterPredicates = filterPreds;\r\n        this.locationPath = locpath;\r\n    };\r\n\r\n    /**\r\n     * Returns the topmost node of the tree containing node\r\n     */\r\n    function findRoot(node) {\r\n        while (node && node.parentNode) {\r\n            node = node.parentNode;\r\n        }\r\n\r\n        return node;\r\n    }\r\n\r\n    var applyPredicates = function (predicates, c, nodes, reverse) {\r\n        if (predicates.length === 0) {\r\n            return nodes;\r\n        }\r\n\r\n        var ctx = c.extend({});\r\n\r\n        return reduce(\r\n            function (inNodes, pred) {\r\n                ctx.contextSize = inNodes.length;\r\n\r\n                return filter(\r\n                    function (node, i) {\r\n                        ctx.contextNode = node;\r\n                        ctx.contextPosition = i + 1;\r\n\r\n                        return PathExpr.predicateMatches(pred, ctx);\r\n                    },\r\n                    inNodes\r\n                );\r\n            },\r\n            sortNodes(nodes, reverse),\r\n            predicates\r\n        );\r\n    };\r\n\r\n    PathExpr.getRoot = function (xpc, nodes) {\r\n        var firstNode = nodes[0];\r\n\r\n        // xpc.virtualRoot could possibly provide a root even if firstNode is null,\r\n        // so using a guard here instead of throwing.\r\n        if (firstNode && firstNode.nodeType === NodeTypes.DOCUMENT_NODE) {\r\n            return firstNode;\r\n        }\r\n\r\n        if (xpc.virtualRoot) {\r\n            return xpc.virtualRoot;\r\n        }\r\n\r\n        if (!firstNode) {\r\n            throw new Error('Context node not found when determining document root.');\r\n        }\r\n\r\n        var ownerDoc = firstNode.ownerDocument;\r\n\r\n        if (ownerDoc) {\r\n            return ownerDoc;\r\n        }\r\n\r\n        // IE 5.5 doesn't have ownerDocument?\r\n        var n = firstNode;\r\n        while (n.parentNode != null) {\r\n            n = n.parentNode;\r\n        }\r\n        return n;\r\n    }\r\n\r\n    var getPrefixForNamespaceNode = function (attrNode) {\r\n        var nm = String(attrNode.name);\r\n\r\n        if (nm === \"xmlns\") {\r\n            return \"\";\r\n        }\r\n\r\n        if (nm.substring(0, 6) === \"xmlns:\") {\r\n            return nm.substring(6, nm.length);\r\n        }\r\n\r\n        return null;\r\n    };\r\n\r\n    PathExpr.applyStep = function (step, xpc, node) {\r\n        if (!node) {\r\n            throw new Error('Context node not found when evaluating XPath step: ' + step);\r\n        }\r\n\r\n        var newNodes = [];\r\n        xpc.contextNode = node;\r\n\r\n        switch (step.axis) {\r\n            case Step.ANCESTOR:\r\n                // look at all the ancestor nodes\r\n                if (xpc.contextNode === xpc.virtualRoot) {\r\n                    break;\r\n                }\r\n                var m;\r\n                if (xpc.contextNode.nodeType == NodeTypes.ATTRIBUTE_NODE) {\r\n                    m = PathExpr.getOwnerElement(xpc.contextNode);\r\n                } else {\r\n                    m = xpc.contextNode.parentNode;\r\n                }\r\n                while (m != null) {\r\n                    if (step.nodeTest.matches(m, xpc)) {\r\n                        newNodes.push(m);\r\n                    }\r\n                    if (m === xpc.virtualRoot) {\r\n                        break;\r\n                    }\r\n                    m = m.parentNode;\r\n                }\r\n                break;\r\n\r\n            case Step.ANCESTORORSELF:\r\n                // look at all the ancestor nodes and the current node\r\n                for (var m = xpc.contextNode; m != null; m = m.nodeType == NodeTypes.ATTRIBUTE_NODE ? PathExpr.getOwnerElement(m) : m.parentNode) {\r\n                    if (step.nodeTest.matches(m, xpc)) {\r\n                        newNodes.push(m);\r\n                    }\r\n                    if (m === xpc.virtualRoot) {\r\n                        break;\r\n                    }\r\n                }\r\n                break;\r\n\r\n            case Step.ATTRIBUTE:\r\n                // look at the attributes\r\n                var nnm = xpc.contextNode.attributes;\r\n                if (nnm != null) {\r\n                    for (var k = 0; k < nnm.length; k++) {\r\n                        var m = nnm.item(k);\r\n                        if (step.nodeTest.matches(m, xpc)) {\r\n                            newNodes.push(m);\r\n                        }\r\n                    }\r\n                }\r\n                break;\r\n\r\n            case Step.CHILD:\r\n                // look at all child elements\r\n                for (var m = xpc.contextNode.firstChild; m != null; m = m.nextSibling) {\r\n                    if (step.nodeTest.matches(m, xpc)) {\r\n                        newNodes.push(m);\r\n                    }\r\n                }\r\n                break;\r\n\r\n            case Step.DESCENDANT:\r\n                // look at all descendant nodes\r\n                var st = [xpc.contextNode.firstChild];\r\n                while (st.length > 0) {\r\n                    for (var m = st.pop(); m != null;) {\r\n                        if (step.nodeTest.matches(m, xpc)) {\r\n                            newNodes.push(m);\r\n                        }\r\n                        if (m.firstChild != null) {\r\n                            st.push(m.nextSibling);\r\n                            m = m.firstChild;\r\n                        } else {\r\n                            m = m.nextSibling;\r\n                        }\r\n                    }\r\n                }\r\n                break;\r\n\r\n            case Step.DESCENDANTORSELF:\r\n                // look at self\r\n                if (step.nodeTest.matches(xpc.contextNode, xpc)) {\r\n                    newNodes.push(xpc.contextNode);\r\n                }\r\n                // look at all descendant nodes\r\n                var st = [xpc.contextNode.firstChild];\r\n                while (st.length > 0) {\r\n                    for (var m = st.pop(); m != null;) {\r\n                        if (step.nodeTest.matches(m, xpc)) {\r\n                            newNodes.push(m);\r\n                        }\r\n                        if (m.firstChild != null) {\r\n                            st.push(m.nextSibling);\r\n                            m = m.firstChild;\r\n                        } else {\r\n                            m = m.nextSibling;\r\n                        }\r\n                    }\r\n                }\r\n                break;\r\n\r\n            case Step.FOLLOWING:\r\n                if (xpc.contextNode === xpc.virtualRoot) {\r\n                    break;\r\n                }\r\n                var st = [];\r\n                if (xpc.contextNode.firstChild != null) {\r\n                    st.unshift(xpc.contextNode.firstChild);\r\n                } else {\r\n                    st.unshift(xpc.contextNode.nextSibling);\r\n                }\r\n                for (var m = xpc.contextNode.parentNode; m != null && m.nodeType != NodeTypes.DOCUMENT_NODE && m !== xpc.virtualRoot; m = m.parentNode) {\r\n                    st.unshift(m.nextSibling);\r\n                }\r\n                do {\r\n                    for (var m = st.pop(); m != null;) {\r\n                        if (step.nodeTest.matches(m, xpc)) {\r\n                            newNodes.push(m);\r\n                        }\r\n                        if (m.firstChild != null) {\r\n                            st.push(m.nextSibling);\r\n                            m = m.firstChild;\r\n                        } else {\r\n                            m = m.nextSibling;\r\n                        }\r\n                    }\r\n                } while (st.length > 0);\r\n                break;\r\n\r\n            case Step.FOLLOWINGSIBLING:\r\n                if (xpc.contextNode === xpc.virtualRoot) {\r\n                    break;\r\n                }\r\n                for (var m = xpc.contextNode.nextSibling; m != null; m = m.nextSibling) {\r\n                    if (step.nodeTest.matches(m, xpc)) {\r\n                        newNodes.push(m);\r\n                    }\r\n                }\r\n                break;\r\n\r\n            case Step.NAMESPACE:\r\n                var nodes = {};\r\n\r\n                if (xpc.contextNode.nodeType == NodeTypes.ELEMENT_NODE) {\r\n                    // BUG: This only collects the namespaces on the current node, but seemingly\r\n                    //      it should collect all those in scope\r\n                    nodes[\"xml\"] = new XPathNamespace(\"xml\", null, XPath.XML_NAMESPACE_URI, xpc.contextNode);\r\n\r\n                    for (var m = xpc.contextNode; m != null && m.nodeType == NodeTypes.ELEMENT_NODE; m = m.parentNode) {\r\n                        for (var k = 0; k < m.attributes.length; k++) {\r\n                            var attr = m.attributes.item(k);\r\n\r\n                            var pre = getPrefixForNamespaceNode(attr);\r\n\r\n                            if (pre != null && nodes[pre] == undefined) {\r\n                                nodes[pre] = new XPathNamespace(pre, attr, attr.value, xpc.contextNode);\r\n                            }\r\n                        }\r\n                    }\r\n\r\n                    for (var pre in nodes) {\r\n                        var node = nodes[pre];\r\n\r\n                        if (step.nodeTest.matches(node, xpc)) {\r\n                            newNodes.push(node);\r\n                        }\r\n                    }\r\n                }\r\n                break;\r\n\r\n            case Step.PARENT:\r\n                m = null;\r\n                if (xpc.contextNode !== xpc.virtualRoot) {\r\n                    if (xpc.contextNode.nodeType == NodeTypes.ATTRIBUTE_NODE) {\r\n                        m = PathExpr.getOwnerElement(xpc.contextNode);\r\n                    } else {\r\n                        m = xpc.contextNode.parentNode;\r\n                    }\r\n                }\r\n                if (m != null && step.nodeTest.matches(m, xpc)) {\r\n                    newNodes.push(m);\r\n                }\r\n                break;\r\n\r\n            case Step.PRECEDING:\r\n                var st;\r\n                if (xpc.virtualRoot != null) {\r\n                    st = [xpc.virtualRoot];\r\n                } else {\r\n                    // cannot rely on .ownerDocument because the node may be in a document fragment\r\n                    st = [findRoot(xpc.contextNode)];\r\n                }\r\n                outer: while (st.length > 0) {\r\n                    for (var m = st.pop(); m != null;) {\r\n                        if (m == xpc.contextNode) {\r\n                            break outer;\r\n                        }\r\n                        if (step.nodeTest.matches(m, xpc)) {\r\n                            newNodes.unshift(m);\r\n                        }\r\n                        if (m.firstChild != null) {\r\n                            st.push(m.nextSibling);\r\n                            m = m.firstChild;\r\n                        } else {\r\n                            m = m.nextSibling;\r\n                        }\r\n                    }\r\n                }\r\n                break;\r\n\r\n            case Step.PRECEDINGSIBLING:\r\n                if (xpc.contextNode === xpc.virtualRoot) {\r\n                    break;\r\n                }\r\n                for (var m = xpc.contextNode.previousSibling; m != null; m = m.previousSibling) {\r\n                    if (step.nodeTest.matches(m, xpc)) {\r\n                        newNodes.push(m);\r\n                    }\r\n                }\r\n                break;\r\n\r\n            case Step.SELF:\r\n                if (step.nodeTest.matches(xpc.contextNode, xpc)) {\r\n                    newNodes.push(xpc.contextNode);\r\n                }\r\n                break;\r\n\r\n            default:\r\n        }\r\n\r\n        return newNodes;\r\n    };\r\n\r\n    function applyStepWithPredicates(step, xpc, node) {\r\n        return applyPredicates(\r\n            step.predicates,\r\n            xpc,\r\n            PathExpr.applyStep(step, xpc, node),\r\n            includes(REVERSE_AXES, step.axis)\r\n        );\r\n    }\r\n\r\n    function applyStepToNodes(context, nodes, step) {\r\n        return flatten(\r\n            map(\r\n                applyStepWithPredicates.bind(null, step, context),\r\n                nodes\r\n            )\r\n        );\r\n    }\r\n\r\n    PathExpr.applySteps = function (steps, xpc, nodes) {\r\n        return reduce(\r\n            applyStepToNodes.bind(null, xpc),\r\n            nodes,\r\n            steps\r\n        );\r\n    }\r\n\r\n    PathExpr.prototype.applyFilter = function (c, xpc) {\r\n        if (!this.filter) {\r\n            return { nodes: [c.contextNode] };\r\n        }\r\n\r\n        var ns = this.filter.evaluate(c);\r\n\r\n        if (!Utilities.instance_of(ns, XNodeSet)) {\r\n            if (this.filterPredicates != null && this.filterPredicates.length > 0 || this.locationPath != null) {\r\n                throw new Error(\"Path expression filter must evaluate to a nodeset if predicates or location path are used\");\r\n            }\r\n\r\n            return { nonNodes: ns };\r\n        }\r\n\r\n        return {\r\n            nodes: applyPredicates(\r\n                this.filterPredicates || [],\r\n                xpc,\r\n                ns.toUnsortedArray(),\r\n                false // reverse\r\n            )\r\n        };\r\n    };\r\n\r\n    PathExpr.applyLocationPath = function (locationPath, xpc, nodes) {\r\n        if (!locationPath) {\r\n            return nodes;\r\n        }\r\n\r\n        var startNodes = locationPath.absolute ? [PathExpr.getRoot(xpc, nodes)] : nodes;\r\n\r\n        return PathExpr.applySteps(locationPath.steps, xpc, startNodes);\r\n    };\r\n\r\n    PathExpr.prototype.evaluate = function (c) {\r\n        var xpc = assign(new XPathContext(), c);\r\n\r\n        var filterResult = this.applyFilter(c, xpc);\r\n\r\n        if ('nonNodes' in filterResult) {\r\n            return filterResult.nonNodes;\r\n        }\r\n\r\n        var ns = new XNodeSet();\r\n        ns.addArray(PathExpr.applyLocationPath(this.locationPath, xpc, filterResult.nodes));\r\n        return ns;\r\n    };\r\n\r\n    PathExpr.predicateMatches = function (pred, c) {\r\n        var res = pred.evaluate(c);\r\n\r\n        return Utilities.instance_of(res, XNumber)\r\n            ? c.contextPosition === res.numberValue()\r\n            : res.booleanValue();\r\n    };\r\n\r\n    PathExpr.predicateString = function (predicate) {\r\n        return wrap('[', ']', predicate.toString());\r\n    }\r\n\r\n    PathExpr.predicatesString = function (predicates) {\r\n        return join(\r\n            '',\r\n            map(PathExpr.predicateString, predicates)\r\n        );\r\n    }\r\n\r\n    PathExpr.prototype.toString = function () {\r\n        if (this.filter != undefined) {\r\n            var filterStr = toString(this.filter);\r\n\r\n            if (Utilities.instance_of(this.filter, XString)) {\r\n                return wrap(\"'\", \"'\", filterStr);\r\n            }\r\n            if (this.filterPredicates != undefined && this.filterPredicates.length) {\r\n                return wrap('(', ')', filterStr) +\r\n                    PathExpr.predicatesString(this.filterPredicates);\r\n            }\r\n            if (this.locationPath != undefined) {\r\n                return filterStr +\r\n                    (this.locationPath.absolute ? '' : '/') +\r\n                    toString(this.locationPath);\r\n            }\r\n\r\n            return filterStr;\r\n        }\r\n\r\n        return toString(this.locationPath);\r\n    };\r\n\r\n    PathExpr.getOwnerElement = function (n) {\r\n        // DOM 2 has ownerElement\r\n        if (n.ownerElement) {\r\n            return n.ownerElement;\r\n        }\r\n        // DOM 1 Internet Explorer can use selectSingleNode (ironically)\r\n        try {\r\n            if (n.selectSingleNode) {\r\n                return n.selectSingleNode(\"..\");\r\n            }\r\n        } catch (e) {\r\n        }\r\n        // Other DOM 1 implementations must use this egregious search\r\n        var doc = n.nodeType == NodeTypes.DOCUMENT_NODE\r\n            ? n\r\n            : n.ownerDocument;\r\n        var elts = doc.getElementsByTagName(\"*\");\r\n        for (var i = 0; i < elts.length; i++) {\r\n            var elt = elts.item(i);\r\n            var nnm = elt.attributes;\r\n            for (var j = 0; j < nnm.length; j++) {\r\n                var an = nnm.item(j);\r\n                if (an === n) {\r\n                    return elt;\r\n                }\r\n            }\r\n        }\r\n        return null;\r\n    };\r\n\r\n    // LocationPath //////////////////////////////////////////////////////////////\r\n\r\n    LocationPath.prototype = new Object();\r\n    LocationPath.prototype.constructor = LocationPath;\r\n    LocationPath.superclass = Object.prototype;\r\n\r\n    function LocationPath(abs, steps) {\r\n        if (arguments.length > 0) {\r\n            this.init(abs, steps);\r\n        }\r\n    }\r\n\r\n    LocationPath.prototype.init = function (abs, steps) {\r\n        this.absolute = abs;\r\n        this.steps = steps;\r\n    };\r\n\r\n    LocationPath.prototype.toString = function () {\r\n        return (\r\n            (this.absolute ? '/' : '') +\r\n            map(toString, this.steps).join('/')\r\n        );\r\n    };\r\n\r\n    // Step //////////////////////////////////////////////////////////////////////\r\n\r\n    Step.prototype = new Object();\r\n    Step.prototype.constructor = Step;\r\n    Step.superclass = Object.prototype;\r\n\r\n    function Step(axis, nodetest, preds) {\r\n        if (arguments.length > 0) {\r\n            this.init(axis, nodetest, preds);\r\n        }\r\n    }\r\n\r\n    Step.prototype.init = function (axis, nodetest, preds) {\r\n        this.axis = axis;\r\n        this.nodeTest = nodetest;\r\n        this.predicates = preds;\r\n    };\r\n\r\n    Step.prototype.toString = function () {\r\n        return Step.STEPNAMES[this.axis] +\r\n            \"::\" +\r\n            this.nodeTest.toString() +\r\n            PathExpr.predicatesString(this.predicates);\r\n    };\r\n\r\n\r\n    Step.ANCESTOR = 0;\r\n    Step.ANCESTORORSELF = 1;\r\n    Step.ATTRIBUTE = 2;\r\n    Step.CHILD = 3;\r\n    Step.DESCENDANT = 4;\r\n    Step.DESCENDANTORSELF = 5;\r\n    Step.FOLLOWING = 6;\r\n    Step.FOLLOWINGSIBLING = 7;\r\n    Step.NAMESPACE = 8;\r\n    Step.PARENT = 9;\r\n    Step.PRECEDING = 10;\r\n    Step.PRECEDINGSIBLING = 11;\r\n    Step.SELF = 12;\r\n\r\n    Step.STEPNAMES = reduce(function (acc, x) { return acc[x[0]] = x[1], acc; }, {}, [\r\n        [Step.ANCESTOR, 'ancestor'],\r\n        [Step.ANCESTORORSELF, 'ancestor-or-self'],\r\n        [Step.ATTRIBUTE, 'attribute'],\r\n        [Step.CHILD, 'child'],\r\n        [Step.DESCENDANT, 'descendant'],\r\n        [Step.DESCENDANTORSELF, 'descendant-or-self'],\r\n        [Step.FOLLOWING, 'following'],\r\n        [Step.FOLLOWINGSIBLING, 'following-sibling'],\r\n        [Step.NAMESPACE, 'namespace'],\r\n        [Step.PARENT, 'parent'],\r\n        [Step.PRECEDING, 'preceding'],\r\n        [Step.PRECEDINGSIBLING, 'preceding-sibling'],\r\n        [Step.SELF, 'self']\r\n    ]);\r\n\r\n    var REVERSE_AXES = [\r\n        Step.ANCESTOR,\r\n        Step.ANCESTORORSELF,\r\n        Step.PARENT,\r\n        Step.PRECEDING,\r\n        Step.PRECEDINGSIBLING\r\n    ];\r\n\r\n    // NodeTest //////////////////////////////////////////////////////////////////\r\n\r\n    NodeTest.prototype = new Object();\r\n    NodeTest.prototype.constructor = NodeTest;\r\n    NodeTest.superclass = Object.prototype;\r\n\r\n    function NodeTest(type, value) {\r\n        if (arguments.length > 0) {\r\n            this.init(type, value);\r\n        }\r\n    }\r\n\r\n    NodeTest.prototype.init = function (type, value) {\r\n        this.type = type;\r\n        this.value = value;\r\n    };\r\n\r\n    NodeTest.prototype.toString = function () {\r\n        return \"<unknown nodetest type>\";\r\n    };\r\n\r\n    NodeTest.prototype.matches = function (n, xpc) {\r\n        console.warn('unknown node test type');\r\n    };\r\n\r\n    NodeTest.NAMETESTANY = 0;\r\n    NodeTest.NAMETESTPREFIXANY = 1;\r\n    NodeTest.NAMETESTQNAME = 2;\r\n    NodeTest.COMMENT = 3;\r\n    NodeTest.TEXT = 4;\r\n    NodeTest.PI = 5;\r\n    NodeTest.NODE = 6;\r\n\r\n    NodeTest.isNodeType = function (types) {\r\n        return function (node) {\r\n            return includes(types, node.nodeType);\r\n        };\r\n    };\r\n\r\n    NodeTest.makeNodeTestType = function (type, members, ctor) {\r\n        var newType = ctor || function () { };\r\n\r\n        newType.prototype = new NodeTest(type);\r\n        newType.prototype.constructor = newType;\r\n\r\n        assign(newType.prototype, members);\r\n\r\n        return newType;\r\n    };\r\n    // create invariant node test for certain node types\r\n    NodeTest.makeNodeTypeTest = function (type, nodeTypes, stringVal) {\r\n        return new (NodeTest.makeNodeTestType(type, {\r\n            matches: NodeTest.isNodeType(nodeTypes),\r\n            toString: always(stringVal)\r\n        }))();\r\n    };\r\n\r\n    NodeTest.hasPrefix = function (node) {\r\n        return node.prefix || (node.nodeName || node.tagName).indexOf(':') !== -1;\r\n    };\r\n\r\n    NodeTest.isElementOrAttribute = NodeTest.isNodeType([1, 2]);\r\n    NodeTest.nameSpaceMatches = function (prefix, xpc, n) {\r\n        var nNamespace = (n.namespaceURI || '');\r\n\r\n        if (!prefix) {\r\n            return !nNamespace || (xpc.allowAnyNamespaceForNoPrefix && !NodeTest.hasPrefix(n));\r\n        }\r\n\r\n        var ns = xpc.namespaceResolver.getNamespace(prefix, xpc.expressionContextNode);\r\n\r\n        if (ns == null) {\r\n            throw new Error(\"Cannot resolve QName \" + prefix);\r\n        }\r\n\r\n        return ns === nNamespace;\r\n    };\r\n    NodeTest.localNameMatches = function (localName, xpc, n) {\r\n        var nLocalName = (n.localName || n.nodeName);\r\n\r\n        return xpc.caseInsensitive\r\n            ? localName.toLowerCase() === nLocalName.toLowerCase()\r\n            : localName === nLocalName;\r\n    };\r\n\r\n    NodeTest.NameTestPrefixAny = NodeTest.makeNodeTestType(\r\n        NodeTest.NAMETESTPREFIXANY,\r\n        {\r\n            matches: function (n, xpc) {\r\n                return NodeTest.isElementOrAttribute(n) &&\r\n                    NodeTest.nameSpaceMatches(this.prefix, xpc, n);\r\n            },\r\n            toString: function () {\r\n                return this.prefix + \":*\";\r\n            }\r\n        },\r\n        function NameTestPrefixAny(prefix) { this.prefix = prefix; }\r\n    );\r\n\r\n    NodeTest.NameTestQName = NodeTest.makeNodeTestType(\r\n        NodeTest.NAMETESTQNAME,\r\n        {\r\n            matches: function (n, xpc) {\r\n                return NodeTest.isNodeType(\r\n                    [\r\n                        NodeTypes.ELEMENT_NODE,\r\n                        NodeTypes.ATTRIBUTE_NODE,\r\n                        NodeTypes.NAMESPACE_NODE,\r\n                    ]\r\n                )(n) &&\r\n                    NodeTest.nameSpaceMatches(this.prefix, xpc, n) &&\r\n                    NodeTest.localNameMatches(this.localName, xpc, n);\r\n            },\r\n            toString: function () {\r\n                return this.name;\r\n            }\r\n        },\r\n        function NameTestQName(name) {\r\n            var nameParts = name.split(':');\r\n\r\n            this.name = name;\r\n            this.prefix = nameParts.length > 1 ? nameParts[0] : null;\r\n            this.localName = nameParts[nameParts.length > 1 ? 1 : 0];\r\n        }\r\n    );\r\n\r\n    NodeTest.PITest = NodeTest.makeNodeTestType(NodeTest.PI, {\r\n        matches: function (n, xpc) {\r\n            return NodeTest.isNodeType(\r\n                [NodeTypes.PROCESSING_INSTRUCTION_NODE]\r\n            )(n) &&\r\n                (n.target || n.nodeName) === this.name;\r\n        },\r\n        toString: function () {\r\n            return wrap('processing-instruction(\"', '\")', this.name);\r\n        }\r\n    }, function (name) { this.name = name; })\r\n\r\n    // singletons\r\n\r\n    // elements, attributes, namespaces\r\n    NodeTest.nameTestAny = NodeTest.makeNodeTypeTest(\r\n        NodeTest.NAMETESTANY,\r\n        [\r\n            NodeTypes.ELEMENT_NODE,\r\n            NodeTypes.ATTRIBUTE_NODE,\r\n            NodeTypes.NAMESPACE_NODE,\r\n        ],\r\n        '*'\r\n    );\r\n    // text, cdata\r\n    NodeTest.textTest = NodeTest.makeNodeTypeTest(\r\n        NodeTest.TEXT,\r\n        [\r\n            NodeTypes.TEXT_NODE,\r\n            NodeTypes.CDATA_SECTION_NODE,\r\n        ],\r\n        'text()'\r\n    );\r\n    NodeTest.commentTest = NodeTest.makeNodeTypeTest(\r\n        NodeTest.COMMENT,\r\n        [NodeTypes.COMMENT_NODE],\r\n        'comment()'\r\n    );\r\n    // elements, attributes, text, cdata, PIs, comments, document nodes\r\n    NodeTest.nodeTest = NodeTest.makeNodeTypeTest(\r\n        NodeTest.NODE,\r\n        [\r\n            NodeTypes.ELEMENT_NODE,\r\n            NodeTypes.ATTRIBUTE_NODE,\r\n            NodeTypes.TEXT_NODE,\r\n            NodeTypes.CDATA_SECTION_NODE,\r\n            NodeTypes.PROCESSING_INSTRUCTION_NODE,\r\n            NodeTypes.COMMENT_NODE,\r\n            NodeTypes.DOCUMENT_NODE,\r\n        ],\r\n        'node()'\r\n    );\r\n    NodeTest.anyPiTest = NodeTest.makeNodeTypeTest(\r\n        NodeTest.PI,\r\n        [NodeTypes.PROCESSING_INSTRUCTION_NODE],\r\n        'processing-instruction()'\r\n    );\r\n\r\n    // VariableReference /////////////////////////////////////////////////////////\r\n\r\n    VariableReference.prototype = new Expression();\r\n    VariableReference.prototype.constructor = VariableReference;\r\n    VariableReference.superclass = Expression.prototype;\r\n\r\n    function VariableReference(v) {\r\n        if (arguments.length > 0) {\r\n            this.init(v);\r\n        }\r\n    }\r\n\r\n    VariableReference.prototype.init = function (v) {\r\n        this.variable = v;\r\n    };\r\n\r\n    VariableReference.prototype.toString = function () {\r\n        return \"$\" + this.variable;\r\n    };\r\n\r\n    VariableReference.prototype.evaluate = function (c) {\r\n        var parts = Utilities.resolveQName(this.variable, c.namespaceResolver, c.contextNode, false);\r\n\r\n        if (parts[0] == null) {\r\n            throw new Error(\"Cannot resolve QName \" + fn);\r\n        }\r\n        var result = c.variableResolver.getVariable(parts[1], parts[0]);\r\n        if (!result) {\r\n            throw XPathException.fromMessage(\"Undeclared variable: \" + this.toString());\r\n        }\r\n        return result;\r\n    };\r\n\r\n    // FunctionCall //////////////////////////////////////////////////////////////\r\n\r\n    FunctionCall.prototype = new Expression();\r\n    FunctionCall.prototype.constructor = FunctionCall;\r\n    FunctionCall.superclass = Expression.prototype;\r\n\r\n    function FunctionCall(fn, args) {\r\n        if (arguments.length > 0) {\r\n            this.init(fn, args);\r\n        }\r\n    }\r\n\r\n    FunctionCall.prototype.init = function (fn, args) {\r\n        this.functionName = fn;\r\n        this.arguments = args;\r\n    };\r\n\r\n    FunctionCall.prototype.toString = function () {\r\n        var s = this.functionName + \"(\";\r\n        for (var i = 0; i < this.arguments.length; i++) {\r\n            if (i > 0) {\r\n                s += \", \";\r\n            }\r\n            s += this.arguments[i].toString();\r\n        }\r\n        return s + \")\";\r\n    };\r\n\r\n    FunctionCall.prototype.evaluate = function (c) {\r\n        var f = FunctionResolver.getFunctionFromContext(this.functionName, c);\r\n\r\n        if (!f) {\r\n            throw new Error(\"Unknown function \" + this.functionName);\r\n        }\r\n\r\n        var a = [c].concat(this.arguments);\r\n        return f.apply(c.functionResolver.thisArg, a);\r\n    };\r\n\r\n    // Operators /////////////////////////////////////////////////////////////////\r\n\r\n    var Operators = new Object();\r\n\r\n    Operators.equals = function (l, r) {\r\n        return l.equals(r);\r\n    };\r\n\r\n    Operators.notequal = function (l, r) {\r\n        return l.notequal(r);\r\n    };\r\n\r\n    Operators.lessthan = function (l, r) {\r\n        return l.lessthan(r);\r\n    };\r\n\r\n    Operators.greaterthan = function (l, r) {\r\n        return l.greaterthan(r);\r\n    };\r\n\r\n    Operators.lessthanorequal = function (l, r) {\r\n        return l.lessthanorequal(r);\r\n    };\r\n\r\n    Operators.greaterthanorequal = function (l, r) {\r\n        return l.greaterthanorequal(r);\r\n    };\r\n\r\n    // XString ///////////////////////////////////////////////////////////////////\r\n\r\n    XString.prototype = new Expression();\r\n    XString.prototype.constructor = XString;\r\n    XString.superclass = Expression.prototype;\r\n\r\n    function XString(s) {\r\n        if (arguments.length > 0) {\r\n            this.init(s);\r\n        }\r\n    }\r\n\r\n    XString.prototype.init = function (s) {\r\n        this.str = String(s);\r\n    };\r\n\r\n    XString.prototype.toString = function () {\r\n        return this.str;\r\n    };\r\n\r\n    XString.prototype.evaluate = function (c) {\r\n        return this;\r\n    };\r\n\r\n    XString.prototype.string = function () {\r\n        return this;\r\n    };\r\n\r\n    XString.prototype.number = function () {\r\n        return new XNumber(this.str);\r\n    };\r\n\r\n    XString.prototype.bool = function () {\r\n        return new XBoolean(this.str);\r\n    };\r\n\r\n    XString.prototype.nodeset = function () {\r\n        throw new Error(\"Cannot convert string to nodeset\");\r\n    };\r\n\r\n    XString.prototype.stringValue = function () {\r\n        return this.str;\r\n    };\r\n\r\n    XString.prototype.numberValue = function () {\r\n        return this.number().numberValue();\r\n    };\r\n\r\n    XString.prototype.booleanValue = function () {\r\n        return this.bool().booleanValue();\r\n    };\r\n\r\n    XString.prototype.equals = function (r) {\r\n        if (Utilities.instance_of(r, XBoolean)) {\r\n            return this.bool().equals(r);\r\n        }\r\n        if (Utilities.instance_of(r, XNumber)) {\r\n            return this.number().equals(r);\r\n        }\r\n        if (Utilities.instance_of(r, XNodeSet)) {\r\n            return r.compareWithString(this, Operators.equals);\r\n        }\r\n        return new XBoolean(this.str == r.str);\r\n    };\r\n\r\n    XString.prototype.notequal = function (r) {\r\n        if (Utilities.instance_of(r, XBoolean)) {\r\n            return this.bool().notequal(r);\r\n        }\r\n        if (Utilities.instance_of(r, XNumber)) {\r\n            return this.number().notequal(r);\r\n        }\r\n        if (Utilities.instance_of(r, XNodeSet)) {\r\n            return r.compareWithString(this, Operators.notequal);\r\n        }\r\n        return new XBoolean(this.str != r.str);\r\n    };\r\n\r\n    XString.prototype.lessthan = function (r) {\r\n        return this.number().lessthan(r);\r\n    };\r\n\r\n    XString.prototype.greaterthan = function (r) {\r\n        return this.number().greaterthan(r);\r\n    };\r\n\r\n    XString.prototype.lessthanorequal = function (r) {\r\n        return this.number().lessthanorequal(r);\r\n    };\r\n\r\n    XString.prototype.greaterthanorequal = function (r) {\r\n        return this.number().greaterthanorequal(r);\r\n    };\r\n\r\n    // XNumber ///////////////////////////////////////////////////////////////////\r\n\r\n    XNumber.prototype = new Expression();\r\n    XNumber.prototype.constructor = XNumber;\r\n    XNumber.superclass = Expression.prototype;\r\n\r\n    function XNumber(n) {\r\n        if (arguments.length > 0) {\r\n            this.init(n);\r\n        }\r\n    }\r\n\r\n    XNumber.prototype.init = function (n) {\r\n        this.num = typeof n === \"string\" ? this.parse(n) : Number(n);\r\n    };\r\n\r\n    XNumber.prototype.numberFormat = /^\\s*-?[0-9]*\\.?[0-9]+\\s*$/;\r\n\r\n    XNumber.prototype.parse = function (s) {\r\n        // XPath representation of numbers is more restrictive than what Number() or parseFloat() allow\r\n        return this.numberFormat.test(s) ? parseFloat(s) : Number.NaN;\r\n    };\r\n\r\n    function padSmallNumber(numberStr) {\r\n        var parts = numberStr.split('e-');\r\n        var base = parts[0].replace('.', '');\r\n        var exponent = Number(parts[1]);\r\n\r\n        for (var i = 0; i < exponent - 1; i += 1) {\r\n            base = '0' + base;\r\n        }\r\n\r\n        return '0.' + base;\r\n    }\r\n\r\n    function padLargeNumber(numberStr) {\r\n        var parts = numberStr.split('e');\r\n        var base = parts[0].replace('.', '');\r\n        var exponent = Number(parts[1]);\r\n        var zerosToAppend = exponent + 1 - base.length;\r\n\r\n        for (var i = 0; i < zerosToAppend; i += 1) {\r\n            base += '0';\r\n        }\r\n\r\n        return base;\r\n    }\r\n\r\n    XNumber.prototype.toString = function () {\r\n        var strValue = this.num.toString();\r\n\r\n        if (strValue.indexOf('e-') !== -1) {\r\n            return padSmallNumber(strValue);\r\n        }\r\n\r\n        if (strValue.indexOf('e') !== -1) {\r\n            return padLargeNumber(strValue);\r\n        }\r\n\r\n        return strValue;\r\n    };\r\n\r\n    XNumber.prototype.evaluate = function (c) {\r\n        return this;\r\n    };\r\n\r\n    XNumber.prototype.string = function () {\r\n\r\n\r\n        return new XString(this.toString());\r\n    };\r\n\r\n    XNumber.prototype.number = function () {\r\n        return this;\r\n    };\r\n\r\n    XNumber.prototype.bool = function () {\r\n        return new XBoolean(this.num);\r\n    };\r\n\r\n    XNumber.prototype.nodeset = function () {\r\n        throw new Error(\"Cannot convert number to nodeset\");\r\n    };\r\n\r\n    XNumber.prototype.stringValue = function () {\r\n        return this.string().stringValue();\r\n    };\r\n\r\n    XNumber.prototype.numberValue = function () {\r\n        return this.num;\r\n    };\r\n\r\n    XNumber.prototype.booleanValue = function () {\r\n        return this.bool().booleanValue();\r\n    };\r\n\r\n    XNumber.prototype.negate = function () {\r\n        return new XNumber(-this.num);\r\n    };\r\n\r\n    XNumber.prototype.equals = function (r) {\r\n        if (Utilities.instance_of(r, XBoolean)) {\r\n            return this.bool().equals(r);\r\n        }\r\n        if (Utilities.instance_of(r, XString)) {\r\n            return this.equals(r.number());\r\n        }\r\n        if (Utilities.instance_of(r, XNodeSet)) {\r\n            return r.compareWithNumber(this, Operators.equals);\r\n        }\r\n        return new XBoolean(this.num == r.num);\r\n    };\r\n\r\n    XNumber.prototype.notequal = function (r) {\r\n        if (Utilities.instance_of(r, XBoolean)) {\r\n            return this.bool().notequal(r);\r\n        }\r\n        if (Utilities.instance_of(r, XString)) {\r\n            return this.notequal(r.number());\r\n        }\r\n        if (Utilities.instance_of(r, XNodeSet)) {\r\n            return r.compareWithNumber(this, Operators.notequal);\r\n        }\r\n        return new XBoolean(this.num != r.num);\r\n    };\r\n\r\n    XNumber.prototype.lessthan = function (r) {\r\n        if (Utilities.instance_of(r, XNodeSet)) {\r\n            return r.compareWithNumber(this, Operators.greaterthan);\r\n        }\r\n        if (Utilities.instance_of(r, XBoolean) || Utilities.instance_of(r, XString)) {\r\n            return this.lessthan(r.number());\r\n        }\r\n        return new XBoolean(this.num < r.num);\r\n    };\r\n\r\n    XNumber.prototype.greaterthan = function (r) {\r\n        if (Utilities.instance_of(r, XNodeSet)) {\r\n            return r.compareWithNumber(this, Operators.lessthan);\r\n        }\r\n        if (Utilities.instance_of(r, XBoolean) || Utilities.instance_of(r, XString)) {\r\n            return this.greaterthan(r.number());\r\n        }\r\n        return new XBoolean(this.num > r.num);\r\n    };\r\n\r\n    XNumber.prototype.lessthanorequal = function (r) {\r\n        if (Utilities.instance_of(r, XNodeSet)) {\r\n            return r.compareWithNumber(this, Operators.greaterthanorequal);\r\n        }\r\n        if (Utilities.instance_of(r, XBoolean) || Utilities.instance_of(r, XString)) {\r\n            return this.lessthanorequal(r.number());\r\n        }\r\n        return new XBoolean(this.num <= r.num);\r\n    };\r\n\r\n    XNumber.prototype.greaterthanorequal = function (r) {\r\n        if (Utilities.instance_of(r, XNodeSet)) {\r\n            return r.compareWithNumber(this, Operators.lessthanorequal);\r\n        }\r\n        if (Utilities.instance_of(r, XBoolean) || Utilities.instance_of(r, XString)) {\r\n            return this.greaterthanorequal(r.number());\r\n        }\r\n        return new XBoolean(this.num >= r.num);\r\n    };\r\n\r\n    XNumber.prototype.plus = function (r) {\r\n        return new XNumber(this.num + r.num);\r\n    };\r\n\r\n    XNumber.prototype.minus = function (r) {\r\n        return new XNumber(this.num - r.num);\r\n    };\r\n\r\n    XNumber.prototype.multiply = function (r) {\r\n        return new XNumber(this.num * r.num);\r\n    };\r\n\r\n    XNumber.prototype.div = function (r) {\r\n        return new XNumber(this.num / r.num);\r\n    };\r\n\r\n    XNumber.prototype.mod = function (r) {\r\n        return new XNumber(this.num % r.num);\r\n    };\r\n\r\n    // XBoolean //////////////////////////////////////////////////////////////////\r\n\r\n    XBoolean.prototype = new Expression();\r\n    XBoolean.prototype.constructor = XBoolean;\r\n    XBoolean.superclass = Expression.prototype;\r\n\r\n    function XBoolean(b) {\r\n        if (arguments.length > 0) {\r\n            this.init(b);\r\n        }\r\n    }\r\n\r\n    XBoolean.prototype.init = function (b) {\r\n        this.b = Boolean(b);\r\n    };\r\n\r\n    XBoolean.prototype.toString = function () {\r\n        return this.b.toString();\r\n    };\r\n\r\n    XBoolean.prototype.evaluate = function (c) {\r\n        return this;\r\n    };\r\n\r\n    XBoolean.prototype.string = function () {\r\n        return new XString(this.b);\r\n    };\r\n\r\n    XBoolean.prototype.number = function () {\r\n        return new XNumber(this.b);\r\n    };\r\n\r\n    XBoolean.prototype.bool = function () {\r\n        return this;\r\n    };\r\n\r\n    XBoolean.prototype.nodeset = function () {\r\n        throw new Error(\"Cannot convert boolean to nodeset\");\r\n    };\r\n\r\n    XBoolean.prototype.stringValue = function () {\r\n        return this.string().stringValue();\r\n    };\r\n\r\n    XBoolean.prototype.numberValue = function () {\r\n        return this.number().numberValue();\r\n    };\r\n\r\n    XBoolean.prototype.booleanValue = function () {\r\n        return this.b;\r\n    };\r\n\r\n    XBoolean.prototype.not = function () {\r\n        return new XBoolean(!this.b);\r\n    };\r\n\r\n    XBoolean.prototype.equals = function (r) {\r\n        if (Utilities.instance_of(r, XString) || Utilities.instance_of(r, XNumber)) {\r\n            return this.equals(r.bool());\r\n        }\r\n        if (Utilities.instance_of(r, XNodeSet)) {\r\n            return r.compareWithBoolean(this, Operators.equals);\r\n        }\r\n        return new XBoolean(this.b == r.b);\r\n    };\r\n\r\n    XBoolean.prototype.notequal = function (r) {\r\n        if (Utilities.instance_of(r, XString) || Utilities.instance_of(r, XNumber)) {\r\n            return this.notequal(r.bool());\r\n        }\r\n        if (Utilities.instance_of(r, XNodeSet)) {\r\n            return r.compareWithBoolean(this, Operators.notequal);\r\n        }\r\n        return new XBoolean(this.b != r.b);\r\n    };\r\n\r\n    XBoolean.prototype.lessthan = function (r) {\r\n        return this.number().lessthan(r);\r\n    };\r\n\r\n    XBoolean.prototype.greaterthan = function (r) {\r\n        return this.number().greaterthan(r);\r\n    };\r\n\r\n    XBoolean.prototype.lessthanorequal = function (r) {\r\n        return this.number().lessthanorequal(r);\r\n    };\r\n\r\n    XBoolean.prototype.greaterthanorequal = function (r) {\r\n        return this.number().greaterthanorequal(r);\r\n    };\r\n\r\n    XBoolean.true_ = new XBoolean(true);\r\n    XBoolean.false_ = new XBoolean(false);\r\n\r\n    // AVLTree ///////////////////////////////////////////////////////////////////\r\n\r\n    AVLTree.prototype = new Object();\r\n    AVLTree.prototype.constructor = AVLTree;\r\n    AVLTree.superclass = Object.prototype;\r\n\r\n    function AVLTree(n) {\r\n        this.init(n);\r\n    }\r\n\r\n    AVLTree.prototype.init = function (n) {\r\n        this.left = null;\r\n        this.right = null;\r\n        this.node = n;\r\n        this.depth = 1;\r\n    };\r\n\r\n    AVLTree.prototype.balance = function () {\r\n        var ldepth = this.left == null ? 0 : this.left.depth;\r\n        var rdepth = this.right == null ? 0 : this.right.depth;\r\n\r\n        if (ldepth > rdepth + 1) {\r\n            // LR or LL rotation\r\n            var lldepth = this.left.left == null ? 0 : this.left.left.depth;\r\n            var lrdepth = this.left.right == null ? 0 : this.left.right.depth;\r\n\r\n            if (lldepth < lrdepth) {\r\n                // LR rotation consists of a RR rotation of the left child\r\n                this.left.rotateRR();\r\n                // plus a LL rotation of this node, which happens anyway\r\n            }\r\n            this.rotateLL();\r\n        } else if (ldepth + 1 < rdepth) {\r\n            // RR or RL rorarion\r\n            var rrdepth = this.right.right == null ? 0 : this.right.right.depth;\r\n            var rldepth = this.right.left == null ? 0 : this.right.left.depth;\r\n\r\n            if (rldepth > rrdepth) {\r\n                // RR rotation consists of a LL rotation of the right child\r\n                this.right.rotateLL();\r\n                // plus a RR rotation of this node, which happens anyway\r\n            }\r\n            this.rotateRR();\r\n        }\r\n    };\r\n\r\n    AVLTree.prototype.rotateLL = function () {\r\n        // the left side is too long => rotate from the left (_not_ leftwards)\r\n        var nodeBefore = this.node;\r\n        var rightBefore = this.right;\r\n        this.node = this.left.node;\r\n        this.right = this.left;\r\n        this.left = this.left.left;\r\n        this.right.left = this.right.right;\r\n        this.right.right = rightBefore;\r\n        this.right.node = nodeBefore;\r\n        this.right.updateInNewLocation();\r\n        this.updateInNewLocation();\r\n    };\r\n\r\n    AVLTree.prototype.rotateRR = function () {\r\n        // the right side is too long => rotate from the right (_not_ rightwards)\r\n        var nodeBefore = this.node;\r\n        var leftBefore = this.left;\r\n        this.node = this.right.node;\r\n        this.left = this.right;\r\n        this.right = this.right.right;\r\n        this.left.right = this.left.left;\r\n        this.left.left = leftBefore;\r\n        this.left.node = nodeBefore;\r\n        this.left.updateInNewLocation();\r\n        this.updateInNewLocation();\r\n    };\r\n\r\n    AVLTree.prototype.updateInNewLocation = function () {\r\n        this.getDepthFromChildren();\r\n    };\r\n\r\n    AVLTree.prototype.getDepthFromChildren = function () {\r\n        this.depth = this.node == null ? 0 : 1;\r\n        if (this.left != null) {\r\n            this.depth = this.left.depth + 1;\r\n        }\r\n        if (this.right != null && this.depth <= this.right.depth) {\r\n            this.depth = this.right.depth + 1;\r\n        }\r\n    };\r\n\r\n    function nodeOrder(n1, n2) {\r\n        if (n1 === n2) {\r\n            return 0;\r\n        }\r\n\r\n        if (n1.compareDocumentPosition) {\r\n            var cpos = n1.compareDocumentPosition(n2);\r\n\r\n            if (cpos & 0x01) {\r\n                // not in the same document; return an arbitrary result (is there a better way to do this)\r\n                return 1;\r\n            }\r\n            if (cpos & 0x0A) {\r\n                // n2 precedes or contains n1\r\n                return 1;\r\n            }\r\n            if (cpos & 0x14) {\r\n                // n2 follows or is contained by n1\r\n                return -1;\r\n            }\r\n\r\n            return 0;\r\n        }\r\n\r\n        var d1 = 0,\r\n            d2 = 0;\r\n        for (var m1 = n1; m1 != null; m1 = m1.parentNode || m1.ownerElement) {\r\n            d1++;\r\n        }\r\n        for (var m2 = n2; m2 != null; m2 = m2.parentNode || m2.ownerElement) {\r\n            d2++;\r\n        }\r\n\r\n        // step up to same depth\r\n        if (d1 > d2) {\r\n            while (d1 > d2) {\r\n                n1 = n1.parentNode || n1.ownerElement;\r\n                d1--;\r\n            }\r\n            if (n1 === n2) {\r\n                return 1;\r\n            }\r\n        } else if (d2 > d1) {\r\n            while (d2 > d1) {\r\n                n2 = n2.parentNode || n2.ownerElement;\r\n                d2--;\r\n            }\r\n            if (n1 === n2) {\r\n                return -1;\r\n            }\r\n        }\r\n\r\n        var n1Par = n1.parentNode || n1.ownerElement,\r\n            n2Par = n2.parentNode || n2.ownerElement;\r\n\r\n        // find common parent\r\n        while (n1Par !== n2Par) {\r\n            n1 = n1Par;\r\n            n2 = n2Par;\r\n            n1Par = n1.parentNode || n1.ownerElement;\r\n            n2Par = n2.parentNode || n2.ownerElement;\r\n        }\r\n\r\n        var n1isAttr = isAttributeLike(n1);\r\n        var n2isAttr = isAttributeLike(n2);\r\n\r\n        if (n1isAttr && !n2isAttr) {\r\n            return -1;\r\n        }\r\n        if (!n1isAttr && n2isAttr) {\r\n            return 1;\r\n        }\r\n\r\n        // xml namespace node comes before others. namespace nodes before non-namespace nodes\r\n        if (n1.isXPathNamespace) {\r\n            if (n1.nodeValue === XPath.XML_NAMESPACE_URI) {\r\n                return -1;\r\n            }\r\n\r\n            if (!n2.isXPathNamespace) {\r\n                return -1;\r\n            }\r\n\r\n            if (n2.nodeValue === XPath.XML_NAMESPACE_URI) {\r\n                return 1;\r\n            }\r\n        } else if (n2.isXPathNamespace) {\r\n            return 1;\r\n        }\r\n\r\n        if (n1Par) {\r\n            var cn = n1isAttr ? n1Par.attributes : n1Par.childNodes;\r\n            var len = cn.length;\r\n            var n1Compare = n1.baseNode || n1;\r\n            var n2Compare = n2.baseNode || n2;\r\n\r\n            for (var i = 0; i < len; i += 1) {\r\n                var n = cn[i];\r\n                if (n === n1Compare) {\r\n                    return -1;\r\n                }\r\n                if (n === n2Compare) {\r\n                    return 1;\r\n                }\r\n            }\r\n        }\r\n\r\n        throw new Error('Unexpected: could not determine node order');\r\n    }\r\n\r\n    AVLTree.prototype.add = function (n) {\r\n        if (n === this.node) {\r\n            return false;\r\n        }\r\n\r\n        var o = nodeOrder(n, this.node);\r\n\r\n        var ret = false;\r\n        if (o == -1) {\r\n            if (this.left == null) {\r\n                this.left = new AVLTree(n);\r\n                ret = true;\r\n            } else {\r\n                ret = this.left.add(n);\r\n                if (ret) {\r\n                    this.balance();\r\n                }\r\n            }\r\n        } else if (o == 1) {\r\n            if (this.right == null) {\r\n                this.right = new AVLTree(n);\r\n                ret = true;\r\n            } else {\r\n                ret = this.right.add(n);\r\n                if (ret) {\r\n                    this.balance();\r\n                }\r\n            }\r\n        }\r\n\r\n        if (ret) {\r\n            this.getDepthFromChildren();\r\n        }\r\n        return ret;\r\n    };\r\n\r\n    // XNodeSet //////////////////////////////////////////////////////////////////\r\n\r\n    XNodeSet.prototype = new Expression();\r\n    XNodeSet.prototype.constructor = XNodeSet;\r\n    XNodeSet.superclass = Expression.prototype;\r\n\r\n    function XNodeSet() {\r\n        this.init();\r\n    }\r\n\r\n    XNodeSet.prototype.init = function () {\r\n        this.tree = null;\r\n        this.nodes = [];\r\n        this.size = 0;\r\n    };\r\n\r\n    XNodeSet.prototype.toString = function () {\r\n        var p = this.first();\r\n        if (p == null) {\r\n            return \"\";\r\n        }\r\n        return this.stringForNode(p);\r\n    };\r\n\r\n    XNodeSet.prototype.evaluate = function (c) {\r\n        return this;\r\n    };\r\n\r\n    XNodeSet.prototype.string = function () {\r\n        return new XString(this.toString());\r\n    };\r\n\r\n    XNodeSet.prototype.stringValue = function () {\r\n        return this.toString();\r\n    };\r\n\r\n    XNodeSet.prototype.number = function () {\r\n        return new XNumber(this.string());\r\n    };\r\n\r\n    XNodeSet.prototype.numberValue = function () {\r\n        return Number(this.string());\r\n    };\r\n\r\n    XNodeSet.prototype.bool = function () {\r\n        return new XBoolean(this.booleanValue());\r\n    };\r\n\r\n    XNodeSet.prototype.booleanValue = function () {\r\n        return !!this.size;\r\n    };\r\n\r\n    XNodeSet.prototype.nodeset = function () {\r\n        return this;\r\n    };\r\n\r\n    XNodeSet.prototype.stringForNode = function (n) {\r\n        if (n.nodeType == NodeTypes.DOCUMENT_NODE ||\r\n            n.nodeType == NodeTypes.ELEMENT_NODE ||\r\n            n.nodeType === NodeTypes.DOCUMENT_FRAGMENT_NODE) {\r\n            return this.stringForContainerNode(n);\r\n        }\r\n        if (n.nodeType === NodeTypes.ATTRIBUTE_NODE) {\r\n            return n.value || n.nodeValue;\r\n        }\r\n        if (n.isNamespaceNode) {\r\n            return n.namespace;\r\n        }\r\n        return n.nodeValue;\r\n    };\r\n\r\n    XNodeSet.prototype.stringForContainerNode = function (n) {\r\n        var s = \"\";\r\n        for (var n2 = n.firstChild; n2 != null; n2 = n2.nextSibling) {\r\n            var nt = n2.nodeType;\r\n            //  Element,    Text,       CDATA,      Document,   Document Fragment\r\n            if (nt === 1 || nt === 3 || nt === 4 || nt === 9 || nt === 11) {\r\n                s += this.stringForNode(n2);\r\n            }\r\n        }\r\n        return s;\r\n    };\r\n\r\n    XNodeSet.prototype.buildTree = function () {\r\n        if (!this.tree && this.nodes.length) {\r\n            this.tree = new AVLTree(this.nodes[0]);\r\n            for (var i = 1; i < this.nodes.length; i += 1) {\r\n                this.tree.add(this.nodes[i]);\r\n            }\r\n        }\r\n\r\n        return this.tree;\r\n    };\r\n\r\n    XNodeSet.prototype.first = function () {\r\n        var p = this.buildTree();\r\n        if (p == null) {\r\n            return null;\r\n        }\r\n        while (p.left != null) {\r\n            p = p.left;\r\n        }\r\n        return p.node;\r\n    };\r\n\r\n    XNodeSet.prototype.add = function (n) {\r\n        for (var i = 0; i < this.nodes.length; i += 1) {\r\n            if (n === this.nodes[i]) {\r\n                return;\r\n            }\r\n        }\r\n\r\n        this.tree = null;\r\n        this.nodes.push(n);\r\n        this.size += 1;\r\n    };\r\n\r\n    XNodeSet.prototype.addArray = function (ns) {\r\n        var self = this;\r\n\r\n        forEach(function (x) { self.add(x); }, ns);\r\n    };\r\n\r\n    /**\r\n     * Returns an array of the node set's contents in document order\r\n     */\r\n    XNodeSet.prototype.toArray = function () {\r\n        var a = [];\r\n        this.toArrayRec(this.buildTree(), a);\r\n        return a;\r\n    };\r\n\r\n    XNodeSet.prototype.toArrayRec = function (t, a) {\r\n        if (t != null) {\r\n            this.toArrayRec(t.left, a);\r\n            a.push(t.node);\r\n            this.toArrayRec(t.right, a);\r\n        }\r\n    };\r\n\r\n    /**\r\n     * Returns an array of the node set's contents in arbitrary order\r\n     */\r\n    XNodeSet.prototype.toUnsortedArray = function () {\r\n        return this.nodes.slice();\r\n    };\r\n\r\n    XNodeSet.prototype.compareWithString = function (r, o) {\r\n        var a = this.toUnsortedArray();\r\n        for (var i = 0; i < a.length; i++) {\r\n            var n = a[i];\r\n            var l = new XString(this.stringForNode(n));\r\n            var res = o(l, r);\r\n            if (res.booleanValue()) {\r\n                return res;\r\n            }\r\n        }\r\n        return new XBoolean(false);\r\n    };\r\n\r\n    XNodeSet.prototype.compareWithNumber = function (r, o) {\r\n        var a = this.toUnsortedArray();\r\n        for (var i = 0; i < a.length; i++) {\r\n            var n = a[i];\r\n            var l = new XNumber(this.stringForNode(n));\r\n            var res = o(l, r);\r\n            if (res.booleanValue()) {\r\n                return res;\r\n            }\r\n        }\r\n        return new XBoolean(false);\r\n    };\r\n\r\n    XNodeSet.prototype.compareWithBoolean = function (r, o) {\r\n        return o(this.bool(), r);\r\n    };\r\n\r\n    XNodeSet.prototype.compareWithNodeSet = function (r, o) {\r\n        var arr = this.toUnsortedArray();\r\n        var oInvert = function (lop, rop) { return o(rop, lop); };\r\n\r\n        for (var i = 0; i < arr.length; i++) {\r\n            var l = new XString(this.stringForNode(arr[i]));\r\n\r\n            var res = r.compareWithString(l, oInvert);\r\n            if (res.booleanValue()) {\r\n                return res;\r\n            }\r\n        }\r\n\r\n        return new XBoolean(false);\r\n    };\r\n\r\n    XNodeSet.compareWith = curry(function (o, r) {\r\n        if (Utilities.instance_of(r, XString)) {\r\n            return this.compareWithString(r, o);\r\n        }\r\n        if (Utilities.instance_of(r, XNumber)) {\r\n            return this.compareWithNumber(r, o);\r\n        }\r\n        if (Utilities.instance_of(r, XBoolean)) {\r\n            return this.compareWithBoolean(r, o);\r\n        }\r\n        return this.compareWithNodeSet(r, o);\r\n    });\r\n\r\n    XNodeSet.prototype.equals = XNodeSet.compareWith(Operators.equals);\r\n    XNodeSet.prototype.notequal = XNodeSet.compareWith(Operators.notequal);\r\n    XNodeSet.prototype.lessthan = XNodeSet.compareWith(Operators.lessthan);\r\n    XNodeSet.prototype.greaterthan = XNodeSet.compareWith(Operators.greaterthan);\r\n    XNodeSet.prototype.lessthanorequal = XNodeSet.compareWith(Operators.lessthanorequal);\r\n    XNodeSet.prototype.greaterthanorequal = XNodeSet.compareWith(Operators.greaterthanorequal);\r\n\r\n    XNodeSet.prototype.union = function (r) {\r\n        var ns = new XNodeSet();\r\n        ns.addArray(this.toUnsortedArray());\r\n        ns.addArray(r.toUnsortedArray());\r\n        return ns;\r\n    };\r\n\r\n    // XPathNamespace ////////////////////////////////////////////////////////////\r\n\r\n    XPathNamespace.prototype = new Object();\r\n    XPathNamespace.prototype.constructor = XPathNamespace;\r\n    XPathNamespace.superclass = Object.prototype;\r\n\r\n    function XPathNamespace(pre, node, uri, p) {\r\n        this.isXPathNamespace = true;\r\n        this.baseNode = node;\r\n        this.ownerDocument = p.ownerDocument;\r\n        this.nodeName = pre;\r\n        this.prefix = pre;\r\n        this.localName = pre;\r\n        this.namespaceURI = null;\r\n        this.nodeValue = uri;\r\n        this.ownerElement = p;\r\n        this.nodeType = NodeTypes.NAMESPACE_NODE;\r\n    }\r\n\r\n    XPathNamespace.prototype.toString = function () {\r\n        return \"{ \\\"\" + this.prefix + \"\\\", \\\"\" + this.namespaceURI + \"\\\" }\";\r\n    };\r\n\r\n    // XPathContext //////////////////////////////////////////////////////////////\r\n\r\n    XPathContext.prototype = new Object();\r\n    XPathContext.prototype.constructor = XPathContext;\r\n    XPathContext.superclass = Object.prototype;\r\n\r\n    function XPathContext(vr, nr, fr) {\r\n        this.variableResolver = vr != null ? vr : new VariableResolver();\r\n        this.namespaceResolver = nr != null ? nr : new NamespaceResolver();\r\n        this.functionResolver = fr != null ? fr : new FunctionResolver();\r\n    }\r\n\r\n    XPathContext.prototype.extend = function (newProps) {\r\n        return assign(new XPathContext(), this, newProps);\r\n    };\r\n\r\n    // VariableResolver //////////////////////////////////////////////////////////\r\n\r\n    VariableResolver.prototype = new Object();\r\n    VariableResolver.prototype.constructor = VariableResolver;\r\n    VariableResolver.superclass = Object.prototype;\r\n\r\n    function VariableResolver() {\r\n    }\r\n\r\n    VariableResolver.prototype.getVariable = function (ln, ns) {\r\n        return null;\r\n    };\r\n\r\n    // FunctionResolver //////////////////////////////////////////////////////////\r\n\r\n    FunctionResolver.prototype = new Object();\r\n    FunctionResolver.prototype.constructor = FunctionResolver;\r\n    FunctionResolver.superclass = Object.prototype;\r\n\r\n    function FunctionResolver(thisArg) {\r\n        this.thisArg = thisArg != null ? thisArg : Functions;\r\n        this.functions = new Object();\r\n        this.addStandardFunctions();\r\n    }\r\n\r\n    FunctionResolver.prototype.addStandardFunctions = function () {\r\n        this.functions[\"{}last\"] = Functions.last;\r\n        this.functions[\"{}position\"] = Functions.position;\r\n        this.functions[\"{}count\"] = Functions.count;\r\n        this.functions[\"{}id\"] = Functions.id;\r\n        this.functions[\"{}local-name\"] = Functions.localName;\r\n        this.functions[\"{}namespace-uri\"] = Functions.namespaceURI;\r\n        this.functions[\"{}name\"] = Functions.name;\r\n        this.functions[\"{}string\"] = Functions.string;\r\n        this.functions[\"{}concat\"] = Functions.concat;\r\n        this.functions[\"{}starts-with\"] = Functions.startsWith;\r\n        this.functions[\"{}contains\"] = Functions.contains;\r\n        this.functions[\"{}substring-before\"] = Functions.substringBefore;\r\n        this.functions[\"{}substring-after\"] = Functions.substringAfter;\r\n        this.functions[\"{}substring\"] = Functions.substring;\r\n        this.functions[\"{}string-length\"] = Functions.stringLength;\r\n        this.functions[\"{}normalize-space\"] = Functions.normalizeSpace;\r\n        this.functions[\"{}translate\"] = Functions.translate;\r\n        this.functions[\"{}boolean\"] = Functions.boolean_;\r\n        this.functions[\"{}not\"] = Functions.not;\r\n        this.functions[\"{}true\"] = Functions.true_;\r\n        this.functions[\"{}false\"] = Functions.false_;\r\n        this.functions[\"{}lang\"] = Functions.lang;\r\n        this.functions[\"{}number\"] = Functions.number;\r\n        this.functions[\"{}sum\"] = Functions.sum;\r\n        this.functions[\"{}floor\"] = Functions.floor;\r\n        this.functions[\"{}ceiling\"] = Functions.ceiling;\r\n        this.functions[\"{}round\"] = Functions.round;\r\n    };\r\n\r\n    FunctionResolver.prototype.addFunction = function (ns, ln, f) {\r\n        this.functions[\"{\" + ns + \"}\" + ln] = f;\r\n    };\r\n\r\n    FunctionResolver.getFunctionFromContext = function (qName, context) {\r\n        var parts = Utilities.resolveQName(qName, context.namespaceResolver, context.contextNode, false);\r\n\r\n        if (parts[0] === null) {\r\n            throw new Error(\"Cannot resolve QName \" + name);\r\n        }\r\n\r\n        return context.functionResolver.getFunction(parts[1], parts[0]);\r\n    };\r\n\r\n    FunctionResolver.prototype.getFunction = function (localName, namespace) {\r\n        return this.functions[\"{\" + namespace + \"}\" + localName];\r\n    };\r\n\r\n    // NamespaceResolver /////////////////////////////////////////////////////////\r\n\r\n    NamespaceResolver.prototype = new Object();\r\n    NamespaceResolver.prototype.constructor = NamespaceResolver;\r\n    NamespaceResolver.superclass = Object.prototype;\r\n\r\n    function NamespaceResolver() {\r\n    }\r\n\r\n    NamespaceResolver.prototype.getNamespace = function (prefix, n) {\r\n        if (prefix == \"xml\") {\r\n            return XPath.XML_NAMESPACE_URI;\r\n        } else if (prefix == \"xmlns\") {\r\n            return XPath.XMLNS_NAMESPACE_URI;\r\n        }\r\n        if (n.nodeType == NodeTypes.DOCUMENT_NODE) {\r\n            n = n.documentElement;\r\n        } else if (n.nodeType == NodeTypes.ATTRIBUTE_NODE) {\r\n            n = PathExpr.getOwnerElement(n);\r\n        } else if (n.nodeType != NodeTypes.ELEMENT_NODE) {\r\n            n = n.parentNode;\r\n        }\r\n        while (n != null && n.nodeType == NodeTypes.ELEMENT_NODE) {\r\n            var nnm = n.attributes;\r\n            for (var i = 0; i < nnm.length; i++) {\r\n                var a = nnm.item(i);\r\n                var aname = a.name || a.nodeName;\r\n                if ((aname === \"xmlns\" && prefix === \"\")\r\n                    || aname === \"xmlns:\" + prefix) {\r\n                    return String(a.value || a.nodeValue);\r\n                }\r\n            }\r\n            n = n.parentNode;\r\n        }\r\n        return null;\r\n    };\r\n\r\n    // Functions /////////////////////////////////////////////////////////////////\r\n\r\n    var Functions = new Object();\r\n\r\n    Functions.last = function (c) {\r\n        if (arguments.length != 1) {\r\n            throw new Error(\"Function last expects ()\");\r\n        }\r\n\r\n        return new XNumber(c.contextSize);\r\n    };\r\n\r\n    Functions.position = function (c) {\r\n        if (arguments.length != 1) {\r\n            throw new Error(\"Function position expects ()\");\r\n        }\r\n\r\n        return new XNumber(c.contextPosition);\r\n    };\r\n\r\n    Functions.count = function () {\r\n        var c = arguments[0];\r\n        var ns;\r\n        if (arguments.length != 2 || !Utilities.instance_of(ns = arguments[1].evaluate(c), XNodeSet)) {\r\n            throw new Error(\"Function count expects (node-set)\");\r\n        }\r\n        return new XNumber(ns.size);\r\n    };\r\n\r\n    Functions.id = function () {\r\n        var c = arguments[0];\r\n        var id;\r\n        if (arguments.length != 2) {\r\n            throw new Error(\"Function id expects (object)\");\r\n        }\r\n        id = arguments[1].evaluate(c);\r\n        if (Utilities.instance_of(id, XNodeSet)) {\r\n            id = id.toArray().join(\" \");\r\n        } else {\r\n            id = id.stringValue();\r\n        }\r\n        var ids = id.split(/[\\x0d\\x0a\\x09\\x20]+/);\r\n        var count = 0;\r\n        var ns = new XNodeSet();\r\n        var doc = c.contextNode.nodeType == NodeTypes.DOCUMENT_NODE\r\n            ? c.contextNode\r\n            : c.contextNode.ownerDocument;\r\n        for (var i = 0; i < ids.length; i++) {\r\n            var n;\r\n            if (doc.getElementById) {\r\n                n = doc.getElementById(ids[i]);\r\n            } else {\r\n                n = Utilities.getElementById(doc, ids[i]);\r\n            }\r\n            if (n != null) {\r\n                ns.add(n);\r\n                count++;\r\n            }\r\n        }\r\n        return ns;\r\n    };\r\n\r\n    Functions.localName = function (c, eNode) {\r\n        var n;\r\n\r\n        if (arguments.length == 1) {\r\n            n = c.contextNode;\r\n        } else if (arguments.length == 2) {\r\n            n = eNode.evaluate(c).first();\r\n        } else {\r\n            throw new Error(\"Function local-name expects (node-set?)\");\r\n        }\r\n\r\n        if (n == null) {\r\n            return new XString(\"\");\r\n        }\r\n\r\n        return new XString(\r\n            n.localName ||     //  standard elements and attributes\r\n            n.baseName ||     //  IE\r\n            n.target ||     //  processing instructions\r\n            n.nodeName ||     //  DOM1 elements\r\n            \"\"                 //  fallback\r\n        );\r\n    };\r\n\r\n    Functions.namespaceURI = function () {\r\n        var c = arguments[0];\r\n        var n;\r\n\r\n        if (arguments.length == 1) {\r\n            n = c.contextNode;\r\n        } else if (arguments.length == 2) {\r\n            n = arguments[1].evaluate(c).first();\r\n        } else {\r\n            throw new Error(\"Function namespace-uri expects (node-set?)\");\r\n        }\r\n\r\n        if (n == null) {\r\n            return new XString(\"\");\r\n        }\r\n        return new XString(n.namespaceURI || '');\r\n    };\r\n\r\n    Functions.name = function () {\r\n        var c = arguments[0];\r\n        var n;\r\n        if (arguments.length == 1) {\r\n            n = c.contextNode;\r\n        } else if (arguments.length == 2) {\r\n            n = arguments[1].evaluate(c).first();\r\n        } else {\r\n            throw new Error(\"Function name expects (node-set?)\");\r\n        }\r\n        if (n == null) {\r\n            return new XString(\"\");\r\n        }\r\n        if (n.nodeType == NodeTypes.ELEMENT_NODE) {\r\n            return new XString(n.nodeName);\r\n        } else if (n.nodeType == NodeTypes.ATTRIBUTE_NODE) {\r\n            return new XString(n.name || n.nodeName);\r\n        } else if (n.nodeType === NodeTypes.PROCESSING_INSTRUCTION_NODE) {\r\n            return new XString(n.target || n.nodeName);\r\n        } else if (n.localName == null) {\r\n            return new XString(\"\");\r\n        } else {\r\n            return new XString(n.localName);\r\n        }\r\n    };\r\n\r\n    Functions.string = function () {\r\n        var c = arguments[0];\r\n        if (arguments.length == 1) {\r\n            return new XString(XNodeSet.prototype.stringForNode(c.contextNode));\r\n        } else if (arguments.length == 2) {\r\n            return arguments[1].evaluate(c).string();\r\n        }\r\n        throw new Error(\"Function string expects (object?)\");\r\n    };\r\n\r\n    Functions.concat = function (c) {\r\n        if (arguments.length < 3) {\r\n            throw new Error(\"Function concat expects (string, string[, string]*)\");\r\n        }\r\n        var s = \"\";\r\n        for (var i = 1; i < arguments.length; i++) {\r\n            s += arguments[i].evaluate(c).stringValue();\r\n        }\r\n        return new XString(s);\r\n    };\r\n\r\n    Functions.startsWith = function () {\r\n        var c = arguments[0];\r\n        if (arguments.length != 3) {\r\n            throw new Error(\"Function startsWith expects (string, string)\");\r\n        }\r\n        var s1 = arguments[1].evaluate(c).stringValue();\r\n        var s2 = arguments[2].evaluate(c).stringValue();\r\n        return new XBoolean(s1.substring(0, s2.length) == s2);\r\n    };\r\n\r\n    Functions.contains = function () {\r\n        var c = arguments[0];\r\n        if (arguments.length != 3) {\r\n            throw new Error(\"Function contains expects (string, string)\");\r\n        }\r\n        var s1 = arguments[1].evaluate(c).stringValue();\r\n        var s2 = arguments[2].evaluate(c).stringValue();\r\n        return new XBoolean(s1.indexOf(s2) !== -1);\r\n    };\r\n\r\n    Functions.substringBefore = function () {\r\n        var c = arguments[0];\r\n        if (arguments.length != 3) {\r\n            throw new Error(\"Function substring-before expects (string, string)\");\r\n        }\r\n        var s1 = arguments[1].evaluate(c).stringValue();\r\n        var s2 = arguments[2].evaluate(c).stringValue();\r\n        return new XString(s1.substring(0, s1.indexOf(s2)));\r\n    };\r\n\r\n    Functions.substringAfter = function () {\r\n        var c = arguments[0];\r\n        if (arguments.length != 3) {\r\n            throw new Error(\"Function substring-after expects (string, string)\");\r\n        }\r\n        var s1 = arguments[1].evaluate(c).stringValue();\r\n        var s2 = arguments[2].evaluate(c).stringValue();\r\n        if (s2.length == 0) {\r\n            return new XString(s1);\r\n        }\r\n        var i = s1.indexOf(s2);\r\n        if (i == -1) {\r\n            return new XString(\"\");\r\n        }\r\n        return new XString(s1.substring(i + s2.length));\r\n    };\r\n\r\n    Functions.substring = function () {\r\n        var c = arguments[0];\r\n        if (!(arguments.length == 3 || arguments.length == 4)) {\r\n            throw new Error(\"Function substring expects (string, number, number?)\");\r\n        }\r\n        var s = arguments[1].evaluate(c).stringValue();\r\n        var n1 = Math.round(arguments[2].evaluate(c).numberValue()) - 1;\r\n        var n2 = arguments.length == 4 ? n1 + Math.round(arguments[3].evaluate(c).numberValue()) : undefined;\r\n        return new XString(s.substring(n1, n2));\r\n    };\r\n\r\n    Functions.stringLength = function () {\r\n        var c = arguments[0];\r\n        var s;\r\n        if (arguments.length == 1) {\r\n            s = XNodeSet.prototype.stringForNode(c.contextNode);\r\n        } else if (arguments.length == 2) {\r\n            s = arguments[1].evaluate(c).stringValue();\r\n        } else {\r\n            throw new Error(\"Function string-length expects (string?)\");\r\n        }\r\n        return new XNumber(s.length);\r\n    };\r\n\r\n    Functions.normalizeSpace = function () {\r\n        var c = arguments[0];\r\n        var s;\r\n        if (arguments.length == 1) {\r\n            s = XNodeSet.prototype.stringForNode(c.contextNode);\r\n        } else if (arguments.length == 2) {\r\n            s = arguments[1].evaluate(c).stringValue();\r\n        } else {\r\n            throw new Error(\"Function normalize-space expects (string?)\");\r\n        }\r\n        var i = 0;\r\n        var j = s.length - 1;\r\n        while (Utilities.isSpace(s.charCodeAt(j))) {\r\n            j--;\r\n        }\r\n        var t = \"\";\r\n        while (i <= j && Utilities.isSpace(s.charCodeAt(i))) {\r\n            i++;\r\n        }\r\n        while (i <= j) {\r\n            if (Utilities.isSpace(s.charCodeAt(i))) {\r\n                t += \" \";\r\n                while (i <= j && Utilities.isSpace(s.charCodeAt(i))) {\r\n                    i++;\r\n                }\r\n            } else {\r\n                t += s.charAt(i);\r\n                i++;\r\n            }\r\n        }\r\n        return new XString(t);\r\n    };\r\n\r\n    Functions.translate = function (c, eValue, eFrom, eTo) {\r\n        if (arguments.length != 4) {\r\n            throw new Error(\"Function translate expects (string, string, string)\");\r\n        }\r\n\r\n        var value = eValue.evaluate(c).stringValue();\r\n        var from = eFrom.evaluate(c).stringValue();\r\n        var to = eTo.evaluate(c).stringValue();\r\n\r\n        var cMap = reduce(function (acc, ch, i) {\r\n            if (!(ch in acc)) {\r\n                acc[ch] = i > to.length ? '' : to[i];\r\n            }\r\n            return acc;\r\n        }, {}, from);\r\n\r\n        var t = join(\r\n            '',\r\n            map(function (ch) {\r\n                return ch in cMap ? cMap[ch] : ch;\r\n            }, value)\r\n        );\r\n\r\n        return new XString(t);\r\n    };\r\n\r\n    Functions.boolean_ = function () {\r\n        var c = arguments[0];\r\n        if (arguments.length != 2) {\r\n            throw new Error(\"Function boolean expects (object)\");\r\n        }\r\n        return arguments[1].evaluate(c).bool();\r\n    };\r\n\r\n    Functions.not = function (c, eValue) {\r\n        if (arguments.length != 2) {\r\n            throw new Error(\"Function not expects (object)\");\r\n        }\r\n        return eValue.evaluate(c).bool().not();\r\n    };\r\n\r\n    Functions.true_ = function () {\r\n        if (arguments.length != 1) {\r\n            throw new Error(\"Function true expects ()\");\r\n        }\r\n        return XBoolean.true_;\r\n    };\r\n\r\n    Functions.false_ = function () {\r\n        if (arguments.length != 1) {\r\n            throw new Error(\"Function false expects ()\");\r\n        }\r\n        return XBoolean.false_;\r\n    };\r\n\r\n    Functions.lang = function () {\r\n        var c = arguments[0];\r\n        if (arguments.length != 2) {\r\n            throw new Error(\"Function lang expects (string)\");\r\n        }\r\n        var lang;\r\n        for (var n = c.contextNode; n != null && n.nodeType != NodeTypes.DOCUMENT_NODE; n = n.parentNode) {\r\n            var a = n.getAttributeNS(XPath.XML_NAMESPACE_URI, \"lang\");\r\n            if (a != null) {\r\n                lang = String(a);\r\n                break;\r\n            }\r\n        }\r\n        if (lang == null) {\r\n            return XBoolean.false_;\r\n        }\r\n        var s = arguments[1].evaluate(c).stringValue();\r\n        return new XBoolean(lang.substring(0, s.length) == s\r\n            && (lang.length == s.length || lang.charAt(s.length) == '-'));\r\n    };\r\n\r\n    Functions.number = function () {\r\n        var c = arguments[0];\r\n        if (!(arguments.length == 1 || arguments.length == 2)) {\r\n            throw new Error(\"Function number expects (object?)\");\r\n        }\r\n        if (arguments.length == 1) {\r\n            return new XNumber(XNodeSet.prototype.stringForNode(c.contextNode));\r\n        }\r\n        return arguments[1].evaluate(c).number();\r\n    };\r\n\r\n    Functions.sum = function () {\r\n        var c = arguments[0];\r\n        var ns;\r\n        if (arguments.length != 2 || !Utilities.instance_of((ns = arguments[1].evaluate(c)), XNodeSet)) {\r\n            throw new Error(\"Function sum expects (node-set)\");\r\n        }\r\n        ns = ns.toUnsortedArray();\r\n        var n = 0;\r\n        for (var i = 0; i < ns.length; i++) {\r\n            n += new XNumber(XNodeSet.prototype.stringForNode(ns[i])).numberValue();\r\n        }\r\n        return new XNumber(n);\r\n    };\r\n\r\n    Functions.floor = function () {\r\n        var c = arguments[0];\r\n        if (arguments.length != 2) {\r\n            throw new Error(\"Function floor expects (number)\");\r\n        }\r\n        return new XNumber(Math.floor(arguments[1].evaluate(c).numberValue()));\r\n    };\r\n\r\n    Functions.ceiling = function () {\r\n        var c = arguments[0];\r\n        if (arguments.length != 2) {\r\n            throw new Error(\"Function ceiling expects (number)\");\r\n        }\r\n        return new XNumber(Math.ceil(arguments[1].evaluate(c).numberValue()));\r\n    };\r\n\r\n    Functions.round = function () {\r\n        var c = arguments[0];\r\n        if (arguments.length != 2) {\r\n            throw new Error(\"Function round expects (number)\");\r\n        }\r\n        return new XNumber(Math.round(arguments[1].evaluate(c).numberValue()));\r\n    };\r\n\r\n    // Utilities /////////////////////////////////////////////////////////////////\r\n\r\n    var Utilities = new Object();\r\n\r\n    // Returns true if the node is an attribute node or namespace node\r\n    var isAttributeLike = function (val) {\r\n        return val && (\r\n            val.nodeType === NodeTypes.ATTRIBUTE_NODE ||\r\n            val.ownerElement ||\r\n            val.isXPathNamespace\r\n        );\r\n    }\r\n\r\n    Utilities.splitQName = function (qn) {\r\n        var i = qn.indexOf(\":\");\r\n        if (i == -1) {\r\n            return [null, qn];\r\n        }\r\n        return [qn.substring(0, i), qn.substring(i + 1)];\r\n    };\r\n\r\n    Utilities.resolveQName = function (qn, nr, n, useDefault) {\r\n        var parts = Utilities.splitQName(qn);\r\n        if (parts[0] != null) {\r\n            parts[0] = nr.getNamespace(parts[0], n);\r\n        } else {\r\n            if (useDefault) {\r\n                parts[0] = nr.getNamespace(\"\", n);\r\n                if (parts[0] == null) {\r\n                    parts[0] = \"\";\r\n                }\r\n            } else {\r\n                parts[0] = \"\";\r\n            }\r\n        }\r\n        return parts;\r\n    };\r\n\r\n    Utilities.isSpace = function (c) {\r\n        return c == 0x9 || c == 0xd || c == 0xa || c == 0x20;\r\n    };\r\n\r\n    Utilities.isLetter = function (c) {\r\n        return c >= 0x0041 && c <= 0x005A ||\r\n            c >= 0x0061 && c <= 0x007A ||\r\n            c >= 0x00C0 && c <= 0x00D6 ||\r\n            c >= 0x00D8 && c <= 0x00F6 ||\r\n            c >= 0x00F8 && c <= 0x00FF ||\r\n            c >= 0x0100 && c <= 0x0131 ||\r\n            c >= 0x0134 && c <= 0x013E ||\r\n            c >= 0x0141 && c <= 0x0148 ||\r\n            c >= 0x014A && c <= 0x017E ||\r\n            c >= 0x0180 && c <= 0x01C3 ||\r\n            c >= 0x01CD && c <= 0x01F0 ||\r\n            c >= 0x01F4 && c <= 0x01F5 ||\r\n            c >= 0x01FA && c <= 0x0217 ||\r\n            c >= 0x0250 && c <= 0x02A8 ||\r\n            c >= 0x02BB && c <= 0x02C1 ||\r\n            c == 0x0386 ||\r\n            c >= 0x0388 && c <= 0x038A ||\r\n            c == 0x038C ||\r\n            c >= 0x038E && c <= 0x03A1 ||\r\n            c >= 0x03A3 && c <= 0x03CE ||\r\n            c >= 0x03D0 && c <= 0x03D6 ||\r\n            c == 0x03DA ||\r\n            c == 0x03DC ||\r\n            c == 0x03DE ||\r\n            c == 0x03E0 ||\r\n            c >= 0x03E2 && c <= 0x03F3 ||\r\n            c >= 0x0401 && c <= 0x040C ||\r\n            c >= 0x040E && c <= 0x044F ||\r\n            c >= 0x0451 && c <= 0x045C ||\r\n            c >= 0x045E && c <= 0x0481 ||\r\n            c >= 0x0490 && c <= 0x04C4 ||\r\n            c >= 0x04C7 && c <= 0x04C8 ||\r\n            c >= 0x04CB && c <= 0x04CC ||\r\n            c >= 0x04D0 && c <= 0x04EB ||\r\n            c >= 0x04EE && c <= 0x04F5 ||\r\n            c >= 0x04F8 && c <= 0x04F9 ||\r\n            c >= 0x0531 && c <= 0x0556 ||\r\n            c == 0x0559 ||\r\n            c >= 0x0561 && c <= 0x0586 ||\r\n            c >= 0x05D0 && c <= 0x05EA ||\r\n            c >= 0x05F0 && c <= 0x05F2 ||\r\n            c >= 0x0621 && c <= 0x063A ||\r\n            c >= 0x0641 && c <= 0x064A ||\r\n            c >= 0x0671 && c <= 0x06B7 ||\r\n            c >= 0x06BA && c <= 0x06BE ||\r\n            c >= 0x06C0 && c <= 0x06CE ||\r\n            c >= 0x06D0 && c <= 0x06D3 ||\r\n            c == 0x06D5 ||\r\n            c >= 0x06E5 && c <= 0x06E6 ||\r\n            c >= 0x0905 && c <= 0x0939 ||\r\n            c == 0x093D ||\r\n            c >= 0x0958 && c <= 0x0961 ||\r\n            c >= 0x0985 && c <= 0x098C ||\r\n            c >= 0x098F && c <= 0x0990 ||\r\n            c >= 0x0993 && c <= 0x09A8 ||\r\n            c >= 0x09AA && c <= 0x09B0 ||\r\n            c == 0x09B2 ||\r\n            c >= 0x09B6 && c <= 0x09B9 ||\r\n            c >= 0x09DC && c <= 0x09DD ||\r\n            c >= 0x09DF && c <= 0x09E1 ||\r\n            c >= 0x09F0 && c <= 0x09F1 ||\r\n            c >= 0x0A05 && c <= 0x0A0A ||\r\n            c >= 0x0A0F && c <= 0x0A10 ||\r\n            c >= 0x0A13 && c <= 0x0A28 ||\r\n            c >= 0x0A2A && c <= 0x0A30 ||\r\n            c >= 0x0A32 && c <= 0x0A33 ||\r\n            c >= 0x0A35 && c <= 0x0A36 ||\r\n            c >= 0x0A38 && c <= 0x0A39 ||\r\n            c >= 0x0A59 && c <= 0x0A5C ||\r\n            c == 0x0A5E ||\r\n            c >= 0x0A72 && c <= 0x0A74 ||\r\n            c >= 0x0A85 && c <= 0x0A8B ||\r\n            c == 0x0A8D ||\r\n            c >= 0x0A8F && c <= 0x0A91 ||\r\n            c >= 0x0A93 && c <= 0x0AA8 ||\r\n            c >= 0x0AAA && c <= 0x0AB0 ||\r\n            c >= 0x0AB2 && c <= 0x0AB3 ||\r\n            c >= 0x0AB5 && c <= 0x0AB9 ||\r\n            c == 0x0ABD ||\r\n            c == 0x0AE0 ||\r\n            c >= 0x0B05 && c <= 0x0B0C ||\r\n            c >= 0x0B0F && c <= 0x0B10 ||\r\n            c >= 0x0B13 && c <= 0x0B28 ||\r\n            c >= 0x0B2A && c <= 0x0B30 ||\r\n            c >= 0x0B32 && c <= 0x0B33 ||\r\n            c >= 0x0B36 && c <= 0x0B39 ||\r\n            c == 0x0B3D ||\r\n            c >= 0x0B5C && c <= 0x0B5D ||\r\n            c >= 0x0B5F && c <= 0x0B61 ||\r\n            c >= 0x0B85 && c <= 0x0B8A ||\r\n            c >= 0x0B8E && c <= 0x0B90 ||\r\n            c >= 0x0B92 && c <= 0x0B95 ||\r\n            c >= 0x0B99 && c <= 0x0B9A ||\r\n            c == 0x0B9C ||\r\n            c >= 0x0B9E && c <= 0x0B9F ||\r\n            c >= 0x0BA3 && c <= 0x0BA4 ||\r\n            c >= 0x0BA8 && c <= 0x0BAA ||\r\n            c >= 0x0BAE && c <= 0x0BB5 ||\r\n            c >= 0x0BB7 && c <= 0x0BB9 ||\r\n            c >= 0x0C05 && c <= 0x0C0C ||\r\n            c >= 0x0C0E && c <= 0x0C10 ||\r\n            c >= 0x0C12 && c <= 0x0C28 ||\r\n            c >= 0x0C2A && c <= 0x0C33 ||\r\n            c >= 0x0C35 && c <= 0x0C39 ||\r\n            c >= 0x0C60 && c <= 0x0C61 ||\r\n            c >= 0x0C85 && c <= 0x0C8C ||\r\n            c >= 0x0C8E && c <= 0x0C90 ||\r\n            c >= 0x0C92 && c <= 0x0CA8 ||\r\n            c >= 0x0CAA && c <= 0x0CB3 ||\r\n            c >= 0x0CB5 && c <= 0x0CB9 ||\r\n            c == 0x0CDE ||\r\n            c >= 0x0CE0 && c <= 0x0CE1 ||\r\n            c >= 0x0D05 && c <= 0x0D0C ||\r\n            c >= 0x0D0E && c <= 0x0D10 ||\r\n            c >= 0x0D12 && c <= 0x0D28 ||\r\n            c >= 0x0D2A && c <= 0x0D39 ||\r\n            c >= 0x0D60 && c <= 0x0D61 ||\r\n            c >= 0x0E01 && c <= 0x0E2E ||\r\n            c == 0x0E30 ||\r\n            c >= 0x0E32 && c <= 0x0E33 ||\r\n            c >= 0x0E40 && c <= 0x0E45 ||\r\n            c >= 0x0E81 && c <= 0x0E82 ||\r\n            c == 0x0E84 ||\r\n            c >= 0x0E87 && c <= 0x0E88 ||\r\n            c == 0x0E8A ||\r\n            c == 0x0E8D ||\r\n            c >= 0x0E94 && c <= 0x0E97 ||\r\n            c >= 0x0E99 && c <= 0x0E9F ||\r\n            c >= 0x0EA1 && c <= 0x0EA3 ||\r\n            c == 0x0EA5 ||\r\n            c == 0x0EA7 ||\r\n            c >= 0x0EAA && c <= 0x0EAB ||\r\n            c >= 0x0EAD && c <= 0x0EAE ||\r\n            c == 0x0EB0 ||\r\n            c >= 0x0EB2 && c <= 0x0EB3 ||\r\n            c == 0x0EBD ||\r\n            c >= 0x0EC0 && c <= 0x0EC4 ||\r\n            c >= 0x0F40 && c <= 0x0F47 ||\r\n            c >= 0x0F49 && c <= 0x0F69 ||\r\n            c >= 0x10A0 && c <= 0x10C5 ||\r\n            c >= 0x10D0 && c <= 0x10F6 ||\r\n            c == 0x1100 ||\r\n            c >= 0x1102 && c <= 0x1103 ||\r\n            c >= 0x1105 && c <= 0x1107 ||\r\n            c == 0x1109 ||\r\n            c >= 0x110B && c <= 0x110C ||\r\n            c >= 0x110E && c <= 0x1112 ||\r\n            c == 0x113C ||\r\n            c == 0x113E ||\r\n            c == 0x1140 ||\r\n            c == 0x114C ||\r\n            c == 0x114E ||\r\n            c == 0x1150 ||\r\n            c >= 0x1154 && c <= 0x1155 ||\r\n            c == 0x1159 ||\r\n            c >= 0x115F && c <= 0x1161 ||\r\n            c == 0x1163 ||\r\n            c == 0x1165 ||\r\n            c == 0x1167 ||\r\n            c == 0x1169 ||\r\n            c >= 0x116D && c <= 0x116E ||\r\n            c >= 0x1172 && c <= 0x1173 ||\r\n            c == 0x1175 ||\r\n            c == 0x119E ||\r\n            c == 0x11A8 ||\r\n            c == 0x11AB ||\r\n            c >= 0x11AE && c <= 0x11AF ||\r\n            c >= 0x11B7 && c <= 0x11B8 ||\r\n            c == 0x11BA ||\r\n            c >= 0x11BC && c <= 0x11C2 ||\r\n            c == 0x11EB ||\r\n            c == 0x11F0 ||\r\n            c == 0x11F9 ||\r\n            c >= 0x1E00 && c <= 0x1E9B ||\r\n            c >= 0x1EA0 && c <= 0x1EF9 ||\r\n            c >= 0x1F00 && c <= 0x1F15 ||\r\n            c >= 0x1F18 && c <= 0x1F1D ||\r\n            c >= 0x1F20 && c <= 0x1F45 ||\r\n            c >= 0x1F48 && c <= 0x1F4D ||\r\n            c >= 0x1F50 && c <= 0x1F57 ||\r\n            c == 0x1F59 ||\r\n            c == 0x1F5B ||\r\n            c == 0x1F5D ||\r\n            c >= 0x1F5F && c <= 0x1F7D ||\r\n            c >= 0x1F80 && c <= 0x1FB4 ||\r\n            c >= 0x1FB6 && c <= 0x1FBC ||\r\n            c == 0x1FBE ||\r\n            c >= 0x1FC2 && c <= 0x1FC4 ||\r\n            c >= 0x1FC6 && c <= 0x1FCC ||\r\n            c >= 0x1FD0 && c <= 0x1FD3 ||\r\n            c >= 0x1FD6 && c <= 0x1FDB ||\r\n            c >= 0x1FE0 && c <= 0x1FEC ||\r\n            c >= 0x1FF2 && c <= 0x1FF4 ||\r\n            c >= 0x1FF6 && c <= 0x1FFC ||\r\n            c == 0x2126 ||\r\n            c >= 0x212A && c <= 0x212B ||\r\n            c == 0x212E ||\r\n            c >= 0x2180 && c <= 0x2182 ||\r\n            c >= 0x3041 && c <= 0x3094 ||\r\n            c >= 0x30A1 && c <= 0x30FA ||\r\n            c >= 0x3105 && c <= 0x312C ||\r\n            c >= 0xAC00 && c <= 0xD7A3 ||\r\n            c >= 0x4E00 && c <= 0x9FA5 ||\r\n            c == 0x3007 ||\r\n            c >= 0x3021 && c <= 0x3029;\r\n    };\r\n\r\n    Utilities.isNCNameChar = function (c) {\r\n        return c >= 0x0030 && c <= 0x0039\r\n            || c >= 0x0660 && c <= 0x0669\r\n            || c >= 0x06F0 && c <= 0x06F9\r\n            || c >= 0x0966 && c <= 0x096F\r\n            || c >= 0x09E6 && c <= 0x09EF\r\n            || c >= 0x0A66 && c <= 0x0A6F\r\n            || c >= 0x0AE6 && c <= 0x0AEF\r\n            || c >= 0x0B66 && c <= 0x0B6F\r\n            || c >= 0x0BE7 && c <= 0x0BEF\r\n            || c >= 0x0C66 && c <= 0x0C6F\r\n            || c >= 0x0CE6 && c <= 0x0CEF\r\n            || c >= 0x0D66 && c <= 0x0D6F\r\n            || c >= 0x0E50 && c <= 0x0E59\r\n            || c >= 0x0ED0 && c <= 0x0ED9\r\n            || c >= 0x0F20 && c <= 0x0F29\r\n            || c == 0x002E\r\n            || c == 0x002D\r\n            || c == 0x005F\r\n            || Utilities.isLetter(c)\r\n            || c >= 0x0300 && c <= 0x0345\r\n            || c >= 0x0360 && c <= 0x0361\r\n            || c >= 0x0483 && c <= 0x0486\r\n            || c >= 0x0591 && c <= 0x05A1\r\n            || c >= 0x05A3 && c <= 0x05B9\r\n            || c >= 0x05BB && c <= 0x05BD\r\n            || c == 0x05BF\r\n            || c >= 0x05C1 && c <= 0x05C2\r\n            || c == 0x05C4\r\n            || c >= 0x064B && c <= 0x0652\r\n            || c == 0x0670\r\n            || c >= 0x06D6 && c <= 0x06DC\r\n            || c >= 0x06DD && c <= 0x06DF\r\n            || c >= 0x06E0 && c <= 0x06E4\r\n            || c >= 0x06E7 && c <= 0x06E8\r\n            || c >= 0x06EA && c <= 0x06ED\r\n            || c >= 0x0901 && c <= 0x0903\r\n            || c == 0x093C\r\n            || c >= 0x093E && c <= 0x094C\r\n            || c == 0x094D\r\n            || c >= 0x0951 && c <= 0x0954\r\n            || c >= 0x0962 && c <= 0x0963\r\n            || c >= 0x0981 && c <= 0x0983\r\n            || c == 0x09BC\r\n            || c == 0x09BE\r\n            || c == 0x09BF\r\n            || c >= 0x09C0 && c <= 0x09C4\r\n            || c >= 0x09C7 && c <= 0x09C8\r\n            || c >= 0x09CB && c <= 0x09CD\r\n            || c == 0x09D7\r\n            || c >= 0x09E2 && c <= 0x09E3\r\n            || c == 0x0A02\r\n            || c == 0x0A3C\r\n            || c == 0x0A3E\r\n            || c == 0x0A3F\r\n            || c >= 0x0A40 && c <= 0x0A42\r\n            || c >= 0x0A47 && c <= 0x0A48\r\n            || c >= 0x0A4B && c <= 0x0A4D\r\n            || c >= 0x0A70 && c <= 0x0A71\r\n            || c >= 0x0A81 && c <= 0x0A83\r\n            || c == 0x0ABC\r\n            || c >= 0x0ABE && c <= 0x0AC5\r\n            || c >= 0x0AC7 && c <= 0x0AC9\r\n            || c >= 0x0ACB && c <= 0x0ACD\r\n            || c >= 0x0B01 && c <= 0x0B03\r\n            || c == 0x0B3C\r\n            || c >= 0x0B3E && c <= 0x0B43\r\n            || c >= 0x0B47 && c <= 0x0B48\r\n            || c >= 0x0B4B && c <= 0x0B4D\r\n            || c >= 0x0B56 && c <= 0x0B57\r\n            || c >= 0x0B82 && c <= 0x0B83\r\n            || c >= 0x0BBE && c <= 0x0BC2\r\n            || c >= 0x0BC6 && c <= 0x0BC8\r\n            || c >= 0x0BCA && c <= 0x0BCD\r\n            || c == 0x0BD7\r\n            || c >= 0x0C01 && c <= 0x0C03\r\n            || c >= 0x0C3E && c <= 0x0C44\r\n            || c >= 0x0C46 && c <= 0x0C48\r\n            || c >= 0x0C4A && c <= 0x0C4D\r\n            || c >= 0x0C55 && c <= 0x0C56\r\n            || c >= 0x0C82 && c <= 0x0C83\r\n            || c >= 0x0CBE && c <= 0x0CC4\r\n            || c >= 0x0CC6 && c <= 0x0CC8\r\n            || c >= 0x0CCA && c <= 0x0CCD\r\n            || c >= 0x0CD5 && c <= 0x0CD6\r\n            || c >= 0x0D02 && c <= 0x0D03\r\n            || c >= 0x0D3E && c <= 0x0D43\r\n            || c >= 0x0D46 && c <= 0x0D48\r\n            || c >= 0x0D4A && c <= 0x0D4D\r\n            || c == 0x0D57\r\n            || c == 0x0E31\r\n            || c >= 0x0E34 && c <= 0x0E3A\r\n            || c >= 0x0E47 && c <= 0x0E4E\r\n            || c == 0x0EB1\r\n            || c >= 0x0EB4 && c <= 0x0EB9\r\n            || c >= 0x0EBB && c <= 0x0EBC\r\n            || c >= 0x0EC8 && c <= 0x0ECD\r\n            || c >= 0x0F18 && c <= 0x0F19\r\n            || c == 0x0F35\r\n            || c == 0x0F37\r\n            || c == 0x0F39\r\n            || c == 0x0F3E\r\n            || c == 0x0F3F\r\n            || c >= 0x0F71 && c <= 0x0F84\r\n            || c >= 0x0F86 && c <= 0x0F8B\r\n            || c >= 0x0F90 && c <= 0x0F95\r\n            || c == 0x0F97\r\n            || c >= 0x0F99 && c <= 0x0FAD\r\n            || c >= 0x0FB1 && c <= 0x0FB7\r\n            || c == 0x0FB9\r\n            || c >= 0x20D0 && c <= 0x20DC\r\n            || c == 0x20E1\r\n            || c >= 0x302A && c <= 0x302F\r\n            || c == 0x3099\r\n            || c == 0x309A\r\n            || c == 0x00B7\r\n            || c == 0x02D0\r\n            || c == 0x02D1\r\n            || c == 0x0387\r\n            || c == 0x0640\r\n            || c == 0x0E46\r\n            || c == 0x0EC6\r\n            || c == 0x3005\r\n            || c >= 0x3031 && c <= 0x3035\r\n            || c >= 0x309D && c <= 0x309E\r\n            || c >= 0x30FC && c <= 0x30FE;\r\n    };\r\n\r\n    Utilities.coalesceText = function (n) {\r\n        for (var m = n.firstChild; m != null; m = m.nextSibling) {\r\n            if (m.nodeType == NodeTypes.TEXT_NODE || m.nodeType == NodeTypes.CDATA_SECTION_NODE) {\r\n                var s = m.nodeValue;\r\n                var first = m;\r\n                m = m.nextSibling;\r\n                while (m != null && (m.nodeType == NodeTypes.TEXT_NODE || m.nodeType == NodeTypes.CDATA_SECTION_NODE)) {\r\n                    s += m.nodeValue;\r\n                    var del = m;\r\n                    m = m.nextSibling;\r\n                    del.parentNode.removeChild(del);\r\n                }\r\n                if (first.nodeType == NodeTypes.CDATA_SECTION_NODE) {\r\n                    var p = first.parentNode;\r\n                    if (first.nextSibling == null) {\r\n                        p.removeChild(first);\r\n                        p.appendChild(p.ownerDocument.createTextNode(s));\r\n                    } else {\r\n                        var next = first.nextSibling;\r\n                        p.removeChild(first);\r\n                        p.insertBefore(p.ownerDocument.createTextNode(s), next);\r\n                    }\r\n                } else {\r\n                    first.nodeValue = s;\r\n                }\r\n                if (m == null) {\r\n                    break;\r\n                }\r\n            } else if (m.nodeType == NodeTypes.ELEMENT_NODE) {\r\n                Utilities.coalesceText(m);\r\n            }\r\n        }\r\n    };\r\n\r\n    Utilities.instance_of = function (o, c) {\r\n        while (o != null) {\r\n            if (o.constructor === c) {\r\n                return true;\r\n            }\r\n            if (o === Object) {\r\n                return false;\r\n            }\r\n            o = o.constructor.superclass;\r\n        }\r\n        return false;\r\n    };\r\n\r\n    Utilities.getElementById = function (n, id) {\r\n        // Note that this does not check the DTD to check for actual\r\n        // attributes of type ID, so this may be a bit wrong.\r\n        if (n.nodeType == NodeTypes.ELEMENT_NODE) {\r\n            if (n.getAttribute(\"id\") == id\r\n                || n.getAttributeNS(null, \"id\") == id) {\r\n                return n;\r\n            }\r\n        }\r\n        for (var m = n.firstChild; m != null; m = m.nextSibling) {\r\n            var res = Utilities.getElementById(m, id);\r\n            if (res != null) {\r\n                return res;\r\n            }\r\n        }\r\n        return null;\r\n    };\r\n\r\n    // XPathException ////////////////////////////////////////////////////////////\r\n\r\n    var XPathException = (function () {\r\n        function getMessage(code, exception) {\r\n            var msg = exception ? \": \" + exception.toString() : \"\";\r\n            switch (code) {\r\n                case XPathException.INVALID_EXPRESSION_ERR:\r\n                    return \"Invalid expression\" + msg;\r\n                case XPathException.TYPE_ERR:\r\n                    return \"Type error\" + msg;\r\n            }\r\n            return null;\r\n        }\r\n\r\n        function XPathException(code, error, message) {\r\n            var err = Error.call(this, getMessage(code, error) || message);\r\n\r\n            err.code = code;\r\n            err.exception = error;\r\n\r\n            return err;\r\n        }\r\n\r\n        XPathException.prototype = Object.create(Error.prototype);\r\n        XPathException.prototype.constructor = XPathException;\r\n        XPathException.superclass = Error;\r\n\r\n        XPathException.prototype.toString = function () {\r\n            return this.message;\r\n        };\r\n\r\n        XPathException.fromMessage = function (message, error) {\r\n            return new XPathException(null, error, message);\r\n        };\r\n\r\n        XPathException.INVALID_EXPRESSION_ERR = 51;\r\n        XPathException.TYPE_ERR = 52;\r\n\r\n        return XPathException;\r\n    })();\r\n\r\n    // XPathExpression ///////////////////////////////////////////////////////////\r\n\r\n    XPathExpression.prototype = {};\r\n    XPathExpression.prototype.constructor = XPathExpression;\r\n    XPathExpression.superclass = Object.prototype;\r\n\r\n    function XPathExpression(e, r, p) {\r\n        this.xpath = p.parse(e);\r\n        this.context = new XPathContext();\r\n        this.context.namespaceResolver = new XPathNSResolverWrapper(r);\r\n    }\r\n\r\n    XPathExpression.getOwnerDocument = function (n) {\r\n        return n.nodeType === NodeTypes.DOCUMENT_NODE ? n : n.ownerDocument;\r\n    }\r\n\r\n    XPathExpression.detectHtmlDom = function (n) {\r\n        if (!n) { return false; }\r\n\r\n        var doc = XPathExpression.getOwnerDocument(n);\r\n\r\n        try {\r\n            return doc.implementation.hasFeature(\"HTML\", \"2.0\");\r\n        } catch (e) {\r\n            return true;\r\n        }\r\n    }\r\n\r\n    XPathExpression.prototype.evaluate = function (n, t, res) {\r\n        this.context.expressionContextNode = n;\r\n        // backward compatibility - no reliable way to detect whether the DOM is HTML, but\r\n        // this library has been using this method up until now, so we will continue to use it\r\n        // ONLY when using an XPathExpression\r\n        this.context.caseInsensitive = XPathExpression.detectHtmlDom(n);\r\n\r\n        var result = this.xpath.evaluate(this.context);\r\n\r\n        return new XPathResult(result, t);\r\n    }\r\n\r\n    // XPathNSResolverWrapper ////////////////////////////////////////////////////\r\n\r\n    XPathNSResolverWrapper.prototype = {};\r\n    XPathNSResolverWrapper.prototype.constructor = XPathNSResolverWrapper;\r\n    XPathNSResolverWrapper.superclass = Object.prototype;\r\n\r\n    function XPathNSResolverWrapper(r) {\r\n        this.xpathNSResolver = r;\r\n    }\r\n\r\n    XPathNSResolverWrapper.prototype.getNamespace = function (prefix, n) {\r\n        if (this.xpathNSResolver == null) {\r\n            return null;\r\n        }\r\n        return this.xpathNSResolver.lookupNamespaceURI(prefix);\r\n    };\r\n\r\n    // NodeXPathNSResolver ///////////////////////////////////////////////////////\r\n\r\n    NodeXPathNSResolver.prototype = {};\r\n    NodeXPathNSResolver.prototype.constructor = NodeXPathNSResolver;\r\n    NodeXPathNSResolver.superclass = Object.prototype;\r\n\r\n    function NodeXPathNSResolver(n) {\r\n        this.node = n;\r\n        this.namespaceResolver = new NamespaceResolver();\r\n    }\r\n\r\n    NodeXPathNSResolver.prototype.lookupNamespaceURI = function (prefix) {\r\n        return this.namespaceResolver.getNamespace(prefix, this.node);\r\n    };\r\n\r\n    // XPathResult ///////////////////////////////////////////////////////////////\r\n\r\n    XPathResult.prototype = {};\r\n    XPathResult.prototype.constructor = XPathResult;\r\n    XPathResult.superclass = Object.prototype;\r\n\r\n    function XPathResult(v, t) {\r\n        if (t == XPathResult.ANY_TYPE) {\r\n            if (v.constructor === XString) {\r\n                t = XPathResult.STRING_TYPE;\r\n            } else if (v.constructor === XNumber) {\r\n                t = XPathResult.NUMBER_TYPE;\r\n            } else if (v.constructor === XBoolean) {\r\n                t = XPathResult.BOOLEAN_TYPE;\r\n            } else if (v.constructor === XNodeSet) {\r\n                t = XPathResult.UNORDERED_NODE_ITERATOR_TYPE;\r\n            }\r\n        }\r\n        this.resultType = t;\r\n        switch (t) {\r\n            case XPathResult.NUMBER_TYPE:\r\n                this.numberValue = v.numberValue();\r\n                return;\r\n            case XPathResult.STRING_TYPE:\r\n                this.stringValue = v.stringValue();\r\n                return;\r\n            case XPathResult.BOOLEAN_TYPE:\r\n                this.booleanValue = v.booleanValue();\r\n                return;\r\n            case XPathResult.ANY_UNORDERED_NODE_TYPE:\r\n            case XPathResult.FIRST_ORDERED_NODE_TYPE:\r\n                if (v.constructor === XNodeSet) {\r\n                    this.singleNodeValue = v.first();\r\n                    return;\r\n                }\r\n                break;\r\n            case XPathResult.UNORDERED_NODE_ITERATOR_TYPE:\r\n            case XPathResult.ORDERED_NODE_ITERATOR_TYPE:\r\n                if (v.constructor === XNodeSet) {\r\n                    this.invalidIteratorState = false;\r\n                    this.nodes = v.toArray();\r\n                    this.iteratorIndex = 0;\r\n                    return;\r\n                }\r\n                break;\r\n            case XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE:\r\n            case XPathResult.ORDERED_NODE_SNAPSHOT_TYPE:\r\n                if (v.constructor === XNodeSet) {\r\n                    this.nodes = v.toArray();\r\n                    this.snapshotLength = this.nodes.length;\r\n                    return;\r\n                }\r\n                break;\r\n        }\r\n        throw new XPathException(XPathException.TYPE_ERR);\r\n    };\r\n\r\n    XPathResult.prototype.iterateNext = function () {\r\n        if (this.resultType != XPathResult.UNORDERED_NODE_ITERATOR_TYPE\r\n            && this.resultType != XPathResult.ORDERED_NODE_ITERATOR_TYPE) {\r\n            throw new XPathException(XPathException.TYPE_ERR);\r\n        }\r\n        return this.nodes[this.iteratorIndex++];\r\n    };\r\n\r\n    XPathResult.prototype.snapshotItem = function (i) {\r\n        if (this.resultType != XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE\r\n            && this.resultType != XPathResult.ORDERED_NODE_SNAPSHOT_TYPE) {\r\n            throw new XPathException(XPathException.TYPE_ERR);\r\n        }\r\n        return this.nodes[i];\r\n    };\r\n\r\n    XPathResult.ANY_TYPE = 0;\r\n    XPathResult.NUMBER_TYPE = 1;\r\n    XPathResult.STRING_TYPE = 2;\r\n    XPathResult.BOOLEAN_TYPE = 3;\r\n    XPathResult.UNORDERED_NODE_ITERATOR_TYPE = 4;\r\n    XPathResult.ORDERED_NODE_ITERATOR_TYPE = 5;\r\n    XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE = 6;\r\n    XPathResult.ORDERED_NODE_SNAPSHOT_TYPE = 7;\r\n    XPathResult.ANY_UNORDERED_NODE_TYPE = 8;\r\n    XPathResult.FIRST_ORDERED_NODE_TYPE = 9;\r\n\r\n    // DOM 3 XPath support ///////////////////////////////////////////////////////\r\n\r\n    function installDOM3XPathSupport(doc, p) {\r\n        doc.createExpression = function (e, r) {\r\n            try {\r\n                return new XPathExpression(e, r, p);\r\n            } catch (e) {\r\n                throw new XPathException(XPathException.INVALID_EXPRESSION_ERR, e);\r\n            }\r\n        };\r\n        doc.createNSResolver = function (n) {\r\n            return new NodeXPathNSResolver(n);\r\n        };\r\n        doc.evaluate = function (e, cn, r, t, res) {\r\n            if (t < 0 || t > 9) {\r\n                throw { code: 0, toString: function () { return \"Request type not supported\"; } };\r\n            }\r\n            return doc.createExpression(e, r, p).evaluate(cn, t, res);\r\n        };\r\n    };\r\n\r\n    // ---------------------------------------------------------------------------\r\n\r\n    // Install DOM 3 XPath support for the current document.\r\n    try {\r\n        var shouldInstall = true;\r\n        try {\r\n            if (document.implementation\r\n                && document.implementation.hasFeature\r\n                && document.implementation.hasFeature(\"XPath\", null)) {\r\n                shouldInstall = false;\r\n            }\r\n        } catch (e) {\r\n        }\r\n        if (shouldInstall) {\r\n            installDOM3XPathSupport(document, new XPathParser());\r\n        }\r\n    } catch (e) {\r\n    }\r\n\r\n    // ---------------------------------------------------------------------------\r\n    // exports for node.js\r\n\r\n    installDOM3XPathSupport(exports, new XPathParser());\r\n\r\n    (function () {\r\n        var parser = new XPathParser();\r\n\r\n        var defaultNSResolver = new NamespaceResolver();\r\n        var defaultFunctionResolver = new FunctionResolver();\r\n        var defaultVariableResolver = new VariableResolver();\r\n\r\n        function makeNSResolverFromFunction(func) {\r\n            return {\r\n                getNamespace: function (prefix, node) {\r\n                    var ns = func(prefix, node);\r\n\r\n                    return ns || defaultNSResolver.getNamespace(prefix, node);\r\n                }\r\n            };\r\n        }\r\n\r\n        function makeNSResolverFromObject(obj) {\r\n            return makeNSResolverFromFunction(obj.getNamespace.bind(obj));\r\n        }\r\n\r\n        function makeNSResolverFromMap(map) {\r\n            return makeNSResolverFromFunction(function (prefix) {\r\n                return map[prefix];\r\n            });\r\n        }\r\n\r\n        function makeNSResolver(resolver) {\r\n            if (resolver && typeof resolver.getNamespace === \"function\") {\r\n                return makeNSResolverFromObject(resolver);\r\n            }\r\n\r\n            if (typeof resolver === \"function\") {\r\n                return makeNSResolverFromFunction(resolver);\r\n            }\r\n\r\n            // assume prefix -> uri mapping\r\n            if (typeof resolver === \"object\") {\r\n                return makeNSResolverFromMap(resolver);\r\n            }\r\n\r\n            return defaultNSResolver;\r\n        }\r\n\r\n        /** Converts native JavaScript types to their XPath library equivalent */\r\n        function convertValue(value) {\r\n            if (value === null ||\r\n                typeof value === \"undefined\" ||\r\n                value instanceof XString ||\r\n                value instanceof XBoolean ||\r\n                value instanceof XNumber ||\r\n                value instanceof XNodeSet) {\r\n                return value;\r\n            }\r\n\r\n            switch (typeof value) {\r\n                case \"string\": return new XString(value);\r\n                case \"boolean\": return new XBoolean(value);\r\n                case \"number\": return new XNumber(value);\r\n            }\r\n\r\n            // assume node(s)\r\n            var ns = new XNodeSet();\r\n            ns.addArray([].concat(value));\r\n            return ns;\r\n        }\r\n\r\n        function makeEvaluator(func) {\r\n            return function (context) {\r\n                var args = Array.prototype.slice.call(arguments, 1).map(function (arg) {\r\n                    return arg.evaluate(context);\r\n                });\r\n                var result = func.apply(this, [].concat(context, args));\r\n                return convertValue(result);\r\n            };\r\n        }\r\n\r\n        function makeFunctionResolverFromFunction(func) {\r\n            return {\r\n                getFunction: function (name, namespace) {\r\n                    var found = func(name, namespace);\r\n                    if (found) {\r\n                        return makeEvaluator(found);\r\n                    }\r\n                    return defaultFunctionResolver.getFunction(name, namespace);\r\n                }\r\n            };\r\n        }\r\n\r\n        function makeFunctionResolverFromObject(obj) {\r\n            return makeFunctionResolverFromFunction(obj.getFunction.bind(obj));\r\n        }\r\n\r\n        function makeFunctionResolverFromMap(map) {\r\n            return makeFunctionResolverFromFunction(function (name) {\r\n                return map[name];\r\n            });\r\n        }\r\n\r\n        function makeFunctionResolver(resolver) {\r\n            if (resolver && typeof resolver.getFunction === \"function\") {\r\n                return makeFunctionResolverFromObject(resolver);\r\n            }\r\n\r\n            if (typeof resolver === \"function\") {\r\n                return makeFunctionResolverFromFunction(resolver);\r\n            }\r\n\r\n            // assume map\r\n            if (typeof resolver === \"object\") {\r\n                return makeFunctionResolverFromMap(resolver);\r\n            }\r\n\r\n            return defaultFunctionResolver;\r\n        }\r\n\r\n        function makeVariableResolverFromFunction(func) {\r\n            return {\r\n                getVariable: function (name, namespace) {\r\n                    var value = func(name, namespace);\r\n                    return convertValue(value);\r\n                }\r\n            };\r\n        }\r\n\r\n        function makeVariableResolver(resolver) {\r\n            if (resolver) {\r\n                if (typeof resolver.getVariable === \"function\") {\r\n                    return makeVariableResolverFromFunction(resolver.getVariable.bind(resolver));\r\n                }\r\n\r\n                if (typeof resolver === \"function\") {\r\n                    return makeVariableResolverFromFunction(resolver);\r\n                }\r\n\r\n                // assume map\r\n                if (typeof resolver === \"object\") {\r\n                    return makeVariableResolverFromFunction(function (name) {\r\n                        return resolver[name];\r\n                    });\r\n                }\r\n            }\r\n\r\n            return defaultVariableResolver;\r\n        }\r\n\r\n        function copyIfPresent(prop, dest, source) {\r\n            if (prop in source) { dest[prop] = source[prop]; }\r\n        }\r\n\r\n        function makeContext(options) {\r\n            var context = new XPathContext();\r\n\r\n            if (options) {\r\n                context.namespaceResolver = makeNSResolver(options.namespaces);\r\n                context.functionResolver = makeFunctionResolver(options.functions);\r\n                context.variableResolver = makeVariableResolver(options.variables);\r\n                context.expressionContextNode = options.node;\r\n                copyIfPresent('allowAnyNamespaceForNoPrefix', context, options);\r\n                copyIfPresent('isHtml', context, options);\r\n            } else {\r\n                context.namespaceResolver = defaultNSResolver;\r\n            }\r\n\r\n            return context;\r\n        }\r\n\r\n        function evaluate(parsedExpression, options) {\r\n            var context = makeContext(options);\r\n\r\n            return parsedExpression.evaluate(context);\r\n        }\r\n\r\n        var evaluatorPrototype = {\r\n            evaluate: function (options) {\r\n                return evaluate(this.expression, options);\r\n            }\r\n\r\n            , evaluateNumber: function (options) {\r\n                return this.evaluate(options).numberValue();\r\n            }\r\n\r\n            , evaluateString: function (options) {\r\n                return this.evaluate(options).stringValue();\r\n            }\r\n\r\n            , evaluateBoolean: function (options) {\r\n                return this.evaluate(options).booleanValue();\r\n            }\r\n\r\n            , evaluateNodeSet: function (options) {\r\n                return this.evaluate(options).nodeset();\r\n            }\r\n\r\n            , select: function (options) {\r\n                return this.evaluateNodeSet(options).toArray()\r\n            }\r\n\r\n            , select1: function (options) {\r\n                return this.select(options)[0];\r\n            }\r\n        };\r\n\r\n        function parse(xpath) {\r\n            var parsed = parser.parse(xpath);\r\n\r\n            return Object.create(evaluatorPrototype, {\r\n                expression: {\r\n                    value: parsed\r\n                }\r\n            });\r\n        }\r\n\r\n        exports.parse = parse;\r\n    })();\r\n\r\n    assign(\r\n        exports,\r\n        {\r\n            XPath: XPath,\r\n            XPathParser: XPathParser,\r\n            XPathResult: XPathResult,\r\n\r\n            Step: Step,\r\n            PathExpr: PathExpr,\r\n            NodeTest: NodeTest,\r\n            LocationPath: LocationPath,\r\n\r\n            OrOperation: OrOperation,\r\n            AndOperation: AndOperation,\r\n\r\n            BarOperation: BarOperation,\r\n\r\n            EqualsOperation: EqualsOperation,\r\n            NotEqualOperation: NotEqualOperation,\r\n            LessThanOperation: LessThanOperation,\r\n            GreaterThanOperation: GreaterThanOperation,\r\n            LessThanOrEqualOperation: LessThanOrEqualOperation,\r\n            GreaterThanOrEqualOperation: GreaterThanOrEqualOperation,\r\n\r\n            PlusOperation: PlusOperation,\r\n            MinusOperation: MinusOperation,\r\n            MultiplyOperation: MultiplyOperation,\r\n            DivOperation: DivOperation,\r\n            ModOperation: ModOperation,\r\n            UnaryMinusOperation: UnaryMinusOperation,\r\n\r\n            FunctionCall: FunctionCall,\r\n            VariableReference: VariableReference,\r\n\r\n            XPathContext: XPathContext,\r\n\r\n            XNodeSet: XNodeSet,\r\n            XBoolean: XBoolean,\r\n            XString: XString,\r\n            XNumber: XNumber,\r\n\r\n            NamespaceResolver: NamespaceResolver,\r\n            FunctionResolver: FunctionResolver,\r\n            VariableResolver: VariableResolver,\r\n\r\n            Utilities: Utilities,\r\n        }\r\n    );\r\n\r\n    // helper\r\n    exports.select = function (e, doc, single) {\r\n        return exports.selectWithResolver(e, doc, null, single);\r\n    };\r\n\r\n    exports.useNamespaces = function (mappings) {\r\n        var resolver = {\r\n            mappings: mappings || {},\r\n            lookupNamespaceURI: function (prefix) {\r\n                return this.mappings[prefix];\r\n            }\r\n        };\r\n\r\n        return function (e, doc, single) {\r\n            return exports.selectWithResolver(e, doc, resolver, single);\r\n        };\r\n    };\r\n\r\n    exports.selectWithResolver = function (e, doc, resolver, single) {\r\n        var expression = new XPathExpression(e, resolver, new XPathParser());\r\n        var type = XPathResult.ANY_TYPE;\r\n\r\n        var result = expression.evaluate(doc, type, null);\r\n\r\n        if (result.resultType == XPathResult.STRING_TYPE) {\r\n            result = result.stringValue;\r\n        }\r\n        else if (result.resultType == XPathResult.NUMBER_TYPE) {\r\n            result = result.numberValue;\r\n        }\r\n        else if (result.resultType == XPathResult.BOOLEAN_TYPE) {\r\n            result = result.booleanValue;\r\n        }\r\n        else {\r\n            result = result.nodes;\r\n            if (single) {\r\n                result = result[0];\r\n            }\r\n        }\r\n\r\n        return result;\r\n    };\r\n\r\n    exports.select1 = function (e, doc) {\r\n        return exports.select(e, doc, true);\r\n    };\r\n\r\n    var isArrayOfNodes = function (value) {\r\n        return Array.isArray(value) && value.every(isNodeLike);\r\n    };\r\n\r\n    var isNodeOfType = function (type) {\r\n        return function (value) {\r\n            return isNodeLike(value) && value.nodeType === type;\r\n        };\r\n    };\r\n\r\n    assign(\r\n        exports,\r\n        {\r\n            isNodeLike: isNodeLike,\r\n            isArrayOfNodes: isArrayOfNodes,\r\n            isElement: isNodeOfType(NodeTypes.ELEMENT_NODE),\r\n            isAttribute: isNodeOfType(NodeTypes.ATTRIBUTE_NODE),\r\n            isTextNode: isNodeOfType(NodeTypes.TEXT_NODE),\r\n            isCDATASection: isNodeOfType(NodeTypes.CDATA_SECTION_NODE),\r\n            isProcessingInstruction: isNodeOfType(NodeTypes.PROCESSING_INSTRUCTION_NODE),\r\n            isComment: isNodeOfType(NodeTypes.COMMENT_NODE),\r\n            isDocumentNode: isNodeOfType(NodeTypes.DOCUMENT_NODE),\r\n            isDocumentTypeNode: isNodeOfType(NodeTypes.DOCUMENT_TYPE_NODE),\r\n            isDocumentFragment: isNodeOfType(NodeTypes.DOCUMENT_FRAGMENT_NODE),\r\n        }\r\n    );\r\n    // end non-node wrapper\r\n})(xpath);\r\n","import type {\n\tIAprimoIconMetadata,\n\tIAprimoImageMetadata,\n\tIAprimoOriginalImageMetadata,\n} from '../../../builder-oem/src/components/aprimo-dam/types';\nimport type { LinkFieldSet } from '../embedded-link';\nimport { LinkTarget } from '../embedded-link';\nimport type { PesImage } from '../types/pes';\n\nexport const BUILDER_API_V3_CONTENT = 'https://cdn.builder.io/api/v3/content';\n\nexport const EXAMPLE_VIDEO_LINK_EMBEDDED = {\n\tlinkType: 'videoLink',\n\ttarget: '_blank',\n\tlinkData: {\n\t\turl: 'https://www.youtube.com/watch?v=5iKMUPdfF0s',\n\t},\n\tresolvedUrl: 'https://www.youtube.com/watch?v=5iKMUPdfF0s',\n\tinvalid: false,\n};\n\nexport const EXAMPLE_LINK_EMBEDDED: LinkFieldSet = {\n\tlinkType: 'externalLink',\n\ttarget: LinkTarget.BLANK,\n\tlinkData: {\n\t\turl: 'https://www.se.com',\n\t},\n\tresolvedUrl: 'https://www.se.com',\n\tinvalid: false,\n} as const;\n\nexport const EXAMPLE_APRIMO_ICON: IAprimoIconMetadata = {\n\tid: '5040325ea0d94820be10b1a10104a341',\n\toriginalImageDetails: {\n\t\t'Expiration Date': '03/07/2028',\n\t},\n\ticonUri:\n\t\t'https://www.se.com/dam-assets/T5FksKZn8Roxg8yIQQzNMQ/nJOG8xfDLR_Yks5jYZtVqg/Original%20file/segment_building_small_green.svg',\n\tisLoadingResourceToAkamaiCdn: false,\n};\n\nexport const EXAMPLE_APRIMO_IMAGE: IAprimoImageMetadata = {\n\tid: '0dde2580e248499c86c9afdd01413425',\n\tversion: 1,\n\toriginalImageDetails: {\n\t\t'Expiration Date': '2024-02-14T16:35:59.087',\n\t},\n\tcropsDetails: {\n\t\thorizontal: {\n\t\t\tfileName: 'GettyImages-1319076271_BUILDER.IOHorizontal1920540.webp',\n\t\t\trenditionName: 'BUILDER.IO|Horizontal|1920|540',\n\t\t\turi: 'https://www.se.com/dam-assets/CS4gu-c_1CvflBIs3vMdPA/_xLvtaJWXhjKiRXU4j9Ojg/BUILDER.IO%7CHorizontal%7C1920%7C540/GettyImages-1319076271_BUILDER.IOHorizontal1920540.webp',\n\t\t\tid: '050f54369dd94cfe887354429f544921',\n\t\t\tisLoadingResourceToAkamaiCdn: false,\n\t\t\tfileSize: 201318,\n\t\t},\n\t\tsquare: {\n\t\t\tfileName: 'GettyImages-1319076271_BUILDER.IOSquare540540.webp',\n\t\t\trenditionName: 'BUILDER.IO|Square|540|540',\n\t\t\turi: 'https://www.se.com/dam-assets/CS4gu-c_1CvflBIs3vMdPA/_xLvtaJWXhjKiRXU4j9Ojg/BUILDER.IO%7CSquare%7C540%7C540/GettyImages-1319076271_BUILDER.IOSquare540540.webp',\n\t\t\tid: 'cf4ede966f854131bd3358ca5adbafec',\n\t\t\tisLoadingResourceToAkamaiCdn: false,\n\t\t\tfileSize: 54866,\n\t\t},\n\t\trectangle: {\n\t\t\tfileName: 'GettyImages-1319076271_BUILDER.IOSquare540540.webp',\n\t\t\trenditionName: 'BUILDER.IO|Square|540|540',\n\t\t\turi: 'https://www.se.com/dam-assets/CS4gu-c_1CvflBIs3vMdPA/_xLvtaJWXhjKiRXU4j9Ojg/BUILDER.IO%7CSquare%7C540%7C540/GettyImages-1319076271_BUILDER.IOSquare540540.webp',\n\t\t\tid: 'cf4ede966f854131bd3358ca5adbafec',\n\t\t\tisLoadingResourceToAkamaiCdn: false,\n\t\t\tfileSize: 54866,\n\t\t},\n\t\toriginal: {\n\t\t\tfileName: 'GettyImages-1319076271_BUILDER.IOSquare540540.webp',\n\t\t\trenditionName: 'Original',\n\t\t\turi: 'https://www.se.com/dam-assets/CS4gu-c_1CvflBIs3vMdPA/_xLvtaJWXhjKiRXU4j9Ojg/BUILDER.IO%7CSquare%7C540%7C540/GettyImages-1319076271_BUILDER.IOSquare540540.webp',\n\t\t\tid: 'cf4ede966f854131bd3358ca5adbafec',\n\t\t\tisLoadingResourceToAkamaiCdn: false,\n\t\t\tfileSize: 54866,\n\t\t},\n\t},\n\taltText: 'aprimo image alt text',\n};\n\nexport const EXAMPLE_VIDEO_FILE = {\n\tvideoUri:\n\t\t'https://www.se.com/dam-assets/616D-iicVvvCeswMR2ZmyA/AjgVRXpUyEne99tJHKSAyg/Original%20file/Train_02.mp4',\n\tassetId: '33fe0018a84d4da0b1c7b1e900fe9e89',\n\tadditionalFileId: null,\n\tstillImageUri:\n\t\t'https://s1.sb.previews.aprimo.com/schneiderelectric-sb1/2024/9/12_15/eaa7829d-67e7-463c-a75e-b1e900febbbf_92829ba4-aab2-4028-b739-f500c9c88d09_Prev.jpg?skoid=05c3646f-fde6-4deb-acce-3f9058246570&sktid=d05954c1-36eb-40b2-8f23-7f2ce352faf6&skt=2024-09-24T08%3A12%3A18Z&ske=2024-10-01T08%3A12%3A18Z&sks=b&skv=2021-10-04&sv=2021-10-04&st=2024-09-24T08%3A00%3A00Z&se=2024-10-01T10%3A00%3A00Z&sr=b&sp=r&sig=QyFBRGtoV0szVh2%2Fg4jV8QbdTxn2rFejhDQoe%2FvLa7M%3D',\n\toriginalVideoMetadata: {\n\t\tid: 'a1e289b95cd444ce88c8b1e900fe9faa',\n\t\turi: 'https://www.se.com/dam-assets/616D-iicVvvCeswMR2ZmyA/AjgVRXpUyEne99tJHKSAyg/Original%20file/Train_02.mp4',\n\t\trecordId: '33fe0018a84d4da0b1c7b1e900fe9e89',\n\t\trenditionId: 'a1e289b95cd444ce88c8b1e900fe9faa',\n\t\tversionLabel: '',\n\t\tversionNumber: 1,\n\t\tfileName: 'Train_02.mp4',\n\t\tfileCreatedOn: '2024-09-12T15:27:02Z',\n\t\tfileModifiedOn: '2024-09-12T15:27:02Z',\n\t\tfileSize: 1854555,\n\t\tfileExtension: 'mp4',\n\t\tcomment: '',\n\t\tcrc32: -1348835967,\n\t\tisLatest: true,\n\t},\n};\n\nexport const EXAMPLE_APRIMO_ORIGINAL_IMAGE: IAprimoOriginalImageMetadata = {\n\tid: '0dde2580e248499c86c9afdd01413425',\n\tversion: 1,\n\toriginalImageDetails: {\n\t\t'Expiration Date': '2024-02-14T16:35:59.087',\n\t},\n\tcropsDetails: {\n\t\toriginal: {\n\t\t\tfileName: 'GettyImages-1319076271_BUILDER.IOSquare540540.webp',\n\t\t\trenditionName: 'Original',\n\t\t\turi: 'https://www.se.com/dam-assets/CS4gu-c_1CvflBIs3vMdPA/_xLvtaJWXhjKiRXU4j9Ojg/BUILDER.IO%7CSquare%7C540%7C540/GettyImages-1319076271_BUILDER.IOSquare540540.webp',\n\t\t\tid: 'cf4ede966f854131bd3358ca5adbafec',\n\t\t\tisLoadingResourceToAkamaiCdn: false,\n\t\t},\n\t},\n\taltText: 'aprimo image alt text',\n};\n\nexport const EXAMPLE_PES_IMAGE: PesImage = {\n\tpesId: '',\n\tpicture: undefined,\n};\n\nexport const EXAMPLE_ICON_IMAGE: IAprimoIconMetadata = {\n\tid: '5e18e7baf1db4b2c9462b1230106f494',\n\toriginalImageDetails: { 'Expiration Date': '27.02.2028' },\n\ticonUri:\n\t\t'https://www.se.com/dam-assets/MGD879vBVUcYqPoPqTue-g/q66LdZxH_LbpzJSDoHVa-A/Original%20file/wind_turbine_green.svg',\n\tisLoadingResourceToAkamaiCdn: false,\n};\n\nexport const EXAMPLE_APRIMO_VIDEO = {\n\taprimoOptions: {\n\t\tstillImageUri:\n\t\t\t'https://s1.sb.previews.aprimo.com/schneiderelectric-sb1/2023/10/27_16/c50abfb0-54ca-4a8e-b2bb-b0a801152915_584005fd-afcb-4a7a-99ff-d5edcfea91e4_Prev.jpg?skoid=05c3646f-fde6-4deb-acce-3f9058246570&sktid=d05954c1-36eb-40b2-8f23-7f2ce352faf6&skt=2024-10-31T15%3A17%3A26Z&ske=2024-11-07T15%3A17%3A26Z&sks=b&skv=2024-11-04&sv=2024-11-04&st=2024-10-31T14%3A00%3A00Z&se=2024-11-07T16%3A00%3A00Z&sr=b&sp=r&sig=2EpMvU8QCFaG8NvhoYrpn%2FsGeozbmULctkkpg%2BrNCkc%3D',\n\t\tvideoUri:\n\t\t\t'https://www.se.com/dam-assets/v1F4Bv7m86_aLx71uMz2tw/z0X_kM7jIi9SiZidB5XM8Q/Original%20file/Train.mp4',\n\t},\n\tuploadDate: new Date(Date.now()).toString(),\n};\n\nexport const EXTERNAL_IMAGE_URL_PATTERN = `^(https?:\\/\\/(?:www\\.|(?!www))[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\\.[^\\s]{2,}|www\\.[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\\.[^\\s]{2,}|https?:\\/\\/(?:www\\.|(?!www))[a-zA-Z0-9]+\\.[^\\s]{2,}|www\\.[a-zA-Z0-9]+\\.[^\\s]{2,})|([0-9]+\\s{0,1}%{0,1})$`;\n"],"names":["LinkTarget","find","list","predicate","ac","i","item","freeze","object","oc","assign","target","source","key","MIME_TYPE","value","NAMESPACE","uri","conventions","require$$0","notEmptyString","input","splitOnASCIIWhitespace","orderedSetReducer","current","element","toOrderedSet","arrayIncludes","copy","src","dest","p","_extends","Class","Super","pt","t","NodeType","ELEMENT_NODE","ATTRIBUTE_NODE","TEXT_NODE","CDATA_SECTION_NODE","ENTITY_REFERENCE_NODE","ENTITY_NODE","PROCESSING_INSTRUCTION_NODE","COMMENT_NODE","DOCUMENT_NODE","DOCUMENT_TYPE_NODE","DOCUMENT_FRAGMENT_NODE","NOTATION_NODE","ExceptionCode","ExceptionMessage","HIERARCHY_REQUEST_ERR","NOT_FOUND_ERR","INUSE_ATTRIBUTE_ERR","DOMException","code","message","error","NodeList","index","isHTML","nodeFilter","buf","serializeToString","LiveNodeList","node","refresh","_updateLiveList","inc","ls","__set__","NamedNodeMap","_findNodeIndex","_addNamedNode","el","newAttr","oldAttr","doc","_onRemoveAttribute","_onAddAttribute","_removeNamedNode","attr","lastIndex","namespaceURI","localName","DOMImplementation","feature","version","qualifiedName","doctype","Document","root","publicId","systemId","DocumentType","Node","newChild","refChild","_insertBefore","oldChild","assertPreReplacementValidityInDocument","_removeChild","deep","cloneNode","child","next","map","n","prefix","_xmlEncoder","c","_visitNode","callback","ns","remove","_onUpdateChild","cs","parentNode","previous","hasValidParentNodeType","hasInsertableNodeType","isElementNode","isTextNode","isDocTypeNode","isElementInsertionPossible","parentChildNodes","docTypeNode","isElementReplacementPossible","hasElementChildThatIsNotChild","assertPreInsertionValidity1to5","parent","assertPreInsertionValidityInDocument","nodeChildNodes","nodeChildElements","parentElementChild","_inDocumentAssertion","cp","newFirst","newLast","pre","_appendSingleChild","importedNode","importNode","id","rtv","classNames","classNamesSet","base","nodeClassNames","matches","nodeClassNamesSet","tagName","Element","attrs","DocumentFragment","data","Text","Comment","CDATASection","ProcessingInstruction","name","Attr","EntityReference","pl","old","CharacterData","offset","count","text","start","end","newText","newNode","Notation","Entity","XMLSerializer","isHtml","nodeSerializeToString","refNode","visibleNamespaces","needNamespaceDefine","addSerializedAttribute","len","nodeName","prefixedNodeName","defaultNS","ai","nsi","namespace","pubid","sysid","sub","node2","v","attrs2","getTextContent","dom","exports","nameStartChar","nameChar","tagNamePattern","S_TAG","S_ATTR","S_ATTR_SPACE","S_EQ","S_ATTR_NOQUOT_VALUE","S_ATTR_END","S_TAG_SPACE","S_TAG_CLOSE","ParseError","locator","XMLReader","defaultNSMap","entityMap","domBuilder","_copy","parse","defaultNSMapCopy","errorHandler","fixedFromCharCode","surrogate1","surrogate2","entityReplacer","a","k","appendText","xt","position","m","lineEnd","linePattern","lineStart","parseStack","closeMap","tagStart","config","localNSMap","endMatch","endIgnoreCaseMach","parseInstruction","parseDCC","ElementAttributes","currentNSMap","parseElementStartPart","fixSelfClosed","locator2","copyLocator","appendElement","parseHtmlSpecialContent","e","f","addAttribute","qname","startIndex","attrName","s","qName","nsp","nsPrefix","elStartEnd","elEndStart","pos","matchs","split","lastMatch","match","reg","sax","require$$1","entities","require$$2","require$$3","normalizeLineEndings","DOMParser","options","mimeType","DOMHandler","buildErrorHandler","normalize","errorImpl","isCallback","build","fn","msg","_locator","ins","ch","length","chars","_toString","charNode","comm","impl","dt","l","hander","domParser","xpath","NAMESPACE_NODE_NODETYPE","isNil","x","isValidNodeType","nodeType","isNodeLike","curry","func","slice","totalargs","partial","args","forEach","xs","reduce","seed","acc","mapped","filter","filtered","includes","values","always","toString","join","wrap","pref","suf","str","prototypeConcat","sortNodes","nodes","reverse","XNodeSet","sorted","MAX_ARGUMENT_LENGTH","flatten","arr","result","chunk","varArgs","to","nextSource","nextKey","NodeTypes","XPathParser","rhs","OrOperation","AndOperation","EqualsOperation","NotEqualOperation","LessThanOperation","GreaterThanOperation","LessThanOrEqualOperation","GreaterThanOrEqualOperation","PlusOperation","MinusOperation","MultiplyOperation","DivOperation","ModOperation","UnaryMinusOperation","BarOperation","PathExpr","Step","NodeTest","Utilities","XString","XNumber","FunctionCall","LocationPath","VariableReference","s1","types","number","delimiter","literal","XPathException","last","res","tokenPos","state","tokenType","tokenValue","num","s_","XPath","setIfUnset","obj","prop","Expression","UnaryOperation","BinaryOperation","lhs","b","filterPreds","locpath","findRoot","applyPredicates","predicates","ctx","inNodes","pred","xpc","firstNode","ownerDoc","getPrefixForNamespaceNode","attrNode","nm","step","newNodes","nnm","st","XPathNamespace","outer","applyStepWithPredicates","REVERSE_AXES","applyStepToNodes","context","steps","locationPath","startNodes","XPathContext","filterResult","filterStr","elts","elt","j","an","abs","axis","nodetest","preds","type","members","ctor","newType","nodeTypes","stringVal","nNamespace","nLocalName","nameParts","parts","FunctionResolver","Operators","r","XBoolean","padSmallNumber","numberStr","exponent","padLargeNumber","zerosToAppend","strValue","AVLTree","ldepth","rdepth","lldepth","lrdepth","rrdepth","rldepth","nodeBefore","rightBefore","leftBefore","nodeOrder","n1","n2","cpos","d1","d2","m1","m2","n1Par","n2Par","n1isAttr","isAttributeLike","n2isAttr","cn","n1Compare","n2Compare","o","ret","nt","self","oInvert","lop","rop","vr","nr","fr","VariableResolver","NamespaceResolver","newProps","ln","thisArg","Functions","aname","ids","eNode","s2","eValue","eFrom","eTo","from","cMap","lang","val","qn","useDefault","first","del","getMessage","exception","err","XPathExpression","XPathNSResolverWrapper","XPathResult","NodeXPathNSResolver","installDOM3XPathSupport","shouldInstall","parser","defaultNSResolver","defaultFunctionResolver","defaultVariableResolver","makeNSResolverFromFunction","makeNSResolverFromObject","makeNSResolverFromMap","makeNSResolver","resolver","convertValue","makeEvaluator","arg","makeFunctionResolverFromFunction","found","makeFunctionResolverFromObject","makeFunctionResolverFromMap","makeFunctionResolver","makeVariableResolverFromFunction","makeVariableResolver","copyIfPresent","makeContext","evaluate","parsedExpression","evaluatorPrototype","parsed","single","mappings","expression","isArrayOfNodes","isNodeOfType","EXAMPLE_VIDEO_LINK_EMBEDDED","EXAMPLE_LINK_EMBEDDED","EXAMPLE_APRIMO_ICON","EXAMPLE_APRIMO_IMAGE","EXAMPLE_VIDEO_FILE","EXAMPLE_APRIMO_ORIGINAL_IMAGE","EXAMPLE_PES_IMAGE","EXAMPLE_APRIMO_VIDEO","EXTERNAL_IMAGE_URL_PATTERN"],"mappings":"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ACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,sCACR,EAEIA,EAAY,kBAAoB,CAC5B,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,wCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,wCACA,wCACA,wCACA,wCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,uCACA,4DACA,uCACA,uCACA,uCACA,sCACR,EAEIA,EAAY,UAAY,CACpB,gCACA,gCACA,gCACA,gCACA,gCACA,gCACA,gCACA,gCACA,gCACA,gCACA,gCACA,gCACA,gCACA,gCACA,gCACA,gCACA,gCACA,gCACA,gCACA,gCACA,gCACA,gCACA,gCACA,gCACA,gCACA,gCACA,gCACA,gCACA,gCACA,gCACA,gCACA,gCACA,gCACA,gCACA,gCACA,gCACA,gCACA,gCACA,gCACA,gCACA,gCACA,gCACA,gCACA,gCACA,gCACA,gCACA,gCACA,gCACA,gCACA,gCACA,gCACA,gCACA,gCACA,gCACA,gCACA,gCACA,gCACA,gCACA,gCACA,gCACA,gCACA,gCACA,gCACA,gCAC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pBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MACLA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MACLA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MACLA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MACLA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MACLA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MACLA,GAAK,MACLA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MACLA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MACLA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MACLA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MACLA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MACLA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MACLA,GAAK,MACLA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MACLA,GAAK,MACLA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MACLA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MACLA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MACLA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MACLA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MACLA,GAAK,MACLA,GAAK,MACLA,GAAK,MACLA,GAAK,MACLA,GAAK,MACLA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MACLA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MACLA,GAAK,MACLA,GAAK,MACLA,GAAK,MACLA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAAUA,GAAK,MACpBA,GAAK,MAC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","x_google_ignoreList":[1,2,3,4,5,6]}