All Downloads are FREE. Search and download functionalities are using the official Maven repository.

package.dist.chunks.mermaid.core.erDiagram-62CBQV5Y.mjs.map Maven / Gradle / Ivy

Go to download

Markdown-ish syntax for generating flowcharts, mindmaps, sequence diagrams, class diagrams, gantt charts, git graphs and more.

There is a newer version: 11.4.0
Show newest version
{
  "version": 3,
  "sources": ["../../../src/diagrams/er/parser/erDiagram.jison", "../../../src/diagrams/er/erDb.js", "../../../src/diagrams/er/erRenderer.js", "../../../src/diagrams/er/erMarkers.js", "../../../src/diagrams/er/styles.js", "../../../src/diagrams/er/erDiagram.ts"],
  "sourcesContent": ["/* parser generated by jison 0.4.18 */\n/*\n  Returns a Parser object of the following structure:\n\n  Parser: {\n    yy: {}\n  }\n\n  Parser.prototype: {\n    yy: {},\n    trace: function(),\n    symbols_: {associative list: name ==> number},\n    terminals_: {associative list: number ==> name},\n    productions_: [...],\n    performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\n    table: [...],\n    defaultActions: {...},\n    parseError: function(str, hash),\n    parse: function(input),\n\n    lexer: {\n        EOF: 1,\n        parseError: function(str, hash),\n        setInput: function(input),\n        input: function(),\n        unput: function(str),\n        more: function(),\n        less: function(n),\n        pastInput: function(),\n        upcomingInput: function(),\n        showPosition: function(),\n        test_match: function(regex_match_array, rule_index),\n        next: function(),\n        lex: function(),\n        begin: function(condition),\n        popState: function(),\n        _currentRules: function(),\n        topState: function(),\n        pushState: function(condition),\n\n        options: {\n            ranges: boolean           (optional: true ==> token location info will include a .range[] member)\n            flex: boolean             (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\n            backtrack_lexer: boolean  (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\n        },\n\n        performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\n        rules: [...],\n        conditions: {associative list: name ==> set},\n    }\n  }\n\n\n  token location info (@$, _$, etc.): {\n    first_line: n,\n    last_line: n,\n    first_column: n,\n    last_column: n,\n    range: [start_number, end_number]       (where the numbers are indexes into the input string, regular zero-based)\n  }\n\n\n  the parseError function receives a 'hash' object with these members for lexer and parser errors: {\n    text:        (matched text)\n    token:       (the produced terminal token, if any)\n    line:        (yylineno)\n  }\n  while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\n    loc:         (yylloc)\n    expected:    (string describing the set of expected tokens)\n    recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\n  }\n*/\nvar parser = (function(){\nvar o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[6,8,10,20,22,24,26,27,28],$V1=[1,10],$V2=[1,11],$V3=[1,12],$V4=[1,13],$V5=[1,14],$V6=[1,15],$V7=[1,21],$V8=[1,22],$V9=[1,23],$Va=[1,24],$Vb=[1,25],$Vc=[6,8,10,13,15,18,19,20,22,24,26,27,28,41,42,43,44,45],$Vd=[1,34],$Ve=[27,28,46,47],$Vf=[41,42,43,44,45],$Vg=[17,34],$Vh=[1,54],$Vi=[1,53],$Vj=[17,34,36,38];\nvar parser = {trace: function trace () { },\nyy: {},\nsymbols_: {\"error\":2,\"start\":3,\"ER_DIAGRAM\":4,\"document\":5,\"EOF\":6,\"line\":7,\"SPACE\":8,\"statement\":9,\"NEWLINE\":10,\"entityName\":11,\"relSpec\":12,\":\":13,\"role\":14,\"BLOCK_START\":15,\"attributes\":16,\"BLOCK_STOP\":17,\"SQS\":18,\"SQE\":19,\"title\":20,\"title_value\":21,\"acc_title\":22,\"acc_title_value\":23,\"acc_descr\":24,\"acc_descr_value\":25,\"acc_descr_multiline_value\":26,\"ALPHANUM\":27,\"ENTITY_NAME\":28,\"attribute\":29,\"attributeType\":30,\"attributeName\":31,\"attributeKeyTypeList\":32,\"attributeComment\":33,\"ATTRIBUTE_WORD\":34,\"attributeKeyType\":35,\"COMMA\":36,\"ATTRIBUTE_KEY\":37,\"COMMENT\":38,\"cardinality\":39,\"relType\":40,\"ZERO_OR_ONE\":41,\"ZERO_OR_MORE\":42,\"ONE_OR_MORE\":43,\"ONLY_ONE\":44,\"MD_PARENT\":45,\"NON_IDENTIFYING\":46,\"IDENTIFYING\":47,\"WORD\":48,\"$accept\":0,\"$end\":1},\nterminals_: {2:\"error\",4:\"ER_DIAGRAM\",6:\"EOF\",8:\"SPACE\",10:\"NEWLINE\",13:\":\",15:\"BLOCK_START\",17:\"BLOCK_STOP\",18:\"SQS\",19:\"SQE\",20:\"title\",21:\"title_value\",22:\"acc_title\",23:\"acc_title_value\",24:\"acc_descr\",25:\"acc_descr_value\",26:\"acc_descr_multiline_value\",27:\"ALPHANUM\",28:\"ENTITY_NAME\",34:\"ATTRIBUTE_WORD\",36:\"COMMA\",37:\"ATTRIBUTE_KEY\",38:\"COMMENT\",41:\"ZERO_OR_ONE\",42:\"ZERO_OR_MORE\",43:\"ONE_OR_MORE\",44:\"ONLY_ONE\",45:\"MD_PARENT\",46:\"NON_IDENTIFYING\",47:\"IDENTIFYING\",48:\"WORD\"},\nproductions_: [0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,5],[9,4],[9,3],[9,1],[9,7],[9,6],[9,4],[9,2],[9,2],[9,2],[9,1],[11,1],[11,1],[16,1],[16,2],[29,2],[29,3],[29,3],[29,4],[30,1],[31,1],[32,1],[32,3],[35,1],[33,1],[12,3],[39,1],[39,1],[39,1],[39,1],[39,1],[40,1],[40,1],[14,1],[14,1],[14,1]],\nperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\n/* this == yyval */\n\nvar $0 = $$.length - 1;\nswitch (yystate) {\ncase 1:\n /*console.log('finished parsing');*/ \nbreak;\ncase 2:\n this.$ = [] \nbreak;\ncase 3:\n$$[$0-1].push($$[$0]);this.$ = $$[$0-1]\nbreak;\ncase 4: case 5:\n this.$ = $$[$0] \nbreak;\ncase 6: case 7:\n this.$=[];\nbreak;\ncase 8:\n\n          yy.addEntity($$[$0-4]);\n          yy.addEntity($$[$0-2]);\n          yy.addRelationship($$[$0-4], $$[$0], $$[$0-2], $$[$0-3]);\n      \nbreak;\ncase 9:\n\n          yy.addEntity($$[$0-3]);\n          yy.addAttributes($$[$0-3], $$[$0-1]);\n      \nbreak;\ncase 10:\n yy.addEntity($$[$0-2]); \nbreak;\ncase 11:\n yy.addEntity($$[$0]); \nbreak;\ncase 12:\n\n          yy.addEntity($$[$0-6], $$[$0-4]);\n          yy.addAttributes($$[$0-6], $$[$0-1]);\n      \nbreak;\ncase 13:\n yy.addEntity($$[$0-5], $$[$0-3]); \nbreak;\ncase 14:\n yy.addEntity($$[$0-3], $$[$0-1]); \nbreak;\ncase 15: case 16:\n this.$=$$[$0].trim();yy.setAccTitle(this.$); \nbreak;\ncase 17: case 18:\n this.$=$$[$0].trim();yy.setAccDescription(this.$); \nbreak;\ncase 19: case 43:\n this.$ = $$[$0]; \nbreak;\ncase 20: case 41: case 42:\n this.$ = $$[$0].replace(/\"/g, ''); \nbreak;\ncase 21: case 29:\n this.$ = [$$[$0]]; \nbreak;\ncase 22:\n $$[$0].push($$[$0-1]); this.$=$$[$0]; \nbreak;\ncase 23:\n this.$ = { attributeType: $$[$0-1], attributeName: $$[$0] }; \nbreak;\ncase 24:\n this.$ = { attributeType: $$[$0-2], attributeName: $$[$0-1], attributeKeyTypeList: $$[$0] }; \nbreak;\ncase 25:\n this.$ = { attributeType: $$[$0-2], attributeName: $$[$0-1], attributeComment: $$[$0] }; \nbreak;\ncase 26:\n this.$ = { attributeType: $$[$0-3], attributeName: $$[$0-2], attributeKeyTypeList: $$[$0-1], attributeComment: $$[$0] }; \nbreak;\ncase 27: case 28: case 31:\n this.$=$$[$0]; \nbreak;\ncase 30:\n $$[$0-2].push($$[$0]); this.$ = $$[$0-2]; \nbreak;\ncase 32:\n this.$=$$[$0].replace(/\"/g, ''); \nbreak;\ncase 33:\n\n        this.$ = { cardA: $$[$0], relType: $$[$0-1], cardB: $$[$0-2] };\n        /*console.log('relSpec: ' + $$[$0] + $$[$0-1] + $$[$0-2]);*/\n      \nbreak;\ncase 34:\n this.$ = yy.Cardinality.ZERO_OR_ONE; \nbreak;\ncase 35:\n this.$ = yy.Cardinality.ZERO_OR_MORE; \nbreak;\ncase 36:\n this.$ = yy.Cardinality.ONE_OR_MORE; \nbreak;\ncase 37:\n this.$ = yy.Cardinality.ONLY_ONE; \nbreak;\ncase 38:\n this.$ = yy.Cardinality.MD_PARENT; \nbreak;\ncase 39:\n this.$ = yy.Identification.NON_IDENTIFYING;  \nbreak;\ncase 40:\n this.$ = yy.Identification.IDENTIFYING; \nbreak;\n}\n},\ntable: [{3:1,4:[1,2]},{1:[3]},o($V0,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:9,20:$V1,22:$V2,24:$V3,26:$V4,27:$V5,28:$V6},o($V0,[2,7],{1:[2,1]}),o($V0,[2,3]),{9:16,11:9,20:$V1,22:$V2,24:$V3,26:$V4,27:$V5,28:$V6},o($V0,[2,5]),o($V0,[2,6]),o($V0,[2,11],{12:17,39:20,15:[1,18],18:[1,19],41:$V7,42:$V8,43:$V9,44:$Va,45:$Vb}),{21:[1,26]},{23:[1,27]},{25:[1,28]},o($V0,[2,18]),o($Vc,[2,19]),o($Vc,[2,20]),o($V0,[2,4]),{11:29,27:$V5,28:$V6},{16:30,17:[1,31],29:32,30:33,34:$Vd},{11:35,27:$V5,28:$V6},{40:36,46:[1,37],47:[1,38]},o($Ve,[2,34]),o($Ve,[2,35]),o($Ve,[2,36]),o($Ve,[2,37]),o($Ve,[2,38]),o($V0,[2,15]),o($V0,[2,16]),o($V0,[2,17]),{13:[1,39]},{17:[1,40]},o($V0,[2,10]),{16:41,17:[2,21],29:32,30:33,34:$Vd},{31:42,34:[1,43]},{34:[2,27]},{19:[1,44]},{39:45,41:$V7,42:$V8,43:$V9,44:$Va,45:$Vb},o($Vf,[2,39]),o($Vf,[2,40]),{14:46,27:[1,49],28:[1,48],48:[1,47]},o($V0,[2,9]),{17:[2,22]},o($Vg,[2,23],{32:50,33:51,35:52,37:$Vh,38:$Vi}),o([17,34,37,38],[2,28]),o($V0,[2,14],{15:[1,55]}),o([27,28],[2,33]),o($V0,[2,8]),o($V0,[2,41]),o($V0,[2,42]),o($V0,[2,43]),o($Vg,[2,24],{33:56,36:[1,57],38:$Vi}),o($Vg,[2,25]),o($Vj,[2,29]),o($Vg,[2,32]),o($Vj,[2,31]),{16:58,17:[1,59],29:32,30:33,34:$Vd},o($Vg,[2,26]),{35:60,37:$Vh},{17:[1,61]},o($V0,[2,13]),o($Vj,[2,30]),o($V0,[2,12])],\ndefaultActions: {34:[2,27],41:[2,22]},\nparseError: function parseError (str, hash) {\n    if (hash.recoverable) {\n        this.trace(str);\n    } else {\n        var error = new Error(str);\n        error.hash = hash;\n        throw error;\n    }\n},\nparse: function parse(input) {\n    var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\n    var args = lstack.slice.call(arguments, 1);\n    var lexer = Object.create(this.lexer);\n    var sharedState = { yy: {} };\n    for (var k in this.yy) {\n        if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n            sharedState.yy[k] = this.yy[k];\n        }\n    }\n    lexer.setInput(input, sharedState.yy);\n    sharedState.yy.lexer = lexer;\n    sharedState.yy.parser = this;\n    if (typeof lexer.yylloc == 'undefined') {\n        lexer.yylloc = {};\n    }\n    var yyloc = lexer.yylloc;\n    lstack.push(yyloc);\n    var ranges = lexer.options && lexer.options.ranges;\n    if (typeof sharedState.yy.parseError === 'function') {\n        this.parseError = sharedState.yy.parseError;\n    } else {\n        this.parseError = Object.getPrototypeOf(this).parseError;\n    }\n    function popStack(n) {\n        stack.length = stack.length - 2 * n;\n        vstack.length = vstack.length - n;\n        lstack.length = lstack.length - n;\n    }\n            function lex() {\n            var token;\n            token = tstack.pop() || lexer.lex() || EOF;\n            if (typeof token !== 'number') {\n                if (token instanceof Array) {\n                    tstack = token;\n                    token = tstack.pop();\n                }\n                token = self.symbols_[token] || token;\n            }\n            return token;\n        }\n    var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\n    while (true) {\n        state = stack[stack.length - 1];\n        if (this.defaultActions[state]) {\n            action = this.defaultActions[state];\n        } else {\n            if (symbol === null || typeof symbol == 'undefined') {\n                symbol = lex();\n            }\n            action = table[state] && table[state][symbol];\n        }\n        if (typeof action === 'undefined' || !action.length || !action[0]) {\n            var errStr = '';\n            expected = [];\n            for (p in table[state]) {\n                if (this.terminals_[p] && p > TERROR) {\n                    expected.push('\\'' + this.terminals_[p] + '\\'');\n                }\n            }\n            if (lexer.showPosition) {\n                errStr = 'Parse error on line ' + (yylineno + 1) + ':\\n' + lexer.showPosition() + '\\nExpecting ' + expected.join(', ') + ', got \\'' + (this.terminals_[symbol] || symbol) + '\\'';\n            } else {\n                errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\\'' + (this.terminals_[symbol] || symbol) + '\\'');\n            }\n            this.parseError(errStr, {\n                text: lexer.match,\n                token: this.terminals_[symbol] || symbol,\n                line: lexer.yylineno,\n                loc: yyloc,\n                expected: expected\n            });\n        }\n        if (action[0] instanceof Array && action.length > 1) {\n            throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\n        }\n        switch (action[0]) {\n        case 1:\n            stack.push(symbol);\n            vstack.push(lexer.yytext);\n            lstack.push(lexer.yylloc);\n            stack.push(action[1]);\n            symbol = null;\n            if (!preErrorSymbol) {\n                yyleng = lexer.yyleng;\n                yytext = lexer.yytext;\n                yylineno = lexer.yylineno;\n                yyloc = lexer.yylloc;\n                if (recovering > 0) {\n                    recovering--;\n                }\n            } else {\n                symbol = preErrorSymbol;\n                preErrorSymbol = null;\n            }\n            break;\n        case 2:\n            len = this.productions_[action[1]][1];\n            yyval.$ = vstack[vstack.length - len];\n            yyval._$ = {\n                first_line: lstack[lstack.length - (len || 1)].first_line,\n                last_line: lstack[lstack.length - 1].last_line,\n                first_column: lstack[lstack.length - (len || 1)].first_column,\n                last_column: lstack[lstack.length - 1].last_column\n            };\n            if (ranges) {\n                yyval._$.range = [\n                    lstack[lstack.length - (len || 1)].range[0],\n                    lstack[lstack.length - 1].range[1]\n                ];\n            }\n            r = this.performAction.apply(yyval, [\n                yytext,\n                yyleng,\n                yylineno,\n                sharedState.yy,\n                action[1],\n                vstack,\n                lstack\n            ].concat(args));\n            if (typeof r !== 'undefined') {\n                return r;\n            }\n            if (len) {\n                stack = stack.slice(0, -1 * len * 2);\n                vstack = vstack.slice(0, -1 * len);\n                lstack = lstack.slice(0, -1 * len);\n            }\n            stack.push(this.productions_[action[1]][0]);\n            vstack.push(yyval.$);\n            lstack.push(yyval._$);\n            newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n            stack.push(newState);\n            break;\n        case 3:\n            return true;\n        }\n    }\n    return true;\n}};\n\n/* generated by jison-lex 0.3.4 */\nvar lexer = (function(){\nvar lexer = ({\n\nEOF:1,\n\nparseError:function parseError(str, hash) {\n        if (this.yy.parser) {\n            this.yy.parser.parseError(str, hash);\n        } else {\n            throw new Error(str);\n        }\n    },\n\n// resets the lexer, sets new input\nsetInput:function (input, yy) {\n        this.yy = yy || this.yy || {};\n        this._input = input;\n        this._more = this._backtrack = this.done = false;\n        this.yylineno = this.yyleng = 0;\n        this.yytext = this.matched = this.match = '';\n        this.conditionStack = ['INITIAL'];\n        this.yylloc = {\n            first_line: 1,\n            first_column: 0,\n            last_line: 1,\n            last_column: 0\n        };\n        if (this.options.ranges) {\n            this.yylloc.range = [0,0];\n        }\n        this.offset = 0;\n        return this;\n    },\n\n// consumes and returns one char from the input\ninput:function () {\n        var ch = this._input[0];\n        this.yytext += ch;\n        this.yyleng++;\n        this.offset++;\n        this.match += ch;\n        this.matched += ch;\n        var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n        if (lines) {\n            this.yylineno++;\n            this.yylloc.last_line++;\n        } else {\n            this.yylloc.last_column++;\n        }\n        if (this.options.ranges) {\n            this.yylloc.range[1]++;\n        }\n\n        this._input = this._input.slice(1);\n        return ch;\n    },\n\n// unshifts one char (or a string) into the input\nunput:function (ch) {\n        var len = ch.length;\n        var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\n        this._input = ch + this._input;\n        this.yytext = this.yytext.substr(0, this.yytext.length - len);\n        //this.yyleng -= len;\n        this.offset -= len;\n        var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n        this.match = this.match.substr(0, this.match.length - 1);\n        this.matched = this.matched.substr(0, this.matched.length - 1);\n\n        if (lines.length - 1) {\n            this.yylineno -= lines.length - 1;\n        }\n        var r = this.yylloc.range;\n\n        this.yylloc = {\n            first_line: this.yylloc.first_line,\n            last_line: this.yylineno + 1,\n            first_column: this.yylloc.first_column,\n            last_column: lines ?\n                (lines.length === oldLines.length ? this.yylloc.first_column : 0)\n                 + oldLines[oldLines.length - lines.length].length - lines[0].length :\n              this.yylloc.first_column - len\n        };\n\n        if (this.options.ranges) {\n            this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n        }\n        this.yyleng = this.yytext.length;\n        return this;\n    },\n\n// When called from action, caches matched text and appends it on next action\nmore:function () {\n        this._more = true;\n        return this;\n    },\n\n// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\nreject:function () {\n        if (this.options.backtrack_lexer) {\n            this._backtrack = true;\n        } else {\n            return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n' + this.showPosition(), {\n                text: \"\",\n                token: null,\n                line: this.yylineno\n            });\n\n        }\n        return this;\n    },\n\n// retain first n characters of the match\nless:function (n) {\n        this.unput(this.match.slice(n));\n    },\n\n// displays already matched input, i.e. for error messages\npastInput:function () {\n        var past = this.matched.substr(0, this.matched.length - this.match.length);\n        return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\\n/g, \"\");\n    },\n\n// displays upcoming input, i.e. for error messages\nupcomingInput:function () {\n        var next = this.match;\n        if (next.length < 20) {\n            next += this._input.substr(0, 20-next.length);\n        }\n        return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, \"\");\n    },\n\n// displays the character position where the lexing error occurred, i.e. for error messages\nshowPosition:function () {\n        var pre = this.pastInput();\n        var c = new Array(pre.length + 1).join(\"-\");\n        return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n    },\n\n// test the lexed token: return FALSE when not a match, otherwise return token\ntest_match:function(match, indexed_rule) {\n        var token,\n            lines,\n            backup;\n\n        if (this.options.backtrack_lexer) {\n            // save context\n            backup = {\n                yylineno: this.yylineno,\n                yylloc: {\n                    first_line: this.yylloc.first_line,\n                    last_line: this.last_line,\n                    first_column: this.yylloc.first_column,\n                    last_column: this.yylloc.last_column\n                },\n                yytext: this.yytext,\n                match: this.match,\n                matches: this.matches,\n                matched: this.matched,\n                yyleng: this.yyleng,\n                offset: this.offset,\n                _more: this._more,\n                _input: this._input,\n                yy: this.yy,\n                conditionStack: this.conditionStack.slice(0),\n                done: this.done\n            };\n            if (this.options.ranges) {\n                backup.yylloc.range = this.yylloc.range.slice(0);\n            }\n        }\n\n        lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n        if (lines) {\n            this.yylineno += lines.length;\n        }\n        this.yylloc = {\n            first_line: this.yylloc.last_line,\n            last_line: this.yylineno + 1,\n            first_column: this.yylloc.last_column,\n            last_column: lines ?\n                         lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length :\n                         this.yylloc.last_column + match[0].length\n        };\n        this.yytext += match[0];\n        this.match += match[0];\n        this.matches = match;\n        this.yyleng = this.yytext.length;\n        if (this.options.ranges) {\n            this.yylloc.range = [this.offset, this.offset += this.yyleng];\n        }\n        this._more = false;\n        this._backtrack = false;\n        this._input = this._input.slice(match[0].length);\n        this.matched += match[0];\n        token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n        if (this.done && this._input) {\n            this.done = false;\n        }\n        if (token) {\n            return token;\n        } else if (this._backtrack) {\n            // recover context\n            for (var k in backup) {\n                this[k] = backup[k];\n            }\n            return false; // rule action called reject() implying the next rule should be tested instead.\n        }\n        return false;\n    },\n\n// return next match in input\nnext:function () {\n        if (this.done) {\n            return this.EOF;\n        }\n        if (!this._input) {\n            this.done = true;\n        }\n\n        var token,\n            match,\n            tempMatch,\n            index;\n        if (!this._more) {\n            this.yytext = '';\n            this.match = '';\n        }\n        var rules = this._currentRules();\n        for (var i = 0; i < rules.length; i++) {\n            tempMatch = this._input.match(this.rules[rules[i]]);\n            if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n                match = tempMatch;\n                index = i;\n                if (this.options.backtrack_lexer) {\n                    token = this.test_match(tempMatch, rules[i]);\n                    if (token !== false) {\n                        return token;\n                    } else if (this._backtrack) {\n                        match = false;\n                        continue; // rule action called reject() implying a rule MISmatch.\n                    } else {\n                        // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n                        return false;\n                    }\n                } else if (!this.options.flex) {\n                    break;\n                }\n            }\n        }\n        if (match) {\n            token = this.test_match(match, rules[index]);\n            if (token !== false) {\n                return token;\n            }\n            // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n            return false;\n        }\n        if (this._input === \"\") {\n            return this.EOF;\n        } else {\n            return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\n                text: \"\",\n                token: null,\n                line: this.yylineno\n            });\n        }\n    },\n\n// return next match that has a token\nlex:function lex () {\n        var r = this.next();\n        if (r) {\n            return r;\n        } else {\n            return this.lex();\n        }\n    },\n\n// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\nbegin:function begin (condition) {\n        this.conditionStack.push(condition);\n    },\n\n// pop the previously active lexer condition state off the condition stack\npopState:function popState () {\n        var n = this.conditionStack.length - 1;\n        if (n > 0) {\n            return this.conditionStack.pop();\n        } else {\n            return this.conditionStack[0];\n        }\n    },\n\n// produce the lexer rule set which is active for the currently active lexer condition state\n_currentRules:function _currentRules () {\n        if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n            return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n        } else {\n            return this.conditions[\"INITIAL\"].rules;\n        }\n    },\n\n// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\ntopState:function topState (n) {\n        n = this.conditionStack.length - 1 - Math.abs(n || 0);\n        if (n >= 0) {\n            return this.conditionStack[n];\n        } else {\n            return \"INITIAL\";\n        }\n    },\n\n// alias for begin(condition)\npushState:function pushState (condition) {\n        this.begin(condition);\n    },\n\n// return the number of states currently on the stack\nstateStackSize:function stateStackSize() {\n        return this.conditionStack.length;\n    },\noptions: {\"case-insensitive\":true},\nperformAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {\nvar YYSTATE=YY_START;\nswitch($avoiding_name_collisions) {\ncase 0: this.begin(\"acc_title\");return 22; \nbreak;\ncase 1: this.popState(); return \"acc_title_value\"; \nbreak;\ncase 2: this.begin(\"acc_descr\");return 24; \nbreak;\ncase 3: this.popState(); return \"acc_descr_value\"; \nbreak;\ncase 4: this.begin(\"acc_descr_multiline\");\nbreak;\ncase 5: this.popState(); \nbreak;\ncase 6:return \"acc_descr_multiline_value\";\nbreak;\ncase 7:return 10;\nbreak;\ncase 8:/* skip whitespace */\nbreak;\ncase 9:return 8;\nbreak;\ncase 10:return 28;\nbreak;\ncase 11:return 48;\nbreak;\ncase 12:return 4;\nbreak;\ncase 13: this.begin(\"block\"); return 15; \nbreak;\ncase 14:return 36;\nbreak;\ncase 15:/* skip whitespace in block */\nbreak;\ncase 16:return 37\nbreak;\ncase 17:return 34;\nbreak;\ncase 18:return 34\nbreak;\ncase 19:return 38;\nbreak;\ncase 20:/* nothing */\nbreak;\ncase 21: this.popState(); return 17; \nbreak;\ncase 22:return yy_.yytext[0];\nbreak;\ncase 23:return 18;\nbreak;\ncase 24:return 19;\nbreak;\ncase 25:return 41;\nbreak;\ncase 26:return 43;\nbreak;\ncase 27:return 43;\nbreak;\ncase 28:return 43;\nbreak;\ncase 29:return 41;\nbreak;\ncase 30:return 41;\nbreak;\ncase 31:return 42;\nbreak;\ncase 32:return 42;\nbreak;\ncase 33:return 42;\nbreak;\ncase 34:return 42;\nbreak;\ncase 35:return 42;\nbreak;\ncase 36:return 43;\nbreak;\ncase 37:return 42;\nbreak;\ncase 38:return 43;\nbreak;\ncase 39:return 44;\nbreak;\ncase 40:return 44;\nbreak;\ncase 41:return 44;\nbreak;\ncase 42:return 44;\nbreak;\ncase 43:return 41;\nbreak;\ncase 44:return 42;\nbreak;\ncase 45:return 43;\nbreak;\ncase 46:return 45;\nbreak;\ncase 47:return 46;\nbreak;\ncase 48:return 47;\nbreak;\ncase 49:return 47;\nbreak;\ncase 50:return 46;\nbreak;\ncase 51:return 46;\nbreak;\ncase 52:return 46;\nbreak;\ncase 53:return 27;\nbreak;\ncase 54:return yy_.yytext[0];\nbreak;\ncase 55:return 6;\nbreak;\n}\n},\nrules: [/^(?:accTitle\\s*:\\s*)/i,/^(?:(?!\\n||)*[^\\n]*)/i,/^(?:accDescr\\s*:\\s*)/i,/^(?:(?!\\n||)*[^\\n]*)/i,/^(?:accDescr\\s*\\{\\s*)/i,/^(?:[\\}])/i,/^(?:[^\\}]*)/i,/^(?:[\\n]+)/i,/^(?:\\s+)/i,/^(?:[\\s]+)/i,/^(?:\"[^\"%\\r\\n\\v\\b\\\\]+\")/i,/^(?:\"[^\"]*\")/i,/^(?:erDiagram\\b)/i,/^(?:\\{)/i,/^(?:,)/i,/^(?:\\s+)/i,/^(?:\\b((?:PK)|(?:FK)|(?:UK))\\b)/i,/^(?:(.*?)[~](.*?)*[~])/i,/^(?:[\\*A-Za-z_][A-Za-z0-9\\-_\\[\\]\\(\\)]*)/i,/^(?:\"[^\"]*\")/i,/^(?:[\\n]+)/i,/^(?:\\})/i,/^(?:.)/i,/^(?:\\[)/i,/^(?:\\])/i,/^(?:one or zero\\b)/i,/^(?:one or more\\b)/i,/^(?:one or many\\b)/i,/^(?:1\\+)/i,/^(?:\\|o\\b)/i,/^(?:zero or one\\b)/i,/^(?:zero or more\\b)/i,/^(?:zero or many\\b)/i,/^(?:0\\+)/i,/^(?:\\}o\\b)/i,/^(?:many\\(0\\))/i,/^(?:many\\(1\\))/i,/^(?:many\\b)/i,/^(?:\\}\\|)/i,/^(?:one\\b)/i,/^(?:only one\\b)/i,/^(?:1\\b)/i,/^(?:\\|\\|)/i,/^(?:o\\|)/i,/^(?:o\\{)/i,/^(?:\\|\\{)/i,/^(?:\\s*u\\b)/i,/^(?:\\.\\.)/i,/^(?:--)/i,/^(?:to\\b)/i,/^(?:optionally to\\b)/i,/^(?:\\.-)/i,/^(?:-\\.)/i,/^(?:[A-Za-z_][A-Za-z0-9\\-_]*)/i,/^(?:.)/i,/^(?:$)/i],\nconditions: {\"acc_descr_multiline\":{\"rules\":[5,6],\"inclusive\":false},\"acc_descr\":{\"rules\":[3],\"inclusive\":false},\"acc_title\":{\"rules\":[1],\"inclusive\":false},\"block\":{\"rules\":[14,15,16,17,18,19,20,21,22],\"inclusive\":false},\"INITIAL\":{\"rules\":[0,2,4,7,8,9,10,11,12,13,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55],\"inclusive\":true}}\n});\nreturn lexer;\n})();\nparser.lexer = lexer;\nfunction Parser () {\n  this.yy = {};\n}\nParser.prototype = parser;parser.Parser = Parser;\nreturn new Parser;\n})(); \n\tparser.parser = parser;\n\texport { parser };\n\texport default parser;\n\t", "import { log } from '../../logger.js';\nimport { getConfig } from '../../diagram-api/diagramAPI.js';\n\nimport {\n  setAccTitle,\n  getAccTitle,\n  getAccDescription,\n  setAccDescription,\n  clear as commonClear,\n  setDiagramTitle,\n  getDiagramTitle,\n} from '../common/commonDb.js';\n\nlet entities = new Map();\nlet relationships = [];\n\nconst Cardinality = {\n  ZERO_OR_ONE: 'ZERO_OR_ONE',\n  ZERO_OR_MORE: 'ZERO_OR_MORE',\n  ONE_OR_MORE: 'ONE_OR_MORE',\n  ONLY_ONE: 'ONLY_ONE',\n  MD_PARENT: 'MD_PARENT',\n};\n\nconst Identification = {\n  NON_IDENTIFYING: 'NON_IDENTIFYING',\n  IDENTIFYING: 'IDENTIFYING',\n};\n/**\n * Add entity\n * @param {string} name - The name of the entity\n * @param {string | undefined} alias - The alias of the entity\n */\nconst addEntity = function (name, alias = undefined) {\n  if (!entities.has(name)) {\n    entities.set(name, { attributes: [], alias });\n    log.info('Added new entity :', name);\n  } else if (!entities.get(name).alias && alias) {\n    entities.get(name).alias = alias;\n    log.info(`Add alias '${alias}' to entity '${name}'`);\n  }\n\n  return entities.get(name);\n};\n\nconst getEntities = () => entities;\n\nconst addAttributes = function (entityName, attribs) {\n  let entity = addEntity(entityName); // May do nothing (if entity has already been added)\n\n  // Process attribs in reverse order due to effect of recursive construction (last attribute is first)\n  let i;\n  for (i = attribs.length - 1; i >= 0; i--) {\n    entity.attributes.push(attribs[i]);\n    log.debug('Added attribute ', attribs[i].attributeName);\n  }\n};\n\n/**\n * Add a relationship\n *\n * @param entA The first entity in the relationship\n * @param rolA The role played by the first entity in relation to the second\n * @param entB The second entity in the relationship\n * @param rSpec The details of the relationship between the two entities\n */\nconst addRelationship = function (entA, rolA, entB, rSpec) {\n  let rel = {\n    entityA: entA,\n    roleA: rolA,\n    entityB: entB,\n    relSpec: rSpec,\n  };\n\n  relationships.push(rel);\n  log.debug('Added new relationship :', rel);\n};\n\nconst getRelationships = () => relationships;\n\nconst clear = function () {\n  entities = new Map();\n  relationships = [];\n  commonClear();\n};\n\nexport default {\n  Cardinality,\n  Identification,\n  getConfig: () => getConfig().er,\n  addEntity,\n  addAttributes,\n  getEntities,\n  addRelationship,\n  getRelationships,\n  clear,\n  setAccTitle,\n  getAccTitle,\n  setAccDescription,\n  getAccDescription,\n  setDiagramTitle,\n  getDiagramTitle,\n};\n", "import * as graphlib from 'dagre-d3-es/src/graphlib/index.js';\nimport { line, curveBasis, select } from 'd3';\nimport { layout as dagreLayout } from 'dagre-d3-es/src/dagre/index.js';\nimport { getConfig } from '../../diagram-api/diagramAPI.js';\nimport { log } from '../../logger.js';\nimport utils from '../../utils.js';\nimport erMarkers from './erMarkers.js';\nimport { configureSvgSize } from '../../setupGraphViewbox.js';\nimport { parseGenericTypes } from '../common/common.js';\nimport { v5 as uuid5 } from 'uuid';\n\n/** Regex used to remove chars from the entity name so the result can be used in an id */\nconst BAD_ID_CHARS_REGEXP = /[^\\dA-Za-z](\\W)*/g;\n\n// Configuration\nlet conf = {};\n\n// Map so we can look up the id of an entity based on the name\nlet entityNameIds = new Map();\n\n/**\n * Allows the top-level API module to inject config specific to this renderer, storing it in the\n * local conf object. Note that generic config still needs to be retrieved using getConfig()\n * imported from the config module\n *\n * @param cnf\n */\nexport const setConf = function (cnf) {\n  const keys = Object.keys(cnf);\n  for (const key of keys) {\n    conf[key] = cnf[key];\n  }\n};\n\n/**\n * Draw attributes for an entity\n *\n * @param groupNode The svg group node for the entity\n * @param entityTextNode The svg node for the entity label text\n * @param attributes An array of attributes defined for the entity (each attribute has a type and a\n *   name)\n * @returns {object} The bounding box of the entity, after attributes have been added. The bounding\n *   box has a .width and .height\n */\nconst drawAttributes = (groupNode, entityTextNode, attributes) => {\n  const heightPadding = conf.entityPadding / 3; // Padding internal to attribute boxes\n  const widthPadding = conf.entityPadding / 3; // Ditto\n  const attrFontSize = conf.fontSize * 0.85;\n  const labelBBox = entityTextNode.node().getBBox();\n  const attributeNodes = []; // Intermediate storage for attribute nodes created so that we can do a second pass\n  let hasKeyType = false;\n  let hasComment = false;\n  let maxTypeWidth = 0;\n  let maxNameWidth = 0;\n  let maxKeyWidth = 0;\n  let maxCommentWidth = 0;\n  let cumulativeHeight = labelBBox.height + heightPadding * 2;\n  let attrNum = 1;\n\n  // Check to see if any of the attributes has a key or a comment\n  attributes.forEach((item) => {\n    if (item.attributeKeyTypeList !== undefined && item.attributeKeyTypeList.length > 0) {\n      hasKeyType = true;\n    }\n\n    if (item.attributeComment !== undefined) {\n      hasComment = true;\n    }\n  });\n\n  attributes.forEach((item) => {\n    const attrPrefix = `${entityTextNode.node().id}-attr-${attrNum}`;\n    let nodeHeight = 0;\n\n    const attributeType = parseGenericTypes(item.attributeType);\n\n    // Add a text node for the attribute type\n    const typeNode = groupNode\n      .append('text')\n      .classed('er entityLabel', true)\n      .attr('id', `${attrPrefix}-type`)\n      .attr('x', 0)\n      .attr('y', 0)\n      .style('dominant-baseline', 'middle')\n      .style('text-anchor', 'left')\n      .style('font-family', getConfig().fontFamily)\n      .style('font-size', attrFontSize + 'px')\n      .text(attributeType);\n\n    // Add a text node for the attribute name\n    const nameNode = groupNode\n      .append('text')\n      .classed('er entityLabel', true)\n      .attr('id', `${attrPrefix}-name`)\n      .attr('x', 0)\n      .attr('y', 0)\n      .style('dominant-baseline', 'middle')\n      .style('text-anchor', 'left')\n      .style('font-family', getConfig().fontFamily)\n      .style('font-size', attrFontSize + 'px')\n      .text(item.attributeName);\n\n    const attributeNode = {};\n    attributeNode.tn = typeNode;\n    attributeNode.nn = nameNode;\n\n    const typeBBox = typeNode.node().getBBox();\n    const nameBBox = nameNode.node().getBBox();\n    maxTypeWidth = Math.max(maxTypeWidth, typeBBox.width);\n    maxNameWidth = Math.max(maxNameWidth, nameBBox.width);\n\n    nodeHeight = Math.max(typeBBox.height, nameBBox.height);\n\n    if (hasKeyType) {\n      const keyTypeNodeText =\n        item.attributeKeyTypeList !== undefined ? item.attributeKeyTypeList.join(',') : '';\n\n      const keyTypeNode = groupNode\n        .append('text')\n        .classed('er entityLabel', true)\n        .attr('id', `${attrPrefix}-key`)\n        .attr('x', 0)\n        .attr('y', 0)\n        .style('dominant-baseline', 'middle')\n        .style('text-anchor', 'left')\n        .style('font-family', getConfig().fontFamily)\n        .style('font-size', attrFontSize + 'px')\n        .text(keyTypeNodeText);\n\n      attributeNode.kn = keyTypeNode;\n      const keyTypeBBox = keyTypeNode.node().getBBox();\n      maxKeyWidth = Math.max(maxKeyWidth, keyTypeBBox.width);\n      nodeHeight = Math.max(nodeHeight, keyTypeBBox.height);\n    }\n\n    if (hasComment) {\n      const commentNode = groupNode\n        .append('text')\n        .classed('er entityLabel', true)\n        .attr('id', `${attrPrefix}-comment`)\n        .attr('x', 0)\n        .attr('y', 0)\n        .style('dominant-baseline', 'middle')\n        .style('text-anchor', 'left')\n        .style('font-family', getConfig().fontFamily)\n        .style('font-size', attrFontSize + 'px')\n        .text(item.attributeComment || '');\n\n      attributeNode.cn = commentNode;\n      const commentNodeBBox = commentNode.node().getBBox();\n      maxCommentWidth = Math.max(maxCommentWidth, commentNodeBBox.width);\n      nodeHeight = Math.max(nodeHeight, commentNodeBBox.height);\n    }\n\n    attributeNode.height = nodeHeight;\n    // Keep a reference to the nodes so that we can iterate through them later\n    attributeNodes.push(attributeNode);\n    cumulativeHeight += nodeHeight + heightPadding * 2;\n    attrNum += 1;\n  });\n\n  let widthPaddingFactor = 4;\n  if (hasKeyType) {\n    widthPaddingFactor += 2;\n  }\n  if (hasComment) {\n    widthPaddingFactor += 2;\n  }\n\n  const maxWidth = maxTypeWidth + maxNameWidth + maxKeyWidth + maxCommentWidth;\n\n  // Calculate the new bounding box of the overall entity, now that attributes have been added\n  const bBox = {\n    width: Math.max(\n      conf.minEntityWidth,\n      Math.max(\n        labelBBox.width + conf.entityPadding * 2,\n        maxWidth + widthPadding * widthPaddingFactor\n      )\n    ),\n    height:\n      attributes.length > 0\n        ? cumulativeHeight\n        : Math.max(conf.minEntityHeight, labelBBox.height + conf.entityPadding * 2),\n  };\n\n  if (attributes.length > 0) {\n    // There might be some spare width for padding out attributes if the entity name is very long\n    const spareColumnWidth = Math.max(\n      0,\n      (bBox.width - maxWidth - widthPadding * widthPaddingFactor) / (widthPaddingFactor / 2)\n    );\n\n    // Position the entity label near the top of the entity bounding box\n    entityTextNode.attr(\n      'transform',\n      'translate(' + bBox.width / 2 + ',' + (heightPadding + labelBBox.height / 2) + ')'\n    );\n\n    // Add rectangular boxes for the attribute types/names\n    let heightOffset = labelBBox.height + heightPadding * 2; // Start at the bottom of the entity label\n    let attribStyle = 'attributeBoxOdd'; // We will flip the style on alternate rows to achieve a banded effect\n\n    attributeNodes.forEach((attributeNode) => {\n      // Calculate the alignment y coordinate for the type/name of the attribute\n      const alignY = heightOffset + heightPadding + attributeNode.height / 2;\n\n      // Position the type attribute\n      attributeNode.tn.attr('transform', 'translate(' + widthPadding + ',' + alignY + ')');\n\n      // TODO Handle spareWidth in attr('width')\n      // Insert a rectangle for the type\n      const typeRect = groupNode\n        .insert('rect', '#' + attributeNode.tn.node().id)\n        .classed(`er ${attribStyle}`, true)\n        .attr('x', 0)\n        .attr('y', heightOffset)\n        .attr('width', maxTypeWidth + widthPadding * 2 + spareColumnWidth)\n        .attr('height', attributeNode.height + heightPadding * 2);\n\n      const nameXOffset = parseFloat(typeRect.attr('x')) + parseFloat(typeRect.attr('width'));\n\n      // Position the name attribute\n      attributeNode.nn.attr(\n        'transform',\n        'translate(' + (nameXOffset + widthPadding) + ',' + alignY + ')'\n      );\n\n      // Insert a rectangle for the name\n      const nameRect = groupNode\n        .insert('rect', '#' + attributeNode.nn.node().id)\n        .classed(`er ${attribStyle}`, true)\n        .attr('x', nameXOffset)\n        .attr('y', heightOffset)\n        .attr('width', maxNameWidth + widthPadding * 2 + spareColumnWidth)\n        .attr('height', attributeNode.height + heightPadding * 2);\n\n      let keyTypeAndCommentXOffset =\n        parseFloat(nameRect.attr('x')) + parseFloat(nameRect.attr('width'));\n\n      if (hasKeyType) {\n        // Position the key type attribute\n        attributeNode.kn.attr(\n          'transform',\n          'translate(' + (keyTypeAndCommentXOffset + widthPadding) + ',' + alignY + ')'\n        );\n\n        // Insert a rectangle for the key type\n        const keyTypeRect = groupNode\n          .insert('rect', '#' + attributeNode.kn.node().id)\n          .classed(`er ${attribStyle}`, true)\n          .attr('x', keyTypeAndCommentXOffset)\n          .attr('y', heightOffset)\n          .attr('width', maxKeyWidth + widthPadding * 2 + spareColumnWidth)\n          .attr('height', attributeNode.height + heightPadding * 2);\n\n        keyTypeAndCommentXOffset =\n          parseFloat(keyTypeRect.attr('x')) + parseFloat(keyTypeRect.attr('width'));\n      }\n\n      if (hasComment) {\n        // Position the comment attribute\n        attributeNode.cn.attr(\n          'transform',\n          'translate(' + (keyTypeAndCommentXOffset + widthPadding) + ',' + alignY + ')'\n        );\n\n        // Insert a rectangle for the comment\n        groupNode\n          .insert('rect', '#' + attributeNode.cn.node().id)\n          .classed(`er ${attribStyle}`, 'true')\n          .attr('x', keyTypeAndCommentXOffset)\n          .attr('y', heightOffset)\n          .attr('width', maxCommentWidth + widthPadding * 2 + spareColumnWidth)\n          .attr('height', attributeNode.height + heightPadding * 2);\n      }\n\n      // Increment the height offset to move to the next row\n      heightOffset += attributeNode.height + heightPadding * 2;\n\n      // Flip the attribute style for row banding\n      attribStyle = attribStyle === 'attributeBoxOdd' ? 'attributeBoxEven' : 'attributeBoxOdd';\n    });\n  } else {\n    // Ensure the entity box is a decent size without any attributes\n    bBox.height = Math.max(conf.minEntityHeight, cumulativeHeight);\n\n    // Position the entity label in the middle of the box\n    entityTextNode.attr('transform', 'translate(' + bBox.width / 2 + ',' + bBox.height / 2 + ')');\n  }\n\n  return bBox;\n};\n\n/**\n * Use D3 to construct the svg elements for the entities\n *\n * @param svgNode The svg node that contains the diagram\n * @param {Map} entities The entities to be drawn\n * @param graph The graph that contains the vertex and edge definitions post-layout\n * @returns {object} The first entity that was inserted\n */\nconst drawEntities = function (svgNode, entities, graph) {\n  const keys = [...entities.keys()];\n  let firstOne;\n\n  keys.forEach(function (entityName) {\n    const entityId = generateId(entityName, 'entity');\n    entityNameIds.set(entityName, entityId);\n\n    // Create a group for each entity\n    const groupNode = svgNode.append('g').attr('id', entityId);\n\n    firstOne = firstOne === undefined ? entityId : firstOne;\n\n    // Label the entity - this is done first so that we can get the bounding box\n    // which then determines the size of the rectangle\n    const textId = 'text-' + entityId;\n    const textNode = groupNode\n      .append('text')\n      .classed('er entityLabel', true)\n      .attr('id', textId)\n      .attr('x', 0)\n      .attr('y', 0)\n      .style('dominant-baseline', 'middle')\n      .style('text-anchor', 'middle')\n      .style('font-family', getConfig().fontFamily)\n      .style('font-size', conf.fontSize + 'px')\n      .text(entities.get(entityName).alias ?? entityName);\n\n    const { width: entityWidth, height: entityHeight } = drawAttributes(\n      groupNode,\n      textNode,\n      entities.get(entityName).attributes\n    );\n\n    // Draw the rectangle - insert it before the text so that the text is not obscured\n    const rectNode = groupNode\n      .insert('rect', '#' + textId)\n      .classed('er entityBox', true)\n      .attr('x', 0)\n      .attr('y', 0)\n      .attr('width', entityWidth)\n      .attr('height', entityHeight);\n\n    const rectBBox = rectNode.node().getBBox();\n\n    // Add the entity to the graph using the entityId\n    graph.setNode(entityId, {\n      width: rectBBox.width,\n      height: rectBBox.height,\n      shape: 'rect',\n      id: entityId,\n    });\n  });\n  return firstOne;\n}; // drawEntities\n\nconst adjustEntities = function (svgNode, graph) {\n  graph.nodes().forEach(function (v) {\n    if (v !== undefined && graph.node(v) !== undefined) {\n      svgNode\n        .select('#' + v)\n        .attr(\n          'transform',\n          'translate(' +\n            (graph.node(v).x - graph.node(v).width / 2) +\n            ',' +\n            (graph.node(v).y - graph.node(v).height / 2) +\n            ' )'\n        );\n    }\n  });\n};\n\n/**\n * Construct a name for an edge based on the names of the 2 entities and the role (relationship)\n * between them. Remove any spaces from it\n *\n * @param rel - A (parsed) relationship (e.g. one of the objects in the list returned by\n *   erDb.getRelationships)\n * @returns {string}\n */\nconst getEdgeName = function (rel) {\n  return (rel.entityA + rel.roleA + rel.entityB).replace(/\\s/g, '');\n};\n\n/**\n * Add each relationship to the graph\n *\n * @param relationships The relationships to be added\n * @param g The graph\n * @returns {Array} The array of relationships\n */\nconst addRelationships = function (relationships, g) {\n  relationships.forEach(function (r) {\n    g.setEdge(\n      entityNameIds.get(r.entityA),\n      entityNameIds.get(r.entityB),\n      { relationship: r },\n      getEdgeName(r)\n    );\n  });\n  return relationships;\n}; // addRelationships\n\nlet relCnt = 0;\n/**\n * Draw a relationship using edge information from the graph\n *\n * @param svg The svg node\n * @param rel The relationship to draw in the svg\n * @param g The graph containing the edge information\n * @param insert The insertion point in the svg DOM (because relationships have markers that need to\n *   sit 'behind' opaque entity boxes)\n * @param diagObj\n */\nconst drawRelationshipFromLayout = function (svg, rel, g, insert, diagObj) {\n  relCnt++;\n\n  // Find the edge relating to this relationship\n  const edge = g.edge(\n    entityNameIds.get(rel.entityA),\n    entityNameIds.get(rel.entityB),\n    getEdgeName(rel)\n  );\n\n  // Get a function that will generate the line path\n  const lineFunction = line()\n    .x(function (d) {\n      return d.x;\n    })\n    .y(function (d) {\n      return d.y;\n    })\n    .curve(curveBasis);\n\n  // Insert the line at the right place\n  const svgPath = svg\n    .insert('path', '#' + insert)\n    .classed('er relationshipLine', true)\n    .attr('d', lineFunction(edge.points))\n    .style('stroke', conf.stroke)\n    .style('fill', 'none');\n\n  // ...and with dashes if necessary\n  if (rel.relSpec.relType === diagObj.db.Identification.NON_IDENTIFYING) {\n    svgPath.attr('stroke-dasharray', '8,8');\n  }\n\n  // TODO: Understand this better\n  let url = '';\n  if (conf.arrowMarkerAbsolute) {\n    url =\n      window.location.protocol +\n      '//' +\n      window.location.host +\n      window.location.pathname +\n      window.location.search;\n    url = url.replace(/\\(/g, '\\\\(');\n    url = url.replace(/\\)/g, '\\\\)');\n  }\n\n  // Decide which start and end markers it needs. It may be possible to be more concise here\n  // by reversing a start marker to make an end marker...but this will do for now\n\n  // Note that the 'A' entity's marker is at the end of the relationship and the 'B' entity's marker is at the start\n  switch (rel.relSpec.cardA) {\n    case diagObj.db.Cardinality.ZERO_OR_ONE:\n      svgPath.attr('marker-end', 'url(' + url + '#' + erMarkers.ERMarkers.ZERO_OR_ONE_END + ')');\n      break;\n    case diagObj.db.Cardinality.ZERO_OR_MORE:\n      svgPath.attr('marker-end', 'url(' + url + '#' + erMarkers.ERMarkers.ZERO_OR_MORE_END + ')');\n      break;\n    case diagObj.db.Cardinality.ONE_OR_MORE:\n      svgPath.attr('marker-end', 'url(' + url + '#' + erMarkers.ERMarkers.ONE_OR_MORE_END + ')');\n      break;\n    case diagObj.db.Cardinality.ONLY_ONE:\n      svgPath.attr('marker-end', 'url(' + url + '#' + erMarkers.ERMarkers.ONLY_ONE_END + ')');\n      break;\n    case diagObj.db.Cardinality.MD_PARENT:\n      svgPath.attr('marker-end', 'url(' + url + '#' + erMarkers.ERMarkers.MD_PARENT_END + ')');\n      break;\n  }\n\n  switch (rel.relSpec.cardB) {\n    case diagObj.db.Cardinality.ZERO_OR_ONE:\n      svgPath.attr(\n        'marker-start',\n        'url(' + url + '#' + erMarkers.ERMarkers.ZERO_OR_ONE_START + ')'\n      );\n      break;\n    case diagObj.db.Cardinality.ZERO_OR_MORE:\n      svgPath.attr(\n        'marker-start',\n        'url(' + url + '#' + erMarkers.ERMarkers.ZERO_OR_MORE_START + ')'\n      );\n      break;\n    case diagObj.db.Cardinality.ONE_OR_MORE:\n      svgPath.attr(\n        'marker-start',\n        'url(' + url + '#' + erMarkers.ERMarkers.ONE_OR_MORE_START + ')'\n      );\n      break;\n    case diagObj.db.Cardinality.ONLY_ONE:\n      svgPath.attr('marker-start', 'url(' + url + '#' + erMarkers.ERMarkers.ONLY_ONE_START + ')');\n      break;\n    case diagObj.db.Cardinality.MD_PARENT:\n      svgPath.attr('marker-start', 'url(' + url + '#' + erMarkers.ERMarkers.MD_PARENT_START + ')');\n      break;\n  }\n\n  // Now label the relationship\n\n  // Find the half-way point\n  const len = svgPath.node().getTotalLength();\n  const labelPoint = svgPath.node().getPointAtLength(len * 0.5);\n\n  // Append a text node containing the label\n  const labelId = 'rel' + relCnt;\n\n  const labelText = rel.roleA.split(/
/g);\n\n const labelNode = svg\n .append('text')\n .classed('er relationshipLabel', true)\n .attr('id', labelId)\n .attr('x', labelPoint.x)\n .attr('y', labelPoint.y)\n .style('text-anchor', 'middle')\n .style('dominant-baseline', 'middle')\n .style('font-family', getConfig().fontFamily)\n .style('font-size', conf.fontSize + 'px');\n\n if (labelText.length == 1) {\n labelNode.text(rel.roleA);\n } else {\n const firstShift = -(labelText.length - 1) * 0.5;\n labelText.forEach((txt, i) => {\n labelNode\n .append('tspan')\n .attr('x', labelPoint.x)\n .attr('dy', `${i === 0 ? firstShift : 1}em`)\n .text(txt);\n });\n }\n\n // Figure out how big the opaque 'container' rectangle needs to be\n const labelBBox = labelNode.node().getBBox();\n\n // Insert the opaque rectangle before the text label\n svg\n .insert('rect', '#' + labelId)\n .classed('er relationshipLabelBox', true)\n .attr('x', labelPoint.x - labelBBox.width / 2)\n .attr('y', labelPoint.y - labelBBox.height / 2)\n .attr('width', labelBBox.width)\n .attr('height', labelBBox.height);\n};\n\n/**\n * Draw en E-R diagram in the tag with id: id based on the text definition of the diagram\n *\n * @param text The text of the diagram\n * @param id The unique id of the DOM node that contains the diagram\n * @param _version\n * @param diagObj\n */\nexport const draw = function (text, id, _version, diagObj) {\n conf = getConfig().er;\n log.info('Drawing ER diagram');\n const securityLevel = getConfig().securityLevel;\n // Handle root and Document for when rendering in sandbox mode\n let sandboxElement;\n if (securityLevel === 'sandbox') {\n sandboxElement = select('#i' + id);\n }\n const root =\n securityLevel === 'sandbox'\n ? select(sandboxElement.nodes()[0].contentDocument.body)\n : select('body');\n // const doc = securityLevel === 'sandbox' ? sandboxElement.nodes()[0].contentDocument : document;\n\n // Get a reference to the svg node that contains the text\n const svg = root.select(`[id='${id}']`);\n\n // Add cardinality marker definitions to the svg\n erMarkers.insertMarkers(svg, conf);\n\n // Now we have to construct the diagram in a specific way:\n // ---\n // 1. Create all the entities in the svg node at 0,0, but with the correct dimensions (allowing for text content)\n // 2. Make sure they are all added to the graph\n // 3. Add all the edges (relationships) to the graph as well\n // 4. Let dagre do its magic to lay out the graph. This assigns:\n // - the centre coordinates for each node, bearing in mind the dimensions and edge relationships\n // - the path coordinates for each edge\n // But it has no impact on the svg child nodes - the diagram remains with every entity rooted at 0,0\n // 5. Now assign a transform to each entity in the svg node so that it gets drawn in the correct place, as determined by\n // its centre point, which is obtained from the graph, and it's width and height\n // 6. And finally, create all the edges in the svg node using information from the graph\n // ---\n\n // Create the graph\n let g;\n\n // TODO: Explore directed vs undirected graphs, and how the layout is affected\n // An E-R diagram could be said to be undirected, but there is merit in setting\n // the direction from parent to child in a one-to-many as this influences graphlib to\n // put the parent above the child (does it?), which is intuitive. Most relationships\n // in ER diagrams are one-to-many.\n g = new graphlib.Graph({\n multigraph: true,\n directed: true,\n compound: false,\n })\n .setGraph({\n rankdir: conf.layoutDirection,\n marginx: 20,\n marginy: 20,\n nodesep: 100,\n edgesep: 100,\n ranksep: 100,\n })\n .setDefaultEdgeLabel(function () {\n return {};\n });\n\n // Draw the entities (at 0,0), returning the first svg node that got\n // inserted - this represents the insertion point for relationship paths\n const firstEntity = drawEntities(svg, diagObj.db.getEntities(), g);\n\n // TODO: externalize the addition of entities to the graph - it's a bit 'buried' in the above\n\n // Add all the relationships to the graph\n const relationships = addRelationships(diagObj.db.getRelationships(), g);\n\n dagreLayout(g); // Node and edge positions will be updated\n\n // Adjust the positions of the entities so that they adhere to the layout\n adjustEntities(svg, g);\n\n // Draw the relationships\n relationships.forEach(function (rel) {\n drawRelationshipFromLayout(svg, rel, g, firstEntity, diagObj);\n });\n\n const padding = conf.diagramPadding;\n\n utils.insertTitle(svg, 'entityTitleText', conf.titleTopMargin, diagObj.db.getDiagramTitle());\n\n const svgBounds = svg.node().getBBox();\n const width = svgBounds.width + padding * 2;\n const height = svgBounds.height + padding * 2;\n\n configureSvgSize(svg, height, width, conf.useMaxWidth);\n\n svg.attr('viewBox', `${svgBounds.x - padding} ${svgBounds.y - padding} ${width} ${height}`);\n}; // draw\n\n/**\n * UUID namespace for ER diagram IDs\n *\n * This can be generated via running:\n *\n * ```js\n * const { v5: uuid5 } = await import('uuid');\n * uuid5(\n * 'https://mermaid-js.github.io/mermaid/syntax/entityRelationshipDiagram.html',\n * uuid5.URL\n * );\n * ```\n */\nconst MERMAID_ERDIAGRAM_UUID = '28e9f9db-3c8d-5aa5-9faf-44286ae5937c';\n\n/**\n * Return a unique id based on the given string. Start with the prefix, then a hyphen, then the\n * simplified str, then a hyphen, then a unique uuid based on the str. (Hyphens are only included if needed.)\n * Although the official XML standard for ids says that many more characters are valid in the id,\n * this keeps things simple by accepting only A-Za-z0-9.\n *\n * @param {string} str Given string to use as the basis for the id. Default is `''`\n * @param {string} prefix String to put at the start, followed by '-'. Default is `''`\n * @returns {string}\n * @see https://www.w3.org/TR/xml/#NT-Name\n */\nexport function generateId(str = '', prefix = '') {\n const simplifiedStr = str.replace(BAD_ID_CHARS_REGEXP, '');\n // we use `uuid v5` so that UUIDs are consistent given a string.\n return `${strWithHyphen(prefix)}${strWithHyphen(simplifiedStr)}${uuid5(\n str,\n MERMAID_ERDIAGRAM_UUID\n )}`;\n}\n\n/**\n * Append a hyphen to a string only if the string isn't empty\n *\n * @param {string} str\n * @returns {string}\n * @todo This could be moved into a string utility file/class.\n */\nfunction strWithHyphen(str = '') {\n return str.length > 0 ? `${str}-` : '';\n}\n\nexport default {\n setConf,\n draw,\n};\n", "const ERMarkers = {\n ONLY_ONE_START: 'ONLY_ONE_START',\n ONLY_ONE_END: 'ONLY_ONE_END',\n ZERO_OR_ONE_START: 'ZERO_OR_ONE_START',\n ZERO_OR_ONE_END: 'ZERO_OR_ONE_END',\n ONE_OR_MORE_START: 'ONE_OR_MORE_START',\n ONE_OR_MORE_END: 'ONE_OR_MORE_END',\n ZERO_OR_MORE_START: 'ZERO_OR_MORE_START',\n ZERO_OR_MORE_END: 'ZERO_OR_MORE_END',\n MD_PARENT_END: 'MD_PARENT_END',\n MD_PARENT_START: 'MD_PARENT_START',\n};\n\n/**\n * Put the markers into the svg DOM for later use with edge paths\n *\n * @param elem\n * @param conf\n */\nconst insertMarkers = function (elem, conf) {\n let marker;\n\n elem\n .append('defs')\n .append('marker')\n .attr('id', ERMarkers.MD_PARENT_START)\n .attr('refX', 0)\n .attr('refY', 7)\n .attr('markerWidth', 190)\n .attr('markerHeight', 240)\n .attr('orient', 'auto')\n .append('path')\n .attr('d', 'M 18,7 L9,13 L1,7 L9,1 Z');\n\n elem\n .append('defs')\n .append('marker')\n .attr('id', ERMarkers.MD_PARENT_END)\n .attr('refX', 19)\n .attr('refY', 7)\n .attr('markerWidth', 20)\n .attr('markerHeight', 28)\n .attr('orient', 'auto')\n .append('path')\n .attr('d', 'M 18,7 L9,13 L1,7 L9,1 Z');\n\n elem\n .append('defs')\n .append('marker')\n .attr('id', ERMarkers.ONLY_ONE_START)\n .attr('refX', 0)\n .attr('refY', 9)\n .attr('markerWidth', 18)\n .attr('markerHeight', 18)\n .attr('orient', 'auto')\n .append('path')\n .attr('stroke', conf.stroke)\n .attr('fill', 'none')\n .attr('d', 'M9,0 L9,18 M15,0 L15,18');\n\n elem\n .append('defs')\n .append('marker')\n .attr('id', ERMarkers.ONLY_ONE_END)\n .attr('refX', 18)\n .attr('refY', 9)\n .attr('markerWidth', 18)\n .attr('markerHeight', 18)\n .attr('orient', 'auto')\n .append('path')\n .attr('stroke', conf.stroke)\n .attr('fill', 'none')\n .attr('d', 'M3,0 L3,18 M9,0 L9,18');\n\n marker = elem\n .append('defs')\n .append('marker')\n .attr('id', ERMarkers.ZERO_OR_ONE_START)\n .attr('refX', 0)\n .attr('refY', 9)\n .attr('markerWidth', 30)\n .attr('markerHeight', 18)\n .attr('orient', 'auto');\n marker\n .append('circle')\n .attr('stroke', conf.stroke)\n .attr('fill', 'white')\n .attr('cx', 21)\n .attr('cy', 9)\n .attr('r', 6);\n marker.append('path').attr('stroke', conf.stroke).attr('fill', 'none').attr('d', 'M9,0 L9,18');\n\n marker = elem\n .append('defs')\n .append('marker')\n .attr('id', ERMarkers.ZERO_OR_ONE_END)\n .attr('refX', 30)\n .attr('refY', 9)\n .attr('markerWidth', 30)\n .attr('markerHeight', 18)\n .attr('orient', 'auto');\n marker\n .append('circle')\n .attr('stroke', conf.stroke)\n .attr('fill', 'white')\n .attr('cx', 9)\n .attr('cy', 9)\n .attr('r', 6);\n marker.append('path').attr('stroke', conf.stroke).attr('fill', 'none').attr('d', 'M21,0 L21,18');\n\n elem\n .append('defs')\n .append('marker')\n .attr('id', ERMarkers.ONE_OR_MORE_START)\n .attr('refX', 18)\n .attr('refY', 18)\n .attr('markerWidth', 45)\n .attr('markerHeight', 36)\n .attr('orient', 'auto')\n .append('path')\n .attr('stroke', conf.stroke)\n .attr('fill', 'none')\n .attr('d', 'M0,18 Q 18,0 36,18 Q 18,36 0,18 M42,9 L42,27');\n\n elem\n .append('defs')\n .append('marker')\n .attr('id', ERMarkers.ONE_OR_MORE_END)\n .attr('refX', 27)\n .attr('refY', 18)\n .attr('markerWidth', 45)\n .attr('markerHeight', 36)\n .attr('orient', 'auto')\n .append('path')\n .attr('stroke', conf.stroke)\n .attr('fill', 'none')\n .attr('d', 'M3,9 L3,27 M9,18 Q27,0 45,18 Q27,36 9,18');\n\n marker = elem\n .append('defs')\n .append('marker')\n .attr('id', ERMarkers.ZERO_OR_MORE_START)\n .attr('refX', 18)\n .attr('refY', 18)\n .attr('markerWidth', 57)\n .attr('markerHeight', 36)\n .attr('orient', 'auto');\n marker\n .append('circle')\n .attr('stroke', conf.stroke)\n .attr('fill', 'white')\n .attr('cx', 48)\n .attr('cy', 18)\n .attr('r', 6);\n marker\n .append('path')\n .attr('stroke', conf.stroke)\n .attr('fill', 'none')\n .attr('d', 'M0,18 Q18,0 36,18 Q18,36 0,18');\n\n marker = elem\n .append('defs')\n .append('marker')\n .attr('id', ERMarkers.ZERO_OR_MORE_END)\n .attr('refX', 39)\n .attr('refY', 18)\n .attr('markerWidth', 57)\n .attr('markerHeight', 36)\n .attr('orient', 'auto');\n marker\n .append('circle')\n .attr('stroke', conf.stroke)\n .attr('fill', 'white')\n .attr('cx', 9)\n .attr('cy', 18)\n .attr('r', 6);\n marker\n .append('path')\n .attr('stroke', conf.stroke)\n .attr('fill', 'none')\n .attr('d', 'M21,18 Q39,0 57,18 Q39,36 21,18');\n\n return;\n};\n\nexport default {\n ERMarkers,\n insertMarkers,\n};\n", "const getStyles = (options) =>\n `\n .entityBox {\n fill: ${options.mainBkg};\n stroke: ${options.nodeBorder};\n }\n\n .attributeBoxOdd {\n fill: ${options.attributeBackgroundColorOdd};\n stroke: ${options.nodeBorder};\n }\n\n .attributeBoxEven {\n fill: ${options.attributeBackgroundColorEven};\n stroke: ${options.nodeBorder};\n }\n\n .relationshipLabelBox {\n fill: ${options.tertiaryColor};\n opacity: 0.7;\n background-color: ${options.tertiaryColor};\n rect {\n opacity: 0.5;\n }\n }\n\n .relationshipLine {\n stroke: ${options.lineColor};\n }\n\n .entityTitleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ${options.textColor};\n } \n #MD_PARENT_START {\n fill: #f5f5f5 !important;\n stroke: ${options.lineColor} !important;\n stroke-width: 1;\n }\n #MD_PARENT_END {\n fill: #f5f5f5 !important;\n stroke: ${options.lineColor} !important;\n stroke-width: 1;\n }\n \n`;\n\nexport default getStyles;\n", "// @ts-ignore: TODO: Fix ts errors\nimport erParser from './parser/erDiagram.jison';\nimport erDb from './erDb.js';\nimport erRenderer from './erRenderer.js';\nimport erStyles from './styles.js';\n\nexport const diagram = {\n parser: erParser,\n db: erDb,\n renderer: erRenderer,\n styles: erStyles,\n};\n"], "mappings": ";;;;;;;;;;;;;;;;;;;AAyEA,IAAI,SAAU,WAAU;AACxB,MAAI,IAAE,gCAAS,GAAE,GAAEA,IAAE,GAAE;AAAC,SAAIA,KAAEA,MAAG,CAAC,GAAE,IAAE,EAAE,QAAO,KAAIA,GAAE,EAAE,CAAC,CAAC,IAAE,EAAE;AAAC,WAAOA;AAAA,EAAC,GAAhE,MAAkE,MAAI,CAAC,GAAE,GAAE,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,EAAE,GAAE,MAAI,CAAC,GAAE,EAAE,GAAE,MAAI,CAAC,GAAE,EAAE,GAAE,MAAI,CAAC,GAAE,EAAE,GAAE,MAAI,CAAC,GAAE,EAAE,GAAE,MAAI,CAAC,GAAE,EAAE,GAAE,MAAI,CAAC,GAAE,EAAE,GAAE,MAAI,CAAC,GAAE,EAAE,GAAE,MAAI,CAAC,GAAE,EAAE,GAAE,MAAI,CAAC,GAAE,EAAE,GAAE,MAAI,CAAC,GAAE,EAAE,GAAE,MAAI,CAAC,GAAE,EAAE,GAAE,MAAI,CAAC,GAAE,GAAE,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,EAAE,GAAE,MAAI,CAAC,GAAE,EAAE,GAAE,MAAI,CAAC,IAAG,IAAG,IAAG,EAAE,GAAE,MAAI,CAAC,IAAG,IAAG,IAAG,IAAG,EAAE,GAAE,MAAI,CAAC,IAAG,EAAE,GAAE,MAAI,CAAC,GAAE,EAAE,GAAE,MAAI,CAAC,GAAE,EAAE,GAAE,MAAI,CAAC,IAAG,IAAG,IAAG,EAAE;AAC9X,MAAIC,UAAS;AAAA,IAAC,OAAO,gCAAS,QAAS;AAAA,IAAE,GAApB;AAAA,IACrB,IAAI,CAAC;AAAA,IACL,UAAU,EAAC,SAAQ,GAAE,SAAQ,GAAE,cAAa,GAAE,YAAW,GAAE,OAAM,GAAE,QAAO,GAAE,SAAQ,GAAE,aAAY,GAAE,WAAU,IAAG,cAAa,IAAG,WAAU,IAAG,KAAI,IAAG,QAAO,IAAG,eAAc,IAAG,cAAa,IAAG,cAAa,IAAG,OAAM,IAAG,OAAM,IAAG,SAAQ,IAAG,eAAc,IAAG,aAAY,IAAG,mBAAkB,IAAG,aAAY,IAAG,mBAAkB,IAAG,6BAA4B,IAAG,YAAW,IAAG,eAAc,IAAG,aAAY,IAAG,iBAAgB,IAAG,iBAAgB,IAAG,wBAAuB,IAAG,oBAAmB,IAAG,kBAAiB,IAAG,oBAAmB,IAAG,SAAQ,IAAG,iBAAgB,IAAG,WAAU,IAAG,eAAc,IAAG,WAAU,IAAG,eAAc,IAAG,gBAAe,IAAG,eAAc,IAAG,YAAW,IAAG,aAAY,IAAG,mBAAkB,IAAG,eAAc,IAAG,QAAO,IAAG,WAAU,GAAE,QAAO,EAAC;AAAA,IACjvB,YAAY,EAAC,GAAE,SAAQ,GAAE,cAAa,GAAE,OAAM,GAAE,SAAQ,IAAG,WAAU,IAAG,KAAI,IAAG,eAAc,IAAG,cAAa,IAAG,OAAM,IAAG,OAAM,IAAG,SAAQ,IAAG,eAAc,IAAG,aAAY,IAAG,mBAAkB,IAAG,aAAY,IAAG,mBAAkB,IAAG,6BAA4B,IAAG,YAAW,IAAG,eAAc,IAAG,kBAAiB,IAAG,SAAQ,IAAG,iBAAgB,IAAG,WAAU,IAAG,eAAc,IAAG,gBAAe,IAAG,eAAc,IAAG,YAAW,IAAG,aAAY,IAAG,mBAAkB,IAAG,eAAc,IAAG,OAAM;AAAA,IAChe,cAAc,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,GAAE,CAAC,IAAG,CAAC,CAAC;AAAA,IAC3S,eAAe,gCAAS,UAAU,QAAQ,QAAQ,UAAU,IAAI,SAAyB,IAAiB,IAAiB;AAG3H,UAAI,KAAK,GAAG,SAAS;AACrB,cAAQ,SAAS;AAAA,QACjB,KAAK;AAEL;AAAA,QACA,KAAK;AACJ,eAAK,IAAI,CAAC;AACX;AAAA,QACA,KAAK;AACL,aAAG,KAAG,CAAC,EAAE,KAAK,GAAG,EAAE,CAAC;AAAE,eAAK,IAAI,GAAG,KAAG,CAAC;AACtC;AAAA,QACA,KAAK;AAAA,QAAG,KAAK;AACZ,eAAK,IAAI,GAAG,EAAE;AACf;AAAA,QACA,KAAK;AAAA,QAAG,KAAK;AACZ,eAAK,IAAE,CAAC;AACT;AAAA,QACA,KAAK;AAEK,aAAG,UAAU,GAAG,KAAG,CAAC,CAAC;AACrB,aAAG,UAAU,GAAG,KAAG,CAAC,CAAC;AACrB,aAAG,gBAAgB,GAAG,KAAG,CAAC,GAAG,GAAG,EAAE,GAAG,GAAG,KAAG,CAAC,GAAG,GAAG,KAAG,CAAC,CAAC;AAEjE;AAAA,QACA,KAAK;AAEK,aAAG,UAAU,GAAG,KAAG,CAAC,CAAC;AACrB,aAAG,cAAc,GAAG,KAAG,CAAC,GAAG,GAAG,KAAG,CAAC,CAAC;AAE7C;AAAA,QACA,KAAK;AACJ,aAAG,UAAU,GAAG,KAAG,CAAC,CAAC;AACtB;AAAA,QACA,KAAK;AACJ,aAAG,UAAU,GAAG,EAAE,CAAC;AACpB;AAAA,QACA,KAAK;AAEK,aAAG,UAAU,GAAG,KAAG,CAAC,GAAG,GAAG,KAAG,CAAC,CAAC;AAC/B,aAAG,cAAc,GAAG,KAAG,CAAC,GAAG,GAAG,KAAG,CAAC,CAAC;AAE7C;AAAA,QACA,KAAK;AACJ,aAAG,UAAU,GAAG,KAAG,CAAC,GAAG,GAAG,KAAG,CAAC,CAAC;AAChC;AAAA,QACA,KAAK;AACJ,aAAG,UAAU,GAAG,KAAG,CAAC,GAAG,GAAG,KAAG,CAAC,CAAC;AAChC;AAAA,QACA,KAAK;AAAA,QAAI,KAAK;AACb,eAAK,IAAE,GAAG,EAAE,EAAE,KAAK;AAAE,aAAG,YAAY,KAAK,CAAC;AAC3C;AAAA,QACA,KAAK;AAAA,QAAI,KAAK;AACb,eAAK,IAAE,GAAG,EAAE,EAAE,KAAK;AAAE,aAAG,kBAAkB,KAAK,CAAC;AACjD;AAAA,QACA,KAAK;AAAA,QAAI,KAAK;AACb,eAAK,IAAI,GAAG,EAAE;AACf;AAAA,QACA,KAAK;AAAA,QAAI,KAAK;AAAA,QAAI,KAAK;AACtB,eAAK,IAAI,GAAG,EAAE,EAAE,QAAQ,MAAM,EAAE;AACjC;AAAA,QACA,KAAK;AAAA,QAAI,KAAK;AACb,eAAK,IAAI,CAAC,GAAG,EAAE,CAAC;AACjB;AAAA,QACA,KAAK;AACJ,aAAG,EAAE,EAAE,KAAK,GAAG,KAAG,CAAC,CAAC;AAAG,eAAK,IAAE,GAAG,EAAE;AACpC;AAAA,QACA,KAAK;AACJ,eAAK,IAAI,EAAE,eAAe,GAAG,KAAG,CAAC,GAAG,eAAe,GAAG,EAAE,EAAE;AAC3D;AAAA,QACA,KAAK;AACJ,eAAK,IAAI,EAAE,eAAe,GAAG,KAAG,CAAC,GAAG,eAAe,GAAG,KAAG,CAAC,GAAG,sBAAsB,GAAG,EAAE,EAAE;AAC3F;AAAA,QACA,KAAK;AACJ,eAAK,IAAI,EAAE,eAAe,GAAG,KAAG,CAAC,GAAG,eAAe,GAAG,KAAG,CAAC,GAAG,kBAAkB,GAAG,EAAE,EAAE;AACvF;AAAA,QACA,KAAK;AACJ,eAAK,IAAI,EAAE,eAAe,GAAG,KAAG,CAAC,GAAG,eAAe,GAAG,KAAG,CAAC,GAAG,sBAAsB,GAAG,KAAG,CAAC,GAAG,kBAAkB,GAAG,EAAE,EAAE;AACvH;AAAA,QACA,KAAK;AAAA,QAAI,KAAK;AAAA,QAAI,KAAK;AACtB,eAAK,IAAE,GAAG,EAAE;AACb;AAAA,QACA,KAAK;AACJ,aAAG,KAAG,CAAC,EAAE,KAAK,GAAG,EAAE,CAAC;AAAG,eAAK,IAAI,GAAG,KAAG,CAAC;AACxC;AAAA,QACA,KAAK;AACJ,eAAK,IAAE,GAAG,EAAE,EAAE,QAAQ,MAAM,EAAE;AAC/B;AAAA,QACA,KAAK;AAEG,eAAK,IAAI,EAAE,OAAO,GAAG,EAAE,GAAG,SAAS,GAAG,KAAG,CAAC,GAAG,OAAO,GAAG,KAAG,CAAC,EAAE;AAGrE;AAAA,QACA,KAAK;AACJ,eAAK,IAAI,GAAG,YAAY;AACzB;AAAA,QACA,KAAK;AACJ,eAAK,IAAI,GAAG,YAAY;AACzB;AAAA,QACA,KAAK;AACJ,eAAK,IAAI,GAAG,YAAY;AACzB;AAAA,QACA,KAAK;AACJ,eAAK,IAAI,GAAG,YAAY;AACzB;AAAA,QACA,KAAK;AACJ,eAAK,IAAI,GAAG,YAAY;AACzB;AAAA,QACA,KAAK;AACJ,eAAK,IAAI,GAAG,eAAe;AAC5B;AAAA,QACA,KAAK;AACJ,eAAK,IAAI,GAAG,eAAe;AAC5B;AAAA,MACA;AAAA,IACA,GAtHe;AAAA,IAuHf,OAAO,CAAC,EAAC,GAAE,GAAE,GAAE,CAAC,GAAE,CAAC,EAAC,GAAE,EAAC,GAAE,CAAC,CAAC,EAAC,GAAE,EAAE,KAAI,CAAC,GAAE,CAAC,GAAE,EAAC,GAAE,EAAC,CAAC,GAAE,EAAC,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,GAAE,IAAG,CAAC,GAAE,CAAC,GAAE,IAAG,GAAE,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,IAAG,GAAE,EAAE,KAAI,CAAC,GAAE,CAAC,GAAE,EAAC,GAAE,CAAC,GAAE,CAAC,EAAC,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,CAAC,CAAC,GAAE,EAAC,GAAE,IAAG,IAAG,GAAE,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,IAAG,GAAE,EAAE,KAAI,CAAC,GAAE,CAAC,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,CAAC,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,GAAE,EAAC,IAAG,IAAG,IAAG,IAAG,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,IAAG,CAAC,GAAE,EAAC,IAAG,CAAC,GAAE,EAAE,EAAC,GAAE,EAAC,IAAG,CAAC,GAAE,EAAE,EAAC,GAAE,EAAC,IAAG,CAAC,GAAE,EAAE,EAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,CAAC,CAAC,GAAE,EAAC,IAAG,IAAG,IAAG,KAAI,IAAG,IAAG,GAAE,EAAC,IAAG,IAAG,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,GAAE,EAAC,IAAG,IAAG,IAAG,KAAI,IAAG,IAAG,GAAE,EAAC,IAAG,IAAG,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,EAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,EAAC,IAAG,CAAC,GAAE,EAAE,EAAC,GAAE,EAAC,IAAG,CAAC,GAAE,EAAE,EAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,EAAC,IAAG,IAAG,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,GAAE,EAAC,IAAG,IAAG,IAAG,CAAC,GAAE,EAAE,EAAC,GAAE,EAAC,IAAG,CAAC,GAAE,EAAE,EAAC,GAAE,EAAC,IAAG,CAAC,GAAE,EAAE,EAAC,GAAE,EAAC,IAAG,IAAG,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,KAAI,IAAG,IAAG,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,EAAC,IAAG,IAAG,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,EAAC,GAAE,EAAE,KAAI,CAAC,GAAE,CAAC,CAAC,GAAE,EAAC,IAAG,CAAC,GAAE,EAAE,EAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,GAAE,EAAC,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,KAAI,IAAG,IAAG,CAAC,GAAE,EAAE,CAAC,IAAG,IAAG,IAAG,EAAE,GAAE,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,GAAE,EAAC,IAAG,CAAC,GAAE,EAAE,EAAC,CAAC,GAAE,EAAE,CAAC,IAAG,EAAE,GAAE,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,CAAC,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,GAAE,EAAC,IAAG,IAAG,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,IAAG,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,EAAC,IAAG,IAAG,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,EAAC,IAAG,IAAG,IAAG,IAAG,GAAE,EAAC,IAAG,CAAC,GAAE,EAAE,EAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,KAAI,CAAC,GAAE,EAAE,CAAC,CAAC;AAAA,IAC9vC,gBAAgB,EAAC,IAAG,CAAC,GAAE,EAAE,GAAE,IAAG,CAAC,GAAE,EAAE,EAAC;AAAA,IACpC,YAAY,gCAAS,WAAY,KAAK,MAAM;AACxC,UAAI,KAAK,aAAa;AAClB,aAAK,MAAM,GAAG;AAAA,MAClB,OAAO;AACH,YAAI,QAAQ,IAAI,MAAM,GAAG;AACzB,cAAM,OAAO;AACb,cAAM;AAAA,MACV;AAAA,IACJ,GARY;AAAA,IASZ,OAAO,gCAAS,MAAM,OAAO;AACzB,UAAI,OAAO,MAAM,QAAQ,CAAC,CAAC,GAAG,SAAS,CAAC,GAAG,SAAS,CAAC,IAAI,GAAG,SAAS,CAAC,GAAG,QAAQ,KAAK,OAAO,SAAS,IAAI,WAAW,GAAG,SAAS,GAAG,aAAa,GAAG,SAAS,GAAG,MAAM;AACtK,UAAI,OAAO,OAAO,MAAM,KAAK,WAAW,CAAC;AACzC,UAAIC,SAAQ,OAAO,OAAO,KAAK,KAAK;AACpC,UAAI,cAAc,EAAE,IAAI,CAAC,EAAE;AAC3B,eAAS,KAAK,KAAK,IAAI;AACnB,YAAI,OAAO,UAAU,eAAe,KAAK,KAAK,IAAI,CAAC,GAAG;AAClD,sBAAY,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC;AAAA,QACjC;AAAA,MACJ;AACA,MAAAA,OAAM,SAAS,OAAO,YAAY,EAAE;AACpC,kBAAY,GAAG,QAAQA;AACvB,kBAAY,GAAG,SAAS;AACxB,UAAI,OAAOA,OAAM,UAAU,aAAa;AACpC,QAAAA,OAAM,SAAS,CAAC;AAAA,MACpB;AACA,UAAI,QAAQA,OAAM;AAClB,aAAO,KAAK,KAAK;AACjB,UAAI,SAASA,OAAM,WAAWA,OAAM,QAAQ;AAC5C,UAAI,OAAO,YAAY,GAAG,eAAe,YAAY;AACjD,aAAK,aAAa,YAAY,GAAG;AAAA,MACrC,OAAO;AACH,aAAK,aAAa,OAAO,eAAe,IAAI,EAAE;AAAA,MAClD;AACA,eAAS,SAAS,GAAG;AACjB,cAAM,SAAS,MAAM,SAAS,IAAI;AAClC,eAAO,SAAS,OAAO,SAAS;AAChC,eAAO,SAAS,OAAO,SAAS;AAAA,MACpC;AAJS;AAKD,eAAS,MAAM;AACf,YAAI;AACJ,gBAAQ,OAAO,IAAI,KAAKA,OAAM,IAAI,KAAK;AACvC,YAAI,OAAO,UAAU,UAAU;AAC3B,cAAI,iBAAiB,OAAO;AACxB,qBAAS;AACT,oBAAQ,OAAO,IAAI;AAAA,UACvB;AACA,kBAAQ,KAAK,SAAS,KAAK,KAAK;AAAA,QACpC;AACA,eAAO;AAAA,MACX;AAXa;AAYjB,UAAI,QAAQ,gBAAgB,OAAO,QAAQ,GAAG,GAAG,QAAQ,CAAC,GAAG,GAAG,KAAK,UAAU;AAC/E,aAAO,MAAM;AACT,gBAAQ,MAAM,MAAM,SAAS,CAAC;AAC9B,YAAI,KAAK,eAAe,KAAK,GAAG;AAC5B,mBAAS,KAAK,eAAe,KAAK;AAAA,QACtC,OAAO;AACH,cAAI,WAAW,QAAQ,OAAO,UAAU,aAAa;AACjD,qBAAS,IAAI;AAAA,UACjB;AACA,mBAAS,MAAM,KAAK,KAAK,MAAM,KAAK,EAAE,MAAM;AAAA,QAChD;AACA,YAAI,OAAO,WAAW,eAAe,CAAC,OAAO,UAAU,CAAC,OAAO,CAAC,GAAG;AAC/D,cAAI,SAAS;AACb,qBAAW,CAAC;AACZ,eAAK,KAAK,MAAM,KAAK,GAAG;AACpB,gBAAI,KAAK,WAAW,CAAC,KAAK,IAAI,QAAQ;AAClC,uBAAS,KAAK,MAAO,KAAK,WAAW,CAAC,IAAI,GAAI;AAAA,YAClD;AAAA,UACJ;AACA,cAAIA,OAAM,cAAc;AACpB,qBAAS,0BAA0B,WAAW,KAAK,QAAQA,OAAM,aAAa,IAAI,iBAAiB,SAAS,KAAK,IAAI,IAAI,aAAc,KAAK,WAAW,MAAM,KAAK,UAAU;AAAA,UAChL,OAAO;AACH,qBAAS,0BAA0B,WAAW,KAAK,mBAAmB,UAAU,MAAM,iBAAiB,OAAQ,KAAK,WAAW,MAAM,KAAK,UAAU;AAAA,UACxJ;AACA,eAAK,WAAW,QAAQ;AAAA,YACpB,MAAMA,OAAM;AAAA,YACZ,OAAO,KAAK,WAAW,MAAM,KAAK;AAAA,YAClC,MAAMA,OAAM;AAAA,YACZ,KAAK;AAAA,YACL;AAAA,UACJ,CAAC;AAAA,QACL;AACA,YAAI,OAAO,CAAC,aAAa,SAAS,OAAO,SAAS,GAAG;AACjD,gBAAM,IAAI,MAAM,sDAAsD,QAAQ,cAAc,MAAM;AAAA,QACtG;AACA,gBAAQ,OAAO,CAAC,GAAG;AAAA,UACnB,KAAK;AACD,kBAAM,KAAK,MAAM;AACjB,mBAAO,KAAKA,OAAM,MAAM;AACxB,mBAAO,KAAKA,OAAM,MAAM;AACxB,kBAAM,KAAK,OAAO,CAAC,CAAC;AACpB,qBAAS;AACT,gBAAI,CAAC,gBAAgB;AACjB,uBAASA,OAAM;AACf,uBAASA,OAAM;AACf,yBAAWA,OAAM;AACjB,sBAAQA,OAAM;AACd,kBAAI,aAAa,GAAG;AAChB;AAAA,cACJ;AAAA,YACJ,OAAO;AACH,uBAAS;AACT,+BAAiB;AAAA,YACrB;AACA;AAAA,UACJ,KAAK;AACD,kBAAM,KAAK,aAAa,OAAO,CAAC,CAAC,EAAE,CAAC;AACpC,kBAAM,IAAI,OAAO,OAAO,SAAS,GAAG;AACpC,kBAAM,KAAK;AAAA,cACP,YAAY,OAAO,OAAO,UAAU,OAAO,EAAE,EAAE;AAAA,cAC/C,WAAW,OAAO,OAAO,SAAS,CAAC,EAAE;AAAA,cACrC,cAAc,OAAO,OAAO,UAAU,OAAO,EAAE,EAAE;AAAA,cACjD,aAAa,OAAO,OAAO,SAAS,CAAC,EAAE;AAAA,YAC3C;AACA,gBAAI,QAAQ;AACR,oBAAM,GAAG,QAAQ;AAAA,gBACb,OAAO,OAAO,UAAU,OAAO,EAAE,EAAE,MAAM,CAAC;AAAA,gBAC1C,OAAO,OAAO,SAAS,CAAC,EAAE,MAAM,CAAC;AAAA,cACrC;AAAA,YACJ;AACA,gBAAI,KAAK,cAAc,MAAM,OAAO;AAAA,cAChC;AAAA,cACA;AAAA,cACA;AAAA,cACA,YAAY;AAAA,cACZ,OAAO,CAAC;AAAA,cACR;AAAA,cACA;AAAA,YACJ,EAAE,OAAO,IAAI,CAAC;AACd,gBAAI,OAAO,MAAM,aAAa;AAC1B,qBAAO;AAAA,YACX;AACA,gBAAI,KAAK;AACL,sBAAQ,MAAM,MAAM,GAAG,KAAK,MAAM,CAAC;AACnC,uBAAS,OAAO,MAAM,GAAG,KAAK,GAAG;AACjC,uBAAS,OAAO,MAAM,GAAG,KAAK,GAAG;AAAA,YACrC;AACA,kBAAM,KAAK,KAAK,aAAa,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;AAC1C,mBAAO,KAAK,MAAM,CAAC;AACnB,mBAAO,KAAK,MAAM,EAAE;AACpB,uBAAW,MAAM,MAAM,MAAM,SAAS,CAAC,CAAC,EAAE,MAAM,MAAM,SAAS,CAAC,CAAC;AACjE,kBAAM,KAAK,QAAQ;AACnB;AAAA,UACJ,KAAK;AACD,mBAAO;AAAA,QACX;AAAA,MACJ;AACA,aAAO;AAAA,IACX,GA3IO;AAAA,EA2IN;AAGD,MAAI,QAAS,2BAAU;AACvB,QAAIA,SAAS;AAAA,MAEb,KAAI;AAAA,MAEJ,YAAW,gCAAS,WAAW,KAAK,MAAM;AAClC,YAAI,KAAK,GAAG,QAAQ;AAChB,eAAK,GAAG,OAAO,WAAW,KAAK,IAAI;AAAA,QACvC,OAAO;AACH,gBAAM,IAAI,MAAM,GAAG;AAAA,QACvB;AAAA,MACJ,GANO;AAAA;AAAA,MASX,UAAS,gCAAU,OAAO,IAAI;AACtB,aAAK,KAAK,MAAM,KAAK,MAAM,CAAC;AAC5B,aAAK,SAAS;AACd,aAAK,QAAQ,KAAK,aAAa,KAAK,OAAO;AAC3C,aAAK,WAAW,KAAK,SAAS;AAC9B,aAAK,SAAS,KAAK,UAAU,KAAK,QAAQ;AAC1C,aAAK,iBAAiB,CAAC,SAAS;AAChC,aAAK,SAAS;AAAA,UACV,YAAY;AAAA,UACZ,cAAc;AAAA,UACd,WAAW;AAAA,UACX,aAAa;AAAA,QACjB;AACA,YAAI,KAAK,QAAQ,QAAQ;AACrB,eAAK,OAAO,QAAQ,CAAC,GAAE,CAAC;AAAA,QAC5B;AACA,aAAK,SAAS;AACd,eAAO;AAAA,MACX,GAlBK;AAAA;AAAA,MAqBT,OAAM,kCAAY;AACV,YAAI,KAAK,KAAK,OAAO,CAAC;AACtB,aAAK,UAAU;AACf,aAAK;AACL,aAAK;AACL,aAAK,SAAS;AACd,aAAK,WAAW;AAChB,YAAI,QAAQ,GAAG,MAAM,iBAAiB;AACtC,YAAI,OAAO;AACP,eAAK;AACL,eAAK,OAAO;AAAA,QAChB,OAAO;AACH,eAAK,OAAO;AAAA,QAChB;AACA,YAAI,KAAK,QAAQ,QAAQ;AACrB,eAAK,OAAO,MAAM,CAAC;AAAA,QACvB;AAEA,aAAK,SAAS,KAAK,OAAO,MAAM,CAAC;AACjC,eAAO;AAAA,MACX,GApBE;AAAA;AAAA,MAuBN,OAAM,gCAAU,IAAI;AACZ,YAAI,MAAM,GAAG;AACb,YAAI,QAAQ,GAAG,MAAM,eAAe;AAEpC,aAAK,SAAS,KAAK,KAAK;AACxB,aAAK,SAAS,KAAK,OAAO,OAAO,GAAG,KAAK,OAAO,SAAS,GAAG;AAE5D,aAAK,UAAU;AACf,YAAI,WAAW,KAAK,MAAM,MAAM,eAAe;AAC/C,aAAK,QAAQ,KAAK,MAAM,OAAO,GAAG,KAAK,MAAM,SAAS,CAAC;AACvD,aAAK,UAAU,KAAK,QAAQ,OAAO,GAAG,KAAK,QAAQ,SAAS,CAAC;AAE7D,YAAI,MAAM,SAAS,GAAG;AAClB,eAAK,YAAY,MAAM,SAAS;AAAA,QACpC;AACA,YAAI,IAAI,KAAK,OAAO;AAEpB,aAAK,SAAS;AAAA,UACV,YAAY,KAAK,OAAO;AAAA,UACxB,WAAW,KAAK,WAAW;AAAA,UAC3B,cAAc,KAAK,OAAO;AAAA,UAC1B,aAAa,SACR,MAAM,WAAW,SAAS,SAAS,KAAK,OAAO,eAAe,KAC5D,SAAS,SAAS,SAAS,MAAM,MAAM,EAAE,SAAS,MAAM,CAAC,EAAE,SAChE,KAAK,OAAO,eAAe;AAAA,QACjC;AAEA,YAAI,KAAK,QAAQ,QAAQ;AACrB,eAAK,OAAO,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,KAAK,SAAS,GAAG;AAAA,QACvD;AACA,aAAK,SAAS,KAAK,OAAO;AAC1B,eAAO;AAAA,MACX,GAhCE;AAAA;AAAA,MAmCN,MAAK,kCAAY;AACT,aAAK,QAAQ;AACb,eAAO;AAAA,MACX,GAHC;AAAA;AAAA,MAML,QAAO,kCAAY;AACX,YAAI,KAAK,QAAQ,iBAAiB;AAC9B,eAAK,aAAa;AAAA,QACtB,OAAO;AACH,iBAAO,KAAK,WAAW,4BAA4B,KAAK,WAAW,KAAK,qIAAqI,KAAK,aAAa,GAAG;AAAA,YAC9N,MAAM;AAAA,YACN,OAAO;AAAA,YACP,MAAM,KAAK;AAAA,UACf,CAAC;AAAA,QAEL;AACA,eAAO;AAAA,MACX,GAZG;AAAA;AAAA,MAeP,MAAK,gCAAU,GAAG;AACV,aAAK,MAAM,KAAK,MAAM,MAAM,CAAC,CAAC;AAAA,MAClC,GAFC;AAAA;AAAA,MAKL,WAAU,kCAAY;AACd,YAAI,OAAO,KAAK,QAAQ,OAAO,GAAG,KAAK,QAAQ,SAAS,KAAK,MAAM,MAAM;AACzE,gBAAQ,KAAK,SAAS,KAAK,QAAM,MAAM,KAAK,OAAO,GAAG,EAAE,QAAQ,OAAO,EAAE;AAAA,MAC7E,GAHM;AAAA;AAAA,MAMV,eAAc,kCAAY;AAClB,YAAI,OAAO,KAAK;AAChB,YAAI,KAAK,SAAS,IAAI;AAClB,kBAAQ,KAAK,OAAO,OAAO,GAAG,KAAG,KAAK,MAAM;AAAA,QAChD;AACA,gBAAQ,KAAK,OAAO,GAAE,EAAE,KAAK,KAAK,SAAS,KAAK,QAAQ,KAAK,QAAQ,OAAO,EAAE;AAAA,MAClF,GANU;AAAA;AAAA,MASd,cAAa,kCAAY;AACjB,YAAI,MAAM,KAAK,UAAU;AACzB,YAAI,IAAI,IAAI,MAAM,IAAI,SAAS,CAAC,EAAE,KAAK,GAAG;AAC1C,eAAO,MAAM,KAAK,cAAc,IAAI,OAAO,IAAI;AAAA,MACnD,GAJS;AAAA;AAAA,MAOb,YAAW,gCAAS,OAAO,cAAc;AACjC,YAAI,OACA,OACA;AAEJ,YAAI,KAAK,QAAQ,iBAAiB;AAE9B,mBAAS;AAAA,YACL,UAAU,KAAK;AAAA,YACf,QAAQ;AAAA,cACJ,YAAY,KAAK,OAAO;AAAA,cACxB,WAAW,KAAK;AAAA,cAChB,cAAc,KAAK,OAAO;AAAA,cAC1B,aAAa,KAAK,OAAO;AAAA,YAC7B;AAAA,YACA,QAAQ,KAAK;AAAA,YACb,OAAO,KAAK;AAAA,YACZ,SAAS,KAAK;AAAA,YACd,SAAS,KAAK;AAAA,YACd,QAAQ,KAAK;AAAA,YACb,QAAQ,KAAK;AAAA,YACb,OAAO,KAAK;AAAA,YACZ,QAAQ,KAAK;AAAA,YACb,IAAI,KAAK;AAAA,YACT,gBAAgB,KAAK,eAAe,MAAM,CAAC;AAAA,YAC3C,MAAM,KAAK;AAAA,UACf;AACA,cAAI,KAAK,QAAQ,QAAQ;AACrB,mBAAO,OAAO,QAAQ,KAAK,OAAO,MAAM,MAAM,CAAC;AAAA,UACnD;AAAA,QACJ;AAEA,gBAAQ,MAAM,CAAC,EAAE,MAAM,iBAAiB;AACxC,YAAI,OAAO;AACP,eAAK,YAAY,MAAM;AAAA,QAC3B;AACA,aAAK,SAAS;AAAA,UACV,YAAY,KAAK,OAAO;AAAA,UACxB,WAAW,KAAK,WAAW;AAAA,UAC3B,cAAc,KAAK,OAAO;AAAA,UAC1B,aAAa,QACA,MAAM,MAAM,SAAS,CAAC,EAAE,SAAS,MAAM,MAAM,SAAS,CAAC,EAAE,MAAM,QAAQ,EAAE,CAAC,EAAE,SAC5E,KAAK,OAAO,cAAc,MAAM,CAAC,EAAE;AAAA,QACpD;AACA,aAAK,UAAU,MAAM,CAAC;AACtB,aAAK,SAAS,MAAM,CAAC;AACrB,aAAK,UAAU;AACf,aAAK,SAAS,KAAK,OAAO;AAC1B,YAAI,KAAK,QAAQ,QAAQ;AACrB,eAAK,OAAO,QAAQ,CAAC,KAAK,QAAQ,KAAK,UAAU,KAAK,MAAM;AAAA,QAChE;AACA,aAAK,QAAQ;AACb,aAAK,aAAa;AAClB,aAAK,SAAS,KAAK,OAAO,MAAM,MAAM,CAAC,EAAE,MAAM;AAC/C,aAAK,WAAW,MAAM,CAAC;AACvB,gBAAQ,KAAK,cAAc,KAAK,MAAM,KAAK,IAAI,MAAM,cAAc,KAAK,eAAe,KAAK,eAAe,SAAS,CAAC,CAAC;AACtH,YAAI,KAAK,QAAQ,KAAK,QAAQ;AAC1B,eAAK,OAAO;AAAA,QAChB;AACA,YAAI,OAAO;AACP,iBAAO;AAAA,QACX,WAAW,KAAK,YAAY;AAExB,mBAAS,KAAK,QAAQ;AAClB,iBAAK,CAAC,IAAI,OAAO,CAAC;AAAA,UACtB;AACA,iBAAO;AAAA,QACX;AACA,eAAO;AAAA,MACX,GArEO;AAAA;AAAA,MAwEX,MAAK,kCAAY;AACT,YAAI,KAAK,MAAM;AACX,iBAAO,KAAK;AAAA,QAChB;AACA,YAAI,CAAC,KAAK,QAAQ;AACd,eAAK,OAAO;AAAA,QAChB;AAEA,YAAI,OACA,OACA,WACA;AACJ,YAAI,CAAC,KAAK,OAAO;AACb,eAAK,SAAS;AACd,eAAK,QAAQ;AAAA,QACjB;AACA,YAAI,QAAQ,KAAK,cAAc;AAC/B,iBAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACnC,sBAAY,KAAK,OAAO,MAAM,KAAK,MAAM,MAAM,CAAC,CAAC,CAAC;AAClD,cAAI,cAAc,CAAC,SAAS,UAAU,CAAC,EAAE,SAAS,MAAM,CAAC,EAAE,SAAS;AAChE,oBAAQ;AACR,oBAAQ;AACR,gBAAI,KAAK,QAAQ,iBAAiB;AAC9B,sBAAQ,KAAK,WAAW,WAAW,MAAM,CAAC,CAAC;AAC3C,kBAAI,UAAU,OAAO;AACjB,uBAAO;AAAA,cACX,WAAW,KAAK,YAAY;AACxB,wBAAQ;AACR;AAAA,cACJ,OAAO;AAEH,uBAAO;AAAA,cACX;AAAA,YACJ,WAAW,CAAC,KAAK,QAAQ,MAAM;AAC3B;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AACA,YAAI,OAAO;AACP,kBAAQ,KAAK,WAAW,OAAO,MAAM,KAAK,CAAC;AAC3C,cAAI,UAAU,OAAO;AACjB,mBAAO;AAAA,UACX;AAEA,iBAAO;AAAA,QACX;AACA,YAAI,KAAK,WAAW,IAAI;AACpB,iBAAO,KAAK;AAAA,QAChB,OAAO;AACH,iBAAO,KAAK,WAAW,4BAA4B,KAAK,WAAW,KAAK,2BAA2B,KAAK,aAAa,GAAG;AAAA,YACpH,MAAM;AAAA,YACN,OAAO;AAAA,YACP,MAAM,KAAK;AAAA,UACf,CAAC;AAAA,QACL;AAAA,MACJ,GAvDC;AAAA;AAAA,MA0DL,KAAI,gCAAS,MAAO;AACZ,YAAI,IAAI,KAAK,KAAK;AAClB,YAAI,GAAG;AACH,iBAAO;AAAA,QACX,OAAO;AACH,iBAAO,KAAK,IAAI;AAAA,QACpB;AAAA,MACJ,GAPA;AAAA;AAAA,MAUJ,OAAM,gCAAS,MAAO,WAAW;AACzB,aAAK,eAAe,KAAK,SAAS;AAAA,MACtC,GAFE;AAAA;AAAA,MAKN,UAAS,gCAAS,WAAY;AACtB,YAAI,IAAI,KAAK,eAAe,SAAS;AACrC,YAAI,IAAI,GAAG;AACP,iBAAO,KAAK,eAAe,IAAI;AAAA,QACnC,OAAO;AACH,iBAAO,KAAK,eAAe,CAAC;AAAA,QAChC;AAAA,MACJ,GAPK;AAAA;AAAA,MAUT,eAAc,gCAAS,gBAAiB;AAChC,YAAI,KAAK,eAAe,UAAU,KAAK,eAAe,KAAK,eAAe,SAAS,CAAC,GAAG;AACnF,iBAAO,KAAK,WAAW,KAAK,eAAe,KAAK,eAAe,SAAS,CAAC,CAAC,EAAE;AAAA,QAChF,OAAO;AACH,iBAAO,KAAK,WAAW,SAAS,EAAE;AAAA,QACtC;AAAA,MACJ,GANU;AAAA;AAAA,MASd,UAAS,gCAAS,SAAU,GAAG;AACvB,YAAI,KAAK,eAAe,SAAS,IAAI,KAAK,IAAI,KAAK,CAAC;AACpD,YAAI,KAAK,GAAG;AACR,iBAAO,KAAK,eAAe,CAAC;AAAA,QAChC,OAAO;AACH,iBAAO;AAAA,QACX;AAAA,MACJ,GAPK;AAAA;AAAA,MAUT,WAAU,gCAAS,UAAW,WAAW;AACjC,aAAK,MAAM,SAAS;AAAA,MACxB,GAFM;AAAA;AAAA,MAKV,gBAAe,gCAAS,iBAAiB;AACjC,eAAO,KAAK,eAAe;AAAA,MAC/B,GAFW;AAAA,MAGf,SAAS,EAAC,oBAAmB,KAAI;AAAA,MACjC,eAAe,gCAAS,UAAU,IAAG,KAAI,2BAA0B,UAAU;AAC7E,YAAI,UAAQ;AACZ,gBAAO,2BAA2B;AAAA,UAClC,KAAK;AAAG,iBAAK,MAAM,WAAW;AAAE,mBAAO;AACvC;AAAA,UACA,KAAK;AAAG,iBAAK,SAAS;AAAG,mBAAO;AAChC;AAAA,UACA,KAAK;AAAG,iBAAK,MAAM,WAAW;AAAE,mBAAO;AACvC;AAAA,UACA,KAAK;AAAG,iBAAK,SAAS;AAAG,mBAAO;AAChC;AAAA,UACA,KAAK;AAAG,iBAAK,MAAM,qBAAqB;AACxC;AAAA,UACA,KAAK;AAAG,iBAAK,SAAS;AACtB;AAAA,UACA,KAAK;AAAE,mBAAO;AACd;AAAA,UACA,KAAK;AAAE,mBAAO;AACd;AAAA,UACA,KAAK;AACL;AAAA,UACA,KAAK;AAAE,mBAAO;AACd;AAAA,UACA,KAAK;AAAG,mBAAO;AACf;AAAA,UACA,KAAK;AAAG,mBAAO;AACf;AAAA,UACA,KAAK;AAAG,mBAAO;AACf;AAAA,UACA,KAAK;AAAI,iBAAK,MAAM,OAAO;AAAG,mBAAO;AACrC;AAAA,UACA,KAAK;AAAG,mBAAO;AACf;AAAA,UACA,KAAK;AACL;AAAA,UACA,KAAK;AAAG,mBAAO;AACf;AAAA,UACA,KAAK;AAAG,mBAAO;AACf;AAAA,UACA,KAAK;AAAG,mBAAO;AACf;AAAA,UACA,KAAK;AAAG,mBAAO;AACf;AAAA,UACA,KAAK;AACL;AAAA,UACA,KAAK;AAAI,iBAAK,SAAS;AAAG,mBAAO;AACjC;AAAA,UACA,KAAK;AAAG,mBAAO,IAAI,OAAO,CAAC;AAC3B;AAAA,UACA,KAAK;AAAG,mBAAO;AACf;AAAA,UACA,KAAK;AAAG,mBAAO;AACf;AAAA,UACA,KAAK;AAAG,mBAAO;AACf;AAAA,UACA,KAAK;AAAG,mBAAO;AACf;AAAA,UACA,KAAK;AAAG,mBAAO;AACf;AAAA,UACA,KAAK;AAAG,mBAAO;AACf;AAAA,UACA,KAAK;AAAG,mBAAO;AACf;AAAA,UACA,KAAK;AAAG,mBAAO;AACf;AAAA,UACA,KAAK;AAAG,mBAAO;AACf;AAAA,UACA,KAAK;AAAG,mBAAO;AACf;AAAA,UACA,KAAK;AAAG,mBAAO;AACf;AAAA,UACA,KAAK;AAAG,mBAAO;AACf;AAAA,UACA,KAAK;AAAG,mBAAO;AACf;AAAA,UACA,KAAK;AAAG,mBAAO;AACf;AAAA,UACA,KAAK;AAAG,mBAAO;AACf;AAAA,UACA,KAAK;AAAG,mBAAO;AACf;AAAA,UACA,KAAK;AAAG,mBAAO;AACf;AAAA,UACA,KAAK;AAAG,mBAAO;AACf;AAAA,UACA,KAAK;AAAG,mBAAO;AACf;AAAA,UACA,KAAK;AAAG,mBAAO;AACf;AAAA,UACA,KAAK;AAAG,mBAAO;AACf;AAAA,UACA,KAAK;AAAG,mBAAO;AACf;AAAA,UACA,KAAK;AAAG,mBAAO;AACf;AAAA,UACA,KAAK;AAAG,mBAAO;AACf;AAAA,UACA,KAAK;AAAG,mBAAO;AACf;AAAA,UACA,KAAK;AAAG,mBAAO;AACf;AAAA,UACA,KAAK;AAAG,mBAAO;AACf;AAAA,UACA,KAAK;AAAG,mBAAO;AACf;AAAA,UACA,KAAK;AAAG,mBAAO;AACf;AAAA,UACA,KAAK;AAAG,mBAAO;AACf;AAAA,UACA,KAAK;AAAG,mBAAO;AACf;AAAA,UACA,KAAK;AAAG,mBAAO,IAAI,OAAO,CAAC;AAC3B;AAAA,UACA,KAAK;AAAG,mBAAO;AACf;AAAA,QACA;AAAA,MACA,GApHe;AAAA,MAqHf,OAAO,CAAC,yBAAwB,yBAAwB,yBAAwB,yBAAwB,0BAAyB,cAAa,gBAAe,eAAc,aAAY,eAAc,4BAA2B,iBAAgB,qBAAoB,YAAW,WAAU,aAAY,oCAAmC,2BAA0B,4CAA2C,iBAAgB,eAAc,YAAW,WAAU,YAAW,YAAW,uBAAsB,uBAAsB,uBAAsB,aAAY,eAAc,uBAAsB,wBAAuB,wBAAuB,aAAY,eAAc,mBAAkB,mBAAkB,gBAAe,cAAa,eAAc,oBAAmB,aAAY,cAAa,aAAY,aAAY,cAAa,gBAAe,cAAa,YAAW,cAAa,yBAAwB,aAAY,aAAY,kCAAiC,WAAU,SAAS;AAAA,MACv8B,YAAY,EAAC,uBAAsB,EAAC,SAAQ,CAAC,GAAE,CAAC,GAAE,aAAY,MAAK,GAAE,aAAY,EAAC,SAAQ,CAAC,CAAC,GAAE,aAAY,MAAK,GAAE,aAAY,EAAC,SAAQ,CAAC,CAAC,GAAE,aAAY,MAAK,GAAE,SAAQ,EAAC,SAAQ,CAAC,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,EAAE,GAAE,aAAY,MAAK,GAAE,WAAU,EAAC,SAAQ,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,EAAE,GAAE,aAAY,KAAI,EAAC;AAAA,IAC/X;AACA,WAAOA;AAAA,EACP,EAAG;AACH,EAAAD,QAAO,QAAQ;AACf,WAAS,SAAU;AACjB,SAAK,KAAK,CAAC;AAAA,EACb;AAFS;AAGT,SAAO,YAAYA;AAAO,EAAAA,QAAO,SAAS;AAC1C,SAAO,IAAI;AACX,EAAG;AACF,OAAO,SAAS;AAEhB,IAAO,oBAAQ;;;AC1xBhB,IAAI,WAAW,oBAAI,IAAI;AACvB,IAAI,gBAAgB,CAAC;AAErB,IAAM,cAAc;AAAA,EAClB,aAAa;AAAA,EACb,cAAc;AAAA,EACd,aAAa;AAAA,EACb,UAAU;AAAA,EACV,WAAW;AACb;AAEA,IAAM,iBAAiB;AAAA,EACrB,iBAAiB;AAAA,EACjB,aAAa;AACf;AAMA,IAAM,YAAY,gCAAU,MAAM,QAAQ,QAAW;AACnD,MAAI,CAAC,SAAS,IAAI,IAAI,GAAG;AACvB,aAAS,IAAI,MAAM,EAAE,YAAY,CAAC,GAAG,MAAM,CAAC;AAC5C,QAAI,KAAK,sBAAsB,IAAI;AAAA,EACrC,WAAW,CAAC,SAAS,IAAI,IAAI,EAAE,SAAS,OAAO;AAC7C,aAAS,IAAI,IAAI,EAAE,QAAQ;AAC3B,QAAI,KAAK,cAAc,KAAK,gBAAgB,IAAI,GAAG;AAAA,EACrD;AAEA,SAAO,SAAS,IAAI,IAAI;AAC1B,GAVkB;AAYlB,IAAM,cAAc,6BAAM,UAAN;AAEpB,IAAM,gBAAgB,gCAAU,YAAY,SAAS;AACnD,MAAI,SAAS,UAAU,UAAU;AAGjC,MAAI;AACJ,OAAK,IAAI,QAAQ,SAAS,GAAG,KAAK,GAAG,KAAK;AACxC,WAAO,WAAW,KAAK,QAAQ,CAAC,CAAC;AACjC,QAAI,MAAM,oBAAoB,QAAQ,CAAC,EAAE,aAAa;AAAA,EACxD;AACF,GATsB;AAmBtB,IAAM,kBAAkB,gCAAU,MAAM,MAAM,MAAM,OAAO;AACzD,MAAI,MAAM;AAAA,IACR,SAAS;AAAA,IACT,OAAO;AAAA,IACP,SAAS;AAAA,IACT,SAAS;AAAA,EACX;AAEA,gBAAc,KAAK,GAAG;AACtB,MAAI,MAAM,4BAA4B,GAAG;AAC3C,GAVwB;AAYxB,IAAM,mBAAmB,6BAAM,eAAN;AAEzB,IAAME,SAAQ,kCAAY;AACxB,aAAW,oBAAI,IAAI;AACnB,kBAAgB,CAAC;AACjB,QAAY;AACd,GAJc;AAMd,IAAO,eAAQ;AAAA,EACb;AAAA,EACA;AAAA,EACA,WAAW,6BAAM,UAAU,EAAE,IAAlB;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAAA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;;;ACtGA,YAAY,cAAc;AAC1B,SAAS,MAAM,YAAY,cAAc;AACzC,SAAS,UAAU,mBAAmB;;;ACFtC,IAAM,YAAY;AAAA,EAChB,gBAAgB;AAAA,EAChB,cAAc;AAAA,EACd,mBAAmB;AAAA,EACnB,iBAAiB;AAAA,EACjB,mBAAmB;AAAA,EACnB,iBAAiB;AAAA,EACjB,oBAAoB;AAAA,EACpB,kBAAkB;AAAA,EAClB,eAAe;AAAA,EACf,iBAAiB;AACnB;AAQA,IAAM,gBAAgB,gCAAU,MAAMC,OAAM;AAC1C,MAAI;AAEJ,OACG,OAAO,MAAM,EACb,OAAO,QAAQ,EACf,KAAK,MAAM,UAAU,eAAe,EACpC,KAAK,QAAQ,CAAC,EACd,KAAK,QAAQ,CAAC,EACd,KAAK,eAAe,GAAG,EACvB,KAAK,gBAAgB,GAAG,EACxB,KAAK,UAAU,MAAM,EACrB,OAAO,MAAM,EACb,KAAK,KAAK,0BAA0B;AAEvC,OACG,OAAO,MAAM,EACb,OAAO,QAAQ,EACf,KAAK,MAAM,UAAU,aAAa,EAClC,KAAK,QAAQ,EAAE,EACf,KAAK,QAAQ,CAAC,EACd,KAAK,eAAe,EAAE,EACtB,KAAK,gBAAgB,EAAE,EACvB,KAAK,UAAU,MAAM,EACrB,OAAO,MAAM,EACb,KAAK,KAAK,0BAA0B;AAEvC,OACG,OAAO,MAAM,EACb,OAAO,QAAQ,EACf,KAAK,MAAM,UAAU,cAAc,EACnC,KAAK,QAAQ,CAAC,EACd,KAAK,QAAQ,CAAC,EACd,KAAK,eAAe,EAAE,EACtB,KAAK,gBAAgB,EAAE,EACvB,KAAK,UAAU,MAAM,EACrB,OAAO,MAAM,EACb,KAAK,UAAUA,MAAK,MAAM,EAC1B,KAAK,QAAQ,MAAM,EACnB,KAAK,KAAK,yBAAyB;AAEtC,OACG,OAAO,MAAM,EACb,OAAO,QAAQ,EACf,KAAK,MAAM,UAAU,YAAY,EACjC,KAAK,QAAQ,EAAE,EACf,KAAK,QAAQ,CAAC,EACd,KAAK,eAAe,EAAE,EACtB,KAAK,gBAAgB,EAAE,EACvB,KAAK,UAAU,MAAM,EACrB,OAAO,MAAM,EACb,KAAK,UAAUA,MAAK,MAAM,EAC1B,KAAK,QAAQ,MAAM,EACnB,KAAK,KAAK,uBAAuB;AAEpC,WAAS,KACN,OAAO,MAAM,EACb,OAAO,QAAQ,EACf,KAAK,MAAM,UAAU,iBAAiB,EACtC,KAAK,QAAQ,CAAC,EACd,KAAK,QAAQ,CAAC,EACd,KAAK,eAAe,EAAE,EACtB,KAAK,gBAAgB,EAAE,EACvB,KAAK,UAAU,MAAM;AACxB,SACG,OAAO,QAAQ,EACf,KAAK,UAAUA,MAAK,MAAM,EAC1B,KAAK,QAAQ,OAAO,EACpB,KAAK,MAAM,EAAE,EACb,KAAK,MAAM,CAAC,EACZ,KAAK,KAAK,CAAC;AACd,SAAO,OAAO,MAAM,EAAE,KAAK,UAAUA,MAAK,MAAM,EAAE,KAAK,QAAQ,MAAM,EAAE,KAAK,KAAK,YAAY;AAE7F,WAAS,KACN,OAAO,MAAM,EACb,OAAO,QAAQ,EACf,KAAK,MAAM,UAAU,eAAe,EACpC,KAAK,QAAQ,EAAE,EACf,KAAK,QAAQ,CAAC,EACd,KAAK,eAAe,EAAE,EACtB,KAAK,gBAAgB,EAAE,EACvB,KAAK,UAAU,MAAM;AACxB,SACG,OAAO,QAAQ,EACf,KAAK,UAAUA,MAAK,MAAM,EAC1B,KAAK,QAAQ,OAAO,EACpB,KAAK,MAAM,CAAC,EACZ,KAAK,MAAM,CAAC,EACZ,KAAK,KAAK,CAAC;AACd,SAAO,OAAO,MAAM,EAAE,KAAK,UAAUA,MAAK,MAAM,EAAE,KAAK,QAAQ,MAAM,EAAE,KAAK,KAAK,cAAc;AAE/F,OACG,OAAO,MAAM,EACb,OAAO,QAAQ,EACf,KAAK,MAAM,UAAU,iBAAiB,EACtC,KAAK,QAAQ,EAAE,EACf,KAAK,QAAQ,EAAE,EACf,KAAK,eAAe,EAAE,EACtB,KAAK,gBAAgB,EAAE,EACvB,KAAK,UAAU,MAAM,EACrB,OAAO,MAAM,EACb,KAAK,UAAUA,MAAK,MAAM,EAC1B,KAAK,QAAQ,MAAM,EACnB,KAAK,KAAK,8CAA8C;AAE3D,OACG,OAAO,MAAM,EACb,OAAO,QAAQ,EACf,KAAK,MAAM,UAAU,eAAe,EACpC,KAAK,QAAQ,EAAE,EACf,KAAK,QAAQ,EAAE,EACf,KAAK,eAAe,EAAE,EACtB,KAAK,gBAAgB,EAAE,EACvB,KAAK,UAAU,MAAM,EACrB,OAAO,MAAM,EACb,KAAK,UAAUA,MAAK,MAAM,EAC1B,KAAK,QAAQ,MAAM,EACnB,KAAK,KAAK,0CAA0C;AAEvD,WAAS,KACN,OAAO,MAAM,EACb,OAAO,QAAQ,EACf,KAAK,MAAM,UAAU,kBAAkB,EACvC,KAAK,QAAQ,EAAE,EACf,KAAK,QAAQ,EAAE,EACf,KAAK,eAAe,EAAE,EACtB,KAAK,gBAAgB,EAAE,EACvB,KAAK,UAAU,MAAM;AACxB,SACG,OAAO,QAAQ,EACf,KAAK,UAAUA,MAAK,MAAM,EAC1B,KAAK,QAAQ,OAAO,EACpB,KAAK,MAAM,EAAE,EACb,KAAK,MAAM,EAAE,EACb,KAAK,KAAK,CAAC;AACd,SACG,OAAO,MAAM,EACb,KAAK,UAAUA,MAAK,MAAM,EAC1B,KAAK,QAAQ,MAAM,EACnB,KAAK,KAAK,+BAA+B;AAE5C,WAAS,KACN,OAAO,MAAM,EACb,OAAO,QAAQ,EACf,KAAK,MAAM,UAAU,gBAAgB,EACrC,KAAK,QAAQ,EAAE,EACf,KAAK,QAAQ,EAAE,EACf,KAAK,eAAe,EAAE,EACtB,KAAK,gBAAgB,EAAE,EACvB,KAAK,UAAU,MAAM;AACxB,SACG,OAAO,QAAQ,EACf,KAAK,UAAUA,MAAK,MAAM,EAC1B,KAAK,QAAQ,OAAO,EACpB,KAAK,MAAM,CAAC,EACZ,KAAK,MAAM,EAAE,EACb,KAAK,KAAK,CAAC;AACd,SACG,OAAO,MAAM,EACb,KAAK,UAAUA,MAAK,MAAM,EAC1B,KAAK,QAAQ,MAAM,EACnB,KAAK,KAAK,iCAAiC;AAE9C;AACF,GApKsB;AAsKtB,IAAO,oBAAQ;AAAA,EACb;AAAA,EACA;AACF;;;ADnLA,SAAS,MAAM,aAAa;AAG5B,IAAM,sBAAsB;AAG5B,IAAI,OAAO,CAAC;AAGZ,IAAI,gBAAgB,oBAAI,IAAI;AASrB,IAAM,UAAU,gCAAU,KAAK;AACpC,QAAM,OAAO,OAAO,KAAK,GAAG;AAC5B,aAAW,OAAO,MAAM;AACtB,SAAK,GAAG,IAAI,IAAI,GAAG;AAAA,EACrB;AACF,GALuB;AAiBvB,IAAM,iBAAiB,wBAAC,WAAW,gBAAgB,eAAe;AAChE,QAAM,gBAAgB,KAAK,gBAAgB;AAC3C,QAAM,eAAe,KAAK,gBAAgB;AAC1C,QAAM,eAAe,KAAK,WAAW;AACrC,QAAM,YAAY,eAAe,KAAK,EAAE,QAAQ;AAChD,QAAM,iBAAiB,CAAC;AACxB,MAAI,aAAa;AACjB,MAAI,aAAa;AACjB,MAAI,eAAe;AACnB,MAAI,eAAe;AACnB,MAAI,cAAc;AAClB,MAAI,kBAAkB;AACtB,MAAI,mBAAmB,UAAU,SAAS,gBAAgB;AAC1D,MAAI,UAAU;AAGd,aAAW,QAAQ,CAAC,SAAS;AAC3B,QAAI,KAAK,yBAAyB,UAAa,KAAK,qBAAqB,SAAS,GAAG;AACnF,mBAAa;AAAA,IACf;AAEA,QAAI,KAAK,qBAAqB,QAAW;AACvC,mBAAa;AAAA,IACf;AAAA,EACF,CAAC;AAED,aAAW,QAAQ,CAAC,SAAS;AAC3B,UAAM,aAAa,GAAG,eAAe,KAAK,EAAE,EAAE,SAAS,OAAO;AAC9D,QAAI,aAAa;AAEjB,UAAM,gBAAgB,kBAAkB,KAAK,aAAa;AAG1D,UAAM,WAAW,UACd,OAAO,MAAM,EACb,QAAQ,kBAAkB,IAAI,EAC9B,KAAK,MAAM,GAAG,UAAU,OAAO,EAC/B,KAAK,KAAK,CAAC,EACX,KAAK,KAAK,CAAC,EACX,MAAM,qBAAqB,QAAQ,EACnC,MAAM,eAAe,MAAM,EAC3B,MAAM,eAAe,UAAU,EAAE,UAAU,EAC3C,MAAM,aAAa,eAAe,IAAI,EACtC,KAAK,aAAa;AAGrB,UAAM,WAAW,UACd,OAAO,MAAM,EACb,QAAQ,kBAAkB,IAAI,EAC9B,KAAK,MAAM,GAAG,UAAU,OAAO,EAC/B,KAAK,KAAK,CAAC,EACX,KAAK,KAAK,CAAC,EACX,MAAM,qBAAqB,QAAQ,EACnC,MAAM,eAAe,MAAM,EAC3B,MAAM,eAAe,UAAU,EAAE,UAAU,EAC3C,MAAM,aAAa,eAAe,IAAI,EACtC,KAAK,KAAK,aAAa;AAE1B,UAAM,gBAAgB,CAAC;AACvB,kBAAc,KAAK;AACnB,kBAAc,KAAK;AAEnB,UAAM,WAAW,SAAS,KAAK,EAAE,QAAQ;AACzC,UAAM,WAAW,SAAS,KAAK,EAAE,QAAQ;AACzC,mBAAe,KAAK,IAAI,cAAc,SAAS,KAAK;AACpD,mBAAe,KAAK,IAAI,cAAc,SAAS,KAAK;AAEpD,iBAAa,KAAK,IAAI,SAAS,QAAQ,SAAS,MAAM;AAEtD,QAAI,YAAY;AACd,YAAM,kBACJ,KAAK,yBAAyB,SAAY,KAAK,qBAAqB,KAAK,GAAG,IAAI;AAElF,YAAM,cAAc,UACjB,OAAO,MAAM,EACb,QAAQ,kBAAkB,IAAI,EAC9B,KAAK,MAAM,GAAG,UAAU,MAAM,EAC9B,KAAK,KAAK,CAAC,EACX,KAAK,KAAK,CAAC,EACX,MAAM,qBAAqB,QAAQ,EACnC,MAAM,eAAe,MAAM,EAC3B,MAAM,eAAe,UAAU,EAAE,UAAU,EAC3C,MAAM,aAAa,eAAe,IAAI,EACtC,KAAK,eAAe;AAEvB,oBAAc,KAAK;AACnB,YAAM,cAAc,YAAY,KAAK,EAAE,QAAQ;AAC/C,oBAAc,KAAK,IAAI,aAAa,YAAY,KAAK;AACrD,mBAAa,KAAK,IAAI,YAAY,YAAY,MAAM;AAAA,IACtD;AAEA,QAAI,YAAY;AACd,YAAM,cAAc,UACjB,OAAO,MAAM,EACb,QAAQ,kBAAkB,IAAI,EAC9B,KAAK,MAAM,GAAG,UAAU,UAAU,EAClC,KAAK,KAAK,CAAC,EACX,KAAK,KAAK,CAAC,EACX,MAAM,qBAAqB,QAAQ,EACnC,MAAM,eAAe,MAAM,EAC3B,MAAM,eAAe,UAAU,EAAE,UAAU,EAC3C,MAAM,aAAa,eAAe,IAAI,EACtC,KAAK,KAAK,oBAAoB,EAAE;AAEnC,oBAAc,KAAK;AACnB,YAAM,kBAAkB,YAAY,KAAK,EAAE,QAAQ;AACnD,wBAAkB,KAAK,IAAI,iBAAiB,gBAAgB,KAAK;AACjE,mBAAa,KAAK,IAAI,YAAY,gBAAgB,MAAM;AAAA,IAC1D;AAEA,kBAAc,SAAS;AAEvB,mBAAe,KAAK,aAAa;AACjC,wBAAoB,aAAa,gBAAgB;AACjD,eAAW;AAAA,EACb,CAAC;AAED,MAAI,qBAAqB;AACzB,MAAI,YAAY;AACd,0BAAsB;AAAA,EACxB;AACA,MAAI,YAAY;AACd,0BAAsB;AAAA,EACxB;AAEA,QAAM,WAAW,eAAe,eAAe,cAAc;AAG7D,QAAM,OAAO;AAAA,IACX,OAAO,KAAK;AAAA,MACV,KAAK;AAAA,MACL,KAAK;AAAA,QACH,UAAU,QAAQ,KAAK,gBAAgB;AAAA,QACvC,WAAW,eAAe;AAAA,MAC5B;AAAA,IACF;AAAA,IACA,QACE,WAAW,SAAS,IAChB,mBACA,KAAK,IAAI,KAAK,iBAAiB,UAAU,SAAS,KAAK,gBAAgB,CAAC;AAAA,EAChF;AAEA,MAAI,WAAW,SAAS,GAAG;AAEzB,UAAM,mBAAmB,KAAK;AAAA,MAC5B;AAAA,OACC,KAAK,QAAQ,WAAW,eAAe,uBAAuB,qBAAqB;AAAA,IACtF;AAGA,mBAAe;AAAA,MACb;AAAA,MACA,eAAe,KAAK,QAAQ,IAAI,OAAO,gBAAgB,UAAU,SAAS,KAAK;AAAA,IACjF;AAGA,QAAI,eAAe,UAAU,SAAS,gBAAgB;AACtD,QAAI,cAAc;AAElB,mBAAe,QAAQ,CAAC,kBAAkB;AAExC,YAAM,SAAS,eAAe,gBAAgB,cAAc,SAAS;AAGrE,oBAAc,GAAG,KAAK,aAAa,eAAe,eAAe,MAAM,SAAS,GAAG;AAInF,YAAM,WAAW,UACd,OAAO,QAAQ,MAAM,cAAc,GAAG,KAAK,EAAE,EAAE,EAC/C,QAAQ,MAAM,WAAW,IAAI,IAAI,EACjC,KAAK,KAAK,CAAC,EACX,KAAK,KAAK,YAAY,EACtB,KAAK,SAAS,eAAe,eAAe,IAAI,gBAAgB,EAChE,KAAK,UAAU,cAAc,SAAS,gBAAgB,CAAC;AAE1D,YAAM,cAAc,WAAW,SAAS,KAAK,GAAG,CAAC,IAAI,WAAW,SAAS,KAAK,OAAO,CAAC;AAGtF,oBAAc,GAAG;AAAA,QACf;AAAA,QACA,gBAAgB,cAAc,gBAAgB,MAAM,SAAS;AAAA,MAC/D;AAGA,YAAM,WAAW,UACd,OAAO,QAAQ,MAAM,cAAc,GAAG,KAAK,EAAE,EAAE,EAC/C,QAAQ,MAAM,WAAW,IAAI,IAAI,EACjC,KAAK,KAAK,WAAW,EACrB,KAAK,KAAK,YAAY,EACtB,KAAK,SAAS,eAAe,eAAe,IAAI,gBAAgB,EAChE,KAAK,UAAU,cAAc,SAAS,gBAAgB,CAAC;AAE1D,UAAI,2BACF,WAAW,SAAS,KAAK,GAAG,CAAC,IAAI,WAAW,SAAS,KAAK,OAAO,CAAC;AAEpE,UAAI,YAAY;AAEd,sBAAc,GAAG;AAAA,UACf;AAAA,UACA,gBAAgB,2BAA2B,gBAAgB,MAAM,SAAS;AAAA,QAC5E;AAGA,cAAM,cAAc,UACjB,OAAO,QAAQ,MAAM,cAAc,GAAG,KAAK,EAAE,EAAE,EAC/C,QAAQ,MAAM,WAAW,IAAI,IAAI,EACjC,KAAK,KAAK,wBAAwB,EAClC,KAAK,KAAK,YAAY,EACtB,KAAK,SAAS,cAAc,eAAe,IAAI,gBAAgB,EAC/D,KAAK,UAAU,cAAc,SAAS,gBAAgB,CAAC;AAE1D,mCACE,WAAW,YAAY,KAAK,GAAG,CAAC,IAAI,WAAW,YAAY,KAAK,OAAO,CAAC;AAAA,MAC5E;AAEA,UAAI,YAAY;AAEd,sBAAc,GAAG;AAAA,UACf;AAAA,UACA,gBAAgB,2BAA2B,gBAAgB,MAAM,SAAS;AAAA,QAC5E;AAGA,kBACG,OAAO,QAAQ,MAAM,cAAc,GAAG,KAAK,EAAE,EAAE,EAC/C,QAAQ,MAAM,WAAW,IAAI,MAAM,EACnC,KAAK,KAAK,wBAAwB,EAClC,KAAK,KAAK,YAAY,EACtB,KAAK,SAAS,kBAAkB,eAAe,IAAI,gBAAgB,EACnE,KAAK,UAAU,cAAc,SAAS,gBAAgB,CAAC;AAAA,MAC5D;AAGA,sBAAgB,cAAc,SAAS,gBAAgB;AAGvD,oBAAc,gBAAgB,oBAAoB,qBAAqB;AAAA,IACzE,CAAC;AAAA,EACH,OAAO;AAEL,SAAK,SAAS,KAAK,IAAI,KAAK,iBAAiB,gBAAgB;AAG7D,mBAAe,KAAK,aAAa,eAAe,KAAK,QAAQ,IAAI,MAAM,KAAK,SAAS,IAAI,GAAG;AAAA,EAC9F;AAEA,SAAO;AACT,GAxPuB;AAkQvB,IAAM,eAAe,gCAAU,SAASC,WAAU,OAAO;AACvD,QAAM,OAAO,CAAC,GAAGA,UAAS,KAAK,CAAC;AAChC,MAAI;AAEJ,OAAK,QAAQ,SAAU,YAAY;AACjC,UAAM,WAAW,WAAW,YAAY,QAAQ;AAChD,kBAAc,IAAI,YAAY,QAAQ;AAGtC,UAAM,YAAY,QAAQ,OAAO,GAAG,EAAE,KAAK,MAAM,QAAQ;AAEzD,eAAW,aAAa,SAAY,WAAW;AAI/C,UAAM,SAAS,UAAU;AACzB,UAAM,WAAW,UACd,OAAO,MAAM,EACb,QAAQ,kBAAkB,IAAI,EAC9B,KAAK,MAAM,MAAM,EACjB,KAAK,KAAK,CAAC,EACX,KAAK,KAAK,CAAC,EACX,MAAM,qBAAqB,QAAQ,EACnC,MAAM,eAAe,QAAQ,EAC7B,MAAM,eAAe,UAAU,EAAE,UAAU,EAC3C,MAAM,aAAa,KAAK,WAAW,IAAI,EACvC,KAAKA,UAAS,IAAI,UAAU,EAAE,SAAS,UAAU;AAEpD,UAAM,EAAE,OAAO,aAAa,QAAQ,aAAa,IAAI;AAAA,MACnD;AAAA,MACA;AAAA,MACAA,UAAS,IAAI,UAAU,EAAE;AAAA,IAC3B;AAGA,UAAM,WAAW,UACd,OAAO,QAAQ,MAAM,MAAM,EAC3B,QAAQ,gBAAgB,IAAI,EAC5B,KAAK,KAAK,CAAC,EACX,KAAK,KAAK,CAAC,EACX,KAAK,SAAS,WAAW,EACzB,KAAK,UAAU,YAAY;AAE9B,UAAM,WAAW,SAAS,KAAK,EAAE,QAAQ;AAGzC,UAAM,QAAQ,UAAU;AAAA,MACtB,OAAO,SAAS;AAAA,MAChB,QAAQ,SAAS;AAAA,MACjB,OAAO;AAAA,MACP,IAAI;AAAA,IACN,CAAC;AAAA,EACH,CAAC;AACD,SAAO;AACT,GAtDqB;AAwDrB,IAAM,iBAAiB,gCAAU,SAAS,OAAO;AAC/C,QAAM,MAAM,EAAE,QAAQ,SAAU,GAAG;AACjC,QAAI,MAAM,UAAa,MAAM,KAAK,CAAC,MAAM,QAAW;AAClD,cACG,OAAO,MAAM,CAAC,EACd;AAAA,QACC;AAAA,QACA,gBACG,MAAM,KAAK,CAAC,EAAE,IAAI,MAAM,KAAK,CAAC,EAAE,QAAQ,KACzC,OACC,MAAM,KAAK,CAAC,EAAE,IAAI,MAAM,KAAK,CAAC,EAAE,SAAS,KAC1C;AAAA,MACJ;AAAA,IACJ;AAAA,EACF,CAAC;AACH,GAfuB;AAyBvB,IAAM,cAAc,gCAAU,KAAK;AACjC,UAAQ,IAAI,UAAU,IAAI,QAAQ,IAAI,SAAS,QAAQ,OAAO,EAAE;AAClE,GAFoB;AAWpB,IAAM,mBAAmB,gCAAUC,gBAAe,GAAG;AACnD,EAAAA,eAAc,QAAQ,SAAU,GAAG;AACjC,MAAE;AAAA,MACA,cAAc,IAAI,EAAE,OAAO;AAAA,MAC3B,cAAc,IAAI,EAAE,OAAO;AAAA,MAC3B,EAAE,cAAc,EAAE;AAAA,MAClB,YAAY,CAAC;AAAA,IACf;AAAA,EACF,CAAC;AACD,SAAOA;AACT,GAVyB;AAYzB,IAAI,SAAS;AAWb,IAAM,6BAA6B,gCAAU,KAAK,KAAK,GAAG,QAAQ,SAAS;AACzE;AAGA,QAAM,OAAO,EAAE;AAAA,IACb,cAAc,IAAI,IAAI,OAAO;AAAA,IAC7B,cAAc,IAAI,IAAI,OAAO;AAAA,IAC7B,YAAY,GAAG;AAAA,EACjB;AAGA,QAAM,eAAe,KAAK,EACvB,EAAE,SAAU,GAAG;AACd,WAAO,EAAE;AAAA,EACX,CAAC,EACA,EAAE,SAAU,GAAG;AACd,WAAO,EAAE;AAAA,EACX,CAAC,EACA,MAAM,UAAU;AAGnB,QAAM,UAAU,IACb,OAAO,QAAQ,MAAM,MAAM,EAC3B,QAAQ,uBAAuB,IAAI,EACnC,KAAK,KAAK,aAAa,KAAK,MAAM,CAAC,EACnC,MAAM,UAAU,KAAK,MAAM,EAC3B,MAAM,QAAQ,MAAM;AAGvB,MAAI,IAAI,QAAQ,YAAY,QAAQ,GAAG,eAAe,iBAAiB;AACrE,YAAQ,KAAK,oBAAoB,KAAK;AAAA,EACxC;AAGA,MAAI,MAAM;AACV,MAAI,KAAK,qBAAqB;AAC5B,UACE,OAAO,SAAS,WAChB,OACA,OAAO,SAAS,OAChB,OAAO,SAAS,WAChB,OAAO,SAAS;AAClB,UAAM,IAAI,QAAQ,OAAO,KAAK;AAC9B,UAAM,IAAI,QAAQ,OAAO,KAAK;AAAA,EAChC;AAMA,UAAQ,IAAI,QAAQ,OAAO;AAAA,IACzB,KAAK,QAAQ,GAAG,YAAY;AAC1B,cAAQ,KAAK,cAAc,SAAS,MAAM,MAAM,kBAAU,UAAU,kBAAkB,GAAG;AACzF;AAAA,IACF,KAAK,QAAQ,GAAG,YAAY;AAC1B,cAAQ,KAAK,cAAc,SAAS,MAAM,MAAM,kBAAU,UAAU,mBAAmB,GAAG;AAC1F;AAAA,IACF,KAAK,QAAQ,GAAG,YAAY;AAC1B,cAAQ,KAAK,cAAc,SAAS,MAAM,MAAM,kBAAU,UAAU,kBAAkB,GAAG;AACzF;AAAA,IACF,KAAK,QAAQ,GAAG,YAAY;AAC1B,cAAQ,KAAK,cAAc,SAAS,MAAM,MAAM,kBAAU,UAAU,eAAe,GAAG;AACtF;AAAA,IACF,KAAK,QAAQ,GAAG,YAAY;AAC1B,cAAQ,KAAK,cAAc,SAAS,MAAM,MAAM,kBAAU,UAAU,gBAAgB,GAAG;AACvF;AAAA,EACJ;AAEA,UAAQ,IAAI,QAAQ,OAAO;AAAA,IACzB,KAAK,QAAQ,GAAG,YAAY;AAC1B,cAAQ;AAAA,QACN;AAAA,QACA,SAAS,MAAM,MAAM,kBAAU,UAAU,oBAAoB;AAAA,MAC/D;AACA;AAAA,IACF,KAAK,QAAQ,GAAG,YAAY;AAC1B,cAAQ;AAAA,QACN;AAAA,QACA,SAAS,MAAM,MAAM,kBAAU,UAAU,qBAAqB;AAAA,MAChE;AACA;AAAA,IACF,KAAK,QAAQ,GAAG,YAAY;AAC1B,cAAQ;AAAA,QACN;AAAA,QACA,SAAS,MAAM,MAAM,kBAAU,UAAU,oBAAoB;AAAA,MAC/D;AACA;AAAA,IACF,KAAK,QAAQ,GAAG,YAAY;AAC1B,cAAQ,KAAK,gBAAgB,SAAS,MAAM,MAAM,kBAAU,UAAU,iBAAiB,GAAG;AAC1F;AAAA,IACF,KAAK,QAAQ,GAAG,YAAY;AAC1B,cAAQ,KAAK,gBAAgB,SAAS,MAAM,MAAM,kBAAU,UAAU,kBAAkB,GAAG;AAC3F;AAAA,EACJ;AAKA,QAAM,MAAM,QAAQ,KAAK,EAAE,eAAe;AAC1C,QAAM,aAAa,QAAQ,KAAK,EAAE,iBAAiB,MAAM,GAAG;AAG5D,QAAM,UAAU,QAAQ;AAExB,QAAM,YAAY,IAAI,MAAM,MAAM,WAAW;AAE7C,QAAM,YAAY,IACf,OAAO,MAAM,EACb,QAAQ,wBAAwB,IAAI,EACpC,KAAK,MAAM,OAAO,EAClB,KAAK,KAAK,WAAW,CAAC,EACtB,KAAK,KAAK,WAAW,CAAC,EACtB,MAAM,eAAe,QAAQ,EAC7B,MAAM,qBAAqB,QAAQ,EACnC,MAAM,eAAe,UAAU,EAAE,UAAU,EAC3C,MAAM,aAAa,KAAK,WAAW,IAAI;AAE1C,MAAI,UAAU,UAAU,GAAG;AACzB,cAAU,KAAK,IAAI,KAAK;AAAA,EAC1B,OAAO;AACL,UAAM,aAAa,EAAE,UAAU,SAAS,KAAK;AAC7C,cAAU,QAAQ,CAAC,KAAK,MAAM;AAC5B,gBACG,OAAO,OAAO,EACd,KAAK,KAAK,WAAW,CAAC,EACtB,KAAK,MAAM,GAAG,MAAM,IAAI,aAAa,CAAC,IAAI,EAC1C,KAAK,GAAG;AAAA,IACb,CAAC;AAAA,EACH;AAGA,QAAM,YAAY,UAAU,KAAK,EAAE,QAAQ;AAG3C,MACG,OAAO,QAAQ,MAAM,OAAO,EAC5B,QAAQ,2BAA2B,IAAI,EACvC,KAAK,KAAK,WAAW,IAAI,UAAU,QAAQ,CAAC,EAC5C,KAAK,KAAK,WAAW,IAAI,UAAU,SAAS,CAAC,EAC7C,KAAK,SAAS,UAAU,KAAK,EAC7B,KAAK,UAAU,UAAU,MAAM;AACpC,GA7ImC;AAuJ5B,IAAM,OAAO,gCAAU,MAAM,IAAI,UAAU,SAAS;AACzD,SAAO,UAAU,EAAE;AACnB,MAAI,KAAK,oBAAoB;AAC7B,QAAM,gBAAgB,UAAU,EAAE;AAElC,MAAI;AACJ,MAAI,kBAAkB,WAAW;AAC/B,qBAAiB,OAAO,OAAO,EAAE;AAAA,EACnC;AACA,QAAM,OACJ,kBAAkB,YACd,OAAO,eAAe,MAAM,EAAE,CAAC,EAAE,gBAAgB,IAAI,IACrD,OAAO,MAAM;AAInB,QAAM,MAAM,KAAK,OAAO,QAAQ,EAAE,IAAI;AAGtC,oBAAU,cAAc,KAAK,IAAI;AAiBjC,MAAI;AAOJ,MAAI,IAAa,eAAM;AAAA,IACrB,YAAY;AAAA,IACZ,UAAU;AAAA,IACV,UAAU;AAAA,EACZ,CAAC,EACE,SAAS;AAAA,IACR,SAAS,KAAK;AAAA,IACd,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,EACX,CAAC,EACA,oBAAoB,WAAY;AAC/B,WAAO,CAAC;AAAA,EACV,CAAC;AAIH,QAAM,cAAc,aAAa,KAAK,QAAQ,GAAG,YAAY,GAAG,CAAC;AAKjE,QAAMA,iBAAgB,iBAAiB,QAAQ,GAAG,iBAAiB,GAAG,CAAC;AAEvE,cAAY,CAAC;AAGb,iBAAe,KAAK,CAAC;AAGrB,EAAAA,eAAc,QAAQ,SAAU,KAAK;AACnC,+BAA2B,KAAK,KAAK,GAAG,aAAa,OAAO;AAAA,EAC9D,CAAC;AAED,QAAM,UAAU,KAAK;AAErB,gBAAM,YAAY,KAAK,mBAAmB,KAAK,gBAAgB,QAAQ,GAAG,gBAAgB,CAAC;AAE3F,QAAM,YAAY,IAAI,KAAK,EAAE,QAAQ;AACrC,QAAM,QAAQ,UAAU,QAAQ,UAAU;AAC1C,QAAM,SAAS,UAAU,SAAS,UAAU;AAE5C,mBAAiB,KAAK,QAAQ,OAAO,KAAK,WAAW;AAErD,MAAI,KAAK,WAAW,GAAG,UAAU,IAAI,OAAO,IAAI,UAAU,IAAI,OAAO,IAAI,KAAK,IAAI,MAAM,EAAE;AAC5F,GA1FoB;AAyGpB,IAAM,yBAAyB;AAaxB,SAAS,WAAW,MAAM,IAAI,SAAS,IAAI;AAChD,QAAM,gBAAgB,IAAI,QAAQ,qBAAqB,EAAE;AAEzD,SAAO,GAAG,cAAc,MAAM,CAAC,GAAG,cAAc,aAAa,CAAC,GAAG;AAAA,IAC/D;AAAA,IACA;AAAA,EACF,CAAC;AACH;AAPgB;AAgBhB,SAAS,cAAc,MAAM,IAAI;AAC/B,SAAO,IAAI,SAAS,IAAI,GAAG,GAAG,MAAM;AACtC;AAFS;AAIT,IAAO,qBAAQ;AAAA,EACb;AAAA,EACA;AACF;;;AErsBA,IAAM,YAAY,wBAAC,YACjB;AAAA;AAAA,YAEU,QAAQ,OAAO;AAAA,cACb,QAAQ,UAAU;AAAA;AAAA;AAAA;AAAA,YAIpB,QAAQ,2BAA2B;AAAA,cACjC,QAAQ,UAAU;AAAA;AAAA;AAAA;AAAA,aAInB,QAAQ,4BAA4B;AAAA,cACnC,QAAQ,UAAU;AAAA;AAAA;AAAA;AAAA,YAIpB,QAAQ,aAAa;AAAA;AAAA,wBAET,QAAQ,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAO7B,QAAQ,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAMrB,QAAQ,SAAS;AAAA;AAAA;AAAA;AAAA,cAIf,QAAQ,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA,cAKjB,QAAQ,SAAS;AAAA;AAAA;AAAA;AAAA,GA1Cb;AAgDlB,IAAO,iBAAQ;;;AC1CR,IAAM,UAAU;AAAA,EACrB,QAAQ;AAAA,EACR,IAAI;AAAA,EACJ,UAAU;AAAA,EACV,QAAQ;AACV;", "names": ["o", "parser", "lexer", "clear", "conf", "entities", "relationships"] }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy