{"version":3,"file":"capsule-lint.umd.cjs","sources":["../node_modules/.pnpm/htmlhint@1.1.4/node_modules/htmlhint/dist/core/htmlparser.js","../node_modules/.pnpm/htmlhint@1.1.4/node_modules/htmlhint/dist/core/reporter.js","../node_modules/.pnpm/htmlhint@1.1.4/node_modules/htmlhint/dist/core/rules/alt-require.js","../node_modules/.pnpm/htmlhint@1.1.4/node_modules/htmlhint/dist/core/rules/attr-lowercase.js","../node_modules/.pnpm/htmlhint@1.1.4/node_modules/htmlhint/dist/core/rules/attr-sorted.js","../node_modules/.pnpm/htmlhint@1.1.4/node_modules/htmlhint/dist/core/rules/attr-no-duplication.js","../node_modules/.pnpm/htmlhint@1.1.4/node_modules/htmlhint/dist/core/rules/attr-unsafe-chars.js","../node_modules/.pnpm/htmlhint@1.1.4/node_modules/htmlhint/dist/core/rules/attr-value-double-quotes.js","../node_modules/.pnpm/htmlhint@1.1.4/node_modules/htmlhint/dist/core/rules/attr-value-not-empty.js","../node_modules/.pnpm/htmlhint@1.1.4/node_modules/htmlhint/dist/core/rules/attr-value-single-quotes.js","../node_modules/.pnpm/htmlhint@1.1.4/node_modules/htmlhint/dist/core/rules/attr-whitespace.js","../node_modules/.pnpm/htmlhint@1.1.4/node_modules/htmlhint/dist/core/rules/doctype-first.js","../node_modules/.pnpm/htmlhint@1.1.4/node_modules/htmlhint/dist/core/rules/doctype-html5.js","../node_modules/.pnpm/htmlhint@1.1.4/node_modules/htmlhint/dist/core/rules/head-script-disabled.js","../node_modules/.pnpm/htmlhint@1.1.4/node_modules/htmlhint/dist/core/rules/href-abs-or-rel.js","../node_modules/.pnpm/htmlhint@1.1.4/node_modules/htmlhint/dist/core/rules/html-lang-require.js","../node_modules/.pnpm/htmlhint@1.1.4/node_modules/htmlhint/dist/core/rules/id-class-ad-disabled.js","../node_modules/.pnpm/htmlhint@1.1.4/node_modules/htmlhint/dist/core/rules/id-class-value.js","../node_modules/.pnpm/htmlhint@1.1.4/node_modules/htmlhint/dist/core/rules/id-unique.js","../node_modules/.pnpm/htmlhint@1.1.4/node_modules/htmlhint/dist/core/rules/inline-script-disabled.js","../node_modules/.pnpm/htmlhint@1.1.4/node_modules/htmlhint/dist/core/rules/inline-style-disabled.js","../node_modules/.pnpm/htmlhint@1.1.4/node_modules/htmlhint/dist/core/rules/input-requires-label.js","../node_modules/.pnpm/htmlhint@1.1.4/node_modules/htmlhint/dist/core/rules/script-disabled.js","../node_modules/.pnpm/htmlhint@1.1.4/node_modules/htmlhint/dist/core/rules/space-tab-mixed-disabled.js","../node_modules/.pnpm/htmlhint@1.1.4/node_modules/htmlhint/dist/core/rules/spec-char-escape.js","../node_modules/.pnpm/htmlhint@1.1.4/node_modules/htmlhint/dist/core/rules/src-not-empty.js","../node_modules/.pnpm/htmlhint@1.1.4/node_modules/htmlhint/dist/core/rules/style-disabled.js","../node_modules/.pnpm/htmlhint@1.1.4/node_modules/htmlhint/dist/core/rules/tag-pair.js","../node_modules/.pnpm/htmlhint@1.1.4/node_modules/htmlhint/dist/core/rules/tag-self-close.js","../node_modules/.pnpm/htmlhint@1.1.4/node_modules/htmlhint/dist/core/rules/empty-tag-not-self-closed.js","../node_modules/.pnpm/htmlhint@1.1.4/node_modules/htmlhint/dist/core/rules/tagname-lowercase.js","../node_modules/.pnpm/htmlhint@1.1.4/node_modules/htmlhint/dist/core/rules/tagname-specialchars.js","../node_modules/.pnpm/htmlhint@1.1.4/node_modules/htmlhint/dist/core/rules/title-require.js","../node_modules/.pnpm/htmlhint@1.1.4/node_modules/htmlhint/dist/core/rules/tags-check.js","../node_modules/.pnpm/htmlhint@1.1.4/node_modules/htmlhint/dist/core/rules/attr-no-unnecessary-whitespace.js","../node_modules/.pnpm/htmlhint@1.1.4/node_modules/htmlhint/dist/core/rules/index.js","../node_modules/.pnpm/htmlhint@1.1.4/node_modules/htmlhint/dist/core/core.js","../src/capsule.config.ts","../src/lib/EventTree.ts","../src/rules/body-no-duplicates.ts","../src/parser.ts","../src/rules/freemarker-tags.ts","../src/rules/head-body-descendents-html.ts","../src/rules/head-no-duplicates.ts","../src/rules/head-valid-children.ts","../src/rules/html-no-duplicates.ts","../src/rules/html-root-node.ts","../src/rules/html-valid-children.ts","../src/rules/html-valid-children-order.ts","../src/rules/img-src-required.ts","../src/rules/invalid-attribute-char.ts","../src/rules/nested-paragraphs.ts","../src/rules/no-entities-in-attributes.ts","../src/rules/special-char-escape.ts","../src/rules/tag-pair.ts","../src/rules/valid-path-format.ts","../src/rules/valid-style-attrs.ts","../src/rules/index.ts","../src/index.ts"],"sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nclass HTMLParser {\n    constructor() {\n        this._listeners = {};\n        this._mapCdataTags = this.makeMap('script,style');\n        this._arrBlocks = [];\n        this.lastEvent = null;\n    }\n    makeMap(str) {\n        const obj = {};\n        const items = str.split(',');\n        for (let i = 0; i < items.length; i++) {\n            obj[items[i]] = true;\n        }\n        return obj;\n    }\n    parse(html) {\n        const mapCdataTags = this._mapCdataTags;\n        const regTag = /<(?:\\/([^\\s>]+)\\s*|!--([\\s\\S]*?)--|!([^>]*?)|([\\w\\-:]+)((?:\\s+[^\\s\"'>\\/=\\x00-\\x0F\\x7F\\x80-\\x9F]+(?:\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s\"'>]*))?)*?)\\s*(\\/?))>/g;\n        const regAttr = /\\s*([^\\s\"'>\\/=\\x00-\\x0F\\x7F\\x80-\\x9F]+)(?:\\s*=\\s*(?:(\")([^\"]*)\"|(')([^']*)'|([^\\s\"'>]*)))?/g;\n        const regLine = /\\r?\\n/g;\n        let match;\n        let matchIndex;\n        let lastIndex = 0;\n        let tagName;\n        let arrAttrs;\n        let tagCDATA = null;\n        let attrsCDATA;\n        let arrCDATA = [];\n        let lastCDATAIndex = 0;\n        let text;\n        let lastLineIndex = 0;\n        let line = 1;\n        const arrBlocks = this._arrBlocks;\n        this.fire('start', {\n            pos: 0,\n            line: 1,\n            col: 1,\n        });\n        const isMapCdataTagsRequired = () => {\n            const attrType = arrAttrs.find((attr) => attr.name === 'type') || {\n                value: '',\n            };\n            return (mapCdataTags[tagName] &&\n                attrType.value.indexOf('text/ng-template') === -1);\n        };\n        const saveBlock = (type, raw, pos, data) => {\n            const col = pos - lastLineIndex + 1;\n            if (data === undefined) {\n                data = {};\n            }\n            data.raw = raw;\n            data.pos = pos;\n            data.line = line;\n            data.col = col;\n            arrBlocks.push(data);\n            this.fire(type, data);\n            while (regLine.exec(raw)) {\n                line++;\n                lastLineIndex = pos + regLine.lastIndex;\n            }\n        };\n        while ((match = regTag.exec(html))) {\n            matchIndex = match.index;\n            if (matchIndex > lastIndex) {\n                text = html.substring(lastIndex, matchIndex);\n                if (tagCDATA) {\n                    arrCDATA.push(text);\n                }\n                else {\n                    saveBlock('text', text, lastIndex);\n                }\n            }\n            lastIndex = regTag.lastIndex;\n            if ((tagName = match[1])) {\n                if (tagCDATA && tagName === tagCDATA) {\n                    text = arrCDATA.join('');\n                    saveBlock('cdata', text, lastCDATAIndex, {\n                        tagName: tagCDATA,\n                        attrs: attrsCDATA,\n                    });\n                    tagCDATA = null;\n                    attrsCDATA = undefined;\n                    arrCDATA = [];\n                }\n                if (!tagCDATA) {\n                    saveBlock('tagend', match[0], matchIndex, {\n                        tagName: tagName,\n                    });\n                    continue;\n                }\n            }\n            if (tagCDATA) {\n                arrCDATA.push(match[0]);\n            }\n            else {\n                if ((tagName = match[4])) {\n                    arrAttrs = [];\n                    const attrs = match[5];\n                    let attrMatch;\n                    let attrMatchCount = 0;\n                    while ((attrMatch = regAttr.exec(attrs))) {\n                        const name = attrMatch[1];\n                        const quote = attrMatch[2]\n                            ? attrMatch[2]\n                            : attrMatch[4]\n                                ? attrMatch[4]\n                                : '';\n                        const value = attrMatch[3]\n                            ? attrMatch[3]\n                            : attrMatch[5]\n                                ? attrMatch[5]\n                                : attrMatch[6]\n                                    ? attrMatch[6]\n                                    : '';\n                        arrAttrs.push({\n                            name: name,\n                            value: value,\n                            quote: quote,\n                            index: attrMatch.index,\n                            raw: attrMatch[0],\n                        });\n                        attrMatchCount += attrMatch[0].length;\n                    }\n                    if (attrMatchCount === attrs.length) {\n                        saveBlock('tagstart', match[0], matchIndex, {\n                            tagName: tagName,\n                            attrs: arrAttrs,\n                            close: match[6],\n                        });\n                        if (isMapCdataTagsRequired()) {\n                            tagCDATA = tagName;\n                            attrsCDATA = arrAttrs.concat();\n                            arrCDATA = [];\n                            lastCDATAIndex = lastIndex;\n                        }\n                    }\n                    else {\n                        saveBlock('text', match[0], matchIndex);\n                    }\n                }\n                else if (match[2] || match[3]) {\n                    saveBlock('comment', match[0], matchIndex, {\n                        content: match[2] || match[3],\n                        long: match[2] ? true : false,\n                    });\n                }\n            }\n        }\n        if (html.length > lastIndex) {\n            text = html.substring(lastIndex, html.length);\n            saveBlock('text', text, lastIndex);\n        }\n        this.fire('end', {\n            pos: lastIndex,\n            line: line,\n            col: html.length - lastLineIndex + 1,\n        });\n    }\n    addListener(types, listener) {\n        const _listeners = this._listeners;\n        const arrTypes = types.split(/[,\\s]/);\n        let type;\n        for (let i = 0, l = arrTypes.length; i < l; i++) {\n            type = arrTypes[i];\n            if (_listeners[type] === undefined) {\n                _listeners[type] = [];\n            }\n            _listeners[type].push(listener);\n        }\n    }\n    fire(type, data) {\n        if (data === undefined) {\n            data = {};\n        }\n        data.type = type;\n        let listeners = [];\n        const listenersType = this._listeners[type];\n        const listenersAll = this._listeners['all'];\n        if (listenersType !== undefined) {\n            listeners = listeners.concat(listenersType);\n        }\n        if (listenersAll !== undefined) {\n            listeners = listeners.concat(listenersAll);\n        }\n        const lastEvent = this.lastEvent;\n        if (lastEvent !== null) {\n            delete lastEvent['lastEvent'];\n            data.lastEvent = lastEvent;\n        }\n        this.lastEvent = data;\n        for (let i = 0, l = listeners.length; i < l; i++) {\n            listeners[i].call(this, data);\n        }\n    }\n    removeListener(type, listener) {\n        const listenersType = this._listeners[type];\n        if (listenersType !== undefined) {\n            for (let i = 0, l = listenersType.length; i < l; i++) {\n                if (listenersType[i] === listener) {\n                    listenersType.splice(i, 1);\n                    break;\n                }\n            }\n        }\n    }\n    fixPos(event, index) {\n        const text = event.raw.substr(0, index);\n        const arrLines = text.split(/\\r?\\n/);\n        const lineCount = arrLines.length - 1;\n        let line = event.line;\n        let col;\n        if (lineCount > 0) {\n            line += lineCount;\n            col = arrLines[lineCount].length + 1;\n        }\n        else {\n            col = event.col + index;\n        }\n        return {\n            line: line,\n            col: col,\n        };\n    }\n    getMapAttrs(arrAttrs) {\n        const mapAttrs = {};\n        let attr;\n        for (let i = 0, l = arrAttrs.length; i < l; i++) {\n            attr = arrAttrs[i];\n            mapAttrs[attr.name] = attr.value;\n        }\n        return mapAttrs;\n    }\n}\nexports.default = HTMLParser;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHRtbHBhcnNlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb3JlL2h0bWxwYXJzZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUF3QkEsTUFBcUIsVUFBVTtJQU83QjtRQUNFLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFBO1FBQ3BCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQTtRQUNqRCxJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQTtRQUNwQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQTtJQUN2QixDQUFDO0lBRU0sT0FBTyxDQUFDLEdBQVc7UUFHeEIsTUFBTSxHQUFHLEdBQStCLEVBQUUsQ0FBQTtRQUMxQyxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBRTVCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3JDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUE7U0FDckI7UUFFRCxPQUFPLEdBQUcsQ0FBQTtJQUNaLENBQUM7SUFFTSxLQUFLLENBQUMsSUFBWTtRQUN2QixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFBO1FBRXZDLE1BQU0sTUFBTSxHQUVWLDBKQUEwSixDQUFBO1FBQzVKLE1BQU0sT0FBTyxHQUVYLDZGQUE2RixDQUFBO1FBQy9GLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQTtRQUV4QixJQUFJLEtBQTZCLENBQUE7UUFDakMsSUFBSSxVQUFrQixDQUFBO1FBQ3RCLElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQTtRQUNqQixJQUFJLE9BQWUsQ0FBQTtRQUNuQixJQUFJLFFBQWdCLENBQUE7UUFDcEIsSUFBSSxRQUFRLEdBQWtC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","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nclass Reporter {\n    constructor(html, ruleset) {\n        this.html = html;\n        this.lines = html.split(/\\r?\\n/);\n        const match = /\\r?\\n/.exec(html);\n        this.brLen = match !== null ? match[0].length : 0;\n        this.ruleset = ruleset;\n        this.messages = [];\n    }\n    info(message, line, col, rule, raw) {\n        this.report(\"info\", message, line, col, rule, raw);\n    }\n    warn(message, line, col, rule, raw) {\n        this.report(\"warning\", message, line, col, rule, raw);\n    }\n    error(message, line, col, rule, raw) {\n        this.report(\"error\", message, line, col, rule, raw);\n    }\n    report(type, message, line, col, rule, raw) {\n        const lines = this.lines;\n        const brLen = this.brLen;\n        let evidence = '';\n        let evidenceLen = 0;\n        for (let i = line - 1, lineCount = lines.length; i < lineCount; i++) {\n            evidence = lines[i];\n            evidenceLen = evidence.length;\n            if (col > evidenceLen && line < lineCount) {\n                line++;\n                col -= evidenceLen;\n                if (col !== 1) {\n                    col -= brLen;\n                }\n            }\n            else {\n                break;\n            }\n        }\n        this.messages.push({\n            type: type,\n            message: message,\n            raw: raw,\n            evidence: evidence,\n            line: line,\n            col: col,\n            rule: {\n                id: rule.id,\n                description: rule.description,\n                link: `https://htmlhint.com/docs/user-guide/rules/${rule.id}`,\n            },\n        });\n    }\n}\nexports.default = Reporter;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29yZS9yZXBvcnRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUVBLE1BQXFCLFFBQVE7SUFPM0IsWUFBbUIsSUFBWSxFQUFFLE9BQWdCO1FBQy9DLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFBO1FBQ2hCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUNoQyxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBRWhDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ2pELElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFBO1FBQ3RCLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFBO0lBQ3BCLENBQUM7SUFFTSxJQUFJLENBQ1QsT0FBZSxFQUNmLElBQVksRUFDWixHQUFXLEVBQ1gsSUFBVSxFQUNWLEdBQVc7UUFFWCxJQUFJLENBQUMsTUFBTSxTQUFrQixPQUFPLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUE7SUFDN0QsQ0FBQztJQUVNLElBQUksQ0FDVCxPQUFlLEVBQ2YsSUFBWSxFQUNaLEdBQVcsRUFDWCxJQUFVLEVBQ1YsR0FBVztRQUVYLElBQUksQ0FBQyxNQUFNLFlBQXFCLE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQTtJQUNoRSxDQUFDO0lBRU0sS0FBSyxDQUNWLE9BQWUsRUFDZixJQUFZLEVBQ1osR0FBVyxFQUNYLElBQVUsRUFDVixHQUFXO1FBRVgsSUFBSSxDQUFDLE1BQU0sVUFBbUIsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFBO0lBQzlELENBQUM7SUFFTyxNQUFNLENBQ1osSUFBZ0IsRUFDaEIsT0FBZSxFQUNmLElBQVksRUFDWixHQUFXLEVBQ1gsSUFBVSxFQUNWLEdBQVc7UUFFWCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFBO1FBQ3hCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUE7UUFDeEIsSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFBO1FBQ2pCLElBQUksV0FBVyxHQUFHLENBQUMsQ0FBQTtRQUVuQixLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLEVBQUUsU0FBUyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLFNBQVMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNuRSxRQUFRLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFBO1lBQ25CLFdBQVcsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFBO1lBQzdCLElBQUksR0FBRyxHQUFHLFdBQVcsSUFBSSxJQUFJLEdBQUcsU0FBUyxFQUFFO2dCQUN6QyxJQUFJLEVBQUUsQ0FBQTtnQkFDTixHQUFHLElBQUksV0FBVyxDQUFBO2dCQUNsQixJQUFJLEdBQUcsS0FBSyxDQUFDLEVBQUU7b0JBQ2IsR0FBRyxJQUFJLEtBQUssQ0FBQTtpQkFDYjthQUNGO2lCQUFNO2dCQUNMLE1BQUs7YUFDTjtTQUNGO1FBRUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7WUFDakIsSUFBSSxFQUFFLElBQUk7WUFDVixPQUFPLEVBQUUsT0FBTztZQUNoQixHQUFHLEVBQUUsR0FBRztZQUNSLFFBQVEsRUFBRSxRQUFRO1lBQ2xCLElBQUksRUFBRSxJQUFJO1lBQ1YsR0FBRyxFQUFFLEdBQUc7WUFDUixJQUFJLEVBQUU7Z0JBQ0osRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFO2dCQUNYLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztnQkFDN0IsSUFBSSxFQUFFLDhDQUE4QyxJQUFJLENBQUMsRUFBRSxFQUFFO2FBQ3REO1NBQ1YsQ0FBQyxDQUFBO0lBQ0osQ0FBQztDQUNGO0FBeEZELDJCQXdGQyJ9","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = {\n    id: 'alt-require',\n    description: 'The alt attribute of an <img> element must be present and alt attribute of area[href] and input[type=image] must have a value.',\n    init(parser, reporter) {\n        parser.addListener('tagstart', (event) => {\n            const tagName = event.tagName.toLowerCase();\n            const mapAttrs = parser.getMapAttrs(event.attrs);\n            const col = event.col + tagName.length + 1;\n            let selector;\n            if (tagName === 'img' && !('alt' in mapAttrs)) {\n                reporter.warn('An alt attribute must be present on <img> elements.', event.line, col, this, event.raw);\n            }\n            else if ((tagName === 'area' && 'href' in mapAttrs) ||\n                (tagName === 'input' && mapAttrs['type'] === 'image')) {\n                if (!('alt' in mapAttrs) || mapAttrs['alt'] === '') {\n                    selector = tagName === 'area' ? 'area[href]' : 'input[type=image]';\n                    reporter.warn(`The alt attribute of ${selector} must have a value.`, event.line, col, this, event.raw);\n                }\n            }\n        });\n    },\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWx0LXJlcXVpcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29yZS9ydWxlcy9hbHQtcmVxdWlyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUVBLGtCQUFlO0lBQ2IsRUFBRSxFQUFFLGFBQWE7SUFDakIsV0FBVyxFQUNULGdJQUFnSTtJQUNsSSxJQUFJLENBQUMsTUFBTSxFQUFFLFFBQVE7UUFDbkIsTUFBTSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUN2QyxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFBO1lBQzNDLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFBO1lBQ2hELE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLEdBQUcsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUE7WUFDMUMsSUFBSSxRQUFRLENBQUE7WUFFWixJQUFJLE9BQU8sS0FBSyxLQUFLLElBQUksQ0FBQyxDQUFDLEtBQUssSUFBSSxRQUFRLENBQUMsRUFBRTtnQkFDN0MsUUFBUSxDQUFDLElBQUksQ0FDWCxxREFBcUQsRUFDckQsS0FBSyxDQUFDLElBQUksRUFDVixHQUFHLEVBQ0gsSUFBSSxFQUNKLEtBQUssQ0FBQyxHQUFHLENBQ1YsQ0FBQTthQUNGO2lCQUFNLElBQ0wsQ0FBQyxPQUFPLEtBQUssTUFBTSxJQUFJLE1BQU0sSUFBSSxRQUFRLENBQUM7Z0JBQzFDLENBQUMsT0FBTyxLQUFLLE9BQU8sSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssT0FBTyxDQUFDLEVBQ3JEO2dCQUNBLElBQUksQ0FBQyxDQUFDLEtBQUssSUFBSSxRQUFRLENBQUMsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFO29CQUNsRCxRQUFRLEdBQUcsT0FBTyxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQTtvQkFDbEUsUUFBUSxDQUFDLElBQUksQ0FDWCx3QkFBd0IsUUFBUSxxQkFBcUIsRUFDckQsS0FBSyxDQUFDLElBQUksRUFDVixHQUFHLEVBQ0gsSUFBSSxFQUNKLEtBQUssQ0FBQyxHQUFHLENBQ1YsQ0FBQTtpQkFDRjthQUNGO1FBQ0gsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0NBQ00sQ0FBQSJ9","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst svgIgnores = [\n    'allowReorder',\n    'attributeName',\n    'attributeType',\n    'autoReverse',\n    'baseFrequency',\n    'baseProfile',\n    'calcMode',\n    'clipPath',\n    'clipPathUnits',\n    'contentScriptType',\n    'contentStyleType',\n    'diffuseConstant',\n    'edgeMode',\n    'externalResourcesRequired',\n    'filterRes',\n    'filterUnits',\n    'glyphRef',\n    'gradientTransform',\n    'gradientUnits',\n    'kernelMatrix',\n    'kernelUnitLength',\n    'keyPoints',\n    'keySplines',\n    'keyTimes',\n    'lengthAdjust',\n    'limitingConeAngle',\n    'markerHeight',\n    'markerUnits',\n    'markerWidth',\n    'maskContentUnits',\n    'maskUnits',\n    'numOctaves',\n    'onBlur',\n    'onChange',\n    'onClick',\n    'onFocus',\n    'onKeyUp',\n    'onLoad',\n    'pathLength',\n    'patternContentUnits',\n    'patternTransform',\n    'patternUnits',\n    'pointsAtX',\n    'pointsAtY',\n    'pointsAtZ',\n    'preserveAlpha',\n    'preserveAspectRatio',\n    'primitiveUnits',\n    'refX',\n    'refY',\n    'repeatCount',\n    'repeatDur',\n    'requiredExtensions',\n    'requiredFeatures',\n    'specularConstant',\n    'specularExponent',\n    'spreadMethod',\n    'startOffset',\n    'stdDeviation',\n    'stitchTiles',\n    'surfaceScale',\n    'systemLanguage',\n    'tableValues',\n    'targetX',\n    'targetY',\n    'textLength',\n    'viewBox',\n    'viewTarget',\n    'xChannelSelector',\n    'yChannelSelector',\n    'zoomAndPan',\n];\nfunction testAgainstStringOrRegExp(value, comparison) {\n    if (comparison instanceof RegExp) {\n        return comparison.test(value)\n            ? { match: value, pattern: comparison }\n            : false;\n    }\n    const firstComparisonChar = comparison[0];\n    const lastComparisonChar = comparison[comparison.length - 1];\n    const secondToLastComparisonChar = comparison[comparison.length - 2];\n    const comparisonIsRegex = firstComparisonChar === '/' &&\n        (lastComparisonChar === '/' ||\n            (secondToLastComparisonChar === '/' && lastComparisonChar === 'i'));\n    const hasCaseInsensitiveFlag = comparisonIsRegex && lastComparisonChar === 'i';\n    if (comparisonIsRegex) {\n        const valueMatches = hasCaseInsensitiveFlag\n            ? new RegExp(comparison.slice(1, -2), 'i').test(value)\n            : new RegExp(comparison.slice(1, -1)).test(value);\n        return valueMatches;\n    }\n    return value === comparison;\n}\nexports.default = {\n    id: 'attr-lowercase',\n    description: 'All attribute names must be in lowercase.',\n    init(parser, reporter, options) {\n        const exceptions = (Array.isArray(options) ? options : []).concat(svgIgnores);\n        parser.addListener('tagstart', (event) => {\n            const attrs = event.attrs;\n            let attr;\n            const col = event.col + event.tagName.length + 1;\n            for (let i = 0, l = attrs.length; i < l; i++) {\n                attr = attrs[i];\n                const attrName = attr.name;\n                if (!exceptions.find((exp) => testAgainstStringOrRegExp(attrName, exp)) &&\n                    attrName !== attrName.toLowerCase()) {\n                    reporter.error(`The attribute name of [ ${attrName} ] must be in lowercase.`, event.line, col + attr.index, this, attr.raw);\n                }\n            }\n        });\n    },\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0ci1sb3dlcmNhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29yZS9ydWxlcy9hdHRyLWxvd2VyY2FzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUVBLE1BQU0sVUFBVSxHQUFHO0lBQ2pCLGNBQWM7SUFDZCxlQUFlO0lBQ2YsZUFBZTtJQUNmLGFBQWE7SUFDYixlQUFlO0lBQ2YsYUFBYTtJQUNiLFVBQVU7SUFDVixVQUFVO0lBQ1YsZUFBZTtJQUNmLG1CQUFtQjtJQUNuQixrQkFBa0I7SUFDbEIsaUJBQWlCO0lBQ2pCLFVBQVU7SUFDViwyQkFBMkI7SUFDM0IsV0FBVztJQUNYLGFBQWE7SUFDYixVQUFVO0lBQ1YsbUJBQW1CO0lBQ25CLGVBQWU7SUFDZixjQUFjO0lBQ2Qsa0JBQWtCO0lBQ2xCLFdBQVc7SUFDWCxZQUFZO0lBQ1osVUFBVTtJQUNWLGNBQWM7SUFDZCxtQkFBbUI7SUFDbkIsY0FBYztJQUNkLGFBQWE7SUFDYixhQUFhO0lBQ2Isa0JBQWtCO0lBQ2xCLFdBQVc7SUFDWCxZQUFZO0lBQ1osUUFBUTtJQUNSLFVBQVU7SUFDVixTQUFTO0lBQ1QsU0FBUztJQUNULFNBQVM7SUFDVCxRQUFRO0lBQ1IsWUFBWTtJQUNaLHFCQUFxQjtJQUNyQixrQkFBa0I7SUFDbEIsY0FBYztJQUNkLFdBQVc7SUFDWCxXQUFXO0lBQ1gsV0FBVztJQUNYLGVBQWU7SUFDZixxQkFBcUI7SUFDckIsZ0JBQWdCO0lBQ2hCLE1BQU07SUFDTixNQUFNO0lBQ04sYUFBYTtJQUNiLFdBQVc7SUFDWCxvQkFBb0I7SUFDcEIsa0JBQWtCO0lBQ2xCLGtCQUFrQjtJQUNsQixrQkFBa0I7SUFDbEIsY0FBYztJQUNkLGFBQWE7SUFDYixjQUFjO0lBQ2QsYUFBYTtJQUNiLGNBQWM7SUFDZCxnQkFBZ0I7SUFDaEIsYUFBYTtJQUNiLFNBQVM7SUFDVCxTQUFTO0lBQ1QsWUFBWTtJQUNaLFNBQVM7SUFDVCxZQUFZO0lBQ1osa0JBQWtC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","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = {\n    id: 'attr-sorted',\n    description: 'Attribute tags must be in proper order.',\n    init(parser, reporter) {\n        const orderMap = {};\n        const sortOrder = [\n            'class',\n            'id',\n            'name',\n            'src',\n            'for',\n            'type',\n            'href',\n            'value',\n            'title',\n            'alt',\n            'role',\n        ];\n        for (let i = 0; i < sortOrder.length; i++) {\n            orderMap[sortOrder[i]] = i;\n        }\n        parser.addListener('tagstart', (event) => {\n            const attrs = event.attrs;\n            const listOfAttributes = [];\n            for (let i = 0; i < attrs.length; i++) {\n                listOfAttributes.push(attrs[i].name);\n            }\n            const originalAttrs = JSON.stringify(listOfAttributes);\n            listOfAttributes.sort((a, b) => {\n                if (orderMap[a] == undefined && orderMap[b] == undefined) {\n                    return 0;\n                }\n                if (orderMap[a] == undefined) {\n                    return 1;\n                }\n                else if (orderMap[b] == undefined) {\n                    return -1;\n                }\n                return orderMap[a] - orderMap[b] || a.localeCompare(b);\n            });\n            if (originalAttrs !== JSON.stringify(listOfAttributes)) {\n                reporter.error(`Inaccurate order ${originalAttrs} should be in hierarchy ${JSON.stringify(listOfAttributes)} `, event.line, event.col, this, event.raw);\n            }\n        });\n    },\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0ci1zb3J0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29yZS9ydWxlcy9hdHRyLXNvcnRlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUVBLGtCQUFlO0lBQ2IsRUFBRSxFQUFFLGFBQWE7SUFDakIsV0FBVyxFQUFFLHlDQUF5QztJQUN0RCxJQUFJLENBQUMsTUFBTSxFQUFFLFFBQVE7UUFDbkIsTUFBTSxRQUFRLEdBQThCLEVBQUUsQ0FBQTtRQUM5QyxNQUFNLFNBQVMsR0FBRztZQUNoQixPQUFPO1lBQ1AsSUFBSTtZQUNKLE1BQU07WUFDTixLQUFLO1lBQ0wsS0FBSztZQUNMLE1BQU07WUFDTixNQUFNO1lBQ04sT0FBTztZQUNQLE9BQU87WUFDUCxLQUFLO1lBQ0wsTUFBTTtTQUNQLENBQUE7UUFFRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN6QyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1NBQzNCO1FBRUQsTUFBTSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUN2QyxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFBO1lBQ3pCLE1BQU0sZ0JBQWdCLEdBQUcsRUFBRSxDQUFBO1lBRTNCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUNyQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFBO2FBQ3JDO1lBRUQsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO1lBQ3RELGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDN0IsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksU0FBUyxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTLEVBQUU7b0JBQ3hELE9BQU8sQ0FBQyxDQUFBO2lCQUNUO2dCQUNELElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVMsRUFBRTtvQkFDNUIsT0FBTyxDQUFDLENBQUE7aUJBQ1Q7cUJBQU0sSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksU0FBUyxFQUFFO29CQUNuQyxPQUFPLENBQUMsQ0FBQyxDQUFBO2lCQUNWO2dCQUNELE9BQU8sUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFBO1lBQ3hELENBQUMsQ0FBQyxDQUFBO1lBRUYsSUFBSSxhQUFhLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFO2dCQUN0RCxRQUFRLENBQUMsS0FBSyxDQUNaLG9CQUFvQixhQUFhLDJCQUEyQixJQUFJLENBQUMsU0FBUyxDQUN4RSxnQkFBZ0IsQ0FDakIsR0FBRyxFQUNKLEtBQUssQ0FBQyxJQUFJLEVBQ1YsS0FBSyxDQUFDLEdBQUcsRUFDVCxJQUFJLEVBQ0osS0FBSyxDQUFDLEdBQUcsQ0FDVixDQUFBO2FBQ0Y7UUFDSCxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7Q0FDTSxDQUFBIn0=","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = {\n    id: 'attr-no-duplication',\n    description: 'Elements cannot have duplicate attributes.',\n    init(parser, reporter) {\n        parser.addListener('tagstart', (event) => {\n            const attrs = event.attrs;\n            let attr;\n            let attrName;\n            const col = event.col + event.tagName.length + 1;\n            const mapAttrName = {};\n            for (let i = 0, l = attrs.length; i < l; i++) {\n                attr = attrs[i];\n                attrName = attr.name;\n                if (mapAttrName[attrName] === true) {\n                    reporter.error(`Duplicate of attribute name [ ${attr.name} ] was found.`, event.line, col + attr.index, this, attr.raw);\n                }\n                mapAttrName[attrName] = true;\n            }\n        });\n    },\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0ci1uby1kdXBsaWNhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb3JlL3J1bGVzL2F0dHItbm8tZHVwbGljYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFFQSxrQkFBZTtJQUNiLEVBQUUsRUFBRSxxQkFBcUI7SUFDekIsV0FBVyxFQUFFLDRDQUE0QztJQUN6RCxJQUFJLENBQUMsTUFBTSxFQUFFLFFBQVE7UUFDbkIsTUFBTSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUN2QyxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFBO1lBQ3pCLElBQUksSUFBSSxDQUFBO1lBQ1IsSUFBSSxRQUFnQixDQUFBO1lBQ3BCLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFBO1lBRWhELE1BQU0sV0FBVyxHQUFnQyxFQUFFLENBQUE7WUFFbkQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDNUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQTtnQkFDZixRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQTtnQkFFcEIsSUFBSSxXQUFXLENBQUMsUUFBUSxDQUFDLEtBQUssSUFBSSxFQUFFO29CQUNsQyxRQUFRLENBQUMsS0FBSyxDQUNaLGlDQUFpQyxJQUFJLENBQUMsSUFBSSxlQUFlLEVBQ3pELEtBQUssQ0FBQyxJQUFJLEVBQ1YsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQ2hCLElBQUksRUFDSixJQUFJLENBQUMsR0FBRyxDQUNULENBQUE7aUJBQ0Y7Z0JBQ0QsV0FBVyxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQTthQUM3QjtRQUNILENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztDQUNNLENBQUEifQ==","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = {\n    id: 'attr-unsafe-chars',\n    description: 'Attribute values cannot contain unsafe chars.',\n    init(parser, reporter) {\n        parser.addListener('tagstart', (event) => {\n            const attrs = event.attrs;\n            let attr;\n            const col = event.col + event.tagName.length + 1;\n            const regUnsafe = /[\\u0000-\\u0008\\u000b\\u000c\\u000e-\\u001f\\u007f-\\u009f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/;\n            let match;\n            for (let i = 0, l = attrs.length; i < l; i++) {\n                attr = attrs[i];\n                match = regUnsafe.exec(attr.value);\n                if (match !== null) {\n                    const unsafeCode = escape(match[0])\n                        .replace(/%u/, '\\\\u')\n                        .replace(/%/, '\\\\x');\n                    reporter.warn(`The value of attribute [ ${attr.name} ] cannot contain an unsafe char [ ${unsafeCode} ].`, event.line, col + attr.index, this, attr.raw);\n                }\n            }\n        });\n    },\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0ci11bnNhZmUtY2hhcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29yZS9ydWxlcy9hdHRyLXVuc2FmZS1jaGFycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUVBLGtCQUFlO0lBQ2IsRUFBRSxFQUFFLG1CQUFtQjtJQUN2QixXQUFXLEVBQUUsK0NBQStDO0lBQzVELElBQUksQ0FBQyxNQUFNLEVBQUUsUUFBUTtRQUNuQixNQUFNLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ3ZDLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUE7WUFDekIsSUFBSSxJQUFJLENBQUE7WUFDUixNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQTtZQUVoRCxNQUFNLFNBQVMsR0FFYixzSkFBc0osQ0FBQTtZQUN4SixJQUFJLEtBQUssQ0FBQTtZQUVULEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQzVDLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUE7Z0JBQ2YsS0FBSyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO2dCQUVsQyxJQUFJLEtBQUssS0FBSyxJQUFJLEVBQUU7b0JBQ2xCLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7eUJBQ2hDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDO3lCQUNwQixPQUFPLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFBO29CQUN0QixRQUFRLENBQUMsSUFBSSxDQUNYLDRCQUE0QixJQUFJLENBQUMsSUFBSSxzQ0FBc0MsVUFBVSxLQUFLLEVBQzFGLEtBQUssQ0FBQyxJQUFJLEVBQ1YsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQ2hCLElBQUksRUFDSixJQUFJLENBQUMsR0FBRyxDQUNULENBQUE7aUJBQ0Y7YUFDRjtRQUNILENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztDQUNNLENBQUEifQ==","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = {\n    id: 'attr-value-double-quotes',\n    description: 'Attribute values must be in double quotes.',\n    init(parser, reporter) {\n        parser.addListener('tagstart', (event) => {\n            const attrs = event.attrs;\n            let attr;\n            const col = event.col + event.tagName.length + 1;\n            for (let i = 0, l = attrs.length; i < l; i++) {\n                attr = attrs[i];\n                if ((attr.value !== '' && attr.quote !== '\"') ||\n                    (attr.value === '' && attr.quote === \"'\")) {\n                    reporter.error(`The value of attribute [ ${attr.name} ] must be in double quotes.`, event.line, col + attr.index, this, attr.raw);\n                }\n            }\n        });\n    },\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0ci12YWx1ZS1kb3VibGUtcXVvdGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvcmUvcnVsZXMvYXR0ci12YWx1ZS1kb3VibGUtcXVvdGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBRUEsa0JBQWU7SUFDYixFQUFFLEVBQUUsMEJBQTBCO0lBQzlCLFdBQVcsRUFBRSw0Q0FBNEM7SUFDekQsSUFBSSxDQUFDLE1BQU0sRUFBRSxRQUFRO1FBQ25CLE1BQU0sQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDdkMsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQTtZQUN6QixJQUFJLElBQUksQ0FBQTtZQUNSLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFBO1lBRWhELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQzVDLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUE7Z0JBRWYsSUFDRSxDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUssRUFBRSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssR0FBRyxDQUFDO29CQUN6QyxDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUssRUFBRSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssR0FBRyxDQUFDLEVBQ3pDO29CQUNBLFFBQVEsQ0FBQyxLQUFLLENBQ1osNEJBQTRCLElBQUksQ0FBQyxJQUFJLDhCQUE4QixFQUNuRSxLQUFLLENBQUMsSUFBSSxFQUNWLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUNoQixJQUFJLEVBQ0osSUFBSSxDQUFDLEdBQUcsQ0FDVCxDQUFBO2lCQUNGO2FBQ0Y7UUFDSCxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7Q0FDTSxDQUFBIn0=","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = {\n    id: 'attr-value-not-empty',\n    description: 'All attributes must have values.',\n    init(parser, reporter) {\n        parser.addListener('tagstart', (event) => {\n            const attrs = event.attrs;\n            let attr;\n            const col = event.col + event.tagName.length + 1;\n            for (let i = 0, l = attrs.length; i < l; i++) {\n                attr = attrs[i];\n                if (attr.quote === '' && attr.value === '') {\n                    reporter.warn(`The attribute [ ${attr.name} ] must have a value.`, event.line, col + attr.index, this, attr.raw);\n                }\n            }\n        });\n    },\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0ci12YWx1ZS1ub3QtZW1wdHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29yZS9ydWxlcy9hdHRyLXZhbHVlLW5vdC1lbXB0eS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUVBLGtCQUFlO0lBQ2IsRUFBRSxFQUFFLHNCQUFzQjtJQUMxQixXQUFXLEVBQUUsa0NBQWtDO0lBQy9DLElBQUksQ0FBQyxNQUFNLEVBQUUsUUFBUTtRQUNuQixNQUFNLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ3ZDLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUE7WUFDekIsSUFBSSxJQUFJLENBQUE7WUFDUixNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQTtZQUVoRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUM1QyxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFBO2dCQUVmLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxFQUFFLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxFQUFFLEVBQUU7b0JBQzFDLFFBQVEsQ0FBQyxJQUFJLENBQ1gsbUJBQW1CLElBQUksQ0FBQyxJQUFJLHVCQUF1QixFQUNuRCxLQUFLLENBQUMsSUFBSSxFQUNWLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUNoQixJQUFJLEVBQ0osSUFBSSxDQUFDLEdBQUcsQ0FDVCxDQUFBO2lCQUNGO2FBQ0Y7UUFDSCxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7Q0FDTSxDQUFBIn0=","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = {\n    id: 'attr-value-single-quotes',\n    description: 'Attribute values must be in single quotes.',\n    init(parser, reporter) {\n        parser.addListener('tagstart', (event) => {\n            const attrs = event.attrs;\n            let attr;\n            const col = event.col + event.tagName.length + 1;\n            for (let i = 0, l = attrs.length; i < l; i++) {\n                attr = attrs[i];\n                if ((attr.value !== '' && attr.quote !== \"'\") ||\n                    (attr.value === '' && attr.quote === '\"')) {\n                    reporter.error(`The value of attribute [ ${attr.name} ] must be in single quotes.`, event.line, col + attr.index, this, attr.raw);\n                }\n            }\n        });\n    },\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0ci12YWx1ZS1zaW5nbGUtcXVvdGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvcmUvcnVsZXMvYXR0ci12YWx1ZS1zaW5nbGUtcXVvdGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBRUEsa0JBQWU7SUFDYixFQUFFLEVBQUUsMEJBQTBCO0lBQzlCLFdBQVcsRUFBRSw0Q0FBNEM7SUFDekQsSUFBSSxDQUFDLE1BQU0sRUFBRSxRQUFRO1FBQ25CLE1BQU0sQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDdkMsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQTtZQUN6QixJQUFJLElBQUksQ0FBQTtZQUNSLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFBO1lBRWhELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQzVDLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUE7Z0JBRWYsSUFDRSxDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUssRUFBRSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssR0FBRyxDQUFDO29CQUN6QyxDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUssRUFBRSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssR0FBRyxDQUFDLEVBQ3pDO29CQUNBLFFBQVEsQ0FBQyxLQUFLLENBQ1osNEJBQTRCLElBQUksQ0FBQyxJQUFJLDhCQUE4QixFQUNuRSxLQUFLLENBQUMsSUFBSSxFQUNWLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUNoQixJQUFJLEVBQ0osSUFBSSxDQUFDLEdBQUcsQ0FDVCxDQUFBO2lCQUNGO2FBQ0Y7UUFDSCxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7Q0FDTSxDQUFBIn0=","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = {\n    id: 'attr-whitespace',\n    description: 'All attributes should be separated by only one space and not have leading/trailing whitespace.',\n    init(parser, reporter, options) {\n        const exceptions = Array.isArray(options)\n            ? options\n            : [];\n        parser.addListener('tagstart', (event) => {\n            const attrs = event.attrs;\n            let attr;\n            const col = event.col + event.tagName.length + 1;\n            attrs.forEach((elem) => {\n                attr = elem;\n                const attrName = elem.name;\n                if (exceptions.indexOf(attrName) !== -1) {\n                    return;\n                }\n                if (elem.value.trim() !== elem.value) {\n                    reporter.error(`The attributes of [ ${attrName} ] must not have leading or trailing whitespace.`, event.line, col + attr.index, this, attr.raw);\n                }\n                if (elem.value.replace(/ +(?= )/g, '') !== elem.value) {\n                    reporter.error(`The attributes of [ ${attrName} ] must be separated by only one space.`, event.line, col + attr.index, this, attr.raw);\n                }\n            });\n        });\n    },\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0ci13aGl0ZXNwYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvcmUvcnVsZXMvYXR0ci13aGl0ZXNwYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBRUEsa0JBQWU7SUFDYixFQUFFLEVBQUUsaUJBQWlCO0lBQ3JCLFdBQVcsRUFDVCxnR0FBZ0c7SUFDbEcsSUFBSSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsT0FBTztRQUM1QixNQUFNLFVBQVUsR0FBNEIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7WUFDaEUsQ0FBQyxDQUFDLE9BQU87WUFDVCxDQUFDLENBQUMsRUFBRSxDQUFBO1FBRU4sTUFBTSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUN2QyxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFBO1lBQ3pCLElBQUksSUFBSSxDQUFBO1lBQ1IsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUE7WUFFaEQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUNyQixJQUFJLEdBQUcsSUFBSSxDQUFBO2dCQUNYLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUE7Z0JBRTFCLElBQUksVUFBVSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtvQkFDdkMsT0FBTTtpQkFDUDtnQkFHRCxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssSUFBSSxDQUFDLEtBQUssRUFBRTtvQkFDcEMsUUFBUSxDQUFDLEtBQUssQ0FDWix1QkFBdUIsUUFBUSxrREFBa0QsRUFDakYsS0FBSyxDQUFDLElBQUksRUFDVixHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFDaEIsSUFBSSxFQUNKLElBQUksQ0FBQyxHQUFHLENBQ1QsQ0FBQTtpQkFDRjtnQkFFRCxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxFQUFFO29CQUNyRCxRQUFRLENBQUMsS0FBSyxDQUNaLHVCQUF1QixRQUFRLHlDQUF5QyxFQUN4RSxLQUFLLENBQUMsSUFBSSxFQUNWLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUNoQixJQUFJLEVBQ0osSUFBSSxDQUFDLEdBQUcsQ0FDVCxDQUFBO2lCQUNGO1lBQ0gsQ0FBQyxDQUFDLENBQUE7UUFDSixDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7Q0FDTSxDQUFBIn0=","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = {\n    id: 'doctype-first',\n    description: 'Doctype must be declared first.',\n    init(parser, reporter) {\n        const allEvent = (event) => {\n            if (event.type === 'start' ||\n                (event.type === 'text' && /^\\s*$/.test(event.raw))) {\n                return;\n            }\n            if ((event.type !== 'comment' && event.long === false) ||\n                /^DOCTYPE\\s+/i.test(event.content) === false) {\n                reporter.error('Doctype must be declared first.', event.line, event.col, this, event.raw);\n            }\n            parser.removeListener('all', allEvent);\n        };\n        parser.addListener('all', allEvent);\n    },\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdHlwZS1maXJzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb3JlL3J1bGVzL2RvY3R5cGUtZmlyc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFHQSxrQkFBZTtJQUNiLEVBQUUsRUFBRSxlQUFlO0lBQ25CLFdBQVcsRUFBRSxpQ0FBaUM7SUFDOUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxRQUFRO1FBQ25CLE1BQU0sUUFBUSxHQUFhLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDbkMsSUFDRSxLQUFLLENBQUMsSUFBSSxLQUFLLE9BQU87Z0JBQ3RCLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxNQUFNLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsRUFDbEQ7Z0JBQ0EsT0FBTTthQUNQO1lBRUQsSUFDRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssU0FBUyxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDO2dCQUNsRCxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxLQUFLLEVBQzVDO2dCQUNBLFFBQVEsQ0FBQyxLQUFLLENBQ1osaUNBQWlDLEVBQ2pDLEtBQUssQ0FBQyxJQUFJLEVBQ1YsS0FBSyxDQUFDLEdBQUcsRUFDVCxJQUFJLEVBQ0osS0FBSyxDQUFDLEdBQUcsQ0FDVixDQUFBO2FBQ0Y7WUFFRCxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQTtRQUN4QyxDQUFDLENBQUE7UUFFRCxNQUFNLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQTtJQUNyQyxDQUFDO0NBQ00sQ0FBQSJ9","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = {\n    id: 'doctype-html5',\n    description: 'Invalid doctype. Use: \"<!DOCTYPE html>\"',\n    init(parser, reporter) {\n        const onComment = (event) => {\n            if (event.long === false &&\n                event.content.toLowerCase() !== 'doctype html') {\n                reporter.warn('Invalid doctype. Use: \"<!DOCTYPE html>\"', event.line, event.col, this, event.raw);\n            }\n        };\n        const onTagStart = () => {\n            parser.removeListener('comment', onComment);\n            parser.removeListener('tagstart', onTagStart);\n        };\n        parser.addListener('all', onComment);\n        parser.addListener('tagstart', onTagStart);\n    },\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdHlwZS1odG1sNS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb3JlL3J1bGVzL2RvY3R5cGUtaHRtbDUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFHQSxrQkFBZTtJQUNiLEVBQUUsRUFBRSxlQUFlO0lBQ25CLFdBQVcsRUFBRSx5Q0FBeUM7SUFDdEQsSUFBSSxDQUFDLE1BQU0sRUFBRSxRQUFRO1FBQ25CLE1BQU0sU0FBUyxHQUFhLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDcEMsSUFDRSxLQUFLLENBQUMsSUFBSSxLQUFLLEtBQUs7Z0JBQ3BCLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLEtBQUssY0FBYyxFQUM5QztnQkFDQSxRQUFRLENBQUMsSUFBSSxDQUNYLHlDQUF5QyxFQUN6QyxLQUFLLENBQUMsSUFBSSxFQUNWLEtBQUssQ0FBQyxHQUFHLEVBQ1QsSUFBSSxFQUNKLEtBQUssQ0FBQyxHQUFHLENBQ1YsQ0FBQTthQUNGO1FBQ0gsQ0FBQyxDQUFBO1FBRUQsTUFBTSxVQUFVLEdBQWEsR0FBRyxFQUFFO1lBQ2hDLE1BQU0sQ0FBQyxjQUFjLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFBO1lBQzNDLE1BQU0sQ0FBQyxjQUFjLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFBO1FBQy9DLENBQUMsQ0FBQTtRQUVELE1BQU0sQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFBO1FBQ3BDLE1BQU0sQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFBO0lBQzVDLENBQUM7Q0FDTSxDQUFBIn0=","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = {\n    id: 'head-script-disabled',\n    description: 'The <script> tag cannot be used in a <head> tag.',\n    init(parser, reporter) {\n        const reScript = /^(text\\/javascript|application\\/javascript)$/i;\n        let isInHead = false;\n        const onTagStart = (event) => {\n            const mapAttrs = parser.getMapAttrs(event.attrs);\n            const type = mapAttrs.type;\n            const tagName = event.tagName.toLowerCase();\n            if (tagName === 'head') {\n                isInHead = true;\n            }\n            if (isInHead === true &&\n                tagName === 'script' &&\n                (!type || reScript.test(type) === true)) {\n                reporter.warn('The <script> tag cannot be used in a <head> tag.', event.line, event.col, this, event.raw);\n            }\n        };\n        const onTagEnd = (event) => {\n            if (event.tagName.toLowerCase() === 'head') {\n                parser.removeListener('tagstart', onTagStart);\n                parser.removeListener('tagend', onTagEnd);\n            }\n        };\n        parser.addListener('tagstart', onTagStart);\n        parser.addListener('tagend', onTagEnd);\n    },\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhZC1zY3JpcHQtZGlzYWJsZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29yZS9ydWxlcy9oZWFkLXNjcmlwdC1kaXNhYmxlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUdBLGtCQUFlO0lBQ2IsRUFBRSxFQUFFLHNCQUFzQjtJQUMxQixXQUFXLEVBQUUsa0RBQWtEO0lBQy9ELElBQUksQ0FBQyxNQUFNLEVBQUUsUUFBUTtRQUNuQixNQUFNLFFBQVEsR0FBRywrQ0FBK0MsQ0FBQTtRQUNoRSxJQUFJLFFBQVEsR0FBRyxLQUFLLENBQUE7UUFFcEIsTUFBTSxVQUFVLEdBQWEsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNyQyxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQTtZQUNoRCxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFBO1lBQzFCLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUE7WUFFM0MsSUFBSSxPQUFPLEtBQUssTUFBTSxFQUFFO2dCQUN0QixRQUFRLEdBQUcsSUFBSSxDQUFBO2FBQ2hCO1lBRUQsSUFDRSxRQUFRLEtBQUssSUFBSTtnQkFDakIsT0FBTyxLQUFLLFFBQVE7Z0JBQ3BCLENBQUMsQ0FBQyxJQUFJLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsRUFDdkM7Z0JBQ0EsUUFBUSxDQUFDLElBQUksQ0FDWCxrREFBa0QsRUFDbEQsS0FBSyxDQUFDLElBQUksRUFDVixLQUFLLENBQUMsR0FBRyxFQUNULElBQUksRUFDSixLQUFLLENBQUMsR0FBRyxDQUNWLENBQUE7YUFDRjtRQUNILENBQUMsQ0FBQTtRQUVELE1BQU0sUUFBUSxHQUFhLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDbkMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxLQUFLLE1BQU0sRUFBRTtnQkFDMUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUE7Z0JBQzdDLE1BQU0sQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFBO2FBQzFDO1FBQ0gsQ0FBQyxDQUFBO1FBRUQsTUFBTSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUE7UUFDMUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUE7SUFDeEMsQ0FBQztDQUNNLENBQUEifQ==","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = {\n    id: 'href-abs-or-rel',\n    description: 'An href attribute must be either absolute or relative.',\n    init(parser, reporter, options) {\n        const hrefMode = options === 'abs' ? 'absolute' : 'relative';\n        parser.addListener('tagstart', (event) => {\n            const attrs = event.attrs;\n            let attr;\n            const col = event.col + event.tagName.length + 1;\n            for (let i = 0, l = attrs.length; i < l; i++) {\n                attr = attrs[i];\n                if (attr.name === 'href') {\n                    if ((hrefMode === 'absolute' && /^\\w+?:/.test(attr.value) === false) ||\n                        (hrefMode === 'relative' &&\n                            /^https?:\\/\\//.test(attr.value) === true)) {\n                        reporter.warn(`The value of the href attribute [ ${attr.value} ] must be ${hrefMode}.`, event.line, col + attr.index, this, attr.raw);\n                    }\n                    break;\n                }\n            }\n        });\n    },\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHJlZi1hYnMtb3ItcmVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvcmUvcnVsZXMvaHJlZi1hYnMtb3ItcmVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBRUEsa0JBQWU7SUFDYixFQUFFLEVBQUUsaUJBQWlCO0lBQ3JCLFdBQVcsRUFBRSx3REFBd0Q7SUFDckUsSUFBSSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsT0FBTztRQUM1QixNQUFNLFFBQVEsR0FBRyxPQUFPLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQTtRQUU1RCxNQUFNLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ3ZDLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUE7WUFDekIsSUFBSSxJQUFJLENBQUE7WUFDUixNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQTtZQUVoRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUM1QyxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFBO2dCQUVmLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUU7b0JBQ3hCLElBQ0UsQ0FBQyxRQUFRLEtBQUssVUFBVSxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEtBQUssQ0FBQzt3QkFDaEUsQ0FBQyxRQUFRLEtBQUssVUFBVTs0QkFDdEIsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxDQUFDLEVBQzNDO3dCQUNBLFFBQVEsQ0FBQyxJQUFJLENBQ1gscUNBQXFDLElBQUksQ0FBQyxLQUFLLGNBQWMsUUFBUSxHQUFHLEVBQ3hFLEtBQUssQ0FBQyxJQUFJLEVBQ1YsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQ2hCLElBQUksRUFDSixJQUFJLENBQUMsR0FBRyxDQUNULENBQUE7cUJBQ0Y7b0JBQ0QsTUFBSztpQkFDTjthQUNGO1FBQ0gsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0NBQ00sQ0FBQSJ9","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst regular = '(art-lojban|cel-gaulish|no-bok|no-nyn|zh-guoyu|zh-hakka|zh-min|zh-min-nan|zh-xiang)';\nconst irregular = '(en-GB-oed|i-ami|i-bnn|i-default|i-enochian|i-hak|i-klingon|i-lux|i-mingo|i-navajo|i-pwn|i-tao|i-tay|i-tsu|sgn-BE-FR|sgn-BE-NL|sgn-CH-DE)';\nconst grandfathered = `(?<grandfathered>${irregular}|${regular})`;\nconst privateUse = '(?<privateUse>x(-[A-Za-z0-9]{1,8})+)';\nconst privateUse2 = '(?<privateUse2>x(-[A-Za-z0-9]{1,8})+)';\nconst singleton = '[0-9A-WY-Za-wy-z]';\nconst extension = `(?<extension>${singleton}(-[A-Za-z0-9]{2,8})+)`;\nconst variant = '(?<variant>[A-Za-z0-9]{5,8}|[0-9][A-Za-z0-9]{3})';\nconst region = '(?<region>[A-Za-z]{2}|[0-9]{3})';\nconst script = '(?<script>[A-Za-z]{4})';\nconst extlang = '(?<extlang>[A-Za-z]{3}(-[A-Za-z]{3}){0,2})';\nconst language = `(?<language>([A-Za-z]{2,3}(-${extlang})?)|[A-Za-z]{4}|[A-Za-z]{5,8})`;\nconst langtag = `(${language}(-${script})?` +\n    `(-${region})?` +\n    `(-${variant})*` +\n    `(-${extension})*` +\n    `(-${privateUse})?` +\n    ')';\nconst languageTag = `(${grandfathered}|${langtag}|${privateUse2})`;\nexports.default = {\n    id: 'html-lang-require',\n    description: 'The lang attribute of an <html> element must be present and should be valid.',\n    init(parser, reporter) {\n        parser.addListener('tagstart', (event) => {\n            const tagName = event.tagName.toLowerCase();\n            const mapAttrs = parser.getMapAttrs(event.attrs);\n            const col = event.col + tagName.length + 1;\n            const langValidityPattern = new RegExp(languageTag, 'g');\n            if (tagName === 'html') {\n                if ('lang' in mapAttrs) {\n                    if (!mapAttrs['lang']) {\n                        reporter.warn('The lang attribute of <html> element must have a value.', event.line, col, this, event.raw);\n                    }\n                    else if (!langValidityPattern.test(mapAttrs['lang'])) {\n                        reporter.warn('The lang attribute value of <html> element must be a valid BCP47.', event.line, col, this, event.raw);\n                    }\n                }\n                else {\n                    reporter.warn('An lang attribute must be present on <html> elements.', event.line, col, this, event.raw);\n                }\n            }\n        });\n    },\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHRtbC1sYW5nLXJlcXVpcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29yZS9ydWxlcy9odG1sLWxhbmctcmVxdWlyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUVBLE1BQU0sT0FBTyxHQUNYLHFGQUFxRixDQUFBO0FBQ3ZGLE1BQU0sU0FBUyxHQUNiLDJJQUEySSxDQUFBO0FBQzdJLE1BQU0sYUFBYSxHQUFHLG9CQUFvQixTQUFTLElBQUksT0FBTyxHQUFHLENBQUE7QUFDakUsTUFBTSxVQUFVLEdBQUcsc0NBQXNDLENBQUE7QUFDekQsTUFBTSxXQUFXLEdBQUcsdUNBQXVDLENBQUE7QUFDM0QsTUFBTSxTQUFTLEdBQUcsbUJBQW1CLENBQUE7QUFDckMsTUFBTSxTQUFTLEdBQUcsZ0JBQWdCLFNBQVMsdUJBQXVCLENBQUE7QUFDbEUsTUFBTSxPQUFPLEdBQUcsa0RBQWtELENBQUE7QUFDbEUsTUFBTSxNQUFNLEdBQUcsaUNBQWlDLENBQUE7QUFDaEQsTUFBTSxNQUFNLEdBQUcsd0JBQXdCLENBQUE7QUFDdkMsTUFBTSxPQUFPLEdBQUcsNENBQTRDLENBQUE7QUFDNUQsTUFBTSxRQUFRLEdBQUcsK0JBQStCLE9BQU8sZ0NBQWdDLENBQUE7QUFDdkYsTUFBTSxPQUFPLEdBQ1gsSUFBSSxRQUFRLEtBQUssTUFBTSxJQUFJO0lBQzNCLEtBQUssTUFBTSxJQUFJO0lBQ2YsS0FBSyxPQUFPLElBQUk7SUFDaEIsS0FBSyxTQUFTLElBQUk7SUFDbEIsS0FBSyxVQUFVLElBQUk7SUFDbkIsR0FBRyxDQUFBO0FBQ0wsTUFBTSxXQUFXLEdBQUcsSUFBSSxhQUFhLElBQUksT0FBTyxJQUFJLFdBQVcsR0FBRyxDQUFBO0FBRWxFLGtCQUFlO0lBQ2IsRUFBRSxFQUFFLG1CQUFtQjtJQUN2QixXQUFXLEVBQ1QsOEVBQThFO0lBQ2hGLElBQUksQ0FBQyxNQUFNLEVBQUUsUUFBUTtRQUNuQixNQUFNLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ3ZDLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUE7WUFDM0MsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUE7WUFDaEQsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLEdBQUcsR0FBRyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQTtZQUMxQyxNQUFNLG1CQUFtQixHQUFHLElBQUksTUFBTSxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQTtZQUV4RCxJQUFJLE9BQU8sS0FBSyxNQUFNLEVBQUU7Z0JBQ3RCLElBQUksTUFBTSxJQUFJLFFBQVEsRUFBRTtvQkFDdEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRTt3QkFDckIsUUFBUSxDQUFDLElBQUksQ0FDWCx5REFBeUQsRUFDekQsS0FBSyxDQUFDLElBQUksRUFDVixHQUFHLEVBQ0gsSUFBSSxFQUNKLEtBQUssQ0FBQyxHQUFHLENBQ1YsQ0FBQTtxQkFDRjt5QkFBTSxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFO3dCQUN0RCxRQUFRLENBQUMsSUFBSSxDQUNYLG1FQUFtRSxFQUNuRSxLQUFLLENBQUMsSUFBSSxFQUNWLEdBQUcsRUFDSCxJQUFJLEVBQ0osS0FBSyxDQUFDLEdBQUcsQ0FDVixDQUFBO3FCQUNGO2lCQUNGO3FCQUFNO29CQUNMLFFBQVEsQ0FBQyxJQUFJLENBQ1gsdURBQXVELEVBQ3ZELEtBQUssQ0FBQyxJQUFJLEVBQ1YsR0FBRyxFQUNILElBQUksRUFDSixLQUFLLENBQUMsR0FBRyxDQUNWLENBQUE7aUJBQ0Y7YUFDRjtRQUNILENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztDQUNNLENBQUEifQ==","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = {\n    id: 'id-class-ad-disabled',\n    description: 'The id and class attributes cannot use the ad keyword, it will be blocked by adblock software.',\n    init(parser, reporter) {\n        parser.addListener('tagstart', (event) => {\n            const attrs = event.attrs;\n            let attr;\n            let attrName;\n            const col = event.col + event.tagName.length + 1;\n            for (let i = 0, l = attrs.length; i < l; i++) {\n                attr = attrs[i];\n                attrName = attr.name;\n                if (/^(id|class)$/i.test(attrName)) {\n                    if (/(^|[-_])ad([-_]|$)/i.test(attr.value)) {\n                        reporter.warn(`The value of attribute ${attrName} cannot use the ad keyword.`, event.line, col + attr.index, this, attr.raw);\n                    }\n                }\n            }\n        });\n    },\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWQtY2xhc3MtYWQtZGlzYWJsZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29yZS9ydWxlcy9pZC1jbGFzcy1hZC1kaXNhYmxlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUVBLGtCQUFlO0lBQ2IsRUFBRSxFQUFFLHNCQUFzQjtJQUMxQixXQUFXLEVBQ1QsZ0dBQWdHO0lBQ2xHLElBQUksQ0FBQyxNQUFNLEVBQUUsUUFBUTtRQUNuQixNQUFNLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ3ZDLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUE7WUFDekIsSUFBSSxJQUFJLENBQUE7WUFDUixJQUFJLFFBQVEsQ0FBQTtZQUNaLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFBO1lBRWhELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQzVDLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUE7Z0JBQ2YsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUE7Z0JBRXBCLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRTtvQkFDbEMsSUFBSSxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO3dCQUMxQyxRQUFRLENBQUMsSUFBSSxDQUNYLDBCQUEwQixRQUFRLDZCQUE2QixFQUMvRCxLQUFLLENBQUMsSUFBSSxFQUNWLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUNoQixJQUFJLEVBQ0osSUFBSSxDQUFDLEdBQUcsQ0FDVCxDQUFBO3FCQUNGO2lCQUNGO2FBQ0Y7UUFDSCxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7Q0FDTSxDQUFBIn0=","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = {\n    id: 'id-class-value',\n    description: 'The id and class attribute values must meet the specified rules.',\n    init(parser, reporter, options) {\n        const arrRules = {\n            underline: {\n                regId: /^[a-z\\d]+(_[a-z\\d]+)*$/,\n                message: 'The id and class attribute values must be in lowercase and split by an underscore.',\n            },\n            dash: {\n                regId: /^[a-z\\d]+(-[a-z\\d]+)*$/,\n                message: 'The id and class attribute values must be in lowercase and split by a dash.',\n            },\n            hump: {\n                regId: /^[a-z][a-zA-Z\\d]*([A-Z][a-zA-Z\\d]*)*$/,\n                message: 'The id and class attribute values must meet the camelCase style.',\n            },\n        };\n        let rule;\n        if (typeof options === 'string') {\n            rule = arrRules[options];\n        }\n        else {\n            rule = options;\n        }\n        if (typeof rule === 'object' && rule.regId) {\n            let regId = rule.regId;\n            const message = rule.message;\n            if (!(regId instanceof RegExp)) {\n                regId = new RegExp(regId);\n            }\n            parser.addListener('tagstart', (event) => {\n                const attrs = event.attrs;\n                let attr;\n                const col = event.col + event.tagName.length + 1;\n                for (let i = 0, l1 = attrs.length; i < l1; i++) {\n                    attr = attrs[i];\n                    if (attr.name.toLowerCase() === 'id') {\n                        if (regId.test(attr.value) === false) {\n                            reporter.warn(message, event.line, col + attr.index, this, attr.raw);\n                        }\n                    }\n                    if (attr.name.toLowerCase() === 'class') {\n                        const arrClass = attr.value.split(/\\s+/g);\n                        let classValue;\n                        for (let j = 0, l2 = arrClass.length; j < l2; j++) {\n                            classValue = arrClass[j];\n                            if (classValue && regId.test(classValue) === false) {\n                                reporter.warn(message, event.line, col + attr.index, this, classValue);\n                            }\n                        }\n                    }\n                }\n            });\n        }\n    },\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWQtY2xhc3MtdmFsdWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29yZS9ydWxlcy9pZC1jbGFzcy12YWx1ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUVBLGtCQUFlO0lBQ2IsRUFBRSxFQUFFLGdCQUFnQjtJQUNwQixXQUFXLEVBQ1Qsa0VBQWtFO0lBQ3BFLElBQUksQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLE9BQU87UUFDNUIsTUFBTSxRQUFRLEdBQTZEO1lBQ3pFLFNBQVMsRUFBRTtnQkFDVCxLQUFLLEVBQUUsd0JBQXdCO2dCQUMvQixPQUFPLEVBQ0wsb0ZBQW9GO2FBQ3ZGO1lBQ0QsSUFBSSxFQUFFO2dCQUNKLEtBQUssRUFBRSx3QkFBd0I7Z0JBQy9CLE9BQU8sRUFDTCw2RUFBNkU7YUFDaEY7WUFDRCxJQUFJLEVBQUU7Z0JBQ0osS0FBSyxFQUFFLHVDQUF1QztnQkFDOUMsT0FBTyxFQUNMLGtFQUFrRTthQUNyRTtTQUNGLENBQUE7UUFDRCxJQUFJLElBQWtELENBQUE7UUFFdEQsSUFBSSxPQUFPLE9BQU8sS0FBSyxRQUFRLEVBQUU7WUFDL0IsSUFBSSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQTtTQUN6QjthQUFNO1lBQ0wsSUFBSSxHQUFHLE9BQTZDLENBQUE7U0FDckQ7UUFFRCxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQzFDLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUE7WUFDdEIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQTtZQUU1QixJQUFJLENBQUMsQ0FBQyxLQUFLLFlBQVksTUFBTSxDQUFDLEVBQUU7Z0JBQzlCLEtBQUssR0FBRyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQTthQUMxQjtZQUVELE1BQU0sQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ3ZDLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUE7Z0JBQ3pCLElBQUksSUFBSSxDQUFBO2dCQUNSLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFBO2dCQUVoRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO29CQUM5QyxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFBO29CQUVmLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsS0FBSyxJQUFJLEVBQUU7d0JBQ3BDLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssS0FBSyxFQUFFOzRCQUNwQyxRQUFRLENBQUMsSUFBSSxDQUNYLE9BQU8sRUFDUCxLQUFLLENBQUMsSUFBSSxFQUNWLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUNoQixJQUFJLEVBQ0osSUFBSSxDQUFDLEdBQUcsQ0FDVCxDQUFBO3lCQUNGO3FCQUNGO29CQUVELElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsS0FBSyxPQUFPLEVBQUU7d0JBQ3ZDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFBO3dCQUN6QyxJQUFJLFVBQVUsQ0FBQTt3QkFFZCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFOzRCQUNqRCxVQUFVLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFBOzRCQUN4QixJQUFJLFVBQVUsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEtBQUssRUFBRTtnQ0FDbEQsUUFBUSxDQUFDLElBQUksQ0FDWCxPQUFPLEVBQ1AsS0FBSyxDQUFDLElBQUksRUFDVixHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFDaEIsSUFBSSxFQUNKLFVBQVUsQ0FDWCxDQUFBOzZCQUNGO3lCQUNGO3FCQUNGO2lCQUNGO1lBQ0gsQ0FBQyxDQUFDLENBQUE7U0FDSDtJQUNILENBQUM7Q0FDTSxDQUFBIn0=","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = {\n    id: 'id-unique',\n    description: 'The value of id attributes must be unique.',\n    init(parser, reporter) {\n        const mapIdCount = {};\n        parser.addListener('tagstart', (event) => {\n            const attrs = event.attrs;\n            let attr;\n            let id;\n            const col = event.col + event.tagName.length + 1;\n            for (let i = 0, l = attrs.length; i < l; i++) {\n                attr = attrs[i];\n                if (attr.name.toLowerCase() === 'id') {\n                    id = attr.value;\n                    if (id) {\n                        if (mapIdCount[id] === undefined) {\n                            mapIdCount[id] = 1;\n                        }\n                        else {\n                            mapIdCount[id]++;\n                        }\n                        if (mapIdCount[id] > 1) {\n                            reporter.error(`The id value [ ${id} ] must be unique.`, event.line, col + attr.index, this, attr.raw);\n                        }\n                    }\n                    break;\n                }\n            }\n        });\n    },\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWQtdW5pcXVlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvcmUvcnVsZXMvaWQtdW5pcXVlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBRUEsa0JBQWU7SUFDYixFQUFFLEVBQUUsV0FBVztJQUNmLFdBQVcsRUFBRSw0Q0FBNEM7SUFDekQsSUFBSSxDQUFDLE1BQU0sRUFBRSxRQUFRO1FBQ25CLE1BQU0sVUFBVSxHQUE2QixFQUFFLENBQUE7UUFFL0MsTUFBTSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUN2QyxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFBO1lBQ3pCLElBQUksSUFBSSxDQUFBO1lBQ1IsSUFBSSxFQUFFLENBQUE7WUFDTixNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQTtZQUVoRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUM1QyxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFBO2dCQUVmLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsS0FBSyxJQUFJLEVBQUU7b0JBQ3BDLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFBO29CQUVmLElBQUksRUFBRSxFQUFFO3dCQUNOLElBQUksVUFBVSxDQUFDLEVBQUUsQ0FBQyxLQUFLLFNBQVMsRUFBRTs0QkFDaEMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQTt5QkFDbkI7NkJBQU07NEJBQ0wsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUE7eUJBQ2pCO3dCQUVELElBQUksVUFBVSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRTs0QkFDdEIsUUFBUSxDQUFDLEtBQUssQ0FDWixrQkFBa0IsRUFBRSxvQkFBb0IsRUFDeEMsS0FBSyxDQUFDLElBQUksRUFDVixHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFDaEIsSUFBSSxFQUNKLElBQUksQ0FBQyxHQUFHLENBQ1QsQ0FBQTt5QkFDRjtxQkFDRjtvQkFDRCxNQUFLO2lCQUNOO2FBQ0Y7UUFDSCxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7Q0FDTSxDQUFBIn0=","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = {\n    id: 'inline-script-disabled',\n    description: 'Inline script cannot be used.',\n    init(parser, reporter) {\n        parser.addListener('tagstart', (event) => {\n            const attrs = event.attrs;\n            let attr;\n            const col = event.col + event.tagName.length + 1;\n            let attrName;\n            const reEvent = /^on(unload|message|submit|select|scroll|resize|mouseover|mouseout|mousemove|mouseleave|mouseenter|mousedown|load|keyup|keypress|keydown|focus|dblclick|click|change|blur|error)$/i;\n            for (let i = 0, l = attrs.length; i < l; i++) {\n                attr = attrs[i];\n                attrName = attr.name.toLowerCase();\n                if (reEvent.test(attrName) === true) {\n                    reporter.warn(`Inline script [ ${attr.raw} ] cannot be used.`, event.line, col + attr.index, this, attr.raw);\n                }\n                else if (attrName === 'src' || attrName === 'href') {\n                    if (/^\\s*javascript:/i.test(attr.value)) {\n                        reporter.warn(`Inline script [ ${attr.raw} ] cannot be used.`, event.line, col + attr.index, this, attr.raw);\n                    }\n                }\n            }\n        });\n    },\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5saW5lLXNjcmlwdC1kaXNhYmxlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb3JlL3J1bGVzL2lubGluZS1zY3JpcHQtZGlzYWJsZWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFFQSxrQkFBZTtJQUNiLEVBQUUsRUFBRSx3QkFBd0I7SUFDNUIsV0FBVyxFQUFFLCtCQUErQjtJQUM1QyxJQUFJLENBQUMsTUFBTSxFQUFFLFFBQVE7UUFDbkIsTUFBTSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUN2QyxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFBO1lBQ3pCLElBQUksSUFBSSxDQUFBO1lBQ1IsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUE7WUFDaEQsSUFBSSxRQUFRLENBQUE7WUFDWixNQUFNLE9BQU8sR0FDWCxtTEFBbUwsQ0FBQTtZQUVyTCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUM1QyxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFBO2dCQUNmLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFBO2dCQUVsQyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssSUFBSSxFQUFFO29CQUNuQyxRQUFRLENBQUMsSUFBSSxDQUNYLG1CQUFtQixJQUFJLENBQUMsR0FBRyxvQkFBb0IsRUFDL0MsS0FBSyxDQUFDLElBQUksRUFDVixHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFDaEIsSUFBSSxFQUNKLElBQUksQ0FBQyxHQUFHLENBQ1QsQ0FBQTtpQkFDRjtxQkFBTSxJQUFJLFFBQVEsS0FBSyxLQUFLLElBQUksUUFBUSxLQUFLLE1BQU0sRUFBRTtvQkFDcEQsSUFBSSxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO3dCQUN2QyxRQUFRLENBQUMsSUFBSSxDQUNYLG1CQUFtQixJQUFJLENBQUMsR0FBRyxvQkFBb0IsRUFDL0MsS0FBSyxDQUFDLElBQUksRUFDVixHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFDaEIsSUFBSSxFQUNKLElBQUksQ0FBQyxHQUFHLENBQ1QsQ0FBQTtxQkFDRjtpQkFDRjthQUNGO1FBQ0gsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0NBQ00sQ0FBQSJ9","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = {\n    id: 'inline-style-disabled',\n    description: 'Inline style cannot be used.',\n    init(parser, reporter) {\n        parser.addListener('tagstart', (event) => {\n            const attrs = event.attrs;\n            let attr;\n            const col = event.col + event.tagName.length + 1;\n            for (let i = 0, l = attrs.length; i < l; i++) {\n                attr = attrs[i];\n                if (attr.name.toLowerCase() === 'style') {\n                    reporter.warn(`Inline style [ ${attr.raw} ] cannot be used.`, event.line, col + attr.index, this, attr.raw);\n                }\n            }\n        });\n    },\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5saW5lLXN0eWxlLWRpc2FibGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvcmUvcnVsZXMvaW5saW5lLXN0eWxlLWRpc2FibGVkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBRUEsa0JBQWU7SUFDYixFQUFFLEVBQUUsdUJBQXVCO0lBQzNCLFdBQVcsRUFBRSw4QkFBOEI7SUFDM0MsSUFBSSxDQUFDLE1BQU0sRUFBRSxRQUFRO1FBQ25CLE1BQU0sQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDdkMsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQTtZQUN6QixJQUFJLElBQUksQ0FBQTtZQUNSLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFBO1lBRWhELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQzVDLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUE7Z0JBRWYsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxLQUFLLE9BQU8sRUFBRTtvQkFDdkMsUUFBUSxDQUFDLElBQUksQ0FDWCxrQkFBa0IsSUFBSSxDQUFDLEdBQUcsb0JBQW9CLEVBQzlDLEtBQUssQ0FBQyxJQUFJLEVBQ1YsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQ2hCLElBQUksRUFDSixJQUFJLENBQUMsR0FBRyxDQUNULENBQUE7aUJBQ0Y7YUFDRjtRQUNILENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztDQUNNLENBQUEifQ==","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = {\n    id: 'input-requires-label',\n    description: 'All [ input ] tags must have a corresponding [ label ] tag. ',\n    init(parser, reporter) {\n        const labelTags = [];\n        const inputTags = [];\n        parser.addListener('tagstart', (event) => {\n            const tagName = event.tagName.toLowerCase();\n            const mapAttrs = parser.getMapAttrs(event.attrs);\n            const col = event.col + tagName.length + 1;\n            if (tagName === 'input') {\n                if (mapAttrs['type'] !== 'hidden') {\n                    inputTags.push({ event: event, col: col, id: mapAttrs['id'] });\n                }\n            }\n            if (tagName === 'label') {\n                if ('for' in mapAttrs && mapAttrs['for'] !== '') {\n                    labelTags.push({ event: event, col: col, forValue: mapAttrs['for'] });\n                }\n            }\n        });\n        parser.addListener('end', () => {\n            inputTags.forEach((inputTag) => {\n                if (!hasMatchingLabelTag(inputTag)) {\n                    reporter.warn('No matching [ label ] tag found.', inputTag.event.line, inputTag.col, this, inputTag.event.raw);\n                }\n            });\n        });\n        function hasMatchingLabelTag(inputTag) {\n            let found = false;\n            labelTags.forEach((labelTag) => {\n                if (inputTag.id && inputTag.id === labelTag.forValue) {\n                    found = true;\n                }\n            });\n            return found;\n        }\n    },\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtcmVxdWlyZXMtbGFiZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29yZS9ydWxlcy9pbnB1dC1yZXF1aXJlcy1sYWJlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUdBLGtCQUFlO0lBQ2IsRUFBRSxFQUFFLHNCQUFzQjtJQUMxQixXQUFXLEVBQUUsOERBQThEO0lBQzNFLElBQUksQ0FBQyxNQUFNLEVBQUUsUUFBUTtRQUNuQixNQUFNLFNBQVMsR0FJVixFQUFFLENBQUE7UUFDUCxNQUFNLFNBQVMsR0FBc0QsRUFBRSxDQUFBO1FBRXZFLE1BQU0sQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDdkMsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQTtZQUMzQyxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQTtZQUNoRCxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsR0FBRyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFBO1lBRTFDLElBQUksT0FBTyxLQUFLLE9BQU8sRUFBRTtnQkFFdkIsSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssUUFBUSxFQUFFO29CQUNqQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFBO2lCQUMvRDthQUNGO1lBRUQsSUFBSSxPQUFPLEtBQUssT0FBTyxFQUFFO2dCQUN2QixJQUFJLEtBQUssSUFBSSxRQUFRLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRTtvQkFDL0MsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQTtpQkFDdEU7YUFDRjtRQUNILENBQUMsQ0FBQyxDQUFBO1FBRUYsTUFBTSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFO1lBQzdCLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtnQkFDN0IsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxFQUFFO29CQUNsQyxRQUFRLENBQUMsSUFBSSxDQUNYLGtDQUFrQyxFQUNsQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksRUFDbkIsUUFBUSxDQUFDLEdBQUcsRUFDWixJQUFJLEVBQ0osUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQ25CLENBQUE7aUJBQ0Y7WUFDSCxDQUFDLENBQUMsQ0FBQTtRQUNKLENBQUMsQ0FBQyxDQUFBO1FBRUYsU0FBUyxtQkFBbUIsQ0FBQyxRQUF5QjtZQUNwRCxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUE7WUFDakIsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO2dCQUM3QixJQUFJLFFBQVEsQ0FBQyxFQUFFLElBQUksUUFBUSxDQUFDLEVBQUUsS0FBSyxRQUFRLENBQUMsUUFBUSxFQUFFO29CQUNwRCxLQUFLLEdBQUcsSUFBSSxDQUFBO2lCQUNiO1lBQ0gsQ0FBQyxDQUFDLENBQUE7WUFDRixPQUFPLEtBQUssQ0FBQTtRQUNkLENBQUM7SUFDSCxDQUFDO0NBQ00sQ0FBQSJ9","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = {\n    id: 'script-disabled',\n    description: 'The <script> tag cannot be used.',\n    init(parser, reporter) {\n        parser.addListener('tagstart', (event) => {\n            if (event.tagName.toLowerCase() === 'script') {\n                reporter.error('The <script> tag cannot be used.', event.line, event.col, this, event.raw);\n            }\n        });\n    },\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NyaXB0LWRpc2FibGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvcmUvcnVsZXMvc2NyaXB0LWRpc2FibGVkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBRUEsa0JBQWU7SUFDYixFQUFFLEVBQUUsaUJBQWlCO0lBQ3JCLFdBQVcsRUFBRSxrQ0FBa0M7SUFDL0MsSUFBSSxDQUFDLE1BQU0sRUFBRSxRQUFRO1FBQ25CLE1BQU0sQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDdkMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxLQUFLLFFBQVEsRUFBRTtnQkFDNUMsUUFBUSxDQUFDLEtBQUssQ0FDWixrQ0FBa0MsRUFDbEMsS0FBSyxDQUFDLElBQUksRUFDVixLQUFLLENBQUMsR0FBRyxFQUNULElBQUksRUFDSixLQUFLLENBQUMsR0FBRyxDQUNWLENBQUE7YUFDRjtRQUNILENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztDQUNNLENBQUEifQ==","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = {\n    id: 'space-tab-mixed-disabled',\n    description: 'Do not mix tabs and spaces for indentation.',\n    init(parser, reporter, options) {\n        let indentMode = 'nomix';\n        let spaceLengthRequire = null;\n        if (typeof options === 'string') {\n            const match = /^([a-z]+)(\\d+)?/.exec(options);\n            if (match) {\n                indentMode = match[1];\n                spaceLengthRequire = match[2] && parseInt(match[2], 10);\n            }\n        }\n        parser.addListener('text', (event) => {\n            const raw = event.raw;\n            const reMixed = /(^|\\r?\\n)([ \\t]+)/g;\n            let match;\n            while ((match = reMixed.exec(raw))) {\n                const fixedPos = parser.fixPos(event, match.index + match[1].length);\n                if (fixedPos.col !== 1) {\n                    continue;\n                }\n                const whiteSpace = match[2];\n                if (indentMode === 'space') {\n                    if (spaceLengthRequire) {\n                        if (/^ +$/.test(whiteSpace) === false ||\n                            whiteSpace.length % spaceLengthRequire !== 0) {\n                            reporter.warn(`Please use space for indentation and keep ${spaceLengthRequire} length.`, fixedPos.line, 1, this, event.raw);\n                        }\n                    }\n                    else {\n                        if (/^ +$/.test(whiteSpace) === false) {\n                            reporter.warn('Please use space for indentation.', fixedPos.line, 1, this, event.raw);\n                        }\n                    }\n                }\n                else if (indentMode === 'tab' && /^\\t+$/.test(whiteSpace) === false) {\n                    reporter.warn('Please use tab for indentation.', fixedPos.line, 1, this, event.raw);\n                }\n                else if (/ +\\t|\\t+ /.test(whiteSpace) === true) {\n                    reporter.warn('Do not mix tabs and spaces for indentation.', fixedPos.line, 1, this, event.raw);\n                }\n            }\n        });\n    },\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BhY2UtdGFiLW1peGVkLWRpc2FibGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvcmUvcnVsZXMvc3BhY2UtdGFiLW1peGVkLWRpc2FibGVkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBRUEsa0JBQWU7SUFDYixFQUFFLEVBQUUsMEJBQTBCO0lBQzlCLFdBQVcsRUFBRSw2Q0FBNkM7SUFDMUQsSUFBSSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsT0FBTztRQUM1QixJQUFJLFVBQVUsR0FBRyxPQUFPLENBQUE7UUFDeEIsSUFBSSxrQkFBa0IsR0FBdUIsSUFBSSxDQUFBO1FBRWpELElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxFQUFFO1lBQy9CLE1BQU0sS0FBSyxHQUFHLGlCQUFpQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtZQUM3QyxJQUFJLEtBQUssRUFBRTtnQkFDVCxVQUFVLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFBO2dCQUNyQixrQkFBa0IsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQTthQUN4RDtTQUNGO1FBRUQsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNuQyxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFBO1lBQ3JCLE1BQU0sT0FBTyxHQUFHLG9CQUFvQixDQUFBO1lBQ3BDLElBQUksS0FBSyxDQUFBO1lBRVQsT0FBTyxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7Z0JBQ2xDLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFBO2dCQUNwRSxJQUFJLFFBQVEsQ0FBQyxHQUFHLEtBQUssQ0FBQyxFQUFFO29CQUN0QixTQUFRO2lCQUNUO2dCQUVELE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQTtnQkFDM0IsSUFBSSxVQUFVLEtBQUssT0FBTyxFQUFFO29CQUMxQixJQUFJLGtCQUFrQixFQUFFO3dCQUN0QixJQUNFLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssS0FBSzs0QkFDakMsVUFBVSxDQUFDLE1BQU0sR0FBRyxrQkFBa0IsS0FBSyxDQUFDLEVBQzVDOzRCQUNBLFFBQVEsQ0FBQyxJQUFJLENBQ1gsNkNBQTZDLGtCQUFrQixVQUFVLEVBQ3pFLFFBQVEsQ0FBQyxJQUFJLEVBQ2IsQ0FBQyxFQUNELElBQUksRUFDSixLQUFLLENBQUMsR0FBRyxDQUNWLENBQUE7eUJBQ0Y7cUJBQ0Y7eUJBQU07d0JBQ0wsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEtBQUssRUFBRTs0QkFDckMsUUFBUSxDQUFDLElBQUksQ0FDWCxtQ0FBbUMsRUFDbkMsUUFBUSxDQUFDLElBQUksRUFDYixDQUFDLEVBQ0QsSUFBSSxFQUNKLEtBQUssQ0FBQyxHQUFHLENBQ1YsQ0FBQTt5QkFDRjtxQkFDRjtpQkFDRjtxQkFBTSxJQUFJLFVBQVUsS0FBSyxLQUFLLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxLQUFLLEVBQUU7b0JBQ3JFLFFBQVEsQ0FBQyxJQUFJLENBQ1gsaUNBQWlDLEVBQ2pDLFFBQVEsQ0FBQyxJQUFJLEVBQ2IsQ0FBQyxFQUNELElBQUksRUFDSixLQUFLLENBQUMsR0FBRyxDQUNWLENBQUE7aUJBQ0Y7cUJBQU0sSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLElBQUksRUFBRTtvQkFDaEQsUUFBUSxDQUFDLElBQUksQ0FDWCw2Q0FBNkMsRUFDN0MsUUFBUSxDQUFDLElBQUksRUFDYixDQUFDLEVBQ0QsSUFBSSxFQUNKLEtBQUssQ0FBQyxHQUFHLENBQ1YsQ0FBQTtpQkFDRjthQUNGO1FBQ0gsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0NBQ00sQ0FBQSJ9","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = {\n    id: 'spec-char-escape',\n    description: 'Special characters must be escaped.',\n    init(parser, reporter) {\n        parser.addListener('text', (event) => {\n            const raw = event.raw;\n            const reSpecChar = /([<>])|( \\& )/g;\n            let match;\n            while ((match = reSpecChar.exec(raw))) {\n                const fixedPos = parser.fixPos(event, match.index);\n                reporter.error(`Special characters must be escaped : [ ${match[0]} ].`, fixedPos.line, fixedPos.col, this, event.raw);\n            }\n        });\n    },\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BlYy1jaGFyLWVzY2FwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb3JlL3J1bGVzL3NwZWMtY2hhci1lc2NhcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFFQSxrQkFBZTtJQUNiLEVBQUUsRUFBRSxrQkFBa0I7SUFDdEIsV0FBVyxFQUFFLHFDQUFxQztJQUNsRCxJQUFJLENBQUMsTUFBTSxFQUFFLFFBQVE7UUFDbkIsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNuQyxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFBO1lBRXJCLE1BQU0sVUFBVSxHQUFHLGdCQUFnQixDQUFBO1lBQ25DLElBQUksS0FBSyxDQUFBO1lBRVQsT0FBTyxDQUFDLEtBQUssR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7Z0JBQ3JDLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQTtnQkFDbEQsUUFBUSxDQUFDLEtBQUssQ0FDWiwwQ0FBMEMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQ3ZELFFBQVEsQ0FBQyxJQUFJLEVBQ2IsUUFBUSxDQUFDLEdBQUcsRUFDWixJQUFJLEVBQ0osS0FBSyxDQUFDLEdBQUcsQ0FDVixDQUFBO2FBQ0Y7UUFDSCxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7Q0FDTSxDQUFBIn0=","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = {\n    id: 'src-not-empty',\n    description: 'The src attribute of an img(script,link) must have a value.',\n    init(parser, reporter) {\n        parser.addListener('tagstart', (event) => {\n            const tagName = event.tagName;\n            const attrs = event.attrs;\n            let attr;\n            const col = event.col + tagName.length + 1;\n            for (let i = 0, l = attrs.length; i < l; i++) {\n                attr = attrs[i];\n                if (((/^(img|script|embed|bgsound|iframe)$/.test(tagName) === true &&\n                    attr.name === 'src') ||\n                    (tagName === 'link' && attr.name === 'href') ||\n                    (tagName === 'object' && attr.name === 'data')) &&\n                    attr.value === '') {\n                    reporter.error(`The attribute [ ${attr.name} ] of the tag [ ${tagName} ] must have a value.`, event.line, col + attr.index, this, attr.raw);\n                }\n            }\n        });\n    },\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3JjLW5vdC1lbXB0eS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb3JlL3J1bGVzL3NyYy1ub3QtZW1wdHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFFQSxrQkFBZTtJQUNiLEVBQUUsRUFBRSxlQUFlO0lBQ25CLFdBQVcsRUFBRSw2REFBNkQ7SUFDMUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxRQUFRO1FBQ25CLE1BQU0sQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDdkMsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQTtZQUM3QixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFBO1lBQ3pCLElBQUksSUFBSSxDQUFBO1lBQ1IsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLEdBQUcsR0FBRyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQTtZQUUxQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUM1QyxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFBO2dCQUVmLElBQ0UsQ0FBQyxDQUFDLHFDQUFxQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxJQUFJO29CQUM1RCxJQUFJLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQztvQkFDcEIsQ0FBQyxPQUFPLEtBQUssTUFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDO29CQUM1QyxDQUFDLE9BQU8sS0FBSyxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxNQUFNLENBQUMsQ0FBQztvQkFDakQsSUFBSSxDQUFDLEtBQUssS0FBSyxFQUFFLEVBQ2pCO29CQUNBLFFBQVEsQ0FBQyxLQUFLLENBQ1osbUJBQW1CLElBQUksQ0FBQyxJQUFJLG1CQUFtQixPQUFPLHVCQUF1QixFQUM3RSxLQUFLLENBQUMsSUFBSSxFQUNWLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUNoQixJQUFJLEVBQ0osSUFBSSxDQUFDLEdBQUcsQ0FDVCxDQUFBO2lCQUNGO2FBQ0Y7UUFDSCxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7Q0FDTSxDQUFBIn0=","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = {\n    id: 'style-disabled',\n    description: '<style> tags cannot be used.',\n    init(parser, reporter) {\n        parser.addListener('tagstart', (event) => {\n            if (event.tagName.toLowerCase() === 'style') {\n                reporter.warn('The <style> tag cannot be used.', event.line, event.col, this, event.raw);\n            }\n        });\n    },\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3R5bGUtZGlzYWJsZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29yZS9ydWxlcy9zdHlsZS1kaXNhYmxlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUVBLGtCQUFlO0lBQ2IsRUFBRSxFQUFFLGdCQUFnQjtJQUNwQixXQUFXLEVBQUUsOEJBQThCO0lBQzNDLElBQUksQ0FBQyxNQUFNLEVBQUUsUUFBUTtRQUNuQixNQUFNLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ3ZDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsS0FBSyxPQUFPLEVBQUU7Z0JBQzNDLFFBQVEsQ0FBQyxJQUFJLENBQ1gsaUNBQWlDLEVBQ2pDLEtBQUssQ0FBQyxJQUFJLEVBQ1YsS0FBSyxDQUFDLEdBQUcsRUFDVCxJQUFJLEVBQ0osS0FBSyxDQUFDLEdBQUcsQ0FDVixDQUFBO2FBQ0Y7UUFDSCxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7Q0FDTSxDQUFBIn0=","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = {\n    id: 'tag-pair',\n    description: 'Tag must be paired.',\n    init(parser, reporter) {\n        const stack = [];\n        const mapEmptyTags = parser.makeMap('area,base,basefont,br,col,frame,hr,img,input,isindex,link,meta,param,embed,track,command,source,keygen,wbr');\n        parser.addListener('tagstart', (event) => {\n            const tagName = event.tagName.toLowerCase();\n            if (mapEmptyTags[tagName] === undefined && !event.close) {\n                stack.push({\n                    tagName: tagName,\n                    line: event.line,\n                    raw: event.raw,\n                });\n            }\n        });\n        parser.addListener('tagend', (event) => {\n            const tagName = event.tagName.toLowerCase();\n            let pos;\n            for (pos = stack.length - 1; pos >= 0; pos--) {\n                if (stack[pos].tagName === tagName) {\n                    break;\n                }\n            }\n            if (pos >= 0) {\n                const arrTags = [];\n                for (let i = stack.length - 1; i > pos; i--) {\n                    arrTags.push(`</${stack[i].tagName}>`);\n                }\n                if (arrTags.length > 0) {\n                    const lastEvent = stack[stack.length - 1];\n                    reporter.error(`Tag must be paired, missing: [ ${arrTags.join('')} ], start tag match failed [ ${lastEvent.raw} ] on line ${lastEvent.line}.`, event.line, event.col, this, event.raw);\n                }\n                stack.length = pos;\n            }\n            else {\n                reporter.error(`Tag must be paired, no start tag: [ ${event.raw} ]`, event.line, event.col, this, event.raw);\n            }\n        });\n        parser.addListener('end', (event) => {\n            const arrTags = [];\n            for (let i = stack.length - 1; i >= 0; i--) {\n                arrTags.push(`</${stack[i].tagName}>`);\n            }\n            if (arrTags.length > 0) {\n                const lastEvent = stack[stack.length - 1];\n                reporter.error(`Tag must be paired, missing: [ ${arrTags.join('')} ], open tag match failed [ ${lastEvent.raw} ] on line ${lastEvent.line}.`, event.line, event.col, this, '');\n            }\n        });\n    },\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFnLXBhaXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29yZS9ydWxlcy90YWctcGFpci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUdBLGtCQUFlO0lBQ2IsRUFBRSxFQUFFLFVBQVU7SUFDZCxXQUFXLEVBQUUscUJBQXFCO0lBQ2xDLElBQUksQ0FBQyxNQUFNLEVBQUUsUUFBUTtRQUNuQixNQUFNLEtBQUssR0FBMEIsRUFBRSxDQUFBO1FBQ3ZDLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQ2pDLDRHQUE0RyxDQUM3RyxDQUFBO1FBRUQsTUFBTSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUN2QyxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFBO1lBQzNDLElBQUksWUFBWSxDQUFDLE9BQU8sQ0FBQyxLQUFLLFNBQVMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUU7Z0JBQ3ZELEtBQUssQ0FBQyxJQUFJLENBQUM7b0JBQ1QsT0FBTyxFQUFFLE9BQU87b0JBQ2hCLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSTtvQkFDaEIsR0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFHO2lCQUNmLENBQUMsQ0FBQTthQUNIO1FBQ0gsQ0FBQyxDQUFDLENBQUE7UUFFRixNQUFNLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ3JDLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUE7WUFHM0MsSUFBSSxHQUFHLENBQUE7WUFDUCxLQUFLLEdBQUcsR0FBRyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFO2dCQUM1QyxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEtBQUssT0FBTyxFQUFFO29CQUNsQyxNQUFLO2lCQUNOO2FBQ0Y7WUFFRCxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUU7Z0JBQ1osTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFBO2dCQUNsQixLQUFLLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7b0JBQzNDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQTtpQkFDdkM7Z0JBRUQsSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtvQkFDdEIsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUE7b0JBQ3pDLFFBQVEsQ0FBQyxLQUFLLENBQ1osa0NBQWtDLE9BQU8sQ0FBQyxJQUFJLENBQzVDLEVBQUUsQ0FDSCxnQ0FBZ0MsU0FBUyxDQUFDLEdBQUcsY0FDNUMsU0FBUyxDQUFDLElBQ1osR0FBRyxFQUNILEtBQUssQ0FBQyxJQUFJLEVBQ1YsS0FBSyxDQUFDLEdBQUcsRUFDVCxJQUFJLEVBQ0osS0FBSyxDQUFDLEdBQUcsQ0FDVixDQUFBO2lCQUNGO2dCQUNELEtBQUssQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFBO2FBQ25CO2lCQUFNO2dCQUNMLFFBQVEsQ0FBQyxLQUFLLENBQ1osdUNBQXVDLEtBQUssQ0FBQyxHQUFHLElBQUksRUFDcEQsS0FBSyxDQUFDLElBQUksRUFDVixLQUFLLENBQUMsR0FBRyxFQUNULElBQUksRUFDSixLQUFLLENBQUMsR0FBRyxDQUNWLENBQUE7YUFDRjtRQUNILENBQUMsQ0FBQyxDQUFBO1FBRUYsTUFBTSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNsQyxNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUE7WUFFbEIsS0FBSyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUMxQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUE7YUFDdkM7WUFFRCxJQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUN0QixNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQTtnQkFDekMsUUFBUSxDQUFDLEtBQUssQ0FDWixrQ0FBa0MsT0FBTyxDQUFDLElBQUksQ0FDNUMsRUFBRSxDQUNILCtCQUErQixTQUFTLENBQUMsR0FBRyxjQUMzQyxTQUFTLENBQUMsSUFDWixHQUFHLEVBQ0gsS0FBSyxDQUFDLElBQUksRUFDVixLQUFLLENBQUMsR0FBRyxFQUNULElBQUksRUFDSixFQUFFLENBQ0gsQ0FBQTthQUNGO1FBQ0gsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0NBQ00sQ0FBQSJ9","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = {\n    id: 'tag-self-close',\n    description: 'Empty tags must be self closed.',\n    init(parser, reporter) {\n        const mapEmptyTags = parser.makeMap('area,base,basefont,bgsound,br,col,frame,hr,img,input,isindex,link,meta,param,embed,track,command,source,keygen,wbr');\n        parser.addListener('tagstart', (event) => {\n            const tagName = event.tagName.toLowerCase();\n            if (mapEmptyTags[tagName] !== undefined) {\n                if (!event.close) {\n                    reporter.warn(`The empty tag : [ ${tagName} ] must be self closed.`, event.line, event.col, this, event.raw);\n                }\n            }\n        });\n    },\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFnLXNlbGYtY2xvc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29yZS9ydWxlcy90YWctc2VsZi1jbG9zZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUVBLGtCQUFlO0lBQ2IsRUFBRSxFQUFFLGdCQUFnQjtJQUNwQixXQUFXLEVBQUUsaUNBQWlDO0lBQzlDLElBQUksQ0FBQyxNQUFNLEVBQUUsUUFBUTtRQUNuQixNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsT0FBTyxDQUNqQyxvSEFBb0gsQ0FDckgsQ0FBQTtRQUVELE1BQU0sQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDdkMsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQTtZQUMzQyxJQUFJLFlBQVksQ0FBQyxPQUFPLENBQUMsS0FBSyxTQUFTLEVBQUU7Z0JBQ3ZDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFO29CQUNoQixRQUFRLENBQUMsSUFBSSxDQUNYLHFCQUFxQixPQUFPLHlCQUF5QixFQUNyRCxLQUFLLENBQUMsSUFBSSxFQUNWLEtBQUssQ0FBQyxHQUFHLEVBQ1QsSUFBSSxFQUNKLEtBQUssQ0FBQyxHQUFHLENBQ1YsQ0FBQTtpQkFDRjthQUNGO1FBQ0gsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0NBQ00sQ0FBQSJ9","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = {\n    id: 'empty-tag-not-self-closed',\n    description: 'Empty tags must not use self closed syntax.',\n    init(parser, reporter) {\n        const mapEmptyTags = parser.makeMap('area,base,basefont,bgsound,br,col,frame,hr,img,input,isindex,link,meta,param,embed,track,command,source,keygen,wbr');\n        parser.addListener('tagstart', (event) => {\n            const tagName = event.tagName.toLowerCase();\n            if (mapEmptyTags[tagName] !== undefined) {\n                if (event.close) {\n                    reporter.error(`The empty tag : [ ${tagName} ] must not use self closed syntax.`, event.line, event.col, this, event.raw);\n                }\n            }\n        });\n    },\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1wdHktdGFnLW5vdC1zZWxmLWNsb3NlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb3JlL3J1bGVzL2VtcHR5LXRhZy1ub3Qtc2VsZi1jbG9zZWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFFQSxrQkFBZTtJQUNiLEVBQUUsRUFBRSwyQkFBMkI7SUFDL0IsV0FBVyxFQUFFLDZDQUE2QztJQUMxRCxJQUFJLENBQUMsTUFBTSxFQUFFLFFBQVE7UUFDbkIsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FDakMsb0hBQW9ILENBQ3JILENBQUE7UUFFRCxNQUFNLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ3ZDLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUE7WUFDM0MsSUFBSSxZQUFZLENBQUMsT0FBTyxDQUFDLEtBQUssU0FBUyxFQUFFO2dCQUN2QyxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUU7b0JBQ2YsUUFBUSxDQUFDLEtBQUssQ0FDWixxQkFBcUIsT0FBTyxxQ0FBcUMsRUFDakUsS0FBSyxDQUFDLElBQUksRUFDVixLQUFLLENBQUMsR0FBRyxFQUNULElBQUksRUFDSixLQUFLLENBQUMsR0FBRyxDQUNWLENBQUE7aUJBQ0Y7YUFDRjtRQUNILENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztDQUNNLENBQUEifQ==","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = {\n    id: 'tagname-lowercase',\n    description: 'All html element names must be in lowercase.',\n    init(parser, reporter, options) {\n        const exceptions = Array.isArray(options)\n            ? options\n            : [];\n        parser.addListener('tagstart,tagend', (event) => {\n            const tagName = event.tagName;\n            if (exceptions.indexOf(tagName) === -1 &&\n                tagName !== tagName.toLowerCase()) {\n                reporter.error(`The html element name of [ ${tagName} ] must be in lowercase.`, event.line, event.col, this, event.raw);\n            }\n        });\n    },\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFnbmFtZS1sb3dlcmNhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29yZS9ydWxlcy90YWduYW1lLWxvd2VyY2FzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUVBLGtCQUFlO0lBQ2IsRUFBRSxFQUFFLG1CQUFtQjtJQUN2QixXQUFXLEVBQUUsOENBQThDO0lBQzNELElBQUksQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLE9BQU87UUFDNUIsTUFBTSxVQUFVLEdBQTRCLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO1lBQ2hFLENBQUMsQ0FBQyxPQUFPO1lBQ1QsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtRQUVOLE1BQU0sQ0FBQyxXQUFXLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUM5QyxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFBO1lBQzdCLElBQ0UsVUFBVSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ2xDLE9BQU8sS0FBSyxPQUFPLENBQUMsV0FBVyxFQUFFLEVBQ2pDO2dCQUNBLFFBQVEsQ0FBQyxLQUFLLENBQ1osOEJBQThCLE9BQU8sMEJBQTBCLEVBQy9ELEtBQUssQ0FBQyxJQUFJLEVBQ1YsS0FBSyxDQUFDLEdBQUcsRUFDVCxJQUFJLEVBQ0osS0FBSyxDQUFDLEdBQUcsQ0FDVixDQUFBO2FBQ0Y7UUFDSCxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7Q0FDTSxDQUFBIn0=","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = {\n    id: 'tagname-specialchars',\n    description: 'All special characters must be escaped.',\n    init(parser, reporter) {\n        const specialchars = /[^a-zA-Z0-9\\-:_]/;\n        parser.addListener('tagstart,tagend', (event) => {\n            const tagName = event.tagName;\n            if (specialchars.test(tagName)) {\n                reporter.error(`The html element name of [ ${tagName} ] contains special character.`, event.line, event.col, this, event.raw);\n            }\n        });\n    },\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFnbmFtZS1zcGVjaWFsY2hhcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29yZS9ydWxlcy90YWduYW1lLXNwZWNpYWxjaGFycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUVBLGtCQUFlO0lBQ2IsRUFBRSxFQUFFLHNCQUFzQjtJQUMxQixXQUFXLEVBQUUseUNBQXlDO0lBQ3RELElBQUksQ0FBQyxNQUFNLEVBQUUsUUFBUTtRQUNuQixNQUFNLFlBQVksR0FBRyxrQkFBa0IsQ0FBQTtRQUV2QyxNQUFNLENBQUMsV0FBVyxDQUFDLGlCQUFpQixFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDOUMsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQTtZQUM3QixJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQzlCLFFBQVEsQ0FBQyxLQUFLLENBQ1osOEJBQThCLE9BQU8sZ0NBQWdDLEVBQ3JFLEtBQUssQ0FBQyxJQUFJLEVBQ1YsS0FBSyxDQUFDLEdBQUcsRUFDVCxJQUFJLEVBQ0osS0FBSyxDQUFDLEdBQUcsQ0FDVixDQUFBO2FBQ0Y7UUFDSCxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7Q0FDTSxDQUFBIn0=","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = {\n    id: 'title-require',\n    description: '<title> must be present in <head> tag.',\n    init(parser, reporter) {\n        let headBegin = false;\n        let hasTitle = false;\n        const onTagStart = (event) => {\n            const tagName = event.tagName.toLowerCase();\n            if (tagName === 'head') {\n                headBegin = true;\n            }\n            else if (tagName === 'title' && headBegin) {\n                hasTitle = true;\n            }\n        };\n        const onTagEnd = (event) => {\n            const tagName = event.tagName.toLowerCase();\n            if (hasTitle && tagName === 'title') {\n                const lastEvent = event.lastEvent;\n                if (lastEvent.type !== 'text' ||\n                    (lastEvent.type === 'text' && /^\\s*$/.test(lastEvent.raw) === true)) {\n                    reporter.error('<title></title> must not be empty.', event.line, event.col, this, event.raw);\n                }\n            }\n            else if (tagName === 'head') {\n                if (hasTitle === false) {\n                    reporter.error('<title> must be present in <head> tag.', event.line, event.col, this, event.raw);\n                }\n                parser.removeListener('tagstart', onTagStart);\n                parser.removeListener('tagend', onTagEnd);\n            }\n        };\n        parser.addListener('tagstart', onTagStart);\n        parser.addListener('tagend', onTagEnd);\n    },\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGl0bGUtcmVxdWlyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb3JlL3J1bGVzL3RpdGxlLXJlcXVpcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFHQSxrQkFBZTtJQUNiLEVBQUUsRUFBRSxlQUFlO0lBQ25CLFdBQVcsRUFBRSx3Q0FBd0M7SUFDckQsSUFBSSxDQUFDLE1BQU0sRUFBRSxRQUFRO1FBQ25CLElBQUksU0FBUyxHQUFHLEtBQUssQ0FBQTtRQUNyQixJQUFJLFFBQVEsR0FBRyxLQUFLLENBQUE7UUFFcEIsTUFBTSxVQUFVLEdBQWEsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNyQyxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFBO1lBQzNDLElBQUksT0FBTyxLQUFLLE1BQU0sRUFBRTtnQkFDdEIsU0FBUyxHQUFHLElBQUksQ0FBQTthQUNqQjtpQkFBTSxJQUFJLE9BQU8sS0FBSyxPQUFPLElBQUksU0FBUyxFQUFFO2dCQUMzQyxRQUFRLEdBQUcsSUFBSSxDQUFBO2FBQ2hCO1FBQ0gsQ0FBQyxDQUFBO1FBRUQsTUFBTSxRQUFRLEdBQWEsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNuQyxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFBO1lBQzNDLElBQUksUUFBUSxJQUFJLE9BQU8sS0FBSyxPQUFPLEVBQUU7Z0JBR25DLE1BQU0sU0FBUyxHQUFVLEtBQUssQ0FBQyxTQUFTLENBQUE7Z0JBQ3hDLElBQ0UsU0FBUyxDQUFDLElBQUksS0FBSyxNQUFNO29CQUN6QixDQUFDLFNBQVMsQ0FBQyxJQUFJLEtBQUssTUFBTSxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLElBQUksQ0FBQyxFQUNuRTtvQkFDQSxRQUFRLENBQUMsS0FBSyxDQUNaLG9DQUFvQyxFQUNwQyxLQUFLLENBQUMsSUFBSSxFQUNWLEtBQUssQ0FBQyxHQUFHLEVBQ1QsSUFBSSxFQUNKLEtBQUssQ0FBQyxHQUFHLENBQ1YsQ0FBQTtpQkFDRjthQUNGO2lCQUFNLElBQUksT0FBTyxLQUFLLE1BQU0sRUFBRTtnQkFDN0IsSUFBSSxRQUFRLEtBQUssS0FBSyxFQUFFO29CQUN0QixRQUFRLENBQUMsS0FBSyxDQUNaLHdDQUF3QyxFQUN4QyxLQUFLLENBQUMsSUFBSSxFQUNWLEtBQUssQ0FBQyxHQUFHLEVBQ1QsSUFBSSxFQUNKLEtBQUssQ0FBQyxHQUFHLENBQ1YsQ0FBQTtpQkFDRjtnQkFFRCxNQUFNLENBQUMsY0FBYyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQTtnQkFDN0MsTUFBTSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUE7YUFDMUM7UUFDSCxDQUFDLENBQUE7UUFFRCxNQUFNLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQTtRQUMxQyxNQUFNLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQTtJQUN4QyxDQUFDO0NBQ00sQ0FBQSJ9","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nlet tagsTypings = {\n    a: {\n        selfclosing: false,\n        attrsRequired: ['href', 'title'],\n        redundantAttrs: ['alt'],\n    },\n    div: {\n        selfclosing: false,\n    },\n    main: {\n        selfclosing: false,\n        redundantAttrs: ['role'],\n    },\n    nav: {\n        selfclosing: false,\n        redundantAttrs: ['role'],\n    },\n    script: {\n        attrsOptional: [\n            ['async', 'async'],\n            ['defer', 'defer'],\n        ],\n    },\n    img: {\n        selfclosing: true,\n        attrsRequired: ['src', 'alt', 'title'],\n    },\n};\nexports.default = {\n    id: 'tags-check',\n    description: 'Checks html tags.',\n    init(parser, reporter, options) {\n        tagsTypings = Object.assign(Object.assign({}, tagsTypings), options);\n        parser.addListener('tagstart', (event) => {\n            const attrs = event.attrs;\n            const col = event.col + event.tagName.length + 1;\n            const tagName = event.tagName.toLowerCase();\n            if (tagsTypings[tagName]) {\n                const currentTagType = tagsTypings[tagName];\n                if (currentTagType.selfclosing === true && !event.close) {\n                    reporter.warn(`The <${tagName}> tag must be selfclosing.`, event.line, event.col, this, event.raw);\n                }\n                else if (currentTagType.selfclosing === false && event.close) {\n                    reporter.warn(`The <${tagName}> tag must not be selfclosing.`, event.line, event.col, this, event.raw);\n                }\n                if (Array.isArray(currentTagType.attrsRequired)) {\n                    const attrsRequired = currentTagType.attrsRequired;\n                    attrsRequired.forEach((id) => {\n                        if (Array.isArray(id)) {\n                            const copyOfId = id.map((a) => a);\n                            const realID = copyOfId.shift();\n                            const values = copyOfId;\n                            if (attrs.some((attr) => attr.name === realID)) {\n                                attrs.forEach((attr) => {\n                                    if (attr.name === realID &&\n                                        values.indexOf(attr.value) === -1) {\n                                        reporter.error(`The <${tagName}> tag must have attr '${realID}' with one value of '${values.join(\"' or '\")}'.`, event.line, col, this, event.raw);\n                                    }\n                                });\n                            }\n                            else {\n                                reporter.error(`The <${tagName}> tag must have attr '${realID}'.`, event.line, col, this, event.raw);\n                            }\n                        }\n                        else if (!attrs.some((attr) => id.split('|').indexOf(attr.name) !== -1)) {\n                            reporter.error(`The <${tagName}> tag must have attr '${id}'.`, event.line, col, this, event.raw);\n                        }\n                    });\n                }\n                if (Array.isArray(currentTagType.attrsOptional)) {\n                    const attrsOptional = currentTagType.attrsOptional;\n                    attrsOptional.forEach((id) => {\n                        if (Array.isArray(id)) {\n                            const copyOfId = id.map((a) => a);\n                            const realID = copyOfId.shift();\n                            const values = copyOfId;\n                            if (attrs.some((attr) => attr.name === realID)) {\n                                attrs.forEach((attr) => {\n                                    if (attr.name === realID &&\n                                        values.indexOf(attr.value) === -1) {\n                                        reporter.error(`The <${tagName}> tag must have optional attr '${realID}' with one value of '${values.join(\"' or '\")}'.`, event.line, col, this, event.raw);\n                                    }\n                                });\n                            }\n                        }\n                    });\n                }\n                if (Array.isArray(currentTagType.redundantAttrs)) {\n                    const redundantAttrs = currentTagType.redundantAttrs;\n                    redundantAttrs.forEach((attrName) => {\n                        if (attrs.some((attr) => attr.name === attrName)) {\n                            reporter.error(`The attr '${attrName}' is redundant for <${tagName}> and should be omitted.`, event.line, col, this, event.raw);\n                        }\n                    });\n                }\n            }\n        });\n    },\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFncy1jaGVjay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb3JlL3J1bGVzL3RhZ3MtY2hlY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFFQSxJQUFJLFdBQVcsR0FBNEM7SUFDekQsQ0FBQyxFQUFFO1FBQ0QsV0FBVyxFQUFFLEtBQUs7UUFDbEIsYUFBYSxFQUFFLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQztRQUNoQyxjQUFjLEVBQUUsQ0FBQyxLQUFLLENBQUM7S0FDeEI7SUFDRCxHQUFHLEVBQUU7UUFDSCxXQUFXLEVBQUUsS0FBSztLQUNuQjtJQUNELElBQUksRUFBRTtRQUNKLFdBQVcsRUFBRSxLQUFLO1FBQ2xCLGNBQWMsRUFBRSxDQUFDLE1BQU0sQ0FBQztLQUN6QjtJQUNELEdBQUcsRUFBRTtRQUNILFdBQVcsRUFBRSxLQUFLO1FBQ2xCLGNBQWMsRUFBRSxDQUFDLE1BQU0sQ0FBQztLQUN6QjtJQUNELE1BQU0sRUFBRTtRQUNOLGFBQWEsRUFBRTtZQUNiLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQztZQUNsQixDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUM7U0FDbkI7S0FDRjtJQUNELEdBQUcsRUFBRTtRQUNILFdBQVcsRUFBRSxJQUFJO1FBQ2pCLGFBQWEsRUFBRSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDO0tBQ3ZDO0NBQ0YsQ0FBQTtBQUVELGtCQUFlO0lBQ2IsRUFBRSxFQUFFLFlBQVk7SUFDaEIsV0FBVyxFQUFFLG1CQUFtQjtJQUNoQyxJQUFJLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxPQUFnRDtRQUNyRSxXQUFXLG1DQUFRLFdBQVcsR0FBSyxPQUFPLENBQUUsQ0FBQTtRQUU1QyxNQUFNLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ3ZDLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUE7WUFDekIsTUFBTSxH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","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = {\n    id: 'attr-no-unnecessary-whitespace',\n    description: 'No spaces between attribute names and values.',\n    init(parser, reporter, options) {\n        const exceptions = Array.isArray(options) ? options : [];\n        parser.addListener('tagstart', (event) => {\n            const attrs = event.attrs;\n            const col = event.col + event.tagName.length + 1;\n            for (let i = 0; i < attrs.length; i++) {\n                if (exceptions.indexOf(attrs[i].name) === -1) {\n                    const match = /(\\s*)=(\\s*)/.exec(attrs[i].raw.trim());\n                    if (match && (match[1].length !== 0 || match[2].length !== 0)) {\n                        reporter.error(`The attribute '${attrs[i].name}' must not have spaces between the name and value.`, event.line, col + attrs[i].index, this, attrs[i].raw);\n                    }\n                }\n            }\n        });\n    },\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0ci1uby11bm5lY2Vzc2FyeS13aGl0ZXNwYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvcmUvcnVsZXMvYXR0ci1uby11bm5lY2Vzc2FyeS13aGl0ZXNwYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBRUEsa0JBQWU7SUFDYixFQUFFLEVBQUUsZ0NBQWdDO0lBQ3BDLFdBQVcsRUFBRSwrQ0FBK0M7SUFDNUQsSUFBSSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsT0FBTztRQUM1QixNQUFNLFVBQVUsR0FBYSxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtRQUVsRSxNQUFNLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ3ZDLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUE7WUFDekIsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUE7WUFFaEQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3JDLElBQUksVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7b0JBQzVDLE1BQU0sS0FBSyxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFBO29CQUNyRCxJQUFJLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLEVBQUU7d0JBQzdELFFBQVEsQ0FBQyxLQUFLLENBQ1osa0JBQWtCLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLG9EQUFvRCxFQUNuRixLQUFLLENBQUMsSUFBSSxFQUNWLEdBQUcsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUNwQixJQUFJLEVBQ0osS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FDYixDQUFBO3FCQUNGO2lCQUNGO2FBQ0Y7UUFDSCxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7Q0FDTSxDQUFBIn0=","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.attrNoUnnecessaryWhitespace = exports.tagsCheck = exports.titleRequire = exports.tagnameSpecialChars = exports.tagnameLowercase = exports.emptyTagNotSelfClosed = exports.tagSelfClose = exports.tagPair = exports.styleDisabled = exports.srcNotEmpty = exports.specCharEscape = exports.spaceTabMixedDisabled = exports.scriptDisabled = exports.inputRequiresLabel = exports.inlineStyleDisabled = exports.inlineScriptDisabled = exports.idUnique = exports.idClassValue = exports.idClsasAdDisabled = exports.htmlLangRequire = exports.hrefAbsOrRel = exports.headScriptDisabled = exports.doctypeHTML5 = exports.doctypeFirst = exports.attrWhitespace = exports.attrValueSingleQuotes = exports.attrValueNotEmpty = exports.attrValueDoubleQuotes = exports.attrUnsafeChars = exports.attrNoDuplication = exports.attrSort = exports.attrLowercase = exports.altRequire = void 0;\nvar alt_require_1 = require(\"./alt-require\");\nObject.defineProperty(exports, \"altRequire\", { enumerable: true, get: function () { return alt_require_1.default; } });\nvar attr_lowercase_1 = require(\"./attr-lowercase\");\nObject.defineProperty(exports, \"attrLowercase\", { enumerable: true, get: function () { return attr_lowercase_1.default; } });\nvar attr_sorted_1 = require(\"./attr-sorted\");\nObject.defineProperty(exports, \"attrSort\", { enumerable: true, get: function () { return attr_sorted_1.default; } });\nvar attr_no_duplication_1 = require(\"./attr-no-duplication\");\nObject.defineProperty(exports, \"attrNoDuplication\", { enumerable: true, get: function () { return attr_no_duplication_1.default; } });\nvar attr_unsafe_chars_1 = require(\"./attr-unsafe-chars\");\nObject.defineProperty(exports, \"attrUnsafeChars\", { enumerable: true, get: function () { return attr_unsafe_chars_1.default; } });\nvar attr_value_double_quotes_1 = require(\"./attr-value-double-quotes\");\nObject.defineProperty(exports, \"attrValueDoubleQuotes\", { enumerable: true, get: function () { return attr_value_double_quotes_1.default; } });\nvar attr_value_not_empty_1 = require(\"./attr-value-not-empty\");\nObject.defineProperty(exports, \"attrValueNotEmpty\", { enumerable: true, get: function () { return attr_value_not_empty_1.default; } });\nvar attr_value_single_quotes_1 = require(\"./attr-value-single-quotes\");\nObject.defineProperty(exports, \"attrValueSingleQuotes\", { enumerable: true, get: function () { return attr_value_single_quotes_1.default; } });\nvar attr_whitespace_1 = require(\"./attr-whitespace\");\nObject.defineProperty(exports, \"attrWhitespace\", { enumerable: true, get: function () { return attr_whitespace_1.default; } });\nvar doctype_first_1 = require(\"./doctype-first\");\nObject.defineProperty(exports, \"doctypeFirst\", { enumerable: true, get: function () { return doctype_first_1.default; } });\nvar doctype_html5_1 = require(\"./doctype-html5\");\nObject.defineProperty(exports, \"doctypeHTML5\", { enumerable: true, get: function () { return doctype_html5_1.default; } });\nvar head_script_disabled_1 = require(\"./head-script-disabled\");\nObject.defineProperty(exports, \"headScriptDisabled\", { enumerable: true, get: function () { return head_script_disabled_1.default; } });\nvar href_abs_or_rel_1 = require(\"./href-abs-or-rel\");\nObject.defineProperty(exports, \"hrefAbsOrRel\", { enumerable: true, get: function () { return href_abs_or_rel_1.default; } });\nvar html_lang_require_1 = require(\"./html-lang-require\");\nObject.defineProperty(exports, \"htmlLangRequire\", { enumerable: true, get: function () { return html_lang_require_1.default; } });\nvar id_class_ad_disabled_1 = require(\"./id-class-ad-disabled\");\nObject.defineProperty(exports, \"idClsasAdDisabled\", { enumerable: true, get: function () { return id_class_ad_disabled_1.default; } });\nvar id_class_value_1 = require(\"./id-class-value\");\nObject.defineProperty(exports, \"idClassValue\", { enumerable: true, get: function () { return id_class_value_1.default; } });\nvar id_unique_1 = require(\"./id-unique\");\nObject.defineProperty(exports, \"idUnique\", { enumerable: true, get: function () { return id_unique_1.default; } });\nvar inline_script_disabled_1 = require(\"./inline-script-disabled\");\nObject.defineProperty(exports, \"inlineScriptDisabled\", { enumerable: true, get: function () { return inline_script_disabled_1.default; } });\nvar inline_style_disabled_1 = require(\"./inline-style-disabled\");\nObject.defineProperty(exports, \"inlineStyleDisabled\", { enumerable: true, get: function () { return inline_style_disabled_1.default; } });\nvar input_requires_label_1 = require(\"./input-requires-label\");\nObject.defineProperty(exports, \"inputRequiresLabel\", { enumerable: true, get: function () { return input_requires_label_1.default; } });\nvar script_disabled_1 = require(\"./script-disabled\");\nObject.defineProperty(exports, \"scriptDisabled\", { enumerable: true, get: function () { return script_disabled_1.default; } });\nvar space_tab_mixed_disabled_1 = require(\"./space-tab-mixed-disabled\");\nObject.defineProperty(exports, \"spaceTabMixedDisabled\", { enumerable: true, get: function () { return space_tab_mixed_disabled_1.default; } });\nvar spec_char_escape_1 = require(\"./spec-char-escape\");\nObject.defineProperty(exports, \"specCharEscape\", { enumerable: true, get: function () { return spec_char_escape_1.default; } });\nvar src_not_empty_1 = require(\"./src-not-empty\");\nObject.defineProperty(exports, \"srcNotEmpty\", { enumerable: true, get: function () { return src_not_empty_1.default; } });\nvar style_disabled_1 = require(\"./style-disabled\");\nObject.defineProperty(exports, \"styleDisabled\", { enumerable: true, get: function () { return style_disabled_1.default; } });\nvar tag_pair_1 = require(\"./tag-pair\");\nObject.defineProperty(exports, \"tagPair\", { enumerable: true, get: function () { return tag_pair_1.default; } });\nvar tag_self_close_1 = require(\"./tag-self-close\");\nObject.defineProperty(exports, \"tagSelfClose\", { enumerable: true, get: function () { return tag_self_close_1.default; } });\nvar empty_tag_not_self_closed_1 = require(\"./empty-tag-not-self-closed\");\nObject.defineProperty(exports, \"emptyTagNotSelfClosed\", { enumerable: true, get: function () { return empty_tag_not_self_closed_1.default; } });\nvar tagname_lowercase_1 = require(\"./tagname-lowercase\");\nObject.defineProperty(exports, \"tagnameLowercase\", { enumerable: true, get: function () { return tagname_lowercase_1.default; } });\nvar tagname_specialchars_1 = require(\"./tagname-specialchars\");\nObject.defineProperty(exports, \"tagnameSpecialChars\", { enumerable: true, get: function () { return tagname_specialchars_1.default; } });\nvar title_require_1 = require(\"./title-require\");\nObject.defineProperty(exports, \"titleRequire\", { enumerable: true, get: function () { return title_require_1.default; } });\nvar tags_check_1 = require(\"./tags-check\");\nObject.defineProperty(exports, \"tagsCheck\", { enumerable: true, get: function () { return tags_check_1.default; } });\nvar attr_no_unnecessary_whitespace_1 = require(\"./attr-no-unnecessary-whitespace\");\nObject.defineProperty(exports, \"attrNoUnnecessaryWhitespace\", { enumerable: true, get: function () { return attr_no_unnecessary_whitespace_1.default; } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29yZS9ydWxlcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2Q0FBcUQ7QUFBNUMseUdBQUEsT0FBTyxPQUFjO0FBQzlCLG1EQUEyRDtBQUFsRCwrR0FBQSxPQUFPLE9BQWlCO0FBQ2pDLDZDQUFtRDtBQUExQyx1R0FBQSxPQUFPLE9BQVk7QUFDNUIsNkRBQW9FO0FBQTNELHdIQUFBLE9BQU8sT0FBcUI7QUFDckMseURBQWdFO0FBQXZELG9IQUFBLE9BQU8sT0FBbUI7QUFDbkMsdUVBQTZFO0FBQXBFLGlJQUFBLE9BQU8sT0FBeUI7QUFDekMsK0RBQXFFO0FBQTVELHlIQUFBLE9BQU8sT0FBcUI7QUFDckMsdUVBQTZFO0FBQXBFLGlJQUFBLE9BQU8sT0FBeUI7QUFDekMscURBQTZEO0FBQXBELGlIQUFBLE9BQU8sT0FBa0I7QUFDbEMsaURBQXlEO0FBQWhELDZHQUFBLE9BQU8sT0FBZ0I7QUFDaEMsaURBQXlEO0FBQWhELDZHQUFBLE9BQU8sT0FBZ0I7QUFDaEMsK0RBQXNFO0FBQTdELDBIQUFBLE9BQU8sT0FBc0I7QUFDdEMscURBQTJEO0FBQWxELCtHQUFBLE9BQU8sT0FBZ0I7QUFDaEMseURBQWdFO0FBQXZELG9IQUFBLE9BQU8sT0FBbUI7QUFDbkMsK0RBQXFFO0FBQTVELHlIQUFBLE9BQU8sT0FBcUI7QUFDckMsbURBQTBEO0FBQWpELDhHQUFBLE9BQU8sT0FBZ0I7QUFDaEMseUNBQWlEO0FBQXhDLHFHQUFBLE9BQU8sT0FBWTtBQUM1QixtRUFBMEU7QUFBakUsOEhBQUEsT0FBTyxPQUF3QjtBQUN4QyxpRUFBd0U7QUFBL0QsNEhBQUEsT0FBTyxPQUF1QjtBQUN2QywrREFBc0U7QUFBN0QsMEhBQUEsT0FBTyxPQUFzQjtBQUN0QyxxREFBNkQ7QUFBcEQsaUhBQUEsT0FBTyxPQUFrQjtBQUNsQyx1RUFBNkU7QUFBcEUsaUlBQUEsT0FBTyxPQUF5QjtBQUN6Qyx1REFBOEQ7QUFBckQsa0hBQUEsT0FBTyxPQUFrQjtBQUNsQyxpREFBd0Q7QUFBL0MsNEdBQUEsT0FBTyxPQUFlO0FBQy9CLG1EQUEyRDtBQUFsRCwrR0FBQSxPQUFPLE9BQWlCO0FBQ2pDLHVDQUErQztBQUF0QyxtR0FBQSxPQUFPLE9BQVc7QUFDM0IsbURBQTBEO0FBQWpELDhHQUFBLE9BQU8sT0FBZ0I7QUFDaEMseUVBQThFO0FBQXJFLGtJQUFBLE9BQU8sT0FBeUI7QUFDekMseURBQWlFO0FBQXhELHFIQUFBLE9BQU8sT0FBb0I7QUFDcEMsK0RBQXVFO0FBQTlELDJIQUFBLE9BQU8sT0FBdUI7QUFDdkMsaURBQXlEO0FBQWhELDZHQUFBLE9BQU8sT0FBZ0I7QUFDaEMsMkNBQW1EO0FBQTFDLHVHQUFBLE9BQU8sT0FBYTtBQUM3QixtRkFBeUY7QUFBaEYsNklBQUEsT0FBTyxPQUErQiJ9","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.HTMLParser = exports.Reporter = exports.HTMLRules = exports.HTMLHint = void 0;\nconst htmlparser_1 = require(\"./htmlparser\");\nexports.HTMLParser = htmlparser_1.default;\nconst reporter_1 = require(\"./reporter\");\nexports.Reporter = reporter_1.default;\nconst HTMLRules = require(\"./rules\");\nexports.HTMLRules = HTMLRules;\nclass HTMLHintCore {\n    constructor() {\n        this.rules = {};\n        this.defaultRuleset = {\n            'tagname-lowercase': true,\n            'attr-lowercase': true,\n            'attr-value-double-quotes': true,\n            'doctype-first': true,\n            'tag-pair': true,\n            'spec-char-escape': true,\n            'id-unique': true,\n            'src-not-empty': true,\n            'attr-no-duplication': true,\n            'title-require': true,\n        };\n    }\n    addRule(rule) {\n        this.rules[rule.id] = rule;\n    }\n    verify(html, ruleset = this.defaultRuleset) {\n        if (Object.keys(ruleset).length === 0) {\n            ruleset = this.defaultRuleset;\n        }\n        html = html.replace(/^\\s*<!--\\s*htmlhint\\s+([^\\r\\n]+?)\\s*-->/i, (all, strRuleset) => {\n            strRuleset.replace(/(?:^|,)\\s*([^:,]+)\\s*(?:\\:\\s*([^,\\s]+))?/g, (all, ruleId, value) => {\n                ruleset[ruleId] =\n                    value !== undefined && value.length > 0 ? JSON.parse(value) : true;\n                return '';\n            });\n            return '';\n        });\n        const parser = new htmlparser_1.default();\n        const reporter = new reporter_1.default(html, ruleset);\n        const rules = this.rules;\n        let rule;\n        for (const id in ruleset) {\n            rule = rules[id];\n            if (rule !== undefined && ruleset[id] !== false) {\n                rule.init(parser, reporter, ruleset[id]);\n            }\n        }\n        parser.parse(html);\n        return reporter.messages;\n    }\n    format(arrMessages, options = {}) {\n        const arrLogs = [];\n        const colors = {\n            white: '',\n            grey: '',\n            red: '',\n            reset: '',\n        };\n        if (options.colors) {\n            colors.white = '\\x1b[37m';\n            colors.grey = '\\x1b[90m';\n            colors.red = '\\x1b[31m';\n            colors.reset = '\\x1b[39m';\n        }\n        const indent = options.indent || 0;\n        arrMessages.forEach((hint) => {\n            const leftWindow = 40;\n            const rightWindow = leftWindow + 20;\n            let evidence = hint.evidence;\n            const line = hint.line;\n            const col = hint.col;\n            const evidenceCount = evidence.length;\n            let leftCol = col > leftWindow + 1 ? col - leftWindow : 1;\n            let rightCol = evidence.length > col + rightWindow ? col + rightWindow : evidenceCount;\n            if (col < leftWindow + 1) {\n                rightCol += leftWindow - col + 1;\n            }\n            evidence = evidence.replace(/\\t/g, ' ').substring(leftCol - 1, rightCol);\n            if (leftCol > 1) {\n                evidence = `...${evidence}`;\n                leftCol -= 3;\n            }\n            if (rightCol < evidenceCount) {\n                evidence += '...';\n            }\n            arrLogs.push(`${colors.white + repeatStr(indent)}L${line} |${colors.grey}${evidence}${colors.reset}`);\n            let pointCol = col - leftCol;\n            const match = evidence.substring(0, pointCol).match(/[^\\u0000-\\u00ff]/g);\n            if (match !== null) {\n                pointCol += match.length;\n            }\n            arrLogs.push(`${colors.white +\n                repeatStr(indent) +\n                repeatStr(String(line).length + 3 + pointCol)}^ ${colors.red}${hint.message} (${hint.rule.id})${colors.reset}`);\n        });\n        return arrLogs;\n    }\n}\nfunction repeatStr(n, str) {\n    return new Array(n + 1).join(str || ' ');\n}\nexports.HTMLHint = new HTMLHintCore();\nObject.keys(HTMLRules).forEach((key) => {\n    exports.HTMLHint.addRule(HTMLRules[key]);\n});\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb3JlL2NvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQXFDO0FBb0tQLHFCQXBLdkIsb0JBQVUsQ0FvS3VCO0FBbkt4Qyx5Q0FBaUM7QUFtS2IsbUJBbktiLGtCQUFRLENBbUthO0FBbEs1QixxQ0FBb0M7QUFrSzNCLDhCQUFTO0FBMUpsQixNQUFNLFlBQVk7SUFBbEI7UUFDUyxVQUFLLEdBQTJCLEVBQUUsQ0FBQTtRQUN6QixtQkFBYyxHQUFZO1lBQ3hDLG1CQUFtQixFQUFFLElBQUk7WUFDekIsZ0JBQWdCLEVBQUUsSUFBSTtZQUN0QiwwQkFBMEIsRUFBRSxJQUFJO1lBQ2hDLGVBQWUsRUFBRSxJQUFJO1lBQ3JCLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLGtCQUFrQixFQUFFLElBQUk7WUFDeEIsV0FBVyxFQUFFLElBQUk7WUFDakIsZUFBZSxFQUFFLElBQUk7WUFDckIscUJBQXFCLEVBQUUsSUFBSTtZQUMzQixlQUFlLEVBQUUsSUFBSTtTQUN0QixDQUFBO0lBOEhILENBQUM7SUE1SFEsT0FBTyxDQUFDLElBQVU7UUFDdkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFBO0lBQzVCLENBQUM7SUFFTSxNQUFNLENBQUMsSUFBWSxFQUFFLFVBQW1CLElBQUksQ0FBQyxjQUFjO1FBQ2hFLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ3JDLE9BQU8sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFBO1NBQzlCO1FBR0QsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQ2pCLDBDQUEwQyxFQUMxQyxDQUFDLEdBQUcsRUFBRSxVQUFrQixFQUFFLEVBQUU7WUFJMUIsVUFBVSxDQUFDLE9BQU8sQ0FDaEIsMkNBQTJDLEVBQzNDLENBQUMsR0FBRyxF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","export default {\n\t\"attr-whitespace\": false,\n\t\"attr-no-duplication\": true,\n\t\"body-no-duplicates\": true,\n\t\"freemarker-tags\": true,\n\t\"head-body-descendents-html\": true,\n\t\"head-no-duplicates\": true,\n\t\"head-valid-children\": true,\n\t\"html-no-duplicates\": true,\n\t\"html-root-node\": true,\n\t\"html-valid-children\": true,\n\t\"html-valid-children-order\": true,\n\t\"img-src-required\": true,\n\t\"invalid-attribute-char\": true,\n\t\"nested-paragraphs\": true,\n\t\"no-enties-in-attributes\": ['style', 'class', 'id'],\n\t\"spec-char-escape\": true,\n\t\"src-not-empty\": true,\n\t\"tag-pair\": true,\n\t\"valid-path-format\": [{\n\t\t\"attr\": \"href\",\n\t\t\"formats\": [\n\t\t\t\"absolute\",\n\t\t\t{\n\t\t\t\t\"pattern\": \"\\\\${(\\\\s+)?Gears\\\\.unsubscribe\\\\(\\\\)(\\\\s+)?}\",\n\t\t\t\t\"name\": \"MessageGears unsubscribe\"\n\t\t\t},\n\t\t\t{\n\t\t\t\t\"pattern\": \"mailto:.+\",\n\t\t\t\t\"name\": \"Mailto link\"\n\t\t\t}\n\t\t]\n\t}, {\n\t\t\"tag\": \"img\",\n\t\t\"attr\": \"src\",\n\t\t\"formats\": [\n\t\t\t\"absolute\"\n\t\t]\n\t}],\n\t'valid-style-attrs': true\n}","import { HTMLParser, Reporter } from \"htmlhint\";\nimport { Attr, Block } from \"htmlhint/htmlparser\";\n\nconst EMPTY_TAGS = [\n    'area', 'base', 'basefont', 'br', 'col', 'frame', 'hr', 'img', 'input',\n    'isindex', 'link', 'meta', 'param', 'embed', 'track', 'command', 'source',\n    'keygen', 'wbr'\n];\n\nclass EventNode {\n    public children: EventNode[];\n    public closed: boolean;\n    public root: EventNode;\n    public tagName?: string;\n    public attrs: Attr[];\n\n    public from?: number;\n    public to?: number;\n    public col?: number;\n    public line?: number;\n    public raw?: string;\n\n    constructor(\n        public event?: Block,\n        public parent?: EventNode) {\n        // event = event || {};\n\n        const tagName = event?.tagName && event.tagName.toLowerCase();\n\n        this.children = [];\n\n        if(!parent) {\n            this.root = this;\n        }\n        else {\n            this.closed = !!event.close || EMPTY_TAGS.indexOf(tagName) > -1;\n            this.parent = parent;\n            this.tagName = tagName;\n            this.attrs = event.attrs;\n            this.from = event.pos;\n            this.to = undefined;\n            this.col = event.col;\n            this.line = event.line;\n            this.raw = event.raw;\n        }\n    }\n\n    get depth() {\n        let depth = 0, el = this.parent;\n\n        while(el.parent) {\n            depth++;\n\n            el = el.parent;\n        }\n        \n        return depth;\n    }\n    \n    close(event, reporter) {\n        this.to = event.pos + event.raw.length;\n        this.raw = reporter.html.slice(this.from, this.to);\n    }\n\n    push(event) {\n        return this.children.push(event);\n    }\n\n    before(index) {\n        return this.children.slice(0, index);\n    }\n\n    after(index) {\n        return this.children.slice(index + 1);\n    }\n\n    find(...args) {\n        const find = children => {\n            return children.reduce((carry, child) => {\n                if(child.match(...args)) {\n                    carry.push(child);\n                }\n\n                if(child.children.length) {\n                    carry = carry.concat(find(child.children));\n                }\n\n                return carry;\n            }, []);\n        };\n\n        return find(this.children);\n    }\n\n    findFirst(tagName) {\n        return this.find(tagName)[0];\n    }\n\n    index() {\n        return this.parent ? this.parent.children.indexOf(this) : 0;\n    }\n\n    isChildOf(subject) {\n        return this.parent === subject;\n    }\n\n    isBefore(subject) {\n        return this.index() < subject.index();\n    }\n\n    isAfter(subject) {\n        return this.index() > subject.index();\n    }\n\n    isFirst() {\n        return !this.parent || this.index() === 0;\n    }\n\n    isLast() {\n        return !this.parent || this.index() === this.parent.children.length - 1;\n    }\n    \n    first() {\n        return this.children[0];\n    }\n\n    match(...args) {\n        return args.indexOf(this.tagName && this.tagName.toLowerCase()) > -1;\n    }\n\n};\n\nclass EventTree {\n    constructor(\n        public parser: HTMLParser, \n        public reporter: Reporter,\n        callack?: (root: EventNode) => void)\n    {\n        \n        const stack = [], root = new EventNode();\n        \n        let parentNode = root;\n\n        parser.addListener('tagstart', event => {\n            const node = new EventNode(event, parentNode);\n\n            parentNode.push(node);\n\n            if(!node.closed) {\n                stack.push(parentNode = node);\n            }\n        });\n\n        parser.addListener('tagend', event => {\n            const tagName = event.tagName.toLowerCase();\n            \n            let pos;\n\n            for(pos = stack.length - 1; pos >= 0; pos--) {\n                if(stack[pos].tagName === tagName) {\n                    break;\n                }\n            }\n\n            if(stack[pos]) {\n                stack[pos].close(event, this.reporter);\n\n                parentNode = stack[pos].parent;\n                \n                stack.splice(pos, 1);\n            }\n        });\n\n        parser.addListener('end', () => {\n            root.closed = true;\n            \n            callack && callack(root);\n        });\n    }\n};\n\nexport {\n    EventNode,\n    EventTree\n};\n","import { Rule } from 'htmlhint/types';\nimport { EventTree } from '../lib/EventTree';\n\nconst rule: Rule = {\n    id: 'body-no-duplicates',\n    description: 'The body tag must not be a duplicate.',\n    init(parser, reporter) {\n        new EventTree(parser, reporter, root => {\n            let body;\n\n            for(let node of root.find('body')) {\n                if(!body) {\n                    body = node;\n\n                    continue;\n                }\n\n                reporter.error(\n                    `The [ body ] tag already exists on line ${body.line}.`,\n                    node.line,\n                    node.col,\n                    this,\n                    node.raw\n                );\n            }\n        });\n    }\n};\n\nexport default rule;","/* eslint-disable */\n\n\n\nconst peggyParser: {parse: any, SyntaxError: any, DefaultTracer?: any} = // Generated by Peggy 3.0.2.\n//\n// https://peggyjs.org/\n// @ts-ignore\n(function() {\n// @ts-ignore\n  \"use strict\";\n\n// @ts-ignore\nfunction peg$subclass(child, parent) {\n// @ts-ignore\n  function C() { this.constructor = child; }\n// @ts-ignore\n  C.prototype = parent.prototype;\n// @ts-ignore\n  child.prototype = new C();\n}\n\n// @ts-ignore\nfunction peg$SyntaxError(message, expected, found, location) {\n// @ts-ignore\n  var self = Error.call(this, message);\n  // istanbul ignore next Check is a necessary evil to support older environments\n// @ts-ignore\n  if (Object.setPrototypeOf) {\n// @ts-ignore\n    Object.setPrototypeOf(self, peg$SyntaxError.prototype);\n  }\n// @ts-ignore\n  self.expected = expected;\n// @ts-ignore\n  self.found = found;\n// @ts-ignore\n  self.location = location;\n// @ts-ignore\n  self.name = \"SyntaxError\";\n// @ts-ignore\n  return self;\n}\n\n// @ts-ignore\npeg$subclass(peg$SyntaxError, Error);\n\n// @ts-ignore\nfunction peg$padEnd(str, targetLength, padString) {\n// @ts-ignore\n  padString = padString || \" \";\n// @ts-ignore\n  if (str.length > targetLength) { return str; }\n// @ts-ignore\n  targetLength -= str.length;\n// @ts-ignore\n  padString += padString.repeat(targetLength);\n// @ts-ignore\n  return str + padString.slice(0, targetLength);\n}\n\n// @ts-ignore\npeg$SyntaxError.prototype.format = function(sources) {\n// @ts-ignore\n  var str = \"Error: \" + this.message;\n// @ts-ignore\n  if (this.location) {\n// @ts-ignore\n    var src = null;\n// @ts-ignore\n    var k;\n// @ts-ignore\n    for (k = 0; k < sources.length; k++) {\n// @ts-ignore\n      if (sources[k].source === this.location.source) {\n// @ts-ignore\n        src = sources[k].text.split(/\\r\\n|\\n|\\r/g);\n// @ts-ignore\n        break;\n      }\n    }\n// @ts-ignore\n    var s = this.location.start;\n// @ts-ignore\n    var offset_s = (this.location.source && (typeof this.location.source.offset === \"function\"))\n// @ts-ignore\n      ? this.location.source.offset(s)\n// @ts-ignore\n      : s;\n// @ts-ignore\n    var loc = this.location.source + \":\" + offset_s.line + \":\" + offset_s.column;\n// @ts-ignore\n    if (src) {\n// @ts-ignore\n      var e = this.location.end;\n// @ts-ignore\n      var filler = peg$padEnd(\"\", offset_s.line.toString().length, ' ');\n// @ts-ignore\n      var line = src[s.line - 1];\n// @ts-ignore\n      var last = s.line === e.line ? e.column : line.length + 1;\n// @ts-ignore\n      var hatLen = (last - s.column) || 1;\n// @ts-ignore\n      str += \"\\n --> \" + loc + \"\\n\"\n// @ts-ignore\n          + filler + \" |\\n\"\n// @ts-ignore\n          + offset_s.line + \" | \" + line + \"\\n\"\n// @ts-ignore\n          + filler + \" | \" + peg$padEnd(\"\", s.column - 1, ' ')\n// @ts-ignore\n          + peg$padEnd(\"\", hatLen, \"^\");\n// @ts-ignore\n    } else {\n// @ts-ignore\n      str += \"\\n at \" + loc;\n    }\n  }\n// @ts-ignore\n  return str;\n};\n\n// @ts-ignore\npeg$SyntaxError.buildMessage = function(expected, found) {\n// @ts-ignore\n  var DESCRIBE_EXPECTATION_FNS = {\n// @ts-ignore\n    literal: function(expectation) {\n// @ts-ignore\n      return \"\\\"\" + literalEscape(expectation.text) + \"\\\"\";\n    },\n\n// @ts-ignore\n    class: function(expectation) {\n// @ts-ignore\n      var escapedParts = expectation.parts.map(function(part) {\n// @ts-ignore\n        return Array.isArray(part)\n// @ts-ignore\n          ? classEscape(part[0]) + \"-\" + classEscape(part[1])\n// @ts-ignore\n          : classEscape(part);\n      });\n\n// @ts-ignore\n      return \"[\" + (expectation.inverted ? \"^\" : \"\") + escapedParts.join(\"\") + \"]\";\n    },\n\n// @ts-ignore\n    any: function() {\n// @ts-ignore\n      return \"any character\";\n    },\n\n// @ts-ignore\n    end: function() {\n// @ts-ignore\n      return \"end of input\";\n    },\n\n// @ts-ignore\n    other: function(expectation) {\n// @ts-ignore\n      return expectation.description;\n    }\n  };\n\n// @ts-ignore\n  function hex(ch) {\n// @ts-ignore\n    return ch.charCodeAt(0).toString(16).toUpperCase();\n  }\n\n// @ts-ignore\n  function literalEscape(s) {\n// @ts-ignore\n    return s\n// @ts-ignore\n      .replace(/\\\\/g, \"\\\\\\\\\")\n// @ts-ignore\n      .replace(/\"/g,  \"\\\\\\\"\")\n// @ts-ignore\n      .replace(/\\0/g, \"\\\\0\")\n// @ts-ignore\n      .replace(/\\t/g, \"\\\\t\")\n// @ts-ignore\n      .replace(/\\n/g, \"\\\\n\")\n// @ts-ignore\n      .replace(/\\r/g, \"\\\\r\")\n// @ts-ignore\n      .replace(/[\\x00-\\x0F]/g,          function(ch) { return \"\\\\x0\" + hex(ch); })\n// @ts-ignore\n      .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) { return \"\\\\x\"  + hex(ch); });\n  }\n\n// @ts-ignore\n  function classEscape(s) {\n// @ts-ignore\n    return s\n// @ts-ignore\n      .replace(/\\\\/g, \"\\\\\\\\\")\n// @ts-ignore\n      .replace(/\\]/g, \"\\\\]\")\n// @ts-ignore\n      .replace(/\\^/g, \"\\\\^\")\n// @ts-ignore\n      .replace(/-/g,  \"\\\\-\")\n// @ts-ignore\n      .replace(/\\0/g, \"\\\\0\")\n// @ts-ignore\n      .replace(/\\t/g, \"\\\\t\")\n// @ts-ignore\n      .replace(/\\n/g, \"\\\\n\")\n// @ts-ignore\n      .replace(/\\r/g, \"\\\\r\")\n// @ts-ignore\n      .replace(/[\\x00-\\x0F]/g,          function(ch) { return \"\\\\x0\" + hex(ch); })\n// @ts-ignore\n      .replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, function(ch) { return \"\\\\x\"  + hex(ch); });\n  }\n\n// @ts-ignore\n  function describeExpectation(expectation) {\n// @ts-ignore\n    return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation);\n  }\n\n// @ts-ignore\n  function describeExpected(expected) {\n// @ts-ignore\n    var descriptions = expected.map(describeExpectation);\n// @ts-ignore\n    var i, j;\n\n// @ts-ignore\n    descriptions.sort();\n\n// @ts-ignore\n    if (descriptions.length > 0) {\n// @ts-ignore\n      for (i = 1, j = 1; i < descriptions.length; i++) {\n// @ts-ignore\n        if (descriptions[i - 1] !== descriptions[i]) {\n// @ts-ignore\n          descriptions[j] = descriptions[i];\n// @ts-ignore\n          j++;\n        }\n      }\n// @ts-ignore\n      descriptions.length = j;\n    }\n\n// @ts-ignore\n    switch (descriptions.length) {\n// @ts-ignore\n      case 1:\n// @ts-ignore\n        return descriptions[0];\n\n// @ts-ignore\n      case 2:\n// @ts-ignore\n        return descriptions[0] + \" or \" + descriptions[1];\n\n// @ts-ignore\n      default:\n// @ts-ignore\n        return descriptions.slice(0, -1).join(\", \")\n// @ts-ignore\n          + \", or \"\n// @ts-ignore\n          + descriptions[descriptions.length - 1];\n    }\n  }\n\n// @ts-ignore\n  function describeFound(found) {\n// @ts-ignore\n    return found ? \"\\\"\" + literalEscape(found) + \"\\\"\" : \"end of input\";\n  }\n\n// @ts-ignore\n  return \"Expected \" + describeExpected(expected) + \" but \" + describeFound(found) + \" found.\";\n};\n\n// @ts-ignore\nfunction peg$parse(input, options) {\n// @ts-ignore\n  options = options !== undefined ? options : {};\n\n// @ts-ignore\n  var peg$FAILED = {};\n// @ts-ignore\n  var peg$source = options.grammarSource;\n\n// @ts-ignore\n  var peg$startRuleFunctions = { start: peg$parsestart };\n// @ts-ignore\n  var peg$startRuleFunction = peg$parsestart;\n\n// @ts-ignore\n  var peg$c0 = \"<#\";\n  var peg$c1 = \"</#\";\n  var peg$c2 = \"${\";\n  var peg$c3 = \"}\";\n  var peg$c4 = \"<#if\";\n  var peg$c5 = \">\";\n  var peg$c6 = \"<#elseif\";\n  var peg$c7 = \"<#else\";\n  var peg$c8 = \"<#else>\";\n  var peg$c9 = \"</#if\";\n  var peg$c10 = \"</#if>\";\n  var peg$c11 = \"<#list\";\n  var peg$c12 = \"as\";\n  var peg$c13 = \"</#list\";\n  var peg$c14 = \"</#list>\";\n  var peg$c15 = \"<#assign\";\n  var peg$c16 = \"=\";\n  var peg$c17 = \"!\";\n  var peg$c18 = \"(\";\n  var peg$c19 = \")\";\n  var peg$c20 = \".\";\n  var peg$c21 = \"[\";\n  var peg$c22 = \"]\";\n  var peg$c23 = \"?\";\n  var peg$c24 = \"<\";\n  var peg$c25 = \"gt\";\n  var peg$c26 = \"&gt;\";\n  var peg$c27 = \"gte\";\n  var peg$c28 = \"&gte;\";\n  var peg$c29 = \"lt\";\n  var peg$c30 = \"&lt;\";\n  var peg$c31 = \"lte\";\n  var peg$c32 = \"&lte;\";\n  var peg$c33 = \"==\";\n  var peg$c34 = \"<=\";\n  var peg$c35 = \"!=\";\n  var peg$c36 = \"+\";\n  var peg$c37 = \"-\";\n  var peg$c38 = \"/\";\n  var peg$c39 = \"*\";\n  var peg$c40 = \"&&\";\n  var peg$c41 = \"||\";\n  var peg$c42 = \">=\";\n  var peg$c43 = \"\\\"\";\n  var peg$c44 = \"'\";\n  var peg$c45 = \"&\";\n  var peg$c46 = \";\";\n  var peg$c47 = \",\";\n\n  var peg$r0 = /^[0-9]/;\n  var peg$r1 = /^[a-zA-Z0-9_]/;\n  var peg$r2 = /^[ \\t\\n\\r]/;\n\n  var peg$e0 = peg$otherExpectation(\"text\");\n  var peg$e1 = peg$otherExpectation(\"string\");\n  var peg$e2 = peg$literalExpectation(\"<#\", false);\n  var peg$e3 = peg$literalExpectation(\"</#\", false);\n  var peg$e4 = peg$literalExpectation(\"${\", false);\n  var peg$e5 = peg$anyExpectation();\n  var peg$e6 = peg$literalExpectation(\"}\", false);\n  var peg$e7 = peg$literalExpectation(\"<#if\", false);\n  var peg$e8 = peg$literalExpectation(\">\", false);\n  var peg$e9 = peg$literalExpectation(\"<#elseif\", false);\n  var peg$e10 = peg$literalExpectation(\"<#else\", false);\n  var peg$e11 = peg$literalExpectation(\"<#else>\", false);\n  var peg$e12 = peg$literalExpectation(\"</#if\", false);\n  var peg$e13 = peg$literalExpectation(\"</#if>\", false);\n  var peg$e14 = peg$literalExpectation(\"<#list\", false);\n  var peg$e15 = peg$literalExpectation(\"as\", false);\n  var peg$e16 = peg$literalExpectation(\"</#list\", false);\n  var peg$e17 = peg$literalExpectation(\"</#list>\", false);\n  var peg$e18 = peg$literalExpectation(\"<#assign\", false);\n  var peg$e19 = peg$literalExpectation(\"=\", false);\n  var peg$e20 = peg$otherExpectation(\"expression\");\n  var peg$e21 = peg$literalExpectation(\"!\", false);\n  var peg$e22 = peg$literalExpectation(\"(\", false);\n  var peg$e23 = peg$literalExpectation(\")\", false);\n  var peg$e24 = peg$otherExpectation(\"equation\");\n  var peg$e25 = peg$literalExpectation(\".\", false);\n  var peg$e26 = peg$literalExpectation(\"[\", false);\n  var peg$e27 = peg$literalExpectation(\"]\", false);\n  var peg$e28 = peg$literalExpectation(\"?\", false);\n  var peg$e29 = peg$otherExpectation(\"modifier\");\n  var peg$e30 = peg$otherExpectation(\"operator\");\n  var peg$e31 = peg$literalExpectation(\"<\", false);\n  var peg$e32 = peg$literalExpectation(\"gt\", false);\n  var peg$e33 = peg$literalExpectation(\"&gt;\", false);\n  var peg$e34 = peg$literalExpectation(\"gte\", false);\n  var peg$e35 = peg$literalExpectation(\"&gte;\", false);\n  var peg$e36 = peg$literalExpectation(\"lt\", false);\n  var peg$e37 = peg$literalExpectation(\"&lt;\", false);\n  var peg$e38 = peg$literalExpectation(\"lte\", false);\n  var peg$e39 = peg$literalExpectation(\"&lte;\", false);\n  var peg$e40 = peg$literalExpectation(\"==\", false);\n  var peg$e41 = peg$literalExpectation(\"<=\", false);\n  var peg$e42 = peg$literalExpectation(\"!=\", false);\n  var peg$e43 = peg$literalExpectation(\"+\", false);\n  var peg$e44 = peg$literalExpectation(\"-\", false);\n  var peg$e45 = peg$literalExpectation(\"/\", false);\n  var peg$e46 = peg$literalExpectation(\"*\", false);\n  var peg$e47 = peg$literalExpectation(\"&&\", false);\n  var peg$e48 = peg$literalExpectation(\"||\", false);\n  var peg$e49 = peg$literalExpectation(\">=\", false);\n  var peg$e50 = peg$otherExpectation(\"number\");\n  var peg$e51 = peg$classExpectation([[\"0\", \"9\"]], false, false);\n  var peg$e52 = peg$literalExpectation(\"\\\"\", false);\n  var peg$e53 = peg$literalExpectation(\"'\", false);\n  var peg$e54 = peg$classExpectation([[\"a\", \"z\"], [\"A\", \"Z\"], [\"0\", \"9\"], \"_\"], false, false);\n  var peg$e55 = peg$literalExpectation(\"&\", false);\n  var peg$e56 = peg$literalExpectation(\";\", false);\n  var peg$e57 = peg$otherExpectation(\",\");\n  var peg$e58 = peg$literalExpectation(\",\", false);\n  var peg$e59 = peg$otherExpectation(\"whitespace\");\n  var peg$e60 = peg$classExpectation([\" \", \"\\t\", \"\\n\", \"\\r\"], false, false);\n// @ts-ignore\n\n  var peg$f0 = function(value) {// @ts-ignore\n return value.join('') };// @ts-ignore\n\n  var peg$f1 = function(value) {// @ts-ignore\n return value };// @ts-ignore\n\n  var peg$f2 = function(value) {// @ts-ignore\n return value.flat(Infinity).join('') };// @ts-ignore\n\n  var peg$f3 = function(value) {// @ts-ignore\n return value.flat(Infinity).filter(Boolean).join('') };// @ts-ignore\n\n  var peg$f4 = function(value) {// @ts-ignore\n return value.flat(Infinity).filter(Boolean).join('') };// @ts-ignore\n\n  var peg$f5 = function(value) {// @ts-ignore\n return value };// @ts-ignore\n\n  var peg$f6 = function(value) {// @ts-ignore\n return value };// @ts-ignore\n\n  var peg$f7 = function(value) {// @ts-ignore\n return value.flat(Infinity).filter(Boolean).join('') };// @ts-ignore\n\n  var peg$f8 = function(value) {// @ts-ignore\n return value };// @ts-ignore\n\n  var peg$f9 = function(value) {// @ts-ignore\n return value.flat(Infinity).filter(Boolean).join('') };// @ts-ignore\n\n  var peg$f10 = function(value) {\n// @ts-ignore\n  return value.flat(Infinity).join('')\n};// @ts-ignore\n\n  var peg$f11 = function(value) {\n// @ts-ignore\n  return value.flat(Infinity).join('')\n};// @ts-ignore\n\n  var peg$f12 = function(value) {\n// @ts-ignore\n    return Array.isArray(value) ? value.flat(Infinity).join('') : value;\n  };// @ts-ignore\n\n  var peg$f13 = function(negative, number, point, decimal) {// @ts-ignore\n return \".\" + decimal.join('') };// @ts-ignore\n\n  var peg$f14 = function(negative, number, decimal) {// @ts-ignore\n return `${negative ?? ''}${number.join('')}${decimal ?? ''}` };// @ts-ignore\n\n  var peg$f15 = function(value) {// @ts-ignore\n return value.flat(2).join('') };// @ts-ignore\n\n  var peg$f16 = function(value) {// @ts-ignore\n return value.join('') };// @ts-ignore\n\n  var peg$f17 = function(a, b, c) {// @ts-ignore\n return [a, ...b, c].join('') };// @ts-ignore\n\n  var peg$f18 = function(value) {// @ts-ignore\n return value.join('') };// @ts-ignore\n\n  var peg$f19 = function(value) {// @ts-ignore\n return value.join('') };\n// @ts-ignore\n  var peg$currPos = 0;\n// @ts-ignore\n  var peg$savedPos = 0;\n// @ts-ignore\n  var peg$posDetailsCache = [{ line: 1, column: 1 }];\n// @ts-ignore\n  var peg$maxFailPos = 0;\n// @ts-ignore\n  var peg$maxFailExpected = [];\n// @ts-ignore\n  var peg$silentFails = 0;\n\n// @ts-ignore\n  var peg$result;\n\n// @ts-ignore\n  if (\"startRule\" in options) {\n// @ts-ignore\n    if (!(options.startRule in peg$startRuleFunctions)) {\n// @ts-ignore\n      throw new Error(\"Can't start parsing from rule \\\"\" + options.startRule + \"\\\".\");\n    }\n\n// @ts-ignore\n    peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n  }\n\n// @ts-ignore\n  function text() {\n// @ts-ignore\n    return input.substring(peg$savedPos, peg$currPos);\n  }\n\n// @ts-ignore\n  function offset() {\n// @ts-ignore\n    return peg$savedPos;\n  }\n\n// @ts-ignore\n  function range() {\n// @ts-ignore\n    return {\n// @ts-ignore\n      source: peg$source,\n// @ts-ignore\n      start: peg$savedPos,\n// @ts-ignore\n      end: peg$currPos\n    };\n  }\n\n// @ts-ignore\n  function location() {\n// @ts-ignore\n    return peg$computeLocation(peg$savedPos, peg$currPos);\n  }\n\n// @ts-ignore\n  function expected(description, location) {\n// @ts-ignore\n    location = location !== undefined\n// @ts-ignore\n      ? location\n// @ts-ignore\n      : peg$computeLocation(peg$savedPos, peg$currPos);\n\n// @ts-ignore\n    throw peg$buildStructuredError(\n// @ts-ignore\n      [peg$otherExpectation(description)],\n// @ts-ignore\n      input.substring(peg$savedPos, peg$currPos),\n// @ts-ignore\n      location\n    );\n  }\n\n// @ts-ignore\n  function error(message, location) {\n// @ts-ignore\n    location = location !== undefined\n// @ts-ignore\n      ? location\n// @ts-ignore\n      : peg$computeLocation(peg$savedPos, peg$currPos);\n\n// @ts-ignore\n    throw peg$buildSimpleError(message, location);\n  }\n\n// @ts-ignore\n  function peg$literalExpectation(text, ignoreCase) {\n// @ts-ignore\n    return { type: \"literal\", text: text, ignoreCase: ignoreCase };\n  }\n\n// @ts-ignore\n  function peg$classExpectation(parts, inverted, ignoreCase) {\n// @ts-ignore\n    return { type: \"class\", parts: parts, inverted: inverted, ignoreCase: ignoreCase };\n  }\n\n// @ts-ignore\n  function peg$anyExpectation() {\n// @ts-ignore\n    return { type: \"any\" };\n  }\n\n// @ts-ignore\n  function peg$endExpectation() {\n// @ts-ignore\n    return { type: \"end\" };\n  }\n\n// @ts-ignore\n  function peg$otherExpectation(description) {\n// @ts-ignore\n    return { type: \"other\", description: description };\n  }\n\n// @ts-ignore\n  function peg$computePosDetails(pos) {\n// @ts-ignore\n    var details = peg$posDetailsCache[pos];\n// @ts-ignore\n    var p;\n\n// @ts-ignore\n    if (details) {\n// @ts-ignore\n      return details;\n// @ts-ignore\n    } else {\n// @ts-ignore\n      p = pos - 1;\n// @ts-ignore\n      while (!peg$posDetailsCache[p]) {\n// @ts-ignore\n        p--;\n      }\n\n// @ts-ignore\n      details = peg$posDetailsCache[p];\n// @ts-ignore\n      details = {\n// @ts-ignore\n        line: details.line,\n// @ts-ignore\n        column: details.column\n      };\n\n// @ts-ignore\n      while (p < pos) {\n// @ts-ignore\n        if (input.charCodeAt(p) === 10) {\n// @ts-ignore\n          details.line++;\n// @ts-ignore\n          details.column = 1;\n// @ts-ignore\n        } else {\n// @ts-ignore\n          details.column++;\n        }\n\n// @ts-ignore\n        p++;\n      }\n\n// @ts-ignore\n      peg$posDetailsCache[pos] = details;\n\n// @ts-ignore\n      return details;\n    }\n  }\n\n// @ts-ignore\n  function peg$computeLocation(startPos, endPos, offset) {\n// @ts-ignore\n    var startPosDetails = peg$computePosDetails(startPos);\n// @ts-ignore\n    var endPosDetails = peg$computePosDetails(endPos);\n\n// @ts-ignore\n    var res = {\n// @ts-ignore\n      source: peg$source,\n// @ts-ignore\n      start: {\n// @ts-ignore\n        offset: startPos,\n// @ts-ignore\n        line: startPosDetails.line,\n// @ts-ignore\n        column: startPosDetails.column\n      },\n// @ts-ignore\n      end: {\n// @ts-ignore\n        offset: endPos,\n// @ts-ignore\n        line: endPosDetails.line,\n// @ts-ignore\n        column: endPosDetails.column\n      }\n    };\n// @ts-ignore\n    if (offset && peg$source && (typeof peg$source.offset === \"function\")) {\n// @ts-ignore\n      res.start = peg$source.offset(res.start);\n// @ts-ignore\n      res.end = peg$source.offset(res.end);\n    }\n// @ts-ignore\n    return res;\n  }\n\n// @ts-ignore\n  function peg$fail(expected) {\n// @ts-ignore\n    if (peg$currPos < peg$maxFailPos) { return; }\n\n// @ts-ignore\n    if (peg$currPos > peg$maxFailPos) {\n// @ts-ignore\n      peg$maxFailPos = peg$currPos;\n// @ts-ignore\n      peg$maxFailExpected = [];\n    }\n\n// @ts-ignore\n    peg$maxFailExpected.push(expected);\n  }\n\n// @ts-ignore\n  function peg$buildSimpleError(message, location) {\n// @ts-ignore\n    return new peg$SyntaxError(message, null, null, location);\n  }\n\n// @ts-ignore\n  function peg$buildStructuredError(expected, found, location) {\n// @ts-ignore\n    return new peg$SyntaxError(\n// @ts-ignore\n      peg$SyntaxError.buildMessage(expected, found),\n// @ts-ignore\n      expected,\n// @ts-ignore\n      found,\n// @ts-ignore\n      location\n    );\n  }\n\n// @ts-ignore\n  function // @ts-ignore\npeg$parsestart() {\n// @ts-ignore\n    var s0, s1;\n\n// @ts-ignore\n    s0 = [];\n// @ts-ignore\n    s1 = peg$parseif();\n// @ts-ignore\n    if (s1 === peg$FAILED) {\n// @ts-ignore\n      s1 = peg$parselist();\n// @ts-ignore\n      if (s1 === peg$FAILED) {\n// @ts-ignore\n        s1 = peg$parseassign();\n// @ts-ignore\n        if (s1 === peg$FAILED) {\n// @ts-ignore\n          s1 = peg$parsetag();\n// @ts-ignore\n          if (s1 === peg$FAILED) {\n// @ts-ignore\n            s1 = peg$parsetext();\n          }\n        }\n      }\n    }\n// @ts-ignore\n    while (s1 !== peg$FAILED) {\n// @ts-ignore\n      s0.push(s1);\n// @ts-ignore\n      s1 = peg$parseif();\n// @ts-ignore\n      if (s1 === peg$FAILED) {\n// @ts-ignore\n        s1 = peg$parselist();\n// @ts-ignore\n        if (s1 === peg$FAILED) {\n// @ts-ignore\n          s1 = peg$parseassign();\n// @ts-ignore\n          if (s1 === peg$FAILED) {\n// @ts-ignore\n            s1 = peg$parsetag();\n// @ts-ignore\n            if (s1 === peg$FAILED) {\n// @ts-ignore\n              s1 = peg$parsetext();\n            }\n          }\n        }\n      }\n    }\n\n// @ts-ignore\n    return s0;\n  }\n\n// @ts-ignore\n  function // @ts-ignore\npeg$parsetext() {\n// @ts-ignore\n    var s0, s1, s2;\n\n// @ts-ignore\n    peg$silentFails++;\n// @ts-ignore\n    s0 = peg$currPos;\n// @ts-ignore\n    s1 = [];\n// @ts-ignore\n    s2 = peg$parsechar();\n// @ts-ignore\n    if (s2 !== peg$FAILED) {\n// @ts-ignore\n      while (s2 !== peg$FAILED) {\n// @ts-ignore\n        s1.push(s2);\n// @ts-ignore\n        s2 = peg$parsechar();\n      }\n// @ts-ignore\n    } else {\n// @ts-ignore\n      s1 = peg$FAILED;\n    }\n// @ts-ignore\n    if (s1 !== peg$FAILED) {\n// @ts-ignore\n      peg$savedPos = s0;\n// @ts-ignore\n      s1 = peg$f0(s1);\n    }\n// @ts-ignore\n    s0 = s1;\n// @ts-ignore\n    peg$silentFails--;\n// @ts-ignore\n    if (s0 === peg$FAILED) {\n// @ts-ignore\n      s1 = peg$FAILED;\n// @ts-ignore\n      if (peg$silentFails === 0) { peg$fail(peg$e0); }\n    }\n\n// @ts-ignore\n    return s0;\n  }\n\n// @ts-ignore\n  function // @ts-ignore\npeg$parsechar() {\n// @ts-ignore\n    var s0, s1, s2;\n\n// @ts-ignore\n    peg$silentFails++;\n// @ts-ignore\n    s0 = peg$currPos;\n// @ts-ignore\n    s1 = peg$currPos;\n// @ts-ignore\n    peg$silentFails++;\n// @ts-ignore\n    if (input.substr(peg$currPos, 2) === peg$c0) {\n// @ts-ignore\n      s2 = peg$c0;\n// @ts-ignore\n      peg$currPos += 2;\n// @ts-ignore\n    } else {\n// @ts-ignore\n      s2 = peg$FAILED;\n// @ts-ignore\n      if (peg$silentFails === 0) { peg$fail(peg$e2); }\n    }\n// @ts-ignore\n    if (s2 === peg$FAILED) {\n// @ts-ignore\n      if (input.substr(peg$currPos, 2) === peg$c0) {\n// @ts-ignore\n        s2 = peg$c0;\n// @ts-ignore\n        peg$currPos += 2;\n// @ts-ignore\n      } else {\n// @ts-ignore\n        s2 = peg$FAILED;\n// @ts-ignore\n        if (peg$silentFails === 0) { peg$fail(peg$e2); }\n      }\n// @ts-ignore\n      if (s2 === peg$FAILED) {\n// @ts-ignore\n        if (input.substr(peg$currPos, 3) === peg$c1) {\n// @ts-ignore\n          s2 = peg$c1;\n// @ts-ignore\n          peg$currPos += 3;\n// @ts-ignore\n        } else {\n// @ts-ignore\n          s2 = peg$FAILED;\n// @ts-ignore\n          if (peg$silentFails === 0) { peg$fail(peg$e3); }\n        }\n// @ts-ignore\n        if (s2 === peg$FAILED) {\n// @ts-ignore\n          if (input.substr(peg$currPos, 2) === peg$c2) {\n// @ts-ignore\n            s2 = peg$c2;\n// @ts-ignore\n            peg$currPos += 2;\n// @ts-ignore\n          } else {\n// @ts-ignore\n            s2 = peg$FAILED;\n// @ts-ignore\n            if (peg$silentFails === 0) { peg$fail(peg$e4); }\n          }\n        }\n      }\n    }\n// @ts-ignore\n    peg$silentFails--;\n// @ts-ignore\n    if (s2 === peg$FAILED) {\n// @ts-ignore\n      s1 = undefined;\n// @ts-ignore\n    } else {\n// @ts-ignore\n      peg$currPos = s1;\n// @ts-ignore\n      s1 = peg$FAILED;\n    }\n// @ts-ignore\n    if (s1 !== peg$FAILED) {\n// @ts-ignore\n      if (input.length > peg$currPos) {\n// @ts-ignore\n        s2 = input.charAt(peg$currPos);\n// @ts-ignore\n        peg$currPos++;\n// @ts-ignore\n      } else {\n// @ts-ignore\n        s2 = peg$FAILED;\n// @ts-ignore\n        if (peg$silentFails === 0) { peg$fail(peg$e5); }\n      }\n// @ts-ignore\n      if (s2 !== peg$FAILED) {\n// @ts-ignore\n        peg$savedPos = s0;\n// @ts-ignore\n        s0 = peg$f1(s2);\n// @ts-ignore\n      } else {\n// @ts-ignore\n        peg$currPos = s0;\n// @ts-ignore\n        s0 = peg$FAILED;\n      }\n// @ts-ignore\n    } else {\n// @ts-ignore\n      peg$currPos = s0;\n// @ts-ignore\n      s0 = peg$FAILED;\n    }\n// @ts-ignore\n    peg$silentFails--;\n// @ts-ignore\n    if (s0 === peg$FAILED) {\n// @ts-ignore\n      s1 = peg$FAILED;\n// @ts-ignore\n      if (peg$silentFails === 0) { peg$fail(peg$e1); }\n    }\n\n// @ts-ignore\n    return s0;\n  }\n\n// @ts-ignore\n  function // @ts-ignore\npeg$parsetag() {\n// @ts-ignore\n    var s0, s1, s2, s3, s4, s5, s6, s7;\n\n// @ts-ignore\n    s0 = peg$currPos;\n// @ts-ignore\n    s1 = peg$currPos;\n// @ts-ignore\n    peg$silentFails++;\n// @ts-ignore\n    if (input.substr(peg$currPos, 2) === peg$c2) {\n// @ts-ignore\n      s2 = peg$c2;\n// @ts-ignore\n      peg$currPos += 2;\n// @ts-ignore\n    } else {\n// @ts-ignore\n      s2 = peg$FAILED;\n// @ts-ignore\n      if (peg$silentFails === 0) { peg$fail(peg$e4); }\n    }\n// @ts-ignore\n    peg$silentFails--;\n// @ts-ignore\n    if (s2 !== peg$FAILED) {\n// @ts-ignore\n      peg$currPos = s1;\n// @ts-ignore\n      s1 = undefined;\n// @ts-ignore\n    } else {\n// @ts-ignore\n      s1 = peg$FAILED;\n    }\n// @ts-ignore\n    if (s1 !== peg$FAILED) {\n// @ts-ignore\n      s2 = peg$currPos;\n// @ts-ignore\n      if (input.substr(peg$currPos, 2) === peg$c2) {\n// @ts-ignore\n        s3 = peg$c2;\n// @ts-ignore\n        peg$currPos += 2;\n// @ts-ignore\n      } else {\n// @ts-ignore\n        s3 = peg$FAILED;\n// @ts-ignore\n        if (peg$silentFails === 0) { peg$fail(peg$e4); }\n      }\n// @ts-ignore\n      if (s3 !== peg$FAILED) {\n// @ts-ignore\n        s4 = peg$parse_();\n// @ts-ignore\n        s5 = peg$parsetag_expression();\n// @ts-ignore\n        if (s5 !== peg$FAILED) {\n// @ts-ignore\n          s6 = peg$parse_();\n// @ts-ignore\n          if (input.charCodeAt(peg$currPos) === 125) {\n// @ts-ignore\n            s7 = peg$c3;\n// @ts-ignore\n            peg$currPos++;\n// @ts-ignore\n          } else {\n// @ts-ignore\n            s7 = peg$FAILED;\n// @ts-ignore\n            if (peg$silentFails === 0) { peg$fail(peg$e6); }\n          }\n// @ts-ignore\n          if (s7 !== peg$FAILED) {\n// @ts-ignore\n            s3 = [s3, s4, s5, s6, s7];\n// @ts-ignore\n            s2 = s3;\n// @ts-ignore\n          } else {\n// @ts-ignore\n            peg$currPos = s2;\n// @ts-ignore\n            s2 = peg$FAILED;\n          }\n// @ts-ignore\n        } else {\n// @ts-ignore\n          peg$currPos = s2;\n// @ts-ignore\n          s2 = peg$FAILED;\n        }\n// @ts-ignore\n      } else {\n// @ts-ignore\n        peg$currPos = s2;\n// @ts-ignore\n        s2 = peg$FAILED;\n      }\n// @ts-ignore\n      if (s2 !== peg$FAILED) {\n// @ts-ignore\n        peg$savedPos = s0;\n// @ts-ignore\n        s0 = peg$f2(s2);\n// @ts-ignore\n      } else {\n// @ts-ignore\n        peg$currPos = s0;\n// @ts-ignore\n        s0 = peg$FAILED;\n      }\n// @ts-ignore\n    } else {\n// @ts-ignore\n      peg$currPos = s0;\n// @ts-ignore\n      s0 = peg$FAILED;\n    }\n\n// @ts-ignore\n    return s0;\n  }\n\n// @ts-ignore\n  function // @ts-ignore\npeg$parseif() {\n// @ts-ignore\n    var s0;\n\n// @ts-ignore\n    s0 = peg$parseopenif();\n// @ts-ignore\n    if (s0 === peg$FAILED) {\n// @ts-ignore\n      s0 = peg$parseelseif();\n// @ts-ignore\n      if (s0 === peg$FAILED) {\n// @ts-ignore\n        s0 = peg$parseelse();\n// @ts-ignore\n        if (s0 === peg$FAILED) {\n// @ts-ignore\n          s0 = peg$parseendif();\n        }\n      }\n    }\n\n// @ts-ignore\n    return s0;\n  }\n\n// @ts-ignore\n  function // @ts-ignore\npeg$parseopenif() {\n// @ts-ignore\n    var s0, s1, s2, s3, s4, s5, s6;\n\n// @ts-ignore\n    s0 = peg$currPos;\n// @ts-ignore\n    s1 = peg$currPos;\n// @ts-ignore\n    peg$silentFails++;\n// @ts-ignore\n    if (input.substr(peg$currPos, 4) === peg$c4) {\n// @ts-ignore\n      s2 = peg$c4;\n// @ts-ignore\n      peg$currPos += 4;\n// @ts-ignore\n    } else {\n// @ts-ignore\n      s2 = peg$FAILED;\n// @ts-ignore\n      if (peg$silentFails === 0) { peg$fail(peg$e7); }\n    }\n// @ts-ignore\n    peg$silentFails--;\n// @ts-ignore\n    if (s2 !== peg$FAILED) {\n// @ts-ignore\n      peg$currPos = s1;\n// @ts-ignore\n      s1 = undefined;\n// @ts-ignore\n    } else {\n// @ts-ignore\n      s1 = peg$FAILED;\n    }\n// @ts-ignore\n    if (s1 !== peg$FAILED) {\n// @ts-ignore\n      s2 = peg$currPos;\n// @ts-ignore\n      if (input.substr(peg$currPos, 4) === peg$c4) {\n// @ts-ignore\n        s3 = peg$c4;\n// @ts-ignore\n        peg$currPos += 4;\n// @ts-ignore\n      } else {\n// @ts-ignore\n        s3 = peg$FAILED;\n// @ts-ignore\n        if (peg$silentFails === 0) { peg$fail(peg$e7); }\n      }\n// @ts-ignore\n      if (s3 !== peg$FAILED) {\n// @ts-ignore\n        s4 = peg$parserequired_whitespace();\n// @ts-ignore\n        if (s4 !== peg$FAILED) {\n// @ts-ignore\n          s5 = peg$parseexpression();\n// @ts-ignore\n          if (s5 !== peg$FAILED) {\n// @ts-ignore\n            if (input.charCodeAt(peg$currPos) === 62) {\n// @ts-ignore\n              s6 = peg$c5;\n// @ts-ignore\n              peg$currPos++;\n// @ts-ignore\n            } else {\n// @ts-ignore\n              s6 = peg$FAILED;\n// @ts-ignore\n              if (peg$silentFails === 0) { peg$fail(peg$e8); }\n            }\n// @ts-ignore\n            if (s6 !== peg$FAILED) {\n// @ts-ignore\n              s3 = [s3, s4, s5, s6];\n// @ts-ignore\n              s2 = s3;\n// @ts-ignore\n            } else {\n// @ts-ignore\n              peg$currPos = s2;\n// @ts-ignore\n              s2 = peg$FAILED;\n            }\n// @ts-ignore\n          } else {\n// @ts-ignore\n            peg$currPos = s2;\n// @ts-ignore\n            s2 = peg$FAILED;\n          }\n// @ts-ignore\n        } else {\n// @ts-ignore\n          peg$currPos = s2;\n// @ts-ignore\n          s2 = peg$FAILED;\n        }\n// @ts-ignore\n      } else {\n// @ts-ignore\n        peg$currPos = s2;\n// @ts-ignore\n        s2 = peg$FAILED;\n      }\n// @ts-ignore\n      if (s2 !== peg$FAILED) {\n// @ts-ignore\n        peg$savedPos = s0;\n// @ts-ignore\n        s0 = peg$f3(s2);\n// @ts-ignore\n      } else {\n// @ts-ignore\n        peg$currPos = s0;\n// @ts-ignore\n        s0 = peg$FAILED;\n      }\n// @ts-ignore\n    } else {\n// @ts-ignore\n      peg$currPos = s0;\n// @ts-ignore\n      s0 = peg$FAILED;\n    }\n\n// @ts-ignore\n    return s0;\n  }\n\n// @ts-ignore\n  function // @ts-ignore\npeg$parseelseif() {\n// @ts-ignore\n    var s0, s1, s2, s3, s4, s5, s6;\n\n// @ts-ignore\n    s0 = peg$currPos;\n// @ts-ignore\n    s1 = peg$currPos;\n// @ts-ignore\n    peg$silentFails++;\n// @ts-ignore\n    if (input.substr(peg$currPos, 8) === peg$c6) {\n// @ts-ignore\n      s2 = peg$c6;\n// @ts-ignore\n      peg$currPos += 8;\n// @ts-ignore\n    } else {\n// @ts-ignore\n      s2 = peg$FAILED;\n// @ts-ignore\n      if (peg$silentFails === 0) { peg$fail(peg$e9); }\n    }\n// @ts-ignore\n    peg$silentFails--;\n// @ts-ignore\n    if (s2 !== peg$FAILED) {\n// @ts-ignore\n      peg$currPos = s1;\n// @ts-ignore\n      s1 = undefined;\n// @ts-ignore\n    } else {\n// @ts-ignore\n      s1 = peg$FAILED;\n    }\n// @ts-ignore\n    if (s1 !== peg$FAILED) {\n// @ts-ignore\n      s2 = peg$currPos;\n// @ts-ignore\n      if (input.substr(peg$currPos, 8) === peg$c6) {\n// @ts-ignore\n        s3 = peg$c6;\n// @ts-ignore\n        peg$currPos += 8;\n// @ts-ignore\n      } else {\n// @ts-ignore\n        s3 = peg$FAILED;\n// @ts-ignore\n        if (peg$silentFails === 0) { peg$fail(peg$e9); }\n      }\n// @ts-ignore\n      if (s3 !== peg$FAILED) {\n// @ts-ignore\n        s4 = peg$parserequired_whitespace();\n// @ts-ignore\n        if (s4 !== peg$FAILED) {\n// @ts-ignore\n          s5 = peg$parseexpression();\n// @ts-ignore\n          if (s5 !== peg$FAILED) {\n// @ts-ignore\n            if (input.charCodeAt(peg$currPos) === 62) {\n// @ts-ignore\n              s6 = peg$c5;\n// @ts-ignore\n              peg$currPos++;\n// @ts-ignore\n            } else {\n// @ts-ignore\n              s6 = peg$FAILED;\n// @ts-ignore\n              if (peg$silentFails === 0) { peg$fail(peg$e8); }\n            }\n// @ts-ignore\n            if (s6 !== peg$FAILED) {\n// @ts-ignore\n              s3 = [s3, s4, s5, s6];\n// @ts-ignore\n              s2 = s3;\n// @ts-ignore\n            } else {\n// @ts-ignore\n              peg$currPos = s2;\n// @ts-ignore\n              s2 = peg$FAILED;\n            }\n// @ts-ignore\n          } else {\n// @ts-ignore\n            peg$currPos = s2;\n// @ts-ignore\n            s2 = peg$FAILED;\n          }\n// @ts-ignore\n        } else {\n// @ts-ignore\n          peg$currPos = s2;\n// @ts-ignore\n          s2 = peg$FAILED;\n        }\n// @ts-ignore\n      } else {\n// @ts-ignore\n        peg$currPos = s2;\n// @ts-ignore\n        s2 = peg$FAILED;\n      }\n// @ts-ignore\n      if (s2 !== peg$FAILED) {\n// @ts-ignore\n        peg$savedPos = s0;\n// @ts-ignore\n        s0 = peg$f4(s2);\n// @ts-ignore\n      } else {\n// @ts-ignore\n        peg$currPos = s0;\n// @ts-ignore\n        s0 = peg$FAILED;\n      }\n// @ts-ignore\n    } else {\n// @ts-ignore\n      peg$currPos = s0;\n// @ts-ignore\n      s0 = peg$FAILED;\n    }\n\n// @ts-ignore\n    return s0;\n  }\n\n// @ts-ignore\n  function // @ts-ignore\npeg$parseelse() {\n// @ts-ignore\n    var s0, s1, s2;\n\n// @ts-ignore\n    s0 = peg$currPos;\n// @ts-ignore\n    s1 = peg$currPos;\n// @ts-ignore\n    peg$silentFails++;\n// @ts-ignore\n    if (input.substr(peg$currPos, 6) === peg$c7) {\n// @ts-ignore\n      s2 = peg$c7;\n// @ts-ignore\n      peg$currPos += 6;\n// @ts-ignore\n    } else {\n// @ts-ignore\n      s2 = peg$FAILED;\n// @ts-ignore\n      if (peg$silentFails === 0) { peg$fail(peg$e10); }\n    }\n// @ts-ignore\n    peg$silentFails--;\n// @ts-ignore\n    if (s2 !== peg$FAILED) {\n// @ts-ignore\n      peg$currPos = s1;\n// @ts-ignore\n      s1 = undefined;\n// @ts-ignore\n    } else {\n// @ts-ignore\n      s1 = peg$FAILED;\n    }\n// @ts-ignore\n    if (s1 !== peg$FAILED) {\n// @ts-ignore\n      if (input.substr(peg$currPos, 7) === peg$c8) {\n// @ts-ignore\n        s2 = peg$c8;\n// @ts-ignore\n        peg$currPos += 7;\n// @ts-ignore\n      } else {\n// @ts-ignore\n        s2 = peg$FAILED;\n// @ts-ignore\n        if (peg$silentFails === 0) { peg$fail(peg$e11); }\n      }\n// @ts-ignore\n      if (s2 !== peg$FAILED) {\n// @ts-ignore\n        peg$savedPos = s0;\n// @ts-ignore\n        s0 = peg$f5(s2);\n// @ts-ignore\n      } else {\n// @ts-ignore\n        peg$currPos = s0;\n// @ts-ignore\n        s0 = peg$FAILED;\n      }\n// @ts-ignore\n    } else {\n// @ts-ignore\n      peg$currPos = s0;\n// @ts-ignore\n      s0 = peg$FAILED;\n    }\n\n// @ts-ignore\n    return s0;\n  }\n\n// @ts-ignore\n  function // @ts-ignore\npeg$parseendif() {\n// @ts-ignore\n    var s0, s1, s2;\n\n// @ts-ignore\n    s0 = peg$currPos;\n// @ts-ignore\n    s1 = peg$currPos;\n// @ts-ignore\n    peg$silentFails++;\n// @ts-ignore\n    if (input.substr(peg$currPos, 5) === peg$c9) {\n// @ts-ignore\n      s2 = peg$c9;\n// @ts-ignore\n      peg$currPos += 5;\n// @ts-ignore\n    } else {\n// @ts-ignore\n      s2 = peg$FAILED;\n// @ts-ignore\n      if (peg$silentFails === 0) { peg$fail(peg$e12); }\n    }\n// @ts-ignore\n    peg$silentFails--;\n// @ts-ignore\n    if (s2 !== peg$FAILED) {\n// @ts-ignore\n      peg$currPos = s1;\n// @ts-ignore\n      s1 = undefined;\n// @ts-ignore\n    } else {\n// @ts-ignore\n      s1 = peg$FAILED;\n    }\n// @ts-ignore\n    if (s1 !== peg$FAILED) {\n// @ts-ignore\n      if (input.substr(peg$currPos, 6) === peg$c10) {\n// @ts-ignore\n        s2 = peg$c10;\n// @ts-ignore\n        peg$currPos += 6;\n// @ts-ignore\n      } else {\n// @ts-ignore\n        s2 = peg$FAILED;\n// @ts-ignore\n        if (peg$silentFails === 0) { peg$fail(peg$e13); }\n      }\n// @ts-ignore\n      if (s2 !== peg$FAILED) {\n// @ts-ignore\n        peg$savedPos = s0;\n// @ts-ignore\n        s0 = peg$f6(s2);\n// @ts-ignore\n      } else {\n// @ts-ignore\n        peg$currPos = s0;\n// @ts-ignore\n        s0 = peg$FAILED;\n      }\n// @ts-ignore\n    } else {\n// @ts-ignore\n      peg$currPos = s0;\n// @ts-ignore\n      s0 = peg$FAILED;\n    }\n\n// @ts-ignore\n    return s0;\n  }\n\n// @ts-ignore\n  function // @ts-ignore\npeg$parselist() {\n// @ts-ignore\n    var s0;\n\n// @ts-ignore\n    s0 = peg$parseopenlist();\n// @ts-ignore\n    if (s0 === peg$FAILED) {\n// @ts-ignore\n      s0 = peg$parseendlist();\n    }\n\n// @ts-ignore\n    return s0;\n  }\n\n// @ts-ignore\n  function // @ts-ignore\npeg$parseopenlist() {\n// @ts-ignore\n    var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10;\n\n// @ts-ignore\n    s0 = peg$currPos;\n// @ts-ignore\n    s1 = peg$currPos;\n// @ts-ignore\n    peg$silentFails++;\n// @ts-ignore\n    if (input.substr(peg$currPos, 6) === peg$c11) {\n// @ts-ignore\n      s2 = peg$c11;\n// @ts-ignore\n      peg$currPos += 6;\n// @ts-ignore\n    } else {\n// @ts-ignore\n      s2 = peg$FAILED;\n// @ts-ignore\n      if (peg$silentFails === 0) { peg$fail(peg$e14); }\n    }\n// @ts-ignore\n    peg$silentFails--;\n// @ts-ignore\n    if (s2 !== peg$FAILED) {\n// @ts-ignore\n      peg$currPos = s1;\n// @ts-ignore\n      s1 = undefined;\n// @ts-ignore\n    } else {\n// @ts-ignore\n      s1 = peg$FAILED;\n    }\n// @ts-ignore\n    if (s1 !== peg$FAILED) {\n// @ts-ignore\n      s2 = peg$currPos;\n// @ts-ignore\n      if (input.substr(peg$currPos, 6) === peg$c11) {\n// @ts-ignore\n        s3 = peg$c11;\n// @ts-ignore\n        peg$currPos += 6;\n// @ts-ignore\n      } else {\n// @ts-ignore\n        s3 = peg$FAILED;\n// @ts-ignore\n        if (peg$silentFails === 0) { peg$fail(peg$e14); }\n      }\n// @ts-ignore\n      if (s3 !== peg$FAILED) {\n// @ts-ignore\n        s4 = peg$parserequired_whitespace();\n// @ts-ignore\n        if (s4 !== peg$FAILED) {\n// @ts-ignore\n          s5 = peg$parsevariable();\n// @ts-ignore\n          s6 = peg$parserequired_whitespace();\n// @ts-ignore\n          if (s6 !== peg$FAILED) {\n// @ts-ignore\n            if (input.substr(peg$currPos, 2) === peg$c12) {\n// @ts-ignore\n              s7 = peg$c12;\n// @ts-ignore\n              peg$currPos += 2;\n// @ts-ignore\n            } else {\n// @ts-ignore\n              s7 = peg$FAILED;\n// @ts-ignore\n              if (peg$silentFails === 0) { peg$fail(peg$e15); }\n            }\n// @ts-ignore\n            if (s7 !== peg$FAILED) {\n// @ts-ignore\n              s8 = peg$parserequired_whitespace();\n// @ts-ignore\n              if (s8 !== peg$FAILED) {\n// @ts-ignore\n                s9 = peg$parsevariable();\n// @ts-ignore\n                if (input.charCodeAt(peg$currPos) === 62) {\n// @ts-ignore\n                  s10 = peg$c5;\n// @ts-ignore\n                  peg$currPos++;\n// @ts-ignore\n                } else {\n// @ts-ignore\n                  s10 = peg$FAILED;\n// @ts-ignore\n                  if (peg$silentFails === 0) { peg$fail(peg$e8); }\n                }\n// @ts-ignore\n                if (s10 !== peg$FAILED) {\n// @ts-ignore\n                  s3 = [s3, s4, s5, s6, s7, s8, s9, s10];\n// @ts-ignore\n                  s2 = s3;\n// @ts-ignore\n                } else {\n// @ts-ignore\n                  peg$currPos = s2;\n// @ts-ignore\n                  s2 = peg$FAILED;\n                }\n// @ts-ignore\n              } else {\n// @ts-ignore\n                peg$currPos = s2;\n// @ts-ignore\n                s2 = peg$FAILED;\n              }\n// @ts-ignore\n            } else {\n// @ts-ignore\n              peg$currPos = s2;\n// @ts-ignore\n              s2 = peg$FAILED;\n            }\n// @ts-ignore\n          } else {\n// @ts-ignore\n            peg$currPos = s2;\n// @ts-ignore\n            s2 = peg$FAILED;\n          }\n// @ts-ignore\n        } else {\n// @ts-ignore\n          peg$currPos = s2;\n// @ts-ignore\n          s2 = peg$FAILED;\n        }\n// @ts-ignore\n      } else {\n// @ts-ignore\n        peg$currPos = s2;\n// @ts-ignore\n        s2 = peg$FAILED;\n      }\n// @ts-ignore\n      if (s2 !== peg$FAILED) {\n// @ts-ignore\n        peg$savedPos = s0;\n// @ts-ignore\n        s0 = peg$f7(s2);\n// @ts-ignore\n      } else {\n// @ts-ignore\n        peg$currPos = s0;\n// @ts-ignore\n        s0 = peg$FAILED;\n      }\n// @ts-ignore\n    } else {\n// @ts-ignore\n      peg$currPos = s0;\n// @ts-ignore\n      s0 = peg$FAILED;\n    }\n\n// @ts-ignore\n    return s0;\n  }\n\n// @ts-ignore\n  function // @ts-ignore\npeg$parseendlist() {\n// @ts-ignore\n    var s0, s1, s2;\n\n// @ts-ignore\n    s0 = peg$currPos;\n// @ts-ignore\n    s1 = peg$currPos;\n// @ts-ignore\n    peg$silentFails++;\n// @ts-ignore\n    if (input.substr(peg$currPos, 7) === peg$c13) {\n// @ts-ignore\n      s2 = peg$c13;\n// @ts-ignore\n      peg$currPos += 7;\n// @ts-ignore\n    } else {\n// @ts-ignore\n      s2 = peg$FAILED;\n// @ts-ignore\n      if (peg$silentFails === 0) { peg$fail(peg$e16); }\n    }\n// @ts-ignore\n    peg$silentFails--;\n// @ts-ignore\n    if (s2 !== peg$FAILED) {\n// @ts-ignore\n      peg$currPos = s1;\n// @ts-ignore\n      s1 = undefined;\n// @ts-ignore\n    } else {\n// @ts-ignore\n      s1 = peg$FAILED;\n    }\n// @ts-ignore\n    if (s1 !== peg$FAILED) {\n// @ts-ignore\n      if (input.substr(peg$currPos, 8) === peg$c14) {\n// @ts-ignore\n        s2 = peg$c14;\n// @ts-ignore\n        peg$currPos += 8;\n// @ts-ignore\n      } else {\n// @ts-ignore\n        s2 = peg$FAILED;\n// @ts-ignore\n        if (peg$silentFails === 0) { peg$fail(peg$e17); }\n      }\n// @ts-ignore\n      if (s2 !== peg$FAILED) {\n// @ts-ignore\n        peg$savedPos = s0;\n// @ts-ignore\n        s0 = peg$f8(s2);\n// @ts-ignore\n      } else {\n// @ts-ignore\n        peg$currPos = s0;\n// @ts-ignore\n        s0 = peg$FAILED;\n      }\n// @ts-ignore\n    } else {\n// @ts-ignore\n      peg$currPos = s0;\n// @ts-ignore\n      s0 = peg$FAILED;\n    }\n\n// @ts-ignore\n    return s0;\n  }\n\n// @ts-ignore\n  function // @ts-ignore\npeg$parseassign() {\n// @ts-ignore\n    var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10;\n\n// @ts-ignore\n    s0 = peg$currPos;\n// @ts-ignore\n    s1 = peg$currPos;\n// @ts-ignore\n    peg$silentFails++;\n// @ts-ignore\n    if (input.substr(peg$currPos, 8) === peg$c15) {\n// @ts-ignore\n      s2 = peg$c15;\n// @ts-ignore\n      peg$currPos += 8;\n// @ts-ignore\n    } else {\n// @ts-ignore\n      s2 = peg$FAILED;\n// @ts-ignore\n      if (peg$silentFails === 0) { peg$fail(peg$e18); }\n    }\n// @ts-ignore\n    peg$silentFails--;\n// @ts-ignore\n    if (s2 !== peg$FAILED) {\n// @ts-ignore\n      peg$currPos = s1;\n// @ts-ignore\n      s1 = undefined;\n// @ts-ignore\n    } else {\n// @ts-ignore\n      s1 = peg$FAILED;\n    }\n// @ts-ignore\n    if (s1 !== peg$FAILED) {\n// @ts-ignore\n      s2 = peg$currPos;\n// @ts-ignore\n      if (input.substr(peg$currPos, 8) === peg$c15) {\n// @ts-ignore\n        s3 = peg$c15;\n// @ts-ignore\n        peg$currPos += 8;\n// @ts-ignore\n      } else {\n// @ts-ignore\n        s3 = peg$FAILED;\n// @ts-ignore\n        if (peg$silentFails === 0) { peg$fail(peg$e18); }\n      }\n// @ts-ignore\n      if (s3 !== peg$FAILED) {\n// @ts-ignore\n        s4 = peg$parserequired_whitespace();\n// @ts-ignore\n        if (s4 !== peg$FAILED) {\n// @ts-ignore\n          s5 = peg$parsevariable();\n// @ts-ignore\n          s6 = peg$parse_();\n// @ts-ignore\n          if (input.charCodeAt(peg$currPos) === 61) {\n// @ts-ignore\n            s7 = peg$c16;\n// @ts-ignore\n            peg$currPos++;\n// @ts-ignore\n          } else {\n// @ts-ignore\n            s7 = peg$FAILED;\n// @ts-ignore\n            if (peg$silentFails === 0) { peg$fail(peg$e19); }\n          }\n// @ts-ignore\n          if (s7 !== peg$FAILED) {\n// @ts-ignore\n            s8 = peg$parse_();\n// @ts-ignore\n            s9 = peg$parseexpression();\n// @ts-ignore\n            if (s9 !== peg$FAILED) {\n// @ts-ignore\n              if (input.charCodeAt(peg$currPos) === 62) {\n// @ts-ignore\n                s10 = peg$c5;\n// @ts-ignore\n                peg$currPos++;\n// @ts-ignore\n              } else {\n// @ts-ignore\n                s10 = peg$FAILED;\n// @ts-ignore\n                if (peg$silentFails === 0) { peg$fail(peg$e8); }\n              }\n// @ts-ignore\n              if (s10 !== peg$FAILED) {\n// @ts-ignore\n                s3 = [s3, s4, s5, s6, s7, s8, s9, s10];\n// @ts-ignore\n                s2 = s3;\n// @ts-ignore\n              } else {\n// @ts-ignore\n                peg$currPos = s2;\n// @ts-ignore\n                s2 = peg$FAILED;\n              }\n// @ts-ignore\n            } else {\n// @ts-ignore\n              peg$currPos = s2;\n// @ts-ignore\n              s2 = peg$FAILED;\n            }\n// @ts-ignore\n          } else {\n// @ts-ignore\n            peg$currPos = s2;\n// @ts-ignore\n            s2 = peg$FAILED;\n          }\n// @ts-ignore\n        } else {\n// @ts-ignore\n          peg$currPos = s2;\n// @ts-ignore\n          s2 = peg$FAILED;\n        }\n// @ts-ignore\n      } else {\n// @ts-ignore\n        peg$currPos = s2;\n// @ts-ignore\n        s2 = peg$FAILED;\n      }\n// @ts-ignore\n      if (s2 !== peg$FAILED) {\n// @ts-ignore\n        peg$savedPos = s0;\n// @ts-ignore\n        s0 = peg$f9(s2);\n// @ts-ignore\n      } else {\n// @ts-ignore\n        peg$currPos = s0;\n// @ts-ignore\n        s0 = peg$FAILED;\n      }\n// @ts-ignore\n    } else {\n// @ts-ignore\n      peg$currPos = s0;\n// @ts-ignore\n      s0 = peg$FAILED;\n    }\n\n// @ts-ignore\n    return s0;\n  }\n\n// @ts-ignore\n  function // @ts-ignore\npeg$parsetag_expression() {\n// @ts-ignore\n    var s0, s1, s2, s3, s4, s5, s6, s7;\n\n// @ts-ignore\n    peg$silentFails++;\n// @ts-ignore\n    s0 = peg$currPos;\n// @ts-ignore\n    s1 = peg$currPos;\n// @ts-ignore\n    if (input.charCodeAt(peg$currPos) === 33) {\n// @ts-ignore\n      s2 = peg$c17;\n// @ts-ignore\n      peg$currPos++;\n// @ts-ignore\n    } else {\n// @ts-ignore\n      s2 = peg$FAILED;\n// @ts-ignore\n      if (peg$silentFails === 0) { peg$fail(peg$e21); }\n    }\n// @ts-ignore\n    if (s2 === peg$FAILED) {\n// @ts-ignore\n      s2 = null;\n    }\n// @ts-ignore\n    if (input.charCodeAt(peg$currPos) === 40) {\n// @ts-ignore\n      s3 = peg$c18;\n// @ts-ignore\n      peg$currPos++;\n// @ts-ignore\n    } else {\n// @ts-ignore\n      s3 = peg$FAILED;\n// @ts-ignore\n      if (peg$silentFails === 0) { peg$fail(peg$e22); }\n    }\n// @ts-ignore\n    if (s3 !== peg$FAILED) {\n// @ts-ignore\n      s4 = peg$parse_();\n// @ts-ignore\n      s5 = peg$parseunsafe_expression();\n// @ts-ignore\n      s6 = peg$parse_();\n// @ts-ignore\n      if (input.charCodeAt(peg$currPos) === 41) {\n// @ts-ignore\n        s7 = peg$c19;\n// @ts-ignore\n        peg$currPos++;\n// @ts-ignore\n      } else {\n// @ts-ignore\n        s7 = peg$FAILED;\n// @ts-ignore\n        if (peg$silentFails === 0) { peg$fail(peg$e23); }\n      }\n// @ts-ignore\n      if (s7 !== peg$FAILED) {\n// @ts-ignore\n        s2 = [s2, s3, s4, s5, s6, s7];\n// @ts-ignore\n        s1 = s2;\n// @ts-ignore\n      } else {\n// @ts-ignore\n        peg$currPos = s1;\n// @ts-ignore\n        s1 = peg$FAILED;\n      }\n// @ts-ignore\n    } else {\n// @ts-ignore\n      peg$currPos = s1;\n// @ts-ignore\n      s1 = peg$FAILED;\n    }\n// @ts-ignore\n    if (s1 === peg$FAILED) {\n// @ts-ignore\n      s1 = peg$parseunsafe_expression();\n    }\n// @ts-ignore\n    if (s1 !== peg$FAILED) {\n// @ts-ignore\n      s2 = peg$parse_();\n// @ts-ignore\n      peg$savedPos = s0;\n// @ts-ignore\n      s0 = peg$f10(s1);\n// @ts-ignore\n    } else {\n// @ts-ignore\n      peg$currPos = s0;\n// @ts-ignore\n      s0 = peg$FAILED;\n    }\n// @ts-ignore\n    peg$silentFails--;\n// @ts-ignore\n    if (s0 === peg$FAILED) {\n// @ts-ignore\n      s1 = peg$FAILED;\n// @ts-ignore\n      if (peg$silentFails === 0) { peg$fail(peg$e20); }\n    }\n\n// @ts-ignore\n    return s0;\n  }\n\n// @ts-ignore\n  function // @ts-ignore\npeg$parseexpression() {\n// @ts-ignore\n    var s0, s1, s2, s3, s4, s5, s6, s7, s8;\n\n// @ts-ignore\n    peg$silentFails++;\n// @ts-ignore\n    s0 = peg$currPos;\n// @ts-ignore\n    s1 = peg$currPos;\n// @ts-ignore\n    s2 = peg$currPos;\n// @ts-ignore\n    if (input.charCodeAt(peg$currPos) === 33) {\n// @ts-ignore\n      s3 = peg$c17;\n// @ts-ignore\n      peg$currPos++;\n// @ts-ignore\n    } else {\n// @ts-ignore\n      s3 = peg$FAILED;\n// @ts-ignore\n      if (peg$silentFails === 0) { peg$fail(peg$e21); }\n    }\n// @ts-ignore\n    if (s3 === peg$FAILED) {\n// @ts-ignore\n      s3 = null;\n    }\n// @ts-ignore\n    if (input.charCodeAt(peg$currPos) === 40) {\n// @ts-ignore\n      s4 = peg$c18;\n// @ts-ignore\n      peg$currPos++;\n// @ts-ignore\n    } else {\n// @ts-ignore\n      s4 = peg$FAILED;\n// @ts-ignore\n      if (peg$silentFails === 0) { peg$fail(peg$e22); }\n    }\n// @ts-ignore\n    if (s4 !== peg$FAILED) {\n// @ts-ignore\n      s5 = peg$parse_();\n// @ts-ignore\n      s6 = peg$parseunsafe_expression();\n// @ts-ignore\n      s7 = peg$parse_();\n// @ts-ignore\n      if (input.charCodeAt(peg$currPos) === 41) {\n// @ts-ignore\n        s8 = peg$c19;\n// @ts-ignore\n        peg$currPos++;\n// @ts-ignore\n      } else {\n// @ts-ignore\n        s8 = peg$FAILED;\n// @ts-ignore\n        if (peg$silentFails === 0) { peg$fail(peg$e23); }\n      }\n// @ts-ignore\n      if (s8 !== peg$FAILED) {\n// @ts-ignore\n        s3 = [s3, s4, s5, s6, s7, s8];\n// @ts-ignore\n        s2 = s3;\n// @ts-ignore\n      } else {\n// @ts-ignore\n        peg$currPos = s2;\n// @ts-ignore\n        s2 = peg$FAILED;\n      }\n// @ts-ignore\n    } else {\n// @ts-ignore\n      peg$currPos = s2;\n// @ts-ignore\n      s2 = peg$FAILED;\n    }\n// @ts-ignore\n    if (s2 === peg$FAILED) {\n// @ts-ignore\n      s2 = peg$parsesafe_expression();\n    }\n// @ts-ignore\n    if (s2 !== peg$FAILED) {\n// @ts-ignore\n      s3 = peg$parse_();\n// @ts-ignore\n      s4 = peg$currPos;\n// @ts-ignore\n      s5 = peg$parsesafe_operator();\n// @ts-ignore\n      if (s5 !== peg$FAILED) {\n// @ts-ignore\n        s6 = peg$parse_();\n// @ts-ignore\n        s7 = peg$parseexpression();\n// @ts-ignore\n        if (s7 !== peg$FAILED) {\n// @ts-ignore\n          s5 = [s5, s6, s7];\n// @ts-ignore\n          s4 = s5;\n// @ts-ignore\n        } else {\n// @ts-ignore\n          peg$currPos = s4;\n// @ts-ignore\n          s4 = peg$FAILED;\n        }\n// @ts-ignore\n      } else {\n// @ts-ignore\n        peg$currPos = s4;\n// @ts-ignore\n        s4 = peg$FAILED;\n      }\n// @ts-ignore\n      if (s4 === peg$FAILED) {\n// @ts-ignore\n        s4 = null;\n      }\n// @ts-ignore\n      s2 = [s2, s3, s4];\n// @ts-ignore\n      s1 = s2;\n// @ts-ignore\n    } else {\n// @ts-ignore\n      peg$currPos = s1;\n// @ts-ignore\n      s1 = peg$FAILED;\n    }\n// @ts-ignore\n    if (s1 !== peg$FAILED) {\n// @ts-ignore\n      s2 = peg$parse_();\n// @ts-ignore\n      peg$savedPos = s0;\n// @ts-ignore\n      s0 = peg$f11(s1);\n// @ts-ignore\n    } else {\n// @ts-ignore\n      peg$currPos = s0;\n// @ts-ignore\n      s0 = peg$FAILED;\n    }\n// @ts-ignore\n    peg$silentFails--;\n// @ts-ignore\n    if (s0 === peg$FAILED) {\n// @ts-ignore\n      s1 = peg$FAILED;\n// @ts-ignore\n      if (peg$silentFails === 0) { peg$fail(peg$e20); }\n    }\n\n// @ts-ignore\n    return s0;\n  }\n\n// @ts-ignore\n  function // @ts-ignore\npeg$parseunsafe_expression() {\n// @ts-ignore\n    var s0, s1, s2, s3, s4, s5, s6, s7, s8;\n\n// @ts-ignore\n    peg$silentFails++;\n// @ts-ignore\n    s0 = peg$currPos;\n// @ts-ignore\n    if (input.charCodeAt(peg$currPos) === 33) {\n// @ts-ignore\n      s1 = peg$c17;\n// @ts-ignore\n      peg$currPos++;\n// @ts-ignore\n    } else {\n// @ts-ignore\n      s1 = peg$FAILED;\n// @ts-ignore\n      if (peg$silentFails === 0) { peg$fail(peg$e21); }\n    }\n// @ts-ignore\n    if (s1 === peg$FAILED) {\n// @ts-ignore\n      s1 = null;\n    }\n// @ts-ignore\n    s2 = peg$parsevariable();\n// @ts-ignore\n    s3 = [];\n// @ts-ignore\n    s4 = peg$currPos;\n// @ts-ignore\n    s5 = peg$parse_();\n// @ts-ignore\n    s6 = peg$parseunsafe_operator();\n// @ts-ignore\n    if (s6 !== peg$FAILED) {\n// @ts-ignore\n      s7 = peg$parse_();\n// @ts-ignore\n      s8 = peg$parseexpression();\n// @ts-ignore\n      if (s8 !== peg$FAILED) {\n// @ts-ignore\n        s5 = [s5, s6, s7, s8];\n// @ts-ignore\n        s4 = s5;\n// @ts-ignore\n      } else {\n// @ts-ignore\n        peg$currPos = s4;\n// @ts-ignore\n        s4 = peg$FAILED;\n      }\n// @ts-ignore\n    } else {\n// @ts-ignore\n      peg$currPos = s4;\n// @ts-ignore\n      s4 = peg$FAILED;\n    }\n// @ts-ignore\n    while (s4 !== peg$FAILED) {\n// @ts-ignore\n      s3.push(s4);\n// @ts-ignore\n      s4 = peg$currPos;\n// @ts-ignore\n      s5 = peg$parse_();\n// @ts-ignore\n      s6 = peg$parseunsafe_operator();\n// @ts-ignore\n      if (s6 !== peg$FAILED) {\n// @ts-ignore\n        s7 = peg$parse_();\n// @ts-ignore\n        s8 = peg$parseexpression();\n// @ts-ignore\n        if (s8 !== peg$FAILED) {\n// @ts-ignore\n          s5 = [s5, s6, s7, s8];\n// @ts-ignore\n          s4 = s5;\n// @ts-ignore\n        } else {\n// @ts-ignore\n          peg$currPos = s4;\n// @ts-ignore\n          s4 = peg$FAILED;\n        }\n// @ts-ignore\n      } else {\n// @ts-ignore\n        peg$currPos = s4;\n// @ts-ignore\n        s4 = peg$FAILED;\n      }\n    }\n// @ts-ignore\n    s1 = [s1, s2, s3];\n// @ts-ignore\n    s0 = s1;\n// @ts-ignore\n    peg$silentFails--;\n// @ts-ignore\n    s1 = peg$FAILED;\n// @ts-ignore\n    if (peg$silentFails === 0) { peg$fail(peg$e24); }\n\n// @ts-ignore\n    return s0;\n  }\n\n// @ts-ignore\n  function // @ts-ignore\npeg$parsesafe_expression() {\n// @ts-ignore\n    var s0, s1, s2, s3, s4, s5, s6, s7, s8;\n\n// @ts-ignore\n    peg$silentFails++;\n// @ts-ignore\n    s0 = peg$currPos;\n// @ts-ignore\n    if (input.charCodeAt(peg$currPos) === 33) {\n// @ts-ignore\n      s1 = peg$c17;\n// @ts-ignore\n      peg$currPos++;\n// @ts-ignore\n    } else {\n// @ts-ignore\n      s1 = peg$FAILED;\n// @ts-ignore\n      if (peg$silentFails === 0) { peg$fail(peg$e21); }\n    }\n// @ts-ignore\n    if (s1 === peg$FAILED) {\n// @ts-ignore\n      s1 = null;\n    }\n// @ts-ignore\n    s2 = peg$parsevariable();\n// @ts-ignore\n    s3 = [];\n// @ts-ignore\n    s4 = peg$currPos;\n// @ts-ignore\n    s5 = peg$parse_();\n// @ts-ignore\n    s6 = peg$parsesafe_operator();\n// @ts-ignore\n    if (s6 !== peg$FAILED) {\n// @ts-ignore\n      s7 = peg$parse_();\n// @ts-ignore\n      s8 = peg$parseexpression();\n// @ts-ignore\n      if (s8 !== peg$FAILED) {\n// @ts-ignore\n        s5 = [s5, s6, s7, s8];\n// @ts-ignore\n        s4 = s5;\n// @ts-ignore\n      } else {\n// @ts-ignore\n        peg$currPos = s4;\n// @ts-ignore\n        s4 = peg$FAILED;\n      }\n// @ts-ignore\n    } else {\n// @ts-ignore\n      peg$currPos = s4;\n// @ts-ignore\n      s4 = peg$FAILED;\n    }\n// @ts-ignore\n    while (s4 !== peg$FAILED) {\n// @ts-ignore\n      s3.push(s4);\n// @ts-ignore\n      s4 = peg$currPos;\n// @ts-ignore\n      s5 = peg$parse_();\n// @ts-ignore\n      s6 = peg$parsesafe_operator();\n// @ts-ignore\n      if (s6 !== peg$FAILED) {\n// @ts-ignore\n        s7 = peg$parse_();\n// @ts-ignore\n        s8 = peg$parseexpression();\n// @ts-ignore\n        if (s8 !== peg$FAILED) {\n// @ts-ignore\n          s5 = [s5, s6, s7, s8];\n// @ts-ignore\n          s4 = s5;\n// @ts-ignore\n        } else {\n// @ts-ignore\n          peg$currPos = s4;\n// @ts-ignore\n          s4 = peg$FAILED;\n        }\n// @ts-ignore\n      } else {\n// @ts-ignore\n        peg$currPos = s4;\n// @ts-ignore\n        s4 = peg$FAILED;\n      }\n    }\n// @ts-ignore\n    s1 = [s1, s2, s3];\n// @ts-ignore\n    s0 = s1;\n// @ts-ignore\n    peg$silentFails--;\n// @ts-ignore\n    s1 = peg$FAILED;\n// @ts-ignore\n    if (peg$silentFails === 0) { peg$fail(peg$e24); }\n\n// @ts-ignore\n    return s0;\n  }\n\n// @ts-ignore\n  function // @ts-ignore\npeg$parsevariable() {\n// @ts-ignore\n    var s0, s1, s2, s3, s4;\n\n// @ts-ignore\n    s0 = peg$currPos;\n// @ts-ignore\n    s1 = [];\n// @ts-ignore\n    s2 = peg$currPos;\n// @ts-ignore\n    if (input.charCodeAt(peg$currPos) === 46) {\n// @ts-ignore\n      s3 = peg$c20;\n// @ts-ignore\n      peg$currPos++;\n// @ts-ignore\n    } else {\n// @ts-ignore\n      s3 = peg$FAILED;\n// @ts-ignore\n      if (peg$silentFails === 0) { peg$fail(peg$e25); }\n    }\n// @ts-ignore\n    if (s3 === peg$FAILED) {\n// @ts-ignore\n      s3 = peg$parseencapsulated_string();\n// @ts-ignore\n      if (s3 === peg$FAILED) {\n// @ts-ignore\n        s3 = peg$parsevarname();\n// @ts-ignore\n        if (s3 === peg$FAILED) {\n// @ts-ignore\n          s3 = peg$parsehtml_entity();\n        }\n      }\n    }\n// @ts-ignore\n    if (s3 !== peg$FAILED) {\n// @ts-ignore\n      s4 = peg$parsevariable_notation();\n// @ts-ignore\n      s3 = [s3, s4];\n// @ts-ignore\n      s2 = s3;\n// @ts-ignore\n    } else {\n// @ts-ignore\n      peg$currPos = s2;\n// @ts-ignore\n      s2 = peg$FAILED;\n    }\n// @ts-ignore\n    while (s2 !== peg$FAILED) {\n// @ts-ignore\n      s1.push(s2);\n// @ts-ignore\n      s2 = peg$currPos;\n// @ts-ignore\n      if (input.charCodeAt(peg$currPos) === 46) {\n// @ts-ignore\n        s3 = peg$c20;\n// @ts-ignore\n        peg$currPos++;\n// @ts-ignore\n      } else {\n// @ts-ignore\n        s3 = peg$FAILED;\n// @ts-ignore\n        if (peg$silentFails === 0) { peg$fail(peg$e25); }\n      }\n// @ts-ignore\n      if (s3 === peg$FAILED) {\n// @ts-ignore\n        s3 = peg$parseencapsulated_string();\n// @ts-ignore\n        if (s3 === peg$FAILED) {\n// @ts-ignore\n          s3 = peg$parsevarname();\n// @ts-ignore\n          if (s3 === peg$FAILED) {\n// @ts-ignore\n            s3 = peg$parsehtml_entity();\n          }\n        }\n      }\n// @ts-ignore\n      if (s3 !== peg$FAILED) {\n// @ts-ignore\n        s4 = peg$parsevariable_notation();\n// @ts-ignore\n        s3 = [s3, s4];\n// @ts-ignore\n        s2 = s3;\n// @ts-ignore\n      } else {\n// @ts-ignore\n        peg$currPos = s2;\n// @ts-ignore\n        s2 = peg$FAILED;\n      }\n    }\n// @ts-ignore\n    peg$savedPos = s0;\n// @ts-ignore\n    s1 = peg$f12(s1);\n// @ts-ignore\n    s0 = s1;\n\n// @ts-ignore\n    return s0;\n  }\n\n// @ts-ignore\n  function // @ts-ignore\npeg$parsevariable_notation() {\n// @ts-ignore\n    var s0, s1, s2, s3;\n\n// @ts-ignore\n    s0 = [];\n// @ts-ignore\n    s1 = peg$currPos;\n// @ts-ignore\n    if (input.charCodeAt(peg$currPos) === 46) {\n// @ts-ignore\n      s2 = peg$c20;\n// @ts-ignore\n      peg$currPos++;\n// @ts-ignore\n    } else {\n// @ts-ignore\n      s2 = peg$FAILED;\n// @ts-ignore\n      if (peg$silentFails === 0) { peg$fail(peg$e25); }\n    }\n// @ts-ignore\n    if (s2 !== peg$FAILED) {\n// @ts-ignore\n      s3 = peg$parsevarname();\n// @ts-ignore\n      if (s3 !== peg$FAILED) {\n// @ts-ignore\n        s2 = [s2, s3];\n// @ts-ignore\n        s1 = s2;\n// @ts-ignore\n      } else {\n// @ts-ignore\n        peg$currPos = s1;\n// @ts-ignore\n        s1 = peg$FAILED;\n      }\n// @ts-ignore\n    } else {\n// @ts-ignore\n      peg$currPos = s1;\n// @ts-ignore\n      s1 = peg$FAILED;\n    }\n// @ts-ignore\n    if (s1 === peg$FAILED) {\n// @ts-ignore\n      s1 = peg$parsearray_expression();\n// @ts-ignore\n      if (s1 === peg$FAILED) {\n// @ts-ignore\n        s1 = peg$parsemodifier_expression();\n// @ts-ignore\n        if (s1 === peg$FAILED) {\n// @ts-ignore\n          s1 = peg$parseargs();\n        }\n      }\n    }\n// @ts-ignore\n    while (s1 !== peg$FAILED) {\n// @ts-ignore\n      s0.push(s1);\n// @ts-ignore\n      s1 = peg$currPos;\n// @ts-ignore\n      if (input.charCodeAt(peg$currPos) === 46) {\n// @ts-ignore\n        s2 = peg$c20;\n// @ts-ignore\n        peg$currPos++;\n// @ts-ignore\n      } else {\n// @ts-ignore\n        s2 = peg$FAILED;\n// @ts-ignore\n        if (peg$silentFails === 0) { peg$fail(peg$e25); }\n      }\n// @ts-ignore\n      if (s2 !== peg$FAILED) {\n// @ts-ignore\n        s3 = peg$parsevarname();\n// @ts-ignore\n        if (s3 !== peg$FAILED) {\n// @ts-ignore\n          s2 = [s2, s3];\n// @ts-ignore\n          s1 = s2;\n// @ts-ignore\n        } else {\n// @ts-ignore\n          peg$currPos = s1;\n// @ts-ignore\n          s1 = peg$FAILED;\n        }\n// @ts-ignore\n      } else {\n// @ts-ignore\n        peg$currPos = s1;\n// @ts-ignore\n        s1 = peg$FAILED;\n      }\n// @ts-ignore\n      if (s1 === peg$FAILED) {\n// @ts-ignore\n        s1 = peg$parsearray_expression();\n// @ts-ignore\n        if (s1 === peg$FAILED) {\n// @ts-ignore\n          s1 = peg$parsemodifier_expression();\n// @ts-ignore\n          if (s1 === peg$FAILED) {\n// @ts-ignore\n            s1 = peg$parseargs();\n          }\n        }\n      }\n    }\n\n// @ts-ignore\n    return s0;\n  }\n\n// @ts-ignore\n  function // @ts-ignore\npeg$parsearray_expression() {\n// @ts-ignore\n    var s0, s1, s2, s3;\n\n// @ts-ignore\n    s0 = peg$currPos;\n// @ts-ignore\n    if (input.charCodeAt(peg$currPos) === 91) {\n// @ts-ignore\n      s1 = peg$c21;\n// @ts-ignore\n      peg$currPos++;\n// @ts-ignore\n    } else {\n// @ts-ignore\n      s1 = peg$FAILED;\n// @ts-ignore\n      if (peg$silentFails === 0) { peg$fail(peg$e26); }\n    }\n// @ts-ignore\n    if (s1 !== peg$FAILED) {\n// @ts-ignore\n      s2 = peg$parseexpression();\n// @ts-ignore\n      if (s2 !== peg$FAILED) {\n// @ts-ignore\n        if (input.charCodeAt(peg$currPos) === 93) {\n// @ts-ignore\n          s3 = peg$c22;\n// @ts-ignore\n          peg$currPos++;\n// @ts-ignore\n        } else {\n// @ts-ignore\n          s3 = peg$FAILED;\n// @ts-ignore\n          if (peg$silentFails === 0) { peg$fail(peg$e27); }\n        }\n// @ts-ignore\n        if (s3 !== peg$FAILED) {\n// @ts-ignore\n          s1 = [s1, s2, s3];\n// @ts-ignore\n          s0 = s1;\n// @ts-ignore\n        } else {\n// @ts-ignore\n          peg$currPos = s0;\n// @ts-ignore\n          s0 = peg$FAILED;\n        }\n// @ts-ignore\n      } else {\n// @ts-ignore\n        peg$currPos = s0;\n// @ts-ignore\n        s0 = peg$FAILED;\n      }\n// @ts-ignore\n    } else {\n// @ts-ignore\n      peg$currPos = s0;\n// @ts-ignore\n      s0 = peg$FAILED;\n    }\n\n// @ts-ignore\n    return s0;\n  }\n\n// @ts-ignore\n  function // @ts-ignore\npeg$parsemodifier_expression() {\n// @ts-ignore\n    var s0, s1, s2, s3;\n\n// @ts-ignore\n    s0 = peg$currPos;\n// @ts-ignore\n    if (input.charCodeAt(peg$currPos) === 63) {\n// @ts-ignore\n      s1 = peg$c23;\n// @ts-ignore\n      peg$currPos++;\n// @ts-ignore\n    } else {\n// @ts-ignore\n      s1 = peg$FAILED;\n// @ts-ignore\n      if (peg$silentFails === 0) { peg$fail(peg$e28); }\n    }\n// @ts-ignore\n    if (s1 !== peg$FAILED) {\n// @ts-ignore\n      s2 = peg$parsemodifier();\n// @ts-ignore\n      if (s2 !== peg$FAILED) {\n// @ts-ignore\n        s3 = peg$parseargs();\n// @ts-ignore\n        if (s3 === peg$FAILED) {\n// @ts-ignore\n          s3 = null;\n        }\n// @ts-ignore\n        s1 = [s1, s2, s3];\n// @ts-ignore\n        s0 = s1;\n// @ts-ignore\n      } else {\n// @ts-ignore\n        peg$currPos = s0;\n// @ts-ignore\n        s0 = peg$FAILED;\n      }\n// @ts-ignore\n    } else {\n// @ts-ignore\n      peg$currPos = s0;\n// @ts-ignore\n      s0 = peg$FAILED;\n    }\n\n// @ts-ignore\n    return s0;\n  }\n\n// @ts-ignore\n  function // @ts-ignore\npeg$parsemodifier() {\n// @ts-ignore\n    var s0, s1;\n\n// @ts-ignore\n    peg$silentFails++;\n// @ts-ignore\n    s0 = peg$parsevarname();\n// @ts-ignore\n    peg$silentFails--;\n// @ts-ignore\n    if (s0 === peg$FAILED) {\n// @ts-ignore\n      s1 = peg$FAILED;\n// @ts-ignore\n      if (peg$silentFails === 0) { peg$fail(peg$e29); }\n    }\n\n// @ts-ignore\n    return s0;\n  }\n\n// @ts-ignore\n  function // @ts-ignore\npeg$parseargs() {\n// @ts-ignore\n    var s0, s1, s2, s3, s4, s5, s6;\n\n// @ts-ignore\n    s0 = peg$currPos;\n// @ts-ignore\n    if (input.charCodeAt(peg$currPos) === 40) {\n// @ts-ignore\n      s1 = peg$c18;\n// @ts-ignore\n      peg$currPos++;\n// @ts-ignore\n    } else {\n// @ts-ignore\n      s1 = peg$FAILED;\n// @ts-ignore\n      if (peg$silentFails === 0) { peg$fail(peg$e22); }\n    }\n// @ts-ignore\n    if (s1 !== peg$FAILED) {\n// @ts-ignore\n      s2 = peg$parsearg();\n// @ts-ignore\n      if (s2 === peg$FAILED) {\n// @ts-ignore\n        s2 = null;\n      }\n// @ts-ignore\n      s3 = [];\n// @ts-ignore\n      s4 = peg$currPos;\n// @ts-ignore\n      s5 = peg$parsecomma();\n// @ts-ignore\n      if (s5 !== peg$FAILED) {\n// @ts-ignore\n        s6 = peg$parsearg();\n// @ts-ignore\n        if (s6 !== peg$FAILED) {\n// @ts-ignore\n          s5 = [s5, s6];\n// @ts-ignore\n          s4 = s5;\n// @ts-ignore\n        } else {\n// @ts-ignore\n          peg$currPos = s4;\n// @ts-ignore\n          s4 = peg$FAILED;\n        }\n// @ts-ignore\n      } else {\n// @ts-ignore\n        peg$currPos = s4;\n// @ts-ignore\n        s4 = peg$FAILED;\n      }\n// @ts-ignore\n      while (s4 !== peg$FAILED) {\n// @ts-ignore\n        s3.push(s4);\n// @ts-ignore\n        s4 = peg$currPos;\n// @ts-ignore\n        s5 = peg$parsecomma();\n// @ts-ignore\n        if (s5 !== peg$FAILED) {\n// @ts-ignore\n          s6 = peg$parsearg();\n// @ts-ignore\n          if (s6 !== peg$FAILED) {\n// @ts-ignore\n            s5 = [s5, s6];\n// @ts-ignore\n            s4 = s5;\n// @ts-ignore\n          } else {\n// @ts-ignore\n            peg$currPos = s4;\n// @ts-ignore\n            s4 = peg$FAILED;\n          }\n// @ts-ignore\n        } else {\n// @ts-ignore\n          peg$currPos = s4;\n// @ts-ignore\n          s4 = peg$FAILED;\n        }\n      }\n// @ts-ignore\n      if (input.charCodeAt(peg$currPos) === 41) {\n// @ts-ignore\n        s4 = peg$c19;\n// @ts-ignore\n        peg$currPos++;\n// @ts-ignore\n      } else {\n// @ts-ignore\n        s4 = peg$FAILED;\n// @ts-ignore\n        if (peg$silentFails === 0) { peg$fail(peg$e23); }\n      }\n// @ts-ignore\n      if (s4 !== peg$FAILED) {\n// @ts-ignore\n        s1 = [s1, s2, s3, s4];\n// @ts-ignore\n        s0 = s1;\n// @ts-ignore\n      } else {\n// @ts-ignore\n        peg$currPos = s0;\n// @ts-ignore\n        s0 = peg$FAILED;\n      }\n// @ts-ignore\n    } else {\n// @ts-ignore\n      peg$currPos = s0;\n// @ts-ignore\n      s0 = peg$FAILED;\n    }\n\n// @ts-ignore\n    return s0;\n  }\n\n// @ts-ignore\n  function // @ts-ignore\npeg$parsearg() {\n// @ts-ignore\n    var s0, s1, s2, s3;\n\n// @ts-ignore\n    peg$silentFails++;\n// @ts-ignore\n    s0 = peg$currPos;\n// @ts-ignore\n    s1 = peg$parse_();\n// @ts-ignore\n    s2 = peg$parseexpression();\n// @ts-ignore\n    if (s2 !== peg$FAILED) {\n// @ts-ignore\n      s3 = peg$parse_();\n// @ts-ignore\n      s1 = [s1, s2, s3];\n// @ts-ignore\n      s0 = s1;\n// @ts-ignore\n    } else {\n// @ts-ignore\n      peg$currPos = s0;\n// @ts-ignore\n      s0 = peg$FAILED;\n    }\n// @ts-ignore\n    peg$silentFails--;\n// @ts-ignore\n    if (s0 === peg$FAILED) {\n// @ts-ignore\n      s1 = peg$FAILED;\n// @ts-ignore\n      if (peg$silentFails === 0) { peg$fail(peg$e20); }\n    }\n\n// @ts-ignore\n    return s0;\n  }\n\n// @ts-ignore\n  function // @ts-ignore\npeg$parsesafe_operator() {\n// @ts-ignore\n    var s0, s1;\n\n// @ts-ignore\n    peg$silentFails++;\n// @ts-ignore\n    if (input.charCodeAt(peg$currPos) === 60) {\n// @ts-ignore\n      s0 = peg$c24;\n// @ts-ignore\n      peg$currPos++;\n// @ts-ignore\n    } else {\n// @ts-ignore\n      s0 = peg$FAILED;\n// @ts-ignore\n      if (peg$silentFails === 0) { peg$fail(peg$e31); }\n    }\n// @ts-ignore\n    if (s0 === peg$FAILED) {\n// @ts-ignore\n      if (input.substr(peg$currPos, 2) === peg$c25) {\n// @ts-ignore\n        s0 = peg$c25;\n// @ts-ignore\n        peg$currPos += 2;\n// @ts-ignore\n      } else {\n// @ts-ignore\n        s0 = peg$FAILED;\n// @ts-ignore\n        if (peg$silentFails === 0) { peg$fail(peg$e32); }\n      }\n// @ts-ignore\n      if (s0 === peg$FAILED) {\n// @ts-ignore\n        if (input.substr(peg$currPos, 4) === peg$c26) {\n// @ts-ignore\n          s0 = peg$c26;\n// @ts-ignore\n          peg$currPos += 4;\n// @ts-ignore\n        } else {\n// @ts-ignore\n          s0 = peg$FAILED;\n// @ts-ignore\n          if (peg$silentFails === 0) { peg$fail(peg$e33); }\n        }\n// @ts-ignore\n        if (s0 === peg$FAILED) {\n// @ts-ignore\n          if (input.substr(peg$currPos, 3) === peg$c27) {\n// @ts-ignore\n            s0 = peg$c27;\n// @ts-ignore\n            peg$currPos += 3;\n// @ts-ignore\n          } else {\n// @ts-ignore\n            s0 = peg$FAILED;\n// @ts-ignore\n            if (peg$silentFails === 0) { peg$fail(peg$e34); }\n          }\n// @ts-ignore\n          if (s0 === peg$FAILED) {\n// @ts-ignore\n            if (input.substr(peg$currPos, 5) === peg$c28) {\n// @ts-ignore\n              s0 = peg$c28;\n// @ts-ignore\n              peg$currPos += 5;\n// @ts-ignore\n            } else {\n// @ts-ignore\n              s0 = peg$FAILED;\n// @ts-ignore\n              if (peg$silentFails === 0) { peg$fail(peg$e35); }\n            }\n// @ts-ignore\n            if (s0 === peg$FAILED) {\n// @ts-ignore\n              if (input.substr(peg$currPos, 2) === peg$c29) {\n// @ts-ignore\n                s0 = peg$c29;\n// @ts-ignore\n                peg$currPos += 2;\n// @ts-ignore\n              } else {\n// @ts-ignore\n                s0 = peg$FAILED;\n// @ts-ignore\n                if (peg$silentFails === 0) { peg$fail(peg$e36); }\n              }\n// @ts-ignore\n              if (s0 === peg$FAILED) {\n// @ts-ignore\n                if (input.substr(peg$currPos, 4) === peg$c30) {\n// @ts-ignore\n                  s0 = peg$c30;\n// @ts-ignore\n                  peg$currPos += 4;\n// @ts-ignore\n                } else {\n// @ts-ignore\n                  s0 = peg$FAILED;\n// @ts-ignore\n                  if (peg$silentFails === 0) { peg$fail(peg$e37); }\n                }\n// @ts-ignore\n                if (s0 === peg$FAILED) {\n// @ts-ignore\n                  if (input.substr(peg$currPos, 3) === peg$c31) {\n// @ts-ignore\n                    s0 = peg$c31;\n// @ts-ignore\n                    peg$currPos += 3;\n// @ts-ignore\n                  } else {\n// @ts-ignore\n                    s0 = peg$FAILED;\n// @ts-ignore\n                    if (peg$silentFails === 0) { peg$fail(peg$e38); }\n                  }\n// @ts-ignore\n                  if (s0 === peg$FAILED) {\n// @ts-ignore\n                    if (input.substr(peg$currPos, 5) === peg$c32) {\n// @ts-ignore\n                      s0 = peg$c32;\n// @ts-ignore\n                      peg$currPos += 5;\n// @ts-ignore\n                    } else {\n// @ts-ignore\n                      s0 = peg$FAILED;\n// @ts-ignore\n                      if (peg$silentFails === 0) { peg$fail(peg$e39); }\n                    }\n// @ts-ignore\n                    if (s0 === peg$FAILED) {\n// @ts-ignore\n                      if (input.charCodeAt(peg$currPos) === 61) {\n// @ts-ignore\n                        s0 = peg$c16;\n// @ts-ignore\n                        peg$currPos++;\n// @ts-ignore\n                      } else {\n// @ts-ignore\n                        s0 = peg$FAILED;\n// @ts-ignore\n                        if (peg$silentFails === 0) { peg$fail(peg$e19); }\n                      }\n// @ts-ignore\n                      if (s0 === peg$FAILED) {\n// @ts-ignore\n                        if (input.substr(peg$currPos, 2) === peg$c33) {\n// @ts-ignore\n                          s0 = peg$c33;\n// @ts-ignore\n                          peg$currPos += 2;\n// @ts-ignore\n                        } else {\n// @ts-ignore\n                          s0 = peg$FAILED;\n// @ts-ignore\n                          if (peg$silentFails === 0) { peg$fail(peg$e40); }\n                        }\n// @ts-ignore\n                        if (s0 === peg$FAILED) {\n// @ts-ignore\n                          if (input.substr(peg$currPos, 2) === peg$c34) {\n// @ts-ignore\n                            s0 = peg$c34;\n// @ts-ignore\n                            peg$currPos += 2;\n// @ts-ignore\n                          } else {\n// @ts-ignore\n                            s0 = peg$FAILED;\n// @ts-ignore\n                            if (peg$silentFails === 0) { peg$fail(peg$e41); }\n                          }\n// @ts-ignore\n                          if (s0 === peg$FAILED) {\n// @ts-ignore\n                            if (input.substr(peg$currPos, 2) === peg$c35) {\n// @ts-ignore\n                              s0 = peg$c35;\n// @ts-ignore\n                              peg$currPos += 2;\n// @ts-ignore\n                            } else {\n// @ts-ignore\n                              s0 = peg$FAILED;\n// @ts-ignore\n                              if (peg$silentFails === 0) { peg$fail(peg$e42); }\n                            }\n// @ts-ignore\n                            if (s0 === peg$FAILED) {\n// @ts-ignore\n                              if (input.charCodeAt(peg$currPos) === 43) {\n// @ts-ignore\n                                s0 = peg$c36;\n// @ts-ignore\n                                peg$currPos++;\n// @ts-ignore\n                              } else {\n// @ts-ignore\n                                s0 = peg$FAILED;\n// @ts-ignore\n                                if (peg$silentFails === 0) { peg$fail(peg$e43); }\n                              }\n// @ts-ignore\n                              if (s0 === peg$FAILED) {\n// @ts-ignore\n                                if (input.charCodeAt(peg$currPos) === 45) {\n// @ts-ignore\n                                  s0 = peg$c37;\n// @ts-ignore\n                                  peg$currPos++;\n// @ts-ignore\n                                } else {\n// @ts-ignore\n                                  s0 = peg$FAILED;\n// @ts-ignore\n                                  if (peg$silentFails === 0) { peg$fail(peg$e44); }\n                                }\n// @ts-ignore\n                                if (s0 === peg$FAILED) {\n// @ts-ignore\n                                  if (input.charCodeAt(peg$currPos) === 47) {\n// @ts-ignore\n                                    s0 = peg$c38;\n// @ts-ignore\n                                    peg$currPos++;\n// @ts-ignore\n                                  } else {\n// @ts-ignore\n                                    s0 = peg$FAILED;\n// @ts-ignore\n                                    if (peg$silentFails === 0) { peg$fail(peg$e45); }\n                                  }\n// @ts-ignore\n                                  if (s0 === peg$FAILED) {\n// @ts-ignore\n                                    if (input.charCodeAt(peg$currPos) === 42) {\n// @ts-ignore\n                                      s0 = peg$c39;\n// @ts-ignore\n                                      peg$currPos++;\n// @ts-ignore\n                                    } else {\n// @ts-ignore\n                                      s0 = peg$FAILED;\n// @ts-ignore\n                                      if (peg$silentFails === 0) { peg$fail(peg$e46); }\n                                    }\n// @ts-ignore\n                                    if (s0 === peg$FAILED) {\n// @ts-ignore\n                                      if (input.substr(peg$currPos, 2) === peg$c40) {\n// @ts-ignore\n                                        s0 = peg$c40;\n// @ts-ignore\n                                        peg$currPos += 2;\n// @ts-ignore\n                                      } else {\n// @ts-ignore\n                                        s0 = peg$FAILED;\n// @ts-ignore\n                                        if (peg$silentFails === 0) { peg$fail(peg$e47); }\n                                      }\n// @ts-ignore\n                                      if (s0 === peg$FAILED) {\n// @ts-ignore\n                                        if (input.substr(peg$currPos, 2) === peg$c41) {\n// @ts-ignore\n                                          s0 = peg$c41;\n// @ts-ignore\n                                          peg$currPos += 2;\n// @ts-ignore\n                                        } else {\n// @ts-ignore\n                                          s0 = peg$FAILED;\n// @ts-ignore\n                                          if (peg$silentFails === 0) { peg$fail(peg$e48); }\n                                        }\n                                      }\n                                    }\n                                  }\n                                }\n                              }\n                            }\n                          }\n                        }\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n// @ts-ignore\n    peg$silentFails--;\n// @ts-ignore\n    if (s0 === peg$FAILED) {\n// @ts-ignore\n      s1 = peg$FAILED;\n// @ts-ignore\n      if (peg$silentFails === 0) { peg$fail(peg$e30); }\n    }\n\n// @ts-ignore\n    return s0;\n  }\n\n// @ts-ignore\n  function // @ts-ignore\npeg$parseunsafe_operator() {\n// @ts-ignore\n    var s0, s1;\n\n// @ts-ignore\n    peg$silentFails++;\n// @ts-ignore\n    s0 = peg$parsesafe_operator();\n// @ts-ignore\n    if (s0 === peg$FAILED) {\n// @ts-ignore\n      if (input.charCodeAt(peg$currPos) === 62) {\n// @ts-ignore\n        s0 = peg$c5;\n// @ts-ignore\n        peg$currPos++;\n// @ts-ignore\n      } else {\n// @ts-ignore\n        s0 = peg$FAILED;\n// @ts-ignore\n        if (peg$silentFails === 0) { peg$fail(peg$e8); }\n      }\n// @ts-ignore\n      if (s0 === peg$FAILED) {\n// @ts-ignore\n        if (input.substr(peg$currPos, 2) === peg$c42) {\n// @ts-ignore\n          s0 = peg$c42;\n// @ts-ignore\n          peg$currPos += 2;\n// @ts-ignore\n        } else {\n// @ts-ignore\n          s0 = peg$FAILED;\n// @ts-ignore\n          if (peg$silentFails === 0) { peg$fail(peg$e49); }\n        }\n      }\n    }\n// @ts-ignore\n    peg$silentFails--;\n// @ts-ignore\n    if (s0 === peg$FAILED) {\n// @ts-ignore\n      s1 = peg$FAILED;\n// @ts-ignore\n      if (peg$silentFails === 0) { peg$fail(peg$e30); }\n    }\n\n// @ts-ignore\n    return s0;\n  }\n\n// @ts-ignore\n  function // @ts-ignore\npeg$parsenumber() {\n// @ts-ignore\n    var s0, s1, s2, s3, s4, s5, s6;\n\n// @ts-ignore\n    peg$silentFails++;\n// @ts-ignore\n    s0 = peg$currPos;\n// @ts-ignore\n    if (input.charCodeAt(peg$currPos) === 45) {\n// @ts-ignore\n      s1 = peg$c37;\n// @ts-ignore\n      peg$currPos++;\n// @ts-ignore\n    } else {\n// @ts-ignore\n      s1 = peg$FAILED;\n// @ts-ignore\n      if (peg$silentFails === 0) { peg$fail(peg$e44); }\n    }\n// @ts-ignore\n    if (s1 === peg$FAILED) {\n// @ts-ignore\n      s1 = null;\n    }\n// @ts-ignore\n    s2 = [];\n// @ts-ignore\n    if (peg$r0.test(input.charAt(peg$currPos))) {\n// @ts-ignore\n      s3 = input.charAt(peg$currPos);\n// @ts-ignore\n      peg$currPos++;\n// @ts-ignore\n    } else {\n// @ts-ignore\n      s3 = peg$FAILED;\n// @ts-ignore\n      if (peg$silentFails === 0) { peg$fail(peg$e51); }\n    }\n// @ts-ignore\n    if (s3 !== peg$FAILED) {\n// @ts-ignore\n      while (s3 !== peg$FAILED) {\n// @ts-ignore\n        s2.push(s3);\n// @ts-ignore\n        if (peg$r0.test(input.charAt(peg$currPos))) {\n// @ts-ignore\n          s3 = input.charAt(peg$currPos);\n// @ts-ignore\n          peg$currPos++;\n// @ts-ignore\n        } else {\n// @ts-ignore\n          s3 = peg$FAILED;\n// @ts-ignore\n          if (peg$silentFails === 0) { peg$fail(peg$e51); }\n        }\n      }\n// @ts-ignore\n    } else {\n// @ts-ignore\n      s2 = peg$FAILED;\n    }\n// @ts-ignore\n    if (s2 !== peg$FAILED) {\n// @ts-ignore\n      s3 = peg$currPos;\n// @ts-ignore\n      if (input.charCodeAt(peg$currPos) === 46) {\n// @ts-ignore\n        s4 = peg$c20;\n// @ts-ignore\n        peg$currPos++;\n// @ts-ignore\n      } else {\n// @ts-ignore\n        s4 = peg$FAILED;\n// @ts-ignore\n        if (peg$silentFails === 0) { peg$fail(peg$e25); }\n      }\n// @ts-ignore\n      if (s4 !== peg$FAILED) {\n// @ts-ignore\n        s5 = [];\n// @ts-ignore\n        if (peg$r0.test(input.charAt(peg$currPos))) {\n// @ts-ignore\n          s6 = input.charAt(peg$currPos);\n// @ts-ignore\n          peg$currPos++;\n// @ts-ignore\n        } else {\n// @ts-ignore\n          s6 = peg$FAILED;\n// @ts-ignore\n          if (peg$silentFails === 0) { peg$fail(peg$e51); }\n        }\n// @ts-ignore\n        if (s6 !== peg$FAILED) {\n// @ts-ignore\n          while (s6 !== peg$FAILED) {\n// @ts-ignore\n            s5.push(s6);\n// @ts-ignore\n            if (peg$r0.test(input.charAt(peg$currPos))) {\n// @ts-ignore\n              s6 = input.charAt(peg$currPos);\n// @ts-ignore\n              peg$currPos++;\n// @ts-ignore\n            } else {\n// @ts-ignore\n              s6 = peg$FAILED;\n// @ts-ignore\n              if (peg$silentFails === 0) { peg$fail(peg$e51); }\n            }\n          }\n// @ts-ignore\n        } else {\n// @ts-ignore\n          s5 = peg$FAILED;\n        }\n// @ts-ignore\n        if (s5 !== peg$FAILED) {\n// @ts-ignore\n          peg$savedPos = s3;\n// @ts-ignore\n          s3 = peg$f13(s1, s2, s4, s5);\n// @ts-ignore\n        } else {\n// @ts-ignore\n          peg$currPos = s3;\n// @ts-ignore\n          s3 = peg$FAILED;\n        }\n// @ts-ignore\n      } else {\n// @ts-ignore\n        peg$currPos = s3;\n// @ts-ignore\n        s3 = peg$FAILED;\n      }\n// @ts-ignore\n      if (s3 === peg$FAILED) {\n// @ts-ignore\n        s3 = null;\n      }\n// @ts-ignore\n      peg$savedPos = s0;\n// @ts-ignore\n      s0 = peg$f14(s1, s2, s3);\n// @ts-ignore\n    } else {\n// @ts-ignore\n      peg$currPos = s0;\n// @ts-ignore\n      s0 = peg$FAILED;\n    }\n// @ts-ignore\n    peg$silentFails--;\n// @ts-ignore\n    if (s0 === peg$FAILED) {\n// @ts-ignore\n      s1 = peg$FAILED;\n// @ts-ignore\n      if (peg$silentFails === 0) { peg$fail(peg$e50); }\n    }\n\n// @ts-ignore\n    return s0;\n  }\n\n// @ts-ignore\n  function // @ts-ignore\npeg$parseencapsulated_string() {\n// @ts-ignore\n    var s0, s1, s2, s3, s4, s5, s6, s7;\n\n// @ts-ignore\n    s0 = peg$currPos;\n// @ts-ignore\n    s1 = peg$currPos;\n// @ts-ignore\n    peg$silentFails++;\n// @ts-ignore\n    if (input.charCodeAt(peg$currPos) === 34) {\n// @ts-ignore\n      s2 = peg$c43;\n// @ts-ignore\n      peg$currPos++;\n// @ts-ignore\n    } else {\n// @ts-ignore\n      s2 = peg$FAILED;\n// @ts-ignore\n      if (peg$silentFails === 0) { peg$fail(peg$e52); }\n    }\n// @ts-ignore\n    if (s2 === peg$FAILED) {\n// @ts-ignore\n      if (input.charCodeAt(peg$currPos) === 39) {\n// @ts-ignore\n        s2 = peg$c44;\n// @ts-ignore\n        peg$currPos++;\n// @ts-ignore\n      } else {\n// @ts-ignore\n        s2 = peg$FAILED;\n// @ts-ignore\n        if (peg$silentFails === 0) { peg$fail(peg$e53); }\n      }\n    }\n// @ts-ignore\n    peg$silentFails--;\n// @ts-ignore\n    if (s2 !== peg$FAILED) {\n// @ts-ignore\n      peg$currPos = s1;\n// @ts-ignore\n      s1 = undefined;\n// @ts-ignore\n    } else {\n// @ts-ignore\n      s1 = peg$FAILED;\n    }\n// @ts-ignore\n    if (s1 !== peg$FAILED) {\n// @ts-ignore\n      s2 = peg$currPos;\n// @ts-ignore\n      if (input.charCodeAt(peg$currPos) === 34) {\n// @ts-ignore\n        s3 = peg$c43;\n// @ts-ignore\n        peg$currPos++;\n// @ts-ignore\n      } else {\n// @ts-ignore\n        s3 = peg$FAILED;\n// @ts-ignore\n        if (peg$silentFails === 0) { peg$fail(peg$e52); }\n      }\n// @ts-ignore\n      if (s3 !== peg$FAILED) {\n// @ts-ignore\n        s4 = [];\n// @ts-ignore\n        s5 = peg$currPos;\n// @ts-ignore\n        s6 = peg$currPos;\n// @ts-ignore\n        peg$silentFails++;\n// @ts-ignore\n        if (input.charCodeAt(peg$currPos) === 34) {\n// @ts-ignore\n          s7 = peg$c43;\n// @ts-ignore\n          peg$currPos++;\n// @ts-ignore\n        } else {\n// @ts-ignore\n          s7 = peg$FAILED;\n// @ts-ignore\n          if (peg$silentFails === 0) { peg$fail(peg$e52); }\n        }\n// @ts-ignore\n        peg$silentFails--;\n// @ts-ignore\n        if (s7 === peg$FAILED) {\n// @ts-ignore\n          s6 = undefined;\n// @ts-ignore\n        } else {\n// @ts-ignore\n          peg$currPos = s6;\n// @ts-ignore\n          s6 = peg$FAILED;\n        }\n// @ts-ignore\n        if (s6 !== peg$FAILED) {\n// @ts-ignore\n          if (input.length > peg$currPos) {\n// @ts-ignore\n            s7 = input.charAt(peg$currPos);\n// @ts-ignore\n            peg$currPos++;\n// @ts-ignore\n          } else {\n// @ts-ignore\n            s7 = peg$FAILED;\n// @ts-ignore\n            if (peg$silentFails === 0) { peg$fail(peg$e5); }\n          }\n// @ts-ignore\n          if (s7 !== peg$FAILED) {\n// @ts-ignore\n            s6 = [s6, s7];\n// @ts-ignore\n            s5 = s6;\n// @ts-ignore\n          } else {\n// @ts-ignore\n            peg$currPos = s5;\n// @ts-ignore\n            s5 = peg$FAILED;\n          }\n// @ts-ignore\n        } else {\n// @ts-ignore\n          peg$currPos = s5;\n// @ts-ignore\n          s5 = peg$FAILED;\n        }\n// @ts-ignore\n        while (s5 !== peg$FAILED) {\n// @ts-ignore\n          s4.push(s5);\n// @ts-ignore\n          s5 = peg$currPos;\n// @ts-ignore\n          s6 = peg$currPos;\n// @ts-ignore\n          peg$silentFails++;\n// @ts-ignore\n          if (input.charCodeAt(peg$currPos) === 34) {\n// @ts-ignore\n            s7 = peg$c43;\n// @ts-ignore\n            peg$currPos++;\n// @ts-ignore\n          } else {\n// @ts-ignore\n            s7 = peg$FAILED;\n// @ts-ignore\n            if (peg$silentFails === 0) { peg$fail(peg$e52); }\n          }\n// @ts-ignore\n          peg$silentFails--;\n// @ts-ignore\n          if (s7 === peg$FAILED) {\n// @ts-ignore\n            s6 = undefined;\n// @ts-ignore\n          } else {\n// @ts-ignore\n            peg$currPos = s6;\n// @ts-ignore\n            s6 = peg$FAILED;\n          }\n// @ts-ignore\n          if (s6 !== peg$FAILED) {\n// @ts-ignore\n            if (input.length > peg$currPos) {\n// @ts-ignore\n              s7 = input.charAt(peg$currPos);\n// @ts-ignore\n              peg$currPos++;\n// @ts-ignore\n            } else {\n// @ts-ignore\n              s7 = peg$FAILED;\n// @ts-ignore\n              if (peg$silentFails === 0) { peg$fail(peg$e5); }\n            }\n// @ts-ignore\n            if (s7 !== peg$FAILED) {\n// @ts-ignore\n              s6 = [s6, s7];\n// @ts-ignore\n              s5 = s6;\n// @ts-ignore\n            } else {\n// @ts-ignore\n              peg$currPos = s5;\n// @ts-ignore\n              s5 = peg$FAILED;\n            }\n// @ts-ignore\n          } else {\n// @ts-ignore\n            peg$currPos = s5;\n// @ts-ignore\n            s5 = peg$FAILED;\n          }\n        }\n// @ts-ignore\n        if (input.charCodeAt(peg$currPos) === 34) {\n// @ts-ignore\n          s5 = peg$c43;\n// @ts-ignore\n          peg$currPos++;\n// @ts-ignore\n        } else {\n// @ts-ignore\n          s5 = peg$FAILED;\n// @ts-ignore\n          if (peg$silentFails === 0) { peg$fail(peg$e52); }\n        }\n// @ts-ignore\n        if (s5 !== peg$FAILED) {\n// @ts-ignore\n          s3 = [s3, s4, s5];\n// @ts-ignore\n          s2 = s3;\n// @ts-ignore\n        } else {\n// @ts-ignore\n          peg$currPos = s2;\n// @ts-ignore\n          s2 = peg$FAILED;\n        }\n// @ts-ignore\n      } else {\n// @ts-ignore\n        peg$currPos = s2;\n// @ts-ignore\n        s2 = peg$FAILED;\n      }\n// @ts-ignore\n      if (s2 === peg$FAILED) {\n// @ts-ignore\n        s2 = peg$currPos;\n// @ts-ignore\n        if (input.charCodeAt(peg$currPos) === 39) {\n// @ts-ignore\n          s3 = peg$c44;\n// @ts-ignore\n          peg$currPos++;\n// @ts-ignore\n        } else {\n// @ts-ignore\n          s3 = peg$FAILED;\n// @ts-ignore\n          if (peg$silentFails === 0) { peg$fail(peg$e53); }\n        }\n// @ts-ignore\n        if (s3 !== peg$FAILED) {\n// @ts-ignore\n          s4 = [];\n// @ts-ignore\n          s5 = peg$currPos;\n// @ts-ignore\n          s6 = peg$currPos;\n// @ts-ignore\n          peg$silentFails++;\n// @ts-ignore\n          if (input.charCodeAt(peg$currPos) === 39) {\n// @ts-ignore\n            s7 = peg$c44;\n// @ts-ignore\n            peg$currPos++;\n// @ts-ignore\n          } else {\n// @ts-ignore\n            s7 = peg$FAILED;\n// @ts-ignore\n            if (peg$silentFails === 0) { peg$fail(peg$e53); }\n          }\n// @ts-ignore\n          peg$silentFails--;\n// @ts-ignore\n          if (s7 === peg$FAILED) {\n// @ts-ignore\n            s6 = undefined;\n// @ts-ignore\n          } else {\n// @ts-ignore\n            peg$currPos = s6;\n// @ts-ignore\n            s6 = peg$FAILED;\n          }\n// @ts-ignore\n          if (s6 !== peg$FAILED) {\n// @ts-ignore\n            if (input.length > peg$currPos) {\n// @ts-ignore\n              s7 = input.charAt(peg$currPos);\n// @ts-ignore\n              peg$currPos++;\n// @ts-ignore\n            } else {\n// @ts-ignore\n              s7 = peg$FAILED;\n// @ts-ignore\n              if (peg$silentFails === 0) { peg$fail(peg$e5); }\n            }\n// @ts-ignore\n            if (s7 !== peg$FAILED) {\n// @ts-ignore\n              s6 = [s6, s7];\n// @ts-ignore\n              s5 = s6;\n// @ts-ignore\n            } else {\n// @ts-ignore\n              peg$currPos = s5;\n// @ts-ignore\n              s5 = peg$FAILED;\n            }\n// @ts-ignore\n          } else {\n// @ts-ignore\n            peg$currPos = s5;\n// @ts-ignore\n            s5 = peg$FAILED;\n          }\n// @ts-ignore\n          while (s5 !== peg$FAILED) {\n// @ts-ignore\n            s4.push(s5);\n// @ts-ignore\n            s5 = peg$currPos;\n// @ts-ignore\n            s6 = peg$currPos;\n// @ts-ignore\n            peg$silentFails++;\n// @ts-ignore\n            if (input.charCodeAt(peg$currPos) === 39) {\n// @ts-ignore\n              s7 = peg$c44;\n// @ts-ignore\n              peg$currPos++;\n// @ts-ignore\n            } else {\n// @ts-ignore\n              s7 = peg$FAILED;\n// @ts-ignore\n              if (peg$silentFails === 0) { peg$fail(peg$e53); }\n            }\n// @ts-ignore\n            peg$silentFails--;\n// @ts-ignore\n            if (s7 === peg$FAILED) {\n// @ts-ignore\n              s6 = undefined;\n// @ts-ignore\n            } else {\n// @ts-ignore\n              peg$currPos = s6;\n// @ts-ignore\n              s6 = peg$FAILED;\n            }\n// @ts-ignore\n            if (s6 !== peg$FAILED) {\n// @ts-ignore\n              if (input.length > peg$currPos) {\n// @ts-ignore\n                s7 = input.charAt(peg$currPos);\n// @ts-ignore\n                peg$currPos++;\n// @ts-ignore\n              } else {\n// @ts-ignore\n                s7 = peg$FAILED;\n// @ts-ignore\n                if (peg$silentFails === 0) { peg$fail(peg$e5); }\n              }\n// @ts-ignore\n              if (s7 !== peg$FAILED) {\n// @ts-ignore\n                s6 = [s6, s7];\n// @ts-ignore\n                s5 = s6;\n// @ts-ignore\n              } else {\n// @ts-ignore\n                peg$currPos = s5;\n// @ts-ignore\n                s5 = peg$FAILED;\n              }\n// @ts-ignore\n            } else {\n// @ts-ignore\n              peg$currPos = s5;\n// @ts-ignore\n              s5 = peg$FAILED;\n            }\n          }\n// @ts-ignore\n          if (input.charCodeAt(peg$currPos) === 39) {\n// @ts-ignore\n            s5 = peg$c44;\n// @ts-ignore\n            peg$currPos++;\n// @ts-ignore\n          } else {\n// @ts-ignore\n            s5 = peg$FAILED;\n// @ts-ignore\n            if (peg$silentFails === 0) { peg$fail(peg$e53); }\n          }\n// @ts-ignore\n          if (s5 !== peg$FAILED) {\n// @ts-ignore\n            s3 = [s3, s4, s5];\n// @ts-ignore\n            s2 = s3;\n// @ts-ignore\n          } else {\n// @ts-ignore\n            peg$currPos = s2;\n// @ts-ignore\n            s2 = peg$FAILED;\n          }\n// @ts-ignore\n        } else {\n// @ts-ignore\n          peg$currPos = s2;\n// @ts-ignore\n          s2 = peg$FAILED;\n        }\n      }\n// @ts-ignore\n      if (s2 !== peg$FAILED) {\n// @ts-ignore\n        peg$savedPos = s0;\n// @ts-ignore\n        s0 = peg$f15(s2);\n// @ts-ignore\n      } else {\n// @ts-ignore\n        peg$currPos = s0;\n// @ts-ignore\n        s0 = peg$FAILED;\n      }\n// @ts-ignore\n    } else {\n// @ts-ignore\n      peg$currPos = s0;\n// @ts-ignore\n      s0 = peg$FAILED;\n    }\n\n// @ts-ignore\n    return s0;\n  }\n\n// @ts-ignore\n  function // @ts-ignore\npeg$parsevarname() {\n// @ts-ignore\n    var s0, s1, s2;\n\n// @ts-ignore\n    s0 = peg$currPos;\n// @ts-ignore\n    s1 = [];\n// @ts-ignore\n    if (peg$r1.test(input.charAt(peg$currPos))) {\n// @ts-ignore\n      s2 = input.charAt(peg$currPos);\n// @ts-ignore\n      peg$currPos++;\n// @ts-ignore\n    } else {\n// @ts-ignore\n      s2 = peg$FAILED;\n// @ts-ignore\n      if (peg$silentFails === 0) { peg$fail(peg$e54); }\n    }\n// @ts-ignore\n    if (s2 !== peg$FAILED) {\n// @ts-ignore\n      while (s2 !== peg$FAILED) {\n// @ts-ignore\n        s1.push(s2);\n// @ts-ignore\n        if (peg$r1.test(input.charAt(peg$currPos))) {\n// @ts-ignore\n          s2 = input.charAt(peg$currPos);\n// @ts-ignore\n          peg$currPos++;\n// @ts-ignore\n        } else {\n// @ts-ignore\n          s2 = peg$FAILED;\n// @ts-ignore\n          if (peg$silentFails === 0) { peg$fail(peg$e54); }\n        }\n      }\n// @ts-ignore\n    } else {\n// @ts-ignore\n      s1 = peg$FAILED;\n    }\n// @ts-ignore\n    if (s1 !== peg$FAILED) {\n// @ts-ignore\n      peg$savedPos = s0;\n// @ts-ignore\n      s1 = peg$f16(s1);\n    }\n// @ts-ignore\n    s0 = s1;\n\n// @ts-ignore\n    return s0;\n  }\n\n// @ts-ignore\n  function // @ts-ignore\npeg$parsehtml_entity() {\n// @ts-ignore\n    var s0, s1, s2, s3;\n\n// @ts-ignore\n    s0 = peg$currPos;\n// @ts-ignore\n    if (input.charCodeAt(peg$currPos) === 38) {\n// @ts-ignore\n      s1 = peg$c45;\n// @ts-ignore\n      peg$currPos++;\n// @ts-ignore\n    } else {\n// @ts-ignore\n      s1 = peg$FAILED;\n// @ts-ignore\n      if (peg$silentFails === 0) { peg$fail(peg$e55); }\n    }\n// @ts-ignore\n    if (s1 !== peg$FAILED) {\n// @ts-ignore\n      s2 = [];\n// @ts-ignore\n      if (peg$r1.test(input.charAt(peg$currPos))) {\n// @ts-ignore\n        s3 = input.charAt(peg$currPos);\n// @ts-ignore\n        peg$currPos++;\n// @ts-ignore\n      } else {\n// @ts-ignore\n        s3 = peg$FAILED;\n// @ts-ignore\n        if (peg$silentFails === 0) { peg$fail(peg$e54); }\n      }\n// @ts-ignore\n      if (s3 !== peg$FAILED) {\n// @ts-ignore\n        while (s3 !== peg$FAILED) {\n// @ts-ignore\n          s2.push(s3);\n// @ts-ignore\n          if (peg$r1.test(input.charAt(peg$currPos))) {\n// @ts-ignore\n            s3 = input.charAt(peg$currPos);\n// @ts-ignore\n            peg$currPos++;\n// @ts-ignore\n          } else {\n// @ts-ignore\n            s3 = peg$FAILED;\n// @ts-ignore\n            if (peg$silentFails === 0) { peg$fail(peg$e54); }\n          }\n        }\n// @ts-ignore\n      } else {\n// @ts-ignore\n        s2 = peg$FAILED;\n      }\n// @ts-ignore\n      if (s2 !== peg$FAILED) {\n// @ts-ignore\n        if (input.charCodeAt(peg$currPos) === 59) {\n// @ts-ignore\n          s3 = peg$c46;\n// @ts-ignore\n          peg$currPos++;\n// @ts-ignore\n        } else {\n// @ts-ignore\n          s3 = peg$FAILED;\n// @ts-ignore\n          if (peg$silentFails === 0) { peg$fail(peg$e56); }\n        }\n// @ts-ignore\n        if (s3 !== peg$FAILED) {\n// @ts-ignore\n          peg$savedPos = s0;\n// @ts-ignore\n          s0 = peg$f17(s1, s2, s3);\n// @ts-ignore\n        } else {\n// @ts-ignore\n          peg$currPos = s0;\n// @ts-ignore\n          s0 = peg$FAILED;\n        }\n// @ts-ignore\n      } else {\n// @ts-ignore\n        peg$currPos = s0;\n// @ts-ignore\n        s0 = peg$FAILED;\n      }\n// @ts-ignore\n    } else {\n// @ts-ignore\n      peg$currPos = s0;\n// @ts-ignore\n      s0 = peg$FAILED;\n    }\n\n// @ts-ignore\n    return s0;\n  }\n\n// @ts-ignore\n  function // @ts-ignore\npeg$parsecomma() {\n// @ts-ignore\n    var s0, s1, s2, s3;\n\n// @ts-ignore\n    peg$silentFails++;\n// @ts-ignore\n    s0 = peg$currPos;\n// @ts-ignore\n    s1 = peg$parse_();\n// @ts-ignore\n    if (input.charCodeAt(peg$currPos) === 44) {\n// @ts-ignore\n      s2 = peg$c47;\n// @ts-ignore\n      peg$currPos++;\n// @ts-ignore\n    } else {\n// @ts-ignore\n      s2 = peg$FAILED;\n// @ts-ignore\n      if (peg$silentFails === 0) { peg$fail(peg$e58); }\n    }\n// @ts-ignore\n    if (s2 !== peg$FAILED) {\n// @ts-ignore\n      s3 = peg$parse_();\n// @ts-ignore\n      s1 = [s1, s2, s3];\n// @ts-ignore\n      s0 = s1;\n// @ts-ignore\n    } else {\n// @ts-ignore\n      peg$currPos = s0;\n// @ts-ignore\n      s0 = peg$FAILED;\n    }\n// @ts-ignore\n    peg$silentFails--;\n// @ts-ignore\n    if (s0 === peg$FAILED) {\n// @ts-ignore\n      s1 = peg$FAILED;\n// @ts-ignore\n      if (peg$silentFails === 0) { peg$fail(peg$e57); }\n    }\n\n// @ts-ignore\n    return s0;\n  }\n\n// @ts-ignore\n  function // @ts-ignore\npeg$parserequired_whitespace() {\n// @ts-ignore\n    var s0, s1, s2;\n\n// @ts-ignore\n    peg$silentFails++;\n// @ts-ignore\n    s0 = peg$currPos;\n// @ts-ignore\n    s1 = [];\n// @ts-ignore\n    if (peg$r2.test(input.charAt(peg$currPos))) {\n// @ts-ignore\n      s2 = input.charAt(peg$currPos);\n// @ts-ignore\n      peg$currPos++;\n// @ts-ignore\n    } else {\n// @ts-ignore\n      s2 = peg$FAILED;\n// @ts-ignore\n      if (peg$silentFails === 0) { peg$fail(peg$e60); }\n    }\n// @ts-ignore\n    if (s2 !== peg$FAILED) {\n// @ts-ignore\n      while (s2 !== peg$FAILED) {\n// @ts-ignore\n        s1.push(s2);\n// @ts-ignore\n        if (peg$r2.test(input.charAt(peg$currPos))) {\n// @ts-ignore\n          s2 = input.charAt(peg$currPos);\n// @ts-ignore\n          peg$currPos++;\n// @ts-ignore\n        } else {\n// @ts-ignore\n          s2 = peg$FAILED;\n// @ts-ignore\n          if (peg$silentFails === 0) { peg$fail(peg$e60); }\n        }\n      }\n// @ts-ignore\n    } else {\n// @ts-ignore\n      s1 = peg$FAILED;\n    }\n// @ts-ignore\n    if (s1 !== peg$FAILED) {\n// @ts-ignore\n      peg$savedPos = s0;\n// @ts-ignore\n      s1 = peg$f18(s1);\n    }\n// @ts-ignore\n    s0 = s1;\n// @ts-ignore\n    peg$silentFails--;\n// @ts-ignore\n    if (s0 === peg$FAILED) {\n// @ts-ignore\n      s1 = peg$FAILED;\n// @ts-ignore\n      if (peg$silentFails === 0) { peg$fail(peg$e59); }\n    }\n\n// @ts-ignore\n    return s0;\n  }\n\n// @ts-ignore\n  function // @ts-ignore\npeg$parse_() {\n// @ts-ignore\n    var s0, s1, s2;\n\n// @ts-ignore\n    peg$silentFails++;\n// @ts-ignore\n    s0 = peg$currPos;\n// @ts-ignore\n    s1 = [];\n// @ts-ignore\n    if (peg$r2.test(input.charAt(peg$currPos))) {\n// @ts-ignore\n      s2 = input.charAt(peg$currPos);\n// @ts-ignore\n      peg$currPos++;\n// @ts-ignore\n    } else {\n// @ts-ignore\n      s2 = peg$FAILED;\n// @ts-ignore\n      if (peg$silentFails === 0) { peg$fail(peg$e60); }\n    }\n// @ts-ignore\n    while (s2 !== peg$FAILED) {\n// @ts-ignore\n      s1.push(s2);\n// @ts-ignore\n      if (peg$r2.test(input.charAt(peg$currPos))) {\n// @ts-ignore\n        s2 = input.charAt(peg$currPos);\n// @ts-ignore\n        peg$currPos++;\n// @ts-ignore\n      } else {\n// @ts-ignore\n        s2 = peg$FAILED;\n// @ts-ignore\n        if (peg$silentFails === 0) { peg$fail(peg$e60); }\n      }\n    }\n// @ts-ignore\n    peg$savedPos = s0;\n// @ts-ignore\n    s1 = peg$f19(s1);\n// @ts-ignore\n    s0 = s1;\n// @ts-ignore\n    peg$silentFails--;\n// @ts-ignore\n    s1 = peg$FAILED;\n// @ts-ignore\n    if (peg$silentFails === 0) { peg$fail(peg$e59); }\n\n// @ts-ignore\n    return s0;\n  }\n\n// @ts-ignore\n  peg$result = peg$startRuleFunction();\n\n// @ts-ignore\n  if (peg$result !== peg$FAILED && peg$currPos === input.length) {\n// @ts-ignore\n    return peg$result;\n// @ts-ignore\n  } else {\n// @ts-ignore\n    if (peg$result !== peg$FAILED && peg$currPos < input.length) {\n// @ts-ignore\n      peg$fail(peg$endExpectation());\n    }\n\n// @ts-ignore\n    throw peg$buildStructuredError(\n// @ts-ignore\n      peg$maxFailExpected,\n// @ts-ignore\n      peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null,\n// @ts-ignore\n      peg$maxFailPos < input.length\n// @ts-ignore\n        ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1)\n// @ts-ignore\n        : peg$computeLocation(peg$maxFailPos, peg$maxFailPos)\n    );\n  }\n}\n\n// @ts-ignore\n  return {\n    SyntaxError: peg$SyntaxError,\n    parse: peg$parse\n  };\n})()\n\nexport interface FilePosition {\n  offset: number;\n  line: number;\n  column: number;\n}\n\nexport interface FileRange {\n  start: FilePosition;\n  end: FilePosition;\n  source: string;\n}\n\nexport interface LiteralExpectation {\n  type: \"literal\";\n  text: string;\n  ignoreCase: boolean;\n}\n\nexport interface ClassParts extends Array<string | ClassParts> {}\n\nexport interface ClassExpectation {\n  type: \"class\";\n  parts: ClassParts;\n  inverted: boolean;\n  ignoreCase: boolean;\n}\n\nexport interface AnyExpectation {\n  type: \"any\";\n}\n\nexport interface EndExpectation {\n  type: \"end\";\n}\n\nexport interface OtherExpectation {\n  type: \"other\";\n  description: string;\n}\n\nexport type Expectation = LiteralExpectation | ClassExpectation | AnyExpectation | EndExpectation | OtherExpectation;\n\ndeclare class _PeggySyntaxError extends Error {\n  public static buildMessage(expected: Expectation[], found: string | null): string;\n  public message: string;\n  public expected: Expectation[];\n  public found: string | null;\n  public location: FileRange;\n  public name: string;\n  constructor(message: string, expected: Expectation[], found: string | null, location: FileRange);\n  format(sources: {\n    source?: any;\n    text: string;\n  }[]): string;\n}\n\nexport interface TraceEvent {\n    type: string;\n    rule: string;\n    result?: any;\n    location: FileRange;\n  }\n\ndeclare class _DefaultTracer {\n  private indentLevel: number;\n  public trace(event: TraceEvent): void;\n}\n\npeggyParser.SyntaxError.prototype.name = \"PeggySyntaxError\";\n\nexport interface ParseOptions {\n  filename?: string;\n  startRule?: \"start\";\n  tracer?: any;\n  [key: string]: any;\n}\nexport type ParseFunction = <Options extends ParseOptions>(\n    input: string,\n    options?: Options\n  ) => Options extends { startRule: infer StartRule } ?\n    StartRule extends \"start\" ? Start : Start\n    : Start;\nexport const parse: ParseFunction = peggyParser.parse;\n\nexport const PeggySyntaxError = peggyParser.SyntaxError as typeof _PeggySyntaxError;\n\nexport type PeggySyntaxError = _PeggySyntaxError;\n\n// These types were autogenerated by ts-pegjs\nexport type Start = (If | List | Assign | Tag | Text)[];\nexport type Text = string;\nexport type Char = string;\nexport type Tag = string;\nexport type If = Openif | Elseif | Else | Endif;\nexport type Openif = string;\nexport type Elseif = string;\nexport type Else = \"<#else>\";\nexport type Endif = \"</#if>\";\nexport type List = Openlist | Endlist;\nexport type Openlist = string;\nexport type Endlist = \"</#list>\";\nexport type Assign = string;\nexport type TagExpression = any;\nexport type Expression = string;\nexport type UnsafeExpression = [\n  \"!\" | null,\n  Variable,\n  [_, UnsafeOperator, _, Expression][]\n];\nexport type SafeExpression = [\n  \"!\" | null,\n  Variable,\n  [_, SafeOperator, _, Expression][]\n];\nexport type Variable = string;\nexport type VariableNotation = (\n  | [\".\", Varname]\n  | ArrayExpression\n  | ModifierExpression\n  | Args\n)[];\nexport type ArrayExpression = [\"[\", Expression, \"]\"];\nexport type ModifierExpression = [\"?\", Modifier, Args | null];\nexport type Modifier = Varname;\nexport type Args = [\"(\", Arg | null, [Comma, Arg][], \")\"];\nexport type Arg = [_, Expression, _];\nexport type SafeOperator =\n  | \"<\"\n  | \"gt\"\n  | \"&gt;\"\n  | \"gte\"\n  | \"&gte;\"\n  | \"lt\"\n  | \"&lt;\"\n  | \"lte\"\n  | \"&lte;\"\n  | \"=\"\n  | \"==\"\n  | \"<=\"\n  | \"!=\"\n  | \"+\"\n  | \"-\"\n  | \"/\"\n  | \"*\"\n  | \"&&\"\n  | \"||\";\nexport type UnsafeOperator = SafeOperator | \">\" | \">=\";\nexport type Number_1 = string;\nexport type EncapsulatedString = string;\nexport type Varname = string;\nexport type HtmlEntity = string;\nexport type Comma = [_, \",\", _];\nexport type RequiredWhitespace = string;\nexport type _ = string;\n","import { Reporter } from 'htmlhint';\nimport { Block } from 'htmlhint/htmlparser';\nimport { Rule } from 'htmlhint/types';\nimport { PeggySyntaxError, parse } from '../parser';\n\nfunction isMatchingTag(tagName: string, tag: string) {\n    return !!tag.match(new RegExp(`^<${tagName}`));\n}\n\ntype Tag = {\n    open: boolean\n    raw: string;\n    tagName: string\n    event: Block;\n};\n\nclass BlockTag {\n    parent?: BlockTag;\n    openTag?: Tag;\n    closeTag?: Tag;\n    children: BlockTag[];\n\n    constructor(tag?: Tag, parent?: BlockTag) {\n        if(tag && tag.open) {\n            this.openTag = tag;\n        }\n        else if(tag && !tag.open) {\n            this.closeTag = tag;\n        }\n\n        this.parent = parent;\n        this.children = [];\n    }\n}\n\nfunction createTree(stack: Tag[]) {\n    const root: BlockTag = new BlockTag();\n\n    let currentTag: BlockTag = root;\n\n    for(const tag of stack) {\n        if(tag.open) {\n            currentTag.children.push(\n                currentTag = new BlockTag(tag, currentTag)\n            );\n        }\n        else if(!tag.open && currentTag.openTag?.tagName === tag.tagName) {\n            currentTag.closeTag = tag;\n            currentTag = currentTag.parent\n        }\n        else {\n            currentTag.children.push(new BlockTag(tag, currentTag.parent ?? root));\n        }\n    }\n\n    return root;\n}\n\nfunction lintTree(nodes: BlockTag[], reporter: Reporter, rule: Rule) {\n    for(const node of nodes) {\n        if(node.children) {\n            lintTree(node.children, reporter, rule)\n        }\n\n        if(node.openTag && node.closeTag) {\n            continue;\n        }\n        else if(node.openTag) {\n            reporter.error(\n                `Tag [${node.openTag.raw}] is missing a closing tag: [</${node.openTag.tagName}>]`,\n                node.openTag.event.line,\n                node.openTag.event.col, \n                rule,\n                node.openTag.raw\n            );\n        }\n        else if(node.closeTag) {\n            reporter.error(`Tag must be paired, no start tag: [ ${node.closeTag.raw} ]`, node.closeTag.event.line, node.closeTag.event.col, rule, node.closeTag.event.raw);\n        }\n    }\n}\n\nconst rule: Rule =  {\n    id: 'freemarker-tags',\n    description: 'Validate Freemarker tags.',\n    init(parser, reporter) {\n        const stack: Tag[] = [];\n\n        const blockTags = ['#if', '#list'];\n        const pattern = new RegExp(`^<(${blockTags.join('|')})`)\n        \n        parser.addListener('text', (event) => {\n            try {\n                for(const tag of parse(event.raw)) {\n                    const match = tag.match(pattern);\n\n                    if(match) {\n                        stack.push({\n                            event,\n                            raw: tag,\n                            tagName: match[1],\n                            open: true\n                        });\n                    }\n                }\n            }\n            catch(error) {\n                if(error instanceof PeggySyntaxError) {\n                    reporter.error(\n                        error.message,\n                        error.location.start.line,                    \n                        error.location.start.column,\n                        this,\n                        event.raw\n                    );\n                }\n            }\n        });\n\n        parser.addListener('tagend', (event) => {\n            if(!blockTags.includes(event.tagName)) {\n                return;\n            }\n\n            stack.push({\n                raw: event.raw,\n                tagName: event.tagName,\n                event,\n                open: false\n            });\n        });\n\n        parser.addListener('end', () => {\n            lintTree(createTree(stack).children, reporter, this);      \n        })\n    },\n};\n\nexport default rule;","import { Rule } from 'htmlhint/types';\nimport { EventTree } from '../lib/EventTree';\n\nconst rule: Rule = {\n    id: 'head-body-descendents-html',\n    description: 'The head and body tags must be a direct child descendents of the html tag.',\n    init(parser, reporter) {\n        new EventTree(parser, reporter, root => {\n            const html = root.findFirst('html');\n\n            root.find('head', 'body')\n                .filter(child => {\n                    return !html || !child.isChildOf(html);\n                })\n                .forEach(child => {\n                    const { line, col, raw } = child;\n                    \n                    const message = html\n                        ? `The [ ${child.tagName} ] tag must be a direct child descendent of the [ html ] tag on line ${html.line}.`\n                        : `The [ ${child.tagName} ] tag must be a direct child descendent of an [ html ] tag.`;\n\n                    reporter.error(message, line, col, this, raw);\n                });\n        });\n    }\n};\n\nexport default rule;","import { Rule } from 'htmlhint/types';\nimport { EventTree } from '../lib/EventTree';\n\nconst rule: Rule = {\n    id: 'head-no-duplicates',\n    description: 'The head tag must not be a duplicate.',\n    init(parser, reporter) {\n        new EventTree(parser, reporter, root => {\n            let head;\n\n            for(let node of root.find('head')) {\n                if(!head) {\n                    head = node;\n\n                    continue;\n                }\n\n                reporter.error(\n                    `The [ head ] tag is a duplicate of the tag on line ${head.line}.`,\n                    node.line,\n                    node.col,\n                    this,\n                    node.raw\n                );\n            }\n        });\n    }\n};\n\nexport default rule;","import { Rule } from 'htmlhint/types';\nimport { EventTree } from '../lib/EventTree';\n\ntype HeadValidChildrenPossibleTags = 'base' | 'link' | 'meta' | 'noscript' | 'script' | 'style' | 'template' | 'title';\n\nexport type HeadValidChildrenOptions = HeadValidChildrenPossibleTags | HeadValidChildrenPossibleTags[];\n\nconst rule: Rule = {\n    id: 'head-valid-children',\n    description: 'The head tag must only contain valid elements.',\n    init(parser, reporter, options: HeadValidChildrenOptions) {\n        const tags = Array.isArray(options) ? options : [\n            'base', 'link', 'meta', 'noscript', 'script', 'style', 'template', 'title'\n        ];\n\n        new EventTree(parser, reporter, root => {\n            for(let node of root.find('head')) {\n                for(let child of node.children) {\n                    if(tags.indexOf(child.tagName.toLowerCase()) > -1) {\n                        return;\n                    }\n\n                    reporter.error(\n                        `The [ ${child.tagName} ] tag is not allowed inside the [ head ] tag on line ${node.line}.`,\n                        child.line,\n                        child.col,\n                        this,\n                        child.raw\n                    );\n                }\n            }\n        });\n    }\n};\n\nexport default rule;","import { Rule } from 'htmlhint/types';\nimport { EventTree } from '../lib/EventTree';\n\nconst rule: Rule = {\n    id: 'html-no-duplicates',\n    description: 'The html tag must be a unique root element.',\n    init(parser, reporter) {\n        new EventTree(parser, reporter, root => {\n            const htmls = root.find('html');\n\n            htmls.filter(subject => subject !== htmls[0])\n                .forEach(child => {\n                    const { line, col, raw } = child;\n\n                    const message = `The [ ${child.tagName} ] tag already exists on line ${htmls[0].line}.`;\n\n                    reporter.error(message, line, col, this, raw);\n                });\n        });\n    }\n};\n\nexport default rule;","import { Rule } from 'htmlhint/types';\nimport { EventTree } from '../lib/EventTree';\n\nconst rule: Rule = {\n    id: 'html-root-node',\n    description: 'The html tag must be the only root node in the document.',\n    init(parser, reporter) {\n        new EventTree(parser, reporter, root => {\n            const html = root.findFirst('html');\n\n            if(html) {\n                root.children.filter(child => child.tagName !== 'html')\n                    .forEach(child => {\n                        const { line, col, raw } = child;\n\n                        const message = `The [ ${child.tagName} ] cannot come ${child.isBefore(html) ? 'before' : 'after'} the [ html ] tag on line ${html.line}.`;\n\n                        reporter.error(message, line, col, this, raw);\n                    });\n            }\n        });\n    }\n};\n\nexport default rule;","import { Rule } from 'htmlhint/types';\nimport { EventTree } from '../lib/EventTree';\n\nconst rule: Rule = {\n    id: 'html-valid-children',\n    description: 'The html tag must only contain a head and body tag.',\n    init(parser, reporter) {\n        new EventTree(parser, reporter, root => {\n            const html = root.findFirst('html');\n\n            if(html) {\n                html.children.forEach(child => {\n                    if(!child.match('head', 'body')) {                        \n                        const { line, col, raw } = child;\n\n                        const message = `The [ ${child.tagName} ] tag cannot be a direct descendent of the [ html ] tag on line ${html.line}.`;\n\n                        reporter.error(message, line, col, this, raw);\n                    }\n                });\n            }\n        });\n    }\n}\n\nexport default rule;","import { Rule } from 'htmlhint/types';\nimport { EventTree } from '../lib/EventTree';\n\nconst rule: Rule = {\n    id: 'html-valid-children-order',\n    description: 'The head and body tags must be in the correct order.',\n    init(parser, reporter) {\n        new EventTree(parser, reporter, root => {\n            const html = root.findFirst('html');\n\n            const htmlChildren = root.find('head', 'body').filter(child => {\n                return !html || child.isChildOf(html);\n            });\n\n            const bodyTags = htmlChildren.filter(child => child.tagName === 'body');\n            const headTags = htmlChildren.filter(child => child.tagName === 'head');\n\n            if(bodyTags[0] && headTags[0] && bodyTags[0].isBefore(headTags[0])) {\n                const { line, col, raw } = bodyTags[0];\n\n                const message = `The [ ${bodyTags[0].tagName} ] tag must come after the [ head ] tag on line ${headTags[0].line}.`;\n\n                reporter.error(message, line, col, this, raw);\n            }\n                \n            if(bodyTags[0] && headTags[0] && headTags[0].isAfter(bodyTags[0])) {\n                const { line, col, raw } = headTags[0];\n\n                const message = `The [ ${headTags[0].tagName} ] tag must come before the [ body ] tag on line ${bodyTags[0].line}.`;\n\n                reporter.error(message, line, col, this, raw);\n            }\n        });\n    }\n};\n\nexport default rule;","import { Rule } from 'htmlhint/types';\n\nconst rule: Rule = {\n    id: 'img-src-required',\n    description: 'The img tag must have a src attribute.',\n    init(parser, reporter) {\n        parser.addListener('tagstart', event => {\n            if(event.tagName.toLowerCase() === 'img') {\n                for(let attr of event.attrs) {\n                    if(attr.name.toLowerCase() === 'src') {\n                        return;\n                    }\n                }\n    \n                const { line, col, raw } = event;\n\n                const message = `The [ ${event.tagName} ] tag must have a [ src ] attribute`;\n\n                reporter.error(message, line, col, this, raw);\n            }\n        });\n    }\n}\n\nexport default rule;","import { Rule } from 'htmlhint/types';\n\nconst rule: Rule ={\n    id: 'invalid-attribute-char',\n    description: 'Attribute must contain valid characters.',\n    init(parser, reporter) {\n        parser.addListener('tagstart', event => {\n            let offset = 1;\n\n            event.attrs.forEach(({ name, index }) => {\n                offset += event.raw.slice(offset).indexOf(name);\n                \n                let pos = 0;\n\n                const matches = name.match(/[^a-zA-Z:\\-1-9]/g);\n                    \n                if(matches) {\n                    while(matches.length) {\n                        const slice = name.slice(pos),\n                            char = matches.shift(),\n                            index = slice.indexOf(char);\n\n                        reporter.error(\n                            `[ ${char} ] character cannot be used for attribute names.`,\n                            event.line,\n                            event.col + offset + pos + index,\n                            this,\n                            char\n                        );\n                    \n                        pos += index + 1;\n                    }\n                }\n            })\n        });\n    }\n}\n\nexport default rule;","import { Block } from \"htmlhint/htmlparser\";\nimport { Rule } from 'htmlhint/types';\n\nconst rule: Rule = {\n    id: 'nested-paragraphs',\n    description: 'Nested paragraphs are prohibited.',\n    init(parser, reporter) {\n        let openingTag: Block|undefined;\n        \n        const stack = [];\n\n        parser.addListener('tagstart', event => {\n            if(event.tagName.toLowerCase() === 'p') {\n                if(openingTag) {\n                    stack.push(event);\n                }\n                else {\n                    openingTag = event;\n                }\n            }\n        });\n\n        parser.addListener('tagend', event => {\n            const isParagraph = event.tagName.toLowerCase() === 'p';\n\n            if(openingTag && isParagraph) {\n                const [ start ] = stack.splice(stack.length - 1);\n\n                if(!start) {\n                    openingTag = undefined;\n\n                    return;\n                }\n                \n                reporter.error(\n                    `[ p ] tags cannot be nested inside the [ p ] tag on line ${openingTag.line}.`,\n                    start.line,\n                    start.col,\n                    this,\n                    reporter.html.slice(start.pos, event.pos + event.raw.length)\n                );\n            }\n            else if(!isParagraph) {\n                openingTag = undefined;\n            }\n        });\n\n        parser.addListener('end', event => {\n            if(openingTag && stack.length) {\n                stack.forEach(start => {\n                    reporter.error(\n                        `[ p ] tags cannot be nested inside the [ p ] tag on line ${openingTag.line}.`,\n                        start.line,\n                        start.col,\n                        this,\n                        reporter.html.slice(start.pos, event.lastEvent.pos + event.lastEvent.raw.length)\n                    );\n                });\n            }\n        });\n    }\n}\n\nexport default rule;","import { Rule } from 'htmlhint/types';\n\nconst rule: Rule = {\n    id: 'no-entities-in-attributes',\n    description: 'No HTML entities within tag attributes.',\n    init(parser, reporter, options) {\n        parser.addListener('tagstart', event => {\n            event.attrs.forEach((attr) => {\n                const { value, name, raw } = attr;\n\n                if(Array.isArray(options) && !options.includes(name)) {\n                    return;\n                }\n\n                raw.split(/[\\n\\r\\v]/gi).reduce(({ line, col }, str) => {\n                    const matches = str.match(\n                        /&([a-z0-9]+|#[0-9]{1,6}|#x[0-9a-fA-F]{1,6});/ig\n                    );\n\n                    if(!matches) {\n                        return {\n                            line: line + 1,\n                            col: 0\n                        };\n                    }\n\n                    let offset = 0;\n\n                    for(const match of matches) {\n                        const index = str.indexOf(match, offset);\n\n                        reporter.error(\n                            `Invalid entity [ ${match} ] encapsulated in the [ ${name} ] attribute on line ${line}.`,\n                            line,\n                            col + index,\n                            this,\n                            match\n                        );\n                        \n                        offset = str.indexOf(match, offset) + match.length;\n                    }\n\n                    return {\n                        line: line + 1,\n                        col: 0\n                    };\n                }, {\n                    line: event.line,\n                    col: event.col + event.raw.indexOf(raw)\n                });\n            });\n        });\n    }\n}\n\nexport default rule;","import { Rule } from \"htmlhint/types\";\nimport { parse } from \"../parser\";\n\nconst rule: Rule = {\n    id: 'spec-char-escape',\n    description: 'Special characters must be escaped.',\n    init(parser, reporter) {\n        parser.addListener('text', (event) => {\n            const raw = event.raw;\n            const reSpecChar = /[<>]| \\& /g;\n\n            let tags = [];\n\n            try {\n                let index = 0;\n\n                tags = parse(raw).map(tag => {\n                    const sliced = raw.slice(index);\n\n                    const start = index;\n                    const end = index + tag.length;\n\n                    index += tag.length + sliced.indexOf(tag);\n                    \n                    return {\n                        start,\n                        end,\n                        tag\n                    }\n                }).filter(Boolean)\n            }\n            catch(e) {\n                // Do nothing\n            }\n\n            let match;\n\n            for(const {start, end, tag} of tags) {\n                if(tag.match(/^<#.+>$/)) {\n                    continue;\n                }\n\n                while (match = reSpecChar.exec(tag)) {\n                    if(!(match.index >= start && match.index <= end)) {\n                        continue;\n                    }\n                        \n                    const { line, col } = parser.fixPos(event, match.index);\n                \n                    reporter.error(`Special characters must be escaped : [ ${match[0]} ].`, line, col, this, event.raw);\n                }\n            }\n        });\n    },\n};\n\nexport default rule;","import { Block } from 'htmlhint/htmlparser';\nimport { Rule } from 'htmlhint/types';\n\nconst rule: Rule =  {\n    id: 'tag-pair',\n    description: 'Tag must be paired.',\n    init(parser, reporter) {\n        const stack: Block[] = [];\n        const mapEmptyTags = parser.makeMap(\n            'area,base,basefont,br,col,frame,hr,img,input,isindex,link,meta,param,embed,track,command,source,keygen,wbr'\n        );\n\n        parser.addListener('tagstart', (event) => {\n            const tagName = event.tagName.toLowerCase();\n            \n            if (mapEmptyTags[tagName] === undefined && !event.close) {\n                stack.push({ tagName, ...event });\n            }\n        });\n\n        parser.addListener('tagend', (event) => {\n            const tagName = event.tagName.toLowerCase();\n            \n            if(tagName.startsWith('#')) {\n                return;\n            }\n\n            let pos;\n\n            for (pos = stack.length - 1; pos >= 0; pos--) {\n                if (stack[pos].tagName === tagName) {\n                    break;\n                }\n            }\n\n            if (pos >= 0) {\n                const arrTags = [];\n\n                for (let i = stack.length - 1; i > pos; i--) {\n                    arrTags.push(`</${stack[i].tagName}>`);\n                }\n\n                if (arrTags.length > 0) {\n                    const lastEvent = stack[stack.length - 1];\n                    \n                    reporter.error(\n                        `Tag must be paired, missing: [ ${arrTags.join('')} ], start tag match failed [ ${lastEvent.raw} ] on line ${lastEvent.line}.`,\n                        lastEvent.line,\n                        lastEvent.col,\n                        this,\n                        lastEvent.raw\n                    );\n                }\n\n                stack.length = pos;\n            }\n            else {\n                reporter.error(\n                    `Tag must be paired, no start tag: [ ${event.raw} ]`,\n                    event.line,\n                    event.col,\n                    this,\n                    event.raw\n                );\n            }\n        });\n\n        parser.addListener('end', (event) => {\n            for (let i = stack.length - 1; i >= 0; i--) {\n                reporter.error(\n                    `Tag must be paired, missing: [ </${stack[i].tagName}> ], start tag match failed [ ${stack[i].raw} ] on line ${stack[i].line}.`,\n                    stack[i].line, \n                    stack[i].col,\n                    this,\n                    stack[i].raw\n                );\n            }\n        });\n    },\n};\n\nexport default rule;","import { Attr, Block } from \"htmlhint/htmlparser\";\nimport { Rule } from 'htmlhint/types';\n\nconst regex = {\n    'absolute': /^https?:\\/\\//,\n    'relative': /^\\w+?:/\n};\n\nclass Pattern {\n    public name: string;\n    public pattern: string;\n    public regex: RegExp;\n\n    constructor(options) {\n        const { name, pattern } =Object.assign({\n            pattern: null,\n            name: null\n        }, typeof options === 'object' ? options : {\n            pattern: options\n        });\n\n        this.name = name || pattern;\n        this.pattern = pattern;\n        this.regex = regex[pattern] || new RegExp(pattern);\n    }\n\n    test(value) {\n        return this.regex.test(value);\n    }\n\n    error(event, attr) {\n        return new MatchError(this, event, attr);\n    }\n}\n\nclass MatchError extends Error {\n    public line: number;\n    public col: number;\n\n    constructor(pattern, event, attr) {\n        super();\n\n        this.message = `The [ ${attr.name} ] attribute \"${attr.value}\" must follow the ${pattern.name} format.`;        \n        this.name = pattern.name;\n        this.line = event.line;\n        this.col = event.col + event.tagName.length + 1 + attr.index;\n    }\n}\n\nclass ReporterError extends Error {\n    public line: number;\n    public col: number;\n    \n    constructor(event, errors, attr) {\n        super(errors.length === 1 ? errors[0].message : (\n            `The [ ${attr.name} ] attribute \"${attr.value}\" must be one of the following formats: ${errors.map(event => `\"${event.name}\"`).join(', ')}.`\n        ));\n\n        this.line = event.line;\n        this.col = event.col + event.tagName.length + 1 + attr.index;\n    }\n    \n}\nfunction test(patterns: Pattern[], event: Block, attr: Attr) {\n    const errors = [];\n\n    for(const [i, pattern] of Object.entries(patterns)) {\n        if(pattern.test(attr.value)) {\n            return true;\n        }\n        \n        errors.push(pattern.error(event, attr));\n    }\n\n    throw new ReporterError(event, errors, attr);\n}\n\nexport type ValidPathFormatOptions = {\n    tag: string,\n    attr: string,\n    formats: ('absolute' | 'relative' | RegExp)[]\n}\n\nconst rule: Rule = {\n    id: 'valid-path-format',\n    description: 'Paths must be a valid format.',\n    init(parser, reporter, options: ValidPathFormatOptions[]) {\n        parser.addListener('tagstart', (event) => {\n            options.forEach(config => {\n                const patterns = config.formats.map(pattern => new Pattern(pattern));\n        \n                let tags: string[] = Array.isArray(config.tag)\n                    ? config.tag\n                    : config.tag ? [config.tag] : [];\n\n                if(!tags.length || tags.indexOf(event.tagName) > -1) {\n                    event.attrs.forEach(attr => {\n                        if(!config.attr || config.attr === attr.name) {\n                            try {\n                                test(patterns, event, attr);\n                            }\n                            catch (e) {\n                                reporter.error(\n                                    e.message,\n                                    e.line,\n                                    e.col,\n                                    this,\n                                    attr.raw\n                                );\n                            }\n                        }\n                    });\n                }\n            });\n        });\n    }\n};\n\nexport default rule;","import { Rule } from 'htmlhint/types';\n\nfunction validateInlineCSS(styleString) {\n    // Remove whitespace around semicolons and colons\n    styleString = styleString.replace(/\\s*([;:])\\s*/g, '$1');\n    \n    // Split into individual declarations\n    const declarations = styleString.split(';').filter(d => d.trim() !== '');\n    \n    const errors: {\n        declaration: string,\n        message: string\n    }[] = [];\n    \n    declarations.forEach((declaration, index) => {        \n        // Check for common mistakes like using '=' instead of ':'\n        if (declaration.includes('=')) {\n            errors.push({\n                declaration,\n                message: `Declaration \"${declaration}\" uses '=' instead of ':'`\n            });\n\n            return;\n        }\n\n        // Check if the declaration has a colon\n        if (!declaration.includes(':')) {\n            errors.push({\n                declaration,\n                message: `The value \"${declaration}\" does not contain a declaration.`\n            });\n            \n            return;\n        }\n        \n        const [property, value] = declaration.split(':');\n        \n        // Check if property is empty\n        if (!property.trim()) {\n            errors.push({\n                declaration,\n                message: `The value \"${value}\" does not have a declaration.`\n            });\n        }\n        \n        // Check if value is empty\n        if (!value || !value.trim()) {\n            errors.push({\n                declaration,\n                message: `Property \"${property}\" has an empty value`\n            });\n        }\n    });\n    \n    return {\n      valid: errors.length === 0,\n      errors: errors\n    };\n}\n\nconst rule: Rule = {\n    id: 'valid-style-attrs',\n    description: 'Style attributes must contain valid CSS.',\n    init(parser, reporter) {\n\n        parser.addListener('tagstart', event => {\n            const matches = event.attrs.filter(({ name }) => name === 'style');\n\n            for(const attr of matches) {\n                for(const error of validateInlineCSS(attr.value).errors) {\n                    reporter.error(\n                        error.message,\n                        event.line,\n                        event.col + event.raw.indexOf(attr.raw.trim()),\n                        this,\n                        attr.raw.trim()\n                    );\n                };\n            }\n        })\n    }\n}\n\nexport default rule;","import bodyNoDuplicates from './body-no-duplicates';\nimport freemarkerTags from './freemarker-tags';\nimport headBodyDescendentsHtml from './head-body-descendents-html';\nimport headNoDuplicates from './head-no-duplicates';\nimport headValidContentModel from './head-valid-children';\nimport htmlNoDuplicates from './html-no-duplicates';\nimport htmlRootNode from './html-root-node';\nimport htmlValidChildren from './html-valid-children';\nimport htmlValidChildrenOrder from './html-valid-children-order';\nimport imgSrcRequired from './img-src-required';\nimport invalidAttributeChar from './invalid-attribute-char';\nimport nestedParagraphs from './nested-paragraphs';\nimport noEntiesInAttributes from './no-entities-in-attributes';\nimport specialCharEscape from './special-char-escape';\nimport tagPair from './tag-pair';\nimport validPathFormat from './valid-path-format';\nimport validStyleAttrs from './valid-style-attrs';\n\nexport default {\n    'body-no-duplicates': bodyNoDuplicates,\n    'freemarker-tags': freemarkerTags,\n    'head-body-descendents-html': headBodyDescendentsHtml,\n    'head-no-duplicates': headNoDuplicates,\n    'head-valid-children': headValidContentModel,\n    'html-valid-children-order': htmlValidChildrenOrder,\n    'html-no-duplicates': htmlNoDuplicates,\n    'html-root-node': htmlRootNode,\n    'html-valid-children': htmlValidChildren,\n    'img-src-required': imgSrcRequired,\n    'invalid-attribute-char': invalidAttributeChar,\n    'nested-paragraphs': nestedParagraphs,\n    'no-entities-in-attributes': noEntiesInAttributes,\n    'special-char-escape': specialCharEscape,\n    'tag-pair': tagPair,\n    'valid-path-format': validPathFormat,\n    'valid-style-attrs': validStyleAttrs,\n};","import { HTMLHint } from 'htmlhint';\nimport { Hint, Rule, Ruleset } from 'htmlhint/types';\nimport defaultConfig from './capsule.config';\nimport rules from './rules';\nimport { HeadValidChildrenOptions } from './rules/head-valid-children';\nimport { ValidPathFormatOptions } from './rules/valid-path-format';\n\nObject.keys(rules).forEach((key) => {\n    HTMLHint.addRule(rules[key]);\n});\n\nexport * from './parser';\n\nexport {\n    defaultConfig\n};\n\ntype CapsuleRuleset = Ruleset & {\n    'html-valid-children'?: HeadValidChildrenOptions,\n    'valid-path-format'?: ValidPathFormatOptions\n    'valid-style-attrs'?: boolean\n}\n\nexport type {\n    CapsuleRuleset,\n    Hint,\n    Rule,\n    Ruleset\n};\n\nexport function lint(html: string, ruleset?: CapsuleRuleset): Hint[] {\n    return HTMLHint.verify(html, ruleset ?? defaultConfig).map(error => {\n        error.rule.link = error.rule.link.replace(\n            'https://htmlhint.com/docs/user-guide/rules/',\n            'https://thecapsule.email/docs/codes/'\n        );\n        \n        return error;\n    })\n}"],"names":["htmlparser","HTMLParser","str","obj","items","i","html","mapCdataTags","regTag","regAttr","regLine","match","matchIndex","lastIndex","tagName","arrAttrs","tagCDATA","attrsCDATA","arrCDATA","lastCDATAIndex","text","lastLineIndex","line","arrBlocks","isMapCdataTagsRequired","attrType","attr","saveBlock","type","raw","pos","data","col","attrs","attrMatch","attrMatchCount","name","quote","value","types","listener","_listeners","arrTypes","l","listeners","listenersType","listenersAll","lastEvent","event","index","arrLines","lineCount","mapAttrs","reporter","Reporter","ruleset","message","rule","lines","brLen","evidence","evidenceLen","altRequire","parser","selector","attrLowercase","svgIgnores","testAgainstStringOrRegExp","comparison","firstComparisonChar","lastComparisonChar","secondToLastComparisonChar","comparisonIsRegex","hasCaseInsensitiveFlag","options","exceptions","attrName","exp","attrSorted","orderMap","sortOrder","listOfAttributes","originalAttrs","a","b","attrNoDuplication","mapAttrName","attrUnsafeChars","regUnsafe","unsafeCode","attrValueDoubleQuotes","attrValueNotEmpty","attrValueSingleQuotes","attrWhitespace","elem","doctypeFirst","allEvent","doctypeHtml5","onComment","onTagStart","headScriptDisabled","reScript","isInHead","onTagEnd","hrefAbsOrRel","hrefMode","htmlLangRequire","grandfathered","privateUse","privateUse2","langtag","languageTag","langValidityPattern","idClassAdDisabled","idClassValue","arrRules","regId","l1","arrClass","classValue","j","l2","idUnique","mapIdCount","id","inlineScriptDisabled","reEvent","inlineStyleDisabled","inputRequiresLabel","labelTags","inputTags","inputTag","hasMatchingLabelTag","found","labelTag","scriptDisabled","spaceTabMixedDisabled","indentMode","spaceLengthRequire","reMixed","fixedPos","whiteSpace","specCharEscape","reSpecChar","srcNotEmpty","styleDisabled","tagPair","stack","mapEmptyTags","arrTags","tagSelfClose","emptyTagNotSelfClosed","tagnameLowercase","tagnameSpecialchars","specialchars","titleRequire","headBegin","hasTitle","tagsCheck","tagsTypings","currentTagType","copyOfId","realID","values","attrNoUnnecessaryWhitespace","exports","alt_require_1","require$$0","attr_lowercase_1","require$$1","attr_sorted_1","require$$2","attr_no_duplication_1","require$$3","attr_unsafe_chars_1","require$$4","attr_value_double_quotes_1","require$$5","attr_value_not_empty_1","require$$6","attr_value_single_quotes_1","require$$7","attr_whitespace_1","require$$8","doctype_first_1","require$$9","doctype_html5_1","require$$10","head_script_disabled_1","require$$11","href_abs_or_rel_1","require$$12","html_lang_require_1","require$$13","id_class_ad_disabled_1","require$$14","id_class_value_1","require$$15","id_unique_1","require$$16","inline_script_disabled_1","require$$17","inline_style_disabled_1","require$$18","input_requires_label_1","require$$19","script_disabled_1","require$$20","space_tab_mixed_disabled_1","require$$21","spec_char_escape_1","require$$22","src_not_empty_1","require$$23","style_disabled_1","require$$24","tag_pair_1","require$$25","tag_self_close_1","require$$26","empty_tag_not_self_closed_1","require$$27","tagname_lowercase_1","require$$28","tagname_specialchars_1","require$$29","title_require_1","require$$30","tags_check_1","require$$31","attr_no_unnecessary_whitespace_1","require$$32","htmlparser_1","reporter_1","HTMLRules","HTMLHintCore","all","strRuleset","ruleId","rules","arrMessages","arrLogs","colors","indent","hint","evidenceCount","leftCol","rightCol","repeatStr","pointCol","n","key","defaultConfig","EMPTY_TAGS","EventNode","parent","__publicField","depth","el","args","find","children","carry","child","subject","EventTree","callack","root","parentNode","node","body","peggyParser","peg$subclass","C","peg$SyntaxError","expected","location","self","peg$padEnd","targetLength","padString","sources","src","k","s","offset_s","loc","e","filler","last","hatLen","DESCRIBE_EXPECTATION_FNS","expectation","literalEscape","escapedParts","part","classEscape","hex","ch","describeExpectation","describeExpected","descriptions","describeFound","peg$parse","input","peg$FAILED","peg$source","peg$startRuleFunctions","peg$parsestart","peg$startRuleFunction","peg$c0","peg$c1","peg$c2","peg$c3","peg$c4","peg$c5","peg$c6","peg$c7","peg$c8","peg$c9","peg$c10","peg$c11","peg$c12","peg$c13","peg$c14","peg$c15","peg$c16","peg$c17","peg$c18","peg$c19","peg$c20","peg$c21","peg$c22","peg$c23","peg$c24","peg$c25","peg$c26","peg$c27","peg$c28","peg$c29","peg$c30","peg$c31","peg$c32","peg$c33","peg$c34","peg$c35","peg$c36","peg$c37","peg$c38","peg$c39","peg$c40","peg$c41","peg$c42","peg$c43","peg$c44","peg$c45","peg$c46","peg$c47","peg$r1","peg$r2","peg$e0","peg$otherExpectation","peg$e1","peg$e2","peg$literalExpectation","peg$e3","peg$e4","peg$e5","peg$anyExpectation","peg$e6","peg$e7","peg$e8","peg$e9","peg$e10","peg$e11","peg$e12","peg$e13","peg$e14","peg$e15","peg$e16","peg$e17","peg$e18","peg$e19","peg$e20","peg$e21","peg$e22","peg$e23","peg$e24","peg$e25","peg$e26","peg$e27","peg$e28","peg$e29","peg$e30","peg$e31","peg$e32","peg$e33","peg$e34","peg$e35","peg$e36","peg$e37","peg$e38","peg$e39","peg$e40","peg$e41","peg$e42","peg$e43","peg$e44","peg$e45","peg$e46","peg$e47","peg$e48","peg$e49","peg$e52","peg$e53","peg$e54","peg$classExpectation","peg$e55","peg$e56","peg$e57","peg$e58","peg$e59","peg$e60","peg$f0","peg$f1","peg$f2","peg$f3","peg$f4","peg$f5","peg$f6","peg$f7","peg$f8","peg$f9","peg$f10","peg$f11","peg$f12","peg$f15","peg$f16","peg$f17","c","peg$f18","peg$f19","peg$currPos","peg$posDetailsCache","peg$maxFailPos","peg$maxFailExpected","peg$silentFails","peg$result","ignoreCase","parts","inverted","peg$endExpectation","description","peg$computePosDetails","details","p","peg$computeLocation","startPos","endPos","offset","startPosDetails","endPosDetails","res","peg$fail","peg$buildStructuredError","s0","s1","peg$parseif","peg$parselist","peg$parseassign","peg$parsetag","peg$parsetext","s2","peg$parsechar","s3","s4","s5","s6","s7","peg$parse_","peg$parsetag_expression","peg$parseopenif","peg$parseelseif","peg$parseelse","peg$parseendif","peg$parserequired_whitespace","peg$parseexpression","peg$parseopenlist","peg$parseendlist","s8","s9","s10","peg$parsevariable","peg$parseunsafe_expression","peg$parsesafe_expression","peg$parsesafe_operator","peg$parseunsafe_operator","peg$parseencapsulated_string","peg$parsevarname","peg$parsehtml_entity","peg$parsevariable_notation","peg$parsearray_expression","peg$parsemodifier_expression","peg$parseargs","peg$parsemodifier","peg$parsearg","peg$parsecomma","parse","PeggySyntaxError","BlockTag","tag","createTree","currentTag","_a","lintTree","nodes","blockTags","pattern","error","head","tags","htmls","htmlChildren","bodyTags","headTags","matches","slice","char","openingTag","isParagraph","start","sliced","end","regex","Pattern","MatchError","ReporterError","errors","test","patterns","config","validateInlineCSS","styleString","declarations","d","declaration","property","bodyNoDuplicates","freemarkerTags","headBodyDescendentsHtml","headNoDuplicates","headValidContentModel","htmlValidChildrenOrder","htmlNoDuplicates","htmlRootNode","htmlValidChildren","imgSrcRequired","invalidAttributeChar","nestedParagraphs","noEntiesInAttributes","specialCharEscape","validPathFormat","HTMLHint","lint"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36]}